寒郁轩良 发表于 2021-2-26 10:59

Unreal Shader (三) 自定义光照模型

使用Unreal 4.20亲测有效,4.22稍有不同。
C++引擎代码修改

1.Engine\Source\Runtime\Engine\Classes\Engine\EngineTypes.h
EMaterialShadingModel控制材质编辑器的UI菜单,决定Material Editor下拉菜单显示哪几个Shading Model。我们添加代码,建立新的shading model MSM_CustomA。
2.Engine\Source\Runtime\Engine\Private\Materials\Material.cpp
Umaterial::IsPropertyActive控制不同的shading model可以获得那些输入信息如diffuse specular metallic等。我们添加代码让CustomData0也作为CustomA的输入参数。
注意:对于Unreal4.22是在函数IsPropertyActive_Internal
如果要获得subsurface贴图输入支持:
Engine\Source\Runtime\Engine\Private\Materials\Material.cpp
\Engine\Source\Runtime\Engine\Public\MaterialShared.h
3.Engine\Source\Runtime\Engine\Private\Materials\MaterialShared.cpp
Fmaterial::SetupMaterialEnvironment通过不同的设置生成不同OutEnvrionment。
GetShadingModel函数控制OutEnvrionment使用哪个ShadingModel。我们添加代码,让CustomA作为可以输出的Shading Model。
之后写Shader时可以#if SHADINGMODEL_CUSTOM_A做定制化操作
C++阶段完成 编译引擎
Shader代码支持

4.Engine\Shaders\Private\DeferredShadingCommon.ush
定义SHADINGMODEL_CUSTOM_A和对应的ID。引擎可以通过MSM_CustomA或ID找到MATERIAL_SHADINGMODEL_CUSTOM_A与对应Shading Model的代码。
函数GetShadingModelColor控制不同Shading Model显示的颜色。我们在PS4_PROFILE和switch(ShadingModelID)中都添加SHADINGMODEL_CUSTOM_A和对应的标识颜色。
注意:对于UE4.22在 Engine\Shaders\Private\ShadingCommon.ush
4.Engine\Shaders\Private\ShadingModelsMaterial.ush
SetGBufferForShadingModel控制各种PBR数据如何写入FGBufferDate。我们控制写入Shading Model ID Texture Gbuffer的颜色,用来在渲染时进行不同光照模型的区分。我们还启用CustomData0。
5.Engine\Shaders\Private\BasePassCommon.ush
如果自定义Shading Model用到了CustomData0或1,需要在#define WRITES_CUSTOMDATA_TO_GBUFFER 添加 Shading Model来启用对Buffer读取的优化。
Shader自定义表现

5.Engine\Shaders\Private\DeferredLightingCommon.ush
GetDynamicLighting决定光light attenuation的计算方式,我们可以选择为自定义Shading Model添加另一种light attenuation的分支。
/*待尝试补充 在教程的Changing Attenuation Calculations*/
6.Engine\Shaders\Private\ShadingModels.ush
FDirectLighting IntegrateBxDF决定直接光的计算。我们添加代码,复制DefaultLitBxDF函数新建CustomLitBxDF然后让CUSTOM_A使用CustomLitBxDF光照计算。(否则我们自定义材质输出黑色)
7.Engine\Shaders\Private\BasePassPixelShader.usf
支持Translucent Object
/*待尝试补充 在教程的Supporting Lit Translucency*/

今早我梦醒了坎 发表于 2021-2-26 11:03

可以请教一下4.22还需改哪里吗,我的shadingmodel下拉列表始终无法显示我自定义的

hecgdge4 发表于 2021-2-26 11:04

可以参考reference的教程再操作一遍
页: [1]
查看完整版本: Unreal Shader (三) 自定义光照模型