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基础上使用了上采用技术:
notion image

Velocity Pass优化角色鬼影问题

  • Velocity Buffer由两部分构成:屏幕空间速度(Screen Space Velocity)和角色蒙版(Character Mask)
    • Screen Space Velocity:把每个像素点的速度向量(float2)编码成一张RGB8图像
    • Character Mask:像素是否为角色区域编码成一张1bit二值图像
  • Velocity Buffer带来的问题:性能消耗较大
    • 角色本体和角色描边是分开渲染的,需要两个Velocity Buffer Pass分别处理本体和描边
    • 每个Velocity Buffer由于要知道上一帧的历史数据,需要蒙皮两次
  • 优化目标和方案
notion image
  • History Pixel Clamp的问题和解决方案
    • 用History Pixel Clamp方法,历史帧的权重较高画面会模糊产生重影;历史帧权重较低,画面会闪烁
    • 解决方案是动静像素差异处理;使用运动速度插值动态和静态两套权重,达到静态更稳定动态更清晰
notion image
  • 使用锐化卷积核处理动态像素

图像上采样提高分辨率

💡
图像上采样(Upsampling):一种用于增加图像分辨率的技术;通过在现有像素之间插入新的像素来放大图像,提高图像的分辨率。
  • 重用了TAA的上采样,获取当前像素周围的像素数据,利用周围像素的信息来生成更清晰的结果,在不同设备上选择Lanczos、Lanczos2、Lanczos3滤波器

树的多平台适配方案

💡
Streaming Assets:存放需要在运行时直接访问的资源文件。与其他资源文件不同,放在StreamingAssets中的文件不会被压缩或加密,而是原封不动地打包到应用程序;具有跨平台只读性特点。
notion image
💡
LOD(Level of Detail):通过为同一对象创建多个不同细节级别的模型,根据对象与相机的距离动态切换模型,减少渲染负担;如远处的树木使用底模,近处的树木使用高模。
HLOD(Hierarchical Level of Detail):通过将多个对象合并为一个层次化的代理模型来减少绘制调用;通过合并网格减少了需要渲染的对象数量,减少渲染负担。
  • 在《鸣潮》中,PC端近景用的是Mesh Tree,中景用的是Billboard Tree,远景用的是Imposter Tree;移动端近景用的是Billboard Tree,中远景用的是Imposter Tree
  • Billboard:使用2D平面来表示树木,这些平面始终面向相机渲染阴影时,Billboard平面面向光源
notion image
  • Imposter Tree:使用预渲染的2D图像来表示树木,这些图像会根据相机的视角动态调整;Imposter Buffer是一张32bit图,RGBA四个通道分别是8bit,表示不同的信息
    • R和G通道:储存法线信息,通过八面体投影还原为3D法向量
    • B通道:储存局部深度信息,用于还原在场景中的深度和世界坐标
    • A通道:储存漫反射灰度信息,并用于区分树叶和树干,应用不同着色器
  • 设计目标
notion image
  • 通过Imposter Buffer中储存的局部深度信息,可还原齐次裁剪空间(Clip Space)中的深度;有了深度信息之后可以接受自投影、接受云层投影、投影到场景效果
notion image
  • Dynamic Texture Array:在一个数组中存储多个2D纹理,并在着色器中通过索引进行采样;可以减少Draw Call,提高渲染性能;可以在运行时动态更新纹理数组中的内容,适用于需要频繁更换纹理的场景
 
Relate Posts
游戏AI行为决策-分层任务网络(HTN)的简单应用
Lazy loaded image
游戏AI行为决策-目标导向行为规划(GOAP)通用框架
Lazy loaded image
自制Python任务调度模块-MySchedule
Lazy loaded image
游戏算法-A*搜索算法知识梳理和通用框架
Lazy loaded image
游戏算法-Floyd搜索算法知识梳理和通用框架
Lazy loaded image
捣鼓记录:Unity内置渲染管线实现角色NPR渲染的简单实践
Lazy loaded image
UnrealCircle摘要:TypeScript、PuerTS、V8优化实践 by 王宏波UFSH摘要:虚幻引擎5 Motion Matching实践简介 by 王远明
Loading...
Latest posts
工作笔记:一些乱七八糟的踩坑记录
2025-4-17
游戏算法-Floyd搜索算法知识梳理和通用框架
2025-4-2
游戏算法-A*搜索算法知识梳理和通用框架
2025-4-2
游戏AI行为决策-目标导向行为规划(GOAP)通用框架
2025-3-23
自制Python任务调度模块-MySchedule
2025-3-20
学习笔记:23种设计模式
2025-3-19