前言
从大表哥2发售以来,就一直想学习下里面的渲染技术。从体积云渲染到天气系统,从多光源的软阴影到车马的压痕轨迹,还有出色的抗锯齿,虽然别的游戏也有类似的功能,但它的实现落地就是做得更胜一筹,画面非常细腻。从截帧结果也能看出,R星花了很多功夫在那些“细枝末节”的效果处理上,这些部分在其他游戏可能就得过且过了,但也也是以性能为代价的,有些处理甚至也非常粗暴。
R星几乎很少在公共领域宣讲他们的渲染技术,印象中唯一一次就是SIGGRAPH 2019上他们分享了体积云和大气的渲染技术,大概强者就是这样孤傲?去年外网就有一篇博客分析过大表哥2的截帧分析,但博主写得有些简略,算是很好的科普级别的文章。
我这里是拿游戏性能测试时使用的渲染片段截帧分析的。不得不说大表哥2渲染一帧真的是干了太多事了,从RenderDoc看一帧的Event就有3w+。由于能力有限,我只能选几部分自己最感兴趣的尝试分析下。
我们要分析的这一帧渲染结果如下:
GBuffer Layout
常规的渲染Pass中,总共输出6张1920x1080大小的RT,并且都开了8x MSAA:
GBuffer | 格式 | RGB通道 | A通道 |
---|---|---|---|
GBufferA | R8G8B8A8_SRGB RGB:Base Color A:Unknown |
||
GBufferB | R8G8B8A8_UNORM RGB:Normal A:特殊Shading Model的Custom Data |
||
GBufferC | R8G8B8A8_UNORM RGB:Unknown A:逐材质的Shadow信息 |
||
GBufferD | R8G8B8A8_UNORM RGB:Unknown A:Unknown |
||
GBufferE | R16G16_FLOAT | ||
Depth | D32S8 |
GBuffer先摆到这里,有些用处还不太清楚,可以先参考文章最开始提到的那片博客,之后分析更多了会更新下上面的表格。
后续计划
ok,这篇文章只是开个头,因为RDR2中很多feature都干了很多事情,所以会把它们拆开到不同的文章中,内容暂定为:
- 阴影篇
- 抗锯齿篇
- 全局光照篇
那下一篇再见!