首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用任何"LightMode“标签时,着色器会变成洋红色或不可见色

在使用任何"LightMode“标签时,着色器会变成洋红色或不可见色
EN

Stack Overflow用户
提问于 2019-11-27 04:16:01
回答 1查看 1.2K关注 0票数 0

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

这里有一个直接从这里复制的着色器,没有做任何更改,也不工作在我的一端。

代码语言:javascript
复制
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
}

这里是用洋红写的。这里它是不可见的(但请注意它仍然投下阴影)。

谢谢您,任何提示都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-28 10:51:13

你是否有机会使用LWRP或HDRP?这些管道有各自独立的光模式,不能与标准管道使用的模式一起工作。对于LWRP,光模式称为"LightweightForward“。

下面是编写LWRP着色器的模板:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59062925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档