3D그래픽스의 개념과 렌더링파이프라인 (4/5)

Unity3D 2014. 4. 16. 11:06
반응형


2008-04-11 09:00:00
図1: GPU内部におけるレンダリングの流れ ピクセル単位の陰影処理を行うピクセルシェーダ~テクスチャは画像テクスチャだけじゃない [7]の「ラスタライズ処理」によって生成されたピクセル単位の陰影処理の仕事をこ ...... >> Read more

(C) Mainichi Communications Inc. All rights reserved.



                                       그림1: GPU 내부에서의 렌더링 흐름

픽셀단위의 음영처리를 실행하는 픽셀셰이더~
텍스처는 화상 텍스처만 있는 것이 아니다.

[7]의 「래스터라이즈 처리」에 의해서 생성된 픽셀단위의 음영처리 일을 해내는 것이 [8][9]로 표시된 픽셀셰이더(Pixel Shader)이다. 그리고, 렌더 백엔드(render back-end)까지를 포함한 틀 전체를 「픽셀파이프라인」이라 부른다. 
 
GPU에 따라 그 구현된 형태는 여러가지이고, [8]의 픽셀단위의 다양한 음영처리를 수행하는 기능 블럭만을 「픽셀셰이더」라고 부르는 경우도 있으며, 뒤에 기술할 「텍스처 유닛」인 [9]를 총괄해서 픽셀셰이더라고 부르기도 한다. 

이제, 그 [8]의 픽셀셰이더에서 수행하는 계산인데, 실은 단위가 픽셀로 되어 있다는 것뿐 수행하는 처리 내용은 정점쉐이더와 닮은 부분이 많다.
 
픽셀단위로 광원벡터, 시선벡터, 그 픽셀의 법선벡터들을 사용해서 반사방정식을 풀고, 그 픽셀이 어떤 색이 될지를 구하는 「픽셀단위의 라이팅」을 하게 된다.

그 경우, 정점단위의 라이팅 결과를 단지 보간해서 그 픽셀의 색으로 하는 간단한 라이팅 보다도 온화한 음영이나 아름다운 하이라이트가 나올수 있다. 이것을 특히 「퍼픽셀라이팅」(Per Pixel Lighting) 이라 부른다.

정점쉐이더에서 구해진 텍스처 좌표로 텍스처에서 텍셀을 읽어 내는 것이 [9]의 텍스처 유닛이다.

이 텍스처 유닛으로 부터 가져온 텍셀의 색과 앞에서 구한 픽셀단위의 음영처리 결과에 의해 구해진 픽셀색 양쪽을 고려해서 최종적인 픽셀색을 구한다.

이 픽셀셰이더에서 실행시키는 셰이더 프로그램이 픽셀셰이더 프로그램이고, 그것에 의해서 픽셀 단위의 라이팅을 특수한 것으로 만들 수 있다.

통상적으로 「텍스처」라고 하면, 폴리곤에 붙이는 화상을 연상하지만, 현재의 프로그래머블 셰이더 시대에서는 그 응용 방법이 확장되어져 왔고,  텍스처에 화상이 아닌 수학적인 (또는 물리적인) 의미를 가진 여러가지 수치 데이터를 넣어 두는 응용들이 생겨났다. 픽셀셰이더에서 픽셀 단위로 음영처리를 할 때는 그 수치 텍스처로 부터 수치데이터를 순차적으로 가져와서 계산에 이용하게 되었다.

텍스처도, PC화면의 화소(픽셀)가 αRGB 각 8비트로 구성되어 있는 것과 동일한 이치로, αRGB의 4개의 요소로 구성되어 있다. 예를 들면 32비트 칼러 텍스처라면 α (투명도) 8비트, R (빨강) 8비트, G (녹색) 8비트, B(파랑) 8비트로 배분되어 있다. 수치 데이터를 텍스처에 넣는 경우, αRGB 4요소에 넣는 것을 생각하면 최대 4개 요소인 벡터나 행렬을 넣어 둘 수 있게 된다. 예를 들어 3차원 벡터이면, 그 X, Y, Z의 3요소의 수치를 αRGB의 RGB에 넣어 둘 수 있다.

실제 픽셀세이더 처리에서는 이 벡터 텍스처로 부터 적당한 텍셀을 꺼내 와서 그것을 벡터 데이터로 해, 시선벡터, 광원벡터, 법선벡터 등과 조합해 특수한 반사방정식을 풀어 독특한 재질을 표현한다.
 
그림6에서는 법선벡터를 텍스처에 넣은 「법선맵」을 사용해 범프맵핑을 하는 예를 보여주고 있다. 이것은 이후의 연재 속에서 한번더 해설 할 것이므로 여기서는 「픽셀셰이더가 하는일이 이런 거다.」라고만 알면 될것 같다. (계속)

그림6: 픽셀셰이더가 하는일의 예 -- 범프맵핑이 완료되기 까지의 개념도. 
높이맵에서 법선맵으로의 변환 역시 픽셀셰이더에서 할 수 있다. 법선맵은 법선벡터를 넣어둔 텍스처로 하나의 텍셀에 하나의 XYZ로 표현되는 3차원 법선벡터의 값이 넣어져 있다.(XY만 넣고 Z는 계산해서 구하는 방법도 있음)

<그림 설명>
좌상 ~ 좌하:
높이맵
밝다 = 높다
어둡다 = 낮다
오목과 볼록을 나타내는 텍스처를 작성. 이것이 높이맵
법선맵(노말맵)
어둡다 밝다 어둡다
높이맵의 명암으로 부터 법선벡터를 계산
법선맵의 이미지
법선벡터들이 들어있는 텍스처가 법선맵

우상 ~ 우하:
법선맵으로 부터 꺼내 온 요철(凹凸)의 법선벡터
광원, 시선, 폴리곤
꺼낸 법선벡터로 폴리곤 상의 각 픽셀에 대해 음영계산을 수행한다.
범프매핑의 완성
실제로는 평면이지만 요철이 있는 것처럼 빛을 비추므로 그렇게 보여 버린다.



(トライゼット西川善司)

반응형
: