셰이더란?

셰이더(Shader) 무엇인가?

셰이더의 정의

“Shader 화면에 출력할 픽셀의 위차와 색상을 계산하는 함수라고 한다. 처음 접하는 사람에게는 이러한 정의가 전혀 이해되지 않을 것이다. “Shade”라는 단어에는색의 농담, 색조, 명암 효과를 주다.’라는 뜻을 가진다고 한다.

셰이더에는 Vertex Shader(정점 셰이더), Geometry Shader(지오메트리 셰이더), Pixel Shader(픽셀 셰이더) 있는데 책에서는 우선 Geometry Shader 어렵다는 이유로 빠져있다.

셰이더의 종류(참고 : http://skmagic.tistory.com/entry/%EC%89%90%EC%9D%B4%EB%8D%94%EC%9D%98-%EC%A2%85%EB%A5%98)

Vertex Shader

물체의 정점 정보에 수학적인 연산을 함으로써 물체에 특별한 효과를 주는데 사용되는 셰이더.

정점의 3차원의 위치를 나타내는 좌표나 색상, 텍스쳐, 조명 정보 등의 정보를 가짐.

정점 셰이더는 정점의 정보값들을 변화시켜서 물체를 특별한 위치로 옮기거나 텍스쳐를 바꾸거나 색상을 바꾸는 등의 작업을 수행.

기존 정점을 삭제하거나 새로운 정점 추가등의 작업은 불가능.

Pixel Shader(Fragment Shader)

렌더링 각각의 픽셀들의 색을 계산하는 방식의 셰이더.

최종적으로 픽셀이 어떻게 보일지 결정.

언제나 같은 색을 출력하는 간단한 부터 텍스쳐로부터 색을 읽어 오거나 빛을 적용, 범프 맵핑, 그림자, 반사광, 투명처리 복잡한 현상등을 수행하는 것이 가능.

각각의 픽셀들이 렌더링 수행되므로 다른 픽셀의 정보는 얻을 없음(추측)

오직 픽셀만을 연산. 주변 픽셀 정보나 현재 그리는 것이 어떤 사물의 일부인지에 대한 정보는 없음.

매우 복잡한 효과를 생성하는 것은 불가능(아마 픽셀마다 연산을 하므로 복잡한 효과를 넣을 경우 굉장히 많은 양의 연산을 하게 되므로 그렇다고 추측)

픽셀의 이외에 깊이(Z버퍼) 다른색(다른 렌더 목표물) 출력이 가능(후자쪽은 아마 제일 앞에 있는 물체가 아닌 뒤의 물체를 출력 가능하다는 이야기인듯하다)

Geometry Shader

버텍스 셰이더가 수행된 , 수행 .

버텍스 셰이더를 거쳐온 도형 정보를 입력받아 출력함. 정점 3개가 지오메트리 셰이더에 입력되면 셰이더는 정점을 모두 없앨 수도 있고 많은 도형을 만들어 내보내는 것도 가능.(무슨 말이여?)

지오메트리 쉐이더를 지나간 도형 정보는 레스터라이즈를 거친 픽셀 셰이더 통과.

지오메트리 셰이더는 테셀레이션이나 그림자 효과, 큐브 맵을 한번의 처리로 렌더링 하는데 주로 사용됨.

확실히 Geometry Shader 대해서는 감이 오지 않는다. Geometry Shader 대해서는 후에 추가적으로 작성하도록 하자.

Vertex Shader 경우 단순하게 정점 정보를 받아오고 이를 위치변환하거나 커지거나 작아지는 등의 효과를 주는게 가능하다. 폴리곤(3개의 정점으로 이루어진 삼각형)으로 3D 표현하는 방식에서 물체는 Vertex, 정점으로 이루어져 있다는 사실을 알아야 한다. 셰이더 순서로 따지자면 Vertex -> Geometry -> Pixel 순으로 지나게 된다.(파이프라인 .) 설명에 포함되어 있는 테셀레이션의 경우 제공 되는 폴리곤을 보다 잘게 쪼개어 표현하여 3D 모델링이 더욱 부드럽게(각지지 않도록) 표현되도록 하는 기법으로 알고 있다.

테셀레이션 : 본래 테셀레이션의 뜻은 우리말로 맞추기라는 뜻으로 같은 모양의 조각들을 서로 겹치거나 틈이 생기지 않게 늘어놓아 평면이나 공간을 덮는 것을 말한다고 한다.(참고 : 네이버 수학백과) 테셀레이션이 어떤 것인지 참고하기 위해서는 다음의 문서를 참고하면 좋을 하다. (참고 : http://kr.nvidia.com/object/tessellation_kr.html (엔비디아 DX11에서의 테셀레이션

))

레스터라이제이션(rasterization) : 래스터화 하기. 벡터 또는 윤곽선 데이터를 비트맵(픽셀 형식)으로 바꾸는 과정을 의미한다.(참고 : 네이버 용어해설) 래스터라이저는 3개의 정점을 위치변환하여 화면에 그렸을 때 그 3개의 점으로 이루어지는 삼각형 내에 들어가는 픽셀을 찾아낸다고 생각하면 된다.

Pixel Shader는 최종적으로 화면에 표시될 픽셀이 가질 색상을 계산하는 것이다.

Vertex Shader는 정점 데이터를 가지고 계산 하므로 정점의 개수만큼 불리게 될 것이며, Pixel Shader는 Pixel의 개수만큼 불리게 될것이다.(오버드로우되는 부분이나 블렌딩되는 부분, 반사되어 보이는 부분들은 그만큼 추가연산이 많이 들어갈 거라는게 당연.)

셰이더를 다룰 때는 과정들이병렬 이루어 진다는 점을 숙지해둬야 한다.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s