Hello all scientific visualization people interested in photorealistic rendering!
I’ve been upgrading this amazing add-on for Blender >2.80 called BVTKNodes, originally created by Silvano Imboden and further developed by Lorenzo Celli for Blender 2.79. BVTKNodes makes it possible to create and execute VTK pipelines configured in Blender Node Editor, to produce surface mesh objects, which can be then visualized in Blender using it’s rendering engines. This makes it possible to create photorealistic images and animations of scientific data in Blender (provided that you know both Blender and VTK well enough!). For more information, have a look at https://bvtknodes.readthedocs.io
I must confess I don’t know too much about volumetrics in Blender. I know it can render volumes enclosed by surface meshes, and there are some interesting looking options like density in the Principled Volume shader, but I haven’t looked into that. Here is example for constant density emission:
Hi Andras, thanks for the question.
Last year Lorenzo Celli provided some support to volume rendering in BVTKNodes,
but we weren’t completely satisfied due to some limitations in
the blender python api giving access to the volume-data.
The good news is that from version 2.83 Blender support the openvdb data format,even for time-variant data.
The openvdb api are open source so you can easily write a vtkImageData to openvdb converter.
Support for openvdb in Paraview has already been requested here
Here are a couple of examples.
(rendered with cycles)
Under Linux openvdb is supported by the debian packages libopenvdb-dev and python-openvdb,
but I didn’t found a corresponding packages for pip yet. When this will be available
we may integrate this feature in BVTKNodes
BR – Silvano
Thanks for this additional information. All these volume renderings look like an isosurface is extracted from the volume and then rendered as a uniform material. However, this is not that useful for medical applications, because there the main advantage of volume rendering is that you don’t need to extract surfaces but you directly visualize the volume, by defining voxel value -> (opacity, color) transfer functions. Does Blender support volume rendering of semi-transparent clouds (where each voxel has different opacity and color value)?
The rendering looks like isosurfaces but they are not, here there is another image of the same data with different settings. If you will install Blender 2.83 you can try by yourself, you can get my data and blender file here
Hi @Silvano, Very interested in volume rendering applications with Blender! Could you share the volume data and Blender file for the full head? I’m not familiar enough with the Volume settings in Blender to figure out how you added the clipping plane. Thanks!
Hi, here’s my quick test using Cycles (path tracing engine). Looks like volume also adsorbs light from light source nicely. Material and render settings have a large effect on results. Quite interesting.
It would be of course highly desirable if VTK could render such images directly, but in same cases it would be acceptable to export the scene to an external software, such as Blender, for photorealistic rendering or creating animations (with complex camera motion, lighting, etc.).
I’ll try to find time to experiment in Blender, but in the meantime it would be nice to see if anybody can make Blender render volumes with quality that surpasses VTK’s raycaster and approaches photorealistic rendering offered in commercial medical imaging software.
PS. Since Cycles is also a stand-alone render engine, you could theoretically incorporate it into VTK/Paraview. That might require some serious work, though, I’m guessing.
Thank you Andras for the interesting challenge and for providing the sample data ( is this data free ? can I reuse it ? ).
Here follows the best result I achieved using your data and Paraview, probably it is possibile to do better but my knowledge of Paraview is limited
Matching the quality of the CTA-cardio-cinematic was not possible, but that image was created from a dataset of an higher quality (see for example the details on the surface of the bones ).
Using Paraview you can reach a very good level of quality in short time, even with a limited knowledge of the tool.
Using Blender you can probably go further, but you need a knowledge of the tool and is time consuming.
Beyond the challenge, we presented here VtkNodes not to compete against the Kitware tools, but to let you know that Blender and Vtk can play together nicely. Maybe a more interesting scenario for using VtkNodes is for people developing custom application requiring surface editing tools ( e.g. dental implant, ad-hoc prosthesis planning …) those tools are missing in Vtk by design, while there are a plenty of them in Blender. Using VtkNodes you can import your data in Blender, transform it in a blender mesh, use any of the tools provided, re-convert the data to VTK and export it, and all of this using only free applications and addons.
Did you use OptiX renderer in Paraview? Can you share the ParaView state file?
What was the rendering time in Paraview and Blender?
The Siemens example may use slightly higher resolution image, but probably the main difference is due to that Siemens uses some automatic segmentation to distinguish bone, vasculature, tools, etc. and render them with different material properties.
Maybe a more interesting scenario for using VtkNodes is for people developing custom application requiring surface editing tools ( e.g. dental implant, ad-hoc prosthesis planning …) those tools are missing in Vtk by design, while there are a plenty of them in Blender
Implant planning is more similar to CAD design and mostly done using parametric modeling, which Blender is probably not the best tool for. Also, implant planning does not require fancy rendering, but mostly relies on measurements on slice and projection views and simple 3D rendering.
But photorealistic rendering of a few nice images of the final plan could be useful for for communication with patients, training materials, and presentations.
Hi Andras – I used the OSPRaycaster, and this is the link the statefile, not exaclty ‘that’ statefile, but the closest I have. About rendering time it is near real time in Paraview (seconds) and about 15 minutes for Cycles. You can have real time volume rendering in Blender by using EEVEE if sacrificing some quality. But I often spend much more time in tuning the visualization than in the rendering.
About your consideration on possible usage of VtkNodes I get your point, nevertheless at each Blender Conference there are at least a couple of talk about using Blender for research pourpose, and some of them were using vtk too. Time will show – thank you – Silvano