Unity3D精灵。。。但是单边的?
Unity出色的Unity3D精灵。。。但是单边的?,unity3d,shader,unity3d-2dtools,Unity3d,Shader,Unity3d 2dtools,Unity出色的Sprites(),以及其他有价值的优势,实际上是双面的 在2D或3D用例中,您可以翻转这些小混蛋,但仍然可以从后面看到它们——它们是从两侧渲染的 我还喜欢在它们上使用的未照明着色器(即,精灵默认值,而不是精灵漫反射) 然而,我需要一个老式的单面Sprite 幸运的是,您可以免费下载Unity使用的优秀着色器的源代码。。。令人困惑的是,你不能仅仅在编辑器中打开它,而是可以看到它 在花费了相当多的精力(包括便宜的威士忌)之后,我对着色器进行了两(2)次修改 我将文件第一行中的名称改
Sprite
s(),以及其他有价值的优势,实际上是双面的
在2D或3D用例中,您可以翻转这些小混蛋,但仍然可以从后面看到它们——它们是从两侧渲染的 我还喜欢在它们上使用的未照明着色器(即,精灵默认值,而不是精灵漫反射) 然而,我需要一个老式的单面
Sprite
幸运的是,您可以免费下载Unity使用的优秀着色器的源代码。。。令人困惑的是,你不能仅仅在编辑器中打开它,而是可以看到它
在花费了相当多的精力(包括便宜的威士忌)之后,我对着色器进行了两(2)次修改
Cull Off
材质
,称之为“Sprite Single Side”,将着色器设置为这个新材质,然后在Sprite
s上,我用新材质替换材质槽。)
事实上,我做了这个修改,有没有搞砸了着色器中的任何东西?一个人能愉快地评论掉“剔除”而不引起进一步的问题吗?在改变Sprite使用的常用材料时是否有一些怪癖(你看不见,所以我不知道)。更广泛地说,是否有更正确的方法来实现单面Sprite
// file "Sprites-DefaultSingle.shader"
Shader "Sprites/DefaultSingle"
{
Properties
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}
/// Cull Off
Lighting Off
ZWrite Off
Blend One OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile _ PIXELSNAP_ON
#pragma shader_feature ETC1_EXTERNAL_ALPHA
#include "UnityCG.cginc"
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
fixed4 _Color;
v2f vert(appdata_t IN)
{
v2f OUT;
OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
OUT.texcoord = IN.texcoord;
OUT.color = IN.color * _Color;
#ifdef PIXELSNAP_ON
OUT.vertex = UnityPixelSnap (OUT.vertex);
#endif
return OUT;
}
sampler2D _MainTex;
sampler2D _AlphaTex;
fixed4 SampleSpriteTexture (float2 uv)
{
fixed4 color = tex2D (_MainTex, uv);
#if ETC1_EXTERNAL_ALPHA
// get the color from an external texture ..
color.a = tex2D (_AlphaTex, uv).r;
#endif //ETC1_EXTERNAL_ALPHA
return color;
}
fixed4 frag(v2f IN) : SV_Target
{
fixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color;
c.rgb *= c.a;
return c;
}
ENDCG
}
}
}
据我所知,除了您所希望的效果之外,这些更改都没有任何其他效果。此外,这是实现这一目标的最正确的方法-这是Cull唯一的目标。这不会导致任何问题,是正确的做法。如果你真的想表达清楚,你可以将行改为
Cull Back
,而不是注释掉它,但是背面消隐被定义为默认行为,所以只需删除它就可以了。“可以翻转小混蛋,仍然可以从后面看到他们”哈哈……很遗憾,我对着色器一无所知。不是我的东西。几年后,我需要这个,在这里找到了:)啊!好消息。这就解释了为什么Cull-On
不起作用。非常好,ThanksPrite的着色器代码在最初的问题被问到后发生了更改。可在此处下载当前版本(展开下载下拉列表):