GameDev – Creating Voxels from Triangle Mesh.

기본적으로 플레이어가 구조물을 만드는 게임(?)이지만 역시 맵상에 아무것도 없으면 막연하겠지. 그리고 개발중에 테스트하려면 대량의 복셀이 배치된 맵이 필요하다. 하지만 그래픽 디자이너가 없으므로 맵 데이터 제작은 불가능.
그래서 기존의 삼각형 데이터로 이루어진 맵데이터로부터 복셀데이터를 생성하기로 했다.

1. 일단 기존 삼각형 매쉬 맵데이터로부터 복셀 데이터 생성하는 코드는 금방 만들었다.

2. 월드 전체를 50cm x 50cm x 50cm짜리 복셀 단위로 샘플링하기 때문에 느림

3. 멀티스레드 적용 -> x N Cores만큼 빨라짐.

2017_0423_voxelizemt

4. 샘플링할 삼각형들을 몰아넣고 빠르게 검색할 수 있도록 간단한 그리드 자료구조를 도입 -> 10배쯤 빨라짐.

5. 샘플링해서 복셀 오브젝트당 Bit Table을 생성하는데까지의 성능은 이제 문제없음. 하지만 Bit Table로부터 각 복셀의 인접한 복셀들이 유효성 여부를 체크하며 삼각형 리스트를 만들고 Vertex Buffer를 생성해서 써넣기하는 시간이 제법 걸림. 오브젝트가 2만개 이상이라.

6. 코드를 살펴보니 VertexBuffer를 생성하는 코드와 해시테이블에만 Lock을 걸면 나머진 전부 thread-safe함. CreateVoxelObject()함수 자체를 멀티스레드 버전으로 하나 더 만들기로 결정.

7. 서버에 접속했을때 서버로부터 기존의 복셀 데이터들(bit 단위)을 받았을때 VB를 생성하고 삼각형 데이터를 만들어내는데 시간이 적지 않게 걸리는데, 이 부분도 멀티스레드적용으로 어느정도 함께 해결 가능.

아..이제 눈에 뭐가 보이니까 좀 할만하다.

2017_0421_voxelize02


2017_0421_voxelize01

2017_0421_voxelize00


답글 남기기

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

WordPress.com 로고

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

Google+ photo

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

Twitter 사진

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

Facebook 사진

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

w

%s에 연결하는 중