Unity Shader踩坑笔记-2 ForwordBase-半兰伯特光照模型的问题记录

在Unity2018.1.0b中学习Shader时,作者发现半兰伯特漫反射光照模型在关闭环境光源后表现异常。原本应结合环境光和漫反射的模型,却只显示了环境光效果。通过检查代码,作者发现需要对半兰伯特模型的参数设置最小值为0,以确保在无光源时仍能正确显示环境光。这是一个解决Unity Shader在无光照情况下显示问题的技巧。

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

Shader学习使用的是Unity2018.1.0b

      在学习基础光照模型时,除了逐顶点光照和逐像素光照以外,为了给无光照的阴影部分增强视觉效果,我们也会使用半兰伯特漫反射光照模型,然而在使用半兰伯特模型时,一旦关闭环境中的光源(有环境光)会出现很有趣的现象。

      逐顶点光照的顶点着色器:

        void vert(in a2v v,out v2f o){

        o.pos=UnityObjectToClipPos(v.vertex);
	fixed3 Amb = UNITY_LIGHTMODEL_AMBIENT.xyz;
        float3 worldNormal = normalize(mul(v.normal,(float3x3)unity_WorldToObject));
	float3 worldLight = normalize(_WorldSpaceLightPos0.xyz);
	fixed3 diffuse1 = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal , worldLight));

        o.color = Amb + diffuse1;
        }


      逐顶点光照的半兰伯特模型顶点着色器:

void vert(in a2v v,out v2f o){

        o.pos=UnityObjectToClipPos(v.vertex);
	fixed3 Amb = UNITY_LIGHTMODEL_AMBIENT.xyz;

	float3 worldNormal = normalize(mul(v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值