[unity] Sprite/Pixel Lit shader: Fixed errors in shader inspector GUI at certain configurations after change to ZWrite always on. See commit 4741279.

This commit is contained in:
Harald Csaszar 2019-07-31 09:50:26 +02:00
parent 698715789f
commit 083ef01160

View File

@ -479,7 +479,7 @@ public class SpineSpriteShaderGUI : ShaderGUI {
break;
default:
{
bool zWrite = material.GetFloat("_ZWrite") > 0.0f;
bool zWrite = HasZWriteEnabled(material);
SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderType);
}
break;
@ -807,14 +807,15 @@ public class SpineSpriteShaderGUI : ShaderGUI {
//Start with Culling disabled
material.SetInt("_Cull", (int)eCulling.Off);
//Start with Z writing disabled
material.SetInt("_ZWrite", 0);
if (material.HasProperty("_ZWrite"))
material.SetInt("_ZWrite", 0);
}
//Z write is on then
static void SetRenderType (Material material, string renderType, bool useCustomRenderQueue) {
//Want a check box to say if should use Sprite render queue (for custom writing depth and normals)
bool zWrite = material.GetFloat("_ZWrite") > 0.0f;
bool zWrite = HasZWriteEnabled(material);
if (useCustomRenderQueue) {
//If sprite has fixed normals then assign custom render type so we can write its correct normal with soft edges
@ -848,7 +849,7 @@ public class SpineSpriteShaderGUI : ShaderGUI {
eBlendMode blendMode = GetMaterialBlendMode(material);
SetBlendMode(material, blendMode);
bool zWrite = material.GetFloat("_ZWrite") > 0.0f;
bool zWrite = HasZWriteEnabled(material);
bool clipAlpha = zWrite && blendMode != eBlendMode.Opaque && material.GetFloat("_Cutoff") > 0.0f;
SetKeyword(material, "_ALPHA_CLIP", clipAlpha);
@ -965,7 +966,7 @@ public class SpineSpriteShaderGUI : ShaderGUI {
{
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One);
bool zWrite = material.GetFloat("_ZWrite") > 0.0f;
bool zWrite = HasZWriteEnabled(material);
SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderQueue);
renderQueue = zWrite ? kAlphaTestQueue : kTransparentQueue;
}
@ -974,7 +975,7 @@ public class SpineSpriteShaderGUI : ShaderGUI {
{
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcColor);
bool zWrite = material.GetFloat("_ZWrite") > 0.0f;
bool zWrite = HasZWriteEnabled(material);
SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderQueue);
renderQueue = zWrite ? kAlphaTestQueue : kTransparentQueue;
}
@ -983,7 +984,7 @@ public class SpineSpriteShaderGUI : ShaderGUI {
{
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.SrcColor);
bool zWrite = material.GetFloat("_ZWrite") > 0.0f;
bool zWrite = HasZWriteEnabled(material);
SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderQueue);
renderQueue = zWrite ? kAlphaTestQueue : kTransparentQueue;
}
@ -992,7 +993,7 @@ public class SpineSpriteShaderGUI : ShaderGUI {
{
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.SrcColor);
bool zWrite = material.GetFloat("_ZWrite") > 0.0f;
bool zWrite = HasZWriteEnabled(material);
SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderQueue);
renderQueue = zWrite ? kAlphaTestQueue : kTransparentQueue;
}
@ -1001,7 +1002,7 @@ public class SpineSpriteShaderGUI : ShaderGUI {
{
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
bool zWrite = material.GetFloat("_ZWrite") > 0.0f;
bool zWrite = HasZWriteEnabled(material);
SetRenderType(material, zWrite ? "TransparentCutout" : "Transparent", useCustomRenderQueue);
renderQueue = zWrite ? kAlphaTestQueue : kTransparentQueue;
}
@ -1040,5 +1041,11 @@ public class SpineSpriteShaderGUI : ShaderGUI {
return material.IsKeywordEnabled("_FIXED_NORMALS_VIEWSPACE_BACKFACE") || material.IsKeywordEnabled("_FIXED_NORMALS_MODELSPACE_BACKFACE");
}
static bool HasZWriteEnabled (Material material) {
if (material.HasProperty("_ZWrite")) {
return material.GetFloat("_ZWrite") > 0.0f;
}
else return true; // Pixel Lit shader always has _ZWrite enabled.
}
#endregion
}