@muratmaga@pieper For convenience, you may download the library libvtkOpenGL-9.2.so.9.2 from this folder and replace the one found in the install folder associated with Slicer-5.5.0-2023-10-16-linux-amd64.
This should allow to easily confirm everything work as excepted.
Yes you can select the last point and then change its value using the spinner. I always want to change the last value to 1. Wondering if this on purpose. Paraview has a similar interface and I believe that the first and last values can be moved up and down with the mouse.
A few things come to mind. The nice thing about this kind of technique is that there’s a cleaner break between medical data (the CT data) and graphical primitives (colored regions and volumetric detail) than in strict volume rendering.
In volume rendering, graphics and segmentation are all kind of smushed together. When we have good segmentation algorithms, we should use them instead of counting on the soft thresholding of scalars and gradients that volume rendering provide.
This technique allows us to push volumetric-like graphical properties into segmented scenes. And it looks great.
Some possible extensions:
instead of using CT, any scalar volume could be used. This could, for instance, but a synthetic volume computed from anything (like from multi-channel MR corrected for field inhomogeneities)
surface detail such as texture on bone might be able to be captured back into normal maps or bump maps for the surface segmentation.
It would be interesting to have a rendering model with a final 3D representation that was simpler than a full-blown volume rendering model that could be recolored but still look lovely. 3D point clouds and Gaussian splatting come to mind, with the colorizing of the points deferred until final 3D to 2D rendering.
We can use any imaging modality, as the background opacity is automatically reduced (you can choose by how much). It would be nice if someone could post rendering of some segmented MRIs.
I agree, this could be a nice improvement on the state of the art surface rendering using fake textures (designers download some textures and normal/bump maps and apply it on the models to make them look more “realistic”).
Volume rendering is still better in that you can see through thick semi-transparent objects, but I admit that usually it is not necessary to see very deeply inside or through objects.
Interesting. Are point clouds or Gaussian splatting faster or simpler to do on current GPU hardware than raycasting?
Click Default for lighting, disable ambient shadows, and click None for image-based lighting. That said, there might be some things that we don’t reset exactly - that’s why Lights module is still in the sandbox. We’ll move features into Slicer core as we understand what features are useful enough and what is the best way to use them.
If you mean that you choose a different volume for output than your input volume then that is not a workaround but that is how the module is intended to be used. If you use a different input and output volume and you still see some drift then take a screen capture video (or take a screenshot and describe every click you make).
Modules in Sandbox extension are experimental, for making features available for early testing before the final feature is developed and integrated into Slicer core. When we implement lighting editing feature in Slicer core then we’ll always explicitly set the lights and provide saving/restoring of light configurations. However, we will not implement these in the Sandbox.
The changes in lights are not persistent, so if you want to reset to the VTK default then you can save the scene, restart Slicer, and load the scene. If you frequently want to go back to the default VTK lighting then you can check in VTK where the default light is placed and add lighting preset button corresponding to that. I guess it is just a single head light. You should be able to find it in the VTK source code or ask on the VTK forum.
You can access the VTK actors and set normal texture (and base color texture, ORM texture, anisotropy texture, emissive texture, coat normal texture, etc.). If you find it useful then you could add a pull request that exposes additional textures via the MRML node API.
As far as I understood with my search today, I’ll never be able to use normal map textures since the PolyDatas I use are not parametric surfaces and I cannot calculate the uv coordinates.
I got another way to create a tiled like paint effect on the surface using pointScalars. See below