Lumen 之后,打光变成了可以实时试错的事
项目从 6 月开始进入版本突击,基本没有闲暇。好在 7 月主要需求做完了,进入打磨阶段,终于腾出手可以做一些业余研究。
结合项目现状和自己的兴趣,我选了 lighting 这个方向。
起因是知乎上的一个回答,里面贴了一位美术在 ArtStation 上的个人练习,水平很高。看完之后我意识到一件事:打光是少数几个不需要自己准备原材料的方向 —— 市面上有大量高品质的室内外资源,直接拿来练就行。
先跟课
在视频网站上找了好些 UE 打光课程,最后锁定了一位讲师:时长合适,难度和受众目标也和自己比较匹配。
跟着做下来很顺利。得益于那些高品质资源,室内和室外都做出了一些比较漂亮的光照结果。
跟课的收获是眼睛,不是手。它让我知道一张图”差在哪儿”,但还不构成一个项目。
一个斗胆的问题
课程做完之后想做点自主练习。碰巧在 Sketchfab 上看到一组 lowpoly 场景,和去年拿来做 Blender 练习的那一类很接近。
于是有了这个问题:既然 Lumen 已经几乎支持了全套的运行时 GI,那能不能把 Blender 里那种效果,直接做到运行时?
我的显卡只是一块 GTX 1080。还是想斗胆一试。
8 月把这件事实施了,在 GitHub 上开了 OpenLightingUE5 这个项目。
做了什么
核心是一套完全用 BP 开发的 TIME OF DAY 系统,可以系统化地控制路灯、车灯、屋内灯光和阳光 —— 灯光、直射光、材质自发光同时受控。
外面配了一系列 CameraGame 的 gameplay,用来在场景里取景和巡游。
有两件事是这次真正学到的。
一是 1080 能跑,靠的是软件路径。 这块卡没有硬件光追,Lumen 走的是基于 distance field 的软件追踪。这条 fallback 路径的存在,是整件事能在我的机器上成立的唯一原因。它的代价也很直接:细节和反射精度不如硬件路径,场景越复杂差距越明显。
二是自发光参与 GI,对 TOD 太关键了。 路灯、招牌、窗户的光都可以直接用 emissive 材质表达,不需要每一处都真的挂一盏灯。一套 TOD 要控制的对象因此少了一大截 —— 我控制的是材质参数,不是几百个 light component。
真正改变的是试错成本
这个项目最大的收获,不是”这个场景好看”。
是打光这件事的循环变了。以前是烘焙、等、看结果;现在 GI 直接在视口里给反馈,一次调整的成本从分钟级掉到秒级。
改变的是试错次数,不是画面上限。同样的一晚上,以前可能只够试三四个方向,现在可以试几十个。对打光这种高度依赖直觉和比较的工作,这个差别很大。
没做成的部分
本来想再精进一点,去参加一次 gamejam 活动。那段时间压力有点大,引发了比较严重的过敏和湿疹,需要多休息,最后作罢。
不过这个项目已经大大超出预期了 —— 它顺带完成了对 Lumen 的实测。BP 的 UI 框架和 TOD 框架也是能直接搬去下一个项目的资产。
适用边界
上面的结论绑在三个条件上:一块 GTX 1080、Lumen 的软件追踪路径、lowpoly 场景。
这三条里少一条,结论都可能不成立。我没有在硬件光追上做过对照,也没有在高密度、大量动态物体的场景里试过。任何”Lumen 可以直接上生产”的推论,都不该从这篇里引出去。