본 아티클은 UI 및 간단한 VFX 제작에 도움이 될만한 Graphics 에 대한 이해를 돕기 위해 작성했습니다.


아직 한참 공부가 필요한 입장에서 이런 글을 쓰는 것이 혹여나 잘못된 정보를 퍼뜨리지 않을까 불안합니다만.

많은 분들이 게임 그래픽을 쉽게 이해하는데 도움이 되길 바라는 마음으로 작성해봅니다.

혹시 잘못된 부분 지적해주시면 고치도록 하겠습니다.


추후에 실제 Shader Code 작성 및 VFX 제작을 위한 튜토리얼도

시간님이 허락하신다면... 제작해보도록 하겠습니다.


매끄러운 전달을 위해 반말로 작성된 점 양해부탁드립니다.

문의 사항은 포스팅에 댓글로 적어주시면 최대한 답변 드리겠습니다.


감사합니다. :D





1편 - Vertex Shader & Pixel Shader



스크린 안의 세상이 어떻게 그려지는지 생각해본적 있니




밑도 끝도 없이 UI 부터 까고보는 사람들..



뭐가 잘못된건지 설명도 안해주는 개발자들..




이제 그 설움의 시간에 마침표를 찍고...


피의 복수를 시작해보자..


(미안하지만, 이거 다 읽어도 피의 복수까진 못한다)


.

.

.



총 3개로 이루어진 본 아티클의 목적은 아래의 Custom Shader 에 대한 이해를 돕는 것이다.




[ Custom Shader in Unity ( 영상링크 ) ]




자 그럼 이제 신나고 설레는 Graphics 의 세계로 들어가보자!


여기 이미지가 있다.



[ 유아이 이미지가 이상하다!! ]


이것을 보고 어떤 생각이 드는가?





초보라도 좌절하지 말자. 당연한거다.

중수는 복습하는 의미에서 읽어줬으면한다.

고수님들은.. 여기서 나가주세요.. 초보랑만 있고싶습니다.


이 글의 대상 독자는 초보 - 중수이다. 자신감을 가지자.



[ 출처 좌 : Pinterest, 우 : Alberto Rodriguez ]


Game graphic 에서 화면에 출력되는 이미지들은 Mesh 위에 그려진다. (UI도 예외는 아니다)


Mesh 의 최소 단위는 삼각 폴리 (Triangle Polygon) 인데, 면을 구성하는 점의 최소 개수는 3개이기 때문이다.

( ※ 놀랍게도 점이 2개 이하면 면이 존재할 수 없다! )


우리가 만든 UI도 결국 삼각 폴리의 덩어리 위에 그려지는 것이다.


그렇다면 폴리곤과 픽셀들은 어떠한 과정으로 그려질까?




[ Shader 의 전체 과정. 저 두 놈에만 집중하자 ]



화면에 Graphic 을 출력하는 Shader 에서 우리가 주로 다루는 두 가지 프로세스가 있는데,

첫번째는 Vertex Shader 이고, 두번째는 Pixel Shader 이다.


Vertex Shader 란 Vertex (3d 프로그램에서의 정점) 를 화면에 그리는 과정으로,

3개의 점을 가져와 삼각형 한 판씩을 그린다고 생각하면 된다.


[ Vertex 를 기준으로 렌더되는 폴리곤 ]



Pixel Shader 는 Vertex Shader 단계 이후에 Pixel 을 입히는 과정인데,

이미지를 각각의 픽셀에 그리는 것이다.



[ 해상도를 기준으로 한 픽셀씩 렌더된다 ]



Vertex Shader 같은 경우 Vertex의 개수만큼 연산을 하고,

Pixel Shader 같은 경우 Pixel의 개수만큼 연산을 한다. (256 해상도의 픽셀은 256 X 256 = 65,536 번만큼 계산)






[ Pixel Shader 내에서의 연산은 훨씬 무겁다 ]


이러한 이유때문에 최적화를 위해서 가능한한 Vertex Shader 내에서 연산을 하는 것이 좋다.

Vertex Shader 로 화면에 Vertex 들을 배치하고 난 뒤에, 이미지를 그리는 과정에서 필요한 것이 텍스쳐와 UV 맵이다.


( ※ 둘 사이에 Geometry 를 생성하는 프로세스도 있으나, 본 아티클에서는 다루지 않는다 )

( ※ 당연히 픽셀들이 저렇게 개기는 일은 없다; ]

( ※ 편의상 좌우상하로 표현했지만, 모든 값은 X, Y (3d 좌표의 경우 Z) 를 기준으로 입력되어야한다 )



과연 UV맵은 무엇일까!!

2편이 너무 궁금해지는걸!





궁금하신 내용 댓글로 달아주시면 확인하는데로 답변 드리겠습니다. :)

질문 사항이 다른 분들에게도 공유될 수 있게 가급적 공개 댓글로 적어주세요.


감사합니다.

  1. 와우쭈 2018.07.13 10:04

    재미있어요

+ Recent posts