Rendering God of War Ragnarok

前言

演讲的主持人是在2020年作为渲染的主程序加入Santa Monica的,在这之前是FarCry的项目组工作。刚来的时候渲染组里有6个人,之后随着项目的增长加到了10个人。

同时他也强调了自己其实是在开放世界项目的经验较为丰富,对这种线性叙事的游戏开发并不是很熟悉。

Untitled

Jira

首先上来讲了个项目管理工具,我表示直接跳过,对我这种大头兵暂时没有什么帮助。感兴趣的可以点下面的链接。

Jira | Issue & Project Tracking Software | Atlassian

需要解决的问题

总的来看需要解决的问题分为4个部分

  • Narrative Features
  • Visual Improvement and Art workflow
  • PlayStation 5 Enhancement
  • Helping Ourselves

Untitled

Narrative Features (我该怎么翻译这个东西)

Untitled

  • Snow and Ice

Untitled

Untitled

在前作里面虽然有雪,但是雪的深度并不够深,无法体现芬布尔之冬,不过他这里没有解释这套新的雪的系统的实现,因为他的同事已经做了该系统的分享(GDC Vault - Advanced Graphics Summit: Reinventing the Wheel for Snow Rendering),故这里就不再赘述。

至于冰的实现的话说是会到Siggraph上进行分享,有知道的同学可以给个链接(懒狗没有找到)。

  • Time of Day

Untitled

没有给出什么有价值的信息,表示跳过

  • Ragnarok

Untitled

这里主要谈到的诸神黄昏这个场景的挑战是同屏的人数太多了,并且有大量的动画在播放,给CPU的压力有亿点大。所以根据距离做了个切分,远景部分用flip book animation,近景是正常动画,然后中距离用的是提前录制好的动画进行循环播放。

Visual Improvement and Art workflow

强调改进工作流从而让艺术家们用更短的时间达到更高的质量。

Untitled

  • Lighting and GI Baking

首先说了下当前光照强度计算方式的问题。

Untitled

战神之前是用的相对光照强度,假设场景中有一个基本光源,然后其他所有的光源的Intensity都是相对于这个基本光源进行计算。

这套系统的优势有两点,在FP16的精度限制下没有太大问题,而且在解决场景之间的光照时会更少出现冲突。

Untitled

至于缺点则是这并非行业内的标准,导致新来的同事不能很好的快速上手这套光照系统。并且在游戏里其实并没有所谓的BaseLight给你当作参考,从而导致游戏的光照缺乏很好的一致性)。

Untitled

Untitled

在Diss完光照之后,又说了下当前GI的Build太慢了,生产力及其低下。

Untitled

也就是说在Light这块的问题就是上面图片总结的4个老大难。

  • 设置个简单光照都这么多事,不想干了,开摆
  • 所谓“正确”的设置也很难做到,不想干了,开摆
  • 每次要手动构建GI而且还经常容易过时,动一动又要重新手动烘焙,不想干了,开摆
  • 没人知道当前用的光照单位是啥,不想干了,开摆

所以接下来就提出了对应的解决方案

Untitled

可以看到基本上是一一对应相关的痛点。

Untitled

Untitled

在调整完之后可以看到整体的光照效果要好了一些(原来的那个太亮了)。

Untitled

之后就是开发一个自动Build GI的工具(工具管线是非常重要的!)。

  • Reflection and Refraction

在解决完光照问题之后,就开始着手反射和折射的相关优化。

Untitled

之前的做法是把参与反射和折射的几何渲染到两张RT里面,然后这些参与反射折射的几何体是艺术家手动指定。

Untitled

这么做的问题首先是不合常规的光照管线,不得不在额外在ForwardShading里面进行对应的处理,并且默认情况下毫无反射与折射,视觉效果难以让人满意。

Untitled

难以维护的结果自然就是工作效率的急剧下降(开摆!)

Untitled

然后结果就是更换到基于屏幕空间的做法了(正常来讲这个不应该才是正常解决方案么?为啥战神之前喜欢Geometry的做法?我不理解)。

PlayStation 5 Enhancement

Untitled

首选谈了下PS5版本和PS4版本的参数以及目标性能。

Untitled

然后还说了下PS5版本独有的一些Feature

Untitled

然后老哥又讲了讲自家的RayTrace Cubemap是怎么做的(怎么又回到反射去了)。

Untitled

看起来是SSR和光追结合在一起做的GI效果。

Untitled

Untitled

可以看到开了这套RayTrace CubeMap之后,反射的错位现象基本上消失了(仔细观察柱子的反射)。

Untitled

RayTracing的话不是对整个场景的复杂几何做,而是对ProxyMesh做,从而减少复杂度。

Untitled

在4k下的性能如上图所示,感觉还是可以接受的。

之后老哥又讲了讲ContactShadow是怎么处理的,这部分内容较多,所以建议大家去翻看原视频,大意其实也是基于光线追踪的做法。

Untitled

Untitled

可以看到新做法的阴影要锐利很多(观察阿特柔斯的弓在身上的投影)。

基于Raytracing的做法其实主要是将光照计算的更加精确,从而减少一些传统光栅化管线里面的漏光问题。

Untitled

然后又谈了谈SSAO升级到SSDO很有帮助,然后又加了SSGI(怎么开始觉得有点像Lumen了)。

PlayStation 5 Enhancement这一段感觉其实主要还是讲的利用硬件光追做点图形Feautre,并没有太多实际上的平台优化出现。

Helping Ourselves

个人感觉无干货,叠甲过

Optimization

Untitled

要优化,首先就要有性能标准,不过这里强调了GPU这边要把异步计算关了进行Profile。

Untitled

嗯?这个ImGUI不会是我想的那个ImGUI吧,没想到已经打入到3A项目中,表示惊讶,我还以为大厂的引擎会有更加炫酷的Profile工具。

Untitled

强调开会前大家要定下自己要研究的领域,不然开会就会很尴尬,没人有所准备。

Untitled

在Shader上的问题则是LightingShader的复杂度过高,且VGPR的使用也过多。

(Tips : VGPR相关可以查看quals-gpgpu-vrf.pdf (washington.edu))

所以为了解决这个问题,就写了一个VGPR的分析工具(工具很重要!),可以从Shader指令里面分析VGPR的使用。

Untitled

Untitled

至于在阴影上的优化则是在静态物体和角色上也用ProxyMesh。并且之后讲了下高效的利用Htile(我猜是PS5上的专门硬件?)来进行ShadowMap的优化。

Untitled

总结

成功离不开团队里的每一个人!

每次看到这些3A游戏,总是会感叹别人在项目管理以及工具流程上面的先进,希望有一天自己也能投身于这种项目,做做喜欢的东西吧。