UnityShader在PassTag使用ForwardBase时材质失效的问题

本文探讨了在Unity Shader中使用PassTag 'ForwardBase'时,材质失效的问题。作者通过排查摄像机设置和项目渲染路径,发现LightMode设置与渲染管线配置密切相关。解决办法是将可编程渲染管线设为None。关键在于理解Forward渲染模式与项目配置的互动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:UnityShader在PassTag使用ForwardBase时材质失效

问题表现:在0报错的前提下,材质显示错误

在这里插入图片描述
代码:

Shader "UnityShaderBook/Chapter6-DiffuseVertex-Level"

{

Properties

{

_Diffuse("Diffuse", Color) = (1,1,1,1)

}

SubShader

{

Pass{

//定义了正确的光照模式 才能得到一些内置光照变量

Tags {"LightMode" = "ForwardBase" }

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "Lighting.cginc"

fixed4 _Diffuse;

struct a2v {

float4 vertex : POSITION;

float3 normal : NORMAL;

};

struct v2f {

float4 pos : SV_POSITION;

fixed3 color : COLOR0;

};

v2f vert(a2v v)

{

v2f o;

o.pos = UnityObjectToClipPos(v.vertex);

fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

fixed3 worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject));

fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz);//获得世界空间的光照方向

//_LightColor0是通过正确定义光照模式才能得到的

fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLight));

o.color = ambient + diffuse;

return o;

}

fixed4 frag(v2f i) : SV_Target

{

return fixed4(i.color , 1.0);

}

ENDCG

}

    }

    FallBack "Diffuse"

}

问题分析:

经过注释代码段进行排查,发现当添加 Tags {“LightMode” = “ForwardBase” }语句后材质就会显示错误

在百度之后,发现这个LightMode设置不仅仅与材质有关,还与摄像机以及项目设置的RenderingPath有关

首先排查了摄像机的设置,如图:
在这里插入图片描述
发现摄像机与旧版本的设置有差别,并没有RenderingPath的设置,这条路走不通,于是转而查看项目设置:Edit>ProjectSettings>Graphics

在这里插入图片描述
在该面板中同样没有发现RenderingPath属性,但注意到一条提示:

在这里插入图片描述
于是我尝试将可编程渲染管线设置修改为None,回到编辑界面,发现问题已经解决,Camera组件的显示也恢复了。

在这里插入图片描述
总结:需要注意前向渲染的设置不仅与材质本身有关,当前向渲染的tag标识不起作用时,可以查看项目设置中的可编程渲染管线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值