0
\$\begingroup\$

I feel like an absolute idiot for asking this. But how exactly do safely draw the depth of a fragment featuring a Masked ( Alpha 1) texture on it's surface?

So far I've literally been doing a depth test on truly opaque geometry.

enter image description here

Here's a logarithic Z-bufer from GTA. And yes... it's strange that I know that and how to do it... but not a alpha mask depth.

EDIT: From this, it looks like it's actually possible to write solid texture data to the depth buffer, and ignore the binary transparency.

Here's an image that's an example of the problem I would like to solve.

enter image description here

\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

In the case of a masked texture, only fully opaque pixels should update the depth buffer. Any pixel that is partially or completely transparent should not update the depth buffer. Updating the depth buffer will prevent pixels of greater depth from being drawn/calculated, and pixels with alpha need to blend with pixels in the background. If no blending occurs, then you update the depth buffer, otherwise skip it.

\$\endgroup\$
4
  • \$\begingroup\$ Alright, so if you're using a shader to mask a texture, you can still submit the geometry normally, and the hardware will handle the depth pass for you then? \$\endgroup\$ Jul 5, 2016 at 1:36
  • \$\begingroup\$ Unless you are doing something unusual, that should be the case, yes. Either way, it sounds like I misunderstood your original question. I had understood that you were trying to render the depth buffer as pixels, and were asking how you would render the depth buffer for visualization purposes. The depth pass is normally done as a separate pass. The depth of each of the pixels you are rendering is tested ahead of time, and a fragment shader should only called on pixels that are actually being rendered. \$\endgroup\$
    – Tom K
    Jul 5, 2016 at 2:49
  • \$\begingroup\$ I'm missing something here then... I edited the OP to show an example of the issue I'm getting. But I am running a deferred renderer, and trying to keep the over draw down as much as possible. A good portion of my scene uses these "Cutout" style transparencies to save on geometry and to stylize. \$\endgroup\$ Jul 5, 2016 at 8:02
  • \$\begingroup\$ Alright, I got it all figured out now. I was missing some details that weren't being explained in the documentation. DX 10 and 11 do not have alpha testing. It must be implemented by the shader by testing via clip from the pixel shader stage. Which in turn stops early Z-testing, and uses the de-facto Z test for that object. \$\endgroup\$ Jul 6, 2016 at 23:20

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .