环境光 + 漫反射
1 / 17
在简单球体上学习光照项(漫反射/高光/边缘光)。
给光照加上一个"兜底亮度",核心就是这一行:
下面拆解它。
为什么需要环境光
纯漫反射的背光面是完全黑的。现实中,光会在空间里多次反弹,没有直接受光的地方也不会是绝对的黑。环境光(ambient)就是对这种"间接照明"的最简单模拟,一个固定的、不受方向影响的亮度底层。
代码里写的是:
amb 和 diff 的关系
代码把两者直接相加:
amb 是一个常数(0.18 = 18%),不管朝哪个方向都一样。diff 是漫反射,随方向变化,正对光时接近 1.0,背光时为 0.0。
两者加在一起的效果:亮部接近 1.18(会有一点过曝感),背光面不会完全黑,保留 18% 的亮度。
试着改一改
| 改动 | 效果 |
|---|---|
amb = 0.18 改为 0.05 | 暗部更暗,对比度更高 |
amb = 0.18 改为 0.5 | 暗部变很亮,整体偏平 |
(amb + diff) 改为 mix(amb, 1.0, diff) | 环境光和漫反射平滑混合,不会过曝 |
练习
当前练习区 amb = 0.0,背光面完全黑,修改 TODO 行,给 amb 设置一个合适的值(如 0.18),让球体的暗部也有一些基础亮度。
答案解析
初始状态:amb = 0.0,相当于没有环境光,背光面和纯黑的 Lambert 一样。
改动:把 amb 从 0.0 改为 0.18,给所有像素加上 18% 的固定亮度底层,背光面不再漆黑。
试着把 0.18 改成 0.35,然后和 0.05 对比,感受不同环境光强度对整体氛围的影响。