Rendering glitches when using vtkSSAOPass and vtkDepthPeelingPass

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

1 Like