목록Graphics API (38)
서의 공간
목표 1. 노멀 매핑이 왜 필요한지 이해한다. 2. 노멀 맵을 저장하는 방법을 파악한다. 3. 노멀 맵을 만드는 방법을 알아본다. 4. 노멀 맵에서 노멀 벡터들의 기준이 되는 좌표계를 배우고, 그 좌표계와 3차원 삼각형의 물체 공간 좌표계의 관계를 이해한다. 5. 정점 셰이더와 픽셀 셰이더로 노멀 매핑을 구현하는 방법을 파악한다. 6. 변위 매핑과 테셀레이션을 결합해서 메시의 세부도를 개선하는 방법을 알아본다. 18.1 동기 18.2 노멀 맵 노멀 맵은 그냥 하나의 텍스처이지만, 각 픽셀마다 RGB 색상 자료를 담는 것이 아니라 노멀 정보를 담는다는 특징이 있다. 노멀 맵의 각 픽셀은 R, G, B 채널에 압축된 \(x, y, z\) 좌표성분을 담으며, 이 성분들은 하나의 노멀 벡터를 정의한다. 그림 1..
GPU는 하나의 장소 또는 연속된 장소들에서 대량의 메모리를 읽어서 처리하는 작업(소위 '스트리밍 연산')에 최적화되어 있다. 이는 임의 메모리 접근을 염두에 두고 설계된 CPU와 대조적인 특징이다. 게대가 정점들과 픽셀들이 개별적으로 처리된다는 특징 때문에 GPU는 대규모 병렬 처리에 맞게 설계되었다. 이러한 GPU 아키텍처가 그래픽 연산에 도움이 됨은 분명하다. 그러니 GPU의 병렬 아키텍처와 대량 자료 처리 능력을 활용할 수 있는 분야가 그래픽만은 아니다. GPU를 비그래픽 분야에 응용하는 것이 범용 GPU(general purpose GPU, GPGPU) 프로그래밍이라고 부른다. 모든 알고리즘이 GPU 구현에 적합한 것은 아니다. GPU의 병렬 아키텍처의 장점을 취하려면 알고리즘이 자료 병렬성을 ..
목표 1. 기하 셰이더를 프로그래밍하는 방법을 배운다. 2. 기하 셰이더를 이용해서 빌보드를 효율적으로 구현하는 방법을 파악한다. 3. 자동으로 생성되는 기본도형 ID 및 그것의 용도 몇 가지를 알아본다. 4. 텍스처 배열을 생성하고 사용하는 방법을 파악하고, 텍스처 배열이 왜 유용한지 이해한다. 5. 알파-포괄도 변환이 알파 잘림의 앨리어싱 문제에 어떻게 도움이 되는지 이해한다. 11.1 기하 셰이더 프로그래밍 다음은 기하 셰이더 프로그램의 일반적인 틀이다. [maxvertexcount(N)] void ShaderName( PrimitiveType InputVertexType InputName [NumElements], inout StreamOutputObject OutputName) { // ...기..
목표 1. ID3D11DepthStancilState 인터페이스를 이용해서 깊이·스텐실 버퍼의 설정들을 제어하는 방법을 파악한다. 2. 거울을 구현할 때 스텐실 버퍼를 이용해서 거울 면 바깥에 반사상이 그려지지 않도록 만드는 방법을 배운다. 3. 이중 혼합이 무엇이고 스텐실 버퍼를 이용해서 이중 혼합을 방지하려면 어떻게 해야 하는지 살펴본다. 4. 깊이 복잡도를 이해하고, 장면의 깊이 복잡도를 측정하는 두 가지 방법을 알아본다. 스텐실: [미술용어] 투명 필름지 등에 도안을 그리고 모양대로 오려낸 후, 종이나 벽, 가구등 원하는 곳에 필름을 붙인 후 오려낸 자리에 물감을 두드려 발라서 도안과 같은 그림을 만드는 형식의 용법이다. 판화와 흡사하나 좌우반전이 없다. 10.1 깊이·스텐실 버퍼의 자료 형식과 ..
목표 1. 혼합의 작동 방식과 Direct3D에서 혼합을 사용하는 법을 이해한다. 2. Direct3D가 지원하는 여러 가지 혼합 모드를 배운다. 3. 기본도형의 투명도를 알파 성분을 이용해서 조절하는 방법을 파악한다. 4. HLSL의 clip함수를 이용해서 한 픽셀이 후면 버퍼에 아예 그려지지 않게 만드는 방법을 배운다. 9.1 혼합 공식 현재 래스터화 중인 \(ij\)번째 픽셀, 즉 원본(source) 픽셀에 대해 픽셀 셰이더가 출력한 색상이 \(\mathbf{C_{src}}\)라고 하자. 그리고 현재 후면 버퍼에 있는 \(ij\)번째 픽셀, 즉 대상(destination) 픽셀의 색상이 \(\mathbf{C_{dst}}\)라고 하자. 혼합을 사용하지 않으면 \(\mathbf{C_{src}}\)가 \..
목표 1. 텍스처 이미지의 한 부분을 지정해서 삼각형에 입히는 방법을 배운다. 2. 텍스처를 생성하고 텍스처 매핑을 활성화하는 방법을 파악한다. 3. 텍스처를 필터링해서 더 매끄러운 모습을 만들어 내는 방법을 배운다. 4. 주소 지정 모드를 조정함으로써 하나의 텍스처가 타일처럼 여러 번 적용되게 하는 방법을 알아본다. 5. 여러 장의 텍스처를 조합해서 새로운 텍스처를 만들고 특수효과를 구현하는 방법을 파악한다. 6. 텍스처 애니메이션으로 기본적인 효과 몇 가지를 만들어 내는 방법을 배운다. 8.1 텍스처와 자원의 개괄 후면 버퍼와 깊이 버퍼는 ID3D11Texture2D 인터페이스로 대표되는 2차원 텍스처 자원이다. 텍스처 자원은 파이프라인의 단계에 직접 묶이지 않고, 텍스처가 연관된 자원 뷰를 파이프라..
핵심개념 1. normal map 2. tangent space
프랭크 D. 루나의 책 『DirectX 11을 이용한 3D 게임 프로그래밍 입문』의 복습 과정이다. 추후 연습문제풀이까지 Chili 프레임워크를 이용하여 구현할 예정이다.
핵심 개념 Mesh 더보기 Mesh.h #pragma once #include "DrawableBase.h" #include "BindableCommon.h" #include "Vertex.h" #include #include #include #include #include "ConditionalNoexcept.h" class ModelException : public ChiliException { public: ModelException(int line, const char* file, std::string note) noexcept; const char* what() const noexcept override; const char* GetType() const noexcept override; con..
핵심 개념 1. c++ template meta programming 2. c++ reflection 3. std::move, std::forward 4. universal references 5. perfect forwarding 6. template recursion 7. T&&... args -> parameter pack 이라고 한다. 이것은 파라미터가 한개여도 되고 여러개여도 된다는 것이다. 8. 왜 이렇게 설계를 해야만 하는가? 현재 프로젝트에서 SkinnedBox를 만드는 과정을 살펴보면, Vertex 구조체를 정의한다. Vertex 구조체는 pos, normal, texturecoord 을 포함한다. geometry 클래스 중 하나인 cube 클래스에서 Make() 함수로 정점들의 구조를 ..