Is your feature request related to a problem? Please describe.
I noticed that when I call Texture.readPixels() on a 3D texture, it only returns a buffer containing top 2D slice of pixel data. In the linked example, I create a 2x2x2 3D texture a fill it iteratively with data. I then log the data array and see the expected 2 x 2 x 2 x 4 = 32 data points. After the data is fed to a RawTexture3D, I read the textures pixels but only see the first 16 data points.
According to @Evgeni_Popov, reading anything other than the top layer of a 3D texture is not supported.
Describe the solution you’d like
I need some way of accessing all the pixel data in a 3D texture. This could be achieved by either updating the current BaseTexture.readPixels() method to return all (or specified) layers of the 3D texture or creating a new RawTexture3D.readPixels3D() method on Rawtexture3D. I would lean toward updating BaseTexture.readPixels() or even creating a new method on BaseTexture that could bring 2D, 2DArray, and 3D textures to parity. Below is an example of such a method.
readPixelData(faceIndex?: number, level?: number, buffer?: Nullable<ArrayBufferView>, flushRenderer?: boolean, noDataConversion?: boolean, x?: number, y?: number, z?: number, width?: number, height?: number, depth?: number): Nullable<Promise<ArrayBufferView>>
https://doc.babylonjs.com/typedoc/classes/BABYLON.BaseTexture#readPixels
Discussion
*Ported From GitHub