Sign in to follow this  
TheQaa

Z-fighting & the depthtest

Recommended Posts

TheQaa    104
Hello,
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:
[url="http://imageshack.us/a/img87/7857/zfighting.png"]http://imageshack.us...7/zfighting.png[/url]

Disabled depthtest:
[url="http://imageshack.us/a/img38/5125/nozfighting.png"]http://imageshack.us...nozfighting.png[/url]

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
MJP    19754
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
TheQaa    104
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.

http://img28.imageshack.us/img28/6195/cloudsfighting1.png

The depthbuffer description is following:

[CODE]
dsDesc.DepthEnable = true;
dsDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; // or D3D11_DEPTH_WRITE_MASK_ZERO
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;
[/CODE]

Maybe i missed something? Edited by TheQaa

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this