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

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


2008-03-28 16:00:00
図1:GPU内部におけるレンダリングの流れ 頂点シェーダのもう一つの仕事~頂点単位の陰影処理 図1にある[3]の頂点シェーダの仕事は座標変換だけではない。頂点単位の陰影処理/光源処理(ライティング)も頂点シェーダの ...... >> Read more

(C) Mainichi Communications Inc. All rights reserved.



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

정점셰이더가 하는 또하나의 일~ 정점단위의 음영처리

그림1에 있는 [3]의 정점셰이더가 하는일은 좌표변환 뿐만은 아니다. 정점단위의 음영처리/광원처리(라이팅)도 정점셰이더의 중요한 역할이다.

「좌표변환」은 「수학적」인 느낌이 들고, "계산한다", 라고 하는 이미지가  떠올라 알기 쉽다. 하지만, 컴퓨터 안에서 라이팅을 한다.... 즉 "빛을 비춘다." 라고 하는 이미지는 쉽게 연상되지 않을지도 모른다. 물론 GPU는 카메라가 아니고 계산기이므로 실제로 빛을 비쳐 사진을 찍을리 없다. 계산을 해서 이것을 구하는 것이다.

빛이 물체에 닿으면 빛은 거기서 반사/확산되거나 흡수된다. 그 물체에 색깔이나 모양이 있으면 그 색이 보일지도 모르고 비쳐진 빛에 색이 있으면 그 물체의 색이나 모양과 합성된 색이 보일 것이다. 이런 처리를 계산해서 구하는 것이 컴퓨터 그래픽스의 기본적인 방식이다.

이 처리를 어떤식으로 해서 계산기가 잘 계산할까? 이것도 실은 벡터연산을 이용한다.

빛의 방향을 나타내는 「광원벡터」와 시선방향을 나타내는 「시선벡터」, 그리고 빛이 닿는 폴리곤을 구성하고 있는 정점의 방향을 나타내는 「법선벡터」의 3개의 벡터를 사용해 이런저런 벡터의 상대관계로 부터 어느 정도의 빛이 시선방향에 대해 반사하는지를 나타내는 반사방정식을 이용해 계산하는 것이다.

이 반사방정식에는 표현하고 싶은 재질에 따라 다양한 종류들이 있고, 이 반사방정식을 프로그램으로 표현한 것이 정점셰이더 프로그램이다. 그리고 이 정점단위의 반사방정식 프로그램을 실행하는 것도 역시 정점셰이더인 것이다.

정점셰이더에서는 정점단위의 음영처리뿐 아니라 폴리곤에 붙일 텍스처 좌표의 계산도 한다. 텍스처좌표의 계산이라는 것은 어는 폴리곤에 어떤 텍스처를 어떻게 붙여 나갈까라는 대응을 계산하는 것이다. 실제로 텍스처매핑은 [8][9]의 픽셀셰이더가 하고 여기서는 텍스처 매핑을 수행할 준비를 한다라는 이미지이다.

그림3: 정점셰이더가 하는일의 예: 정점셰이더를 활용한 
굴절 표현

<그림 설명>
(버블 상)
光源ベクトルL(광원벡터 L)、
法泉ベクトルN(법선벡터 N),視線ベクトルE(시선벡터 E),屈折ベクトルR(굴절벡터 R)、(원)環境マップ(환경맵)
(원) 頂点シェーダ(정점셰이더)
(버블 하)
정점셰이더프로그램
보통의 광원처리를 하고, 나아가 굴절벡터를 구해 면의 건너편의 환경맵을 가리키도록 텍스처 좌표를 수정해 버리자
(우)
건너편이 투명하게 보이는 것 같은 반투명 사과 완성!!

지오메트리셰이더~ 정점의 증감(增減)이 가능한 무시무시한 녀석

다이렉트X 9 / SM 3.0 세대 이전의, 지오메트리셰이더가 없던 세대의 GPU에서는 3D모델의 정점 정보는 CPU쪽 소프트웨어에서 미리 준비해 두는 것이였고, 한번 GPU에 입력되면 이것을 GPU쪽에서 마음대로 증가/감소 시킬수 없었다.

그때까지의 "대원칙의 틀"을 깨고 정점을 자유자재로 증가/감소 시킬수 있는 기능을 가진 셰이더가 [4]의 「 지오메트리셰이더 」이다.

어떻게 증가/감소 시키는가는 지오메트리셰이더를 실행 시키는 셰이더프로그램이 지정한다. 또 실제로 증가/감소 시킬 수 있는 것은 복수의 정점이기 때문에 실질적으로는 선분, 폴리곤, 파티클이라는 각종 프리미티브의 증감이 가능하게 되어 있다.

지오메트리셰이더의 활용방법은 여러가지가 나와 있지만 폴리곤을 자유자재로 생성 가능하기 때문에 지면에 풀(grass)이 되는 폴리곤을 만들게 한다든지 또는 3D 캐릭터의 털(fur)을 만들게 한다든지 하는 것이 가장 기본적인 활용 방침으로 되어있다. 게임등에서는 게임로직과의 인터랙티브(interactive) 처리가 별로 필요 없는 불꽃등의 이펙트 표현을 지오메트리셰이더에서 생성한 파티클로 표현한다... 라는 것도 가능할 것이다.

지오메트리셰이더에서 생성한 정점은 다시 정점셰이더에 돌려보낼 수 있기 때문에 재귀적인 정점처리가 가능하다. 예를들면 (실제로는 보통의 방법으로는 할수 없지만), 로우폴리곤으로 만든 어떤 3D모델로 부터 지오메트리셰이더에서 폴리곤을 보간해서 둥그스름한 하이폴리곤모델을 생성한다... 라는 것도 이론상으로는 가능하다.(계속). 

로우폴리곤 모델(좌)로 부터, 산술적으로 폴리곤을 보충해서 하이폴리곤 모델(우)로 변형하는 활용도 생각할 수 있다.

그림4: 지오메트리셰이더가 하는일의 예: 
지오메트리셰이더로 털을 생성한다.

<그림 설명>
(원) 지오메트리셰이더
(버블) 털을 표현하는 폴리곤을 심어 버리자



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



반응형
: