- Home /
Depth sorting objects with #pragma alpha in Surface Shader
I have read a lot of questions (and answers) about this topic, but none seems clear to me. I have planets in a space game that are made up 2 sphere meshes: A planet surface and an atmosphere glow. Both meshes share the same central position, but for each planet, the glow has a slightly larger radius.
The outer atmosphere glow has front faces culled to achieve a 'carona' effect around the planet surface (with only the interior of the larger sphere being rendered). The outer atmosphere glow also fades at the edge, to simulate the glow effect I'm aiming for. This all works perfectly well, until I add in 'alpha' to the planet surface shader's #pragma line:
#pragma surface surf Lambert fullforwardshadows alpha
As soon as I add alpha to BOTH objects, I can't get the atmosphere glow sphere to render BEHIND the planet surface sphere.
I have tried:
Various iterations of the Tags "RenderType" and "Queue", including setting both shaders' "Queue" to "Transparent-1" and "Transparent-10" (and reversing those numbers)
Any and ALL combinations of ZWrite and ZTest (in both shaders)
Using 'Offset 1, 1' (with various other values) in the atmosphere glow shader
...but nothing works.
How do I accurately depth-test these 2 objects? I could put the atmosphere glow spheres though a separate camera (with a Depth set behind the main camera) , but then all glows would be rendered behind all planets and that would look odd if a distant planet intersected with the edge of a nearer planet.
I'm assuming there's some combination of settings that will work, and I'd really love to know what they are! What are the important settings, and what should they be?
Thanks, for any help!
Your answer
Follow this Question
Related Questions
Alpha Shader not working with obj collision 1 Answer
Shader - Object Depth 0 Answers
ZBuffer and Object Depth 1 Answer
How do you setup Depth Bias Alpha for Shaders? 0 Answers
Graphics/RenderTexture Alpha Brush 0 Answers