-
Notifications
You must be signed in to change notification settings - Fork 57
add ImageVolumeGraphic
#791
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
ce9c197 to
b2b9b10
Compare
|
took some 3d movie gen code from caiman to generate a 3d movie: 3d-2025-04-12_03.09.08.mp4 |
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 |
nevermind :) volume.world_object.world.scale_z = 15.0Some 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 = 80fig[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) |
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. |
|
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 |
|
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 |
|
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 😂 . |
|
📚 Docs preview built and uploaded! https://www.fastplotlib.org/ver/volume-image |
|
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. |
clewis7
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just some small comments, otherwise looks good to me
Very cool stuff!
|
Amazing! @kushalkolar I'll test this out! |




actually going to merge it this time
TextureArrayssupports 3D texturesImageVolumeGraphicmake this work with, image widget is a mess, need to refactor iw before adding volume supportImageWidgetgraphics.imagescripts/generate_add_graphic_methods.pyis better, removedGraphic.typeattribute which was only used in the generate mixin script and use regex instead to create theadd_<graphic>method names.@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
ImageVolumeGraphicas a subclass ofImageGraphicwasn't a good idea because the__init__gets messy. Might make aBaseImageGraphicclass which just has properties which are almost identical betweenImageGraphicandImageVolumeGraphic, but not a big deal right now.