UNITY_LIGHT_ATTENUATION, 光照衰减

用于计算光照衰减系数。参数一为返回值(光照衰减系数),参数二用于阴影计算,参数三是世界坐标

实现代码位于AutoLight导入文件之中,使用之前需要#include "AutoLight.cginc"

使用这个宏后,看起来衰减不再工作了。这是因为它有多个版本,每个光源类型都有一个。在默认情况下,它是为方向光源准备的版本,根本没有衰减。

正确的宏只有在知道我们正在处理的光源类型的时候才会被定义。如果处理点光源,我们必须在include AutoLight.cginc之前#define POINT。 

如果需要适应各种类型的光照,可以使用#pragma multi_compile DIRECTIONAL POINT SPOT创建多个变体,unity会根据光源类型启用不同的关键字

处理点光源时候的源码:

_LightTexture0解析:https://blog.csdn.net/zengjunjie59/article/details/109532962

unity_WorldToLight :用于把顶点从世界空间转换到光源空间(https://blog.csdn.net/zengjunjie59/article/details/109533382

lightCoord是顶点在光源空间下的坐标。用该坐标从_LightTexture0里提取衰减值,而UNITY_ATTEN_CHANNEL是r或者是a,这具体取决于目标平台。最后乘以阴影系数得到最后的光源衰减系数

SHADOW_ATTENUATION(input) 与接受阴影有关,解析:https://blog.csdn.net/zengjunjie59/article/details/111356636

 

处理聚光灯时候的源码

这里是它的代码。注意在采样掩码纹理的时候所做的从齐次坐标到欧几里得坐标的转换。在转换之后向uv坐标加上0.5,来确保(0,0)点在纹理坐标中央。

 

处理点光源cookie时候的源码

在这种情况下,UNITY_LIGHT_ATTENUATION是什么样子的?

它相当于常规点光源的宏,除了它也采样cookie以外。由于在这种情况下cookie是一个立方体贴图,所以它使用texCUBE做采样。

 

 

案例(转自catlikecoding)

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值