렌더링 최적화 기법 - 파티클 렌더링과 그 외 기법들


주말에 새로 올라온 몇 가지 포스팅들을 보다 김윤정님의 최적화 고민이 생각이 나서 그 짐을 일부나마 덜 수 있을까 하는 마음에 관련된 포스트들을 소개합니다. ^^

사실 최적화는 애플리케이션단에서의 문제이기 때문에 일반적인 지침을 이야기한다고 해도 바로 적용하기 힘들거나 또 적용한 다음에 뚜렷한 개선을 볼 수 없는 경우도 허다합니다. 하지만 이런 아이디어들도 여러 가지를 접하다 보면 문제를 만든 사람이 프로그램에서 병목 현상이 발생하는 부분들에 대한 지도를 그리는데 도움이 될 수 있습니다. 그런 의미에서 바로 이 기본적인 가이드 라인의 의의를 찾을 수 있을 것입니다.

먼저 첫 번째로 소개할 글은 Sony Santa Monica, God of War 팀의 Christer Ericson씨(Realtime Collision Detection이라는 책의 저자로도 유명하죠)의 블로그 사이트에 올라온 파티클 렌더링의 최적화(Optimizing the rendering of a particle system)에 대한 글 입니다.

렌더링과 관련한 최적화의 문제는 결국 fillrate와 bandwith, 이 두 가지의 문제로 귀결이 되는데 이 포스트에서도 이들과 관련한 파티클 렌더링의 최적화에 대해서 A부터 Z까지 중요한 내용-이지만 아무도 알려 주지 않는-들이 잘 나와 있습니다.

포스팅에는 아래에 나온 11개 항목의 일반적인 항목과 2개의 비기가 언급이 되어 있습니다. (자세한 내용은 원문을 읽어 보길 권합니다.)
  1. Use opaque particles.
  2. Use richer particles.
  3. Reduce dead space around cutout-alpha particles.
  4. Cap total amount of particles.
  5. Use frequency divider to reduce data duplication.
  6. Reduce state changes.
  7. Reduce the need for sorting.
  8. Draw particles after AA-resolve.
  9. Draw particles into a smaller-resolution buffer.
  10. Use MSAA trick to run pixel shader less.
  11. Generate particles “on chip.”
  1. Compose particles front-to-back premultiplied-alpha style.
  2. Group particles together into one particle entity.

윤정님 게임이라면 엔지니어분들이 위에 내용들을 파악한 다음 1,2,4,6부터 한번씩 시도해 보는 것도 좋겠군요. (이들 중 몇 가지는 지난 해 부산 ICON 2008의 "Nebula2 엔진에 사용된 그래픽 최적화 기법" 강연 에서도 소개가 되었습니다.)

그리고, 이런 포스팅들을 읽을 때 원문만 읽고 넘어 가지 말고 아래 커멘트들도 한번쯤 확인하는 습관을 가지면 좋습니다. 포스팅된 글에 대한 의견이나 개선점들이 올라오는 경우가 많기 때문입니다. 그 중에서는 본문 보다 값진 덧글을 찾는 경우도 꽤 있습니다. 위의 파티클 최적화 포스팅의 경우 Timothy Farrar의 덧글이 그러한 경우인데, 어라 Timothy Farrar씨의 블로그 가 링크가 되어 있군요. 어디 한번 볼까요. (역시나 짐작대로) 렌더링과 관련한 포스팅들이 대부분입니다. ^^

쭈욱 훑어 보니 "Resistance II's Graphic Engine"이라는 포스팅(081115 / R2)이 눈에 띕니다. 그렇지 않아도 최근에 Insomniac사와 Resistance II 개발에 관심이 많은데 좋은 포스트를 찾았군요. 아래는 ResistanceII의 렌더링 테크닉과 관련해서 Timothy Farrar씨가 언급한 내용들입니다.
  1. Optimized the Particle/Blending Pass
  2. HDR with proper Bleeding
  3. Water Improvements
  4. Shadowing
  5. Lighting on Cutouts
  6. Z Range Issuse / Multiple Passes
최적화와 관련한 내용은 1, 4, 5 가 해당이 되겠군요. 개인적으로는 Resistance II의 개발에도 사용되었음직한 Insomniac의 툴 프레임워크인 Nocturnal Initiative에 관심이 많습니다. (이전 포스트에서도 한번 언급한 적이 있습니다)

그런데 이 포스트는 Human Head Studio에서 근무하는 Brian Karis씨의 "The Latest Games"포스트를 보고 생각이 나서 올린 것이라고 합니다. 그럼 어디 또 링크되어 있는 Brian Karis씨의 글을 한번 찾아 볼까요. Brian Karis씨는 Pray로 유명한 Human Head Studio에서 그래픽 프로그래머로 일하고 계시는군요.

포스팅에는 제목이 이야기하는 바대로 최근에 나온 게임들에 나온 게임들에서 사용된 렌더링 기술들에 대한 내용을 담고 있습니다. 글의"Latest" 게임들은 바로 Dead Space, Mirrors Edge, Fallout 3의 세 게임입니다.

첫 번째 DeadSpace에서는 주로 동적 그림자와 관련한 이야기를 언급하고 있습니다. 아무래도 게임이 호러 장르이다 보니 라이트를 흔든다던가그림자를 이용한 임팩트 등이 게임 연출에서 중요한 요소이기 때문일 것입니다. 또 이 게임은 이전의 어떤 게임에서도 시도하지않았던 게임 내 UI 사용으로도 연구 가치가 있는 게임이기도 합니다.


다음으로 Mirrors Edge에서는 라이트맵 제작과 관련한 흥미로운 이야기가 나옵니다. Mirrors Edge 가 언리얼 엔진3를 사용한다는 이야기는 이미 잘 알려진 사실인데 렌더링된 장면은 언리얼 엔진3를 사용한 다른 여러 게임들과는 확연히 구분이 됩니다. 이는 Beast 라는 Illuminate Labs라는 써드파티의 미들웨어를 사용했기 때문입니다. 그리고 게임 내에서의 라이트맵은 렌더링 퀄리티를 희생하지 않기 위해서 (높은해상도의 라이트맵을 사용하기 위해서) 스트리밍된다고 합니다.(정확한 내용이리가보다는 유추입니다) 이 이야기가 사실이라면 비슷한고민을 요즘 하고 있기 때문에 매우 흥미로운 이야기입니다.
또 Illuminate Labs 사이트에는  Beast와 유사한기능을 가지고 있지만 스탠드얼론 프로그램이 아니라 Maya 플러그인으로 제공되는 또 다른 라이팅 솔루션인 Turtle이있습니다. 그런데 3DS Max에도 Turtle과 유사한 RTTGroup 이라는 툴이 있습니다. 둘의 차이점이라면 RTTGroup은 3dsmax의 라이트맵 기능을 이용한다는 것이고 Turtle은 라이팅 솔루션을 직접 제공한다는 점인데 이러한 사실로 보면 Turtle이 한수 위 같군요.

마지막으로는 Fallout3입니다. 세 가지를 이야이하고 있는데 첫 번째는 Light Shaft 두 번째는 Grass 그리고 마지막 세 번째는 부서진 건물 잔해를 위한 노말맵의 사용에 대한 내용입니다.



Fallout3에서는 콘크리트 기둥 등의 부서진 모서리를 표현하기 위해서 노말맵을 사용하는데 몇 가지 종류의 노말맵을 이용해서 부서진 잔해를아주 그럴 싸하게 표현하고 있다고 합니다. 또 거리에 따라서 이들 노말맵을 on/off 함으로써 LOD 처리도 함께 하고 있다고 합니다. 다음 게임에서는 이런 부서진 배경이 등장할 예정인데 응용할 만한 좋은 기술을 배웠습니다.

이렇게 세 명의 블로그를 옮겨 다니며 그래픽 처리와 관련한 재미있는 글들을 살펴 보았습니다. 식구들이 모두 감기로 들어 누운지라 주말에 이런 것도 가능하군요. -_-;; 오늘은 삼청동에 유명하다는 와플집을 한번 가볼 생각이었는데 말입니다.

윤정님은 이 글로 최적화에 도움이 되신다면 한잔 사시는겁니다! ㅋ

by kimsama | 2009/01/03 18:21 | Development | 트랙백 | 핑백(1) | 덧글(2)

트랙백 주소 : http://kimsama.egloos.com/tb/1855851
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at East Agent's Blo.. at 2009/01/03 21:16

... ingSoft의 Lighmap Maker - 프리웨어 라이트맵 베이킹 툴입니다. 자세히 보니까 개인이 만든 것도 아니고 최근(2008년 6월)까지도 계속 업데이트가 되고 있군요. 아래 포스팅에 Turtule이나 RTTGroup의 대안...이라고 하기에는 뭣하지만 경우에 따라서는 ^^; ... more

Commented by 김윤정 at 2009/01/03 21:00
감사합니다 ㅎㅎ 일단 우리 담당자들에게 좌악 읽어보라고 시켜야 겠군요. 제가 빨랑 코드를 뜯을 수 있는 수준이 되면 좋을텐데 말이죠 ...
근데 사실 저희는 노말맵도 쓰지 않고 파티클 옵션도 끄고 그림자도 끄고 등등 뭔가 그래픽적 부하 걸릴 수 있는건 다 끈 상태에서도 원하는 만큼 속도가 안나와서 말이죠.
일단 로직쪽 체크를 통해 각종 함수별 프레임을 체크해서 해결하는 방법을 쓰고 있습니다.
즉 그래픽적인 요소는 이미 줄일만큼 줄여놓은 상태라서 말이죠 (저해상도 텍스쳐까지 했으니...)
다음에 시도해볼 것은 근본적인 doodads 제거 옵션과 오클루젼쪽 기능입니다. 무식하게 오브젝트를 없애는 거지요 ㅎㅎ 옵션따라서 ..
어쨌거나 감사합니다. ^^ 일단 이 내용을 팀원들에게 숙지시켜 보도록 하겠습니다.
Commented by kimsama at 2009/01/03 23:06
오클루젼이면 돈 좀 쓰서 해결할 수도 있죠 - http://www.umbrasoftware.com/
예전에 dPVS라고 하던 놈이었는데 umbrasoft로 팔리면서 요즘은 이걸로 나옵니다. 평가판을 받아서 한번 게임에 적용해 볼 수 있을겁니다. 가격은 대략 이천 안팍이었던 것으로 기억합니다. 최근에 본 데모로는 이걸 사용하고 안하고에 따라 20프레임이 왔다 갔다 하더군요. 도움이 되셨길~

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶