So this isn’t really a support post but I just wanted to say how impressive the volumetric rendering is now, the effort you guys put into visual effects like PBR & SSAO is really impressive and has helped me make some really beautiful visualizations of data for my group.
I’m still trying to figure out how to enable SSAO for translucent objects but otherwise things are looking really nice.
I’ve also been exploring some of the more complex features of VTK and now that I understand more about interaction callbacks I made a quick animation in the spirit of the season.
As for this question I don’t think the current implementation of SSAO supports translucent surfaces. I am not sure how relevant SSAO would be relevant for translucents surfaces. Also supporting it would be a bit tricky for cases like the one below because you’d have multiple depth value per pixel
I think you’re right, originally I was thinking of using dual rendering with the translucent actor either being fully opaque or transparent, extracting the SSAO from both & scaling them by the actor opacity but that’d only really work for simple convex objects and scenes. In this case it’d probably look like the image below (just a mock-up I did in PS), not really much of an improvement.
I imagine you’d need to have a new SSAO layer and depth map for every new region a pixel’s ray path could go through which could get incredibly complex.
yep that could indeed work. It may be possible to keep it simple but I would worry about the perfomance of such an approach when having lots of translucent objects. Feel free to experiment though
So the original data comes from one of the example datasets hosted on the Kitware data repo, you can browse all the files in your web browser here or use the following Python code to grab the exact file I used. There’s also a really interesting chest CT scan on there that I’d recommend checking out too.
data_url = "https://data.kitware.com/api/v1/file/62daaa69bddec9d0c4bfd42a/download"
data_file = "head_and_neck_ct.vtk"
if not Path(data_file).exists():
print(f"Downloading {data_file}...")
# Download the data
import urllib.request
urllib.request.urlretrieve(data_url, data_file)
print("Download complete")
I used the same light setup as seen in this example code however changed some of the illumination parameters and removed the dithering.