라이트필드

아래 윤정님의 질문에 대한 생각입니다...

MotoGP는 바닥(트랙) 텍스쳐에 정보를 저장합니다. 이렇게 해도 충분한 이유는 오토바이 레이싱이니까 2차원으로 충분하기 때문이겠지요. (오토바이가 하늘을 나는 일은 없을테니까요)

소닉은 본문을 읽어 보면 3차원 격자에 저장한다고 나와 있습니다. Sonic Unleashed가 어떤 게임인지는 유튜브 등에서 찾아 보면 게임 플레이 동영상을 볼 수 있습니다. 점프해서 천방지축 사방으로 튀고 있으니 MotoGP처럼 2차원으로는 힘들고 3차원으로 처리하는 것이 맞겠군요.

본문에 보면 다음과 같이 설명하고 있습니다.

이러한 표현을 위해 사용되는 '라이트 필드'의 3차원 격자가 스테이지 전체에 대해서 일정한 분포를 가지게 되면 메모리 용량을 낭비하기 때문에, 음영이 복잡한 곳은 많게, 거의 변화하지 않는 부분에서는 적게...라는 식으로 배치하여 실용성을 높이고 있다. 

공간 구조를 위한 자료형으로 옥트리를 사용하지는 않는다는 이야기군요. 음영이 복잡한 곳과 변화가 적은 곳으로 구분한다고 하니까 공간을 광원의 개수에 따라 가중치를 두고 k-d tree 등으로 분할하지 않을까 생각됩니다. 얼마나 세분화할지는...글쎄요 일본 친구들이니까 휴러스틱한 방법으로 해를 구하지 않았을까요? ㅡㅡ;


캐릭터의 음영 변화라면 MSG4(본문은 여기)에서 사용했다는 ambient cube를 이용한 방법도 있습니다.

개발시 이용한 반구 라이트 설정 툴의 화면

 

이미지를 클릭해서 보면 큰 이미지로도 볼 수 있는데,  본문에서 이야기나는 반구 조명이라는 Hemisphere Lighting 같은 것은 조명 때릴 때의 알고리즘에 대한 이야기이고, 방법의 핵심은 아티스트의 노가다에 의해서 충실하게 재현되고 있다...뭐 이런 이야기죠. ㅡㅡ;

또 같은 글의 바로 아래 본문에 보면 '분리 프리 라이팅'이라는 흥미로운 방법도 나옵니다.

이 방법은 정점 단위의 라이트맵이라고 하는군요.

구체적으로는 장면의 디자이너가 설정한 분리 프리 라이팅 전용의 광원으로부터 라이팅 결과를 사전에 배경 폴리곤 모델의 각 정점의 별도 속성에 굽는(저장해 두는) 테크닉이다.

개발시 이용한 분리 프리 라이팅 설정 툴의 화면

 
역시 광원의 배치는 아티스트의 몫. 하지만 이번에는 라이트맵에 비해서 다음과 같은 장점이 있습니다.

또, 빛의 분포 해상도 자체가 정점 단위인 관계로 라이트 맵보다 대략적인 측면은 있지만, 그만큼 텍스쳐 메모리 소비가 압도적으로 적어지는 것이 메리트다. 덧붙여 배경 폴리곤의 각 정점에 라이팅 결과를 굽는 공정은 개발 단계가 아니고, 게임 기동 후 PS3 실기상의 런타임으로 수행한다. 이러한 동작 덕분에 동적인 장면 변화에도 대응할 수 있는 메리트도 있다

이 방법도 쉽지는 않은 것으로 알고 있습니다. 기술보다는 레벨 디자이너의 역량에 영향을 받는다고...알고 있습니다. (아직 이런 방법을 실제로 게임에 사용해 보진 않아서 말이죠~) 그래도 이 방법은 우선 런타임때 수행한다는 점에서 호감이 갑니다.

이 외에도 유사한 방법으로 지금 생각나는 것은 ShaderX에 소개된 (몇권인지는 기억이 잘) ambient field가 생각이 납니다 이 방법은 벽 등에 가까이 가면 상호 음영이 발생하는 방법에 대한 내용입니다.

음...윤정님 게임의 캐릭터들은 바닥에 붙어 있을텐데 MotoGP와 유사한 방법으로 해결하면 되지 않을까요?

제가 고민하는 문제는 라이트맵을 사용하면서 낮밤의 변화를 주는 방법인데요...그러면서도 레벨 제작시 베이킹을 거의 리얼 타임!으로 할 수 있는 방법을 찾고 있습니다. ㅡㅡ;;

그러고 보니 ambient occlusion을 응용해서 ambient fracture 던가 이런 이름으로 terrain의 낮밤이 바뀌는 동영상을 어디서 본 것 같은데 기억이 좀 가물가물하군요...

by kimsama | 2009/05/05 18:47 | Development | 트랙백 | 덧글(5)

트랙백 주소 : http://kimsama.egloos.com/tb/1902234
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 사에바료 at 2009/05/05 21:04
트랙백이 걸려서 찾아와봤어요~
어제 오늘 좋은 글들 많이 올려주셨네요. ^^

저 역시도 라이트맵을 사용하면서 시간변화에 대해서 그냥 머리로만 고민한적이 있는데요.
단순하게는 시간에 따른 라이트맵을 미리 준비해두고 시간변화에 따라서 스리슬쩍 두 라이트맵에 대해 lerp 연산을 하면 되지 않을까 뭐 그런 생각을 해봤습니다. 자연스러울지 어떨지는 뭐 해봐야 알 것 같고...
각 시간대에 대한 라이트맵 스트리밍 이슈도 있고... 뭐 그렇네요.

시간대에 따라서 동적 오브젝트에 미치는 라이팅 역시 과제거리구요. (이것도 그냥 ambient에 대해서는 바닥에 레이를 쏴서 라이트맵 uv 좌표에 대한 텍셀 컬러를 가공하여 처리할 수도 있겠지만요.)

말씀하신 리얼 타임 베이킹이랄지, 좋은 솔루션을 찾게 되면 나중에 소개해주시면 감사하겠습니다~
Commented by kimsama at 2009/05/05 22:19
안녕하세요, 번역하신 글들은 잘 보고 있습니다. ^^

아웃도어 환경에서 (물론 에디팅 모드입니다) 거의 실시간에 가깝게 라이트맵을 생성하는 것은 이미 본 바가 있어서 해보면 가능도 하겠습니다만 시간에 따른 변화나 캐릭터와 같은 동적인 객체와의 상호 작용 등과 같은 이슈들은 좀 더 고민이 필요해 보입니다...

앞으로도 좋은 글들 많이 부탁드리겠습니다~
Commented by 김윤정 at 2009/05/05 22:27
좋은 글 감사합니다 ^^ 프로그래머도 아닌 주제에 개념만 잔뜩 얻어 들어서 배가 부르네요^^
일단 사에바료님께서 말씀하신 방법도 꽤나 자연스러울 것 같습니다.
몇몇 모양의 오브젝트에 한해서 이상한 모양이 나올 수 있지만, 그정도는 충분히 허용될 것 같구요.

뭐 근데 저는 일단 그림자는 변하지 않고 밤낮만 변하는 정도로 시도해 보려구요.

라이팅이 웬만큼 잘 되면 MGS4에 사용했던 엠비언트 큐브와 MotorGP에서 사용했던 방식을 동시에 사용하면 퀄리티가 좋을 것 같네요.

감사합니다. ^^
Commented by 최지호 at 2009/05/10 16:53
말씀하신 테레인에 실시간 밤낮 그림자를 드리우는 내용은 ATI 의 Chris Oat가 GDC 2006에 발표한 Ambient Aperture Lighting 이 아닌가 싶습니다. 링크는 아래에 있습니다.

http://ati.amd.com/developer/gdc/2006/GDC06-ATI_Session-Oat-ShaderTricks.pdf

실제로 대충 구현해 본 경험으로는 터레인 정도에만 쓸만했지 복잡한 건물 같은 곳에는 별로더라구요.
Commented by kimsama at 2009/05/11 11:28
안녕하세요, 한국에 들어오셨다는 이야기는 들었는데, 지면으로나마 아주 간만에 뵙습니다.

네, ambient aperture가 맞습니다. 머리속에서에 이미지만 왔다 갔다 했는데 정확하게 잘 알려 주세셔 감사합니다.

결혼하시고 한국 들어 오신 이야기만 태진님 통해서 간간히 전해 들었는데 차 같이 한잔 한지도 오래되었습니다. 언제 한번 같이 자리하길 고대하겠습니다. 그럼~ ^^

:         :

:

비공개 덧글

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