返回

点光源距离衰减

为点光源加入距离衰减,让光照强度随空间距离自然变化。

为点光源加入距离衰减,让离光源近的区域更亮,远的区域更暗。

概览

  • 使用一个有明确位置的点光源。
  • 让光照随着距离增加自然减弱。

学习目标

  • 理解点光源位置与片元位置之间的距离关系
  • 使用衰减公式控制光照强度
  • 观察空间距离对渲染结果的影响

前置知识

  • point-light
  • ambient-diffuse

关键知识点

  • 点光源依赖位置,而不只是方向。
  • 常见衰减形式是 1.0 / (1.0 + k * d * d)。
  • 漫反射项和衰减项通常需要相乘。

实现步骤

  1. 定义一个位于球体上方的光源位置。
  2. 计算当前片元到光源的向量。
  3. 先保存距离,再把向量归一化用于漫反射。
  4. 根据距离生成 attenuation。
  5. 用 diffuse * attenuation 得到最终亮度。

自检

  • 球体是否在靠近光源的位置更亮?
  • 光源移动时,亮区是否会随之移动?
  • 衰减是否平滑,而不是突然截断?

常见错误

  • 先归一化再拿去算距离。
  • 只做衰减,没有保留漫反射方向信息。
  • 衰减参数过强,导致整个球几乎全黑。

答案解析

方向光只需要方向,点光源还需要位置。

光照方向

先计算片元指向光源的向量,再归一化后参与漫反射。

距离

在归一化之前保存距离值,因为衰减需要真实长度。

衰减

把距离代入衰减公式,让亮度随空间距离逐渐减弱。

GLSL 代码编辑器

正确代码预览

当前代码预览