Graphics/DirectX 55

Direct X - 스키닝

스키닝 계층구조 + 뼈대 애니메이션을 한단계 진보시킨 기법이다. 메시를 뼈대와 결합시킬 때 생성하는 행렬을 어떻게 만드느냐 하는 것이 핵심 설계 그 아래 세개의 클래스는 ZSWSkinnedMesh, ZFFSkinnedMesh, ZVSSkinnedMesh는 스키닝을 지원하는 방식에 따라서 나눈 것. ZSWSkinnedMesh : 소프트웨어적으로 CPU연산을 통한 스키닝 방식 ZFFSkinnedMesh : Direct3D의 매트릭스 팔레트를 사용한 API 고정함수 방식 ZVSSkinnedMesh : 아직 안만들었는데, 정점셰이더를 사용해서 만들 예정 구현 - ZSkinnedMesh class ZSkinnedMesh : public ZMesh { protected: vector m_idxBones; /// 메..

Graphics/DirectX 2014.10.21

Direct X - 키 프레임 애니메이션

키 프레임 애니메이션 시스템 설계 앞서 개발한 프레임워크에 새로운 클래스를 추가했다. ZTrack : 키 프레임 애니메이션을 보관하고 있다가, 원하는 프레임에서의 애니메이션 행렬을 구해주는 것, ZNode에 추가되며 ZNode의 Animate()함수가 조금 변형될 것이다. 개발자에 따라서 ZTrack에 해당하는 클래스를 ZNode가 아니라 ZBone에 포함시키는 사람도 있다, 이럴 경우 철저하게 뼈대 애니메이션만 지원하는 구조가 된다. 이번에 구현할 애니메이션 엔진은 메시에 직접 키값도 넣는 방식을 지원할 예정이므로 ZNode에 ZTrack클래스를 삽입하였다. 실제 구현 - ZTrack #ifndef _ZTRACK_H_ #define _ZTRACK_H_ #include "define.h" #include..

Graphics/DirectX 2014.10.09

Direct X - 계층구조 2

실제구현 - ZNode ZNode 클래스 선언부를 보도록 하자 class ZNode { protected: enum NODETYPE { NODE_NODE, NODE_BONE, NODE_MESH }; // 현재 지원하는 노드의 종류 int m_nNodeType; /// 노드의 종류 int m_nObjectID; /// 오브젝트 ID int m_nParentID; /// 부모의ID int m_nMaterialID; /// 재질의 ID D3DXVECTOR3 m_bboxMax; /// 바운딩 박스의 최대값(max) D3DXVECTOR3 m_bboxMin; /// 바운딩 박스의 최소값(min) D3DXMATRIXA16 m_matLocal; /// local TM 행렬(불변) D3DXMATRIXA16 m_matAn..

Graphics/DirectX 2014.09.30

Direct X - 계층구조

계층 구조의 수학적 근거 먼저 계층 구조를 구현하는건 다음의 수식을 따른다고 했다, 여기에 들어갈 값을 구할 수 있어야 계층구조를 구현할 수 있다 차근차근 구해봅시다. Vworld = Vlocal * Mchild * Mparent : 식 1 맥스에서 데이터를 추출하면 가장 쉽게 뽑아낼 수 잇는게 바로 Mtransform이다. 요고는 다음과 같은 용도로 사용된다. Vworld = Vlocal * Mtransform : 식 2 위의 식과 아래의 식을 비교해보자, 일반적으로 맥스에서 추출해낼 수 있는 데이터는 Vworld와 Mtransform의 2가지 값이, 요고로부터 우리는 Vlocal의 값을 구할 수 있다, Vworld = Vlocal * Mtransform을 조금 변형해보자.. 양변에 M-1transfo..

Graphics/DirectX 2014.09.16

Direct X - 스크립트와 XML파서

앞으로 사용하게 될 맥스 데이터 추출기와 XML 파서에 대해 간략하게 살펴보자 스크립트 3D MAX에서 데이터를 추출하는데에는 스크립트 방식을 사용하는게 편리하다. 전체적으로 ZUtility라는 클래스와 ZExport라는 2개의 클래스로 만들어져 있다. ZUtility는 이름처럼 ZExport 클래스에서 사용할 유용한 함수들로 구성되어있다. XML 데이터 파서 XML을 사용하면 기본적인 파싱 작업을 파서가 대신 해주기 때문에 우리가 만들려는 데이터 파서같은 경우 비교적 쉽게 개발할 수 있다. XML데이터 파서 클래스 ZXML : XML 파일을 열고 값(element, attribute)을 읽어온다 ZCParser : XML 파일을 파싱한다(ZCParsedData 객체에 값을 채워 넣는다) ZCParsed..

Graphics/DirectX 2014.09.05

Direct X - 애니메이션 기법

애니메이션 기법 지금까지 3D 표현에 있어서 많은걸 공부했다. 이제는 캐릭터에 영혼을 불어넣는 캐릭터 표현을 다루어볼 차례다. 캐릭터 표현 기술은 모든 3D 기술중에서 가장 고난이도의 기술을 요구하며, 무엇보다도 3D 이론에 대한 정확한 이해가 필! 쑤! 적인 요소이다. 캐릭터 애니메이션 캐릭터를 표현하는 방법은 결국 애니메이션 기법과 밀접하게 연관되어 있다. 우리는 예술가가 아니기 때문에, 예술적, 미적 관점은 약간(쵸큼)줄이고.. 요런 메시들의 집합을 어떤 애니메이션 방식과 결합시킬것이냐에 따라서 캐릭터의 표현방식과 한계가 정해지게 된다. 캐릭터 애니메이션 방식 (대략적 다섯개만) 1. 정점 애니메이션 2. 계층적 애니메이션 3. 뼈대 애니메이션 4. 스키닝 5. 역기구학 이제, 이것들에 대해 알아보..

Graphics/DirectX 2014.09.03

Direct X - 균열 방지

구멍이 보이시죠??^^ 균열방지 LOD를 적용하면서 균열이 생긴걸 봤다. 한번 땜빵해보자 결국은 LOD 단계가 다른 메시들이 만나는 경계부분에 때우기용 분할 삼각형을 추가해주면 된다. 균열부위 땜질하기 균열된 부분을 해결하려면 경계부분에 추가로 삼각형을 몇개 끼워넣으면 되는데 다음과 같은 경우를 생각해보자 균열이 생길 수 있는 경계선 부분이 땜질 삼각형으로 덮이기 때문에 균열이 발생하지 않는다. 이런 땜질 삼각형을 LOD단계가 달라지는 모든 노드에 상하좌우 네방향으로 만들어주면 된다. 균열부위를 땜질하려면 현재 자신의 노드 이외의 이웃한 노드들의 정보도 있어야하는데, 그러기 위해서 4가지 함수가 추가되었다. /// 이웃노드를 만든다.(삼각형 찢어짐 방지용) void _BuildNeighborNode( Z..

Graphics/DirectX 2014.08.27

Direct X - LOD (Level Of Detail)

LOD 메시 모델링 데이터의 정밀도를 단계별로 조정하는 기술 LOD는 크게 정적 LOD와 동적 LOD로 나눌 수 있다. 지형 처리에서 사용되는 방법은 대부분 동적 LOD이다. LOD가 필요한 이유 LOD기술은 속도와 질 사이의 타협속에서 생겨난 기술이다. 질이 너무 좋은 화면은 속도가 느리게 되고, 반면 속도에만 너무 치중하게되면 화면의 질이 떨어지는게 당연한 것! 질을 적게 떨어뜨리면서 속도도 빠른 렌더링 기술을 개발하는 과정에서 태어난 기술이 LOD라는 기법이다. 메시 하나를 표현하는데도 메시를 몇개로 분할하느냐에 따라 성능이 달라지는데, 카메라와 물체간의 거리를 측정하여 카메라와 가까운 거리에 있는 물체는 정밀한 메시를 사용하고, 거리가 멀어질 수록 낮은 단계의 메시를 사용하는 기법이 정적 LOD이..

Graphics/DirectX 2014.08.21

Direct X - 쿼드트리 컬링

쿼드트리 컬링 쿼드트리는 절두체 컬링과 결합되었을 때 그 위력을 발휘한다. 우선, 고등학교 2차원 평면에서의 사분면 개념으로 설명이 되어있다. 오른쪽 위 1사분면으로 시작해서 시계반대방향으로 2,3,4분면 앞으로 다룰 모든 절두체 판정은 경계구 방식이다 위 그림은 네개의 자식노드에 대한 경계구의 예제인데, 각 사분면의 중앙으로부터 가장 끝점까지의 거리를 반지름으로 하는 경계구를 사용해서 절두체 판정을 하는 것이다 절두체 컬링 과정 먼저 절두체 컬링을 하기 직전 단계의 그림을 보자 컬링을 하기 전, 상자가 절두체구 지형을 1사분면부터 4사분면으로 나눈 것 1사분면에 절두체가 없으니까 2사분면을 검사한다 2사분면에도 절두체가 없으니까 제외시키고 3사분면을 검사한다 3사분면에 절두체가 없으니 제외시킨다. 4사..

Graphics/DirectX 2014.08.16

Direct X - 쿼드트리

쿼드트리의 정의 사분트리 자식노드가 4개인 트리 쿼드트리는 공간을 4개의 자식노드로 재귀적 분할하는 방법이다. 한 공간을 1/4로 계속 분할한다. 하나였던 지형이 1/4로 분할, 2단계에서 다시 또 1/4로 분할, 3단계에서 또 1/4로 분할.. 이러다가 일정 크기 이하로 줄어들면 분할을 멈추는 것. 쿼드트리의 효과 쿼드트리를 사용하는 가장 큰 이유는 거대한 지형을 빠르게 검색할 수 있기 때문이다. 따라서, 큰 덩어리 단위로 필요없는 데이터를 제거함으로써, 3D엔진이 처리해야할 데이터량을 빠르게 줄일 수 있다. 이를 위해서 반드시 쿼드트리가 절두체 컬링과 결합되어야만 제 성능을 발휘할 수 있으므로, 요고 다음예제에서는 절두체 컬링 + 쿼드트리를 해보자 이전 지형맵의 코드에 비해 지형관리 클래스도 추가되고..

Graphics/DirectX 2014.08.14