Version: 2021.1
ShaderLab: 패스 정의하기
ShaderLab: 패스에 태그 할당

ShaderLab: 패스에 이름 할당

이 페이지는 패스에 이름을 할당하기 위해 ShaderLab 코드에서 Name 블록을 사용하는 방법에 대한 정보를 포함합니다. 패스 정의에 대한 내용은 ShaderLab: 패스 정의를 참조하십시오. 셰이더 오브젝트의 작동 방식과 셰이더 오브젝트, 서브셰이더 및 패스 간 관계에 대해 알아보려면 셰이더 오브젝트 기초를 참조하십시오.

패스는 이름을 가질 수 있습니다. UsePass 및 일부 C# API에서 이름으로 패스를 참조해야 합니다. 패스 이름은 프레임 디버거 툴에서 확인할 수 있습니다.

렌더 파이프라인 호환성

기능 이름 빌트인 렌더 파이프라인 유니버설 렌더 파이프라인(URP) 고해상도 렌더 파이프라인(HDRP) 커스텀 SRP
ShaderLab: 이름 블록 지원 지원 지원 지원

이름 블록 사용

ShaderLab에서 패스에 이름을 할당하려면 Pass 블록 안에 Name 블록을 넣으십시오.

서명 기능
Name "<name>" 패스의 이름을 설정합니다.

Unity는 내부적으로 이름을 대문자로 변환합니다. ShaderLab 코드에서 이름을 참조할 때는 대문자 배리언트를 사용해야 합니다. 예를 들어, 값이 “example”이라면 EXAMPLE로 참조해야 합니다.

같은 서브셰이더에 이름이 동일한 패스가 두 개 이상 있는 경우, Unity는 코드의 첫 번째 패스를 사용합니다.

C# 스크립트와 함께 패스 이름 사용

Material.FindPass, Material.GetPassName, ShaderData.Pass.Name과 같은 API를 사용하여 C# 스크립트에서 패스의 이름에 액세스할 수 있습니다.

참고: Material.GetShaderPassEnabledMaterial.SetShaderPassEnabled는 이름으로 패스를 참조하지 않으며, 대신 LightMode 태그의 값을 사용하여 패스를 참조합니다.

예제

이 예제 코드는 ExampleNamedPass라는 패스를 포함하는 셰이더 오브젝트인 ContainsNamedPass를 생성합니다.

Shader "Examples/ContainsNamedPass"
{
    SubShader
    {
        Pass
        {    
              Name "ExampleNamedPass"
            
              // The rest of the code that defines the Pass goes here.
        }
    }
}

다음 C# 코드를 사용하여 이 패스의 이름을 쿼리할 수 있습니다.

using UnityEngine;

public class GetPassName : MonoBehaviour
{
    // Place this script on a GameObject with a MeshRenderer component
    
    void Start() {
        // Get the material
        var material = GetComponent<MeshRenderer>().material;

        // Get the name of the first Pass in the active SubShader
        // of the Shader object assigned to the material
        var passName = material.GetPassName(0);

        // Print the name to the console
        Debug.Log(passName);
    }
}

ShaderLab: 패스 정의하기
ShaderLab: 패스에 태그 할당