Programming 58

[책공부] Ambient Occlusion + chap 21 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Ambient Occlusion - 냅다 모든 모델 픽셀에 일정량의 빛을 더해주었던 Ambient Light를 좀 더 그럴싸하게 바꾸는 챕터이다. - 아이디어는 일단 타겟픽셀 주변에 뭔가 많으면, 그림자가 드리워져서 혹은 빛이 가려져서 Ambient Light를 어둡게 설정하는 것이다. - 타겟 픽셀의 노멀 방향 반구로 냅다 Ray를 쏴서, 뭔가 닿는것이 많을 수록 어두워지는 것이다. - 하지만 모든 모델, 모든 픽셀에 대해서 Ray를 쏘는건 일단 말이 안되고, 좀 더 가벼운 방법이 필요하다. - 그래서 나온게 SSAO (Screen Space Ambient Occlusion) 이다. 화면에 보이는 부분에 대해서만,..

Programming/D3D12 2024.03.08

[책공부] Shadow Mapping + chap 20 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Shadow Mapping - 아이디어의 시작은 그림자를 지게 만드는 광원에서 뭔가를 하는 것이다. - 광원에서 빛이 나와서 opaque한 물체에 닿으면, 그 뒤로 그림자가 생기는 것이다. - Shadow Mapping이 이 원리를 써먹을 알고리듬이다. - 광원에서 빛의 방향으로 바라본 장면을 렌더링 하고, 이것의 뎁스 버퍼를 이용하는 것이다. 그러면, 광원과 빛이 처음 닿는 픽셀과 거리가 담긴 텍스쳐를 얻게 된다. - 이를 그림자를 지게할 곳과 거리를 비교해서, 해당 평면에 그림자가 드리울지, 아닐지, 혹은 얼마나 드리울지 결정하는 것이다. 2. Projective Texturing - 예제에서는 Direction..

Programming/D3D12 2024.03.04

[책공부] Normal Mapping + chap 19 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Normal Mapping - Vertex에서만 존재하는 Normal 값을, 텍스쳐로 받아서 더 디테일하게 표면을 그려보려고 한다. - Normal 정보를 가지고 있는 Normal Map(Texture)와 그것을 적절히 모델에 적용(Mapping)시키는 것이 목적이다. - 노멀맵 이미지를 보면, 파란색 베이스에 초록색이나 붉은색이 약간씩 섞여있는... 아무튼 그런 모양새다. - RGB에 각각 Normal의 X, Y, Z 값을 넣어서 그런 것이다. Z가 접면 좌표계에서는 수직을 나타내니깐, 그것을 담은 나타내는 B값이 제일 클 것이고, 그래서 전반적으로 푸른빛을 내는 것이다. - bit - format은 각 성분의 구..

Programming/D3D12 2024.02.27

[책공부] Cube Mapping + chap 18 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. CubeMap과 환경 매핑 - 플레이어(카메라) 가까이 Mesh들이 있는 Level이 아니라, 예제 사진처럼 환경을 그려주고, 반사되는 물체에도 적절히 환경 반사상을 그려주어서, 심미적인 효과를 주는 것이 이번 예제의 목표이다. - 이를 위해서는(예제와 같은 결과가 나오기 위해서는) 주변 환경을 나타내는 6장의 Texture를 가진 환경맵이 필요하고, 해당 텍스쳐의 포맷인 D3D12_SRV_DIMENSION_TEXTURECUBE에서 픽셀을 참조하기 위해 필요한, LookUp 벡터로 샘플링을 해야 한다. 2. TextureCube 맵 과 LookUp Vector - 일단 환경 자체를 그리는 방법을 먼저 보면, 예제에서..

Programming/D3D12 2024.02.26

[책공부] Picking + chap 17 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Picking - 화면을 마우스로 클릭해서 model을 선택하는 것을 목표로 한다. - 마우스 입력은 Client Area의 2D 좌표로 받고, Model은 App 상에서 3D로 존재하고, 좌표계도 다르다. (Client Area -> World Coordinates) - 아이디어는 NDC위의 점을 클릭한 것을, 원점(카메라 위치)에서 View Frustum의 Projection Screen위의 한 점으로 지나가는 반직선(Ray)으로 변환하는 것이다. - 카메라 위치에서 Projection Screen을 지나 View Frustum을 가로지르는 반직선(Ray)과, Model의 충돌을 적절한 좌표계 변환과 + Dire..

Programming/D3D12 2024.02.22

[책공부] Instancing / Frustum Culling + chap 16 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Instancing - 이전 챕터에서 배운 Dynamic Indexing과 Texture Array와 StructuredBuffer를 함께 이용한다. - 똑같은 물체를 여러 개 그리기 위해, App에서 API에게 Drawcall을 여러 번 요청하는 것보다 좋은 방법이라고 한다. - Vertex Buffer와 Index Buffer를 Input - Assembly에 걸어 놓고, DrawIndexedInstanced를 호출할 때, 두 번째 매개변수에 1 이외에 값을 넣는다면, - Vertex Shader의 SV_InstanceID 시멘틱에서 횟수를 알려주면서 여러번 삼각형을 그리게 된다. - 이걸 일종의 Index로 이..

Programming/D3D12 2024.02.21

[책공부] Dynamic Indexing / FPS Camera + chap 15 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Dynamic Indexing - hlsl 5.1에서 새로 생긴 기능이다. Texture 들을 배열로 Shader에서 정의할 수 있고, 그것을 인덱싱 할 수 있다. - Texture2D texArr[4] : register(t0); 이렇게 선언한다면, t0 ~ t3 레지스터를 차지한다. - Structrued Buffer도 마찬가지로 Indexing을 할 수 있다. Upload Heap으로 올리고 App과 Shader가 같은 Struct를 사용하고 있다면 정상적으로 작동한다. t 레지스터를 사용한다. 그래서 space를 이용해서 texture array와 겹치지 않는 레지스터 번호를 가지게 하였다. 2. App에서 ..

Programming/D3D12 2024.02.19

[책공부] Tessellation + chap 14 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Tessellation - Shader를 이용해서 GPU에게 점 (삼각형)을 새로 생성해달라고 하는 거다. ( App에서 작업을 줄이고, GPU의 작업을 늘리는 느낌 ) - 그래픽스 파이프라인에서 Vertex Shader 다음에 작성할 수 있는 단계다. 그래픽 파이프라인 - Win32 apps | Microsoft Learn 그래픽 파이프라인 - Win32 apps 이 섹션에서는 Direct3D 11 프로그래밍 가능 파이프라인에 대해 설명합니다. learn.microsoft.com - (Constants) Hull Shader + Tessellator + Domain Shader 단계를 가진다. - 여기서 프로그래머..

Programming/D3D12 2024.02.14

[책공부] Compute Shader + chap 13 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Compute Shader - 픽셀 작업을 위해 연속된 메모리 + 병렬계산을 하는데 특화된 GPU를, 좀 더 다양한 방법으로 사용하는 것이다. (GPU 프로그래밍을 하는 느낌이다. CS는 스레드 하나가 어떻게 작동할지 정하는 느낌) - GPU에서 돌아갈 스레드들이 모인 스레드 그룹(thread group)으로 grid를 만들고, 그것이 GPU위에서 돌아간다. - 스레드 그룹은 구성 스레드가 접근 가능한 공유 메모리를 가진다. (원하는 작업 -> 그룹 하나) - 그리고 어디서 많이 들었던 SIMD은 하드웨어별로 정해진 WARP라는 단위로 스레드가 묶여서 처리된다. - GPU 화면을 그리는데 집중하는 다른 그래픽스 파이..

Programming/D3D12 2024.02.02

[책공부] Geometry Shader + chap 12 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.)1. Geometry Shader - Primitive를 GPU단에서 새로 생성하거나, 파괴하여서 다양한 효과를 낼 수 있게 해주는 기술이다.- VS와 PS 사이에 optional 하게 존재한다. VS에서 받은 데이터를 작업한 다음에 바로 PS로 넘기 때문에, 대부분 상황에서는 Homogenous Coordinates 으로 변환한 다음에 넘겨주어야, 프로그래머가 원하는 모습이 렌더링 될 것이다.- 함수 시그니처가 굉장히 특이하다. 아래 문서를 보고 공부하도록 하자.- Geometry-Shader Object - Win32 apps | Microsoft Learn Geometry-Shader Object - Win32 app..

Programming/D3D12 2024.01.30