Version: Unity 6.0 (6000.0)
언어 : 한국어
커스텀 셰이더에 서브셰이더 추가
UsePass 커맨드로 셰이더 패스 포함

커스텀 셰이더에서 셰이더 패스 추가

패스는 셰이더 오브젝트의 기본 요소입니다. GPU 상태 및 GPU에서 실행되는 셰이더 프로그램을 설정하기 위한 지침을 포함합니다.

단순한 셰이더 오브젝트는 싱글 패스만 포함할 수 있으나, 보다 복잡한 셰이더는 여러 개의 패스를 포함할 수 있습니다. 셰이더 오브젝트의 서로 다르게 작동하는 부분을 정의하기 위해 별도의 패스를 사용할 수 있습니다(예: 렌더 상태의 변경을 요구하는 부분, 서로 다른 셰이더 프로그램 또는 다른 LightMode 패스 태그).

참고: 스크립터블 렌더 파이프라인에 기반한 렌더 파이프라인에서 RenderStateBlock을 사용하면 별도의 패스를 요구할 필요 없이 GPU에서 렌더 상태를 변경할 수 있습니다.

ShaderLab에서 일반 패스를 정의하려면 SubShader 블록 안에 Pass 블록을 넣으십시오.

UsePass 또는 GrabPass 커맨드를 사용하여 두 가지 특수 패스 유형을 정의할 수도 있습니다. 이러한 커맨드에 대한 자세한 내용은 ShaderLab 커맨드: UsePass 또는 ShaderLab 커맨드: GrabPass를 참조하십시오.

셰이더 패스 이름 지정

패스에는 이름이 있을 수 있습니다. UsePass 커맨드와 일부 C# API에서 이름으로 패스를 참조해야 합니다. 패스의 이름은 프레임 디버거 툴에 표시됩니다.

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

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

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

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

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

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

예제

이 예제 코드는 싱글 패스를 포함한 단일 서브셰이더를 포함하는 셰이더 오브젝트를 만들기 위한 구문을 나타냅니다.

Shader "Examples/SinglePass"
{
    SubShader
    {
        Pass
        {                
              Name "ExamplePassName"
              Tags { "ExampleTagKey" = "ExampleTagValue" }

              // ShaderLab commands go here.

              // HLSL code goes here.
        }
    }
}

추가 리소스

커스텀 셰이더에 서브셰이더 추가
UsePass 커맨드로 셰이더 패스 포함
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961