截取场景

  • 使用RenderDoc对MuMu模拟器下运行的燕云进行截帧。(Vulkan模式)

GPU粒子输出

  • 最开始输出了四张RT,在后面绘制粒子的时候会用到,应该是保存了GPU粒子系统输出的结果,在绘制粒子的时候控制粒子的状态。(256x256)

绘制阴影图

  • RT0绘制了角色的阴影,RT1暂时没有截取到绘制的情况。
    • 每帧都会更新。
  • RT2和RT3是第一层级联阴影,一张用来绘制阴影,一张用来采样阴影,每帧只绘制一部分对象,大概分16帧绘制完一张完整的阴影图。
    • 目前发现跑动的时候和光照方向发生变化的时候会触发更新。
  • RT4和RT5是第二层级联阴影,绘制策略和第一层相似,但绘制的周期更长。
    • 目前发现只有光照方向发生变化的时候才会触发更新。
  • 在所有画质下,阴影图尺寸均为1024x1024x6。

填充GBuffer

  • 一共使用了5张RT,渲染顺序:远景->角色->地形->物件->树干->花->头发->衣物->公告板草->插片草->公告板树->树叶->实体粒子(蝴蝶)-> 地表贴花。(省电:1200x675 | 平衡:1280x720 | 质量和极致:1300x731)
    • GBuffer0(R11G11B10):绘制了角色和落叶的光照。

    • GBuffer1(R8G8B8A8):RGB记录了基色,A像是AO。

    • GBuffer2(R8G8B8A8):R?G?B?A为草的模拟阴影。

    • GBuffer3(R8G8B8A8):RGB为法线,A?

    • GBuffer4(R32):深度图


采样阴影图

  • 把阴影绘制到GBuffer2的A通道上(草还没有阴影)

绘制光照

  • 依次绘制物件->模型植被->公告板植被的光照

绘制天空

八面体压缩
八面体压缩

绘制深度图、ShadowAO及深度雾RT

  • 绘制带有mipmap的深度图(1024x512 R16)(省电没有这一步 | 平衡:3级mips | 质量和极致:10级mips)
  • 由带有mipmap的深度图、法线图、阴影图生成,生成了存储ShadowAO及深度雾信息的RT(省电没有这一步)

降低分辨率及绘制粒子

  • 降低分辨率,进行后续粒子特效的绘制(省电:1200x675 -> 600x337 | 平衡:1280x720 -> 640x360 | 质量和极致:1300x731 -> 650x365)
  • 像是绘制与地形有关的RT?(省电没有这一步)
  • 绘制特效粒子,这个阶段用到了一开始生成的四张RT

绘制半透对象

  • 使用ShadowAO及深度雾RT进行了全屏的后处理,渲染出了草的假影
  • 使用与地形有关的RT,看着像是对地形进行了什么处理
  • 使用绘制特效粒子的RT,将粒子特效绘制到GBuffer0上
  • 绘制蜻蜓、睫毛、眉毛、头发等半透对象,绘制蜻蜓的时候也用到了一开始生成的四张RT,应该是用于控制蜻蜓的移动

Bloom与ToneMapping

  • 省电:没有降低分辨率和模糊的过程,直接由GBuffer0经由lut矫正生成
  • 平衡:1280x720 -> 320x180 -> 模糊 -> 80x45 -> 模糊 -> 亮度提取 -> 将各个分辨率的结果从小到大叠加混合,最后再用lut进行矫正
  • 质量和极致:1300x731 -> 325x182 -> 模糊x3 -> 81x45 -> 模糊x3 -> 20x11 -> 模糊x3 -> 5x4 -> 模糊 -> 亮度提取 -> 将各个分辨率的结果从小到大叠加混合,最后再用lut进行矫正
    ToneMapping前
    ToneMapping前
    ToneMapping LUT
    ToneMapping LUT
    ToneMapping后
    ToneMapping后

SMAA

  • 对角色周围的像素进行SMAA处理
    SMAA Step1
    SMAA Step1
    SMAA Step2
    SMAA Step2
    SMAA LUT
    SMAA LUT
    SMAA Result
    SMAA Result

绘制UI