vault backup: 2024-02-18 17:15:21

This commit is contained in:
2024-02-18 17:15:21 +08:00
parent 58db662a59
commit 63a0802572
3 changed files with 90 additions and 9 deletions

View File

@@ -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。