전체 글

성장 과정 일기, 누군가에게 정보를 제공하기 위해서가 아닌 스스로 배운 내용을 정리하기 위해 작성하는 블로그 입니다. 잘못된 정보가 있으면 댓글로 적어주세요.
조명물방울책에서 제공하는 조명 예제의 완성본은 다음과 같다.스포트라이트와 가운데 포인트라이트 그리고 나머지는 웨이브 오브젝트에 텍스처를 입혀 구현했다.주목해야하는 점은 조명이다.스포트라이트와 포인트라이트는 일반 빛 조명과 크게 다르지 않다. 단지 여러 세부 옵션이 추가된 것이다.#pragma oncestruct DirectionalLight{ DirectionalLight() { ZeroMemory(this, sizeof(this)); } XMFLOAT4 Ambient; XMFLOAT4 Diffuse; XMFLOAT4 Specular; XMFLOAT3 Direction; float Pad; // Pad the last float so we can set an array of lights if we wan..
물방울 책이라고 하는 DX11 책에 나오는 내용을 집중적으로 부분부분 알아보자.물방울 책은 오래전엔 나올 책이기에, 그 책에 나와있는 코드를 그대로 사용할 경우 100% 에러가 날 것이다. 그렇기 때문에 스스로 수정을 해야만한다.Direct3D의 초기화4장 첫번째 챕터인 초기화하는 부분 코드를 분석해보자.일단 코드 자체를 실행하면 다음과 같다.빈 화면과 함께 프레임, ms초가 나온다.#include "pch.h"#include "01. InitDemo.h"InitDemo::InitDemo(HINSTANCE hInstance) : App(hInstance){}InitDemo::~InitDemo(){}bool InitDemo::Init(){ if (!App::Init()) return false; retu..
ViewPort우리가 유니티를 사용하던 어느 특정 엔진을 사용하던 공통적으로 제공되는 기술이 하나 있다. 바로 화면을 클릭했을 때, 특정 물체가 픽킹되거나 좌표가 픽킹되는 것이다.가령 우리가 롤 이라는 게임을 즐길 때도 마우스 우클릭으로 땅바닥을 클릭하면 그 좌표로 캐릭터가 움직이는 것을 볼 수 있다.이는 쉬운 작업이 아니다. 왜냐하면 캐릭터가 존재하는 세상은 3D 세상이고 유저 입장에서는 화면이 2D이기 때문이다. 우리는 캐릭터가 카메라를 넘어 스크린화면 까지 넘어오기 위해 다음과 같은 작업을 했다.wolrd 변환 -> camera 변환 -> projcetion 변환 -> 좌표 정규화 -> screen 변환  이런 과정을 온전히 거쳤을 때야 어떤 오브젝트가 카메라를 기준으로 그려지게 된다. 그렇다면 2..
이번 챕터에서 주된 공부할 내용은 CPU에서 하던 일을 GPU에게 떠넘기는 것이다.CPU는 할일이 많은 반면(우리가 짠 코드 이외에도 여러 일을 담당) GPU는 할 일이 많이 없는 경우가 생긴다. 그래서 우리의 목표는 CPU도 바쁘게 GPU도 더 많은 일을 할당 받아 바쁘게 돌아가게 하는 것이다.GPU한테 어떻게 일을 분산 시킬 것인가? 에 대한 대답은 자연스레 알게 될 것이다.RawBufferRawBuffer는 Byte Address Buffer인데 주소에 대한 직접적인 연산해서 접근하는 Buffer로, C++로 따지면 Byte형 포인터를 다루는 것과 동일하다. RawBuffer라는 이름이 붙은 이유는 정말 날것을 취급하기 때문이다.이 친구도 결국 Buffer이기 때문에 Rescource가 필요하다. ..
· 창고
이번 넥토리얼이 열리면서 채용의 나라도 같이 열렸다.작년에 신청을 못해서 가지 못했었는데, 이번에는 신청해서 채용의 나라를 가게 되었다. 후기를 남겨보고자 한다.10시 입장이어서 빠른 입장을 위해 9시쯤 건물 앞에 도착했다.그런데 줄이 이미 어마어마 해서 놀랐다... 10시 딱 맞춰 왔으면 들어가는데만 30분은 썼을 듯... 타임테이블은 이랬는데 커리어 세션중 관심 있는건 첫 타임과 마지막 타임 이었다. 10시 반에 시작하기 때문에 일단 들어가자마자 직무 상담을 먼저 받고 그 뒤로 커리어 세션에 들어갈 생각이었다.직무 상담나와 같은 생각을 한 사람이 은근 많아서 한 15분?? 정도 기다려서 직무 상담을 받을 수 있었다. 그 전에는 특정 장소에서 기다려야하고 본인 차례가 됐을 때, 자리에 없으면 순번이 밀..
드로우 콜게임을 개발하다보면 "드로우 콜을 줄이줘요" 라는 얘기를 많이 듣는다고 한다.그렇다면 드로우 콜은 무엇인가? 우리가 지금까지 물체를 그리는 방법은 Mesh의 vertex에 대한 정보를 세팅하고 어떻게 그릴 것인지, 쉐이더는 어떻게 세팅하고 머티리얼 등등을 렌더링 파이프라인에 전부 세팅한 후에 마지막에 Draw... 함수 계열을 딱 호출하면 렌더링 파이프라인을 따라서 IA -> VS -> RS -> PS... 순으로 흘러가며 화면에 보여주게된다. 이때 Draw 함수 계열을 말 그대로 드로우 콜 이라고 부른다. 지금 포스팅 한대로 코딩을 했다면 물체가 100만개가 있다면 매 프레임마다 100만번의 드로우 콜을 해야할 것이고 이는 엄청난 과부화를 유발할 수 있다. 유니티를 기준으로 보면 stat을 확..
애니메이션 읽기본격적으로 이제 파일로 만든 애니메이션을 긁어서 사용할 수 있게 만드는 작업을 해보자.Model cpp에 애니메이션 파일을 읽을 수 있게 작성한다.void Model::ReadAnimation(wstring filename){ wstring fullPath = _modelPath + filename + L".clip"; shared_ptr file = make_shared(); file->Open(fullPath, FileMode::Read); shared_ptr animation = make_shared(); animation->name = Utils::ToWString(file->Read()); animation->duration = file->Read(); animation->fram..
애니메이션은 그 전에 했던 뼈대에 대한 이해가 상당히 중요하다.모델을 로드할 때 좌표계를 변환해서 최상위 부모를 기준으로 한 좌표계로 변환행렬을 구한 후 이걸 Vs 단계에서 처리했다. 이 개념이 애니메이션과 정확히 동일하다.2D의 경우는 여러개의 이미지를 연속해서 보여주는 반면 3D의 경우 관절을 움직여서 움직임을 표현하는 식이다.스키닝먼저 모델을 로드할것인데 사용할 모델은 kachujin으로 가장 유명한 모델을 이용할 것이다.그런데 작성한 코드에 Skin을 추출하는 코드가 없기에 이걸 먼저 작성하고 가겠다.여기서 말하는 Skin은 Vertex들이 어떤 뼈대에 따라 움직일 것인지에 대한 정보를 의미한다.애니메이션은 뼈대를 움직여서 표현하는데 뼈대가 변함과 동시에 수많은 Vertex들이 같이 움직이여한다...
모델 띄우기이제 우리만의 format으로 만들었던 데이터를 다시 메모리로 올리는 과정을 해보자.Model 이라는 클래스를 만들고 여기에 한 모델이 가지고 있는 mesh며 material이며 추후엔 애니메이션 까지 등등을 가지고 있고 이걸 클라이언트에서 불러와 게임 내 화면에 보여주게하는 것이 목표이다.이전 포스팅에서 했던 Export를 반대로 하면 되는 것이다.#pragma oncestruct ModelBone{ wstring name; int32 index; int32 parentIndex; shared_ptr parent; // Cache Matrix transform; vector> children; // Cache};struct ModelMesh{ void CreateBuffers(); wstri..
Assimp로 Material 로딩유니티에서 에셋을 가져와 import 했을 때, 2D의 경우 매우 직관적이게 Texture를 틀기만 했음 됐지만 3D의 경우 수많은 파일들이 같이 들어온다. 특히 Model이 무엇인지 잘 몰라 헤맸던 경험이 있다. Material과 Shader 그리고 Animation 등등 여러 파일이 묶여 하나의 Model이 된다. 지금까지는 큐브, 구 등등 간단한 물체는 수학 식으로 생성할 수 있었지만, 그럴듯한 물체 즉 캐릭터 같은 물체들은 수많은 삼각형으로 이루어져있는데 이걸 수학 식으로 생성하는건 말이 안될 것이다.그렇기에 3D 제작 툴을 통해서 fbx 파일을 생성하고 엔진에서는 그걸 가져와 사용하는 방식으로 이루어진다. Assimp 라이브러리를 통해서 fbx 파일을 로드해보도..
Mintriever
어제보다 성장한 나