From 63a080257247aca8c43add2e0376d08fc8f4b217 Mon Sep 17 00:00:00 2001 From: BlueRose <378100977@qq.com> Date: Sun, 18 Feb 2024 17:15:21 +0800 Subject: [PATCH] vault backup: 2024-02-18 17:15:21 --- .../plugins/various-complements/data.json | 4 +- .../RenderingPipeline/ShaderModel添加.md | 74 ++++++++++++++++++- .../卡通渲染相关资料/卡通渲染开发总览.md | 21 ++++-- 3 files changed, 90 insertions(+), 9 deletions(-) diff --git a/.obsidian/plugins/various-complements/data.json b/.obsidian/plugins/various-complements/data.json index a97cddf..c5c973d 100644 --- a/.obsidian/plugins/various-complements/data.json +++ b/.obsidian/plugins/various-complements/data.json @@ -162,8 +162,8 @@ "ShaderModel添加": { "ShaderModel添加": { "internalLink": { - "count": 1, - "lastUpdated": 1707399161946 + "count": 2, + "lastUpdated": 1708241946481 } } } diff --git a/03-UnrealEngine/Rendering/RenderingPipeline/ShaderModel添加.md b/03-UnrealEngine/Rendering/RenderingPipeline/ShaderModel添加.md index f49ec73..e644822 100644 --- a/03-UnrealEngine/Rendering/RenderingPipeline/ShaderModel添加.md +++ b/03-UnrealEngine/Rendering/RenderingPipeline/ShaderModel添加.md @@ -3,10 +3,32 @@ - UE5.2 https://zhuanlan.zhihu.com/p/658700282 - UE5.1 https://zhuanlan.zhihu.com/p/565837897 +# 备注 +添加的定义: +- MATERIAL_SHADINGMODEL_TOONSTANDARD +- SHADINGMODELID_TOONSTANDARD +- PIXEL_INSPECTOR_SHADINGMODELID_TOONSTANDARD + +添加的功能: +- Material + - 材质编辑器引脚 + - 相关引脚控制 + - ShaderModel +- ViewMode - BufferVisualization + - ShaderModel可视化 + - ToonBuffer可视化 +- PixelInspector # c++部分 ## 添加ShaderModel - EngineTypes.h 在EMaterialShadingModel中添加ShaderModel枚举 +## 材质宏添加数值 +ShaderMaterial.h给材质宏`MATERIAL_SHADINGMODEL_TOONSTANDARD`添加数值。 +```c++ +uint8 MATERIAL_SHADINGMODEL_TOONSTANDARD : 1; +``` +之后再ShaderGenerationUtil.cpp的ApplyFetchEnvironment()与DetermineUsedMaterialSlots()添加对应代码。 + ## 添加材质编辑器引脚 - SceneTypes.h 在EMaterialProperty中添加2个引脚属性名称枚举。 - Material.h 在UMaterial类中添加FScalarMaterialInput类型变量CustomData2与CustomData3。 @@ -74,6 +96,53 @@ ENGINE_API void SetConnectedProperty(EMaterialProperty Property, bool bIsConnect PropertyConnectedBitmask = bIsConnected ? PropertyConnectedBitmask | (1i64 << (uint64)Property) : PropertyConnectedBitmask & ~(1i64 << (uint64)Property); } ``` + +## 控制引脚 +### Material.cpp(控制引脚开启) +在IsPropertyActive_Internal()中修改: +```c++ +case MP_CustomData0: + Active = ShadingModels.HasAnyShadingModel({ MSM_ClearCoat, MSM_Hair, MSM_Cloth, MSM_Eye, MSM_SubsurfaceProfile, MSM_ToonStandard, MSM_PreintegratedSkin }); + break; +case MP_CustomData1: + Active = ShadingModels.HasAnyShadingModel({ MSM_ClearCoat, MSM_Eye, MSM_ToonStandard, MSM_PreintegratedSkin }); + break; +``` + +### MaterialShared.cpp(修改引脚显示名称) +在MaterialShared.cpp的GetAttributeOverrideForMaterial()中修改: +```c++ +case MP_CustomData0: + CustomPinNames.Add({ MSM_ClearCoat, "Clear Coat" }); + CustomPinNames.Add({ MSM_Hair, "Backlit" }); + CustomPinNames.Add({ MSM_Cloth, "Cloth" }); + CustomPinNames.Add({ MSM_Eye, "Iris Mask" }); + CustomPinNames.Add({ MSM_SubsurfaceProfile, "Curvature" }); + CustomPinNames.Add({ MSM_ToonStandard, "ToonDataA" }); + CustomPinNames.Add({ MSM_PreintegratedSkin, "ToonDataA" }); + return FText::FromString(GetPinNameFromShadingModelField(Material->GetShadingModels(), CustomPinNames, "Custom Data 0")); +case MP_CustomData1: + CustomPinNames.Add({ MSM_ClearCoat, "Clear Coat Roughness" }); + CustomPinNames.Add({ MSM_Eye, "Iris Distance" }); + CustomPinNames.Add({ MSM_ToonStandard, "ToonDataB" }); + CustomPinNames.Add({ MSM_PreintegratedSkin, "ToonDataB" }); + return FText::FromString(GetPinNameFromShadingModelField(Material->GetShadingModels(), CustomPinNames, "Custom Data 1")); +``` + +### ShaderMaterialDerivedHelpers.cpp(CustomData数据传递) +在CalculateDerivedMaterialParameters()中修改代码,让CustomData渲染到GBuffer上: +```c++ +// Only some shader models actually need custom data. +Dst.WRITES_CUSTOMDATA_TO_GBUFFER = (Dst.USES_GBUFFER && (Mat.MATERIAL_SHADINGMODEL_SUBSURFACE || Mat.MATERIAL_SHADINGMODEL_PREINTEGRATED_SKIN || Mat.MATERIAL_SHADINGMODEL_SUBSURFACE_PROFILE || Mat.MATERIAL_SHADINGMODEL_CLEAR_COAT || Mat.MATERIAL_SHADINGMODEL_TWOSIDED_FOLIAGE || Mat.MATERIAL_SHADINGMODEL_HAIR || Mat.MATERIAL_SHADINGMODEL_CLOTH || Mat.MATERIAL_SHADINGMODEL_EYE)); +``` + +## PixelInspectorResult +在PixelInspectorResult.h中添加`PIXEL_INSPECTOR_SHADINGMODELID_TOONSTANDARD`宏定义。 +之后在PixelInspectorResult.cpp的DecodeShadingModel()函数中添加定义。 + +### PixelInspectorDetailsCustomization(修改菜单显示屏蔽属性用) + + # Shader部分 ## MaterialTemplate.ush 给新增加的引脚增加对应的格式化代码: @@ -93,8 +162,11 @@ half GetMaterialCustomData3(FMaterialPixelParameters Parameters) - 新增加的ShaderModel添加ID宏,`#define SHADINGMODELID_NPRSHADING 12` - 修改float3 GetShadingModelColor(uint ShadingModelID),给添加的ShaderModel设置一个显示颜色。 +## Definitions.ush(定义材质宏) +位于`Engine\Shaders\Private\Definitions.ush`。 + ## BasePassCommon.ush -- 修改#define WRITES_CUSTOMDATA_TO_GBUFFER宏,在最后的条件判断中添加新增加的ShaderModel。 +- ~~修改#define WRITES_CUSTOMDATA_TO_GBUFFER宏,在最后的条件判断中添加新增加的ShaderModel~~。**UE5.1将该逻辑转移到C++中** ## DeferredShadingCommon.ush - 修改bool HasCustomGBufferData(int ShadingModelID),在条件判断中添加新增加的ShaderModel。 diff --git a/03-UnrealEngine/卡通渲染相关资料/卡通渲染开发总览.md b/03-UnrealEngine/卡通渲染相关资料/卡通渲染开发总览.md index 5c379e9..642ce3e 100644 --- a/03-UnrealEngine/卡通渲染相关资料/卡通渲染开发总览.md +++ b/03-UnrealEngine/卡通渲染相关资料/卡通渲染开发总览.md @@ -21,14 +21,23 @@ rating: ⭐ >PS. 先实现一波Cel,之后再实现Thickly - Coated。 # 最近开发计划 -1. 添加ShaderModel +1. [x] 添加ShaderModel 1. https://zhuanlan.zhihu.com/p/658700282 2. https://zhuanlan.zhihu.com/p/597568404 -2. 添加Debug View https://zhuanlan.zhihu.com/p/668782106 -3. [_UE5_ Shader Print系统](https://zhuanlan.zhihu.com/p/637929634) -4. GBufferView实现。 -5. 实现一波Anti-Lut。 -6. Toon曝光偏移、模仿李兄的暗处的ShadowColor适配。 +2. 给材质添加一些属性 + 1. Toon Debug模式,可以让美术在材质进行进行简单的光照计算。 + 2. 移植ToonDataAsset。 + 3. 添加BackFace Outline基础代码。 +3. 添加材质自定义Output节点。 +4. 给GBuffer结构体添加子ToonBuffer结构体。 +5. 添加Debug View https://zhuanlan.zhihu.com/p/668782106 +6. [_UE5_ Shader Print系统](https://zhuanlan.zhihu.com/p/637929634) +7. GBufferView实现。 +8. 完成ShaderModel的 +9. 实现一波Anti-Lut。 +10. Toon曝光偏移、模仿李兄的暗处的ShadowColor适配。 + +>修改标记方便后续删除备注//BlueRose Modify //BlueRose Modify End # 渲染功能兼容的游戏 - [ ] 罪恶装备