unity shader中点光源(point light)的光照衰减处理

unity 的shader提供了2种光照模式:ForwardBase和ForwardAdd。

如果我们的shader想要处理多种光照,那么这两种光照模式就都要被实现到不同的pass中。

其中ForwardBase中处理的必然是平行光,所以想要处理点光源等其它光源需要在ForwardAdd中进行处理。

网上很多讲解点光源的文章,很多都特别复杂或者根本运行不了,其实处理起来非常简单,unity已经给我们提供了现成的宏,供我们使用:UNITY_LIGHT_ATTENUATION

需要注意的是想要使用这个宏我们需要引入AutoLight,UnityPBSLighting两个文件:

            #include "Autolight.cginc" 
            #include "UnityPBSLighting.cginc"
由于UNITY_LIGHT_ATTENUATION宏中使用了#ifdef POINT来进行判断,所以想要使宏生效我们需要在引入文件之前 #define POINT

最后我们的ForwardAdd的pass看起来应该是这样:

Pass{    
            Tags { "LightMode" = "ForwardAdd"}
            Blend One One
            CGPROGRAM  

            fixed4 _Color;

            #define POINT
        
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值