1 min to read
赛博朋克2077—让夜之城有光

简介:
该分享主要介绍,赛博朋克2077如何决定灯光管线以及相关技术的。因为夜之城庞大的体量,为了得到可预见、可靠的灯光,团队决定使用物理正确的灯光管线。物理正确的灯光管线(参考真实世界的自然光和人造光)可以提供一个坚实的基础/稳定的保险。(演讲还包含了光追部分,这里我跳过了)
光照管线要点:
- 光源要基于物理正确的参数(Lux/Lm)。
- 遵守PBR的材质。
- 全动态光源。
打光:
什么是赛博朋克风格?高度发展的技术和低生活水平产生强烈对比,在视觉上也能反应这种对比(如一名建筑工人为了更好地劳作装上了义肢)。
电影灯光参考:
- 视觉上的对比要清晰可见(可见的亮度分层,一个基于故事的主要颜色渐变,欠曝光风格)。
- 视觉的复杂度要支持故事。
- 视觉噪点要控制得不能影响前两点(饱和但是数量较少的颜色,细节分组)。
1. 基础风格
- 赛博朋克2077会用少量的灯光打出画面中不同的层次,一个清晰可见的颜色渐变,强制作为当前画面基调。以此可以在后期迭代的时候减少视觉噪点。(下方是引擎中Debug视图(全场景替换半灰非金属材质),类似UE中的光照视图)
- 欠曝在赛博朋克风格中看起来很好看,但是在游戏中会影响游戏性。所以在很多场景必须要让亮度平一点(为了游戏性考虑)。
- 赛博朋克2077杂糅了大量写实和夸张的风格,同时游戏希望有电影感,于是使用了电影级的后期调色LUT。在Nuke中分别制作HDR显示器和SDR LUT。
![]() |
![]() |
![]() |
---|---|---|
![]() |
![]() |
![]() |
2. 动态24H光照循环。
- 在添加人造光之前,会用太阳/月亮光,天光,作为基调。
- 用真实世界的值作为基础。但白天的太阳光会暗很多,晚上的月光天光会亮很多。
- 晚上使用真实天光可能太黑了,对游戏性有影响,如果在晚上的时候调节曝光,可能导致其他人造灯光过亮,所以提亮晚上的亮度。
- 白天的太阳光比真实世界减少了100倍,使其在自动曝光下不会过曝(100倍是一个比较平衡的值)。
- 因为在游戏中24H被压缩到了3H,最美的日出和日落时间就很少。所以赛博朋克2077人为 增加了一天中日出日落的占比。
3. 全局光照
- 带遮蔽的天光。
- 放置到各处的可流送Probe,可以动态地捕捉从几何体反射的光亮,已经天空的可见性和能量。同时Probe之间的几何体可见性数据(提前撒好的Surfels)也被使用来放置漏光。
- 全局光照系统只会计算离角色128-192米 之内的灯光。超过这个距离会使用Distant GI。远距离的GI使用反射/阴影贴图,这是一张从上而下的贴图,包含了漫反射和阴影信息,粗略预估环境灯光。这个贴图会每帧重新计算。
- 反射Probe按照不同的层级摆放,从大到下(放置在半空的大范围->街区级别中范围->街道房间级别小范围)。
4. 验证灯光
- 参考真实世界打的自然光,和MAYA的离线渲染进行一比一对比(在UE中可以进行Lumen/烘焙对比)。
5. 局部灯光
- 路灯作为开放世界中最重要的一层灯光,参考了真实世界的流明值色温值。
- 赛博朋克中还有很多面光,管状光源。赛博朋克用的是一种胶囊体光源(类似spotlight)。对于方形的广告牌,就用一个范围较大的胶囊体光源。(在UE中可以用光源长度和半径,但只会影响反射)
- 体积雾是营造氛围非常重要的一部分,同时也可用在空中制造颜色渐变,较少视觉噪点,增加层次。
- 游戏中的Probe对于从窗外到室内的光照反射不好,不支持高光反射。赛博朋克使用了一个叫portal light的东西,相当于是一个从室外照进室内的补光,会根据大气变化角度和颜色(夜间无效)。(UE中不涉及天气变化的话可以直接补光,或者使用light portal),同时也可以减少窗外的过曝现象。
- 为了更接近电影级的控制,(估计在过场动画中)有仅角色补光,也会开启仅角色的contact shadow。
6. 灯光优化
- 大角度,大范围的灯光会造成更多的阴影压力,在灯的边缘阴影就很不明显了。
- 赛博朋克2077将灯的范围和生成阴影的范围分开了,阴影范围可以比灯光照范围小。
- 在某些临近的光源可以把阴影范围调小,这样也不会有太明显的瑕疵。
- 赛博朋克2077将灯的范围和生成阴影的范围分开了,阴影范围可以比灯光照范围小。
- 当灯光密度太大,对性能的影响也非常明显。
- 当有好几排灯光的时候,可以将那些灯光设置为仅体积雾灯光(衰减距离小,不照射到任何物体上),然后用极少量的灯光来打光。这样也可以减少产生阴影的灯光。赛博朋克有8个光照通道体积,这种在室内使用光照通道volume的灯光一般不会生成阴影。
- 当有好几排灯光的时候,可以将那些灯光设置为仅体积雾灯光(衰减距离小,不照射到任何物体上),然后用极少量的灯光来打光。这样也可以减少产生阴影的灯光。赛博朋克有8个光照通道体积,这种在室内使用光照通道volume的灯光一般不会生成阴影。
- 阴影淡出淡入,UE好像没有这个功能。
- 在比较高的建筑,不常被光照到的地方可以用cached的静态阴影。
- 超远距离灯光,在大型城市中,远距离通常会在屏幕中有大量的灯光。赛博朋克的做法是将远距离的灯光替换成distant light(只有漫反射),不参与流送,而是一直保持加载状态。在远距离用体积雾实现光污染开销非常大,于是在远距离用plane particle制造这种光污染的效果(同时也可以用不同的颜色作为区域指示)。
结尾QA:
- 你们也会修改UE来实现上面的效果吗?(当时CDPR刚宣布全面转向UE)。
- 偏题了不想回答。开发经验不只局限于一个引擎内。
- 是否使用的ligthmap。
- 没有烘焙任何光照贴图。因为所有东西都是动态的,光照贴图烘焙的话会非常非常的大。GI Probe已经够大了。