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]