UE基础:性能分析基础
方法一:Stat在编辑器界面的游戏窗口内,常用两个:FPS 和 Unit
显示效果:
前者显示 FPS,后者显示游戏线程、渲染线程和 GPU 的帧速率,以及 DrawCall 和 Primitive 数量
如果在编辑器中运行游戏,可以通过命令行输入 stat unit 或者 stat fps 开启:
方法二:GPU Profile快捷键:ctrl + shift + .
引擎中可以打开这里进行设置:
方法三:Unreal Insight路径一般在:\Engine\Binaries\Win64
注:
UnrealInsight 对内存要求比较高
以及其生成的 log 文件可能比较大
也可以检测内存泄漏问题
参考链接
【UE5】10分钟学会UE5性能分析,让你的游戏帧数起飞_哔哩哔哩_bilibili
Unreal Insights | Unreal Engine 4.27 Documentation
CustomMeshComponent Part1 VertexFactory
阅读目标
什么是 VertexFactory?VertexFactory 的作用?
VertexFactory 如何创建不同的资源?在哪里?需要什么?用到了什么?
如何链接到 Shader?Shader 的编译?
几个需要提前知道的知识RHIRHI:Rendering Hardware Interface,是一层对底层图形 API 的抽象层。每个引擎有自己专门的一个对底层图形 API 调用的抽象封装,在 UE 里这一层叫做 RHI
目的是隐藏不同平台的不同图形 API 的调用差异,经过这一层的封装提供统一的调用接口
FRenderResource 和 FRHIResource在 UE 的 rendering code 中有两个重要概念:FRenderResource 和 FRHIResource。
FRHIResource:是 RHI 层资源的基类,它包含一个可渲染资源的相关数据,比如顶点 buffer,索引 buffer 等等
FRenderResource:是定义了可渲染资源的通用行为模式的接口,存在于渲染模块,是我们能够直接交互和创建的资源。它提供创建和封装 FRHIReso ...
CustomMeshComponent Part0: Intro
阅读目标
什么是 MeshComponent?
CustomMeshComponent 的用途?为什么?
MeshComponents
UMeshComponent 作为 UActorComponent 的子类之一,并作为一些具有可渲染三角形集合的实例的抽象基类
最常见的 MeshComponent 如:UStaticMeshComponent,负责渲染静态网格资源
为什么需要 CustomMeshComponents?创建 CustomMeshComponent 能够允许我们获取对 Mesh 的完全控制权,主要有:
VertexShader:对每个顶点的完全控制,能够做到 material editor 无法做到的功能,例如将顶点分组应用不同的变换;或者在 USkinnedMeshComponent 或 USplineMeshComponent 中应用自定义的形变方式
VertexShader 的输入参数与资源:根据需要在 vs 中执行的逻辑,向内传递需要的参数和绑定所需要的资源
控制 vertex buffer 和 vertex layout:能够自定义顶点布局中所需要的元素 ...
【剖析虚幻渲染体系】03-渲染机制
阅读目标
了解 UE 渲染管线的过程,以及各部分的设计作用
了解目前渲染管线的优化逻辑与局限性
模型渲染管线传统图形 API 的绘制比如 OpenGL,首先在 CPU 端创建资源数据,然后在 GPU 上创建与绑定数据,最后调用 API 的绘制接口
对于商业游戏引擎,由于其业务需求需要每秒数十帧渲染复杂场景,有着大量的 DrawCall,不能直接调用图形 API
在真正调用图形 API 进行绘制前,必须要经过很多调优操作,比如:
遮挡剔除
动态和静态合并
动态 Instance
缓存状态和命令
生成中间指令再转译为图形 API 指令
等等
UE 4.22 之后的 Pipeline
FPrimitiveSceneProxy
FMeshBatch
InitViews ()
FMeshPassProcessor:: AddMeshBatch ()
FMeshDrawCommand
RenderBasePass ()
SubmitMeshDrawCommands ()
RHICommandList
DrawIndexedPrimitive
从 FPrimitiveScenePr ...
Cpp关键字:mutable
mutable 用于描述 C++的某个具有 const 属性的类中的成员数据是否可以修改
举例:
123456789101112131415161718192021222324252627class Record{ public: float SetAndGetValue(float NewValue) const { LastValue = CurrentValue; CurrentValue = NewValue; return LastValue; } void PrintMember() const { std::cout << "LastValue: " << LastValue << std::endl; std::cout << "CurrentValue: " << CurrentValue << std::endl; } private: mutable float Last ...
Unreal Engine 4 Rendering
Part 2:Shaders and Vertex Data在 UE 中有三个线程,GameThread、RenderingThread 和 RHIThread
GameThread 负责给 RenderingThread 提供渲染数据和渲染命令
RHIThread 负责接收 RenderingThread 提供的渲染资源,并发送资源以及相关指令给 GPU 进行渲染
ShaderCode 的生成发生在渲染线程(RenderingThread)
Shader 的创建与编译Shader在 UE 中,FShader 是所有 shader 的基类,每一个 FShader 类都有一个对应的 FShaderResource 负责记录这个 shader 对应的 GPU 资源。
从 FShader 派生出两个主要的 Shader 类:FGlobalShader 和 FMaterialShader
FGlobalShader任意一个 FGlobalShader 类型的着色器在内存中只有一个实例,它会把所有继承子类加入一个重编译的 Group 内(个人理解:这个 shader 类管理的,是 UE ...
UE基础:GameFramework
参考链接
84_Game Framework_哔哩哔哩_bilibili
UE基础:顶点工厂
问题
顶点工厂是什么?
有哪些种类?
作用是什么?
处理了什么数据?
输出了什么数据?
哪里需要用到它?
它用到了什么?
什么时候用的? (什么时候不用的?)
在材质中勾选和不勾选 UsageFlag “使用骨骼网格体”,对比生成的 GLSL_ES 3_1_ANDROID ShaderCode 文件
在 usf 中,不勾选的版本会使用 LocalVertexFactory.ush,勾选的版本会使用 GpuSkinVertexFactory.ush
UsageFlag:使用骨骼网格体
不勾选
勾选
<br>// #define GPU_SKINNED_MESH_FACTORY 1<br>// #define GPUSKIN_LIMIT_2 BONE_INFLUENCES 0<br>// #define GPUSKIN_UNLIMITED_BONE_INFLUENCE 0<br>// #define GPUSKIN_USE_BONES_SRV_BUFFER 1<br>
LocalVertexFactor ...
Gameplay-04: APawn
参考链接
《InsideUE4》GamePlay架构(四)Pawn - 知乎
下载GitHub指定数量文件或文件夹
安装浏览器插件: GitZip for github