Game Dev – Voxel Horizon 개발 근황

이전에는 GPU에서 라이트 계산과 그림자처리를 했었는데 CPU에서 하는걸로 바꿨다.
복셀 오브젝트가 2만개가 넘어가니 컬링을 해도 복셀 데이터를 Shadow Map에 그리는 시간을 무시할 수 없다. 쉐도우맵 스타일의 그림자가 크게 어울리는것도 아니고 해서 CPU기반으로 바꿨다.
KD-Tree traversal로 복셀 최소단위 50x50cm 한 면씩 라이트/그림자 처리를 수행한다.
멀티스레드로 처리하고 한방에 맵 전체를 처리하거나 중간중간 복셀 데이터의 변동분에 대해서 최대 5초 텀을 두고 처리한다.

[문제점]

  1. 1. SW Occlusion culling은 훌륭하지만 여전히 원하는 속도에는 도달하지 못하고 있다. 가만히 있을땐 문제가 없지만 카메라 갱신할때가 문제다. 최저 120프레임을 보장해야하는데 SW Occlusion Culling을 수행하는 오브젝트가 많으면 50프레임대까지 떨어진다.
  2. 라이트/그림자 처리 단위 50cm x 50cm 단위는 너무 거친것 같다.
  3. 라이트/그림자 데이터만 복셀당 64비트 8x8x8 메모리에 저장해서 constnat buffer로 전달하는데 이것도 낭비인것 같다.

[생각중인 이슈]
라이트맵을 사용하면 어떨까? 복셀 50cm / 50cm 짜리 복셀을 2×2짜리 텍스쳐로 맵핑해서 라이트를 계산하면 어떨까. 일단 라이트 계산할때 속도가 4배 느려질것이다. 2×2짜리 텍스쳐를 수천만개 생성할 수는 없으므로 적어도 오브젝트단위로는 텍스쳐 팩킹을 해야한다. 복셀 구성 상태에 따라 필요한 텍스쳐 크기가 상당히 차이날텐데 낭비를 줄이면서 할당/해제 속도도 빠르게 하려면 어떻게 해야할까?
복셀 오브젝트 단위로 팩킹된 텍스쳐 1장씩만 갖고 있는다 해도 텍스쳐가 2만개가 넘어갈 수 있다.

라이팅에 한달도 투자하지 않았으므로 더 생각을 해봐야겠다.


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중