샘플러 상태 사용(Using sampler states)
ShaderLab: 프로퍼티(Properties)

ShaderLab 구문(ShaderLab Syntax)

Unity의 모든 셰이더 파일은 “ShaderLab”이라는 선언형 언어로 작성되어 있습니다. 이 파일에서 중첩 중괄호 구문은 셰이더를 서술하는 다양한 요소를 선언합니다. 예를 들어, 어떤 셰이더 프로퍼티가 머티리얼 인스펙터에 표시되어야 하는지, 어떤 종류의 하드웨어 폴백을 할지, 어떤 종류의 블렌딩 모드를 사용할지 등을 선언합니다. 그리고 실제 “셰이더 코드”는 동일 셰이더 파일에서 CGPROGRAM 스니핏으로 작성되어 있습니다. 표면 셰이더버텍스 및 프래그먼트 셰이더를 참조하십시오.

이 페이지와 하위 페이지에서는 중첩 중괄호 “ShaderLab” 구문을 기술합니다. CGPROGRAM 스니핏은 표준 HLSL/Cg 셰이딩 언어로 작성되어 있습니다. 각 문서 페이지를 참조하십시오.

Shader 는 셰이더 파일의 루트 커맨드입니다. 각 파일은 반드시 단 하나의 셰이더만을 정의해야 합니다. 이 파일은 셰이더를 사용하는 머티리얼이 있는 오브젝트가 어떻게 렌더될지를 명시합니다.

구문

Shader "name" { [Properties] Subshaders [Fallback] [CustomEditor] }

셰이더를 정의합니다. 이 셰이더는 머티리얼 인스펙터에서 name이라는 항목으로 표시됩니다. 머티리얼 인스펙터에 나타날 properties 리스트를 정의하는 옵션도 있습니다. 다음으로 SubShaders 리스트가 나오며 옵션으로 폴백 및/또는 커스텀 에디터 선언이 나오게 됩니다.

세부 정보

프로퍼티

셰이더에는 프로퍼티 리스트가 존재할 수 있습니다. 셰이더에 선언된 모든 프로퍼티는 Unity의 머티리얼 인스펙터에 표시됩니다. 대표적인 프로퍼티로 오브젝트 컬러, 텍스처, 또는 셰이더가 사용하는 임의의 값 등이 있습니다.

서브셰이더(SubShaders) & 폴백(Fallback)

각 셰이더는 서브셰이더의 리스트로 구성됩니다. 최소한 하나의 서브셰이더가 있어야 합니다. Unity는 셰이더를 로드할 때 서브셰이더의 리스트를 살펴보고 최종 사용자의 기기가 지원하는 셰이더 리스트 중 가장 위에 있는 것을 선택합니다. 만약 지원되는 서브셰이더가 없으면 Unity는 폴백 셰이더 사용을 시도합니다.

그래픽 카드의 성능은 제품에 따라 다릅니다. 이 점이 게임 개발자에게 영원한 문제를 안겨줍니다. 최신 하드웨어에서 훌륭한 그래픽을 보여주는 게임을 만들고 싶지만 전체 인구의 3%만이 즐길 수 있는 게임이 되는 것은 원하지 않기 때문입니다. 그렇기 때문에 서브셰이더가 있습니다. 꿈꾸어 왔던 화려한 그래픽 효과를 모두 포함하는 서브셰이더를 하나 만들고나서 구형 그래픽카드용 서브셰이더를 더 추가해야 합니다. 이 서브셰이더는 개발자가 의도한 효과를 좀 더 느린 방법으로 구현할 수도, 일부 디테일을 구현하지 않을 수도 있습니다.

서브셰이더에 더해 사용할 수 있는 기법으로 셰이더 “정밀도 수준”(level of detail, LOD) 및 “셰이더 대체” 두 가지가 있습니다. 자세한 내용은 셰이더 정밀도 수준셰이더 대체를 참조하십시오.

예제

다음은 가장 간단한 셰이더 중 하나입니다.

// colored vertex lighting
Shader "Simple colored lighting"
{
    // a single color property
    Properties {
        _Color ("Main Color", Color) = (1,.5,.5,1)
    }
    // define one subshader
    SubShader
    {
        // a single pass in our subshader
        Pass
        {
            // use fixed function per-vertex lighting
            Material
            {
                Diffuse [_Color]
            }
            Lighting On
        }
    }
}

셰이더는 컬러 프로퍼티 \Color_ 를 정의하며(머티리얼 인스펙터에서 Main Color 로 표시), 디폴트를 (1,0.5,0.5,1)__ 로 지정합니다. 다음으로 하나의 서브셰이더를 정의합니다. 이 서브셰이더는 고정 함수 버텍스 라이팅을 켜고 이를 위한 기본 머티리얼을 설정하는 하나의 패스로 구성되어 있습니다.

더 복잡한 예제는 표면 셰이더 예제 또는 버텍스 및 프래그먼트 셰이더 예제를 참조하십시오.

참고 항목

샘플러 상태 사용(Using sampler states)
ShaderLab: 프로퍼티(Properties)