diff --git a/02-Note/DAWA/ASoul/渲染方案/材质部分.md b/02-Note/DAWA/ASoul/渲染方案/材质部分.md index 51d43d7..2f268f1 100644 --- a/02-Note/DAWA/ASoul/渲染方案/材质部分.md +++ b/02-Note/DAWA/ASoul/渲染方案/材质部分.md @@ -1,13 +1,14 @@ # 相关资产路径 Content/ResArt/CommandMaterial -- Functions -- MatCap -- MaterialInstance -- Materials -- Textures +- [ ] [[#Functions]] +- [x] [[#MatCap]] +- [ ] [[#MaterialInstance]] +- [ ] [[#Materials]] +- [ ] [[#Outline]] +- [x] [[#Textures]] # Functions -- [ ] ShadingModels +- [x] [[#ShadingModels]] - MF_ToonPBRShadingModel - MF_ToonBaseShadingModel - MF_ToonSkinShadingModel @@ -23,4 +24,193 @@ Content/ResArt/CommandMaterial - MF_Hash13 - MF_Hash22 - MF_Hash23 -- \ No newline at end of file +- [ ] + +## ShadingModels +采用CustomNode构造FMaterialAttributesde的之后传递到MaterialAttribute模式的材质中,其他骚操作还有: +1. 使用宏开启MRT5:`#define PIXELSHADEROUTPUT_MRT5 1` +2. 设置ShadingModelID:`Result.ShadingModel = 14;` +3. 使用FToonShadingPerMaterialCustomData ToonShadingPerMaterialCustomData(位于Common.ush)来传递卡通渲染用数据,之后在BasePassPixelShader.ush中将数据塞入GBuffer中。 +### MF_ToonPBRShadingModel +```c++ +FMaterialAttributes Result; +Result.BaseColor = float3(1.0, 1.0, 1.0); +Result.Metallic = 0.0; +Result.Specular = 0.0; +Result.Roughness = 0.0; +Result.Anisotropy = 0.0; +Result.EmissiveColor = float3(0.0, 0.0, 0.0); +Result.Opacity = 1.0; +Result.OpacityMask = 1.0; +Result.Normal = float3(0.0, 0.0, 1.0); +Result.Tangent = float3(1.0, 0.0, 0.0); +Result.WorldPositionOffset = float3(0.0, 0.0, 0.0); +Result.SubsurfaceColor = float3(1.0, 1.0, 1.0); +Result.ClearCoat = 1.0; +Result.ClearCoatRoughness = 0.1; +Result.AmbientOcclusion = 1.0; +Result.Refraction = float3(0.0, 0.0, 0.0); +Result.PixelDepthOffset = 0.0; +Result.ShadingModel = 1; +Result.CustomizedUV0 = float2(0.0, 0.0); +Result.CustomizedUV1 = float2(0.0, 0.0); +Result.CustomizedUV2 = float2(0.0, 0.0); +Result.CustomizedUV3 = float2(0.0, 0.0); +Result.CustomizedUV4 = float2(0.0, 0.0); +Result.CustomizedUV5 = float2(0.0, 0.0); +Result.CustomizedUV6 = float2(0.0, 0.0); +Result.CustomizedUV7 = float2(0.0, 0.0); +Result.BentNormal = float3(0.0, 0.0, 1.0); +Result.ClearCoatBottomNormal = float3(0.0, 0.0, 1.0); +Result.CustomEyeTangent = float3(0.0, 0.0, 0.0); + +#define PIXELSHADEROUTPUT_MRT5 1 + +Result.ShadingModel = 14; +ToonShadingPerMaterialCustomData.ToonSpecularColor = saturate(SpecularColor.rgb); +ToonShadingPerMaterialCustomData.ToonShadowColor = saturate(ShadowColor.rgb); +ToonShadingPerMaterialCustomData.ToonShadowLocation = saturate(CutPosition); +ToonShadingPerMaterialCustomData.ToonShadowSmoothness = saturate(CutSmoothness); + +return Result; +``` + +### MF_ToonBaseShadingModel +```c++ +FMaterialAttributes Result; +Result.BaseColor = float3(1.0, 1.0, 1.0); +Result.Metallic = 0.0; +Result.Specular = 0.0; +Result.Roughness = 0.0; +Result.Anisotropy = 0.0; +Result.EmissiveColor = float3(0.0, 0.0, 0.0); +Result.Opacity = 1.0; +Result.OpacityMask = 1.0; +Result.Normal = float3(0.0, 0.0, 1.0); +Result.Tangent = float3(1.0, 0.0, 0.0); +Result.WorldPositionOffset = float3(0.0, 0.0, 0.0); +Result.SubsurfaceColor = float3(1.0, 1.0, 1.0); +Result.ClearCoat = 1.0; +Result.ClearCoatRoughness = 0.1; +Result.AmbientOcclusion = 1.0; +Result.Refraction = float3(0.0, 0.0, 0.0); +Result.PixelDepthOffset = 0.0; +Result.ShadingModel = 1; +Result.CustomizedUV0 = float2(0.0, 0.0); +Result.CustomizedUV1 = float2(0.0, 0.0); +Result.CustomizedUV2 = float2(0.0, 0.0); +Result.CustomizedUV3 = float2(0.0, 0.0); +Result.CustomizedUV4 = float2(0.0, 0.0); +Result.CustomizedUV5 = float2(0.0, 0.0); +Result.CustomizedUV6 = float2(0.0, 0.0); +Result.CustomizedUV7 = float2(0.0, 0.0); +Result.BentNormal = float3(0.0, 0.0, 1.0); +Result.ClearCoatBottomNormal = float3(0.0, 0.0, 1.0); +Result.CustomEyeTangent = float3(0.0, 0.0, 0.0); + +#define PIXELSHADEROUTPUT_MRT5 1 + +Result.ShadingModel = 13; +ToonShadingPerMaterialCustomData.ToonShadowColor = saturate(ShadowColor.rgb); +ToonShadingPerMaterialCustomData.ToonShadowLocation = clamp(ShadowLocation, 0, SpecularLocation); +ToonShadingPerMaterialCustomData.ToonShadowSmoothness = saturate(ShadowSmoothness); +ToonShadingPerMaterialCustomData.ToonForceShadow = saturate(ForceShadow); +ToonShadingPerMaterialCustomData.ToonSecondaryShadowColor = saturate(SecondaryShadowColor.rgb); +ToonShadingPerMaterialCustomData.ToonSecondaryShadowLocation = clamp(SecondaryShadowLocation, 0, SpecularLocation); +ToonShadingPerMaterialCustomData.ToonSecondaryShadowSmoothness = saturate(SecondaryShadowSmoothness); + +return Result; +``` + +### MF_ToonSkinShadingModel +```c++ +FMaterialAttributes Result; +Result.BaseColor = float3(1.0, 1.0, 1.0); +Result.Metallic = 0.0; +Result.Specular = 0.0; +Result.Roughness = 0.0; +Result.Anisotropy = 0.0; +Result.EmissiveColor = float3(0.0, 0.0, 0.0); +Result.Opacity = 1.0; +Result.OpacityMask = 1.0; +Result.Normal = float3(0.0, 0.0, 1.0); +Result.Tangent = float3(1.0, 0.0, 0.0); +Result.WorldPositionOffset = float3(0.0, 0.0, 0.0); +Result.SubsurfaceColor = float3(1.0, 1.0, 1.0); +Result.ClearCoat = 1.0; +Result.ClearCoatRoughness = 0.1; +Result.AmbientOcclusion = 1.0; +Result.Refraction = float3(0.0, 0.0, 0.0); +Result.PixelDepthOffset = 0.0; +Result.ShadingModel = 1; +Result.CustomizedUV0 = float2(0.0, 0.0); +Result.CustomizedUV1 = float2(0.0, 0.0); +Result.CustomizedUV2 = float2(0.0, 0.0); +Result.CustomizedUV3 = float2(0.0, 0.0); +Result.CustomizedUV4 = float2(0.0, 0.0); +Result.CustomizedUV5 = float2(0.0, 0.0); +Result.CustomizedUV6 = float2(0.0, 0.0); +Result.CustomizedUV7 = float2(0.0, 0.0); +Result.BentNormal = float3(0.0, 0.0, 1.0); +Result.ClearCoatBottomNormal = float3(0.0, 0.0, 1.0); +Result.CustomEyeTangent = float3(0.0, 0.0, 0.0); + +#define PIXELSHADEROUTPUT_MRT5 1 + +Result.ShadingModel = 15; +ToonShadingPerMaterialCustomData.ToonShadowColor = saturate(ShadowColor.rgb); +ToonShadingPerMaterialCustomData.ToonShadowLocation = saturate(CutPosition); +ToonShadingPerMaterialCustomData.ToonShadowSmoothness = saturate(CutSmoothness); + +return Result; +``` + +### MF_ToonHairShadingModel +```c++ +FMaterialAttributes Result; +Result.BaseColor = float3(1.0, 1.0, 1.0); +Result.Metallic = 0.0; +Result.Specular = 0.0; +Result.Roughness = 0.0; +Result.Anisotropy = 0.0; +Result.EmissiveColor = float3(0.0, 0.0, 0.0); +Result.Opacity = 1.0; +Result.OpacityMask = 1.0; +Result.Normal = float3(0.0, 0.0, 1.0); +Result.Tangent = float3(1.0, 0.0, 0.0); +Result.WorldPositionOffset = float3(0.0, 0.0, 0.0); +Result.SubsurfaceColor = float3(1.0, 1.0, 1.0); +Result.ClearCoat = 1.0; +Result.ClearCoatRoughness = 0.1; +Result.AmbientOcclusion = 1.0; +Result.Refraction = float3(0.0, 0.0, 0.0); +Result.PixelDepthOffset = 0.0; +Result.ShadingModel = 1; +Result.CustomizedUV0 = float2(0.0, 0.0); +Result.CustomizedUV1 = float2(0.0, 0.0); +Result.CustomizedUV2 = float2(0.0, 0.0); +Result.CustomizedUV3 = float2(0.0, 0.0); +Result.CustomizedUV4 = float2(0.0, 0.0); +Result.CustomizedUV5 = float2(0.0, 0.0); +Result.CustomizedUV6 = float2(0.0, 0.0); +Result.CustomizedUV7 = float2(0.0, 0.0); +Result.BentNormal = float3(0.0, 0.0, 1.0); +Result.ClearCoatBottomNormal = float3(0.0, 0.0, 1.0); +Result.CustomEyeTangent = float3(0.0, 0.0, 0.0); + +Result.ShadingModel = 14; +Result.Anisotropy = 1.0; +ToonShadingPerMaterialCustomData.CustomData0 = saturate(float4(ShadowColor.rgb, ShadowSmoothness)); +ToonShadingPerMaterialCustomData.CustomData1 = saturate(float4(SpecularAbsorbance, SpecularRangeParam.xyz)); + +return Result; +``` + +## Effects + +# Matcap +存放大量Matcap用的**球形环境贴图**。 + +# Outline +# Textures +存储一些默认贴图与一些测试用(无用)贴图。 \ No newline at end of file