카테고리 없음

HLSL 정점 셰이더의 입력과 출력

zelkova 2021. 2. 15. 09:58

<목차로 돌아가기>

 

 

필요 변수의 선언

float4x4 matWorld;
float4x4 matView;
float4x4 matProjection;

 

입력 구조체의 작성.

  정점 셰이더 계산에 필요한 데이터 형식을 구조체에 정의한다.

struct VS_INPUT
{
   float4 position : POSITION0;
   float2 Texcoord : TEXCOORD0;
};

 

출력 구조체의 정의

  정점 셰이더에서 연산을 수행한 후 다음 단계로 전달할 결과 형식을 구조체로 정의한다.

struct VS_OUTPUT
{
   float4 position : POSITION0;
   float2 Texcoord : TEXCOORD0;
};

 

그리고 셰이더 작성 예시

float4x4 matWorld;
float4x4 matView;
float4x4 matProjection;

struct VS_INPUT
{
   float4 position : POSITION0;
   float2 Texcoord : TEXCOORD0;
};

struct VS_OUTPUT
{
   float4 position : POSITION0;
   float2 Texcoord : TEXCOORD0;
};

VS_OUTPUT vs_main(VS_INPUT Input)
{
   VS_OUTPUT Output;
   
   Output.Position = mul( Input.position, matWorld);
   Output.Position = mul( Output.position, matView);
   Output.Position = mul( Output.Position, matProjection);
   
   Output.TexCoord = Input.TexCoord;
   
   return(Output);
}

 

 

구조체 정리중..

주로 엔진으로부터 데이터를 받아와서 넣습니다.

 

struct appdata
{
  POSITION정점 위치이며 일반적으로 float3또는 float4입니다.
   NORMAL정점 법선이며 일반적으로 float3.
   TEXCOORD0제 UV 전형적, 좌표 float2, float3또는 float4.
   TEXCOORD1, TEXCOORD2및 TEXCOORD3각각 2, 3, 4 UV 좌표입니다.
   TANGENT접선 벡터 (법선 매핑에 사용됨)이며 일반적으로 float4.
   COLOR정점 별 색상이며 일반적으로 float4.
};


struct v2f
{
   float4 position : SV_POSITION;

   float3 normal : NORMAL;
   float3 uv : TEXCOORD0;

   float fogCoord : TEXCOORD1;

   float4 shadowCoord : TEXCOORD2;

   UNITY_VERTEX_INPUT_INSTANCE_ID

   UNITY_VERTEX_OUTPUT_STEREO //VR이 활성화 되어 있는 경우만 유효한 매크로
};

 

 

struct appdata_base: vertex shader input with position, normal, one texture coordinate.
struct appdata_tan: vertex shader input with position, normal, tangent, one texture coordinate.
struct appdata_full: vertex shader input with position, normal, tangent, vertex color and two texture coordinates.
struct appdata_img: vertex shader input with position and one texture coordinate.

 

반응형