Search Issue Tracker
By Design
Votes
2
Found in [Package]
12.0.0
Issue ID
1323760
Regression
No
[HDRP] Glitches appear on GameObject when another GameObject with Opaque Shader and checked Alpha Clipping overlaps it
How to reproduce it:
1. Open the attached project "1323760.zip"
2. Load the "SampleScene" Scene
3. Move the camera around and observe the plane in the Scene view
Expected result: "Cube (1)" GameObject's is not visible on the "Cube" GameObject
Actual result: "Cube (1)" GameObject's glitches are visible on the "Cube" GameObject
Reproducible with: 7.5.3 (2019.4.24f1), 10.4.0 (2020.3.3f1), 11.0.0 (2021.1.1f1), 12.0.0 (2021.2.0a12)
Could not test with: 4.10.0-preview (2018.4.33f1) - due to the missing shaders
Notes:
- Reproducible, when "Cube (1)" GameObject's Shader is "HDRP/Unlit", "HDRP/TerrainLit", "HDRP/Lit",
- Reproducible, when "Cube (1)" GameObject's Surface Type is set to Opaque, and Alpha Clipping is checked
- Not reproducible when "Cube (1)" GameObject's Surface Type is Transparent
-
oliver-fs
Dec 02, 2022 11:59
For those encountering this issue in the future, a better solution than the one suggested to is to instead add a depth offset to the material (thankfully supported by the Lit stack) rather than fighting with normal or scale offsets.
-
FOXAcemond
Apr 12, 2021 08:33
Having a dirty micro diff in position cannot be the only solution, I changed something somewhere and this glitch appeared, only recently. That means there is a way to "rollback" this change and get the desired behavior.
-
FOXAcemond
Apr 07, 2021 14:09
This is weird that the bug is also present in 2020 and older versions. I've used this strategy to hide my meshes since forever and never had that bug before.
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- The "UnityWebRequest.result" of the "UnityWebRequestTexture.GetTexture" method changes when accessing "UnityWebRequest.downloadHandler" texture
- Slider rounding does not allow setting certain valid numbers as Values when Low and High Values not set to default
- UI Builder Canvas has too big resizing zone on the outside of the canvas
- GetCurrentAnimatorClipInfoCount() and GetNextAnimatorClipInfoCount() return 0 when animator is in transition
- GPU utilization increases by 20% on Meta Quest headsets when Render Graph is enabled on 6000.0.16f1 and higher
Resolution Note:
The behavior seen in this repro is actually expected but needs some explanation.
For performance reasons, Alpha tested geometry always needs to be rendered in two passes
- Depth prepass
- Color pass with depth test set as EQUAL and no alpha test.
The reason for this is that on most modern GPUs, whenever a shader contains a clip/discard instructions, the HiZ optimization is disabled causing huge performance loss for layered alpha tested geometry like foliage. By rendering alpha tested geometry as described above the color pass (which is the heaviest in term of performance) does not use clip instruction anymore and can be rendered efficiently.
The consequence is that with two perfectly overlapping objects, the alpha tested color pass will pass the depth tests making it visible. The artefacts displayed in this bug are actually regular z-fighting artefacts.
The only solution in this case is to add a small offset/scale to avoid the perfect overlap.