Version: Unity 6.0 (6000.0)
언어 : 한국어
인스펙터 창에 셰이더 키워드 추가
빌트인 키워드 세트 추가

스크립트에서 셰이더 키워드 토글 및 확인

키워드의 활성화 또는 비활성화 여부 확인

이름이 같은 전역 셰이더 키워드 및 로컬 셰이더 키워드의 상태가 서로 다른 경우, Unity는 LocalKeywordisOverridable 프로퍼티를 사용하여 개별 머티리얼 또는 컴퓨트 셰이더에 키워드가 활성화되었는지 아니면 비활성화되었는지 파악합니다. isOverridable은 키워드가 전역 범위로 선언된 경우 true이고 로컬 범위로 선언된 경우 false입니다.

  • isOverridabletrue인 경우: 동일한 이름의 전역 키워드가 존재하고 활성화된 경우 Unity는 전역 키워드의 상태를 사용합니다. 그렇지 않으면 Unity는 로컬 키워드의 상태를 사용합니다.
  • isOverridablefalse인 경우: Unity는 항상 로컬 키워드의 상태를 사용합니다.

따라서 개별 머티리얼 또는 컴퓨트 셰이더에 셰이더 키워드가 활성화되어 있는지 또는 비활성화되어 있는지 알아보려면 isOverridable 프로퍼티의 상태와 전역 또는 로컬 키워드 상태를 점검해야 합니다.

이 예제는 Unity가 머티리얼에 키워드가 활성화된 것으로 간주하는지, 아니면 비활성화된 것으로 간주하는지 확인하는 방법을 보여 줍니다.

using UnityEngine;
using UnityEngine.Rendering;

public class KeywordExample : MonoBehaviour
{
    public Material material;

    void Start()
    {
        CheckShaderKeywordState();
    }

    void CheckShaderKeywordState()
    {
        // Get the instance of the Shader class that the material uses
        var shader = material.shader;

        // Get all the local keywords that affect the Shader
        var keywordSpace = shader.keywordSpace;

        // Iterate over the local keywords
        foreach (var localKeyword in keywordSpace.keywords)
        {
            // If the local keyword is overridable (i.e., it was declared with a global scope),
            // and a global keyword with the same name exists and is enabled,
            // then Unity uses the global keyword state
            if (localKeyword.isOverridable && Shader.IsKeywordEnabled(localKeyword.name))
            {
                Debug.Log("Local keyword with name of " + localKeyword.name + " is overridden by a global keyword, and is enabled");
            }
            // Otherwise, Unity uses the local keyword state
            else
            {
                var state = material.IsKeywordEnabled(localKeyword) ? "enabled" : "disabled";
                Debug.Log("Local keyword with name of " + localKeyword.name + " is " + state);
            }            
        }
    }
}

셰이더 키워드 활성화 및 비활성화

그래픽스 셰이더에 로컬 키워드가 활성화되었는지 확인하려면 Material.IsKeywordEnabled 또는 Material.EnableKeyword를 사용하십시오. 컴퓨트 셰이더의 경우 ComputeShader.IsKeywordEnabled 또는 ComputeShader.EnableKeyword를 사용하십시오.

전역 키워드가 활성화되었는지 확인하려면 Shader.IsKeywordEnabled, Shader.EnableKeyword, ComputeShader.enabledKeywords를 사용하십시오.

그래픽스 셰이더에 로컬 셰이더 키워드를 활성화하거나 비활성화하려면 Material.SetKeyword, Material.EnableKeyword, Material.DisableKeyword를 사용하십시오. 컴퓨트 셰이더의 경우 ComputeShader.SetKeyword, ComputeShader.EnableKeyword, ComputeShader.DisableKeyword를 사용하십시오.

전역 셰이더 키워드를 활성화하거나 비활성화하려면 Shader.SetKeyword, ComputeShader.EnableKeyword, ComputeShader.DisableKeyword를 사용하십시오.

커맨드 버퍼로 로컬 또는 전역 키워드를 활성화하거나 비활성화하려면 CommandBuffer.EnableKeyword 또는 CommandBuffer.DisableKeyword를 사용하십시오.

참고: 셰이더 배리언트와 함께 작동하는 키워드를 활성화하거나 비활성화하면 Unity는 다른 셰이더 배리언트를 사용합니다. 런타임 시 셰이더 배리언트를 변경하면 성능에 영향을 미칠 수 있습니다. 키워드 변경으로 인해 배리언트를 처음으로 사용해야 하는 경우, 그래픽 드라이버가 셰이더 프로그램을 준비하는 동안 문제가 발생할 수 있습니다. 이는 대형 셰이더나 복잡한 셰이더의 경우 또는 전역 키워드 상태 변경이 여러 셰이더에 영향을 미치는 경우에 특히 문제가 될 수 있습니다. 이 문제를 방지하려면 키워드를 셰이더 배리언트와 함께 사용하는 경우 셰이더 로딩 및 예열 전략에 키워드 배리언트를 고려해야 합니다. 자세한 내용은 셰이더 로딩을 참조하십시오.

키워드가 동적 브랜치에 선언되었는지 확인

Unity에서는 셰이더 키워드를 셰이더 배리언트와 함께 사용하거나 동적 브랜치와 함께 사용할 수 있습니다. 사용자가 키워드를 언제 선언할지 결정할 수 있습니다.

LocalKeywordisDynamic 프로퍼티는 키워드가 셰이더 소스 파일에서 동적 브랜치와 함께 사용할지를 선언합니다. 키워드가 동적 브랜치와 함께 사용하도록 선언된 경우에는 true이고, 셰이더 배리언트와 함께 사용하도록 선언된 경우에는 false입니다.

추가 리소스

인스펙터 창에 셰이더 키워드 추가
빌트인 키워드 세트 추가