1330 words
7 minutes
쉐이더란 무엇인가

하루에 9페이지씩 ~P90

01. 쉐이더란 무엇일까?#

3D 컴퓨터 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색을 정해주는 함수

쉐이더는 한국말로 음영이다. 음영은 ‘그림자’와는 조금 다른 느낌이며, ‘그늘’이라고 말하는 것이 비슷하다. 우리가 빛이 들어오는 방향은 밝게 어두운 부분을 어둡게 하는 것은 해당 종이에 그림의 입체감을 나타내기 위함이며 3D 그래픽에서도 이러한 음영으로 물체를 표현하게 된다 이걸 기본으로 각종 색과 농담을 추가하여 화면에 출력하고 이 음영을 토대로 재질을 나타내고 자신만의 예술을 나타내는 것도 가능하게 된다. 마치 자신만의 스타일 대로

아티스트의 시각으로 쉐이더를 다시 정의해보면 그래픽 데이터의 음영과 색상을 계산하여 다양한 재질을 표현하는 방법 이라고 볼 수 있다


02 쉐이더를 익히기 위한 기반 지식#

렌더링 파이프 라인은 쉽게 말하면 ‘렌더링 순서’ 이다. 일반적으로 렌더링 파이프 라인은 다음과 같은 과정을 거치게 된다.

01. 오브젝트 데이터 받아오기
02. 정점(버텍스: Vertex)쉐이더
03. 래스터라이저(Rasterizer)
04. 픽셀쉐이더(Pixel Shader) / 프레그먼트 쉐이더(Fragment Shader)

01 렌더링 파이프라인(Rendering Pipeline : 렌더링 순서)#

우리의 그래픽 카드는 버텍스로 이루어진 물체의 데이터 값을 받아온다. 버텍스는 필요한 정보들을 가지고 있는데 예를들어 버텍스의 인덱스 넘버(Index number), 포지션(Position), 노멀(Normal), 컬러(Color)등의 정보이다.

02 정점(버텍스 : Vertex) 쉐이더#

쉐이더 작업의 첫번째 바로 ‘정점 쉐이더’ 라고 불리는 버텍스 쉐이더(Vertex Shader) 이다.

  1. 버텍스의 위치 값은 로컬(Local) 좌표계 상태이다. 로컬 좌표계는 ‘자기중심적인’ 위치 값을 의미한다. 0,0,0 다른 오브젝트의 위치는 전혀 고려되지 않는다.

  2. 이제 여기에 ‘월드 변환 행렬(월드 좌표계)을 곱해줌으로써, 로컬 좌표계를 월드 좌표계로 변환해준다. 월드 좌표계란, 절대 좌표인 월드 좌표계의 위치로부터 각 물체의 상대적 위치 값을 의미한다. 월드 좌표계에서는 실제 월드의 중심점이 0,0,0이여야 하며 다른 오브젝트들은 여기에서 얼마나 떨어져 있는지를 표현한다.

  3. 월드값을 가지게 되었지만 고려되지 않은건 바로 ‘카메라’이다 카메라가 없으면 볼 수 없고, 그렇기 때문에 월드 좌표계의 버텍스들은 다시 ‘카메라 행렬’로 곱해서 월드 좌표계에서 살고 있던 오브젝트의 버텍스 위치 값들이 카메라의 중심점으로부터 상대적 거리로 다시 연산된다

  4. 이렇게 카메라 행렬로 정렬된 버텍스들은, 다시 한번 ‘프로젝션(Projection)행렬’로 곱해진다. ‘프로젝션 행렬’이란 원근감을 부여해주기 위한 방법으로, 카메라에서 먼 곳은 좁혀진 것처럼 버텍스 위치를 조정해주는 것이다. 카메라에서 멀리 떨어질수록 작아지는 물체가 되듯이.

여기까지 하면 음영도 아무것도 없는 폴리곤 덩어리만 생성된다. 단지 3D 공간에서 존재하는 오브젝트일뿐… 픽셀 쉐이더를 거쳐야한다.

이 버텍스 쉐이더에서 조명을 연산하면 ‘버텍스 라이트’라는 매우 가볍고 부정확한 라이트가 연산될 수 있기도 하다. 이 기법중 유명한건 고라우드 쉐이딩(Gouraud Shading) 기법이다.


03 래스터라이저(Rasterizer)#

오브젝트가 모니터에서 표현될 때 어느 픽셀로 표현될 것인지를 나타내는 장치를 거치게 되는데 이를 래스터라이저라고 부르며, 2D 픽셀로 표현되는 세계로 오게된다.

이제 3D 오브젝트는 모니터에 보이도록 픽셀이 되었고, 이 과정을 래스터화라고 한다. 3D 석고상을 촬영하는 순간 2D이미지가 되듯이… 모니터에 보이려면 2D 이미지로 만들어야 하니까

이 모든 작업은 매 프레임마다 일어난다.


04 픽셀쉐이더(Pixel Shader) / 프레그먼트 쉐이더 (Fragment Shader)#

이제 모니터까지 넘어온 3d 그래픽 데이터는 화면에 픽셀로 찍히게 되는데 여기에서 픽셀쉐이더가 가동되면서 조명과 텍스쳐, 그림자등 각종 특수효과 등을 연산하게 된다.

그림 46

쉐이더란 무엇인가
https://yuminjo.github.io/YuminJo-Blog/posts/20260324_쉐이더란무엇인가/
Author
[Unity Developer] Yumin.Jo
Published at
2024-10-19
License
CC BY-NC-SA 4.0