분류 전체보기
-
GPU Prefix Sum개인 프로젝트 2025. 11. 24. 16:00
개요이 글은 개인 프로젝트에서 Visibility Buffer를 구현하는 과정에서 GPU 기반 Prefix Sum을 작성하게 되었고, 이를 별도로 정리해 둘만한 가치가 있는 주제라고 판단하여 작성하게 되었습니다. CPU에서 Prefix Sum을 구하는 직관적인 구현과 달리 GPU에서 병렬로 Prefix Sum을 효율적으로 계산하려면 스레드 그룹 간 동기화 및 데이터 전달 등 여러 요소를 고려해야 하므로 복잡하고 작성해야 할 코드의 양도 비교적 많아 구현 난도가 높습니다.하지만 이를 구현하는 과정에서 생각할 거리가 많았고 매우 유익한 경험이었습니다. 이 글을 읽으시는 분들도 저와 같은 경험을 얻으셨으면 좋겠습니다.이제부터 GPU를 이용하여 Prefix Sum을 구하는 방법을 Direct3D 12 컴퓨트 셰..
-
Render Graph개인 프로젝트 2025. 10. 17. 23:12
개요Render Graph(이하 렌더 그래프)는 2017년 GDC에서 ‘FrameGraph: Extensible Rendering Architecture in Frostbite’라는 발표에서 처음 소개되었습니다. 발표 명에서 알 수 있듯 이때는 프레임 그래프라는 이름으로 소개되었습니다. 하지만 근래의 최신 상용 엔진들을 살펴보면 Unreal Engine에서는 Render Dependency Graph(혹은 RDG)로 부르고 있고 Unity Engine에서는 Render Graph로 부르고 있어 렌더 그래프라는 이름이 널리 사용되고 있는 것으로 보입니다.이 글에서는 Direct3D 11 / 12로 구현된 샘플 프로그램을 통해 렌더 그래프가 무엇이고 왜 사용되는지 알아볼 예정입니다. 렌더 그래프는 특정 그래..
-
Async Compute개인 프로젝트 2025. 10. 6. 14:08
개요이 글에서는 Direct3D 12로 구현된 샘플 프로그램을 통해 Direct3D 12부터 지원하는 Async Compute(이하 비동기 컴퓨트)에 대하여 알아보도록 하겠습니다.비동기 컴퓨트란?비동기 컴퓨트가 무엇인지 알아보기 전에 잠시 간략하게 Direct3D 12 API가 GPU에 작업을 제출하는 과정을 살펴봅시다. 대략 다음과 같습니다.CPU에서 Command List에 제출하고자 하는 명령을 기록.Command List를 Command Queue에 제출.GPU는 Command Queue에 제출된 작업을 차례대로 꺼내서 실행하게 됩니다. 그런데 Command Queue는 반드시 하나만 있어야 하는 것은 아닙니다. 하나의 프로그램에서 복수의 Command Queue를 생성할 수 있고 각 Comman..
-
Screen Space Global Illumination개인 프로젝트 2025. 7. 5. 22:37
개요이 글에서는 Direct3D 11 / 12로 구현된 샘플을 통해 실시간으로 전역 조명 (Global Illumination, 이하 GI)을 근사하는 기법 중 하나인 Screen Space Global Illumination (이하 SSGI)에 대해서 알아보도록 하겠습니다.SSGI 란?SSGI는 이름에서 알 수 있듯 화면에 렌더링된 정보 (깊이, 색 등)를 통해 실시간으로 전역 조명을 계산합니다.물체에 의한 빛의 차폐를 계산하는 Screen Space Ambient Occlusion (이하 SSAO)과 거의 유사하며 여타 화면 공간 기법들과 같이 장면의 복잡도에 영향을 받지 않는다는 장점과 화면 밖의 정보가 없어 이로 인한 아티팩트가 발생한다는 단점을 공통으로 가지고 있습니다.이 때문인지 언리얼 엔진에..
-
To Early-Z, or Not To Early-Z (번역)개인 번역 2025. 6. 3. 11:15
원문 : https://therealmjp.github.io/posts/to-earlyz-or-not-to-earlyz/ To Early-Z, or Not To Early-ZDepth In The Logical Rendering Pipeline Where Does Early-Z Fit In? When Does Early-Z Have To Be Disabled? Discard/Alpha Test Pixel Shader Depth Export UAVs/Storage Textures/Storage Buffers Forcing Early-Z Forced Early-Z With UAVs And Depth Writes Rasterizetherealmjp.github.io우리가 GPU에서 당연하게 여기는 것 중 하나..
-
PSO Cache개인 프로젝트 2025. 4. 26. 15:31
개요이 글에서는 Direct3D 12로 구현된 샘플을 통해 PSO Cache에 대해서 알아보도록 하겠습니다.PSO 란?우선 PSO가 무엇인지 알아보겠습니다. PSO는 Pipeline State Object의 약자입니다. 컴퓨터 그래픽스에서 3차원 공간을 2D 스크린에 그리기 위해 Direct3D와 같은 그래픽스 API는 다음과 같은 일련의 정형화된 단계들을 거치게 됩니다.출처 : https://open.gl/drawing이러한 단계를 Rendering Pipeline이라고 하며 Pipeline State Object의 Pipeline 이 바로 그것입니다. Rendering Pipeline은 여러 단계로 구성되어 있으며 물체를 그릴 때 삼각형의 앞면을 어떻게 판단할지, 깊이 검사를 할지, 어떤 색상 채널을..
-
Mesh Shader개인 프로젝트 2025. 2. 25. 00:29
개요이 글에서는 Direct3D 12로 구현된 샘플을 통해서 Mesh Shader로 불리는 모던 그래픽스 API에 새롭게 등장한 프로그래밍 가능한 파이프라인 단계에 대해서 알아보도록 하겠습니다.Mesh Shader는 2019년도에 Direct3D 12를 통해서 소개되었고 Vulkan의 경우에는 2022년도에 VK_EXT_mesh_shader 확장으로 지원하게 되었으며 Metal도 2022년도에 Metal3를 통해 지원하게 된 만큼 모든 모던 그래픽스 API에서 지원하고 있습니다.비록 이 글에서는 Direct3D 12의 예제만 다루지만 각 그래픽스 API 간에 유사한 개념을 공유하고 있으므로 다른 그래픽스 API에서 Mesh Shader를 사용하는데 이 글이 도움이 되었으면 합니다.Mesh Shader란?..