목록분류 전체보기 (156)
DOTY

1. Mixamo Mixamo Mixamo www.mixamo.com 2. CGTrader Character 3D Models | CGTrader https://www.cgtrader.com/3d-models/character?free=1&rigged=1 www.cgtrader.com 상업적 목적이라면 공짜인 것들은 확인한 후 적용을 한다. Rigged된 에셋을 구해야한다. 리깅된 에셋은 믹사모에서 애니메이션을 사용할 수 있다. 3. Sketchfab Sketchfab - The best 3D viewer on the web Sketchfab - The best 3D viewer on the web With a community of over one million creators, we are the w..

Root Bone 만드는 것은 그냥 삽질 포함해서 골머리를 썩었지만 개인적으로 리타겟팅이 더 어려웠던 것 같다. 루트 본은 사실 Blender에 fbx 파일들을 넣어서 바꿔주는 형태로 방법을 알아가는 과정이 어려웠지 방법을 알아낸 후에는 간단했다. 하지만 애니메이션 리타게팅은 방법을 알아냈지만 본을 타겟팅 시킬때 조금 엇나가면 동작들이 이상하게 변했기 때문이다. 그리고 추가로 리타겟팅 이후에 후처리도 해줘야하는 것을 몰랐을때 더더욱 그랬었다. 위의 스켈레톤은 내가 사용하고 싶은 애니메이션의 스켈레톤이고 아래는 내 캐릭터의 스켈레톤이다. 둘의 스켈레톤 구조는 정확히 일치하지 않았지만 전에 Root를 추가해서 리타겟팅 하는데 조금이나마 쉬웠던 것이 아닐까 싶다. 우선 각각의 "IK 릭"을 만들어줬다. 이것을..

요새 애니메이션이랑 스켈레톤 때문에 골머리를 썩고 있다... 그래서 최근에 알아본 Blender라는 프로그램을 이용해서 스켈레톤을 조금 변경하여 루트 모션을 사용해보려고 했다. Mixamo는 꽤 많은 애니메이션들과 캐릭터들이 있지만 이번에 사용하면서 느낀 것으로는 루트 본이 엉덩이로 가있기 때문에 제자리에서 애니메이션을 동작하는 것이 꽤나 까다로울 때가 있다. 그것중 하나가 구르는 모션이었다. 0프레임과 49프레임 이었을 때 위치가 다르다. 그냥 앞으로만 달려간다면 사실 크게 문제가 있어보이진 않았다. 하지만... 막힌곳에서는 뚫고 다시 제자리로 돌아오는 현상이 발생한다. 따라서 루트 모션을 사용한다면 이를 고칠 것으로 예상! 루트 모션 | 언리얼 엔진 5.1 문서 (unrealengine.com) 루트..
주변광과 반사광을 구현. 주변광의 경우 표면을 직접 쬐지 않지만 반사되는 빛으로 인해 밝아지므로 이를 표현. 반사광의 경우 더욱 3D효과를 내기 위해서 구현 (코드가 크게 추가되는 것은 없었지만 벡터의 계산을 이해하는데 어려웠다.) 1. LightShaderClass.h #pragma once #ifndef _LIGHTSHADERCLASS_H_ #define _LIGHTSHADERCLASS_H_ #include #include #include #include using namespace DirectX; using namespace std; class LightShaderClass { private: struct MatrixBufferType { XMMATRIX world; XMMATRIX view; XM..
이전의 코드에서는 3D 공간에서 평면인 모델만 렌더링 했지만 이번에는 입체를 렌더링 한다. 따라서 이전의 코드와 큰 차이가 없지만 3D 모델을 처리하기 위한 Vertex(x, y, z), Texture(tu, tv), Normal(nx, ny, nz)가 포함된 텍스쳐 파일을 읽어와 이를 처리하여 렌더링 하는 것을 익힐 수 있었다. 추가로 Rotate, Translate, Scale 관련 코드도 추가되었다. HTML 삽입 미리보기할 수 없는 소스 1. ModelClass.h #pragma once #ifndef _MODELCLASS_H_ #define _MODELCLASS_H_ #include "TextureClass.h" #include #include #include using namespace Dir..

공부 하다가 왜 회전하는 삼각형이 앞면에만 표시되고 뒷면은 보여지지 않는걸까 생각을 해봤다. vertices[0].position = XMFLOAT3(-1.0f, -1.0f, 0.0f); // Bottom left. vertices[0].texture = XMFLOAT2(0.0f, 1.0f); vertices[0].normal = XMFLOAT3(0.0f, 0.0f, -1.0f); vertices[1].position = XMFLOAT3(0.0f, 1.0f, 0.0f); // Top middle. vertices[1].texture = XMFLOAT2(0.5f, 0.0f); vertices[1].normal = XMFLOAT3(0.0f, 0.0f, -1.0f); vertices[2].position = ..

Light는 이전의 Texture에서 Light가 추가되었고 이번 코드에서는 오브젝트의 회전을 추가되었다. 1. LightShaderClass.h #pragma once #ifndef _LIGHTSHADERCLASS_H_ #define _LIGHTSHADERCLASS_H_ #include #include #include #include using namespace DirectX; using namespace std; class LightShaderClass { private: struct MatrixBufferType { XMMATRIX world; XMMATRIX view; XMMATRIX projection; }; struct LightBufferType { XMFLOAT4 diffuseColor; ..

이전의 Color Shader과 비슷한 Texture Shader로 코드가 거의 비슷하지만 Color관련 부분만 Texture로 바뀌었다. Texture은 RGBA의 정보가 담겨있는 .tga(TARGA)파일을 사용하고 픽셀의 위치는 0 ~ 1 사이의 float형식으로 표현된다. ※ Texture Class가 Framework에 추가된다. 1. TextureShaderClass.h #pragma once #ifndef _TEXTURESHADERCLASS_H_ #define _TEXTURESHADERCLASS_H_ #include #include #include #include using namespace DirectX; using namespace std; class TextureShaderClass { ..
1. ModelClass.h #pragma once #ifndef _MODELCLASS_H_ #define _MODELCLASS_H_ #include #include using namespace DirectX; class ModelClass { private: struct VertexType { XMFLOAT3 position; XMFLOAT4 color; }; public: ModelClass(); ModelClass(const ModelClass&); ~ModelClass(); bool Initialize(ID3D11Device*); void Shutdown(); void Render(ID3D11DeviceContext*); int GetIndexCount(); private: bool Initial..

0. Buffer / Shader Buffer : 데이터를 저장하는 메모리 영역 Shader : GPU에서 실행되는 경우가 많으며 그래픽스 파이프라인의 각 단계에서 실행된다. 0-1. Vertex Buffer 3D 모델은 여러 개의 삼각형으로 구성된다. 이 모델을 구성하는 삼각형 꼭짓점들에 대한 정보를 Vertex Buffer라고 하는 데이터 배열에 넣어야 한다. 이를 활용해서 렌더링을 한다. 0-2. Index Buffer Vertex Buffer와 비슷하지만 다른 버퍼로 모든 꼭짓점들을 저장하는 것이 아닌 꼭짓점들의 위치를 저장하는 것이다. Vertex Buffer보다 메모리를 절약할 수 있다는 장점이 있다. 0-3. Vertex Shader Vertex Buffer의 꼭짓점을 3D로 변환해주기 위해..