URP 셰이더들에 보면 메터리얼 키워드들이 정의되어 있는데, 이걸 활성화 시켜주는 부분을 찾을 수가 없다.
// Material Keywords
#pragma shader_feature_local_fragment _ALPHATEST_ON
#pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON
#pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR
#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA
#pragma shader_feature_local _NORMALMAP
#pragma shader_feature_local_fragment _EMISSION
#pragma shader_feature_local _RECEIVE_SHADOWS_OFF
뭐 이런거지.
이렇게 찾을 수 없으면 분명 Custom Shader GUI 에 정의되어 있는 거겠지.. 하고 보니까 안보인다.
아니 .. 정확히 말하면 정의되어 있긴 하다.
public override void MaterialChanged(Material material)
{
if (material == null)
throw new ArgumentNullException("material");
SetMaterialKeywords(material, SimpleLitGUI.SetMaterialKeywords);
}
요로케
SetMaterialKeywords(material, SimpleLitGUI.SetMaterialKeywords);
에 말이다.
그리고 이 클래스는 BaseShaderGUI 에서 상속받았으므로 BaseShaderGUI를 찾아보면
public static void SetMaterialKeywords(Material material, Action<Material> shadingModelFunc = null, Action<Material> shaderFunc = null)
{
// Clear all keywords for fresh start
material.shaderKeywords = null;
// Setup blending - consistent across all Universal RP shaders
SetupMaterialBlendMode(material);
// Receive Shadows
if(material.HasProperty("_ReceiveShadows"))
CoreUtils.SetKeyword(material, "_RECEIVE_SHADOWS_OFF", material.GetFloat("_ReceiveShadows") == 0.0f);
// Emission
if (material.HasProperty("_EmissionColor"))
MaterialEditor.FixupEmissiveFlag(material);
bool shouldEmissionBeEnabled =
(material.globalIlluminationFlags & MaterialGlobalIlluminationFlags.EmissiveIsBlack) == 0;
if (material.HasProperty("_EmissionEnabled") && !shouldEmissionBeEnabled)
shouldEmissionBeEnabled = material.GetFloat("_EmissionEnabled") >= 0.5f;
CoreUtils.SetKeyword(material, "_EMISSION", shouldEmissionBeEnabled);
// Normal Map
if (material.HasProperty("_BumpMap"))
CoreUtils.SetKeyword(material, "_NORMALMAP", material.GetTexture("_BumpMap"));
// Shader specific keyword functions
shadingModelFunc?.Invoke(material);
shaderFunc?.Invoke(material);
}
이렇게 키워드가 정의되어 있는 것을 볼 수 있다. 거 피곤하게 꼬아놨구만
반응형
'Shader ' 카테고리의 다른 글
커스텀 셰이더 GUI 만들기 - 프로퍼티 생성 (2) | 2021.05.02 |
---|---|
커스텀 셰이더 GUI 만들기 - 기본 시작 (0) | 2021.05.02 |
InputData (0) | 2021.04.13 |
#ifndef 이게 뭘까 (0) | 2021.04.08 |
URP 2019 에서 2020으로 업그레이드 할 때 Shader Error (0) | 2021.03.24 |
댓글