전체 글
-
Texture Streaming개인 프로젝트 2026. 8. 20. 15:25
개요이 글에서는 Direct3D 11 / 12 기반의 샘플 프로그램을 이용하여 Texture Streaming (이하 텍스처 스트리밍)의 구현 예시 중 하나를 살펴보겠습니다.텍스처 스트리밍이란텍스처 스트리밍은 현재 화면을 렌더링하는데 필요한 최소한의 텍스처만을 비디오 메모리에 올려 메모리를 효율적으로 사용하게 하는 기술입니다. 메모리를 절약하기 위해서 하나의 텍스처를 분할하여 필요한 부분만 사용하는 방법(Virtual Texturing)도 있겠지만 이 글에서 다루는 텍스처 스트리밍은 밉맵을 이용하여 상황에 맞는 해상도의 텍스처를 동적으로 관리하는 방식을 의미합니다.밉맵은 렌더링 성능을 높이고 텍스처의 계단 현상이나 앨리어싱(Aliasing)을 줄이기 위해 사용됩니다. 이를 위해 원본 텍스처 외에도 여러 ..
-
DirectX Raytracing개인 프로젝트 2026. 5. 25. 13:00
개요이 글에서는 Direct3D 12 기반의 샘플 프로그램을 활용하여 DirectX Raytracing(이하 DXR)의 전체적인 사용 흐름을 살펴보겠습니다. 그리고 이를 바탕으로 DXR을 활용한 Ambient Occlusion 렌더링 방식인 Raytraced Ambient Occlusion(이하 RTAO)을 직접 구현하는 과정을 단계별로 소개하겠습니다.DXRDXR은 실시간 레이 트레이싱을 지원하기 위한 Direct3D 12의 확장 기술입니다. 실시간 레이 트레이싱은 BVH 순회 및 광선과 기하 간 교차 계산 등 높은 연산량을 요구하기 때문에 이를 효율적으로 처리하기 위해 전용 하드웨어(NVIDIA의 RT Core, AMD의 Ray Accelerator)가 탑재된 GPU에서 높은 성능을 발휘합니다.다만 D..
-
Visibility Buffer Rendering Appendix개인 프로젝트 2026. 3. 29. 00:15
개요이 글에서는 이전 글인 Visibility Buffer Rendering에서 자세히 다루지 않고 사용했던 CalcFullBary 함수를 분석하고 해당 함수가 왜 그렇게 작성되었는지를 살펴보고자 합니다.ClacFullBary 함수는 다음 두 가지를 계산합니다.원근 보정된 무게중심 좌표 ( Perspective correct barycentric )화면 공간 미분값( ddx, ddy )이 값들을 이용하면 하드웨어 래스터라이저를 사용하지 않고도 정점의 각 요소를 보간할 수 있고 텍스쳐의 mipmap 선택 또한 가능해집니다. 이 함수는 Visibility Buffer Rendering의 핵심함수이지만 왜 이렇게 작성되었는지 직관적으로 이해하기는 쉽지 않습니다.이 함수를 단순히 가져다 쓰는 데 그치지 않고 그..
-
Visibility Buffer Rendering개인 프로젝트 2026. 2. 8. 17:36
개요이 글에서는 Direct3D 12로 구현된 샘플 프로그램을 통해 Visibility Buffer Rendering(이하 가시성 버퍼 렌더링)에 대하여 알아보도록 하겠습니다.가시성 버퍼 렌더링이란?우선 가시성 버퍼 렌더링이 무엇인지부터 알아보도록 하겠습니다. 가시성 버퍼 렌더링은 화면에서 보이는 삼각형(또는 프리미티브)의 아이디를 버퍼에 기록해 두고, 이후 이 가시성 정보를 기반으로 보이는 픽셀에 대해서만 셰이딩을 수행하는 렌더링 기법입니다. 이때 **삼각형의 아이디를 기록해 놓은 버퍼를 ‘가시성 버퍼’**라고 부릅니다.보이지 않는 영역에 대한 불필요한 계산을 줄인다는 점에서 디퍼드 셰이딩과 유사하지만, 디퍼드 셰이딩이 라이팅 단계의 효율성에 초점을 맞춘 반면, 가시성 버퍼 렌더링은 셰이딩 이전 단계에..
-
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..