diff --git a/03-UnrealEngine/卡通渲染相关资料/渲染功能/ShaderModel/GBuffer&Material&BasePass.md b/03-UnrealEngine/卡通渲染相关资料/渲染功能/ShaderModel/GBuffer&Material&BasePass.md index a3c48c7..c28f74c 100644 --- a/03-UnrealEngine/卡通渲染相关资料/渲染功能/ShaderModel/GBuffer&Material&BasePass.md +++ b/03-UnrealEngine/卡通渲染相关资料/渲染功能/ShaderModel/GBuffer&Material&BasePass.md @@ -341,8 +341,49 @@ bool FMaterialInstanceResource::GetParameterValue(EMaterialParameterType Type, c ``` -MaterialEmitHLSL - +MaterialEmitHLSL()=> +```c++ +bool MaterialEmitHLSL(const FMaterialCompileTargetParameters& InCompilerTarget, + const FStaticParameterSet& InStaticParameters, + FMaterial& InOutMaterial, + FMaterialCompilationOutput& OutCompilationOutput, + TRefCountPtr<FSharedShaderCompilerEnvironment>& OutMaterialEnvironment) +{ +... + if (DerivativeIndex == 0) + { + const EMaterialDomain MaterialDomain = EmitContext.Material->GetMaterialDomain(); + if (MaterialDomain == MD_Volume || (MaterialDomain == MD_Surface && IsSubsurfaceShadingModel(EmitMaterialData.ShadingModelsFromCompilation))) + { const FMaterialParameterInfo SubsurfaceProfileParameterInfo(GetSubsurfaceProfileParameterName()); + const FMaterialParameterMetadata SubsurfaceProfileParameterMetadata(1.f); + const Material::FExpressionParameter SubsurfaceProfileExpression(SubsurfaceProfileParameterInfo, SubsurfaceProfileParameterMetadata); + + const FPreparedType SubsurfaceProfilePreparedType = EmitContext.PrepareExpression(&SubsurfaceProfileExpression, *EmitResultScope, EValueType::Float1); + const FEmitShaderExpression* SubsurfaceProfileEmitExpression = SubsurfaceProfileExpression.GetValueShader( + EmitContext, + *EmitResultScope, + EValueType::Float1, + SubsurfaceProfilePreparedType, + EValueType::Float1); + check(SubsurfaceProfileEmitExpression && SubsurfaceProfileEmitExpression->Reference); + SubsurfaceProfileShaderCode = SubsurfaceProfileEmitExpression->Reference; + } + } + ... + + MaterialTemplateSource = GenerateMaterialTemplateHLSL(InCompilerTarget.ShaderPlatform, + InOutMaterial, + EmitContext, + Declarations.ToString(), + SharedCode.ToString(), + VertexCode.ToString(), + InputPixelCodePhase0, + InputPixelCodePhase1, + SubsurfaceProfileShaderCode, + OutCompilationOutput); +} +``` +调用GenerateMaterialTemplateHLSL() ### 是否需要Toon 在材质中: