您当前的位置: 首页 >  ar

染指流年灬

暂无认证

  • 2浏览

    0关注

    194博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

染指流年灬 发布时间:2022-06-14 10:46:59 ,浏览量:2

问题: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标识不起作用时,可以查看项目设置中的可编程渲染管线。

关注
打赏
1665909078
查看更多评论
立即登录/注册

微信扫码登录

0.0443s