ndc2011 전역 조명의 기본 이론

이건 사진을 찍었어야 하는 자료인데… 사진을 찍어도 되는지 몰라 안찍었습니다.
덕분에 글만 보고는 알아보기 힘든 내용이 되었지요.

저만 아는 (용우나 박부장님도 아시겠지만) 내용이 되었어유 ㅋㅋ

PT내놓으세요…

* 사진은 오즈라엘님 블로그에서 보세요 캭캭
http://ozlael.egloos.com/3662138

==============================================

김혁 (넥슨)
넥슨 어니언팀

  • 내용은 주로 기본적인 이론들에 대한 내용입니다.
  • 대상은 글픽 프로그래머입니다.
  • 궁극적으로 말하고 싶은건 연구하자라는 내용이지요

전역 조명(글로벌 일루미네이션)이란?

  • 직접조명 + 간접조명을 의미함. = 글로벌 일루미네이션
  • 게임에서는 간접조명을 쓰기 매우 어렵지요
    -간접조명이란 주변 벽 등에 의해 영향받는 색상을 의미합니다. 현재 실시간으로 하기 힘들죠 . 보통은 그냥 엠비언트 칼라만 사용합니다.
  • 일단 PRT 라는 방법으로 구현을 한번 해봤습니다.. 게임에서는 사용하기 힘들지요

그럼 어떻게 그동안 해결했었는가?

-레이트레이싱 . 좋기는 하지만 근래에 사용하기는 힘들지 않을까.
-레이트레이싱 . 눈에서 광선이 나간다고 생각해 보는 겁니다. 일반적인 것과는 반대로.
이것만으로는 전반사 외에 간접조명 구현이 힘듭니다.

-그래서 좀 더 사실적으로…하려면
일단 물체에 빛이 닿으면
흡수, 반사, 투과가 됩니다.

-흡수는 열 에너지가 되어 사라지죠
여기서는 반사만 보죠

-빛이 들어가면 여러 방향으로 흩어지는게 기본이죠. 비율은 물체마다 다릅니다.
반대도 마찬가지죠. 여러 방향에서 온 빛들은 모아져서 한 방향으로 들어옵니다.

-물체의 특성 . : 거울은 전반사만 되지요
-글로시는 전반사 비스무리하게.
-렘버트 디퓨즈는 사방에 균일하게 반사를 뿌리는데, 사실은 글로시와 중간 정도로 나가게 됩니다. 약간 전반사 스타일로 말이죠

BRDF
물체의 반사 속성을 수학적으로 정의한 함수

게임에서 주로 사용하는 함수는 퐁 모델
Modified Blinn - Phong모델

렌더링 공식
-들어오는 빛을 다 적분하면 나가는 빛이 된다. 이것이 렌더링 공식을 이용한 광선추적법
-고전적 레이트래이싱에서는 하나만 전반사만 계산하는데
렌더링 공식을 이용하면 빛을적분해서 난반사를 계산할 수 있다
-글로시에 유리하고, 디퓨즈에는 불리한 단점이 있다. 노이즈가 좀 나오지요. 광선추적법만으로는 이런 단점이 있게 됩니다.

두번째로..  레디오시티

-모든 면은 렘버트 디퓨즈 이고 : 모든 방향으로 반사합니다.
폼 펙터로 , 다른 면에 몇 % 영향을 주는가를 먼저 계산하는것이지요.

-베틀필드에서 구현이 되었지요
(주: 맥스의 레디오 시티가 바로 이거죠)

세번째 포톤 메핑

포톤 = 빛 알갱이 
빛 알갱이 입자가 사방으로 쏘고, 레이트레이싱 처럼 확률에 의해 표면에 붙게 되는 방식입니다.

포톤 뿌리기- 광선 추적법 렌더링-포톤 모으기 :주변의 포톤들을 모아서 렌더링함.
(맥스에도 이런 렌더러가 있죠. 뭐였지? 맥스웰이던가?)
광선 추적법의 장점을 이용 가능합니다.

정리
고전 광선추적법 : 전반사만 가능
렌더링 공식 : 디퓨즈 는 오래 걸림, 글로시는 잘됨
레디오 시티 :  디퓨즈만 가능
포톤 매핑 : 디퓨즈와 글로시 둘다 잘됨

위에까지는 오프라인 렌더링 기법이었고.. 이제부턴
실시간 렌더링 기법
을 봅니다

 -라이트맵

레디오시티와 포톤맵핑 (일부) 를 라이트맵을 사용.
많은 게임에서 사용
정적인 물체. 정적인 라이트.
긴 전처리 시간
글로시 표현안됨. - 노말을 나오게 하려면 스페큘러와 글로시를 따로 가동시켜 사용해야만 함
즉 디퓨즈만 된다는 단점이.

라이트맵을 넘어서…
정적 조명 - 정적 물체 -정적 물체 –라이트맵 , sh 라이트

모든것이 동적이면 참 좋겠지만..
각 방식마다 장단점이 있습니다.

Spherical Harmonics Irradience and Ambient Cube

Irradience :
3차원 공간의 어떤 점이건, 주변에 환경맵이 있다고 가정할 수 있음
환경 맵을 반사 맵으로 쓸 경우
환경 맵을 디퓨즈로 쓸 경우 : 반구적분
간접조명만 계산한다면 좋음 

Irradience 볼륨 :
격자를 하나하나 만들고 미리 환경맵을 베이킹으로 다 만들어 놓고. 그걸 인터폴레이션으로 사용

Ambient Cube
이라디언스 맵 대신 큐브맵만 달랑 계산 . 6개의 색만 계산합니다. 하프라이프2에서 사용
가장 가까운것 하나 가져와서 주인공한테 박았음
공간 보간이 아닌 시간 보간. 엠비언트 부스트 적용
엠비언트 큐브는 이라디언스보다 매우 적은 메모리 사용. 퀄리티는 좀 차이.

구면조화함수(Spherical Harmonics):

내일 최지현님 발표를 들어보세요. (어헝헝 나 내일 못듣는 다고요. 알고싶어 어려워 알고싶어 어려워 못들어 )

(으아…. 상대적으로 매우 가볍고 좋은 결과라고..
수학 공식만 간단하게 소개… 좀더 자세히 알려줘요…ㅠㅠ 개념적으로 쉽게..) 

구면조화 함수를 이용한 이라디언스로 계산을 단순화
적분에 비하면 계산이 매우 적음
버텍스 쉐이더 안에서 계산해 버림
퀄리티는 이라디언스와 구별하기 힘들 정도.

(대충 이해가 갈듯 말듯. 그래픽 출신에게는 힘들어요. )

헤일로 3에서의 활용 사례

-포톤을 뿌려 SH( 구면조화함수) 라이트맵 생성
-렌더팜을 이용해 텍스쳐 생성

  • 이걸 이용하니 범프맵이 없어도 범프맵 디테일을 살림.

  • 라이트맵은 디퓨즈에만 영향을 준다. 스페쿨러와 범프를 같이 쓰지 않으면 효과가 없다. : 어떤 색으로 나가는지 저장 

  • SH 라이트맵은 전역 조명으로 모두 영향을 주기 때문에 스페큘러와 범프를같이 쓸 필요가 없다. : 어떤 색으로 들어오는지 저장
    (우왕 엄마 나 저거 사줘)

그래서? 우리도 연구를 하자. 양인들이 하는거만 바라보고 있지 말고.

  • 우리도 겜브리오에 이걸 붙여서 개발중입니다.
    -레이트레이서와 GI 엔진 코어, SH 엔진을 테스트 완료만 했습니다. 쓸지는 모르겠습니다. 아직 공개할 레벨이 아니예요
  • 물론, 쉽게 사용할 수 있는 기능은 없습니다. 모두 장점이 있는가 하면, 그만큼의 단점이 있는 법이지요. 공짜 점심은 없는 법입니다
Hugo로 만듦
JimmyStack 테마 사용 중