Unity3d 当使用“任意”时,着色器将变为洋红色或不可见;LightMode“;团结一致

Unity3d 当使用“任意”时,着色器将变为洋红色或不可见;LightMode“;团结一致,unity3d,shader,Unity3d,Shader,因此,我一直在努力学习如何通过观看教程来编写UnityCG着色器,并尝试在之后自己修改这些项目。但是每次涉及到标记{“LightMode”=“X”}我的着色器都会变为不可见或“error洋红”,无论我使用哪个标记,它总是这两种结果之一。我已经翻遍了我能想到的每一个相关术语,甚至尝试重新安装Unity,以防有什么东西被破坏,但没有任何帮助 这是一个直接从中复制的着色器,没有进行任何更改,在我这端也不起作用 Shader "Custom/ShadowsInFwdRenderingVertF

因此,我一直在努力学习如何通过观看教程来编写UnityCG着色器,并尝试在之后自己修改这些项目。但是每次涉及到
标记{“LightMode”=“X”}
我的着色器都会变为不可见或“error洋红”,无论我使用哪个标记,它总是这两种结果之一。我已经翻遍了我能想到的每一个相关术语,甚至尝试重新安装Unity,以防有什么东西被破坏,但没有任何帮助

这是一个直接从中复制的着色器,没有进行任何更改,在我这端也不起作用

Shader "Custom/ShadowsInFwdRenderingVertFrag" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}//Needed by the Diffuse Fallback
}
SubShader {
Tags { "RenderType"="Opaque" }
//LOD 200


Pass{
Tags { "LightMode" = "ForwardBase" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fwdbase
#include "UnityCG.cginc"
#include "AutoLight.cginc"

struct vertOut {
float4 pos : SV_POSITION;
LIGHTING_COORDS(0,1) // NEEDED FOR SHADOWS.
};

vertOut vert(appdata_base v)
{
vertOut o;
o.pos= UnityObjectToClipPos(v.vertex);
TRANSFER_VERTEX_TO_FRAGMENT(o); // NEEDED FOR SHADOWS.
return o;
}

float4 frag(vertOut i):COLOR
{
fixed atten = LIGHT_ATTENUATION(i);// NEEDED FOR SHADOWS.
float4 c;
c = float4(0,1,0,1) * atten;
return c;
}
ENDCG
}//Pass



// Pass to render object as a shadow caster
Pass {
Name "ShadowCaster"
Tags { "LightMode" = "ShadowCaster" }

Fog {Mode Off}
ZWrite On ZTest LEqual Cull Off
Offset 1, 1

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_shadowcaster
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
#include "AutoLight.cginc"

struct v2f {
V2F_SHADOW_CASTER;
};

v2f vert( appdata_base v )
{
v2f o;
TRANSFER_SHADOW_CASTER(o)
return o;
}

float4 frag( v2f i ) : COLOR
{
SHADOW_CASTER_FRAGMENT(i)
}
ENDCG
} //Pass



// Pass to render object as a shadow collector
Pass {
Name "ShadowCollector"
Tags { "LightMode" = "ShadowCollector" }

Fog {Mode Off}
ZWrite On ZTest LEqual

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma multi_compile_shadowcollector

#define SHADOW_COLLECTOR_PASS
#include "UnityCG.cginc"

struct appdata {
float4 vertex : POSITION;
};

struct v2f {
V2F_SHADOW_COLLECTOR;
};

v2f vert (appdata v)
{
v2f o;
TRANSFER_SHADOW_COLLECTOR(o)
return o;
}

fixed4 frag (v2f i) : COLOR
{
SHADOW_COLLECTOR_FRAGMENT(i)
}
ENDCG
}//Pass

} //SubShader
FallBack "Diffuse" //note: required for passes: ForwardBase, ShadowCaster, ShadowCollector
}
它是洋红色的。它是不可见的(但请注意它仍在投射阴影)


提前感谢,任何提示都将不胜感激

您是否有可能使用LWRP或HDRP?这些管道有各自的灯光模式,不能与标准管道使用的灯光模式一起工作。对于LWRP,灯光模式称为“LightweightForward”

以下是用于编写LWRP着色器的模板: