hlsl 셰이더 스키닝을 하고 있는데, 제가 알고 있는 개념이 잘못된것 같아서 질문드려봅니다.
이펙트객체->SetMatrixArray(핸들, 매트릭스팔래트, 사이즈);로 넘겨줄때,
팔래트 전체를 넘겨주고
(vPos * matPalette[In.index.n]) * weight.n 와 같이 매트릭스 전체에서 인덱스 값에 해당하는 행렬로 연산을 하고있습니다.
헌데 여기서 문제점이 하나 생긴게 매트릭스 팔래트의 크기가 65정도를 넘어버리면 버텍스 셰이더가 동작하지 않아버립니다.
그렇다고 매트릭스 팔래트를 실제 매트릭스 팔래트 크기보다 작게 잡아버리면 여기저기 매쉬들이 늘어져 버리더군요.
팔래트가 너무 큰경우 상수레지스터가 모자란것이 문제인것으로 예상은 하고 있습니다만, 여기서 이문제를 접하면서 든 생각이
매트릭스 팔래트를 사용하는 방식이 애시당초 잘못된것 같다는 생각이 들어서 질문드려 봅니다.
매트릭스 전체를 넘겨주는 방식이 잘못된 방식이라면, 매트릭스 팔래트를 어떤 형태로 넘겨줘야 하는건가요? 그리고
it expert 3d 게임프로그래밍(해골책)에 "많은 뼈대를 지원해야 하는경우에는 메시를 2개정도로 분할하는것이 일반적이다."
라고만 나오는데 메시를 2개정도로 분할한다 라는 말에 대해서도 잘이해가 되질 않아 질문올려봅니다.
"객체를 아예 2개로 나눠 2번 렌더링한다."라고 추측만 하고있긴한데 매시를 분할한다는 말은 어떤 방식으로 분할한다는것인가요?
맞습니다.
예를 들어 캐릭터가 있다면, 팔 따로, 몸 따로, 머리 따로 렌더링하는 방법을 사용하시면 됩니다.
어떻게 분리하나요?? 라고 하신다면 여기서 설명해 드리기 어렵지요-ㅅ-;;
팔레트 관련해서는 각각의 Vertex가 영향을 받는 Matrix를 알고 있는데, 이것에 대한 Offset 처리를 해 주면 됩니다.
위에처럼 분리만 된다면 쉽게 해결할 수 있습니다.
대충 같은 Material끼리 0~64번의 Bone의 영향을 받는 Vertex를 렌더링 하고 64~110(대충) 의 영향을 받는 Vertex를 그리는 방식이면 되지요.
Max에서 Exporter를 만들 때 나누어서 Export하게 되면 엔진에서 렌더링할 때 편하지 말입니다.
※ 2009-12-18 18:10:52 에 "랩하는좀비(hyurichel)" 에 의해 수정됨