'깨짐현상'에 해당되는 글 1건
- 2010.07.16 모델이 깨지는경우
에러가 났었습니다... 여러가지 이유가 있었겠지만 그림자가 생긴걸 봐서는.. 렌더링이 잘못되었겠군요.
저런 경우 거의 대부분이 렌더링 문제입니다.. 그리고 실제 깨어진모델과 그의 그림자가 동시에 나온걸 봐서는.. 그림자를 그린 부분만 에러가 났다던지 하는 국소적인 문제는 아닌것 같았습니다.
생각해본 원인은 버텍스버퍼가 잘못되었다던지.. 인덱스 버퍼가 잘못되었다던지.. 버텍스 셰이더에서 버텍스를 잘못 건드려줬다던지.. 엉뚱한 곳에 픽셀셰이더로 칠했다던지...하지만 픽셀셰이더는 모델이 렌더링되는 부분에만 생기는 것이라.. 더욱이 그림자까지 생겼으므로 픽셀셰이더는 아니었습니다.
그럼 버텍스버퍼, 인덱스버퍼, 버텍스 셰이더로 좁혀지는데, 버텍스 셰이더의 경우 현재 스키닝처리가 확률이 컸었는데.. 만약 스키닝이 잘못되었다면 버텍스가 연결되어있어 결과적으로 깨진 모델의 일부분이 스키닝 모델과 계속 붙어다니는 현상을 보게 될텐데.. 저 위 모델은 스키닝 모델인데도 불구하고 전혀 깨지지 않았으니 버텍스 셰이더 문제도 아니었습니다.
그렇다면 버텍스 버퍼문제 또는 인덱스 버퍼의 문제였는데.. 아래를 보면 깨진 모델의 어떤 정점이 0,0,0으로 향하는 것을 볼 수 있습니다. 이것은 기본값 내지, 쓰레기값을 참조하고 있는 경우라고 생각되었습니다. 그리고 현재 뛰어다니는 모델들과는 전혀 상관없는, 지형쪽의 버텍스 버퍼나 인덱스 버퍼가 잘못된 걸로 추측되었습니다.
그러니까.. 지형의 버텍스 버퍼와 인덱스 버퍼의.. 버텍스 개수, 인덱스 삼각형 개수 등이 잘못되어 각 개수의 한계치를 넘게 가져온다던지 하는 것이겠죠.(메모리 침범이 되겠네요) 실제로 제가 설계한 인덱스 버퍼에서는 생성할 때, 삼각형의 개수를 저장시키고, Draw를 할 때 저장했던 삼각형 개수를 리턴해서 primitivecount를 세팅하곤 했었습니다.
먼저 버텍스버퍼.. 지형의 버텍스는 일반적인 높이맵을 사용한 것으로.. 상당히 심플합니다. 따라서 패쓰..
남은건 인덱스 버퍼인데, SLOD기법으로 해서 인덱스 버퍼가 좀 많았죠. 인덱스 버퍼를 살펴보다가 인덱스 버퍼를 세팅하는 부분에서 파라메터를 잘못 설정해주는 실수를 범했었습니다. 삼각형의 개수를 잘못 지정했고, 그걸 렌더링할때 파라메터로 넘겨줬던거죠. 근데.. 지형은 참 오래전에 완성했었는데.. 이제서야 이렇게 나오니까 솔직히 지형쪽에 문제가 있으리라곤 상상도 못했었습니다. 뭐죠? 오래하다보니 점점 심볼들이 늘어나서 평소에는 침범해도 별 해가 없다가(또는 0,0,0의 인덱스만 가져오다가) 프로그램 심볼들이 늘어나서 침범하고, 이상한 인덱스값으로 세팅하는 건가요? 흐음. 아무튼 인덱스 버퍼의 문제였었습니다.
그예로 지형의 버텍스만 참조하는 것을 볼 수 있습니다^ㅡ^ 참고로 뛰어다니는 모델들한텐 붙어있지 않았어요.
'작업일지' 카테고리의 다른 글
캐릭터 충돌처리 (1) | 2010.07.07 |
---|---|
오리엔테이션 생성중 실수. (0) | 2010.07.05 |
그림자 처리.. (0) | 2010.06.26 |
Perspective Shadow Map.. (0) | 2010.06.22 |