기존에 제작한 은면제거 방식은 벡터의 내적이라는 수학 공식을 활용하여 카메라와 대치되는 각을 계산하여 면을 제거하는 방식이었습니다.
하지만 이 방식은 몇가지 단점이 존재합니다.
1. 각도를 계산해서 하다보니 카메라에 안잡히는 면도 각도조건만 맞으면 남아있게 된다.
2. 면이 깔끔하게 지워지지 않는다. 가령 면은 지워졌는데, 버텍스가 남는다던지..
등등.. 여러번 시뮬레이션을 돌려보면 금방 알 수 있는 단점들이 존재합니다.
하지만, 이번에 제작한 Hidden Surface 방식은 렌더링 된 G-Buffer의 값을 얻어와 지오메트리의 렌더링된 면을 메모리에 기억하여 삭제하는 방식이라 더 깔끔하게 면들을 정리해줍니다.
단, 계산시간이 오래 걸릴수 있다는 단점이 있습니다. 이 부분도 차후에 개선할수있도록 해보겠습니다.
이 스크립트의 구동방식을 간단히 살펴보면
1. 먼저 대상이 될 오브젝트의 면들을 전부 디테치 한 후 메모리에 저장한후 각 면마다 오브젝트를 생성해 줍니다.
-여기서 먼저 대상이 될 원본 오브젝트를 하이드 시켜 줍니다.(G-Buffer값 구할때 방해되는 요소)
2. 디테치된 면들의 렌더링 된 채널값에서 G-Buffer(지오메트리버퍼) 값을 구해온다.
G-Buffer의 개념 - http://en.wikipedia.org/wiki/Deferred_shading
3. 렌더링 버퍼의 값을 구해서 원본 모델링에 저장이 됐으면 이제 각 면들은 필요없어 졌으니 전부 지워버린다.
4. 원본 면의 페이스 정보들을 비트어레이에 담고 G-Buffer에 담긴 값들만 False로 선언해준다.
5. 이제 원본 오브젝트의 비트어레이에 담긴 면들을 삭제하라는 명령을 실행하면 false로 제외된 값들을 빼고 삭제를 하게 된다.
벡터의 내적 방식과 Hidden Surface 방식의 비교 샷
백페이스 방식- 면이 지저분하게 정리된다.
히든 서페이스 방식 - 면이 깔끔하게 정리된다.
이번 과제를 통해 알게 된 내용
1. G-Buffer의 개념과 렌더링에 대한 기초
2. 원본에 있는 면을 뜯어내서 메모리에 저장시킬 수 있는 기능
3. finditem을 이용하여 비트어레이의 값을 조절할수 있는 기능
'3DMAX > Script' 카테고리의 다른 글
캐릭터 셋업 서포트툴(Setup Support Tool)) 제작 (0) | 2015.12.17 |
---|---|
FBX임포트 데이터를 맥스 파일로 자동 저장해주는 스크립트 (0) | 2015.12.17 |
은면 제거 스크립트 (0) | 2015.12.17 |
SpaceWarpToMorph(스페이스워프 투 모프) (0) | 2015.12.14 |
바이패드 박스모드 변환 툴(Biped to BoxMode) (0) | 2015.12.14 |