2009년 05월 05일
라이트필드
MotoGP는 바닥(트랙) 텍스쳐에 정보를 저장합니다. 이렇게 해도 충분한 이유는 오토바이 레이싱이니까 2차원으로 충분하기 때문이겠지요. (오토바이가 하늘을 나는 일은 없을테니까요)
소닉은 본문을 읽어 보면 3차원 격자에 저장한다고 나와 있습니다. Sonic Unleashed가 어떤 게임인지는 유튜브 등에서 찾아 보면 게임 플레이 동영상을 볼 수 있습니다. 점프해서 천방지축 사방으로 튀고 있으니 MotoGP처럼 2차원으로는 힘들고 3차원으로 처리하는 것이 맞겠군요.
본문에 보면 다음과 같이 설명하고 있습니다.
이러한 표현을 위해 사용되는 '라이트 필드'의 3차원 격자가 스테이지 전체에 대해서 일정한 분포를 가지게 되면 메모리 용량을 낭비하기 때문에, 음영이 복잡한 곳은 많게, 거의 변화하지 않는 부분에서는 적게...라는 식으로 배치하여 실용성을 높이고 있다.
공간 구조를 위한 자료형으로 옥트리를 사용하지는 않는다는 이야기군요. 음영이 복잡한 곳과 변화가 적은 곳으로 구분한다고 하니까 공간을 광원의 개수에 따라 가중치를 두고 k-d tree 등으로 분할하지 않을까 생각됩니다. 얼마나 세분화할지는...글쎄요 일본 친구들이니까 휴러스틱한 방법으로 해를 구하지 않았을까요? ㅡㅡ;
캐릭터의 음영 변화라면 MSG4(본문은 여기)에서 사용했다는 ambient cube를 이용한 방법도 있습니다.
![]() | ![]() |
개발시 이용한 반구 라이트 설정 툴의 화면 | |
이미지를 클릭해서 보면 큰 이미지로도 볼 수 있는데, 본문에서 이야기나는 반구 조명이라는 Hemisphere Lighting 같은 것은 조명 때릴 때의 알고리즘에 대한 이야기이고, 방법의 핵심은 아티스트의 노가다에 의해서 충실하게 재현되고 있다...뭐 이런 이야기죠. ㅡㅡ;
또 같은 글의 바로 아래 본문에 보면 '분리 프리 라이팅'이라는 흥미로운 방법도 나옵니다.
이 방법은 정점 단위의 라이트맵이라고 하는군요.
구체적으로는 장면의 디자이너가 설정한 분리 프리 라이팅 전용의 광원으로부터 라이팅 결과를 사전에 배경 폴리곤 모델의 각 정점의 별도 속성에 굽는(저장해 두는) 테크닉이다.
![]() |
개발시 이용한 분리 프리 라이팅 설정 툴의 화면 |
역시 광원의 배치는 아티스트의 몫. 하지만 이번에는 라이트맵에 비해서 다음과 같은 장점이 있습니다.
또, 빛의 분포 해상도 자체가 정점 단위인 관계로 라이트 맵보다 대략적인 측면은 있지만, 그만큼 텍스쳐 메모리 소비가 압도적으로 적어지는 것이 메리트다. 덧붙여 배경 폴리곤의 각 정점에 라이팅 결과를 굽는 공정은 개발 단계가 아니고, 게임 기동 후 PS3 실기상의 런타임으로 수행한다. 이러한 동작 덕분에 동적인 장면 변화에도 대응할 수 있는 메리트도 있다
이 방법도 쉽지는 않은 것으로 알고 있습니다. 기술보다는 레벨 디자이너의 역량에 영향을 받는다고...알고 있습니다. (아직 이런 방법을 실제로 게임에 사용해 보진 않아서 말이죠~) 그래도 이 방법은 우선 런타임때 수행한다는 점에서 호감이 갑니다.
이 외에도 유사한 방법으로 지금 생각나는 것은 ShaderX에 소개된 (몇권인지는 기억이 잘) ambient field가 생각이 납니다 이 방법은 벽 등에 가까이 가면 상호 음영이 발생하는 방법에 대한 내용입니다.
음...윤정님 게임의 캐릭터들은 바닥에 붙어 있을텐데 MotoGP와 유사한 방법으로 해결하면 되지 않을까요?
제가 고민하는 문제는 라이트맵을 사용하면서 낮밤의 변화를 주는 방법인데요...그러면서도 레벨 제작시 베이킹을 거의 리얼 타임!으로 할 수 있는 방법을 찾고 있습니다. ㅡㅡ;;
# by | 2009/05/05 18:47 | Development | 트랙백 | 덧글(5)





















