在Unity中使用任何“ LightMode”标签时,Shader变为洋红色或不可见

问题描述 投票:1回答:1

因此,我一直在尝试通过观看教程并尝试自行修改这些项目来学习如何编写UnityCG着色器。但是每当涉及Tags {"LightMode" = "X"}时,我的着色器就会变成不可见或“洋红色”,无论我使用哪个标签,它始终是这两种结果之一。我翻遍了我能想到的每个相关术语,甚至尝试重新安装Unity以防万一某个东西损坏了,但没有任何帮助。

这里是直接从here复制的着色器,未进行任何更改,并且对我而言无效。

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
}

Here它为洋红色。 Here它是不可见的(但请注意,它仍在投射阴影)。

预先感谢,感谢您的提示!

unity3d shader
1个回答
0
投票

您是否有机会使用LWRP或HDRP?这些管道具有各自的照明模式,无法与标准管道所使用的模式一起使用。对于LWRP,灯光模式称为“ LightweightForward”。

这里是用于编写LWRP着色器的模板:

https://gist.github.com/phi-lira/225cd7c5e8545be602dca4eb5ed111ba

© www.soinside.com 2019 - 2024. All rights reserved.