티스토리 뷰

Unity/Shader

Structs

연홍 2021. 1. 20. 11:05
728x90

정점 또는 조각 셰이더 함수를 정의하기 전에 데이터를 안팎으로 전달하는 데 사용되는 일부 구조체를 정의해야합니다. 빌트인에서는 일반적으로 "appdata"및 "v2f"(vertex to fragment)로 명명되는 반면 URP 셰이더는 대신 "속성(attribute)"및 "변형(varyings)"을 사용하는 경향이 있습니다. 이름 일 뿐이며 그다지 중요하지는 않습니다.

 

URP ShaderLibrary는 조명/음영 계산에 사용되는 InputData 및 SurfaceData와 같은 특정 함수에 필요한 데이터를 구성하는 데 도움이되는 몇 가지 구조체도 사용합니다. 조명 섹션에서 살펴 보겠습니다.

 

이것은 상당히 간단한 Unlit 셰이더이기 때문에 우리의 Attributes와 Varyings는 그렇게 복잡하지 않을 것입니다.

struct Attributes {
    float4 positionOS   : POSITION;
    float2 uv           : TEXCOORD0;
    float4 color        : COLOR;
};
// Don't forget these semi-colons at the end of each struct,
// or you'll get "Unexpected Token" errors

Attributes 구조체는 정점 셰이더에 대한 입력이됩니다. 의미론(semantics)적으로 알려진 대문자부분을 사용하여 메쉬에서 정점 별 데이터를 얻을 수 있습니다. 여기에는 정점 위치(POSITION), 정점 색상 (COLOR) 및 UV (텍스처좌표)가 포함됩니다. 메시에는 8 개의 다른 UV 채널이 있으며 TEXCOORD0에서 TEXCOORD7까지 액세스 할 수 있습니다.

참고로 Mesh.uv는 TEXCOORD0입니다. Mesh.uv1은 없습니다. 다음 채널은 Mesh.uv2로 TEXCOORD1에 해당하며 Mesh.uv8 및 TEXCOORD7까지 이어집니다.

 

NORMAL을 통해 정점 법선에 액세스하고 TANGENT를 통해 접선에 액세스 할 수도 있습니다. 하지만 일반적으로 Unlit 셰이더에서는 사용되지 않습니다.

struct Varyings {
    float4 positionCS   : SV_POSITION;
    float2 uv           : TEXCOORD0;
    float4 color        : COLOR;
};

Varyings 구조체는 정점 셰이더의 출력과 fragment에 대한 입력입니다 (사이에 다른 구조체가 필요할 수있는 지오메트리 셰이더가 없다고 가정하지만, 이 게시물에서는 다루지 않습니다).

 

구조체 후에는 일반적으로 텍스처와 샘플러가 정의되는 것을 볼 수 있습니다. (텍스처가 셰이더 프로퍼티에있는 동안 아직 hlsl에 정의되지 않았습니다. 다른 속성은 CBUFFER에 포함되어 있습니다.) URP에서는 다음을 사용합니다.

TEXTURE2D(_BaseMap);
SAMPLER(sampler_BaseMap);

'Unity > Shader' 카테고리의 다른 글

Fragment Shader  (0) 2021.01.21
Vertex Shader  (0) 2021.01.21
Post Processing in the Universal RP  (0) 2021.01.20
HLSL  (0) 2021.01.20
Shaderlab  (0) 2021.01.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30