Shader Programming (GLSL-HLSL)
GPU 하드웨어의 병렬 코어에 직접 수리 명령을 내리는 셰이더 언어(GLSL, HLSL)의 문법과, 정점 및 픽셀의 물리 속성을 시뮬레이션하는 프로그래머블 파이프라인을 다룹니다.
sys.entry
M
Me
hyunyoun's Blog
posts6 min read
1. Overview
셰이더 프로그래밍(Shader Programming, SHP)은 CPU의 범용 제어를 벗어나 GPU 하드웨어 유닛에 직접 수리적인 '빛과 형태의 마법'을 주입하는 '병렬 수치 제어 공학'입니다.
학습자는 표준 셰이닝 언어인 **GLSL(OpenGL Shading Language)**과 **HLSL(High-Level Shading Language)**의 수리적 문법을 배웁니다. 특히, 기하학적 형태를 변형하는 정점(Vertex) 셰이더와 물리적 색상을 결정하는 프래그먼트(Fragment) 셰이더의 역학을 익힙니다. 이를 통해 정형화된 고정 기능을 넘어 개발자가 의도한 독창적인 시각 물리를 하이엔드 수치로 구현해 내는 그래픽스 거버넌스 역량을 확보합니다.
2. Scope & Boundaries
In-Scope
- Shading Language Syntax:
vec3, mat4, uniform, varying등 병렬 연산 특화 수리 문법 - Programmable Pipeline Stages: Vertex, Geometry, Tesselation, Fragment 셰이더의 물리적 연결
- Material Simulation Physics: 금속, 유리, 피부 등 물질의 물리적 광택 수치를 수치적으로 모사
- Post-processing Dynamics: 렌더링된 물리 화면에 블러(Blur), 샤픈(Sharpen) 등 수평적 수치 연산 적용
- Compute Shader Logic: 그래픽스 이외의 일반 수리 연산(GPGPU)을 GPU 하드웨어에 위임하는 법
Out-of-Scope
- 특정 게임 상용 엔진(Unity/Unreal)의 노드 기반 비주얼 셰이더 에디터 사용법 (툴 응용 영역)
- 셰이더 코드를 기계어로 변환하는 하드웨어 드라이버 수준의 드라이버 물리 (05-02-XX 영역에서 분담)
Boundaries
- SHP vs. C++/Python: 일반 프로그래밍이 '순차적 수리 논리'에 집중한다면, SHP는 '매 프레임마다 수천만 번 동시에 수행되는 물리적 픽셀 연산'이라는 병렬성 극대화에 집중하여 구분합니다.
3. Counterexample
- 단순히 "복사해서 붙여넣기"라 설명하는 것은 SHP 학습이 아닙니다. 왜 셰이더 내부의 조건문(-) 수치가 GPU 하드웨어에서 물리적인 '분기 지연( )'을 유발하여 수리 성능을 급락시키는지 증명할 수 있어야 하며, **정밀도 수치(lowp, highp)**를 잘못 설정했을 때 모바일 하드웨어에서 발생하는 물리적 시각 노이즈를 논증하지 못한다면 셰이더 공학의 본질을 이해하지 못한 것입니다.
4. Prerequisites
- Linear Algebra (Basic): 04-XX-XX의 행렬 곱셈 및 좌표계 변환 수리 물리 이해가 필수입니다.
- GPU Architecture & Rasterization (Recommended): 12-05-01의 하드웨어 렌더링 수순 이해가 권장됩니다.
5. Learning Map
- Parallel Syntax: 한 줄의 코드가 수천 개의 코어에서 동시에 물리 구동되는 셰이더 언어의 철학을 배웁니다.
- Vertex Transformation: 정점 수치를 조작하여 개체의 물리적 형태를 뒤틀거나 애니메이션합니다.
- Pixel Painting: 조명 수치와 색상 수치를 결합하여 각 픽셀의 최종 물리 에너지를 산출합니다.
- Beyond Rendering: 컴퓨트 셰이더를 통해 GPU를 고성능 수리 물리 계산기로 활용하는 하이엔드 기술을 완성합니다.
6. Learning Topics
Basic
Core: 셰이더 언어의 수리적 구조 (Language Fundamentals)
- Why to Learn: 일반 언어와 다른 GPU 전용 수리 데이터 타입과 병렬 실행 모델을 이해하기 위해서입니다.
- What to Learn:
- Vector & Matrix Ops:
dot, cross, reflect등 벡터 수리 기본 연산 - Storage Qualifiers:
uniform(상수),attribute(입력),varying(보간) 수치 관리 - Swizzling technique:
vec.bgra등 수리적 성분 재배치 물리 기술
- Vector & Matrix Ops:
- How to Learn:
- ShaderToy 같은 하드웨어 도구에서 한 줄의 코드로 화면 전체의 물리 색상을 수리적으로 바꾸는 실습
- **정밀도 선언()**에 따른 부동 소수점 수치 오차를 모바일 하드웨어에서 대조 관찰
- Implement: 입력 좌표 수치에 따라 무지개색 그라데이션을 물리 생성하는 기초
Rainbow_Fragment_Shader
Recommended
Core: 정점 변환과 기하 물리 (Vertex Dynamics)
- Why to Learn: 3D 공간의 수리적 좌표를 화면 속 물리적 화소 위치로 정확히 투영하기 위함입니다.
- What to Learn:
- MVP Matrices: Model, View, Projection 행렬의 수리적 합성 수순
- Normal Transformation: 물리적 반사 수치를 위한 법선 벡터의 수리적 보정
- Displacement Mapping: 텍스처 수치를 활용해 정점을 물리적으로 돌출시키는 기술
- How to Learn:
sin함수를 사용하여 정점의 수평 수치를 물리적으로 흔들며 물결 애니메이션을 수리 구현하는 실습- Skinning (뼈대 연동) 수치를 적용하여 3D 캐릭터의 관절이 물리적으로 부드럽게 꺾이도록 수칠 최적화
- Implement: 시간() 수치에 따라 구(Sphere)의 형태를 물리적으로 맥동시키는
Dynamic_Vertex_Shader
Practical
Core: 조명 모델과 물리 기반 쉐이딩 (Lighting Mechanics)
- Why to Learn: 빛과 물질의 물리적 상호작용 수치를 코드로 모사하여 실재감을 부여하기 위해서입니다.
- What to Learn:
- Phong Lighting Model:
Ambient, Diffuse, Specular3대 물리 항의 수리적 결합 - PBR (Physically Based Rendering): 에너지 보존 법칙을 따르는 하이엔드 수리 쉐이딩
- Shadow Mapping Logic: 깊이 수치 텍스처를 이용한 그림자 물리 판별 수순
- Phong Lighting Model:
- How to Learn:
- 동일한 물리 모델에 Phong과 PBR 수치를 각각 적용하고, 어느 쪽이 수리적으로 더 현실적인 빛을 발하는지 분석 실습
- Normal Mapping 수치 1px이 낮은 다각형(-) 개체의 물리적 정밀도를 얼마나 상향시키는지 측정 훈련
- Implement: 물질의 거칠기()와 금속성() 수치를 변수로 받는
PBR_Standard_Shader
Advanced
Core: 포스트 프로세싱과 컴퓨트 하드웨어 (Advanced Governance)
- Why to Learn: 렌더링된 물리 결과물을 수리적으로 재가공하거나 그래픽 이외의 물리 시뮬레이션을 GPU에 명령하기 위함입니다.
- What to Learn:
- Screen-space Effects: 블룸(Bloom), DOF, SSAO 등 화면 수치 기반의 물리 효과
- Kernel Convolution Math: 픽셀 주변 수치들을 가중 평균하여 물리 필터를 적용하는 법
- GPGPU Architecture: 컴퓨트 셰이더를 통한 수만 개의 물리 입자 수리 연산
- How to Learn:
- Bloom Effect (빛 번짐) 수치를 구현하며, 물리적 임계치()가 수리적 미감에 주는 영향 분석 실습
- N-body Simulation 수치를 컴퓨트 셰이더로 물리 병렬화하여 CPU 대비 성능 상향 수치 입증 프로젝트
- Implement: 전체 물리 화면의 채도와 대비 수치를 실시간 수리 보정하는
Post_Process_Engine
7. Terminology
8. References
Primary
- [P1] CS2023 - Graphics & Interactive Techniques - Shader Programming — Academic curricula.
- [The Book of Shaders] Patricio Gonzalez Vivo — The most accessible guide to shader physics.
Secondary
- [OpenGL Shading Language] Randy Rost — The official specification and guide.
- [GPU Pro] various authors - High-end industrial shader tricks and physics.
Industry
- [ShaderToy: Community Engine] — Real-time social platform for shader physics mastery.
- [Unity/Unreal Shader Docs] — Practical implementation in commercial hardware engines.
9. Final Checklist
Primary
- '정점 셰이더'와 '프래그먼트 셰이더' 사이에서 데이터 수치가 물리적으로 어떻게 '보간()'되는지 설명 가능한가? (P1)
- 셰이더 내부의 수리적 '연산 강도( )'가 GPU 하드웨어 발열 수치에 미치는 영향을 논증할 수 있는 가? (P1)
Secondary
- 'Uniform' 수치 업데이트 횟수가 늘어날 때 하드웨어에서 발생하는 수리적 '스톨()' 현상을 소통 가능한가?
- Multi-pass Rendering 수순을 통해 복잡한 물리 효과를 단계별 수리 수치로 분해하여 구현할 수 있는 가?
Industry
- 실무 셰이더 검수 시, 모바일 하드웨어의 Register usage 수치를 분석하여 수리적 병렬 효율을 최적화할 수 있는 가? (SFIA)
- Frame Debugger 수치를 통해 특정 셰이더가 물리적 '오버드로()' 수치를 얼마나 폭증시키는지 진단할 수 있는 가?