Version: 2020.3
언어: 한국어
Cg/HLSL에서 셰이더 프로퍼티 액세스
빌트인 셰이더 포함 파일

버텍스 프로그램에 버텍스 데이터 제공하기

Cg/HLSL 버텍스 프로그램에서 메시 버텍스 데이터는 버텍스 셰이더 함수에 입력으로 전달됩니다. 각 입력에는 입력에 대해 지정된 시맨틱이 있어야 합니다. 예를 들어, POSITION 입력은 버텍스 포지션이고 NORMAL은 버텍스 노멀입니다.

버텍스 데이터 입력이 하나씩 나열되는 것이 아니라 구조체로 선언되어 있는 경우도 있습니다. 자주 사용되는 일반적인 버텍스 구조는 UnityCG.cginc 포함 파일 내에 정의되어 있으며 대부분의 경우에 이 구조만 사용해도 충분합니다. 다음과 같은 구조가 정의되어 있습니다:

  • appdata_base: 포지션, 노멀, 하나의 텍스처 좌표
  • appdata_tan: 포지션, 탄젠트, 노멀, 하나의 텍스처 좌표
  • appdata_full: 포지션, 탄젠트, 노멀, 네 개의 텍스처 좌표, 컬러

예제: 셰이더는 메시의 노멀에 기반하여 메시에 컬러를 칠하며, 버텍스 프로그램 입력으로 appdata_base를 사용합니다.

Shader "VertexInputSimple" {
    SubShader {
        Pass {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
         
            struct v2f {
                float4 pos : SV_POSITION;
                fixed4 color : COLOR;
            };
            
            v2f vert (appdata_base v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.color.xyz = v.normal * 0.5 + 0.5;
                o.color.w = 1.0;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target { return i.color; }
            ENDCG
        }
    } 
}

다른 버텍스 데이터에 접근하려면 버텍스 구조를 직접 선언하거나 버텍스 셰이더에 입력 파라미터를 추가해야 합니다. 버텍스 데이터는 Cg/HLSL 시맨틱에 의해 식별되며 다음 리스트에 속해야 합니다.

  • POSITION는 버텍스 포지션이며 보통 float3float4입니다.
  • NORMAL은 버텍스 노멀이며 보통 float3입니다.
  • TEXCOORD0는 첫 번째 UV 좌표이며 보통 float2, float3float4입니다.
  • TEXCOORD1, TEXCOORD2TEXCOORD3은 각각 두 번째, 세 번째 및 네 번째 UV 좌표입니다.
  • TANGENT는 탄젠트 벡터(노멀 매핑에 사용됨)이며 보통 float4입니다.
  • COLOR는 버텍스당 컬러이며 보통 float4입니다.

버텍스 셰이더 입력에서 요구되는 것보다 더 적은 컴포넌트만 메시 데이터에 포함되어 있을 경우 나머지는 모두 0으로 채워집니다(디폴트가 1인 .w 컴포넌트 제외). 예를 들어, 메시 텍스처 좌표는 대부분의 경우 x와 y 컴포넌트만 있는 2D 벡터입니다. 버텍스 셰이더가 TEXCOORD0 시맨틱이 붙은 float4 입력을 선언하면 버텍스 셰이더가 받게 되는 값은 (x,y,0,1)을 포함합니다.

이러한 기법을 사용하여 빌트인 렌더 파이프라인에서 버텍스 데이터를 시각화하는 방법의 예는 버텍스 데이터 시각화를 참조하십시오.

Cg/HLSL에서 셰이더 프로퍼티 액세스
빌트인 셰이더 포함 파일