Origin
zhuanlan.zhihu.com
Tags
项目
收藏夹
创建时间
收藏类型
Cubox 深度链接
更新时间
原链接
描述
游戏中打光很重要,好的打光能直接让你整个画面立体,增加层次,掩盖瑕疵。
经常看二次元 UE 效果分享的肯定会发现,所有人都实现了一个叫多光源系统的东西。
实际上除了某些大佬实现的风格化多光源,并非需要特意做什么,因为为了让你的角色在实现 Ramp 控制阴影过渡的同时且能接受别的物体阴影投影,必然需要修改引擎 shader 代码里的 bxdf 部分,这个部分就是所有灯光需要调用的光照计算函数,所以自然实现了多光源。
但是真正实现多光源其实需要大量的打磨,有的大佬实现了不错的多光源效果。但是还是会有很多地方看上去不是那么的对,比如我们的面部阴影用的米哈游分享的 SDF 图做法,只能支持单个光源。
然后观察我们实际动画里,并没有出现明显的多光源的情况(有也大多数表现在边缘光)。
赛博朋克的灯够多吧
notion image
notion image
notion image
同时如果希望用 Ramp 图控制光源过渡,那么意味着你需要在材质编辑器算好 Ramp 颜色传入 Gbuffer,材质编辑器实际上是 Basepass 的一个流程,每个材质填入不同的 gbuffer,所以自然不能获取所有光源(这也是为什么 basepass 里你只能拿到一个 directional 和 skylight,因为实际 lightpass 渲染光源也要做裁剪)。硬要做只能修改 bxdf 得到一个用颜色 lerp 的二值阴影。
所以我保守一点考虑,只针对角色做一个最重要光源的 Ramp 过渡,其他可以通过别的方式表现。
这时就需要一个简单的灯光系统了,因为我们材质编辑器无法拿到除了 directional 和 skylight 以外的灯光,所以需要我们传入最近的灯光朝向。
空口无凭,我们来用万物起源原神来观察分析一下。
这是原神在灯照射以外的区域,只受月光(直接光),可以看到阴影角度和头发上的 ramp 过渡
notion image
notion image
一但靠近,就出现 ramp 跳变,可以观察到角色投影阴影和头发阴影 ramp 已经不对应了。
notion image
靠近之后我们还能看到一些细节,我们走动就能发现头发 ramp 实际上表现出的方向和灯光方向并不一致
这应该是为了防止出现角度过大引起一些很难看的角度,硬是偏移了 Light 方向。
我们再去在蒙德大教堂(室内场景)看的更清楚一些。
室内室外是可以分开设计,因为有加载,并非无缝切换
notion image
教堂里面有三盏灯
notion image
notion image
notion image
在完全阴影的地方出现了一个假的平行光。(猜测是为了在夜晚不透光的室内带来一点立体感)
在白天:
notion image
有直接光太阳光漏出来的场景,人物只受到大阳光
notion image
在暗处,人物做了阴影融合,会完全暗下,不会有 ramp 过渡。
notion image
不过也有一些假的,完全是 decal 的影子,注意区分。(晨曦酒庄)
同时所谓的室内太阳光也只是单独在外面打的聚光灯,因为我们可以观察影子的拉伸和方向改变。
notion image
notion image
notion image
两盏光都有的时候会进行逻辑判断选一个,所以在交界处走动会出现 ramp 跳变。
notion image
然而晨曦酒庄的夜晚在暗处没有 directionallight,我么可以从面部 sdf 阴影判断出。
经过总结如下:
在室外场景:
弱小的点光源,自发光灯并不对人物产生影响。
聚光灯和有一定强度的点光源会对人物产生 ramp 的改变,但是不会改变阴影。
在室内场景:
室内场景没有 directionallight,完全判断影响最大的光源,ramp 和阴影各有自己的一份。如有必要,在黑夜里增加固定方向 ramp 增加角色层次。
在 UE 里,我们走引擎的 deferred 管线,如果不进行一定程度的魔改(比如把角色拿到前向之类的)我们只能通过蓝图来获得的光源传入材质编辑器来修改 Ramp 方向。
由于我不是 gameplay 程序,没有想到特别好的方式获取光源,目前每个 tick 获取
notion image
notion image
我通过获取 距离 - Radius 的方式,判断这个值的最小值来获取影响最大的灯光。
notion image
如果都不满足就取平行光的方向。
如此一来就有了一个简易的灯光控制系统。
本来我以为这种东西应该比较常见,实际我发现很多二游并没有做
堡垒之夜的卡通角色只有 Fresnel 边缘光,没有主光或者主光看不到。
战双的角色有主光,但是只有一盏,并且在角色战斗时,像是有一个摄影师一直跟着你视角再给角色打光,所以他光都是假的。
幻塔的角色没有阴影融合,角色始终只有一个平行光并且在阴影地方也一直存在。
所以难道 ToonShading 的最终目标果然是 Unlit 嘛???
反正原神一直被吐槽,那么多 TA 一直在模仿,但是貌似还木有人能超越,感觉细节还是很多有可以说的地方。 > 本文由简悦 SimpRead 转码