上一篇处理了第一种暗——表面朝向造成的明暗。这一篇讲第二种:遮蔽。
A.O. 渲染
在 3D 数字渲染中,一种有用的渲染技术称为 A.O. 渲染,其中 A.O. 代表 Ambient Occlusion(环境光遮蔽)。它们通常看起来非常白,但阴影可以非常深。
例如,Unity 文档中的一个示例:https://docs.unity3d.com/Packages/com.unity.postprocessing@2.0/manual/Ambient-Occlusion.html
另一个来自 https://vr.arvilab.com/blog/ambient-occlusion 的示例。
A.O. 渲染的原理是,我们假设光线从各处以相等的照度照射。只有光线无法进入的地方会显示为非常深的阴影。
A.O. 阴影的原理是,当表面彼此靠近时,它们会产生阴影。距离越远,阴影越柔和。否则,阴影可以深如黑色。
但是,请注意这些阴影不是由投射光线产生的,所以它们不是投影;它们存在是因为进入的光线在衰减。
这个区别很重要,值得展开说:
| 遮蔽阴影 | 投影 | |
|---|---|---|
| 成因 | 光进不来 | 光被挡住 |
| 依赖光源方向 | 不依赖 | 完全依赖 |
| 位置 | 永远在两个表面的夹缝里 | 在遮挡物的背光侧 |
| 边缘 | 总是柔和,随距离渐变 | 可以很硬(点光源近处) |
| 光源移动时 | 不动 | 跟着动 |
遮蔽阴影不会因为你换了光就消失。 阴天的户外几乎没有投影,但所有的夹缝、褶皱、接触点依然是暗的——那就是纯粹的遮蔽。这也是为什么阴天的照片看起来"发灰但依然有形体"。
遮蔽出现在哪里
只要问一个问题:这个点能看到多少天空?
- 接触点:两个物体相碰的地方。箱子和地面的接缝、脚和地板、手指与手指之间。这是最深、最锐的遮蔽。
- 内角:墙与墙、墙与地的交角,抽屉的内侧,杯子的内壁。
- 褶皱与凹陷:布料的褶子、鼻翼两侧、眼窝、耳廓内部、腋下。
- 紧邻但不接触的表面:手臂贴着身体但没碰上时,两者之间仍然会互相遮蔽。
反过来,凸起的地方永远不会有遮蔽:鼻尖、膝盖、肩峰、指节。这些位置在 A.O. 图里是纯白的。
衰减规律
遮蔽的强度只取决于距离:
- 两个面贴在一起 → 接近黑。
- 相隔一点 → 中等灰,边缘开始柔化。
- 相隔较远 → 几乎没有。
所以画遮蔽时,笔应该从接缝开始,向外迅速衰减。最常见的错误是画成一条均匀宽度的深色描边——那看起来像轮廓线,不像阴影。正确的样子是紧贴接缝处最深,一两个像素内就开始变浅,然后拖出一段柔和的尾巴。
另一个错误是把遮蔽画得太宽。一个放在地上的球,接触点的遮蔽只在球和地面之间那个极小的楔形区域里,不会蔓延到球的半个下半部。蔓延开的那部分是朝向造成的暗,属于上一篇的内容。
示例 1 室内场景
再次,让我们以前一笔记中的室内场景和角色为例。
注意阴影在光线无法进入的区域变得有多深。
通过将 A.O. 阴影与我们之前着色步骤中的灰度表面朝向相乘,可以实现更写实的室内渲染。
[ 应用 A.O. 之前 ]
[ 应用 A.O. 之后 ]
注意场景中柔和阴影的放置方式。
这里的关键是 "相乘" 这个动作。遮蔽不是新加的一层灰,而是对已有明暗的衰减。在数字绘画里就用正片叠底(Multiply)图层;在传统素描里,就是在已经铺好的调子上再压一层。这保证了亮面的遮蔽仍然比暗面的遮蔽亮——因为遮蔽削减的是"能进来多少光",而不是"最终有多暗"。
如果你用的是叠加或者直接画深色,结果会是亮部和暗部的遮蔽一样黑,画面立刻失去层次。
示例 2 角色
角色身上遮蔽最重的几个位置几乎是固定的,可以当成清单用:
- 下巴与脖子的交界(这是全脸最深的一处)
- 鼻翼两侧、鼻底
- 上眼睑投下的眼窝
- 耳廓内部
- 锁骨窝
- 腋下、肘窝、膝窝
- 手指之间、指根
- 衣物的褶皱底部,以及衣服与身体之间
把这些位置压暗,人物立刻就"坐"进画面里了。这一步做完之前不需要考虑光源在哪。
下一篇讲第三种暗:投影。
