在现代引擎中使用正确的渲染打光流程

作者:MaxwellGeng 2019-12-10
这是一篇给美术写的文章,之所以要写这篇文章呢,是因为在团队开发的过程中,不难发现一部分美术缺乏对现代渲染流程的理解,导致给场景做光照的过程中步骤完全错误,无法完成目标,那么在这篇文章中我们将完整讲解在有了场景和材质素材以后,该怎么把场景制作出最终的效果样式。

第0步,确保引擎着色本身是“正确的”。

这一点其实应该是由负责图形渲染的TA来解决。但是作为美术在这个过程也要负责叮嘱和监督图形TA。什么是“正确的”?简而言之就是在使用同样物理参数(金属度,粗糙度,表面色彩等)时进行渲染,渲染结果与参照物(可以是DCC如Substance Designer或Vray等离线渲染器)的结果达到相近的程度,当然由于性能限制,要达到100%相同是几乎是不可能的,那么要达到什么程度则需要美术和TA进行漫长的沟通(为什么漫长?请不要问我是怎么知道的,谢谢),比方说我们这里给出一个MPipeline与Substance Designer的效果对比:

Substance Designer测试文件

MPipeline渲染效果

高度图+曲面细分细节表现

完成这个步骤后,我们就基本可以确定不会“后庭失火”,也就是自家引擎不会给自己使绊子,因为确定自己使用的引擎是可靠的这一点总是最先要完成的工作。


第1步,导入素材,确定场景元素正确。

素材从DCC软件导入引擎这个过程也是需要特别留意的,因为你既不知道DCC的导入格式会不会有什么问题,也不知道引擎会不会做什么妖(引擎开发:喵喵喵???),所以确定自己的场景正确无误是很重要的,这里在准备好场景后对场景进行排查,可以确定场景的Geometry信息正确无误:

Albedo信息确定无误

Normal信息确定无误

第2步,关掉所有的后处理,并开始调整光照属性。

后处理无疑会严重影响打光师对实际效果的影响,尤其是Bloom,Auto Exposure等,所以我们要把所有的后处理都关掉,除了Tonemap以外,至于为什么我们马上会讲到。

灯光除了角度位置等物理,还有本身的强度和颜色。角度与位置摆放的核心思想在于,一定要“在有光的地方打光”,这一点很重要,在游戏开发的远古时期因为对间接光照的处理有限,因此经常在暗处打一些补光来烘托整个场景效果,这本是没办法的替代方案,然而现在部分美术人员依然留着这样的“坏习惯”。这是正常的情况,因为在影视制作中也常通过各种假灯光来烘焙效果,比如《冰雪奇缘》中的这个镜头灯光就明显不“正确”:


可以看到姐姐是背阴面,而妹妹则是在受光面,而两人明明是面朝同一个方向,两人也明明都在一个比较广阔的宫殿内。这样艺术的处理方法脱离现实但高于现实,立刻就能表现出姐姐和妹妹的心情,虽然不正确,但是用在这里是有理有据的。

然而,在游戏中如果使用这样的操作,则会导致情况完全与想象的背道而驰,这是因为游戏比起电影具有可互动性,玩家的视角是随时变化的,所以如果我们生搬硬套电影制作的方法,会导致效果非常假,这是应该格外注意并避免的。

以打光要往正确的地方打,这一点详细解释在我们的专业美术的文章中有详细的解释:

Lute Li:写实向室内房间摆设与打光

说完灯光位置角度问题,就是灯光的强度和颜色。首先是强度,在调整强度时一定要先关掉Tonemap,因为Tonemap会对高强度和低强度的HDR结果产生一个压制的效果,这会严重削弱对强度的判断,很多时候就会因为这样的情况导致实际灯光比看起来亮很多,烘焙出来的结果就会过曝,我们当然不希望这样的事情发生:

不加ACES Tonemapping时的效果

加ACES Tonemapping后的效果

可以看到,如果开着Tonemap,光照的强度会被严重影响,显然这是不应该的。

在强度调整的接近以后,就可以开始改变颜色,灯光默认是白色的,而我们在强度调整阶段也不应该改变默认值。开始调整颜色之前就需要开启Tonemap了,因为刚才讲过,Tonemap会对颜色表现带来影响,所以整个打光的过程可以理解成:关Tonemap->确定灯光是默认的白色->调整亮度(如果灯光强度过曝应该拉低整个屏幕亮度来监视灯光强度与周围暗处的对比)->开启Tonemap->调整色彩。

第3步,准备烘焙。

完成灯光调整后就进入烘焙准备阶段,除了检查模型UV2,检查模型之间有无贴面,破面等基本情况,还应该做一些特殊处理,比如在制作室内场景时可能为了室内受光完整,在窗口打一个面光源。这些特殊处理是否要用,怎么用,具体要看概念设计人员提出的要求。比方说我们这里的场景想要表现暖色调的教室,而室外天空球则是蓝色的,因此我们就在每个窗口打上暖色调的面光源实现效果。

第一次烘焙很大可能不理想,如果不理想则应该重复第2步的步骤,直到打光效果理想,并开启后处理检查最后结果。

打光结束后效果大致如此:(程序猿审美,请各位不要喷,因为我玻璃心,谢谢)


第4步,调整后期特效:

色彩的要素基本有了,在体积感上还有比较大的缺陷,体积不够,雾效来凑,我们这里直接使用MPipeline自带的体积雾组件来实现。直接在场景中摆块并调整雾效浓度和颜色:

场景里随便怼一个体积雾块……

调整体积雾块的位置大小和浓度色彩后体积感有了很大的改善:


在有了这么一个较为完整的渲染效果后,可以进行一些艺术化的调色,让效果符合游戏剧情想要表现的氛围:



到此为止,单个场景的打光基本算完成了,至于自动曝光和运动模糊这些需要在摄像机的运动过程中表现的效果则需要联系游戏逻辑进行制作,在此处就不多阐述了。

最后,作为MPipeline渲染管线的作者,本人衷心希望可以让管线的工具流程更加专业高效,并能为从事游戏制作的美术人员提供帮助,谢谢。

作者:MaxwellGeng
专栏地址:https://zhuanlan.zhihu.com/p/76235527

最新评论
暂无评论
参与评论