Sorry, something went wrong.
|
took some 3d movie gen code from caiman to generate a 3d movie: 3d-2025-04-12_03.09.08.mp4 |
Sorry, something went wrong.
|
File [~\repos\fastplotlib\fastplotlib\graphics\features\_image.py:147](http://localhost:8888/lab/tree/demos/notebooks/~/repos/fastplotlib/fastplotlib/graphics/features/_image.py#line=146), in TextureArray._fix_data(self, data)
145 def _fix_data(self, data):
146 if data.ndim not in (2, 3):
--> 147 raise ValueError(
148 "image data must be 2D with or without an RGB(A) dimension, i.e. "
149 "it must be of shape [rows, cols], [rows, cols, 3] or [rows, cols, 4]"
150 )
152 # let's just cast to float32 always
153 return data.astype(np.float32)
ValueError: image data must be 2D with or without an RGB(A) dimension, i.e. it must be of shape [rows, cols], [rows, cols, 3] or [rows, cols, 4]
data = np.random.randn(50, 2, 448, 448)
data.shape
>> (50, 2, 448, 448)
The ability to view a time-series with a 4th dimension would be nice here |
Sorry, something went wrong.
|
Also how difficult is something like scale=[1, 4, 1] to account for anisotropy in XY and Z? Here I have a volume of [14, 448, 448] ZXY, but from the side its a flat plane. This dataset is [2um x 2um x 17um] |
Sorry, something went wrong.
|
Also how difficult is something like scale=[1, 4, 1] to account for anisotropy in XY and Z? Here I have a volume of [14, 448, 448] ZXY, but from the side its a flat plane. This dataset is [2um x 2um x 17um] nevermind :) volume.world_object.world.scale_z = 15.0
Some other helpful tidbits: hlut = fpl.HistogramLUTTool(volume.data.value, volume)
volume.interpolation = "linear"
volume.cmap = "gnuplot2"
fig[0, 0].docks["right"].add_graphic(hlut)
fig[0, 0].docks["right"].size = 80
fig[0, 0].docks["right"].controller.enabled = False
fig[0, 0].docks["right"].camera.maintain_aspect = False
fig[0, 0].docks["right"].auto_scale(maintain_aspect=False)
|
Sorry, something went wrong.
|
@almarklein are RGB volumes supported? Is it even a thing? Yes, looks like it is; it uses the same logic (in the shader) as the image. I have never encountered it in the wild though. |
Sorry, something went wrong.
|
ok all the basics are down, switchable materials, can change material props: vol-2025-06-04_03.34.28.mp4Need to figure out why regex is turning VolumeSliceMaterial into slic instead of slice |
Sorry, something went wrong.
|
In other news, the latest pycharm is full of bugs, wtf is this. Also it wanted to auto insert the old rst structured docstring template even though I configured it to do numpydoc format 🤮 |
Sorry, something went wrong.
|
All that's left is tests, 2D over time example, and RGB(A) examples. I also think I want to merge #849 and then rebase this so the examples will be much simpler. Also pygfx has non-orthogonal slicing: vol_slicing-2025-06-05_00.53.40.mp4 |
Sorry, something went wrong.
|
ok there's a bug in the TextureArray or tiling somewhere, because when a dim is greater than the limit it is tiling along the wrong dim 😆 |
Sorry, something went wrong.
|
The rendering at the edges is weird if one of the dims is larger than the 3d texture size limit so let's just not support this, I think the uses are very much rare edge cases. Also if the 3d texture size limit is 16,383, then 16384x16384x16384 with float32 is 17 TB which is more than any GPU that I know of can handle 😂 . |
Sorry, something went wrong.
|
📚 Docs preview built and uploaded! https://www.fastplotlib.org/ver/volume-image |
Sorry, something went wrong.
|
More tests for the TextureArray for volumes would be nice, but can do that later. I think tiling of volume is a rare edge case so if there is a bug it will affect very rare usecases not already covered by the tests. |
Sorry, something went wrong.
There was a problem hiding this comment.
Just some small comments, otherwise looks good to me
Very cool stuff!
Sorry, something went wrong.
|
Amazing! @kushalkolar I'll test this out! |
Sorry, something went wrong.
|
@clewis7 gtg! 🥳 and then we can merge #904 once I make new ground truth screenshots for that and then #883 |
Sorry, something went wrong.
actually going to merge it this time
@almarklein are RGB volumes supported? Is it even a thing?
selector tools for slicing, cube slicing, etc., non-orthogonal slicing to come later
note: implementing ImageVolumeGraphic as a subclass of ImageGraphic wasn't a good idea because the __init__ gets messy. Might make a BaseImageGraphic class which just has properties which are almost identical between ImageGraphic and ImageVolumeGraphic, but not a big deal right now.