블로그 이미지
˙Jisoo

카테고리

분류 전체보기 (98)
Programming (35)
Game Project (23)
Almighty Engine (8)
Daily Life (19)
Photo Shots (11)
Total22,054
Today42
Yesterday77

LOD 적용

Programming/DirectX / 2009/07/31 18:52

게임 내에서 이용되는 오브젝트들에 LOD를 적용하는것은 지형 LOD와는 달리 매우 쉬웠습니다.
DirectX 에는 기본적으로 Progressive Mesh 라는것을 지원하여 실시간으로 Mesh의 Face , Vertex 를 조정할 수 있게 해줍니다.
거리에따라 Progressive Mesh 로 지정된 메쉬의 Face 값을 +,- 해주면 간단히 LOD 가 구현이 됩니다.
실제 테스트 결과 오브젝트의 수가 많아질수록 LOD의 적용유무에 따른 속도차이가 엄청났습니다.

LOD를 이용하기위해 Progressive Mesh를 생성하는 과정은 다음과 같습니다.

1. X파일을 일반 Mesh 로 불러옴
2. Mesh 최적화를 해줌
   - CleanMesh , WeldVertices
   (저는 이렇게 두개의 과정만 하였는데 이상이없네요. 상황에따라 다른방식의 최적화가 필요할수도 있습니다)
3. Valid Mesh 를 이용해 DX에서 사용적합한 Mesh 상태인지 확인
4. Progressive Mesh 생성

Progressive Mesh를 사용하려면 Valid Mesh를 반드시 통과하여야 됩니다.
처음 작업을 했을 때 책에 별다른 말이 없어서 1, 4 번 으로 바로 진행하였는데 몇몇 모델 파일들에서 오류가 발생하여 여기저기서 찾아보았더니
Valid Mesh로 부터 OK싸인을 받아야 Progressive Mesh 가 생성된다는 걸 알게되었습니다.
일반적인 게임회사에서는 이미 3D 모델러분들께서 게임에 적합하게 모델링을 해주실 것이라 생각되지만... (그래서 책에 저 작업이 없었던 것 같기도 하고...)
저같이 혼자 공부하는 입장에서는 게임용 모델파일이 아닌 여기저기서 빼오다 보니 Valid Mesh 작업이 꼭 필요한것 같습니다...;;

Posted by ˙Jisoo

댓글을 달아 주세요

  1. 2010/07/18 20:12 영현  댓글주소  수정/삭제  댓글쓰기

    Valid Mesh 에 대해서 인터넷을 마구 찾아봤지만 Valid Mesh이 무엇인지 모르겟습니다 ㅠ.

    죄송한데 Valid Mesh 관련 소스 좀 알려 주실수 있나요??

    제 메일은 rurwkddl@nate.com 입니다..

    • 2010/07/19 16:57 Jisoo  댓글주소  수정/삭제

      안녕하세요. 방문해주셔서 감사합니다 @_@!
      본문에서 쓰인 Valid Mesh는 DX9의 D3DXValidMesh 함수를 이용하시면 쉽게 통과여부와 값을 얻을 수 있습니다.

      MSDN DirectX9 SDK - D3DXValidMesh
      http://msdn.microsoft.com/en-us/library/bb205482(VS.85).aspx

      ValidMesh와 관련된 전처리과정들은 검색사이트에서 D3DXValidMesh로 검색해보시면 많이 나올 듯 합니다. 이 과정은 너무 다양하고 결정적으로 시간이 너무 지나 제가 테스트용으로 짰던 소스가 없네요...;;
      메일로도 같은내용 보내드리도록 하겠습니다.
      도움이 되셨길 바랍니다!

  2. 2010/07/22 06:45 영현  댓글주소  수정/삭제  댓글쓰기

    음 애니메이션 되어 있는 x파일은 pMesh 로 생성 못하구 있었는데.
    해결 되었어요 ㅎㅎ
    Valid Mesh 이거진짜 책에 쏙 빠져잇어서..
    이 블로그 아니였으면 영영 해결못하고 넘어갈뻔했어요 ㅎㅎ 다시한번 감사드려요 ^^

    아, 거리에 따른 폴리곤수 조정은 어떤 알고리즘을 사용하였는지요..?? 현재 특정거리값마다 /4 이런식으로 하니 너무 팍팍 줄어지는것 같아서 ...

    • 2010/07/22 09:00 Jisoo  댓글주소  수정/삭제

      보통 어떤방식으로 하는지는 잘 모르겠지만.. 그냥 상수값으로 나누어가면 단계마다 너무 티가 나니 상수값의 제곱만큼씩 나눠주는것도 좋을 것 같네요.
      처음엔 적게 줄어들다가 거리가 멀어질수록 줄어드는양이 많아지니 조금 더 자연스럽지 않을까요!?

최근에 달린 댓글

최근에 받은 트랙백

글 보관함