Unity HLSL 셰이더 매크로 가이드

이 문서는 Unity의 HLSL 셰이더에서 사용되는 다양한 매크로 및 기능에 대한 간단한 설명과 예제를 포함하고 있습니다. 이 매크로들은 플랫폼 간 호환성을 지원하고, 셰이더를 더 효율적으로 작성하는 데 도움을 줍니다.

플랫폼 매크로

Unity는 여러 타겟 플랫폼을 지원하며, 각 플랫폼에 맞는 매크로를 제공하여 셰이더 코드의 조건부 컴파일을 가능하게 합니다.

매크로 설명
SHADER_API_D3D11 Direct3D 11을 타겟으로 합니다.
SHADER_API_GLCORE 데스크톱 OpenGL Core (GL 3/4)을 타겟으로 합니다.
SHADER_API_GLES OpenGL ES 2.0을 타겟으로 합니다.
SHADER_API_VULKAN Vulkan을 타겟으로 합니다.

셰이더 모델 매크로

셰이더 모델에 따라 코드를 분기할 수 있도록 도와줍니다. 예를 들어:

#if SHADER_TARGET < 30
    // 세부 기능이 제한된 경우
#else
    // 더 나은 기능을 사용할 수 있는 경우
#endif

Unity 버전 매크로

Unity 버전에 따라 코드의 조건부 실행을 할 수 있습니다.

매크로 설명
UNITY_VERSION 현재 Unity 버전의 숫자 값입니다.

예제:

#if UNITY_VERSION >= 202000
    // Unity 2020 이상의 특수 기능을 사용할 수 있습니다.
#endif

플랫폼 차이 헬퍼 매크로

HLSL에서의 플랫폼별 코드 관리를 용이하게 해주는 매크로들입니다.

매크로 용도
UNITY_BRANCH 실제 브랜치를 요구하는 조건에서 사용합니다.
UNITY_NO_SCREENSPACE_SHADOWS 모바일 플랫폼에서 스크린 공간 섀도우맵을 비활성화합니다.
UNITY_CAN_COMPILE_TESSELLATION 테셀레이션 셰이더를 컴파일할 수 있는지 표시합니다.

섀도우 매핑 매크로

섀도우 매핑을 구현할 때 사용되는 매크로입니다.

매크로 용도
UNITY_DECLARE_SHADOWMAP(tex) 섀도우맵 텍스처 변수를 선언합니다.
UNITY_SAMPLE_SHADOW(tex, uv) 지정된 UV 좌표에서 섀도우맵을 샘플링합니다.

상수 버퍼 매크로

Direct3D 11에서는 모든 셰이더 변수를 상수 버퍼로 그룹화해야 합니다.

매크로 설명
CBUFFER_START(name) 상수 버퍼 블록을 시작합니다.
CBUFFER_END 상수 버퍼 블록을 종료합니다.

예제:

CBUFFER_START(MyRarelyUpdatedVariables)
    float4 _SomeGlobalValue;
CBUFFER_END

텍스처 및 샘플러 선언 매크로

셰이더 코드에서 텍스처와 샘플러를 선언하는 방법입니다.

매크로 용도
UNITY_DECLARE_TEX2D(name) 텍스처 및 샘플러 페어를 선언합니다.
UNITY_SAMPLE_TEX2D(name, uv) 샘플러로부터 텍스처 샘플을 가져옵니다.

셰이더 예제

다음은 게임 오브젝트의 뎁스를 렌더링하는 간단한 셰이더 예제입니다.

Shader "Render Depth" {
    SubShader {
        Tags { "RenderType"="Opaque" }
        Pass {
            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct v2f {
                float4 pos : SV_POSITION;
                float2 depth : TEXCOORD0;
            };

            v2f vert (appdata_base v) {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                UNITY_TRANSFER_DEPTH(o.depth);
                return o;
            }

            half4 frag(v2f i) : SV_Target {
                UNITY_OUTPUT_DEPTH(i.depth);
            }
            ENDCG
        }
    }
}

결론

Unity HLSL 셰이더의 다양한 매크로를 활용하여 플랫폼 간의 호환성을 높이고, 더 효율적인 코드를 작성할 수 있습니다. 이 문서에서 제시한 매크로와 예제를 통해 셰이더 개발의 기본적인 이해를 돕기를 바랍니다. 추가 질문이 있다면 Unity 공식 문서를 참조하시기 바랍니다.

Read more

Unity 매뉴얼 스크립팅 API 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 간단한 해설과 활용 예제들을 포함하고 있습니다. Unity는 게임 개발 플랫폼으로, 스크립팅 API를 통해 게임의 다양한 기능을 제어하고 수정할 수 있습니다. 버전 Unity 스크립팅 API는 여러 버전으로 제공됩니다. 주의 깊게 선택하여 사용하는 것이 중요합니다. 버전 설명 2023.2 최신 기능 및 버그 수정이 추가됨

By 이재협/실장/시스템개발실/PHYSIA

Unity 매뉴얼 스크립팅 API 설명서 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 정보를 제공하며, 버전에 따라 다르게 적용되는 내용들을 설명합니다. 본 문서에서는 주요 내용을 간단히 정리하고 활용 가능 예제를 통해 이해를 돕겠습니다. 기본 개념 Unity에서 스크립팅 API는 게임 오브젝트와 그들의 동작을 제어하기 위한 강력한 도구입니다. 이를 통해 게임의 로직, 물리 엔진, 애니메이션 및 사용자 인터페이스를

By 이재협/실장/시스템개발실/PHYSIA

Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 게임 개발을 위한 인기 있는 엔진으로, 강력한 스크립팅 기능을 제공합니다. 이 가이드는 Unity에서 스크립트를 작성하고 사용하는 방법을 이해하는 데 도움을 드립니다. 목차 * Unity 스크립팅 소개 * 기본 스크립트 생성 * 스크립트 사용 예제 * 응용 프로그램 * 참고 자료 Unity 스크립팅 소개 Unity는 C# 프로그래밍 언어를

By 이재협/실장/시스템개발실/PHYSIA