为点光源加入距离衰减,让光照强度随空间距离自然变化。
为点光源加入距离衰减,让离光源近的区域更亮,远的区域更暗。
概览
- 使用一个有明确位置的点光源。
- 让光照随着距离增加自然减弱。
学习目标
- 理解点光源位置与片元位置之间的距离关系
- 使用衰减公式控制光照强度
- 观察空间距离对渲染结果的影响
前置知识
- point-light
- ambient-diffuse
关键知识点
- 点光源依赖位置,而不只是方向。
- 常见衰减形式是
1.0 / (1.0 + k * d * d)。 - 漫反射项和衰减项通常需要相乘。
实现步骤
- 定义一个位于球体上方的光源位置。
- 计算当前片元到光源的向量。
- 先保存距离,再把向量归一化用于漫反射。
- 根据距离生成 attenuation。
- 用
diffuse * attenuation得到最终亮度。
自检
- 球体是否在靠近光源的位置更亮?
- 光源移动时,亮区是否会随之移动?
- 衰减是否平滑,而不是突然截断?
常见错误
- 先归一化再拿去算距离。
- 只做衰减,没有保留漫反射方向信息。
- 衰减参数过强,导致整个球几乎全黑。
答案解析
方向光只需要方向,点光源还需要位置。
光照方向
先计算片元指向光源的向量,再归一化后参与漫反射。
距离
在归一化之前保存距离值,因为衰减需要真实长度。
衰减
把距离代入衰减公式,让亮度随空间距离逐渐减弱。