写在前面
计划完整学习AO相关,先从最直观的美术角度看看AO贴图如何烘焙及应用的,我觉得能更好的帮助我学习和理解,因此美术向的学习排在了图形学算法学习的前面。文中图片都是直接截图别人视频的内容,如有侵权请联系删除~
之后会继续更新图形部分的环境光遮蔽AO SSAO等内容。
AO贴图解决的问题光追出现之前,游戏主要渲染方法是光栅化。光栅化是传统的渲染流程(但也是初学必须了解的内容之一!),也是软件向硬件妥协的结果。
随着硬件的提升,制作游戏对渲染画面要求也变得更高了。然而光栅化的光影、阴影等都与现实区别较大——仅计算直接光照,为了渲染出更真实、光影效果更加丰富的游戏画面,渲染开始向着全局光照效果靠拢。于是,基于此前的光栅化基础,出现了一系列计算全局光照的技术,本篇文章讲的AO贴图基于的原理Ambient Occlusion就是其中之一。
Ambient Occlusion,中文直译为环境光遮蔽。各种教程经常会提到“AO贴图”就是指现在所讲的AO。AO贴图解决的问题是间接光部分的:由于模型自身的凹凸不平,自己会遮挡自己,结果环境光照到的时候,就会比其他部位暗一点。这也正可以理解为什么是“环境光” “遮蔽” 了。
1 PBR中的AO贴图下图( 图源知乎)是PBR两个工作流需要的贴图,其中AO贴图和法线贴图、高度贴图一起可在Metal/Roughness、Specular/Glossiness两种管线中流通,PBR Guider中把他们叫做Common Maps,即通用纹理。
2 烘焙AO贴图我们结合次世代建模流程来看,AO贴图应该是流程(下图所示)中的第5步完成的:
烘焙AO常用的软件一般有Toolbag(八猴)、Substance Painter(SP)、knald等,b站随便找了个烘焙AO的视频:SP烘焙贴图 & Blender 的 AO贴图节点连接方法,直接截图这位UP的过程来过一遍实际项目中烘焙AO的流程,作为个人学习记录。
注意:这种在软件中直接烘焙好的AO纹理是不包含相邻对象阴影的,只是一个简单的自阴影贴图(self-shadowing map)。
2.1 导出高、低模型此时高、低模已经做好就绪,他是在blender里建好模型后导出的:
2.2 基于高模烘焙将低模导入SP,再基于高模烘焙各种贴图,跟AO贴图一起烘焙的还有法线(切线空间&世界空间)等贴图:
烘焙完成后,随便拖入一个材质查看当前包括AO贴图、法线贴图在内的贴图效果:
导出贴图,可以发现AO贴图其实是一张8位的灰度图:
3 应用AO贴图本小节所说的应用是在如blender等建模软件中的应用,至于引擎中是有固有流程的,且拖入指定位置就行比较简单,就不再写了。
3.1 直接叠baseColor×看上去是属于美术的东西,好像没什么讲的,其实AO如何应用也是非常重要的!
例如上述教程中这位UP主的做法是把AO贴图直接跟baseColor正片叠底,如下图:
这样做的后果是——任何光照都会受到AO的影响,但是AO本质上是记录间接光的遮蔽信息,是不影响直接光照部分的效果的,这样一叠就违背了环境光遮蔽本来的意思和作用。
3.2 单独赋予1个材质√给AO贴图一个单独的材质,这才是正确的做法。过程参考的话可以看这个视频:Blender使用AO贴图丰富材质细节,环境光遮蔽贴图使用,视频中跟我表达的是一个意思,给AO和baseColor分别都连了一个Principle BSDF材质节点,如此二者光照效果是可以区分开的,还给了一个渐变节点作为调节AO程度的参数: