-
Notifications
You must be signed in to change notification settings - Fork 53
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
base: main
Are you sure you want to change the base?
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.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) |
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 😂 . |
actually going to merge it this time
TextureArrays
supports 3D texturesImageVolumeGraphic
make this work with, image widget is a mess, need to refactor iw before adding volume supportImageWidget
graphics.image
scripts/generate_add_graphic_methods.py
is better, removedGraphic.type
attribute 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
ImageVolumeGraphic
as a subclass ofImageGraphic
wasn't a good idea because the__init__
gets messy. Might make aBaseImageGraphic
class which just has properties which are almost identical betweenImageGraphic
andImageVolumeGraphic
, but not a big deal right now.