Real-Time Rendering & GPU Physics
고성능 GPU 하드웨어를 활용하여 3D 수리 데이터를 시각적 물리 픽셀로 변환하는 렌더링 파이프라인과 빛의 물리학적 시뮬레이션을 다룹니다.
Article
M
Me
hyunyoun's Blog
human-computer-interaction-graphicshuman-computer-interactiongraphicsreal-time-renderinggpu-physicshcicomputer-graphicsrendering9 min read
1. Overview
실시간 렌더링 및 GPU 물리학(Real-Time Rendering & GPU Physics, RRG)은 수학적으로 정의된 3D 가상 공간의 기하학(Geometry) 데이터를, 인간의 눈이 인지할 수 있는 모니터 픽셀 위의 빛과 색상으로 초당 60번 이상(60fps) 환산해 내는 '고속 시각화 공학'입니다.
학습자는 수천 개의 코어가 동시에 행렬을 곱하는 GPU의 병렬 처리 아키텍처를 이해하고, 3차원 정점(Vertex)들을 2차원 화면에 투영하여 색칠하는 래스터화(Rasterization) 파이프라인의 물리적 단계를 해부합니다. 또한 빛의 경로를 물리적으로 역추적하여 실사급 반사와 그림자를 만들어내는 레이 트레이싱(Ray Tracing)의 광학 물리를 익히고, 셰이더 프로그래밍(Shader)을 통해 하드웨어의 극한 성능을 뽑아내는 그래픽스 거버넌스를 장착합니다.
2. Scope & Boundaries
In-Scope
- GPU 아키텍처 (GPU Architecture): 스트리밍 멀티프로세서(SM), 스레드 워프(Warp/Wavefront), VRAM 대역폭, SIMD/SIMT 모델.
- 렌더링 파이프라인 (Graphics Pipeline): 버텍스 셰이더(Vertex Shader), 래스터라이저(Rasterizer), 프래그먼트/픽셀 셰이더(Fragment Shader), 깊이 버퍼(Z-Buffer/Depth Test).
- 조명과 광학 물리학 (Illumination Physics): 퐁 반사 모델(Phong Reflection), 물리 기반 렌더링(PBR: Physically Based Rendering), 전역 조명(Global Illumination), 레이 트레이싱(Ray Tracing).
- 텍스처링과 최적화 (Texturing & Optimization): 밉맵(Mipmap), 텍스처 필터링(Anisotropic), 안티앨리어싱(MSAA, TAA), 레벨 오브 디테일(LOD).
Out-of-Scope
- 오프라인 렌더링과 CGI 영화 제작: 한 프레임을 그리는 데 며칠이 걸리는 픽사(Pixar) 렌더맨(RenderMan) 수준의 비실시간 렌더링.
- 순수 기하학 증명: 쿼터니언(Quaternion)의 수학적 증명 과정 01. Mathematics & Complexity 영역으로 위임.
Boundaries
- RRG vs. DLN (11-02): DLN(11-02)이 GPU를 써서 행렬을 곱하는 이유가 "인공지능 모델의 가중치 학습"을 위해서라면, RRG는 GPU의 본래 목적대로 "모니터의 픽셀 색상을 초당 60번 갱신"하기 위해 그래픽스 API(OpenGL/DirectX/Vulkan)를 다루는 하드웨어 제어술입니다.
3. Counterexample
- 삼각형 개수 맹신 (Poly-count Fallacy): "우리 게임은 1억 개의 폴리곤을 썼으니 그래픽이 최고다!"라고 자랑하며 최적화를 던져버린 개발자의 최후. 렌더링의 품질은 단순히 버텍스 개수가 아니라 빛의 질감(Lighting)에 달려 있습니다. 노멀 맵(Normal Map) 기술을 쓰면 100개짜리 다각형 통나무도 1만 개짜리처럼 울퉁불퉁하게 보이게 속일 수 있습니다. 화면 멀리 있는 산을 수백만 개의 삼각형으로 렌더링하는 짓은 GPU 메모리만 태울 뿐이며, 거리에 따라 삼각형 수를 줄이는 LOD(Level of Detail) 물리를 이해해야 합니다.
- 레이 트레이싱 남용 (Ray Tracing Overkill): "빛 반사가 예쁘다"며 모든 거울과 물웅덩이에 반사 횟수(Bounces)를 10번씩 걸어두어 초당 5프레임(5fps)의 슬라이드쇼를 만드는 현상. 실시간 렌더링은 '정확함'이 아니라 '그럴싸한 거짓말(Plausible Fake)'의 예술입니다. 거울이 아닌 벽면에는 베이크된 라이트맵(Baked Lightmap)이나 스크린 스페이스 반사(SSR) 같은 값싼 트릭을 써서 GPU 연산량을 물리적으로 타협하는 꼼수가 곧 실력입니다.
4. Prerequisites
- 선형 대수학 (Basic): 3차원 공간의 물체를 이동, 회전, 크기 조절하기 위해 4x4 변환 행렬(Transformation Matrix)을 자유자재로 다뤄야 합니다. (01. MAC)
- 컴퓨터 구조 (Recommended): CPU와 GPU가 메모리를 어떻게 나누어 쓰고 병목(Bottleneck)이 어디서 발생하는지 알아야 최적화가 가능합니다. (03. CSA)
5. Learning Map
6. Learning Topics
Basic
Core Topic 01: GPU 아키텍처와 그래픽스 파이프라인 (GPU Pipeline)
- Why to Learn: 3D 그래픽스를 CPU로 짜면 1프레임 렌더링에 1초가 걸리는 절망을 겪은 뒤, 이를 해결하기 위해 태어난 GPU의 하드웨어 컨베이어 벨트를 이해하기 위해서입니다.
- What to Learn:
- Concepts: CPU와 GPU의 구조적 차이, SIMD/SIMT(Single Instruction, Multiple Threads).
- Skills: 그래픽스 파이프라인 단계 (Application Geometry Rasterization Pixel Processing).
- Tools: OpenGL, WebGL.
- Trade-offs: 복잡한 조건문(
if-else) 처리에 강한 소수의 CPU 코어 vs 단순한 행렬 곱을 수천 개 동시에 처리하지만 분기(Branching)를 만나면 효율이 급락하는 GPU의 트레이드오프.
- How to Learn:
- 1단계: 3차원 공간의 사과(정점 1,000개)가 카메라(View)를 거쳐 화면(Projection)에 오기까지, 행렬 곱셈을 통해 좌표계가 어떻게 4번 연속(Local World View Clip) 변환되는지 수학적 파이프라인을 따라가 봅니다.
- 2단계: 화면에 100만 개의 픽셀을 칠할 때, CPU가
for문을 100만 번 도는 대신 GPU가 코어 10,000개를 써서 100번 만에 끝내버리는 병렬 처리(SIMT)의 통쾌함을 코드로 비교해 봅니다.
- Implement: WebGL이나 기초 OpenGL을 이용하여 화면에 3D 삼각형 하나를 띄우고, 마우스 드래그에 따라 Model-View-Projection(MVP) 행렬이 업데이트되며 회전하는 뼈대 코드 작성.
Recommended
Core Topic 02: 래스터화와 픽셀 물리학 (Rasterization & Depth)
- Why to Learn: 수리적 벡터인 삼각형이 모니터라는 네모난 픽셀 그리드로 뭉개질 때, 픽셀을 어떻게 칠하고 가려진 뒷면을 어떻게 지울 것인지 계산하기 위해서입니다.
- What to Learn:
- Concepts: 래스터화(Rasterization), 클리핑(Clipping).
- Skills: 심도 버퍼(Z-Buffer/Depth Testing), 백페이스 컬링(Back-face Culling), 안티앨리어싱(Anti-Aliasing).
- Tools: RenderDoc (프레임 디버거).
- Trade-offs: 거친 대각선 픽셀의 계단 현상(Aliasing)을 없애기 위해 화면을 4배 크게 그려서 압축하는 MSAA의 미학적 아름다움 vs 그로 인해 발생하는 GPU 메모리 용량 폭발.
- How to Learn:
- 1단계: 삼각형 뒷면에 있는 박스는 렌더링할 필요가 없습니다. Z-Buffer 배열을 만들어, 픽셀을 칠할 때마다 현재 픽셀의 카메라 거리를 기록해 두고, 새로 그릴 픽셀이 더 멀리 있으면 아예 그리기 연산을 스킵하는 최적화 로직을 이해합니다.
- 2단계: 카메라는 물체의 앞면만 보므로, 카메라를 등지고 있는 폴리곤의 뒷면(Normal Vector 활용)을 내적 연산으로 미리 솎아내어(Back-face Culling) 연산량을 절반으로 날려버리는 물리적 기하학을 스케치합니다.
- Implement: 래스터라이저의 Z-Buffer 알고리즘 로직을 Python 1D 배열 배열로 간단히 시뮬레이션하여, 앞의 물체가 뒤의 물체를 가리는 은면 제거(Hidden Surface Removal) 물리 증명 보고서.
Practical
Core Topic 03: 물리 기반 렌더링과 셰이더 (PBR & Shaders)
- Why to Learn: 똑같은 플라스틱 구슬도 '기름 묻은 쇠구슬'처럼 보이게 만들려면, 픽셀의 색상을 칠하는 공장(Shader)에 물리적인 빛 반사 공식을 주입해야 하기 때문입니다.
- What to Learn:
- Concepts: 셰이더 프로그래밍(GLSL/HLSL), 물리 기반 렌더링(PBR).
- Skills: 거칠기(Roughness), 금속성(Metallic), 알베도(Albedo), 노멀 매핑(Normal Mapping), 퐁 조명 모델(Phong Illumination: Ambient + Diffuse + Specular).
- Tools: ShaderToy.
- Trade-offs: 모든 삼각형마다 빛 공식을 정밀하게 계산하는 픽셀 셰이더(Pixel Shader)의 부하 vs 꼭짓점(Vertex)에서만 대충 계산하고 픽셀은 색을 섞어버리는 버텍스 셰이더(Gouraud Shading)의 저렴함 하지만 찰흙 같은 그래픽.
- How to Learn:
- 1단계: 옛날 게임의 플라스틱 같은 그래픽(Phong 모델)과 현대 게임의 실사 그래픽(PBR 모델)의 차이가, 빛이 표면에 맞고 미세한 굴곡(Microfacet)에 의해 어떻게 난반사되는지를 정의하는 에너지 보존 법칙을 지켰느냐의 차이임을 뜯어봅니다.
- 2단계: 울퉁불퉁한 벽돌담을 만들기 위해 10만 개의 삼각형을 깎는 대신, 삼각형 2개짜리 평면에 벽돌의 '기울기' 정보가 담긴 파란색 이미지(노멀 맵)를 덮어씌워 빛의 반사 각도만 속이는 셰이더 트릭을 실습합니다.
- Implement: ShaderToy 사이트에서 GLSL 코드를 쳐서, 밋밋한 구(Sphere) 표면에 노멀 매핑과 Specular(하이라이트) 반사광을 추가하여 젖은 진흙처럼 보이게 만드는 커스텀 프래그먼트 셰이더 작성.
Advanced
Core Topic 04: 전역 조명과 레이 트레이싱 (Global Illumination & Ray Tracing)
- Why to Learn: 그림자 속에 숨어있는 물체도 벽에 튕긴 간접광을 받아 은은하게 보여야 하는 '진짜 세상의 광학'을 실시간으로 추적하기 위해서입니다.
- What to Learn:
- Concepts: 광선 추적(Ray Tracing), 전역 조명(Global Illumination).
- Skills: 바운딩 볼륨 계층(BVH: Bounding Volume Hierarchy), 레이 마칭(Ray Marching), 스크린 스페이스 반사(SSR), 하드웨어 가속(RT Cores).
- Tools: DirectX Raytracing (DXR), Vulkan.
- Trade-offs: 카메라에서 화면의 모든 픽셀로 수백만 개의 광선을 쏘아 올려 반사, 굴절, 그림자를 완벽히 물리적으로 그리는 레이 트레이싱의 극강의 리얼리티 vs 이 짓을 초당 60번 하기 위해 필요한 천문학적인 GPU TFLOPS 연산력.
- How to Learn:
- 1단계: 전통적인 래스터화 방식에서는 '거울에 비친 물체'를 그릴 때 카메라를 거울 뒤로 한 번 더 옮겨서 씬을 두 번 렌더링해야 하는 비효율을 이해합니다.
- 2단계: 빛을 수천 번 튕기게 하는 레이 트레이싱에서 연산 폭발을 막기 위해, 공간을 큰 박스로 묶고 그 안의 작은 박스로 계속 쪼개들어가는 트리 구조(BVH)를 도입하여 광선이 빗나간 허공은 연산을 1초 만에 쳐내는 공간 분할 알고리즘을 해부합니다.
- Implement: 레이 트레이싱의 뼈대 논리(Ray-Sphere Intersection)를 구현하여, 빛의 위치와 구(Sphere)의 중심 거리에 따라 그림자가 생기는 수학적 충돌 판정 방정식을 푼 파이썬 시뮬레이션 코드.
7. Terminology
8. References
Primary References
- [CS2023: Graphics and Visual Computing] — 그래픽스 파이프라인, 좌표계 변환, 래스터화 및 광원 물리.
- [SWEBOK v3: Computing Foundations] — 하드웨어 병렬 처리 구조 및 CPU-GPU 동기화 역학.
Secondary References
- [Real-Time Rendering (Tomas Akenine-Möller)] — 물리 기반 렌더링(PBR), 셰이더 아키텍처 및 안티앨리어싱 기법.
- [OpenGL / Vulkan Programming Guide] — 로우 레벨 그래픽스 API의 메모리 관리 및 렌더 패스 최적화.
Industry References
- [NVIDIA Developer Documentation] — 실시간 레이 트레이싱(RTX), 텐서 코어(DLSS) 및 하드웨어 가속 구조.
- [Unreal Engine Rendering Architecture] — 디퍼드 렌더링(Deferred Rendering) 및 루멘(Lumen) 글로벌 일루미네이션.
9. Final Checklist
Primary Checklist
- 정점 데이터(3D 모델)가 클립 공간을 거쳐 화면 픽셀로 변환(Rasterization)되는 그래픽스 파이프라인의 물리적 단계를 정확히 통제하는가?
- 텍스처 맵핑과 물리 기반 렌더링(PBR)을 통해 금속, 플라스틱 등 표면 재질의 거칠기(Roughness)와 금속성(Metallic)을 빛 반사 수식으로 구현했는가?
Secondary Checklist
- CPU가 GPU에 내리는 명령(Draw Call) 횟수가 병목을 일으키지 않도록 객체 배칭(Batching)이나 인스턴싱(Instancing)을 적용했는가?
- 픽셀/프래그먼트 셰이더 내부에 조건문(if-else)이나 무거운 루프 연산을 최소화하여 수천 개의 GPU 스레드가 끊김 없이 병렬 실행되는가?
Industry Checklist
- 프레임 드롭(60fps 방어 실패) 상황에서 연산 부하를 줄이기 위해 해상도 동적 스케일링이나 DLSS/FSR 같은 AI 업스케일링 기법을 적용하는가?
- 씬(Scene)의 복잡도에 따라 즉시 렌더링(Forward Rendering)과 지연 렌더링(Deferred Rendering) 구조 중 조명(Light) 연산에 더 유리한 아키텍처를 선택했는가?