HLSL 프로그래밍에서 입력 및 출력 변수는 semantics를 통해 그 의도를 명시해야한다.
함수와 semantic을 ":" (colon)으로 이어서 표기함으로 이를 나타낸다.
fixed4 frag (v2f i) : SV_Target
{
return fixed4(i.uv, 0, 0);
}
위 예시의 fixed4 frag (v2f i) : SV_Target
에서 SV_Target은 함수의 리턴값에 대한 의미, 즉 semantic을 부여한다.
fixed는 색상을 표현하는 데 많이 쓰이는 실수 자료형으로, 같은 실수 자료형인 float, half에 비해 low precision이다. 일반적으로 float는 32bit, half는 16bit인데 반해 fixed는 11비트로, 소수점을 표현하는 정밀도가 낮다.
fixed의 뒤에 붙는 숫자는 fixed 변수의 dimension을 나타낸다.
fixed4는 4개의 fixed 컴포넌트를 갖는 벡터 자료형으로, 앞서 fixed는 색상을 표현하는 데 많이 쓰인다고 하였으므로 주로 (r,g,b,a)의 각 fixed 컴포넌트를 가질 것이다.
즉, r,g,b,a(색상 및 투명도 값)의 각 값을 11bit의 실수값으로 가지는 4차원 벡터 자료형으로 볼 수 있다.
다시 fixed4 frag (v2f i) : SV_Target
를 해석해보자.
SV_Target은 render target에 저장될 값을 나타낸다. 자세히는 몰라도 되고 render target에는 색상 데이터가 저장되어야 한다는 점을 기억하자.
앞서 함수의 semantic은 리턴값의 의미를 나타낸다고 했으므로, SV_Target semantic을 통해 우리는 frag 함수에 대해 다음과 같은 정보를 얻을 수 있다.
frag 함수는 render target에 저장될 fixed4 형태의 색상 데이터를 반환하는 함수이다.
전체 코드에서 서로 동일한 자료형을 사용하는 데이터들이 많을텐데, 단순히 변수명만으로는 각 입출력 데이터가 무엇에 대한 데이터인지 알아보기 힘들것이다. Shader Semantics를 사용하면 데이터가 무엇에 대한 데이터인지를 알아보기 쉽게 표현할 수 있다.