生化危机2帧渲染

图片

一般注意事项


所有结果都是在相当旧的机器(i7 3770 + GTX 770)上获得的,该游戏在中等质量的DirectX 11中运行。 为了进行分析,使用了RenderDoc和Nsight。

游戏运行在引擎Re Engine上,后者成为MT框架的继承人-上一代Capcom R&D的引擎。 除了RE2,它还用于DMC5和RE7:Biohazard。

我无法在Internet上的RE Engine上找到资料,因此本文中的所有内容都是基于猜测(我希望是有道理的)。 我检查了大约90%的帧结构,并给出了算法的一般说明。 进一步的研究需要更多的经验和时间来进行逆向工程着色器。

框架结构


粒子/流体模拟


除其他事项外,游戏会生成波浪纹理(示例取自另一帧)。

粒子模拟0

粒子模拟0

波浪用于渲染水,该水不在分析的框架中。

一些结果将被复制到登台缓冲区,这表明该结果可以在CPU中使用。

计算光源清单


此段落生成可见光源列表,检查照明圆锥相对于可见金字塔的位置。 其结果是一个可见光源列表和一个将观看空间中的位置与相应光源进行比较的3D表。

还计算每个光源的可见实例列表,稍后在更新阴影贴图时使用这些列表。

白点


此段落基于先前的HDR图像和测量表建立亮度直方图。 然后,他根据此数据确定白点。

计量表

上一个

重叠对象的定义


检查重叠对象的边界框是否与计算着色器中的可见性金字塔相交,并填充间接参数的缓冲区。

水滴重叠几何


重叠的对象被渲染到低分辨率深度缓冲区中,然后检查边界框是否有深度输入到此缓冲区中。


样品0-3

使用的深度缓冲区被四次采样。 可能是为了补偿低分辨率。

遮挡剔除0

看起来像是相对于凝视定向的包围盒。

遮挡剔除0

重叠几何图形测试的一个示例(来自另一个框架)。 通过测试的像素(绿色)为每个实例在可见性缓冲区中写入一个标志(例如1)。

store_raw RWDrawIndirectArguments.x, v1.x, l(1) 

间接论点的积累


世界空间中几乎每个几何对象都是使用间接绘制调用来渲染的。 Nsight探查器显示对NvAPI_D3D11_MultiDrawIndexedInstancedIndirect的调用。 有关其使用的信息,请参见[ 1 ]和[ 2 ]。 RenderDoc阻止了MultiDraw扩展,因此在EventBrowser中将它们扩展为许多DrawIndexedInstancedIndirect,其中一些为空。

此遍的目的是从上一遍收集可见性掩码并生成参数缓冲区。

深度通道


没有什么不寻常的。 具有基本重叠几何的场景子集。

深度预先通过

几何+ G缓冲区传递的贴图



输出数据:

  • RT0-R11G11B10发光
  • RT1-rgba8 albedo.rgb + metallness.a
  • RT2-r10g10b10a2 normal.rg +粗糙度.b + misc.a
  • RT3-r16g16b16a16 fried_ao.x + velocity.yz + sss.a


渲染的模型使用高分辨率模型中的烘焙环境光遮挡。

HiZ计算


Hiz gif

多遍计算着色器定义了深度层次结构中的每个级别。

o


SSAO或HBAO +处理取决于播放器选择的参数。 就我而言,SSAO。

AO是根据上一遍的HiZ计算得出的。


全局高光+漫反射


使用一些非平凡算法,将光探测器,三次贴图和AO组合为漫反射和镜面反射全局贴图。

吉德

吉德

现场立方卡的示例。

吉德

全局照明的漫反射分量。

吉斯

高光全局照明的组件。

阴影贴图更新


为每个光源创建的阴影贴图会针对那些受动态对象影响的光源进行更新。 每个阴影贴图都放置在大量纹理中。


局部高光+漫射+ SSS


然后,计算每个光源对镜面和漫反射分量的贡献。

吉德

漫射+ SSS。 SSS效果在此框中不可见。

吉斯

组件镜面反射。

照明整合



镜面/漫反射光度/局部照明组件与反照率集成。

添加透明玻璃



添加所有光源后,将渲染透明玻璃。

体积照明/雾/烟计算



实际上,它只是一堆精灵。

应用体积照明/雾/烟雾



此段落计算出模糊的图像以改善雾照明。


如果用棋盘格图案替换原始的防雾面具。

吉斯

此段落的结果。

具有先前HDR图像的TAA


吉斯

TTA只是魔术。

运动模糊


吉斯

基于速度图,计算辅助模糊图。

吉斯

后处理


吉斯

此通道首先缩小图像。

吉斯

然后应用布隆过滤器,色调校正,失真和色差。

结论


该引擎积极使用计算着色器+间接渲染。 所有的网格和纹理都是高质量的。

游戏使用TAA / FXAA和玻璃作为后处理的延迟渲染。 您可以在此处阅读更多有关延迟渲染的技巧[基于Habré的文章]。 BC7压缩了许多纹理。 通常,使用的技术与[ 4 ]中描述的技术相似。

红利


SSS贡献


吉斯

我必须仔细搜索合适的框架以显示SSS的影响。

带有触手的怪物是如何呈现的


G病毒家伙最终形式

怪物分为许多部分。

胆量



游戏具有许多细节的血腥纹理。

纹理的Mip级别不仅被线性过滤。 在每个级别,锐化都会增强。 此外,某些纹理已经具有镜面高光(尚不清楚这如何影响其最终外观)。

几何形状


G病毒家伙最终形式

几何具有良好的拓扑。

乙肝


G病毒家伙最终形式

HBAO提供的质量比SSAO好得多。

冒烟



烟雾考虑锥形光源。


实际飞机用于渲染烟雾。

参考文献


[1] Kostas Anagnostou:基于GPU的遮挡剔除实验

[2] DanielRákos:多抽奖间接

[3] Adrian Correger博客

[4] 外星人:隔离

Source: https://habr.com/ru/post/zh-CN462443/


All Articles