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...

虚幻自定义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相关内容在渲染线程里非常常见。

UE的Mesh关于LOD的切换是用的屏占比ScreenSize,一般是美术设置几个屏占比的参数,本地看着差不多就行了。 下面研究下这个屏占比在引擎里是怎么运作的,方便理解和优化功能。 Q:这个ScreenSize是怎么生效的?A:ScreenSize先转换为距离,后续以距离的形式剔除和选择LOD。 Q:ScreenSize是如何转换成距离的?A:通过下面这个方法,把LOD的各个级别的ScreenSize转换为Distance,保存在LOD信息里。 也就是说,如果屏幕是方的的情况下: ScreenSize如果是0.5,绘制距离范围就是物体包围球半径的两倍。 ScreenSize如果是1,绘制距离...

修改基于UE4.27,实际代码因为UE5重构了,还没写UE5版本。 记录一下DFShadow随Cluster裁剪更新的修改过程。(上次UE直播好像说5.3重构了GPUScene相关) 遇到的问题:植被Instance的DistanceFieldShadow不会随着自身裁剪而更新。UE5应该还存在这个问题,美术同学会提出来这个问题的。 造成的原因是UE的DistanceFieldBuffer是基于SceneInfo级别的,一种植被对应一...