-
[유니티 쉐이더 스타트업] UV가 뭘까?프로그래밍/Unity Shader 2019. 5. 28. 11:12
== 이전 포스팅 ==
2개의 텍스쳐를 섞어서 출력하기
https://zerodeg.tistory.com/42
[유니티 쉐이더] 2개의 텍스쳐를 섞어서 출력하는 방법(lerp 함수)
https://zerodeg.tistory.com/41 [유니티 쉐이더] 이미지를 흑백으로 만들기 https://zerodeg.tistory.com/40 [유니티 쉐이더] 쉐이더 코드를 깔끔하게 정리하는법 https://zerodeg.tistory.com/39 [Unity Shader]..
zerodeg.tistory.com
오늘은 유니티 쉐이더 스타트업 6장 내용을 공부하면서 UV가 무엇인지에 대해 정리하는 시간을 가져보려고 합니다. 아마 저처럼 쉐이더를 처음 공부해보는 사람에게는 UV라는 것이 뭔지 도통 감이 오질 않는데요. 책에 내용을 바탕으로 알아보기 쉽도록 블로그에 정리를 해놓으려고 합니다.
UV는 XY 좌표와 같은 개념
UV는 XY좌표와 같은 개념이라고 생각하면 아주 쉽게 이해할 수가 있습니다. 수학에서 그래프를 그릴 때 XY축을 기준으로 그래프를 그리듯이 컴퓨터에서 그림을 그리는 그래픽의 세계에서는 UV라고 칭하는 것입니다. 즉, 수학적인 기준으로는 XY, 그래픽의 세계에선 UV, 색상의 세계에선 RG 라고 칭하고 XY = UV = RG 라고 정리할 수 있겠습니다.
UV의 범위
0, 0 ~ 1, 1 까지의 범위를 가집니다.
UV는 float2로 이루어진 숫자
UV는 XY좌표와 같은 2차원 좌표라고 말했으므로 당연히 float2로 이루어져 있습니다.
엔진 혹은 툴마다 UV의 배치가 다를 수 있다.
언리얼 엔진이나 DirectX는 좌측 상단이 0, 0인 반면, 유니티 엔진이나 OpenGL은 좌측 하단이 0, 0입니다.
0, 1 1, 1 0, 0 1, 0 유니티 기준
UV를 유니티에서 시각적으로 확인할 수 있을까
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
먼저 위 코드를 볼까요? 여기서 text2D에 들어가 있는 두 인자는 샘플러와 UV입니다. 즉 IN 구조체 안에 있는 uv_MainTex가 UV라는 소리죠. Input 구조체 안에 있는 uv_MainTex가 UV라는 사실을 알았으니 이 값을 Emission에 적용해보도록 하겠습니다.
o.Emission = IN.uv_MainTex.x;
UV의 U값만을 가지고 출력한 결과 흑백으로 U를 확인할 수 있었습니다. 그럼 반대로 V도 출력해보겠습니다.
o.Emission = IN.uv_MainTex.y;
y축, 즉 V의 값을 출력했을 때의 이미지입니다. U를 출력했을 때와는 느낌이 다르죠? 그럼 이번에는 UV를 float3을 이용하여 동시에 출력해보겠습니다. R과 G값에 UV값을 넣어주세요.
o.Emission = float3(IN.uv_MainTex.x, IN.uv_MainTex.y, 0);
색으로 UV가 표시되니 좀 더 알아보기가 쉬워졌죠? 좌측 하단은 0에 가깝고, 우측 하단은 Red가 진한걸로 보아 U값이 크다는 것을 알 수가 있지요.
'프로그래밍 > Unity Shader' 카테고리의 다른 글
[유니티 쉐이더 스타트업] 2개의 텍스쳐를 섞어서 출력하는 방법(lerp 함수) (1) 2019.05.21 [유니티 쉐이더 스타트업] 이미지를 흑백으로 만들기 (2) 2019.05.20 [유니티 쉐이더 스타트업] 쉐이더 코드를 깔끔하게 정리하는법 (0) 2019.05.19 [유니티 쉐이더 스타트업] 색상을 입력 받아 출력해보기 - 2 (0) 2019.05.18 [유니티 쉐이더 스타트업] 색상을 입력받아 출력해보기 - 1 (0) 2019.05.13