SlideShare a Scribd company logo
Building Paragon in UE4
Building Paragon in UE4
• 目标平台:PS4
• 60Hz
• 1600x900 for 3D, 1080p for UI
• 目标平台:PC: Direct3D 11
• 适配
• 固定的方向光, 总体场景mesh静态为主
• 预烘培的GI(Lightmass)
• 动态的Per object shadows
• 同屏: <=10 英雄, <=120 小兵
• 对cpu,gpu,内存和网络的优化
•
•
•
•
•
•
•
•
•
•
•
•
•
•
• 预测位置,不用blend到idle
• 位置预测
• Distance Curve
• Rotation Curve
• Speed Warping
• 预测位置,不用 到
• :
•
•
•
•
• 分层组织
• 从上往下,从左往右
• 层次:
• LOCOMOTION
• LAYERS
• POST-PROCESSING.
• 通过特定的层从GAMEPLAY层控制技能效果
Building Paragon in UE4
Building Paragon in UE4
原始动画
缩放轴
缩放后的IK目标位置
结果位置
优化
• 动画的三大阶段:
• Tick (Game Thread)
• 从bp的event graph改到了C++
• Update (计算权重)
• 挪到了工作线程
• 对于event中的变量,加了“Fast Path”
• Evaluate (解压和blend)
• 挪到了工作线程,cook过程与计算一部分
增量数据, 快了近3倍
优化
• 去除大量内存申请,加了个stack allocator,
快了约2倍
• 对不重要的mesh用了固定的bounds(小兵)
• 利用了已经存在的URO
(Update Rate Optimizations)
• 根据距离或者Significance结果,降低
meshes的update频率
• 对远处的mesh,跳过插值计算
• URO update buckets
(separate populations)
• 优化前后的变化
• 优化后总体快了约23倍
• Update挪到工作线程后计算量
依旧,但是不再阻塞游戏线程
• 同屏角色过多后,传统LODs也不能完全解决问题 (
团战)
• Significance系统维护列表中对象的重要度,其中重
要度由游戏逻辑决定
• 对不同的游戏对象可以有不同的得分
• 允许per-LOD限制 (e.g. 只允许4个英雄使用
LOD1)
• 可以基于普通的LOD之上,由Significance来额
外修正
• Significance的评分可由gameplay和其他系统读取
• 大量减少单角色的component数量
• 减少ActorComp带来的transform更新计算
• AI在DS上使用nav mesh做碰撞
• 降低AI的网络更新频率(net freq)
• 旋转在客户端做插值
• 改进了变量延迟低频更新的插值处理
• 在数据同步中,也利用significance系统做了个网络的LOD
方案,对视觉上不重要的对象,降低更新频率
• 对于某些LOD,客户端不做碰撞检测
• 我们希望塑造丰富动态的角色, 需要很多物理对象
• PhysX太重,太多bodies后scenes太复杂
• 写了我们自己的刚体结算器: “AnimDynamics”
• 不支持碰撞
• 无物理场景管理
• 不阻塞游戏线程
• 不和其他物理对象产生交互
• 可配置的刚体约束
• 棱柱和角约束
• 平面约束
• 作为一个AnimBP的node
• 使用Nvidia的APEX
• 和Nvidia合作改进效率
• 从per-scene的模拟改成了per-cloth
• 这样更容易控制单个角色的布料计算开销
• 去掉了APEX中部分不必要的冗余开销
• Cloth的准备工作移到了工作线程
• 比之前的版本快了10~15倍
• 尽可能避免不必要的scene query,改进了overlap
• 改进Rotator <-> Quaternion转换
• 转换代码的优化 (SIMD + 近似)
• 大量减少转化发生的次数
• 修改部分组件接口,减少虚函数调用
• 减少内存分配,对某些分配使用stack allocator
Rot/Quat Conv.
(50 chars)
Before After
R -> Q 362 5
Q -> R 206 0
• 持续跟踪不同版本中Tick的Actor数
• 使用Time Manager或者其他手段手动
降低部分对象的tick频率
• 手动Tick部分对象
• 降低Task Graph的overhead以及
提升缓存一致性
• 尽可能的降低任务间的依赖关系,来减
少Task Graph的开销
• 对粒子的初始化进行了优化,在cook阶段进行
了尽可能多的预计算
• 当激活/失效粒子的时候,自动attach和detach
对应的component
• 减少不激活状态不必要的transform更新
• 很多特效对象由游戏逻辑动态生成(并不attach
在actor上)
• 纯客户端触发
• 和自动的attach/detach配合
• 核数: 4-8+
• 使用引擎中的task graph
• 拆散数据并行的passes 以改善负载平衡
e.g. EarlyZ / BasePass / Shadows / InitViews / Translucency
• 平台无关的指令列表
• 并行的指令列表生成 (DX11, PS4, XB1, DX12, Vulkan)
• 尽可能的并行指令列表转换 (PS4, XB1, DX12, Vulkan)
• 有序的提交
D
D
D
T
T
T
S
D
D
D
T, T, T S
T
S
D
D, D, D T, T, T S
• 更好的Texture Streaming结果
• 更准确的mips分析
• 更快速的Streaming
• 更稳定的frame 0质量
• 网络数据压缩
• Oodle生成字典
• 6kbps上行,23kbps下行
• 压缩率30%
Building Paragon in UE4
• 共用了HZB的mips
• 利用了TemporalAA来smooth输出
• ComputeShader,只用深度缓冲
靠depth buffer重建normal *
低面内容有刻面
• AsyncCompute和BasePass并行,更好的利用额外的
gpu处理单元
• PlayStation 4
• 单pass1600x900, 无双向上采样
• PixelShader 0.50 ms
ComputeShader 0.65 ms
AsyncCompute 0.2 ms
• 为了DBuffer decals,把CustomDepth放到了Gbuffer生成前(r.CustomDepth.Order)
DBuffer: 烘培的静态光照可影响Decals
CustomDepth: 特定的z buffer (支持256 stencil)
• Paragon用来:
• 角色身上的技能效果,物品效果,buff效果
• 全屏的pass来高亮墙后的角色
• 环境Decals
• 特效(地上的技能范围等)
• 需要降低:
• 顶点数
• 面数(Quad overdraw)
• Draw calls (合并材质)
• Skeletal meshes (5 LODs)
• 高模烘培贴图
• runtime使用从lod1开始
• 测试:Simplygon
• 手动 & 3DSMax Pro Optimizer
• HLOD (Simplygon)
• 在场景95%完成度后
• 合并mesh
• 合并材质
• 烘培贴图属性
1024 diffuse, 512 normal/metal/spec/roughness
Building Paragon in UE4
Building Paragon in UE4
• 静态投影 (Lightmass)
• 预先烘培的distance field shadows
• PreShadows
• 低开销的单采样PreShadows
• Per object shadow maps
• 对于Skinned mesh的Capsule shadows
• 类似ragdolls的设置
• 直接shadowing
• 方向基于接收这到光源的方向
• 柔和度来自 SourceRadius / SourceAngle
• 在预烘培的光照环境下有非常柔和的阴影
• 间接shadowing
• 方向和柔和度都来自lightmass烘培的volume light cache
• 再较低的精度上做计算
Particle Cutouts
• 半自动的引擎功能
• 更具texture内容和设定的alpha阈值
• 降低半透粒子的Overdraw / PixelShader开销
• 能用在SubUVAnimation
• 用了更多的顶点/面
• 不改变原始贴图资源
Posters
• 角色的teaser视频
• 4K
• 高渲染设置
• 3S皮肤,毛发,眼球渲染
• 强烈的DoF
• Lighting Channels
User Interface
• 尝试过3D UI
• 60 fps,部分更新频率更低
• 与3D分辨率无关,独立的缩放
• Unreal Motion Graphics (UMG)
• SMeshWidget
• 在3DSMax中制作的3D mesh
• 支持Hardware instancing
• 材质中2D距离用来计算ddx/ddy做
AAA
• Other UMG widgets
• 用UE4的UMG工具制作
•
•
•
•
•
•
•
•
•
•
未完
其他大量的改进
•
•
•
•
•
•
•
Bonus 1/2
Bonus 1/2
Name Help
r.ParallelBasePass Toggles parallel base pass rendering. Parallel rendering must be
enabled for this to have an effect.
r.ParallelInitViews Toggles parallel init views. 0 = off; 1 = on
r.ParallelPrePass Toggles parallel zprepass rendering. Parallel rendering must be
enabled for this to have an effect.
r.ParallelShadows Toggles parallel shadow rendering. Parallel rendering must be
enabled for this to have an effect.
r.ParallelShadowsNonWholeScene Toggles parallel shadow rendering for non whole-scene shadows.
r.ParallelShadows must be enabled for this to have an effect.
r.ParallelTranslucency Toggles parallel translucency rendering. Parallel rendering must be
enabled for this to have an effect.
r.ParallelVelocity Toggles parallel velocity rendering. Parallel rendering must be
enabled for this to have an effect.
r.RHICmdUseParallelAlgorithms True to use parallel algorithms. Ignored if
r.RHICmdBypass is 1.
r.RHICmdBypass Whether to bypass the rhi command list and send the rhi
commands immediately.
0: Disable (required for the multithreaded renderer)
1: Enable (convenient for debugging low level graphics
API calls, can supress artifacts from multithreaded
renderer code)
We’re Hiring
Building Paragon in UE4
Building Paragon in UE4

More Related Content

PDF
全部知ってたらTwinmotionマスター!TwinmotionのぷちTips・テクニック
PDF
待望のUE4新機能 ナイアガラでプログラマブルVFX
PDF
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
PDF
聖剣伝説3でのUE4利用事例の紹介~Making of Mana | UNREAL FEST EXTREME 2020 WINTER
PDF
カリギュラオーバードーズにおけるUE4へのデータ移植の手引き
PDF
Editor Utility Widget Petit Deep Dive
PPTX
UE4におけるLoadingとGCのProfilingと最適化手法
PPTX
猫でもわかるUnreal Engine4
全部知ってたらTwinmotionマスター!TwinmotionのぷちTips・テクニック
待望のUE4新機能 ナイアガラでプログラマブルVFX
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
聖剣伝説3でのUE4利用事例の紹介~Making of Mana | UNREAL FEST EXTREME 2020 WINTER
カリギュラオーバードーズにおけるUE4へのデータ移植の手引き
Editor Utility Widget Petit Deep Dive
UE4におけるLoadingとGCのProfilingと最適化手法
猫でもわかるUnreal Engine4

What's hot (20)

PPTX
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
PDF
UE4 アセットロード周り-アセット参照調査-
PDF
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
PPTX
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
PPTX
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
PDF
UE4でTranslucencyやUnlitに影を落としたい!
PDF
新しいエフェクトツール、Niagaraを楽しもう! ~Niagara作例のブレイクダウン~
PPTX
istorija digitalne animacije-90te-perisic-02
PDF
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
PPTX
UE4のレイトレで出来ること/出来ないこと
PDF
猫でも分かる Control Rig UE4.25 版
PDF
UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた
PDF
환경영향평가 의사결정지원 시공간 표출기술
PPTX
UE4を用いたTPS制作事例 EDF:IR アニメーション作成事例紹介
PDF
UE4のモバイル向け機能や最新情報などを改めて紹介!2019
PDF
UE4で作成するUIと最適化手法
PPTX
初心者がEQSやってみた
PDF
Twinmotion 2021とAEC分野向けソリューションのご紹介
PDF
Mobile AR Lecture6 - Introduction to Unity 3D
PDF
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
UE4 アセットロード周り-アセット参照調査-
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
NDC2012_마비노기 영웅전 카이 포스트모템_시선을 사로잡는 캐릭터 카이 그 시도와 성공의 구현 일지
UE4でTranslucencyやUnlitに影を落としたい!
新しいエフェクトツール、Niagaraを楽しもう! ~Niagara作例のブレイクダウン~
istorija digitalne animacije-90te-perisic-02
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
UE4のレイトレで出来ること/出来ないこと
猫でも分かる Control Rig UE4.25 版
UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた
환경영향평가 의사결정지원 시공간 표출기술
UE4を用いたTPS制作事例 EDF:IR アニメーション作成事例紹介
UE4のモバイル向け機能や最新情報などを改めて紹介!2019
UE4で作成するUIと最適化手法
初心者がEQSやってみた
Twinmotion 2021とAEC分野向けソリューションのご紹介
Mobile AR Lecture6 - Introduction to Unity 3D
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
Ad

Viewers also liked (8)

PDF
实时渲染动画时代的来临
PPTX
On Ramp to Unreal Engine
PPTX
White nights intro to vr with unreal engine - luis cataldi-Russian
PDF
Build a VR Pawn with Unreal Engine Luis Cataldi Russian
PPTX
Intro to VR with Unreal Engine
PPTX
Making VR Games and Experiences in UE4
PPTX
Teaching UE4 With Quest Based Learning Dr Cynthia Marcello
PPTX
Making VR with Unreal Engine Luis Cataldi
实时渲染动画时代的来临
On Ramp to Unreal Engine
White nights intro to vr with unreal engine - luis cataldi-Russian
Build a VR Pawn with Unreal Engine Luis Cataldi Russian
Intro to VR with Unreal Engine
Making VR Games and Experiences in UE4
Teaching UE4 With Quest Based Learning Dr Cynthia Marcello
Making VR with Unreal Engine Luis Cataldi
Ad

More from Epic Games China (10)

PDF
Unreal Open Day 2017_Unreal Engine 4 Animation
PDF
Unreal Open Day 2017 Unreal Engine Education & Training
PDF
Unreal Open Day 2017 Optimize in Mobile UI
PDF
Unreal Open Day 2017 Bringing Paragon Characters to Life
PDF
Unreal Open Day 2017 The Art of Robo Recall
PDF
Unreal Open Day 2017 Project Raven
PPTX
Unreal Open Day 2017 Review of Typical issues
PDF
Unreal Open Day 2017 UE4 for Mobile: The Future of High Quality Mobile Games
PDF
Unreal Open Day 2017 Designing Robo Recall
PDF
将桌面级VR通过Vulkan和 UE4移植到移动平台
Unreal Open Day 2017_Unreal Engine 4 Animation
Unreal Open Day 2017 Unreal Engine Education & Training
Unreal Open Day 2017 Optimize in Mobile UI
Unreal Open Day 2017 Bringing Paragon Characters to Life
Unreal Open Day 2017 The Art of Robo Recall
Unreal Open Day 2017 Project Raven
Unreal Open Day 2017 Review of Typical issues
Unreal Open Day 2017 UE4 for Mobile: The Future of High Quality Mobile Games
Unreal Open Day 2017 Designing Robo Recall
将桌面级VR通过Vulkan和 UE4移植到移动平台

Building Paragon in UE4

  • 3. • 目标平台:PS4 • 60Hz • 1600x900 for 3D, 1080p for UI • 目标平台:PC: Direct3D 11 • 适配 • 固定的方向光, 总体场景mesh静态为主 • 预烘培的GI(Lightmass) • 动态的Per object shadows • 同屏: <=10 英雄, <=120 小兵 • 对cpu,gpu,内存和网络的优化
  • 5. • 预测位置,不用blend到idle • 位置预测 • Distance Curve • Rotation Curve • Speed Warping
  • 6. • 预测位置,不用 到 • : • • • • • 分层组织 • 从上往下,从左往右 • 层次: • LOCOMOTION • LAYERS • POST-PROCESSING. • 通过特定的层从GAMEPLAY层控制技能效果
  • 10. 优化 • 动画的三大阶段: • Tick (Game Thread) • 从bp的event graph改到了C++ • Update (计算权重) • 挪到了工作线程 • 对于event中的变量,加了“Fast Path” • Evaluate (解压和blend) • 挪到了工作线程,cook过程与计算一部分 增量数据, 快了近3倍
  • 11. 优化 • 去除大量内存申请,加了个stack allocator, 快了约2倍 • 对不重要的mesh用了固定的bounds(小兵) • 利用了已经存在的URO (Update Rate Optimizations) • 根据距离或者Significance结果,降低 meshes的update频率 • 对远处的mesh,跳过插值计算 • URO update buckets (separate populations)
  • 12. • 优化前后的变化 • 优化后总体快了约23倍 • Update挪到工作线程后计算量 依旧,但是不再阻塞游戏线程
  • 13. • 同屏角色过多后,传统LODs也不能完全解决问题 ( 团战) • Significance系统维护列表中对象的重要度,其中重 要度由游戏逻辑决定 • 对不同的游戏对象可以有不同的得分 • 允许per-LOD限制 (e.g. 只允许4个英雄使用 LOD1) • 可以基于普通的LOD之上,由Significance来额 外修正 • Significance的评分可由gameplay和其他系统读取
  • 14. • 大量减少单角色的component数量 • 减少ActorComp带来的transform更新计算 • AI在DS上使用nav mesh做碰撞 • 降低AI的网络更新频率(net freq) • 旋转在客户端做插值 • 改进了变量延迟低频更新的插值处理 • 在数据同步中,也利用significance系统做了个网络的LOD 方案,对视觉上不重要的对象,降低更新频率 • 对于某些LOD,客户端不做碰撞检测
  • 15. • 我们希望塑造丰富动态的角色, 需要很多物理对象 • PhysX太重,太多bodies后scenes太复杂 • 写了我们自己的刚体结算器: “AnimDynamics” • 不支持碰撞 • 无物理场景管理 • 不阻塞游戏线程 • 不和其他物理对象产生交互 • 可配置的刚体约束 • 棱柱和角约束 • 平面约束 • 作为一个AnimBP的node
  • 16. • 使用Nvidia的APEX • 和Nvidia合作改进效率 • 从per-scene的模拟改成了per-cloth • 这样更容易控制单个角色的布料计算开销 • 去掉了APEX中部分不必要的冗余开销 • Cloth的准备工作移到了工作线程 • 比之前的版本快了10~15倍
  • 17. • 尽可能避免不必要的scene query,改进了overlap • 改进Rotator <-> Quaternion转换 • 转换代码的优化 (SIMD + 近似) • 大量减少转化发生的次数 • 修改部分组件接口,减少虚函数调用 • 减少内存分配,对某些分配使用stack allocator Rot/Quat Conv. (50 chars) Before After R -> Q 362 5 Q -> R 206 0
  • 18. • 持续跟踪不同版本中Tick的Actor数 • 使用Time Manager或者其他手段手动 降低部分对象的tick频率 • 手动Tick部分对象 • 降低Task Graph的overhead以及 提升缓存一致性 • 尽可能的降低任务间的依赖关系,来减 少Task Graph的开销
  • 19. • 对粒子的初始化进行了优化,在cook阶段进行 了尽可能多的预计算 • 当激活/失效粒子的时候,自动attach和detach 对应的component • 减少不激活状态不必要的transform更新 • 很多特效对象由游戏逻辑动态生成(并不attach 在actor上) • 纯客户端触发 • 和自动的attach/detach配合
  • 20. • 核数: 4-8+ • 使用引擎中的task graph • 拆散数据并行的passes 以改善负载平衡 e.g. EarlyZ / BasePass / Shadows / InitViews / Translucency • 平台无关的指令列表 • 并行的指令列表生成 (DX11, PS4, XB1, DX12, Vulkan) • 尽可能的并行指令列表转换 (PS4, XB1, DX12, Vulkan) • 有序的提交 D D D T T T S D D D T, T, T S T S D D, D, D T, T, T S
  • 21. • 更好的Texture Streaming结果 • 更准确的mips分析 • 更快速的Streaming • 更稳定的frame 0质量 • 网络数据压缩 • Oodle生成字典 • 6kbps上行,23kbps下行 • 压缩率30%
  • 23. • 共用了HZB的mips • 利用了TemporalAA来smooth输出 • ComputeShader,只用深度缓冲 靠depth buffer重建normal * 低面内容有刻面 • AsyncCompute和BasePass并行,更好的利用额外的 gpu处理单元 • PlayStation 4 • 单pass1600x900, 无双向上采样 • PixelShader 0.50 ms ComputeShader 0.65 ms AsyncCompute 0.2 ms
  • 24. • 为了DBuffer decals,把CustomDepth放到了Gbuffer生成前(r.CustomDepth.Order) DBuffer: 烘培的静态光照可影响Decals CustomDepth: 特定的z buffer (支持256 stencil) • Paragon用来: • 角色身上的技能效果,物品效果,buff效果 • 全屏的pass来高亮墙后的角色 • 环境Decals • 特效(地上的技能范围等)
  • 25. • 需要降低: • 顶点数 • 面数(Quad overdraw) • Draw calls (合并材质) • Skeletal meshes (5 LODs) • 高模烘培贴图 • runtime使用从lod1开始 • 测试:Simplygon • 手动 & 3DSMax Pro Optimizer • HLOD (Simplygon) • 在场景95%完成度后 • 合并mesh • 合并材质 • 烘培贴图属性 1024 diffuse, 512 normal/metal/spec/roughness
  • 28. • 静态投影 (Lightmass) • 预先烘培的distance field shadows • PreShadows • 低开销的单采样PreShadows • Per object shadow maps • 对于Skinned mesh的Capsule shadows • 类似ragdolls的设置 • 直接shadowing • 方向基于接收这到光源的方向 • 柔和度来自 SourceRadius / SourceAngle • 在预烘培的光照环境下有非常柔和的阴影 • 间接shadowing • 方向和柔和度都来自lightmass烘培的volume light cache • 再较低的精度上做计算
  • 29. Particle Cutouts • 半自动的引擎功能 • 更具texture内容和设定的alpha阈值 • 降低半透粒子的Overdraw / PixelShader开销 • 能用在SubUVAnimation • 用了更多的顶点/面 • 不改变原始贴图资源
  • 30. Posters • 角色的teaser视频 • 4K • 高渲染设置 • 3S皮肤,毛发,眼球渲染 • 强烈的DoF • Lighting Channels
  • 31. User Interface • 尝试过3D UI • 60 fps,部分更新频率更低 • 与3D分辨率无关,独立的缩放 • Unreal Motion Graphics (UMG) • SMeshWidget • 在3DSMax中制作的3D mesh • 支持Hardware instancing • 材质中2D距离用来计算ddx/ddy做 AAA • Other UMG widgets • 用UE4的UMG工具制作
  • 34. Bonus 1/2 Name Help r.ParallelBasePass Toggles parallel base pass rendering. Parallel rendering must be enabled for this to have an effect. r.ParallelInitViews Toggles parallel init views. 0 = off; 1 = on r.ParallelPrePass Toggles parallel zprepass rendering. Parallel rendering must be enabled for this to have an effect. r.ParallelShadows Toggles parallel shadow rendering. Parallel rendering must be enabled for this to have an effect. r.ParallelShadowsNonWholeScene Toggles parallel shadow rendering for non whole-scene shadows. r.ParallelShadows must be enabled for this to have an effect. r.ParallelTranslucency Toggles parallel translucency rendering. Parallel rendering must be enabled for this to have an effect. r.ParallelVelocity Toggles parallel velocity rendering. Parallel rendering must be enabled for this to have an effect. r.RHICmdUseParallelAlgorithms True to use parallel algorithms. Ignored if r.RHICmdBypass is 1. r.RHICmdBypass Whether to bypass the rhi command list and send the rhi commands immediately. 0: Disable (required for the multithreaded renderer) 1: Enable (convenient for debugging low level graphics API calls, can supress artifacts from multithreaded renderer code)