zifa2003293 发表于 2022-9-7 20:36

UE5【实践】1.配置环境以及简单的shadingmodel添加

一:开篇配置

环境:Windows10 Unreal:5.0.2 rider:2022.1.1 epic
1.关联账户拉源码

(1)账户关联github





(2)下载源码

去github找epicgames拉源码下来,注意要先关联账户,才看得见private的引擎源码,不然直接点链接会404
https://github.com/EpicGames/UnrealEngine
2.构建项目

(1)生成项目文件

解压之后,先运行Setup(他会下载一段时间,大小接近20个G记得预留空间),完成后再再运行GenerateProjectFiles.就出现了sln文件,就可以使用我们的rider或者visualstudio打开。


(2)开始构建

给磁盘预留总大小220G以上空间(我最后文件夹大小214G)之后就可以vs或者rider构建运行就打开了引擎(我挂着构建了一晚上,也忘记看具体时间了,本人用的rider 晚上11.30开始构建,到3点半睡觉也没构建好,但11点起床就好了,配置为i7-10875笔记本)


(3)BUG修复

兴奋的启动却发现出现了模块visualstudio啥啥啥的无法加载,我猜测是使用rider的原因因此插件无法加载,解决方法为到代码里找到这个插件,把EnabledByDefault改为false就可以正确启动


运行成功后就是这样一个界面,和之前一样。


二:自定义shadingmodel

紧接上篇,环境仍然为5.0.2+rider
主要参考了这位大佬的文章https://zhuanlan.zhihu.com/p/404857208
下面只为能添加简单shadingmodel,具体的修改后续再写
1.修改c++部分

以下文件请全部修改完再一起编译(引擎编译时间比较长)
(1)shadingmodel与pin

<1>EngineTypes.h
·Engine\Source\Runtime\Engine\Classes\Engine\EngineTypes.h
添加自己的ShadingModel枚举


<2>MaterialShader.cpp
·Engine\Private\Materials\MaterialShader.cpp
在其中添加case将ShadingModel转化为字符串表述


<3>Material.cpp
·Engine\Source\Runtime\Engine\Private\Materials\Material.cpp
此处的修改是为了控制材质编辑器中针脚pin的开关


就是为了让图的两个pin在我们的自定义shadingmodel中能够打开


<4>MaterialShared.cpp
·Engine\Source\Runtime\Engine\Private\Materials\MaterialShared.cpp
在此处为我们开放的那两个针脚改个名字


(2)开放Gbuffer写入

<1>HLSLMaterialTranslator.cpp
·Engine\Source\Runtime\Engine\Private\Materials\HLSLMaterialTranslator.cpp
在此处添加宏,让shader走新分支,此宏控制CustomDataBuffer的写入


<2>ShaderMaterial.h
·Engine\Source\Runtime\RenderCore\Public\ShaderMaterial.h
在FShaderMaterialPropertyDefines中下加入如下代码,作用是控制GBuffer的写入
此处宏名称与上述HLSLMaterialTranslator中相同


<3>ShaderMaterialDerivedHelpers.cpp
·Engine\Source\Runtime\RenderCore\Private\ShaderMaterialDerivedHelpers.cpp
在CalculateDerivedMaterialParameters中加入,就是在最后加入我们之前定义的宏




<4> ShaderGenerationUtil.cpp
·Engine\Private\ShaderCompiler\ShaderGenerationUtil.cpp
在DetermineUsedMaterialSlots函数内加入, (true可以改换成bUseCustomData)


并且在ApplyFetchEnvironment函数加入


至此就完成了Gbuffer写入
编译完成后打开unreal材质编辑器就可以看到


(3)其他(序列化显示相关)

这部分不改问题也不大,也能实现下面的效果(当初就没改,后续完善续上的)
<1> PixelInspectorResult.h
Engine\Source\Editor\PixelInspector\Private\PixelInspectorResult.h


<2> PixelInspectorResult.cpp
Engine\Source\Editor\PixelInspector\Private\PixelInspectorResult.cpp


<3> PixelInspectorDetailsCustomization.cpp
Engine\Source\Editor\PixelInspector\Private\PixelInspectorDetailsCustomization.cpp


2.修改Shader部分

(1)着色模型

<1>ShadingCommon.ush
·Engine\Shaders\Private\ShadingCommon.ush
添加对着色模型的定义,这个宏将作为我们shader跑哪根线路的判断依据因为我们添加了一个模型 NUM需要+1


在之后的GetShadingModelColor函数中,定义Debug模式中显示的shadingmodel的颜色




<2>Definitions.usf
·Engine\Shaders\Private\Definitions.usf
在这里面定义默认值


至此可以在DebugView下看到自己的ShadingModle颜色




(2)GBuffer传递

<1>BasePassCommon.ush
·Engine\Shaders\Private\BasePassCommon.ush
将我们的模型添加剂进入GBUFFER的customdata write




<2>DeferredShadingCommon.ush
·Engine\Shaders\Private\DeferredShadingCommon.ush
让Gbuffer在解码时能读取CustomData变量


<3> ShadingModelsMaterial.ush
·Engine\Shaders\Private\ShadingModelsMaterial.ush
将数据CustomData压入GBuffer中


(3)自定义着色

<1>ToonShadingCommon.ush
新建·Engine\Shaders\Private\ToonShadingCommon.ush
可以新建一个文件存在自己shading的函数。


<2>ShadingModels.ush
·Engine\Shaders\Private\ShadingModels.ush
首先在其中引用我们之前的库


编写我们自己的着色模型(这里抄了YivanLee大佬的,speccular部分有问题报错暂时删除了)


并在下面的IntegrateBxDF添加分支


<3>BasePassPixelShader
·Engine\Shaders\Private\BasePassPixelShader.usf
最后对透明模式状态下代码进行修改(此处有误,有两个if,下面if也要加 下一篇会有修正)


最终重新编译引擎就行运行就行了,就得到了支持多光源的CustomShadingModel
最终效果



最后还看到个不用改引擎的方法
参考文章
页: [1]
查看完整版本: UE5【实践】1.配置环境以及简单的shadingmodel添加