虚幻自定义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级别的,一种植被对应一...

Unity项目的优化思路和实践经验在此总结一下。

1.性能检测

要优化首先需要分析现有的性能瓶颈,获取性能数据,根据情况决定优化什么,如何优化。
性能分析的工具和方法:

-检测工具:Profiler、SnapdragonProfiler、IntelGPA、XCode

检测工具帮助我们实时分析游戏运行时候的资源,CPU、内存、GPU等使用情况,来定位当前项目的瓶颈和优化点。

//todo shader复杂度计算

-抓帧工具:FrameDebug、SnapdragonProfiler、RenderDoc、IntelGPA、XCode

这类工具的作用主要是分析GPU渲染的过程,分析DrawCall是否正常、绘制是否多余、RT是否冗余等问题。

值得一提的是,有些抓帧工具是可以统计每个DC的GPU耗时的,有时候对于性能分析有较大的参考意义,但个人实践过程中感觉RenderDoc的不准确,SnapdragonProfiler的还可以。

SnapdragonProfiler耗时的计算方法为:
DrawCall耗时 = DrawCall耗费的GPUBlocks数量 * GPU频率

//todo 贴一些实例图片

本文对URP使用的这段时间的一些理解和总结。从知乎转移:URP管线架构学习总结

1.URP渲染管线的架构图

理解一个系统设计比较重要的就是类图了。

2.各个类的一些作用和使用

(1)UniversalRenderPipelineAsset

本质是一个ScriptableObject类型,用于序列化URP的一些设置,General、Quality、Lights、Shadows等。

搬运知乎之前写的文章链接:(知乎把GIF转换成了MP4,不知道怎么显示在这里,就先这样吧) https://zhuanlan.zhihu.com/p/143261544

其实渲染里没有真正的透明物体,透明效果是通过颜色的Blend模仿到的。 正常的透明渲染需要一个一个前后混合,所以半透明是通过前向渲染。 透明的渲染混合指令Blend 原因子 目标因子 Blend 原RGB因子 目标RGB因子 原A因子 目标A因子 通过不同的混合组合,就可以达到各种效果。 如常见的: Blend ScrAlpha OneMinusSrcAlpha //Transparent Blend One One //Aditive Blend ScrAlpha One...