Rendering Lecture 2:Light
Course: 渲染基础 Rendering Basics Date: November 29, 2025 10:38 AM (GMT+8)
🎨 Rendering Lecture 2:光(Light)
光照、辐射度量学、BRDF、软阴影的数学基础
🏛 1. 光的直觉性质(Intuitive Properties of Light)
🌟 1.1 光沿直线传播
- 光线走直线 → 才能做 Ray Tracing(光线追踪)
- 这也是为什么激光笔能逗猫(可控的直线传播)
💡 1.2 入射角影响亮度(Cosine Rule)
当光以角度 θ 照射表面时:
- 直射(θ=0°) → 单位面积接收到满强度
- 倾斜照射(θ>0) → 光照分布在更大面积 → 看起来更暗
数学表达(单位长度 C=1 时):
实际计算用 dot(normal, -light_dir)。
🔥 1.3 光源亮度(Intensity)
光源越亮,表面越亮。 光强与亮度 线性关系。
🌈 1.4 光源面积大小(Area Light Size)
光源越大,单位角度覆盖的面积越大 → 更亮,但不线性:
- 10cm → 1m:显著更亮
- 1km → 100km:几乎不变(角度几乎不变)
- 点越远 → 面积变化越不敏感
🌀 1.5 光随距离衰减(1 / distance²)
点光在空间膨胀,就像鼓起的球壳:
- 表面的面积 ∝ r²
- 光子数量不变 → 密度降低 → 亮度 ∝ 1 / r²
🔥 2. 光的简化(Rendering Simplifications)
渲染中不处理真正的物理光学,只做几何光学(Ray Optics)。
❌ 我们忽略的东西
- 衍射(diffraction)
- 干涉(interference)
- 偏振(polarization)
- 荧光(fluorescence)
- 完整光谱(只算 RGB)
真实光学太复杂,渲染只采纳 近似且足够真实的模型。
🧮 3. 光照数学(Light Integration 基础)
目标:计算某点接收到的光。
📚 3.1 从所有方向积分(Hemisphere Integral)
我们必须 “从半球的所有方向” 汇总光照:
要素:
- dω:单位立体角
- cosθ:入射角衰减
- L(ω):方向 ω 上来的辐射亮度
📦 3.2 从“方向积分”换成“在光源表面积分”
为了处理 面光源(软阴影),我们换变量:
依赖关系:
含义:
- r:点到光源面片的距离
- dA:光源上微小面积
- cosθ_emit:光源面片的法线角度
🌐 4. 立体角(Solid Angle)
🟦 4.1 2D:角度 = 弧长 / 半径
单位是弧度(Radian)
🟥 4.2 3D:立体角 = 面积 / r²
单位是 Steradian(球面度) 单位球完全覆盖:4π sr
光源越接近 → 立体角越大 → 看起来越亮
📡 5. 辐射度量学(Radiometry)
讲义用“下雨”比喻非常形象:
| 辐射量 | 意义 | 雨的类比 |
|---|---|---|
| Radiant Energy | 光能总量 | 雨水总量 |
| Radiant Flux (Power) | 每秒能量 | 每秒雨水 |
| Intensity | 朝某方向雨量 | 某方向的雨强 |
| Irradiance | 到达表面雨量 | 落在地面的雨 |
| Radiance | 单位面积 + 单位方向 | 某点某角度的雨密度 |
✨ Radiance 是渲染最核心的量
- 不随距离衰减
- 方向相关
- 用来决定像素颜色
- 摄像机、眼睛对 radiance 敏感
Radiance 是一个 5D 函数: L(x, y, z, θ, φ) 称作 plenoptic function。
🧪 6. 材质(Materials)与 BRDF
🎨 BRDF:Bidirectional Reflectance Distribution Function
描述:
- 不同材料有不同 BRDF
- 黑色材料:全部吸收
- 白色材料:全部反射
- 有色材料:部分吸收固定波长
⚖️ 7. White Furnace Test(能量守恒单元测试)
📌 原理:
把一个白色漫反射物体放在“无线白光环境”里,它不能发光:
计算结果应该 ≤1 但直接积分得到 π → 违反物理规律
✔️ 解决:Lambertian BRDF = ρ / π
- 白色材料反射率 ρ=1
- BRDF = 1/π → 恢复能量守恒(积分结果恰好=1)
这是 PBR 中至关重要的原则。
🌞 8. 直接光照(Direct Lighting)与软阴影
🔗 8.1 完整光照公式(面光源版)
包含:
- BRDF
- 光源面片 dA
- 入射 cosθ
- 发射 cosθ_emit
- 1/r² 衰减
- 光源亮度
- 可见性(遮挡)
还有关键的:
👀 Visibility Term V(x, y)
- 若点 x 与光源面片 y 之间被遮挡 → 0
- 可见 → 1 这就是软阴影的来源。
🎲 9. 用 Monte Carlo 做光照估计(Soft Shadows)
📌 思想
我们不能解析求解积分 → 必须用随机采样。
流程:
- 找到可见点 P
- 在光源上随机采样 N 个点 Y_i
- 对每个点做一次阴影检测(Shadow Ray)
- 若可见:累加
- 加上所有 cosθ / r² / 光源亮度 / BRDF
- 除以采样概率 & 样本数量
- 得到 P 点的直接光
这种方法:
- 自然产生软阴影
- 光源越大 → 阴影越软
- 采样越多 → 噪点越少
🚀 10. 下一讲预告:Monte Carlo 深入
下一部分讲内容:
- 如何用 Monte Carlo 计算 π
- Uniform Sampling
- Importance Sampling
- 用更高效的采样减小噪点
- Ambient Occlusion(环境光遮蔽)计算
🔑 要点总结(超简版)
- 光线直线传播 & cosθ 决定亮度
- 点光源随距离平方衰减
- 立体角控制光源“看起来的大小”
- Radiance(辐射亮度)是渲染最核心的物理量
- BRDF 决定材质外观
- White Furnace Test 保证不违反能量守恒
- 面光源 + Monte Carlo → 软阴影的关键