Alright, I managed to make it work by using a custom vtkRenderPassCollection
and a dedicated SSAO camera pass.
Someone had a similar issue in python:
For anyone interested this is my final setup to make SSAO & Depth Peeling work together:
vtkNew<vtkOpaquePass> opaque;
vtkNew<vtkCameraPass> ssaoCameraPass;
ssaoCameraPass->SetDelegatePass(opaque);
vtkNew<vtkSSAOPass> ssaoPass;
ssaoPass->SetDelegatePass(ssaoCameraPass); // SSAO applies to opaque geometry
ssaoPass->SetRadius(20);
ssaoPass->SetKernelSize(256);
// Depth peeling for translucent geometry
vtkNew<vtkDepthPeelingPass> peelingPass;
peelingPass->SetMaximumNumberOfPeels(16);
peelingPass->SetOcclusionRatio(0.01);
vtkNew<vtkTranslucentPass> translucentPass;
peelingPass->SetTranslucentPass(translucentPass);
vtkNew<vtkLightsPass> lights;
// Compose the sequence
vtkNew<vtkRenderPassCollection> passes;
passes->AddItem(lights);
passes->AddItem(ssaoPass); // SSAO for opaque geometry
passes->AddItem(peelingPass); // Depth peeling for translucent
vtkNew<vtkSequencePass> sequence;
sequence->SetPasses(passes);
// Wrap it into a camera pass
vtkNew<vtkCameraPass> cameraPass;
cameraPass->SetDelegatePass(sequence);
// Set the final pass
renderer->SetPass(cameraPass);
Thanks for the help,
Clément