Version: 2021.1
언어: 한국어
머티리얼 인스펙터 레퍼런스
C# 스크립트로 머티리얼 사용

물리 기반 렌더링 머티리얼 유효성 검사

물리 기반 렌더링 머티리얼 유효성 검사(Physically Based Rendering Material Validator)는 씬 뷰의 드로우 모드(draw mode)입니다. 이를 통해 물리 기반 셰이더에 권장되는 레퍼런스 값 범위에 속하는 값이 머티리얼에 사용되는지 확인할 수 있습니다. 특정 머티리얼의 픽셀 값이 레퍼런스 범위를 벗어나는 경우 머티리얼 유효성 검사에서 픽셀이 서로 다른 색으로 강조 표시되어 문제가 있음을 나타냅니다.

머티리얼 유효성 검사를 사용하려면 씬 뷰의 draw mode 드롭다운 메뉴를 선택합니다. 기본 설정은 일반적으로 Shaded 입니다.

씬 뷰의 드로우 모드 드롭다운 메뉴
씬 뷰의 드로우 모드 드롭다운 메뉴

Material Validation 섹션으로 이동합니다. 머티리얼 유효성 검사에는 Validate AlbedoValidate Metal Specular 모드가 있습니다.

씬 뷰 드로우 모드 드롭다운 메뉴의 머티리얼 확인 옵션
씬 뷰 드로우 모드 드롭다운 메뉴의 머티리얼 확인 옵션

참고: Unity의 머티리얼 차트를 사용하여 권장 값을 확인할 수도 있습니다. 머티리얼을 작성할 때 albedometal specular 값을 결정하는 데도 이 차트를 계속 사용해야 합니다. 하지만 머티리얼 유효성 검사를 사용하면 에셋이 씬에 배치된 후에 에디터 안에서 머티리얼 값이 유효한지 시각적으로 빨리 확인하는 방법을 얻게 됩니다.

추가 참고 사항: 유효성 검사는 리니어 색 공간에서만 작동합니다. 물리 기반 렌더링은 감마 색 공간에서 사용할 수 없으므로 물리 기반 렌더링과 PBR 머티리얼 유효성 검사를 사용하는 경우 리니어 색 공간도 사용해야 합니다.

알베도 확인 모드

알베도 확인 모드에서 씬 뷰에 표시되는 PBR 확인 설정
알베도 확인 모드에서 씬 뷰에 표시되는 PBR 확인 설정

머티리얼 확인을 알베도 확인으로 설정하면 씬 뷰에 표시되는 PBR 확인 설정은 다음과 같습니다.

프로퍼티: 기능:
Check Pure Metals Unity가 금속성으로 정의하지만 알베도 값이 영(0)이 아닌 픽셀을 찾으면 머티리얼 유효성 검사가 노란색으로 강조 표시하도록 하려면 이 체크박스를 선택합니다. 자세한 내용은 아래의 순수 금속을 참조하십시오. 기본적으로 활성화되어 있지 않습니다.
Luminance Validation 드롭다운을 사용하여 미리 설정된 머티리얼 유효성 검사 설정을 선택합니다. Default Luminance 가 아닌 다른 옵션을 선택하면 Hue Tolerance와 Saturation Tolerance도 조정할 수 있습니다. 프로퍼티 이름 아래의 컬러 바는 설정의 알베도 컬러를 나타냅니다. 드롭다운 아래의 밝기 값은 최소 및 최대 밝기 값을 나타냅니다. 머티리얼 유효성 검사는 밝기 값이 이 값 범위를 벗어난 픽셀을 강조 표시합니다. 기본 설정은 Default Luminance 입니다.
Hue Tolerance 머티리얼의 알베도 컬러 값을 확인할 때 이 슬라이더를 사용하여 머티리얼 색조와 확인 설정의 색조 사이에 허용되는 오차 한도를 조정할 수 있습니다.
Saturation Tolerance 머티리얼의 알베도 컬러 값을 확인할 때 이 슬라이더를 사용하여 머티리얼 농도와 확인 설정의 농도 사이에 허용되는 오차 한도를 조정할 수 있습니다.
Color Legend 머티리얼의 픽셀이 정의된 값 범위를 벗어나는 경우 머티리얼 유효성 검사가 씬 뷰에 표시하는 컬러입니다.
Red Below Minimum Luminance Value 머티리얼 유효성 검사는 Luminance Validation 에서 정의한 최소 밝기 값보다 낮은(너무 어두운) 픽셀을 빨간색으로 강조 표시합니다.
Blue Above Maximum Luminance Value 머티리얼 유효성 검사는 Luminance Validation 에서 정의한 최대 밝기 값보다 높은(너무 밝은) 픽셀을 파란색으로 강조 표시합니다.
Yellow Not A Pure Metal Check Pure Metals를 활성화한 경우 머티리얼 유효성 검사는 Unity가 금속성으로 정의하지만 알베도 값이 영(0)이 아닌 픽셀을 노란색으로 강조 표시합니다. 자세한 내용은 아래의 순수 금속을 참조하십시오.

Unity의 머티리얼 차트에는 표준 밝기 범위가 비금속은 50–243 sRGB, 금속은 186–255 sRGB로 정의되어 있습니다. Validate Albedo 모드에서는 범위를 벗어난 픽셀을 다양한 색으로 표시하여 값이 너무 낮거나 너무 높음을 나타냅니다.

아래 예에서 첫 번째 텍스처는 최소 밝기 값보다 낮아서 너무 어둡습니다. 네 번째 텍스처는 최대 밝기 값보다 높아서 너무 밝습니다.

첫 번째 및 네 번째 머티리얼의 알베도 값이 잘못된 (머티리얼 유효성 검사가 활성화되지 않은) 씬
첫 번째 및 네 번째 머티리얼의 알베도 값이 잘못된 (머티리얼 유효성 검사가 활성화되지 않은) 씬
머티리얼 유효성 검사가 활성화되고 알베도 확인으로 설정된 동일한 씬. 최소 밝기 값보다 낮은 텍스처는 빨간색. 최소 밝기 값보다 높은 텍스처는 파란색.
머티리얼 유효성 검사가 활성화되고 알베도 확인으로 설정된 동일한 씬. 최소 밝기 값보다 낮은 텍스처는 빨간색. 최소 밝기 값보다 높은 텍스처는 파란색.

머티리얼 차트에는 일반적인 머티리얼의 알베도 값이 있습니다. 알베도 값 밝기는 생성되는 산란 반사광의 양에 많은 영향을 미치므로 다양한 머티리얼 타입이 서로 비례하여 올바른 밝기 범위 안에 있도록 하는 것이 전역 조명을 베이크하는 데 중요합니다. 특정 머티리얼 타입의 밝기 범위를 확인할 수 있도록 일반적인 머티리얼 알베도 값을 표시하는 Luminance Validation 드롭다운에서 프리셋을 선택하면 값을 올바르게 설정할 수 있습니다.

기본 밝기 값 오버라이드

프로젝트의 아트 스타일에 따라, 머티리얼 밝기 값을 미리 설정된 밝기 범위와 다르게 표시하고 싶을 수 있습니다. 이 경우 머티리얼 유효성 검사에서 사용하는 빌트인 알베도 값을 사용자 지정 값으로 오버라이드할 수 있습니다. 미리 설정된 밝기 범위를 오버라이드하려면 원하는 각 머티리얼 타입의 AlbedoSwatchInfo 값 배열을 EditorGraphicsSettings.albedoSwatches 프로퍼티에 할당합니다.

금속 스페큘러 확인(Validate Metal Specular) 모드

Validate Metal Specular 모드의 PBR 확인 설정
Validate Metal Specular 모드의 PBR 확인 설정

Material ValidationValidate Metal Specular 로 설정하면 다음과 같은 PBR 확인 설정이 씬 뷰에 표시됩니다.

프로퍼티: 기능:
Check Pure Metals Unity가 금속성으로 정의하지만 알베도 값이 영(0)이 아닌 픽셀을 찾으면 머티리얼 유효성 검사가 노란색으로 강조 표시하도록 하려면 이 체크박스를 선택합니다. 자세한 내용은 아래의 순수 금속을 참조하십시오. 기본적으로 활성화되어 있지 않습니다.
Color Legend 머티리얼의 픽셀이 잘못된(스페큘러 값이 해당 머티리얼 타입, 즉 금속성 또는 비금속성의 유효 범위를 벗어난) 경우 머티리얼 유효성 검사가 씬 뷰에 표시하는 컬러에 해당하는 컬러입니다. 유효한 범위는 이 테이블 아래를 참조하십시오.
Blue Below Minimum Specular Value 머티리얼 유효성 검사는 최소 스페큘러 값(비금속성은 40, 금속성은 155)보다 낮은 픽셀을 빨간색으로 강조 표시합니다.
Red Above Maximum Specular Value 머티리얼 유효성 검사는 최대 스페큘러 값(비금속성은 75, 금속성은 255)보다 높은 픽셀을 파란색으로 강조 표시합니다.
Yellow Not A Pure Metal Check Pure Metals 를 활성화한 경우 머티리얼 유효성 검사는 Unity가 금속성으로 정의하지만 알베도 값이 영(0)이 아닌 픽셀을 노란색으로 강조 표시합니다. 자세한 내용은 아래의 순수 금속을 참조하십시오.

Unity의 머티리얼 차트는 다음 두 가지 스페큘러 컬러 범위를 정의합니다.

  • Non-metallic materials: 40–75 sRGB
  • Metallic materials: 155 - 255 sRGB

Unity에서 모든 비금속성 머티리얼은 항상 올바른 범위 이내의 일정한 스페큘러 컬러로 표시됩니다. 하지만 금속성 머티리얼의 스페큘러 값은 너무 낮은 경우가 많습니다. 머티리얼 유효성 검사의 Validate Metal Specular 모드에서는 이 문제가 있는 금속성 머티리얼을 식별할 수 있도록 스페큘러 컬러 값이 너무 낮은 모든 픽셀에 컬러를 표시합니다. 정의에 따라, 여기에는 모든 비금속성 머티리얼이 포함됩니다.

아래 예에서 왼쪽 머티리얼은 최소 스페큘러 값보다 낮아서 너무 어둡습니다. 씬의 배경도 마찬가지입니다. 오른쪽 머티리얼의 스페큘러 값은 유효 범위 이내입니다.

금속성 머티리얼이 두 개 있는 씬. 왼쪽 머티리얼의 금속성 스페큘러 값은 올바르지 않습니다
금속성 머티리얼이 두 개 있는 씬. 왼쪽 머티리얼의 금속성 스페큘러 값은 올바르지 않습니다
머티리얼 유효성 검사가 활성화되고 금속 스페큘러 확인(Validate Metal Specular) 으로 설정된 같은 씬
머티리얼 유효성 검사가 활성화되고 금속 스페큘러 확인(Validate Metal Specular) 으로 설정된 같은 씬

순수 금속

Unity에서는 스페큘러 컬러가 155 sRGB보다 큰 물리 기반 셰이딩 머티리얼을 금속성으로 정의합니다. Unity에서 금속성 머티리얼을 pure metal 로 정의하려면

비금속성 표면의 스페큘러 컬러 값이 너무 높지만 알베도 값은 영(0)이 아닌 경우 종종 작성 오류 때문일 수 있습니다. 머티리얼 유효성 검사에는 순수 금속 확인(Check Pure Metals) 이라는 옵션도 있습니다. 이 옵션을 활성화하면 머티리얼 유효성 검사는 Unity가 금속성으로 정의하지만 알베도 값이 영(0)이 아닌 머티리얼을 노란색으로 표시합니다. 예는 아래 이미지에서 확인할 수 있습니다. 이 예에는 세 가지 머티리얼이 있는데, 왼쪽과 오른쪽 머티리얼은 순수 금속이지만 중간 머티리얼은 그렇지 않으므로 노란색으로 표시됩니다.

씬에 금속성 머티리얼이 세 개 있습니다. 중간 머티리얼은 순수 금속이 아닙니다(알베도 값이 영(0)이 아님).
씬에 금속성 머티리얼이 세 개 있습니다. 중간 머티리얼은 순수 금속이 아닙니다(알베도 값이 영(0)이 아님).
머티리얼 유효성 검사 가 활성화되고 금속 스페큘러 확인 으로 설정되고 순수 금속 확인이 활성화된 같은 씬)
머티리얼 유효성 검사 가 활성화되고 금속 스페큘러 확인 으로 설정되고 순수 금속 확인이 활성화된 같은 씬)

위의 두 번째 그림에서 배경에 있는 머티리얼이 머티리얼 유효성 검사 Validate Metal Specular 모드의 최소 스페큘러 값보다 낮기 때문에 배경이 빨간색입니다.

순수 금속 검사기는 금속성 특성과 비금속성 특성이 공존하는 복합 머티리얼에서 잘못된 픽셀을 몇 개 발견할 가능성이 높지만, 머티리얼이 완전히 잘못된 경우 일반적으로 작성 오류가 있음을 의미합니다.

구현

머티리얼 유효성 검사는 Unity의 스탠다드 셰이더 또는 표면 셰이더를 사용하는 머티리얼에 사용할 수 있습니다. 하지만 커스텀 셰이더를 사용하는 경우 "META"라는 패스가 필요합니다. 라이트매핑을 지원하는 커스텀 셰이더에는 대부분 이 패스가 이미 정의되어 있습니다. 자세한 내용은 Meta 패스에 대한 문서를 참조하십시오.

커스텀 셰이더가 머티리얼 유효성 검사와 호환되도록 하려면 다음 절차를 수행하십시오.

  1. 다음 pragma를 meta 패스에 추가합니다. #pragma shader_feature EDITOR_VISUALIZATION
  2. UnityMetaInput 구조에서 아래 코드 예와 같이 머티리얼의 스페큘러 컬러를 SpecularColor라는 필드에 할당합니다.

다음은 커스텀 meta 패스의 예입니다.

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);
    }  
}

  • 2018–03–28 페이지 게시됨
  • Unity 2017.3에서 머티리얼 유효성 검사 업데이트됨
머티리얼 인스펙터 레퍼런스
C# 스크립트로 머티리얼 사용