전체 글

성장 과정 일기, 누군가에게 정보를 제공하기 위해서가 아닌 스스로 배운 내용을 정리하기 위해 작성하는 블로그 입니다. 잘못된 정보가 있으면 댓글로 적어주세요.
Picking카메라에 화면을 클릭해 어떤 물체에 대한 반응을 일으키는 것을 Picking이라고 할 수 있는데화면에 물체가 보여지기 위해선 로컬 좌표계 - 월드 좌표계 - 카메라 좌표계 - 투영 좌표계 - 스크린 좌표계로 변환해야한다.반대로 카메라의 화면을 클릭해서 클릭된 위치의 물체를 알기 위해선 위의 순서를 반대로 진행하면 된다. 여기서 생각해봐야하는 점이 있다. Picking을 진행하는 건 CPU인가 GPU인가? 당연히 CPU이다.Picking은 렌더링 파이프라인이랑 전혀 상관이 없다. 그렇다면 어느 좌표계에서 Picking을 진행하면 좋을까?가령 내가 화면을 선택했을 때, 선택된 좌표는 스크린 좌표계일 거고 이를 역순으로 좌표계를 변환 할 것이다. 그리고 내가 선택하고자 하는 물체는 로컬좌표계에 있..
Tessellation렌더링 파이프라인에서 Geometry Shader보다 더 빨리 실행 되는 부분이 있다. VS 다음 Hul Shader, Tessellator, Domain Shader 단계 총 3가지를 합쳐서 Tessellation 이라고 한다. 그렇다면 Tessellation이란 뭘까?기하 구조를 더 작은 삼각형으로 분할하고 새로 생긴 정점들의 위치를 적절한 방법으로 조절하는 것으로 정의할 수 있다.말만 들으면 되게 와닿지 않는다. 그럼 사용하는 때를 생각해보면 Tessellation은 Terrain에서 가장 많이 사용한다. GPU에 lod 연산이 필요할 때, 효율적인 물리 애니메이션을 계산할 때, 메모리 전략으로 low 폴리곤 버전으로 전달해 준 객체를 high 폴리곤 버전으로 변환할 때 등 에..
Geometry Shader아주 멀리있는 오브젝트나 반복되는 물체는 Billboard를 통해서 작업하게 된다. 그전에 작업했던 방식을 떠올려보면 하나의 vertex buffer에 정점을 하나의 위치에 4개를 전부 다 배치한 다음 쉐이더에 넘겨주고, 쉐이더 측에서 정점을 옮겨 위치를 잡아주는 형식을 사용했다. 하지만 이보다 조금 더 우월한 방식을 사용해보자. 렌더링 파이프라인에서 VS와 RS 단계 사이에 Geometry Shader 단계가 있다. 이 친구가 하는 역할은 입력 받은 정점의 개수를 임의로 늘렸다 줄였다 할 수 있게 해준다. 즉, 정점을 맘대로 늘릴 수 있기 때문에 입력된 오브젝트를 복사 아닌 복사가 가능하다.나무를 빌보드를 이용해 만들 것인데, GeometryShader를 이용한다.코드를 살펴..
조명물방울책에서 제공하는 조명 예제의 완성본은 다음과 같다.스포트라이트와 가운데 포인트라이트 그리고 나머지는 웨이브 오브젝트에 텍스처를 입혀 구현했다.주목해야하는 점은 조명이다.스포트라이트와 포인트라이트는 일반 빛 조명과 크게 다르지 않다. 단지 여러 세부 옵션이 추가된 것이다.#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..
Mintriever
어제보다 성장한 나