• Advertisement
Sign in to follow this  

Z-fighting & the depthtest

This topic is 1888 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

i'm rendering volumetric clouds, which works pretty well. For the next step, i wanted to render some terrain. Previously the depth buffer was disabled, because i sorted all vertices, so there was no need. But for the terrain i need an active depth buffer while rendering the clouds and then i get massive graphic problems. It looks like z-fighting, but i got no idea how to deal with it. Here are some pictures to show my problem.

Enabled depthtest:

Disabled depthtest:

Anybody has an idea?
Another question:
Is it possible to write to the depth buffer without depthtesting?

Thanks [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] Edited by TheQaa

Share this post

Link to post
Share on other sites
Normally for this sort of thing you would enable depth writes and depth tests for your opaque geometry, and then for your transparent geometry you render with depth tests enabled but depth writes disabled. To do that you will need to separate depth-stencil states. For the opaques, you'll want to set DepthEnable to TRUE and DepthWriteMask to D3D11_DEPTH_WRITE_MASK_ALL. Then for the transparents, you'll want to set DepthEnable to TRUE and DepthWriteMask to D3D11_DEPTH_WRITE_MASK_ZERO. This should solve your problems, as long as you draw the terrain first and the clouds second.

To answer your second question, you can enable depth writes without depth tests. Just Set DepthEnable to FALSE, and DepthWriteMask to D3D11_DEPTH_WRITE_MASK_ALL. You can also leave DepthEnable set to TRUE, and set DepthFunc to D3D11_COMPARISON_ALWAYS.

Share this post

Link to post
Share on other sites
Thanks for your reply,
with your settings, the z-fighting in the clouds is gone, but when terrain and clouds are intersecting there are still some problems.


The depthbuffer description is following:

dsDesc.DepthEnable = true;
dsDesc.DepthFunc = D3D11_COMPARISON_LESS;
dsDesc.StencilEnable = true;
dsDesc.StencilReadMask = 0xFF;
dsDesc.StencilWriteMask = 0xFF;
dsDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
dsDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR;
dsDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
dsDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
dsDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
dsDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR;
dsDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
dsDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;

Maybe i missed something? Edited by TheQaa

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement