只要材质使用 Unity 标准着色器或表面着色器,即可采用材质验证器。但是,自定义着色器需要一个名为 “META” 的 pass。大多数支持光照贴图的自定义着色器已经定义了此 pass。请参阅有关光照贴图和着色器的文档以了解更多详细信息。
执行以下步骤,使自定义着色器与材质验证器兼容:
#pragma shader_feature EDITOR_VISUALIZATION
UnityMetaInput 结构中,将材质的镜面反射颜色分配给名为 SpecularColor 的字段,如下面的代码示例所示。以下是自定义 Meta pass 的示例:
Pass
{
Name "META"
Tags { "LightMode"="Meta" }
Cull Off
CGPROGRAM
#pragma vertex vert_meta
#pragma fragment frag_meta
#pragma shader_feature _EMISSION
#pragma shader_feature _METALLICGLOSSMAP
#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
#pragma shader_feature ___ _DETAIL_MULX2
#pragma shader_feature EDITOR_VISUALIZATION
float4 frag_meta(v2f_meta i) : SV_TARGET
{
UnityMetaInput input;
UNITY_INITIALIZE_OUTPUT(UnityMetaInput, input);
float4 materialSpecularColor = float4(1.0f, 0.0f, 0.0f, 1.0f);
float4 materialAlbedo = float4(0.0f, 1.0f, 0.0f, 1.0f);
input.SpecularColor = materialSpecularColor;
input.Albedo = materialAlbedo;
return UnityMetaFragment(input);
}
}