已经在UE4.27 添加了 有两种, 一种是蓝图调用的GlobalShader Draw调用。 另一种是渲染线程过程中加了一步,可以做个类似后处理的那种。 记录第一种蓝图调用的这种,需要的所有东西: 1.C++的Shader结构Shader的声明,对应usf里的文件和方法,shader本身的参数定义 123456789101112131415161718192021222324252627282930313233343536373839404142//--------------VertexShader-------------------class FLoyGlobalShaderVS :...

1.什么是PSO?PSO(Pipeline State Object)是现代图形API(DX12、Vulkan、Metal)提出的新概念,以前的API设置VS、Rasterizer、PS、BlendState这些状态时,需要一个一个调用设置,PSO可以理解就是把这些状态封装为一个Object,一次调用SetPipelineState的API即可。 2.为什么需要Cache PSO?游戏在运行过程中,根据底层API,会有需要创建新的PSO对象的时候,这个创建的过程比较耗时,会导致卡顿。PSO...

1.UE的DistanceField

距离场的生成,有MeshDistanceField和GlobalDistanceField

UE的主要应用是DFShadow、DFAO、材质DistanceFieldToNearest

https://dev.epicgames.com/documentation/en-us/unreal-engine/mesh-distance-fields-in-unreal-engine

连接到PS5之后,可以通过Razor GPU For PS5,截帧分析每个DrawCall的具体消耗。 1.打开RazorGPUForPS5,点击Capture——GPU Capture截帧这个工具截出来没有RenderDoc那样对Pass做分类,所以需要上下判断一下当前是哪个阶段(PrePass、BasePass等) !!!!在截帧之前执行一下命令行profilegpu再截帧,就可以看到Pass分类了!!! 2.点击Capture——ConnectReplay如果不连接Replay就无法像RenderDoc那样看到当前RT绘制了什么,只能看到RT的最终结果 3.点击Capture——GPU...

UE4里GPUScene相关的梳理。 1.引擎传输Primitive数据到GPU的方式什么是PrimitiveData? PrimitiveData是UPrimitiveComponent级别的几何数据,包括LocalToWorldMatrix,WorldPosition,AABB,LightMap等数据。 传统方式每个Primitive一个UniformBuffer,每次DrawCall绑定。 1234567891011GameThread→ FPrimitiveSceneProxy→ CreatePrimitiveUniformBufferImmediate()→...

虚幻自定义MeshPass在此总结一下。 基于UE5.1 Github版本 UE5 AddOutlinePass https://zhuanlan.zhihu.com/p/597864516 UE4 AddOutlinePass...

虚幻自定义ShadingModel在此总结一下。

基于UE5.1 Github版本

什么是ShadingModel?

在UE的材质编辑器里,材质有ShadingModel可以选择,基本上有Unlit、DefalutLit、Subsurface、ClearCoat、Hair等可以选择。

在BasePass画GBuffer的时候,会把像素的ShadingModelID记到GBuffer里。

在后续光照的时候,ShadingModels.ush的IntegrateBxDF(),根据不同的ShadingModel,得出不一样的FDirectLighting BRDF结果。

虚幻自定义MeshComponent在此总结一下。

基于UE5.1 Github版本

1.几个比较重要的概念

UPrimitiveComponent

1
2
3
4
class ENGINE_API UPrimitiveComponent : public USceneComponent, public INavRelevantInterface, public IInterface_AsyncCompilation
{
};

UPrimitiveComponent继承于USceneComponent,所以具有Transform属性和父子嵌套的能力。

UPrimitiveComponent是一切几何组件的父类,比如UE自带的ShapeComponent、StaticMeshComponent、SkeletalMeshComponent等组件追溯上去都是继承UPrimitiveComponent。

UPrimitiveComponent相关内容在渲染线程里非常常见。