精灵消失着色器
Sprite disappear shader
我正在开发 Unity 2D 平台游戏。
我正在使用我发现 here 的着色器,但是当我翻转我的精灵时(比例 -1),
精灵消失了,我对着色器编码知之甚少,
而且我没有在 Google 上找到任何帮助,任何人都可以帮助修复着色器吗?。
这是着色器:
Properties {
[PerRendererData] _MainTex ("Main texture", 2D) = "white" {}
_DissolveTex ("Dissolution texture", 2D) = "gray" {}
_Threshold ("Threshold", Range(0., 1.01)) = 0.
}
SubShader {
Tags { "Queue"="Transparent" }
Blend SrcAlpha OneMinusSrcAlpha
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _MainTex;
v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.texcoord;
return o;
}
sampler2D _DissolveTex;
float _Threshold;
fixed4 frag(v2f i) : SV_Target {
float4 c = tex2D(_MainTex, i.uv);
float val = tex2D(_DissolveTex, i.uv).r;
c.a *= step(_Threshold, val);
return c;
}
ENDCG
}
}
精灵被渲染为一个矩形,有两个正索引顺序的三角形:顺时针。
您可以将 Shading Mode 更改为 Shaded Wireframe 来检查它。
并且如果你翻转精灵(比例-1),精灵的两个三角形将变为逆时针方向。而且,GPU 不会渲染逆时针三角形。这就是为什么你的精灵消失了。另见 what is a clockwise face in openGL。
如果你想在翻转时看到你的精灵,你可以
创建两个具有相同纹理的精灵:一个普通精灵和一个翻转精灵:
MySprite
|--Normal
|--Flipped (scaled -1)
然后,将 MySprite
GameObject 缩放为 -1。
在着色器中关闭背面剔除。
只需添加 Cull Off
to the subshader. See also this.
SubShader {
Tags { "Queue"="Transparent" }
Blend SrcAlpha OneMinusSrcAlpha
Pass {
Cull Off
...
我正在开发 Unity 2D 平台游戏。 我正在使用我发现 here 的着色器,但是当我翻转我的精灵时(比例 -1), 精灵消失了,我对着色器编码知之甚少, 而且我没有在 Google 上找到任何帮助,任何人都可以帮助修复着色器吗?。 这是着色器:
Properties {
[PerRendererData] _MainTex ("Main texture", 2D) = "white" {}
_DissolveTex ("Dissolution texture", 2D) = "gray" {}
_Threshold ("Threshold", Range(0., 1.01)) = 0.
}
SubShader {
Tags { "Queue"="Transparent" }
Blend SrcAlpha OneMinusSrcAlpha
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _MainTex;
v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.texcoord;
return o;
}
sampler2D _DissolveTex;
float _Threshold;
fixed4 frag(v2f i) : SV_Target {
float4 c = tex2D(_MainTex, i.uv);
float val = tex2D(_DissolveTex, i.uv).r;
c.a *= step(_Threshold, val);
return c;
}
ENDCG
}
}
精灵被渲染为一个矩形,有两个正索引顺序的三角形:顺时针。
您可以将 Shading Mode 更改为 Shaded Wireframe 来检查它。
并且如果你翻转精灵(比例-1),精灵的两个三角形将变为逆时针方向。而且,GPU 不会渲染逆时针三角形。这就是为什么你的精灵消失了。另见 what is a clockwise face in openGL。
如果你想在翻转时看到你的精灵,你可以
创建两个具有相同纹理的精灵:一个普通精灵和一个翻转精灵:
MySprite |--Normal |--Flipped (scaled -1)
然后,将
MySprite
GameObject 缩放为 -1。在着色器中关闭背面剔除。
只需添加
Cull Off
to the subshader. See also this.SubShader { Tags { "Queue"="Transparent" } Blend SrcAlpha OneMinusSrcAlpha Pass { Cull Off ...