최상단 광고

2012년 6월 4일 월요일

니시카와젠지의 3D 게임 팬을 위한「KILLZONE 2」그래픽스 강좌 (전편) PS3의 하이퀄리티 그래픽스는 Deferred Shading으로 [출처] [본문스크랩] 니시카와젠지의 3D 게임 팬을 위한「KILLZONE 2」그래픽스 강좌 (전편) PS3의 하이퀄리티 그래픽스는 Deferred Shading으로 결정!?


2009년 4월 27일 게재된 글이지만,  살펴볼 것도 있고 해서 번역합니다..



를 참조하세요~


니시카와젠지의 3D 게임 팬을 위한「KILLZONE 2」그래픽스 강좌(전편)
PS3의 하이퀄리티 그래픽스는 Deferred Shading으로 결정!?




【필자근황?】
 삼시 세끼보다 격투게임을 더 좋아하는 테크니컬 저널리스트。
본 잡지에서는 주로 GPU나 3D 그래픽스 관련 기사를 집필하고 있다.
태어나서 처음 산 게임 하드웨어가
「판타지 존」이라는 중고 게임 기판이라고 할 정도의 게임센터 죽돌이. 게임을 뭐든 사랑하지만 그중에서도  괴상한 내용의 게임을 좋아하는 경향이 있다. 최근 맘에 들었던것은 「NINJA BLADE」(프럼 소프트웨어)。개인블로그는 여기
 
  일본에서 그다지 알려져지 않지만 유럽에서는 절대적인 인기를 누리고 있는 1인칭 슈팅게임(FPS : First Person Shooter)가「KILLZONE」시리즈다。
   개발 회사는 네덜란드 유일의 하이테크 스튜디오 Guerrilla Games。
항상 최신기술을 자사 타이틀에 넣는 모습은, 게임엔진을 직접 만드는 EPIC GAMES, CRYTEK등과도 많이 닮아 있으며 최신작(당시에는..)
「KILLZONE 2」는 매력적인 게임내용은 물론 PS3용 최신예기술의 쇼케이스이다

 「KILLZONE 2」는 유럽에서는 2월에 발매되어 높은 평가를 받았다. 일본에서도 4월23일 발매되었다. 그야말로 발매직전이라는 절호의 타이밍이라는 형태로 이번에는 저번달 샌프란시스코에서 개최했던 GDC에서의 기술 세션의 내용을 베이스로「KILLZONE 2」의 그래픽스 테크닉을 차근차근 전후편으로 나누어 소개 하고자한다。


■ 「KILLZONE 2」가 채택한 Deferred Shading 파이프라인이란?(1)
 ~ 무거운 셰이더 그래픽스 최적화 수단중의 하나

GDC에서「KILLZONE 2」에 관한 세션을 진행한 Guerrilla Games Senior Programmer Michal Valient씨
왼쪽상단이 Z 버퍼의 내용。오른쪽상단이 픽셀단위의 법선벡터. 왼쪽 하단이 텍스처 컬러. 오른쪽하단이 스펙큘러. 이러한 중간값을 미리 렌더링해서 최종적인 라이팅 설정을 나중에 수행하는것이 Deferred Shading
  일반적인 3D 게임 그래픽스는 버텍스처리-> 픽셀단위의 음영처리 라는 흐름으로 렌더링을 수행한다. 이러한 형태를 굳이 이름을 붙이자면 「전방(순방향)렌더링(Forward Rendering)」이라고 부른다。

    포워드 렌더링에서는 오브젝트마다 셰이더를 전환하거나 하는 렌더링 엔진에서는 픽셀셰이더로부터 얻은 결과가 깊이테스트에서 그려내지못하고 버려지 버리는 것도 많다.
이것은 쓸데없는 연산이라는 것도 된다。

   또 멀티 패스 렌더링에서는 몇번이고 같은 지오메트리에서 구성된 씬을 렌더링하는 케이스도 나오게된다(지오메트리 처리의 무의미한 중복).
즉, 포워드 렌더링에서는 화면에 표시하는 프레임내에 총 픽셀 수 보다도 많은 연산을 하여 그 결과를 버리거나, 반복적으로 같은 계산을 쓸데없이 수행해버리는 것이 종종 있는 것이다.

   또, 하나의 씬을 렌더링할때에 고도의 픽셀 셰이더 프로그램을 여러개 동작 시킬 경우, 각각의 픽셀셰이더 프로그램이 계산중간의 같은값을 사용하는 것이 종종 있다. 이것이 복잡한 계산이나 텍스처참조를 동반한 것일 경우, 그 중간치를 구하는 것만으로 GPU에 부하가 걸리게 되 버린다.
  
   그래서 복잡한 음영처리를 수행하는 헤비 셰이더가 많이 사용되는 3D 그래픽스의 렌더링에서는 기존의 [ 포워드 렌더링 ] 이 아닌 별도의 연구가 시작되었다. 그 결과물의 방법으로써 최근 대두가 되고 있는 것이 
Deffered Shading(디퍼드 셰이딩 : 연장 셰이딩) 이라는 방식이다

 Deferred Shading에서는 씬내의 폴리곤 베이스(지오메트리 베이스)의 렌더링을 무거운 소재표현의 픽셀 셰이더는 동작시키지 않고 미리 수행배 버리고, 복수의 픽셀 셰이더 프로그램에서 필요한 계산의 중간값을 복수의 버퍼에 미리 동시 출력해 버린다. 그 때의 유효한 것이 DirectX 9 이후에 유효하게 활용할수 있게 된 MRT (Multi - Render Taget) 이다.
한번 렌더링 패스에서 복수의 버퍼로 다른 값을 동시출력하는 기능이며, DirectX 9에서는 4장, DirectX 10에서는 8장의 동시출력이 가능하다

   MRT를 사용해서 복수의 버퍼(텍스처)에 대해서 출력할 내용은, 렌더링 엔진마다 다르지만 심도값(Z 값), 폴리곤을 구성하는 픽셀단위의 법선벡터 정보, 스펙큘러 값, 조도(텍스처를 적용한 결과)가 있다.
MRT를 사용하면 이들의 데이터를 한번의 복수 버퍼의 입력하는것이 가능하다

   그리고, 최종적인 픽셀 단위의 라이팅은, 그 전에 출력한 중간 값들을 사용하여 화면좌표계에서 포스트 프로세스 적으로 수행한다. 픽셀 단위의 음영처리를 나중에 수행하므로 「Deferred(연장)Shading」이라는 이름이 붙여졌다. 참고로 이것을 처음 제안한 사람은 Michael Deering씨로 이 알고리즘을 20년전인「SIGGRAPH 1988」에 발표하였다

    회사가 자랑하는 킬러 타이틀로써 PS3 최고의 그래픽스를 요구하는「KILLZONE 2」에서는 셰이더가 무거운 것이 확실하므로 렌더링 파이프라인으로써 Deferred Shading을 채택했다는 것이다。

【Deferred Shading 처리 프로세스】
심도값(Z값、Depth 값)카메라좌표계에서의 법선벡터 정보
스펙큘러 강도하이라이트 강도
움직임 벡터텍스처 컬러
Deferred Shading 완료후포스트프로세스 적용후 완성화면



■ 「KILLZONE 2」이 채택한 Deferred Shading 파이프라인이란?(2)
 ~ 구현과 지오메트리 패스

「KILLZONE 2」의 Deferred Shading 4MRT 내역。Deferred Shading에서 이 복잡한 중간값들을 저장하는 버퍼를 싸잡아서「G-Buffer」라고 부른다
 「KILLZONE 2」에서 Deferred Shading은 2개의 커다란 스텝으로써
    (1)지오메트리・패스(G버퍼 작성 부분)
    (2)라이팅・패스(픽셀・셰이딩) 

의 2단계로 나뉜다. 처음 지오메트리・패스에서는 씬내의 모든 폴리곤을 평범하게 렌더링하지만, 무거운 픽셀셰이더에 의한 라이팅은 수행하지 않는다。

 PS3의 GPU인 RSX는 NVIDIA GeForce 7800 GTX의 기능을 떨군것이며、DirectX 9세대의 GPU이기 때문에 MRT는 4장까지 가능하다。「KILLZONE 2」의 Deferred Shading 지오메트리・패스 에서는 이 4MRT로 그림과 같은 RT0~3까지의 4장의 출력을 수행하고 있다

   우선 MRT에 사용되는 출력 포맷으로는  PS3의 RSX에서는 FP16-64비트 버퍼는 패스의 성능상 능력부족이므로 필연적으로 정수32비트 버퍼(RGBA8)이 선택되었다.

  다음으로 렌더링 해상도는 1,280×720을 채택。AA는 NVIDIA의 Quincunx 2×MSAA모드를 적용하여、1,280×720×(RGBA8×4장+D24S8)×2×MSAA로 합계 36.8MB의 대역폭 소비라고 어림잡을 수있으므로, 개발팀에서는「뭐어, 이정도면」이라는 것으로 결정했다라고한다.
또한 4MRT로 출력된 각 중간치 값을 가지고 있는 버퍼는 후에 말할 포스트프로세스등으로 저해상도판으로 변환되어 재사용된다。
  
     그럼 4MRT로 출력된 각 버퍼(G 버퍼)의 내용을 순서대로 보자

    Depth(심도)/ 스텐실 버퍼는 씬의 완성후의 Z값이 저장된다. 라이팅계산에서 좌표계의 위치정보가 필요할때는 이 Z값을 가지고 역산해서 구한다.

RT0의 Lighting Accumulation Buffer(LAB)는 입사광정보를 기록해두는버퍼이며 픽셀라이팅을 수행할때에도 사용된다。처음의 지오메트리・패스에서는 LAB에는 라이트맵이나, 후에 이야기할 Light Probe를 사용한 의사 대국조명의 결과, 환경광등을 적용한 결과가 출력된다。LAB의 α부분에는 HDR휘도값이 저장되어 있으며 그휘도레인지는0.0~2.0。「KILLZONE 2」의 HDR렌더링은 정수 32비트 버퍼를 사용한 의사 HDR 렌더링으로 되어있다。

 RT1은 지오메트리・패스에서 각 픽셀에서 카메라좌표계의 법선벡터 x,y가 저장된다. 법선맵의 적용결과등도 여기에 저장된다. 법선 벡터는 정규화 되어있으므로 (절대값=1)역산이 가능하기 때문에 z값은 저장되지 않는다. 구체적으로 말하자면「z=√(1-x^2-y^2)」로 구해진다(z의부호는 항상(+)이지만 손실되는 부분은 없다)。

   법선 벡터의 x, y 는 16비트 부동소수점(FP16)으로써 저장되며, 이때에 FP16x2를 32비트 정수버퍼로 저장하는 NVIDIA계 GPU의 특유명령인 unpack_4ubyte명령을 사용하고 있다

   RT2의 R과 G 에는 지오메트리・패스에서 화면좌표계의 움직임 벡터(Motion Vector)가 저장된다. RT2의 활용에 대해서는 후편의 모션블러 부분에서 다룰 것이다. RT2의 B와α에는 스펙큘러와 관련된 파라미터가 들어간다。B에는 어느정도 강도의 하아라이트를 낼것인가를 나타내는 계수값을 로그값「log2(n)/10.5」으로 저장된다(Specular Power)。α에는 어느정도의 스펙큘러 반사를 수행할것인가의 강도를 나타내는 스펙큘러 강도(Specular Intensity)가 저장된다。

 RT3의 RGB에는 오브젝트에 적용된 텍스처 컬러가 저장된다。RT3의 α는 미리 계산된 평행광원(태양광)으로부터의 정적인 그림자 렌더링 결과가 저장된다。

【Lighting Accumulation Buffer】
지오메트리・패스를 끝낸 직후의Lighting Accumulation Buffer。실질적으로는 정적인 라이팅만 수행된 상태. 테스트 화면이기메 텍스처는 굳이 적용 안함라이팅・패스를 끝낸 직후의Lighting Accumulation Buffer。동적인 라이팅까지만 수행된 상태. 테스트 화면이기에 텍스처는 굳이 적용안함. 음영의 차이나 그림자의 유무에 주목할것



■ 「KILLZONE 2」이 채택한 Deferred Shading 파이프라인이란?(3)
 ~ 라이팅・패스

Deferred Shading의 라이팅・패스는 처리적인 시점에서 표현하면 [광원을 렌더링한다]라는 이미지다 
  라이팅・패스에서는 1프레임당 100 이상의(경우에 따라 300이상도)동적광원으로부터의 라이팅, 10개이상의 그림자생성을 동반한 동적광원으로부터의 라이팅 설정을 수행하기 때문에 매우 무거운 부분이다.

   포워드 렌더링에서는 3D 오브젝트 기준으로「3D오브젝트에 어떤 빛이 닿고 있는가」라는 개념으로 라이팅을 수행하지만 Deferred Shading에서는 이미 완성된 2.5D적인 영상에 대해서 화상처리 비슷하게 포스트프로세스로써 광원을 렌더링한다. 예를들면 300개의 광원이 있으면 300회의 화면의 포스트프로세스를 수행한다。

   개념적인 이야기를 하자면 지오메트리 패스에서 그려진 입체적인 무채색의 모형상자에 대해서 속속 빛을 비추어 색을 입히는 공정이다.
무수히 많은 광원이 씬내의 3D 공간에 배치되어있어도 모든 광원이 무언가를 비추는 것은 아니다. 포워드 렌더링에서 [ 보이지 않는 오브젝트를 그리지 않는다 ]라는 최적화 수법이 있는것처럼 Deffered Shading에서는 영향을 주지않는 광원은 스킵 한다 라는 최적화를 수행한다。

   또, 영향을 주는 광원이라고 해도 화면내의 어느 픽셀을 비출지 어떨지에 대한 테스트를 수행하여 영향이 있는 픽셀에 대해서만 라이팅 연산을 수행한다. 점광원은 그 영향범위가 구체로 되어있으므로 빛이 도달하는 범위의 구체를 지오메트리・패스후에 생성이 끝난 씬의 심도(Z)값을 분석해나가며 별도의 심도(Z)버퍼에 렌더링 한다

   그림자 생성에서 스텐실섀도우 볼륨기법이라는 것이 있는데  이것과  비슷한 발상으로 빛영역(Light Volume)을 렌더링 하는 것이다. 렌더링한 Light Volume을 사용하는것으로 화면내의 어떤 픽셀이 그 광원의 영향하인가를 판정할 수 있으므로 남은것은 희망의 라이팅 계산을 하는것 뿐이다

【라이팅 ・패스】
시점에서 봤을때Light Volume의 후면보다더 전면에 있는 픽셀을 마크한다시점에서 봤을때Light Volume의 전면보다도 후면에 있는 픽셀이 라이팅대상이 된다고 판정한다


■ 「KILLZONE 2」가 채택한 Deferred Shading 파이프라인이란?(4)
~ 태양광(평행광원)라이팅에 관련된 특별처리와 그림자 생성

   동적광원은 이전에 말했던 Light Volume 방식으로 라이팅을 설정하지만, 문제는 전역에 내리비치는 평행광원(태양광)이다. 평행광원이 움직이지 않아도 동적 캐릭터는 움직이므로, 방향을 바꾸거나 자세를 바꾸거나 하면 음영은 변한다. 따라서 라이팅・패스에서의 라이팅설정은 필수불가결이다.

  하지만 생각해보면 태양광은 전역에 내리 비치므로 화면 전체가 Light Volume내에 들어오는것과 같은 원리이다. 그래서 개발팀은 유니크한 기술을 적용하고 있는데, 그것은 지오메트리・패스에서 생성한 RT3의 태양광으로부터의 정적인 그림자 정보이다. 이 RT3에 있는 그림자 부분은 태양광이 닿지 않는다 라고가정할수 있으므로 태양광의 라이팅 설정 범위 밖이다 라고 간주하여 라이팅・패스에서 스킵 해버리는 것이다。

【태양광(평행광원)라이팅】
지오메트리・패스 후에 RT3에 저장된 정적 그림자즉 이 부분은 태양광으로부터의 라이팅 설정 적용범위가 아니다라고 간주 할 수 있다 ( 붉게 마크한 부분)완성화면

「KILLZONE 2」의 그림자 생성은 뎁스 섀도우 기법과 정적인 그림자의 하이브리드 표현으로 되어있다
캐스케이드 된 4장의 섀도우 맵을 색깔로 나누어 가시화한 테스트 샷
 「KILLZONE 2」에서 그림자 생성은 RT3에 지오메트리・패스에서 렌더링하는 정적인 그림자와 동적 캐릭터용의 동적인 그림자 2개의 조합으로 표현되고 있다.

  또한, 동적 오브젝트라도 원거리에 있다거나 그림자가 드리워져있어도 드리워져 있는지 모르는 작은 오브젝트, 미치는 영향 범위가 작은 광원으로부터의 그림자에 대해ㅓ는 부하절감의 관점으로부터 동적 그림자 생성을 생략하여 수고를 덜고 있다(최적화)。

   동적인 그림자 생성에느 극히 일반적인「뎁스 섀도우」(섀도우 맵)기법을 채택하고 있으나 몇가지의 독자적인 개량을 하여 사용하고 있다。

  또한 뎁스 섀도우 기법의 자세한 사항이나 개량형에 대해서는 「3D게임 팬을 위한 Xbox 360 그래픽스 / 물리엔진강좌」를 참조할 것。

   독자적인 개량의 첫번째는 그림자 품질의 향상을 위해 시점과의 거리에 따라 4장의 섀도우맵을 캐스케이드 시켜서 이용하고 있다는 점이다.
1장당 섀도우맵 용의 뎁스 버퍼는 최대 16비트의 1,024 x 1,024 텍셀.


 2번째는 뎁스 섀도우 기법에서 자주 문제시되는 그림자에 엣지 점멸의 폐해이다. 시점이 움직일때에 섀도우맵용 텍스처가 시선벡터와 싱크로가 맞아 회전해버리는 것이 원인이다。

   보고있는 대상물이 움직이지 않아도 보고있는 측이 움직이는것으로 섀도우맵 내에 새겨진 그림자 영역의 그리는 방식이 변해버려, 이것이 최종적인 씬에서 그려진 그림자의 윤곽이 흔들리고 있던 것이다.

「KILLZONE 2」에서는 이것을 개량하기 위해 월드 좌표계에서 섀도우맵을 캐스케이드 시키는 방식을 사용했다. 이것에 의한 그림자의 윤곽의 진동이 진정되었지만, 섀도우맵의 이용효율이 일정하지 않게되어, 경우에 따라서는 그림자 해상도가 떨어지는 상황도 생길 가능성이 있다고 하고 있다。

【그림자 생성】
가장 구석(LEVEL3)은 그림자 생성 없음LEVEL2。정적인 그림자는 보인다LEVEL1。정적인 그림자와 동적인 그림자 양쪽이 그려지고 있다
가장 앞(LEVEL0)。여기도 정적인 그림자와 동적인 그림자 양쪽이 그려지고있다동적 생성된 그림자만 나타낸것정적 생성된 그림자만 나타낸것
완성화면대상물이 움직이지 않아도 섀도우맵내의 사용방식이 변한다섀도우맵을 월드 좌표계 기준으로 회전시키지 않고 캐스케이드 시키는 방식을 사용했다


■ 「KILLZONE 2」에서의 의사 글로벌 일루미네이션
~ Light Probe정보를 SPU에서 구면 텍스처로


Light Probe를 가시화한 화면
l=0、1、2、3… m=-l~+l에서 구면조화함수의 3차원 가시화 그림. 예를들면l=3의 4단까지 사용한다고 하면 총 16개의 구면조화함수를 사용하게 된다
   현 세대의 3D 게임 그래픽스에서 선진적인 스튜디오 들이 대부분 적용하고있는것이 의사적인 글로벌 일루미네이션(GI:Global Illumination:대국조명)이다。

   현실세계에서는 광원으로부터의 직접광에 의한 조명뿐만아니라, 조명을 받은 오브젝트 자체가 2차광원이 되거나 오브젝트끼리 서로 비춰주거나 하여 복잡한 조명효과를 내고 있다. 이것이 글로벌 일루미네이션이다. 특히 상호 반사에 착안한것이 라디오시티(Radiosity)라고 불린다。

   기본적으로 현재의 리얼타임 3D 그래픽스 파이프라인은「(차폐물을 고려하지 않는다)직접광에 의한 조명뿐」밖에 처리되고있지 않으므로 GI를 구현하려면은 몇가지 생각을 해야 한다. 단지 현행의 GPU에서는 GI를 리얼타임 처리 하는 능력은 아직 없으므로 사전계산을 동반하여 그럴듯하게 하는 의사 수법을 사용하는 것이 주류이다(2009년 당시)。

 「KILLZONE 2」에서는 본연재의「소닉・월드・어드벤처」(소닉WA)편에서 소개한 라이트 필드(Light Field)방식과 같은 부류의 기술을 채택하고 있다。「KILLZONE 2」에서도 소닉WA에서 말하는 GI 텍스처를 오프라인에서 렌더링하고 작성하여 라이트맵 화 시키고 그때 동시에 게임내 씬에 대해서 적당한 간격으로 Light Probe를 설치하고 있다。Light Probe란, 그 위치에 두어서 빛이 전방위로부터 어떻게 들어오고 있는가를 얻어내는 것。

   라이트 맵생성과 Light Probe의 계싼은 전부 정적광원(움직이지 않는광원)을 설치하여, 충분한 시간을 들여 상호 반사할때까지 고려한 대국 조명 계산을 수행한다. 그래서 각 Light Probe는 그 포인트에서 전방위로부터 오는 [ 복잡한 대국조명 계산 결과]의 빛을 얻을 수 있다。

   예를들면 천정에서 하얀 형광등이 있는 좁은 방이 있고, 그 방에 왼쪽에있는 벽은 빨갛고 방 중간에 Light Probe가 있다고 하면 그 Light Probe는 위에서 하얀 빛을 받아 왼쪽으로 부드러운 빨강(형광등으로부터의 빛을 받은 빨간 벽으로부터의 반사광)을 얻을수 있게 된다。

   리얼타임 렌더링시에는 이 Light Probe의 전방위로부터 광량정보를 기초로하여 그 씬 안을 돌아다니는 동적 캐릭터들의 라이팅 설정 정보로써 이용하는 것이다. 이로 인해 라이팅이 설정된 동적 캐릭터는 사전 계산한 대국조명의 결과인 라이트맵으로 스며들게 된다. 동적 캐릭터가 움직이면 다른 Light Probe로부터의 조명이 반영되므로 마치 그 씬의 간접광까지 고려된 것 같은 라이팅 설정이 되어 효과로써 마치 리얼타임으로 GI가 수행되는것 같이 보인다... 라는 것이다。

 「KILLZONE 2」에서는 1스테이지당 약 2,500개의 Light Probe를 사전 산출하여 설정하고 있으며 각 Light Probe는 구면조화함수의 l=2까지의 9개를( RGB분 3요소) KD 트리 데이터로 가지고 있다。

   구면조화함수에 대해서는 개념은 필자가 게재한 기사등을 참조 하면 좋겠지만, 간단히 말하면 전방위(방사상)의 에너지 분포를 근사화하여 표현할수 있는 편리한 함수이다. 가시화하면 오른쪽 그림 같이 된다. 개념적으로 예를들면 방사상의 수치분포를 몇가지의 계수치만으로 근사 재현을 할수있는 이른바 MPEG나 JPEG 같이 비가역 압축하는 메소드라는 것이다。

 「소닉 WA」에서는 이 Light Probe와 대응하는 정보를 8방향으로부터의 이산치(離散値)로써 가지고 있지만「KILLZONE 2」에서는 9개의 구면조화함수(의계수)로 가지고있다。

  실제 리얼타임 렌더링 시에는 근접하고있는 4개의 Light Probe를 읽어내어 구면조화함수로부터의 그 Light Probe 전방위광량을 디코딩하여 이것을 바탕으로 8x8 텍셀의 구면상 텍스처(구면좌표계의전방위 텍스처)를 작성하고 있다. 어디까지 가장가까운 4개의 Light Probe를 읽어내어 거기서부터 가중평균적으로 보간하고 있다。

【Light Probe】
근접한 4개의 Light Probe를 읽어내어 구면조화함수를 디코딩하고그 캐릭터를 밝히는 전방위로부터의 환경광을 산출이것을 8×8 텍셀의 구면상 텍스처로써 생성

   뭔가 무거운 처리같이보이지만「KILLZONE 2」에서는 이 처리를 SPU에서 수행하고 있다.
개발팀의 발표에 의하면 1프레임당 약 600개의 Light Probe를 읽어내고 있으며 일련의 이 처리의 부하는 1기의 SPU로 약 13% 정도라는 것。

   실제의 픽셀 셰이더에서의 픽셀 단위의 라이팅 설정에서는 각 픽셀로부터의 법선 벡터를 바탕으로 이 구면상 텍스처를 샘플링하여 그 값을 환경광처럼 다루어 라이팅을 설정한다。

   600개의 Light Probe를 읽어내는 것은 「KILLZONE 2」에서는 이 구면상 텍스처를 캐릭터의 부위(발, 허리, 팔 등)단위로 세세하게 수행하고있는것에도 기인하고 있다. 그 대신 상반신과 하반신은 다른 간접조명효과를 얻을 수 있으므로 리얼하게 보인다。

 「소닉 WA」에서는 캐릭터의 중심 오프셋 값을 정하여 거기서부터 라이트 필드를 적용하고 있다。「소닉 WA」는 캐릭터의 키가 그다지 큰 차이가 없어 전체적으로 캐릭터가 「덩어리」로써 존재하고 있기 때문에 세세하게 할 필요가 없었을 것이다。「KILLZONE 2」에서는 일어나 있거나 움츠리고 있거나 팔을 내 젓거나 하면 인간형의 캐릭터가 상하좌우로 변형하므로 이같은 구현이 필요했던 것이다。


【Light Probe -2 】
동적 캐릭터(오브젝트)를 하얀색으로 채색한 테스트 샷. 이 씬에서는 바닥만이 정적인 오브젝트이다동적 캐릭터(오브젝트)의 Light Probe에 의한 환경광과 태양광(평행광원)만 라이팅을 설정한 결과완성 프레임


■ 정리~ Deferred Shading은 PS3용?

유럽에서도 높은 평가를 받은「KILLZONE 2」이 일본에서도 드디어 4월 23일 발매된다(2009년)
 「KILLZONE 2」강좌의 전편에서는 Deferred Shading을 중심으로 설명하였다。Deferred Shading은 무언가 돌려서 하는 기법이라고 생각할수도 있지만 동적 캐릭터 수나 씬의복잡성의 좌우되지 않는 동적광원으로 확장성있는 라이팅 설정을 수행할수있는 것이 이점이다。

   간략한 설명을 하자면 예를들어 포워드 렌더링 에서는 100개의 캐릭터를 4개의 광원으로 비춘다고 했을때 100x 4 = 400번의 라이팅 계산이 필요하지만 Deferred Shading이라면 미리 100개의 지오메트리를 라이팅 설정 없이 렌더링하고 이후의 4개의 광원을 렌더링해서 라이팅을 설정하면 라이팅 계산은 4번으로 끝난다. 부하에 따라서 라이팅에 사용한 광원의 개수를 늘이거나 줄일 수도 있다。

   포워드 렌더링에서는 동적광원의 수가 변하는것만으로 셰이더내에서 참조하는 변수들이 변해버리기 때문에 같은 경향의 라이팅을 하는 셰이더라고해도 별도의 셰이더로 변환하지 않으면 안되는 현재의 번잡한 프로그래머블 셰이더 아키텍처에 영향을 주지 않는 것도 이점이다。

   다양하고 부유한 셰이더 그래픽스 표현을 수행하는 타이틀에 Deferred Shading을 적용하는 예가 늘어나고 있는 것은 이러하 이점이 커다랗게 작용하고 있는 것 같다。

 Deferred Shading을 채택한 3D 게임으로써는「Bionic Commando」(CAPCOM)、「S.T.A.L.K.E.R.」(GSC Game World)、「Tabula Rasa」(NC soft)등이 있으며 이후에도 구현 사례가 늘어날 것이라고 예상된다。

   참고로  Deferred Shading은 Xbox 360에서는 힘들다라는 의견도 있다。Xbox 360은 GPU에는 대역폭 부족을 커버할 목적으로 10MB의 EDRAM이 탑재되어있다。Xbox 360에서는 해상도가 높은 프레임, 혹은 MRT로 EDRAM용량의 10MB를 넘어선 대량출력을 동반한 렌더링을 할 경우에는 한번의 렌더링이 10MB의 EDRAM으로 처리되도록 분할해서 렌더링할 필요가 있다。

 Deferred Shading의 경우 지오메트리・패스에서 ㅗ화면 전역의 중간 치를 출력하게 된다.
예를들면 1,280 x 720의 프레임으로 4MRT를 하면 심도 버퍼를 포함하지 않는 상태로 14MB에 달해버려, 10MB를 가볍게 초과해버린다.  7MB x 2 로써 분할렌더링 한다고 해도 2분할째의렌더링시 1분할째의 렌더링한  결과는 클리어되버린다.
1분할째를 대비하면 메모리 버스 소비가 커져서 퍼포먼스가 떨어진다.
Xbox 360애서도  전혀 안되는 것은 아니지만 Deferred Shading은 PS3나 PC용 기법이라고 말할 수도 있겠다

 또 Deferred Shading에도 약점이 있다. 우선 지적되고있는것이 반투명 오브젝트를 좋은 효율로 처리하는 기술이 없다는 점이다。Deferred Shading에서는 반투명 오브젝트에 대해서는 포워드렌더링에서 그린다라는 것이 가장 심플한 해결방법이지만 반투명 렌더링이 많은 씬에서는 Deferred Shading의 메리트를 활용할수 없는 경우도 일어날 것이다. 그저 GPU의 성능면에서 핸디캡을 떠 맡고 있는 PS3에 있어서는 Deferred Shading은 유효한 수법에 하나라는 것은 틀림없다. 이후 PS3전용 타이틀을 중심으로 Deffered Shading에 채택이 증가할지도 모르겠다。

  

KILLZONE 2 (C) Sony Computer Entertainment Europe. Published by Sony Computer Entertainment Inc. Developed by Guerrilla.

(2009년 4월 17일)

댓글 없음: