getDistanceAttenuation
getDistanceAttenuation
计算光线强度因距离增加而产生的衰减因子(0-1),其算法在物理上可信且在截止边界处视觉平滑。
核心优势
封装了业界标准的、效果与性能俱佳的光照距离衰减算法,使开发者无需手动处理复杂的数学(如反平方定律、奇点避免、平滑窗口函数),即可获得高质量的衰减效果。
常见用途
作为点光源和聚光灯的核心组件,计算其距离衰减。
为渲染引擎的光照剔除(Light Culling)优化提供物理依据。
通过调整衰减指数(decayExponent)创造非物理的、风格化的光照效果。
近似计算带范围限制的区域光衰减。
如何调整
通过调整其输入参数来改变效果。`cutoffDistance` 控制“光能照多远”,即光照的有效半径。`decayExponent` 控制“光在传播中的能量损失速度”,设为 2 可模拟真实的物理衰减(中心亮,衰减快),设为 1 则是线性衰减(更均匀),更大会导致衰减更剧烈。
代码示例
1// 计算基于距离的光照衰减因子 (0-1)
2const attenuation = getDistanceAttenuation( {
3 lightDistance: length( light.position.sub( positionWorld ) ), // 表面到光源的距离
4 cutoffDistance: light.distance, // 光源的截止范围
5 decayExponent: light.decay // 衰减速率 (2=物理)
6} );