type
status
date
slug
summary
tags
category
icon
password
fullWidth
fullWidth
《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践
UE4移动端TAAU
TAAU(Temporal Anti-Aliasing Upsample)是一种图形渲染技术,用于减少锯齿,同时提升分辨率。它结合了时域抗锯齿(TAA)和上采样(Upsampling)技术,通过多帧采样和像素偏移量计算来平滑图像边缘,并在合成步骤中使用上采样来提高图像的清晰度。
- 相比于TAA,新增了Velocity Pass,并在原有的TAA Pass基础上使用了上采用技术:

Velocity Pass优化角色鬼影问题
- Velocity Buffer由两部分构成:屏幕空间速度(Screen Space Velocity)和角色蒙版(Character Mask)
- Screen Space Velocity:把每个像素点的速度向量(float2)编码成一张RGB8图像
- Character Mask:像素是否为角色区域编码成一张1bit二值图像
- Velocity Buffer带来的问题:性能消耗较大
- 角色本体和角色描边是分开渲染的,需要两个Velocity Buffer Pass分别处理本体和描边
- 每个Velocity Buffer由于要知道上一帧的历史数据,需要蒙皮两次
- 优化目标和方案

- History Pixel Clamp的问题和解决方案
- 用History Pixel Clamp方法,历史帧的权重较高画面会模糊产生重影;历史帧权重较低,画面会闪烁
- 解决方案是动静像素差异处理;使用运动速度插值动态和静态两套权重,达到静态更稳定,动态更清晰

- 使用锐化卷积核处理动态像素
图像上采样提高分辨率
图像上采样(Upsampling):一种用于增加图像分辨率的技术;通过在现有像素之间插入新的像素来放大图像,提高图像的分辨率。
- 重用了TAA的上采样,获取当前像素周围的像素数据,利用周围像素的信息来生成更清晰的结果,在不同设备上选择Lanczos、Lanczos2、Lanczos3滤波器
树的多平台适配方案
Streaming Assets:存放需要在运行时直接访问的资源文件。与其他资源文件不同,放在StreamingAssets中的文件不会被压缩或加密,而是原封不动地打包到应用程序;具有跨平台和只读性特点。

LOD(Level of Detail):通过为同一对象创建多个不同细节级别的模型,根据对象与相机的距离动态切换模型,减少渲染负担;如远处的树木使用底模,近处的树木使用高模。
HLOD(Hierarchical Level of Detail):通过将多个对象合并为一个层次化的代理模型来减少绘制调用;通过合并网格减少了需要渲染的对象数量,减少渲染负担。
- 在《鸣潮》中,PC端近景用的是Mesh Tree,中景用的是Billboard Tree,远景用的是Imposter Tree;移动端近景用的是Billboard Tree,中远景用的是Imposter Tree
- Billboard:使用2D平面来表示树木,这些平面始终面向相机;渲染阴影时,Billboard平面面向光源

- Imposter Tree:使用预渲染的2D图像来表示树木,这些图像会根据相机的视角动态调整;Imposter Buffer是一张32bit图,RGBA四个通道分别是8bit,表示不同的信息
- R和G通道:储存法线信息,通过八面体投影还原为3D法向量
- B通道:储存局部深度信息,用于还原在场景中的深度和世界坐标
- A通道:储存漫反射灰度信息,并用于区分树叶和树干,应用不同着色器
- 设计目标

- 通过Imposter Buffer中储存的局部深度信息,可还原齐次裁剪空间(Clip Space)中的深度;有了深度信息之后可以接受自投影、接受云层投影、投影到场景效果

- Dynamic Texture Array:在一个数组中存储多个2D纹理,并在着色器中通过索引进行采样;可以减少Draw Call,提高渲染性能;可以在运行时动态更新纹理数组中的内容,适用于需要频繁更换纹理的场景
- Author:Yuki
- URL:http://shirakoko.xyz/article/share-02
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts