Transparent triangle sorting
#2
You are right. Those problems are caused because some triangles are rendered before others and because the object is rendered with DepthReadWrite mode the triangles that are closer to the camera may prevent rendering triangles that are farther to the camera (if they are rendered first).

This can be prevented by using DepthRead DepthStencilState.
The following code does the trick:

Code:
MainDXViewportView.DXSceneInitialized += delegate (object sender, EventArgs args)
{
    var dxScene = MainDXViewportView.DXScene;
    var transparentRenderingQueue = dxScene.TransparentRenderingQueue;


    var renderTransparentObjectsRenderingStep = new RenderObjectsRenderingStep("RenderTransparentObjects");

    // Render only objects in transparent rendering queue
    renderTransparentObjectsRenderingStep.FilterRenderingQueuesFunction = queue => queue == transparentRenderingQueue;
    renderTransparentObjectsRenderingStep.OverrideDepthStencilState = dxScene.DXDevice.CommonStates.DepthRead;

    dxScene.RenderingSteps.AddAfter(dxScene.DefaultRenderObjectsRenderingStep, renderTransparentObjectsRenderingStep);


    // DefaultRenderObjectsRenderingStep should render all objects except objects in transparent rendering queue
    dxScene.DefaultRenderObjectsRenderingStep.FilterRenderingQueuesFunction = queue => queue != transparentRenderingQueue;
};



For the next version that will be released in November (after the .Net 6 release) I am preparing a few improvements for rendering transparent objects. The following two are already implemented:

  • easy way to render transparent objects without writing to depth buffer (using DepthRead; this prevents occluding triangles that are behind other triangles). You will only need to use the following to enable that: "MainDXViewportView.DXScene.DXDevice.CommonStates.DefaultTransparentDepthStencilState = MainDXViewportView.DXScene.DXDevice.CommonStates.DepthRead;"

  • support for two sided materials (render two sided material with one render pass; this works very well with DepthRead only mode for transparent objects).

I have also a working version of the triangles sorting mechanism, but this still needs a little polishing and testing. I will send you a pre-release version when this is ready.
Andrej Benedik
  


Messages In This Thread
Transparent triangle sorting - by janovrom - 10-26-2021, 10:16 AM
RE: Transparent triangle sorting - by abenedik - 10-27-2021, 11:56 AM
RE: Transparent triangle sorting - by janovrom - 11-01-2021, 03:21 PM

Forum Jump:


Users browsing this thread:
1 Guest(s)