Version: 2020.3
ShaderLab: legacy fog
ShaderLab: legacy alpha testing

ShaderLab: legacy lighting

Note: The ShaderLab functionality on this page is legacy, and is documented for backwards compatibility only. If your shader source file includes HLSL code, Unity ignores these commands completely. If your shader source file does not include HLSL code, Unity compiles these commands into regular shader programs on import.

Render pipeline compatibility

Feature name Built-in Render Pipeline Universal Render Pipeline (URP) 고해상도 렌더 파이프라인(HDRP) Custom SRP
Legacy lighting 지원 지원 안 함 지원 안 함 지원 안 함

개요

머티리얼 및 조명 파라미터는 빌트인 버텍스 조명을 제어하는 데 사용됩니다. 버텍스 조명은 각 버텍스에 대해 계산되는 스탠다드 Direct3D/OpenGL 조명 모델입니다. Lighting on 을 선택하면 켜집니다. 조명은 Material 블록, ColorMaterialSeparateSpecular 커맨드에 영향을 받습니다.

버텍스 컬러링 및 조명은 렌더링된 지오메트리에 대해 가장 먼저 계산하는 효과입니다. 버텍스 레벨에서 작동하고, 텍스처 적용 전에 사용되는 베이스 컬러를 계산합니다.

구문

최상위 커맨드는 고정 함수 조명 사용 여부와 일부 설정 옵션을 제어합니다. 메인 설정은 아래에서 자세히 설명하는 Material Block에 있습니다.

컬러

    컬러(Color) color

오브젝트를 솔리드 컬러로 설정합니다. 컬러는 괄호 안에 있는 RGBA 값 4개이거나 대괄호 안에 있는 컬러 프로퍼티 이름입니다.

머티리얼(Material)

    Material {Material Block}

머티리얼 블록은 오브젝트의 머티리얼 프로퍼티를 정의하는 데 사용됩니다.

조명(Lighting)

    Lighting On | Off

머티리얼 블록에 정의된 설정이 효과가 있으려면 Lighting On 커맨드를 사용하여 조명을 활성화해야 합니다. 조명이 꺼진 경우 Color 커맨드의 컬러가 직접 사용됩니다.

SeparateSpecular

    SeparateSpecular On | Off

커맨드를 실행하면 스페큘러 조명이 셰이더 패스 끝에 추가되므로 스페큘러 조명이 텍스처링에 영향을 받지 않습니다. Lighting On 을 사용하는 경우에만 영향이 있습니다.

ColorMaterial

    ColorMaterial AmbientAndDiffuse | Emission

머티리얼에 설정된 컬러 대신 버텍스당 컬러가 사용됩니다. AmbientAndDiffuse 는 머티리얼의 앰비언트 및 디퓨즈 값을 바꾸고 Emission 은 머티리얼의 이미션 값을 바꿉니다.

머티리얼 블록(Material Block)

머티리얼이 광원에 반응하는 방법에 대한 설정을 포함합니다. 다음 프로퍼티는 생략할 수 있으며, 그러면 검정색(즉 효과 없음)이 디폴트가 됩니다.

Diffuse color: 디퓨즈 컬러 컴포넌트로, 오브젝트의 베이스 컬러입니다.

Ambient color: The ambient color component. This is the color the object has when it’s hit by the ambient light set in the Lighting Window.

Specular color: 오브젝트의 스페큘러 하이라이트 컬러입니다.

Shininess number: 하이라이트의 선명도로, 0과 1 사이입니다. 0에서는 디퓨즈 조명과 매우 비슷해 보이는 커다란 하이라이트가 생기고 1에서는 작은 반점이 생깁니다.

Emission color: 오브젝트에 광원이 닿지 않을 때 오브젝트에 표시되는 컬러입니다.

오브젝트에 닿는 광원의 전체 컬러는 다음과 같습니다.

Ambient * Lighting Window’s Ambient Intensity setting + (Light Color * Diffuse + Light Color * Specular) + Emission

등식의(괄호 안에 있는) 광원 부분은 오브젝트에 닿는 모든 광원에 대해 반복됩니다.

Typically you want to keep the Diffuse and Ambient colors the same (all built-in shaders do this).

예제

오브젝트를 항상 순수 빨간색으로 렌더링합니다.

Shader "Solid Red" {
    SubShader {
        Pass { Color (1,0,0,0) }
    }
}

다음은 오브젝트에 흰색을 표시하고 버텍스 조명을 적용하는 기본 셰이더입니다.

Shader "VertexLit White" {
    SubShader {
        Pass {
            Material {
                Diffuse (1,1,1,1)
                Ambient (1,1,1,1)
            }
            Lighting On
        }
    }
}

다음은 머티리얼 컬러를 머티리얼 인스펙터에 표시되는 프로퍼티로 추가하는 확장 버전입니다.

Shader "VertexLit Simple" {
    Properties {
        _Color ("Main Color", COLOR) = (1,1,1,1)
    }
    SubShader {
        Pass {
            Material {
                Diffuse [_Color]
                Ambient [_Color]
            }
            Lighting On
        }
    }
}

그리고 마지막으로 완전한 버텍스 리트 셰이더입니다. SetTexture 레퍼런스 페이지도 참조하십시오.

Shader "VertexLit" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,0)
        _SpecColor ("Spec Color", Color) = (1,1,1,1)
        _Emission ("Emmisive Color", Color) = (0,0,0,0)
        _Shininess ("Shininess", Range (0.01, 1)) = 0.7
        _MainTex ("Base (RGB)", 2D) = "white" {}
    }
    SubShader {
        Pass {
            Material {
                Diffuse [_Color]
                Ambient [_Color]
                Shininess [_Shininess]
                Specular [_SpecColor]
                Emission [_Emission]
            }
            Lighting On
            SeparateSpecular On
            SetTexture [_MainTex] {
                Combine texture * primary DOUBLE, texture * primary
            }
        }
    }
}
ShaderLab: legacy fog
ShaderLab: legacy alpha testing