UKismetProceduralMeshLibrary의 SliceProceduralMesh 함수 분석 – 1

UProceduralMeshComponent의 메쉬를 평면 기준으로 자르는 함수이다. 프로젝트에 사용할 일도 있고 커스텀도 해야할 것 같아서 엔진 코드의 분석을 해보았다. Plane 준비 우선 컴포넌트 로컬 공간 기준으로 평면을 준비한다. 평면을 정의하기 위한 평면상의 한 점과 평면의 노말벡터를 인자로 받는다. 그리고 이 점의 위치와 노말을 로컬 공간으로 변환 후, 평면을 생성한다. 임시 데이터 컨테이너들 선언 메쉬를 자르면서 발생하는 … Read more

[DirectX11] 17. Depth-Stencil Buffer 사용하기.

[DirectX11] 16. FBX File로부터 모델 데이터 Import하기.에서 아래와 같이 렌더링 결과물을 얻을 수 있었다. 이는 앞면에 가려져 보이지 않아야할 그러니까, 렌더링되지 않아야할 부분들까지 모두 렌더링되어서 그런것이다. Depth Buffer를 이용한 Depth Test를 하면 이 이슈를 해소할 수 있다. Depth Buffer는 렌더링되는 픽셀의 깊이값을 저장한다. 그리고 같은 위치에 새로운 픽셀이 그려져야 할 때 저장된 깊이값과 새로운 픽셀의 … Read more

[DirectX11] 16. FBX File로부터 모델 데이터 Import하기.

fbx파일을 로드해서 모델을 렌더링하려고 한다. fbx파일을 로드하려면 FBX SDK관련 셋팅이 필요하다. 관련 내용들은 FBX SDK Help | Getting Started | Autodesk 에서 참고하였다. FBX SDK 다운로드 및 설치 FBX | Adaptable File Formats for 3D Animation Software | Autodesk 우선 이곳에서 SDK 다운로드를 한다. 다운로드 이후 설치까지 한다. 설치된 내용이다. 필요한 파일들을 복사해서 사용하기 때문에 … Read more

[DirectX11] 15. 카메라( View & Projection ) – Constant Buffer 활용하기 2편.

카메라변환, 즉 View와 Projection변환에 대해 알아보자. 이 두개의 요소 역시 Constant Buffer를 활용해서 구현할 것이다. 이전까지의 Transform변환은 로컬 공간에서의 모양을 결정하는 정점들이 월드 공간으로의 변환을 해주는 것이였다. 여기에 추가로 해주는 View변환은 카메라 공간으로의 변환을 해주는 것이고, Projection변환은 투영 공간으로의 변환을 해주는 것이다. 각각 어떤것인지 한 번 알아보자. View 변환 View변환은 카메라 공간으로의 변환을 해주는 것이라고 … Read more

[DirectX11] 14. ImGUI 설치하기

Reference ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies 에서 설치 및 시작 가이드를 볼 수 있다. 설치하기 Zip파일로 프로젝트 다운로드 받기 프로젝트에 직접 필요한 파일 복사하기 압축을 푼 후 루트 경로에 있는 필수 파일들을 내 프로젝트에 복사하여 포함한다. 내가 사용할 그래픽스 API에 맞는 Implement 파일들을 추가로 복사하여 포함한다. 멀티플랫폼 환경으로 … Read more

[DirectX11] 13. 라이트( Directional Light ) – Constant Buffer 활용하기.

라이트( Directional Lighting )에 대해 구현을 해보고자 한다. 그리고 이 라이트을 구현할때 Constant Buffer를 활용하려 한다. 구현하려는 라이트는 난반사( Diffused Reflection )에 기초한다. Diffused Reflection 렌더링되는 물체에 빛이 일정한 방향으로 비추고 있을때, 표면이 일정하지 않은 물체는 반사되는 빛의 양이 각 표면마다 다르다. 이 일정하지 않은 표면을 법선( Normal )벡터로 표현한다. 법선 벡터와 빛의 방향을 가지고 … Read more

[DirectX11] 12. 변환 – Constant Buffer에 대해 알아보자.

지금까지 렌더링한 사각형을 크기 및 위치를 변화시켜보자. 정점 버퍼의 내용을 수정해도 할 수 있지만, 매번 정점 버퍼의 내용을 수정하면서 렌더링하기엔 꽤나 비효율적이다. 무엇보다 강력한 GPU의 힘을 이용하지 못한다. 정점 버퍼의 내용은 모양을 정의하는 것이다. 이 모양을 Matrix를 통해 변환을 해야한다. 그리고 GPU를 이용하기 위해 해당 변환은 Vertex Shader에서 할 것이다. 이를 위해 필요한 것이 바로 … Read more

[DirectX11] 11. 이미지 – Texture2D에 대해 알아보자.

사각형까지 렌더링이 되었다. 이제 이 사각형에 이미지를 출력해보려고 한다. 이미지를 출력하기 위해서는 Texture2D라는 리소스가 필요하다. Texture2D는 GPU 메모리에 적재되어 Pixel Shader에서 샘플링될 수 있다. 샘플링된다는 것은 특정 픽셀에서 표현해야할 색상값을 표본으로 가져올 수 있다는 뜻이다. 이미지를 렌더링할 수 있는 Texutre2D에 대해 알아보자. 정점에서 가지는 텍스처 좌표 또한 보간되어 각 픽셀도 텍스처 좌표를 가지게 된다. 이 … Read more

[DirectX11] 10. 사각형 – Index Buffer에 대해 알아보자.

Index Buff에 대해 알아보자. 인덱스 버퍼를 사용하는 이유는 정점 버퍼에서 사용하는 GPU 메모리 사용량을 줄이기 위해서이다. 간단하게 색상을 포함하는 사각형을 보자. 정점 버퍼로만 이 사각형을 렌더링하기 위해서는 총 6개의 정점 데이터가 필요하다. 각 정점이 위치( float[3] )와 색( float[4] )을 포함한다면 정점 버퍼의 메모리 사용량은 28 x 6 = 168 bytes가 된다. 하지만 인덱스 버퍼를 … Read more

[Motion Matching] 1. GameAnimationSample에서 구성된 모션 매칭 시스템

언리얼 엔진의 모션 매칭 시스템을 분석하기 전에 먼저 모션 매칭 시스템을 이용하기 위해 필요한 것들과 어떻게 동작하는지 간단하게 먼저 알아보자. 에픽에서 제공한 GameAnimationSample에서 구성된 모션 매칭 시스템을 살펴보았다. Motion Matching Asset 구조 Pose Search Scheme 애니메이션을 찾기 위한 ( Query ) 데이터들을 정의한다. 프로젝트의 PSS_Default를 보면 다음과 같은 채널들이 지정되어 있다. 즉, PSS_Default스키마를 사용하게 되면 … Read more