找回密码
 立即注册
查看: 623|回复: 2

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

[复制链接]
发表于 2021-2-26 10:59 | 显示全部楼层 |阅读模式
使用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下拉列表始终无法显示我自定义的
发表于 2021-2-26 11:04 | 显示全部楼层
可以参考reference的教程再操作一遍
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-10 16:59 , Processed in 0.090486 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表