블로그 이미지
˙Jisoo

카테고리

분류 전체보기 (72)
Programming (33)
Game Project (14)
Daily Life (12)
Photo Shots (11)
Total11,466
Today26
Yesterday77

'Programming/DirectX'에 해당되는 글 29건

  1. 2010/01/28 Shadow Map Test
  2. 2010/01/26 충돌처리 과부하 테스트
  3. 2010/01/21 기본적인 충돌처리 구현
  4. 2010/01/16 Shadow Map
  5. 2010/01/14 애니메이션 블렌딩
  6. 2010/01/12 Lightmap 돌아오다 !
  7. 2010/01/11 Skinning Animation Using VertexShader
  8. 2010/01/09 스키닝 구현중 2
  9. 2010/01/08 스키닝 메쉬 재구현중.. (2)
  10. 2010/01/05 Terrain LOD 수정


이제 귀찮게 매 오브젝트마다 수정 할 필요 없이 오브젝트매니저에서 오브젝트를 추가하는 것 만으로 모두에게 쉐도우맵이 적용되도록 하였습니다.
셀프쉐도우도 잘 들어가고 있네요~
만들어놓은지는 좀 되었는데.. 애플 발표회 보면서 심심해서 영상 캡쳐하였습니다;;
발표한게 겨우 iPad 라니.. 좀 실망이네요 ㅋ
잠시후에는 축구를 봐야하고.. 점심때는 스키장으로 출발하여야 하는데 밤을 꼴딱새서 난감하군요.. 보드는 안타고 잠만 자게되는건 아닐런지..
저작자 표시 비영리 동일 조건 변경 허락

'Programming > DirectX' 카테고리의 다른 글

Shadow Map Test  (0) 2010/01/28
충돌처리 과부하 테스트  (0) 2010/01/26
기본적인 충돌처리 구현  (0) 2010/01/21
Shadow Map  (0) 2010/01/16
애니메이션 블렌딩  (0) 2010/01/14
Lightmap 돌아오다 !  (0) 2010/01/12
Posted by ˙Jisoo

댓글을 달아 주세요



게임에 등장할 오브젝트 관리 클래스가 어느정도 완성된 기념으로 충돌처리 과부하 테스트를 해 보았습니다.
그냥 간단히 슬롯머신의 충돌경계면을 박스로 하지 않고 슬롯머신에 있는 Face단위로 경계를 생성하고 슬롯머신 갯수를 늘려가며 테스트를 진행했습니다.
슬롯머신 110~115개 정도 까지는 cpu점유율 2~5% 정도를 유지하며 60프레임을 유지해주네요.
그리고 120개가 넘어서면서 부터 점유율이 조금씩 올라가기 시작하며 50프레임대로 떨어집니다.
200개 정도가 되니 40프레임대로 떨어지기 시작했습니다.

게임 플레이상 사용할 수 있는 허용갯수는 110~115개 라는 것 인데 슬롯머신 한개에 782개의 Face가 있으니 충돌처리 패스를 한번 거칠때마다 86020 ~ 89930 번의 연산을 진행합니다.
60프레임이 유지된다는 것은 초당 60번의 패스가 진행된다는 것이니 1초동안의 연산량은 5161200 ~ 5395800 회 인 셈이지요.
수치로 보니 대단하네요 CPU의 처리 능력을 간과했나봅니다..
아직 충돌처리 부분을 최적화하기 전인데 최적화가 되고나서의 성능이 기대되네요...
간단히 경계면보다 큰 경계구를 만들어줘서 경계구 안에 있을때만 충돌처리를 진행해도 엄청난 최적화가 이루어질 것 같습니다.
저작자 표시 비영리 동일 조건 변경 허락

'Programming > DirectX' 카테고리의 다른 글

Shadow Map Test  (0) 2010/01/28
충돌처리 과부하 테스트  (0) 2010/01/26
기본적인 충돌처리 구현  (0) 2010/01/21
Shadow Map  (0) 2010/01/16
애니메이션 블렌딩  (0) 2010/01/14
Lightmap 돌아오다 !  (0) 2010/01/12
Posted by ˙Jisoo

댓글을 달아 주세요



게임개발에서 반드시 필요한 기술 중 하나인 충돌처리입니다.
단순히 두 물체간의 충돌여부를 판정하는 것은 수식만 잘 세워놓으면 되기에 그리 어렵지 않다고 생각합니다. (AABB이던 OBB이던)
개인적으로는 벽면이나 오브젝트에 다가갔을때 자연스럽게 뒷처리를 하는것이 더 까다롭다고 생각되네요.. 캐릭터와 맵,오브젝트 등 서로 상호작용해야하는 변수들이 필요하니까요.
기본적으로는 속도와 방향벡터를 서로 공유해야합니다.
3D 게임에서 캐릭터가 벽에 닿았을때 캐릭터를 멈추게 할 것이 아니라 캐릭터에 작용하고있던 벡터값과 벽면의 노멀벡터값을 이용하여 미끄러짐벡터(Sliding Vector)를 되돌려줘서 진행시켜줘야 합니다.

충돌여부를 판단하고 노멀값을 얻기위해서는 여러가지 방법이 있겠지만 저는 삼각형폴리곤 기반으로 제작중입니다.
현재 CollisionMap 생성은 다음과 같이 진행됩니다.

1. 메쉬파일을 불러와 그대로 충돌맵으로 생성
   - 레벨디자인 시에 충돌처리를 위한 면들을 직접 추가해 주었을 경우나 실내같은 간단한 레벨에서 편리합니다.
2. 메쉬파일을 불러와 최적화를 시킨뒤 충돌맵으로 생성
   - 복잡한 지형을 가진 레벨에서 연산을 줄여주기 위해 폴리곤값들을 최소화 해 준 뒤에 충돌맵을 생성합니다.
      동굴같이 울퉁불퉁한 곳은 폴리곤 갯수를 줄여주어도 캐릭터가 움직일때는 어색해보이지 않습니다.
3. 메쉬파일에서 BoundingBox를 생성하여 충돌맵으로 생성
   - 캐릭터간의 충돌, 오브젝트와의 충돌 등에서 해당 메쉬의 모든 삼각형과 충돌연산을 하는것은 말그대로 낭비입니다.
      메쉬의 복잡도도 높고 삼각형의 크기도 작은편이기에 2번의 방법을 쓴다면 오히려 어색한 연산을 보입니다. 버그도 많이 발생할테구요.
      그래서 BoundingBox를 생성하여 충돌맵으로 생성해줍니다. 이럴경우 12개의 삼각형만 가지게 되므로 연산 수가 많이 줄어듭니다.

동영상에서 실내형태의 맵파일은 1번 방법을 이용하였고, 슬롯머신 오브젝트는 3번을 이용한 예 입니다.
모서리 부분마다 점이 찍혀있는데 디버깅모드에서 보이는 충돌맵의 모서리확인용입니다.
일단 이렇게 세가지 방법을 사용중이고 부족하다 싶으면 바운딩박스를 세분화시켜서 2번과 3번의 중간쯤 되는 기능을 추가해줘야겠지요.
그리고 가끔 맵에 낑기는 버그가 있는데 이것부터 수정해줘야겠네요..
저작자 표시 비영리 동일 조건 변경 허락

'Programming > DirectX' 카테고리의 다른 글

Shadow Map Test  (0) 2010/01/28
충돌처리 과부하 테스트  (0) 2010/01/26
기본적인 충돌처리 구현  (0) 2010/01/21
Shadow Map  (0) 2010/01/16
애니메이션 블렌딩  (0) 2010/01/14
Lightmap 돌아오다 !  (0) 2010/01/12
Posted by ˙Jisoo

댓글을 달아 주세요

Shadow Map

Programming/DirectX / 2010/01/16 16:50



캐릭터 관리 클래스를 만들다가 잠깐 그림자 쪽을 건드려 봤습니다.
이것저것 보다가 Depth Buffer를 이용한 쉐도우맵을 적용했습니다.
직접 구현해보고 오픈월드형식 게임에서는 퀄리티가 너무 떨어지는걸 뼈저리게 느꼈습니다 ㅠ.ㅠ
Shadow Map의 해상도를 8192 * 8912 로 엄청 키웠음에도 적용하기에 부족해보입니다..
캐릭터가 약 1.5m 라고 설정해놓으면 영상에서 보이는 한 맵의 전체는 600~700m 정도 됩니다.
그나마 동영상이라 뭉개져서 괜찮아보이지만 깍두기가 장난이 아니네요..

Depth Buffer를 이용한 기본적인 쉐도우맵은 오픈월드형식에서 그냥 갖다 쓰기엔 무리가 있어보이고
축구경기장? 정도의 크기까지는 커버 가능해보입니다.
이런 단점을 보완하기위해 PSM 이니 뭐니 여러가지 기법이 있던데 더 연구를 해봐야죠..
우선 구현방식은 어느정도 깨닫게 되었으니 만들던거 마저 만들고 또 건드려봐야겠네요 +_+

'Programming > DirectX' 카테고리의 다른 글

충돌처리 과부하 테스트  (0) 2010/01/26
기본적인 충돌처리 구현  (0) 2010/01/21
Shadow Map  (0) 2010/01/16
애니메이션 블렌딩  (0) 2010/01/14
Lightmap 돌아오다 !  (0) 2010/01/12
Skinning Animation Using VertexShader  (0) 2010/01/11
Posted by ˙Jisoo

댓글을 달아 주세요





첫번째 동영상은 그냥 애니메이션을 바로 전환 한 것이고, 두번째 동영상은 애니메이션의 트랙이 변경될때 선형보간법을 이용해서 두개의 트랙 (바뀌기전의 트랙과 바뀌어야할 트랙) 을 블렌딩 해 주어서 두 트랙 사이가 부드럽게 연결되도록 한 것 입니다.
기본적으로 DX의 애니메이션 컨트롤러에서 선형보간 ( Linear Interpolation )과 더욱 부드럽게 속도를 증/감 시켜주는 Ease In Ease Out Interpolation 이 제공됩니다.
동영상에서는 블렌딩여부를 자세히 확인하기 위해 0.5초 정도의 긴 시간으로 지정하였습니다. Transition Time 은 눈으로 직접 확인해보며 애니메이션 트랙에 가장 자연스럽도록 지정하는것이 좋겠지요..

'Programming > DirectX' 카테고리의 다른 글

기본적인 충돌처리 구현  (0) 2010/01/21
Shadow Map  (0) 2010/01/16
애니메이션 블렌딩  (0) 2010/01/14
Lightmap 돌아오다 !  (0) 2010/01/12
Skinning Animation Using VertexShader  (0) 2010/01/11
스키닝 구현중 2  (0) 2010/01/09
Posted by ˙Jisoo

댓글을 달아 주세요



먼저 현재 적용되어있던 쉐이더 기반의 라이팅입니다.
스카이돔을 만들면서 생긴 태양의 위치를 기반으로 빛의 방향을 실시간으로 받아옵니다.
부하가 적어 완전실시간으로 음영을 만들어 낼 수 있다는 장점이 있지만 단점은 영상에서 보이듯이 LOD가 적용되었을 때 음영을 처리해주는 버텍스 수가 줄어들어서 보기가 영 좋지 않지요..
특히나 멀리서 볼 때는 더욱 더 심해집니다.

 

그래서 예전에 사용하던 라이트맵을 조금 손봐서 다시 적용하였습니다.
기존에는 라이트맵 계산 후 텍스쳐로 저장하였는데, 이번에는 저장하지 않고 바로 메모리상에서 관리를 하도록 되어있습니다.
연산량도 조금 더 많고 ( 기본적인 라이트 계산 후 2~3번의 블러 과정을 거칩니다 ) 쉐이더처럼 빠른 연산이 불가능하기 때문에 완전 실시간으로 적용하기엔 부하가 커서 일정시간마다 라이트맵을 태양위치에따라 갱신하도록 하였습니다. 
지금은 테스트 목적으로 1초에 한번씩 갱신해주도록 설정되어있습니다.
나중에 적용할 때는 게임의 시간과 실제 시간의 흐름이 같게 설계해놨기에 5분정도에 한번씩 갱신해주면 되겠지요.
라이트맵 계산 과정은 1초에 30~40번 정도 수행 할 수준이라 다행히도 라이트맵 생성시에 끊김현상등은 없습니다.

확실히 라이트맵을 따로 생성해놓으니 멀리서봐도 산처럼 보이네요 ㅎㅎ

'Programming > DirectX' 카테고리의 다른 글

Shadow Map  (0) 2010/01/16
애니메이션 블렌딩  (0) 2010/01/14
Lightmap 돌아오다 !  (0) 2010/01/12
Skinning Animation Using VertexShader  (0) 2010/01/11
스키닝 구현중 2  (0) 2010/01/09
스키닝 메쉬 재구현중..  (2) 2010/01/08
Posted by ˙Jisoo

댓글을 달아 주세요


메쉬 중간중간에 나오는 Sphere들은 각각 뼈대 Joint 부분입니다.

드디어 버텍스쉐이더를 이용한 스키닝에 성공했습니다.
오랜 삽질 끝에 해결하게 되었네요..
소프트웨어가속 SkinnedMesh를 할때는 전혀 나오지 않던 문제였다가 버텍스쉐이더로 변경하니 문제가 생겨서 참 난감했었습니다.
소프트웨어가속을 사용할 때와 쉐이더를 사용할 때, 메쉬를 불러와서 복제하는 과정이 약간 달라지는데 이때 마지막 부분에 쉐이더연산때 사용될 정점 Declaration 정보가 빠져서 이상하게 연산이 된것이었습니다.
이제 DX SDK에서도 제대로 불러와지지 않던 파일들 까지 불러와서 스키닝 적용에 성공했으니 조금만 더 다듬어보고 애니메이션 컨트롤러를 좀 더 깊게 봐야겠네요.
여튼 오래전부터 속썩이던 문제가 해결되어 속이 후련합니다... @_@

'Programming > DirectX' 카테고리의 다른 글

애니메이션 블렌딩  (0) 2010/01/14
Lightmap 돌아오다 !  (0) 2010/01/12
Skinning Animation Using VertexShader  (0) 2010/01/11
스키닝 구현중 2  (0) 2010/01/09
스키닝 메쉬 재구현중..  (2) 2010/01/08
Terrain LOD 수정  (0) 2010/01/05
Posted by ˙Jisoo

댓글을 달아 주세요


지금 만들어 놓은 소프트웨어 스키닝입니다.
제대로 애니메이션이 적용되는 것 까진 확인을 했는데 하드웨어 스키닝으로 바꾸다보니 또 말썽이네요
DX SDK에 있는거랑 구조가 비슷하게 구현되어 있어서 이펙트 파일을 갖다 썼는데 영 이상하게 되네요.
그래서 다시 처음으로 돌아가 기본부터 파고들 예정입니다... ㅡ,.ㅡ;; 한참동안 삽질한게 아깝긴 하지만 그래도 무엇을 인스턴스화 시켜놔야 할지 깨닫게 되었으니 다행이네요.
지금까지 진행된걸로 보아 스키닝을 제대로 구현하려면 아직 좀 걸리겠습니다 ㅠ.ㅠ;;

'Programming > DirectX' 카테고리의 다른 글

Lightmap 돌아오다 !  (0) 2010/01/12
Skinning Animation Using VertexShader  (0) 2010/01/11
스키닝 구현중 2  (0) 2010/01/09
스키닝 메쉬 재구현중..  (2) 2010/01/08
Terrain LOD 수정  (0) 2010/01/05
Terrain System LOD 추가  (0) 2010/01/03
Posted by ˙Jisoo

댓글을 달아 주세요



구현해놨던 스키닝메쉬 부분을 토대로 새로 구현하고 있습니다.
예전대로 한 클래스 내에서 프레임,컨테이너,애니메이션컨트롤러 따위를 모두 가지고 있기 때문에 같은 메쉬/애니메이션 을 갖는 대량의 몬스터가 나오면 엄청나게 메모리를 잡아먹겠죠?
그 문제점을 알고도 따로 인스턴스화 시키지 못한게 구조가 너무 복잡해서 였는데 DX SDK 의 멀티에니메이션 튜토리얼을 보면서 인스턴스클래스를 만들고있습니다.
예전에 도전해 봤을때에는 그냥 계층구조 메쉬조차 제대로 그려지지 않았는데 이번엔 계층구조 메쉬는 잘 나온다는 것이 발전사항(?) 이군요..


하지만 애니메이션 컨트롤러를 이용해 진행 시키면..




메쉬가 찌그러집니다 .............
음...... 디버깅을 해봐도 값들은 잘 살아있는데 온통 행렬값들이라 정상적으로 연산이 되고있는지 모르겠네요;;
소프트웨어 스키닝이 잘 되야 하드웨어 스키닝으로 넘어가던 말던 할텐데 말이지요...
정상적으로 되던 것과 동시에 돌려가면서 디버깅을 해봐야겠습니다. 디버깅 해서 못 고칠것 없겠죠. 디버깅 만세

'Programming > DirectX' 카테고리의 다른 글

Skinning Animation Using VertexShader  (0) 2010/01/11
스키닝 구현중 2  (0) 2010/01/09
스키닝 메쉬 재구현중..  (2) 2010/01/08
Terrain LOD 수정  (0) 2010/01/05
Terrain System LOD 추가  (0) 2010/01/03
Terrain System 에 Frustum Culling 적용!  (0) 2010/01/01
Posted by ˙Jisoo

댓글을 달아 주세요

  1. 2010/01/08 10:10 온새미  댓글주소  수정/삭제  댓글쓰기

    으...으잌ㅋㅋ 3D요 ㅠㅠ...


Terrain LOD 를 적용하면서 모서리에 크랙이 발생하는 것을 잡아주었습니다.
역시 해골책이 많은 도움이 되었지요..
모서리에 깨짐현상을 해결하느라 그려지는 삼각형 수가 더 늘었지만 크게 걱정할 정도는 아닌 것 같습니다.
지형 LOD 문제는 어느정도 해결되었고 이제부터 본격적인 시작이 되겠지요. 구현해야 할 것이 태산이라.....

아, 영상에서도 보이듯이 스카이돔을 만들고있습니다.
기본적으로는 현재 시간을 기준으로 동작을 하구요..
인터넷에서 이것저것 짜집기하며 만든거라 이상한 현상도 많이 일어나기도 하고 아직 많이 어색합니다 ㅋㅋ
그래도 하늘이 있으니 뭔가 알찬 느낌이 들어서 뿌듯하기도 하고요~~

'Programming > DirectX' 카테고리의 다른 글

스키닝 구현중 2  (0) 2010/01/09
스키닝 메쉬 재구현중..  (2) 2010/01/08
Terrain LOD 수정  (0) 2010/01/05
Terrain System LOD 추가  (0) 2010/01/03
Terrain System 에 Frustum Culling 적용!  (0) 2010/01/01
Terrain LOD 작업중..  (0) 2009/12/31
Posted by ˙Jisoo

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함