DirectX12 20

[책공부] 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

[책공부] Stencil 예제 + chap 11 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Depth - Stencil은 GPU에서 작업 해준다. - 얘도 RenderTarget Buffer와 1대1(?)로 대응이 되는 Buffer이고, App에서 규칙과 파라미터를 정해서 던지면 GPU가 Depth-Stencil Buffer에 값을 넣든지, 조건을 확인하든지... 요청에 맞춰서 렌더링을 해준다. - Blend와 마찬가지로 PSO으로 관리를 하고, 렌더링 파이프라인에 적용하는 것이다. - D3D12_DEPTH_STENCIL_DESC 구조체를 이용해서 그 동작을 정의한다. - 그래서 그 동작이 뭐냐? Depth 동작과 Stencil 동작이 따로 작동한다. - 각각 Depth - Stencil 버퍼에 계산된 값..

Programming/D3D12 2024.01.23

[책공부] Blend 예제 + chap 10 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Blending은 GPU에서 작업해준다. - 픽셀 쉐이더는 화면(Viewport)에 점이 무슨 색으로 찍힐지 결정하는 친구이다. Blend를 만약에 하기로 했다면, 이미 픽셀로 찍혀있는 (Rasterized) 색과 App이 정해준 계산으로 새로운 색을 찍는 것이라고 한다. - App에서 PSO의 D3D12_RENDER_TARGET_BLEND_DESC 으로 로직을 정해준다. (Pixel Shader 바디에서 로직을 정해주는 것이 아니다. Pixel Shader의 로직이 끝나고 나온 값과 원래 찍힌 화면 픽셀이 계산에 쓰이는 것이다.) - D3D12는 Alpha와 RGB blend를 따로 진행 할 수 있다. - 그리고 ..

Programming/D3D12 2024.01.16

[책공부] Lighting 예제 + chap 8 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. 좀 더 간략하게 정리할 필요를 느꼈다. - D3D12 API 사용법은 기초수준은 어느정도 알겠고, - 책에서도 방법론적으로 뭔가 배우는 건 초반 내용이고, 이제는 방법에 집중하는 내용이 많이 나온다. (원리를 어느정도 설명하고 바로 근사할 수 있는 식을 알려준다.) 2. D3D에서 Lighting 표현하기 - 이 친구는 Shader의 힘을 많이 사용한다. - Vertex의 Normal, 도형에 맞는 Material, Constant Buffer로 넘어온 Light 를 이용한다. - 책에서는 대표적인 조명 3가지를 알려준다. Directional Light, Point Light, Spot Light - 각 조명마다 ..

Programming/D3D12 2024.01.11

[책공부] FrameResource 예제 ( + Root Constant)

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. FrameResource를 이용한 지형 + 파도 그리기 예제(까지)가 연습시켜주는 기술 1_1 어뎁터 초기화 단계 ( 이전 예제 에서 한 초기화와 같다.) 더보기 - 창(window) 생성 - 어뎁터 (D3DDevice) 생성 - GPU와 CPU 동기화를 위한 Fence 생성 - GPU와 CPU의 [데이터 전송을 위한 Descriptor View]의 Handle Size 초기화 (아마 요걸로 데이터 블록(아마도 테이블?)을 점프하면서 데이터를 읽을 것 같다.) - Command Queue, Command Allocator, Command List 생성 (멀티 스레딩을 위해 새로 바뀐 GPU에게 렌더링 동작을 요청하는..

Programming/D3D12 2024.01.08

[책공부] FrameResource 예제 ( + Descriptor Table)

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. FrameResource를 이용한 기본 도형 그리기 예제(까지)가 연습시켜주는 기술 1_1 어뎁터 초기화 단계 (박스 예제에서 한 초기화 이후에 뭐가 없는 듯) 더보기 - 창(window) 생성 - 어뎁터 (D3DDevice) 생성 - GPU와 CPU 동기화를 위한 Fence 생성 - GPU와 CPU의 [데이터 전송을 위한 Descriptor View]의 Handle Size 초기화 (아마 요걸로 데이터 블록(아마도 테이블?)을 점프하면서 데이터를 읽을 것 같다.) - Command Queue, Command Allocator, Command List 생성 (멀티 스레딩을 위해 새로 바뀐 GPU에게 렌더링 동작을 요..

Programming/D3D12 2024.01.04

[책공부] 박스 그리기 예제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) (챕터가 넘어갈 수록, 글쓴이가 점점 강해지니 좀 읽을만한 정보는 후반 챕터에 있을 것이다. ㄹㅇㅋㅋ) 다음 글 1. 박스 예제(까지)가 연습시켜주는 기술 1_1 초기화 단계 - 창(window) 생성 - 어뎁터 (D3DDevice) 생성 - GPU와 CPU 동기화를 위한 Fence 생성 - GPU와 CPU의 [데이터 전송을 위한 Descriptor View]의 Handle Size 초기화 (아마 요걸로 데이터 블록(아마도 테이블?)을 점프하면서 데이터를 읽을 것 같다.) - Command Queue, Command Allocator, Command List 생성 (멀티 스레딩을 위해 새로 바뀐 GPU에게 렌더링 동작을 ..

Programming/D3D12 2023.12.27

[책공부] Chap6 연습 문제

(이미지 클릭하면 커집니다.) directx 12를 이용한 3d 게임 프로그래밍 입문 - 연습문제 연습 문제 1 연습 문제 2 연습 문제 3 연습 문제 4 연습 문제 6 연습 문제 7 (CB 업로드 버퍼를 새로 만드는 것도 이상하고, Box를 그리고 Flush()를 하고, CB값을 바꾸고 피라미드를 출력하는 것도 이상해서... 결론은 Instancing을 제대로 배워서 하는게 나을 것 같아, 마우스 클릭을 하면 박스와 피라미드를 번갈아 가면서 렌더링 하는 것으로 타협했습니다.) (맨 위에서 그냥 std::array를 새로 하나 만들면 되긴한데, 연습삼아 이렇게 해봤습니다.) 연습 문제 8, 9 연습 문제 10 연습 문제 11 a) 된다. layout 이랑 Buffer랑 따로 작동하고, 등록된다. b) 된..

Programming/D3D12 2023.12.26