Game Dev – Octree for Voxel Object

Voxel Object각각 Octree를 빌드하도록 했다.

Voxel Object는 16x16x16짜리 1 bit table자료구졸르 사용한다. 그러니까 총 512바이트의 메모리가 필요하다.
이 자료구조를 그대로 Octree로 빌드한다.

picking과 충돌처리용 삼각형 탐색은 이 Octree를 사용할 것이다.

코드는 빨리 짰는데 사소한 실수를 해서 밤을 샜다.
메모리 아끼려고 sub node각각의 인덱스나 포인터를 가지고 있는 대신, sub node를 8개씩 인접한 메모리블럭으로 할당하도록 했다. 순서대로 0부터 7번째까지 sub node를 탐색할 수 있으니까.

그런데 할당은 8개씩에 하면서 첫번째 node에 대해서만 초기화를 해주고 있었다. 나머지 7개의 node는 처음 할당시 초기화되지 않고 있었던 것이다.

하여간 이제 잘 돌아간다. 귀퉁이의 voxel하나씩을 떼어내서 라운드처리된 박스 비슷한 복셀을 넣어봤다.

왼쪽이 복셀렌더링 샷, 오른쪽이 Octree의 leaf들을 렌더링한 샷이다.

겸사겸사 D3D12렌더러에 디버그용 와이어프레임, 간편하게 즉시 렌더링하는 삼각형, 박스, 구등을 렌더링하는 코드를 추가하고 있다. 원래 D3D11렌더러에서 다 지원하던 것들인데 D3D12에선 아직 완전히 구현을 다 못했다. 생각날때마다 추가중.

voxel_obj_octree_2016_0420

 


답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

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

Facebook 사진

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

%s에 연결하는 중