최근까진 자잘한 UI기능을 추가하느라 시간을 보냈다.서버 연결을 위한 UI가 필요했는데 콘솔만으로는 내가 너무 불편해서 버틸수가 없었다. 그래서 그쪽 작업을 하느라 편집기능 추가가 계속 늦어졌다.
이 프로젝트에선 개별 복셀들을 바로 트리구조에 넣는 대신, 최대 16x16x16개의 복셀을 가지는 오브젝트들로 구성한다. 오브젝트 안에서는 복셀들을 Octree구조로 가지고 있다.그리고 이 오브젝트들은 월드상에서 KD-Tree로 관리된다.
이렇게 한 이유는…마인크래프트 같은걸 만들려던게 아니고 파괴 가능한 구조물이 있는 온라인 슈팅 게임을 만들고 싶었기 때문이다. 그러니까 복셀이 메인 컨텐츠가 아니고 로켓런처나 머신건으로 정밀하게 파괴할 수 있는 구조물을 만들기 위해 복셀을 사용할 생각이었다. (다만 지금은 그래도 마인크래프트처럼 만드는게 주가 되어야 하지 않을까..하고 고민이…)
하여간 그래서 다양한 복셀 사이즈를 구성하려고 하니 사이즈별로 다르게 관리할 오브젝트가 필요해했고 1x1x1(복셀 변 길이 1.8m)부터 16x16x16(복셀 변 길이 10cm)까지의 복셀 오브젝트를 만들게 된 것이다.
현재 편집 기능은
- 복셀 오브젝트의 생성
- 선택된 복셀 오브젝트 안에서
- 복셀 추가
- 복셀 삭제
- 복셀 색상 변경
이 정도이다.
내부적으론 복셀 오브젝트 단위로 처리해도 편집할땐 새로운 복셀이 선택된 오브젝트 영역 바깥에 생성되려고 하면 새로운 오브젝트를 만들어주는 식으로 자동화시키는게 좋을것 같다.
그리고 10cm짜리 16x16x16 복셀 오브젝트는 너무 조밀한것 같다. 메모리도 많이 먹는다. 20cm짜리 8x8x8 오브젝트를 가장 조밀한 단계로 설정하는걸 고민중이다.
다음 작업은 복셀 오브젝트간 Occlusion Culling과 복셀 데이터 분할 저장이다.