콘텐츠로 바로가기

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 학습이 아닙니다. 왜 셰이더 내부의 조건문(ifif-elseelse) 수치가 GPU 하드웨어에서 물리적인 '분기 지연(BranchBranch penaltypenalty)'을 유발하여 수리 성능을 급락시키는지 증명할 수 있어야 하며, **정밀도 수치(lowp, highp)**를 잘못 설정했을 때 모바일 하드웨어에서 발생하는 물리적 시각 노이즈를 논증하지 못한다면 셰이더 공학의 본질을 이해하지 못한 것입니다.

4. Prerequisites

  • Linear Algebra (Basic): 04-XX-XX의 행렬 곱셈 및 좌표계 변환 수리 물리 이해가 필수입니다.
  • GPU Architecture & Rasterization (Recommended): 12-05-01의 하드웨어 렌더링 수순 이해가 권장됩니다.

5. Learning Map

  1. Parallel Syntax: 한 줄의 코드가 수천 개의 코어에서 동시에 물리 구동되는 셰이더 언어의 철학을 배웁니다.
  2. Vertex Transformation: 정점 수치를 조작하여 개체의 물리적 형태를 뒤틀거나 애니메이션합니다.
  3. Pixel Painting: 조명 수치와 색상 수치를 결합하여 각 픽셀의 최종 물리 에너지를 산출합니다.
  4. 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 등 수리적 성분 재배치 물리 기술
  • How to Learn:
    • ShaderToy 같은 하드웨어 도구에서 한 줄의 코드로 화면 전체의 물리 색상을 수리적으로 바꾸는 실습
    • **정밀도 선언(PrecisionPrecision)**에 따른 부동 소수점 수치 오차를 모바일 하드웨어에서 대조 관찰
  • Implement: 입력 좌표 수치에 따라 무지개색 그라데이션을 물리 생성하는 기초 Rainbow_Fragment_Shader

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: 시간(tt) 수치에 따라 구(Sphere)의 형태를 물리적으로 맥동시키는 Dynamic_Vertex_Shader

Practical

Core: 조명 모델과 물리 기반 쉐이딩 (Lighting Mechanics)

  • Why to Learn: 빛과 물질의 물리적 상호작용 수치를 코드로 모사하여 실재감을 부여하기 위해서입니다.
  • What to Learn:
    • Phong Lighting Model: Ambient, Diffuse, Specular 3대 물리 항의 수리적 결합
    • PBR (Physically Based Rendering): 에너지 보존 법칙을 따르는 하이엔드 수리 쉐이딩
    • Shadow Mapping Logic: 깊이 수치 텍스처를 이용한 그림자 물리 판별 수순
  • How to Learn:
    • 동일한 물리 모델에 PhongPBR 수치를 각각 적용하고, 어느 쪽이 수리적으로 더 현실적인 빛을 발하는지 분석 실습
    • Normal Mapping 수치 1px이 낮은 다각형(LowLow-polypoly) 개체의 물리적 정밀도를 얼마나 상향시키는지 측정 훈련
  • Implement: 물질의 거칠기(RoughnessRoughness)와 금속성(MetallicMetallic) 수치를 변수로 받는 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 (빛 번짐) 수치를 구현하며, 물리적 임계치(ThresholdThreshold)가 수리적 미감에 주는 영향 분석 실습
    • N-body Simulation 수치를 컴퓨트 셰이더로 물리 병렬화하여 CPU 대비 성능 상향 수치 입증 프로젝트
  • Implement: 전체 물리 화면의 채도와 대비 수치를 실시간 수리 보정하는 Post_Process_Engine

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
Shader GPU 상에서 실행되어 정점의 위치나 픽셀의 색상을 수리적으로 결정하는 물리 지시어 세트입니다. 기본 제어 단위 Script / Core Program 그림자 전용 아님 P1:CS2023 core
GLSL OpenGL 표준에 따라 작성되는 높은 수준의 셰이딩 수리 언어입니다. 기본 언어 표준 HLSL / Cg WebGL 크로스 플랫폼임 Industry core
Uniform CPU에서 GPU로 한 번 전송되어 해당 프레임 동안 모든 셰이더에서 공유되는 수리적 상수 값입니다. 추천 데이터 통로 Variable / Global Attribute 매 픽셀 안 변함 P1:CS2023 core
Normal Map 물체 표면의 세밀한 물리적 요철 정보를 수리적 기울기(벡터)로 저장한 수치 이미지입니다. 실무 디테일 상향 Texture / Bump Mesh 가상의 굴곡임 Industry core

8. References

Primary

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

  • '정점 셰이더'와 '프래그먼트 셰이더' 사이에서 데이터 수치가 물리적으로 어떻게 '보간(InterpolateInterpolate)'되는지 설명 가능한가? (P1)
  • 셰이더 내부의 수리적 '연산 강도(ArithmeticArithmetic intensityintensity)'가 GPU 하드웨어 발열 수치에 미치는 영향을 논증할 수 있는 가? (P1)

Secondary

  • 'Uniform' 수치 업데이트 횟수가 늘어날 때 하드웨어에서 발생하는 수리적 '스톨(StallStall)' 현상을 소통 가능한가?
  • Multi-pass Rendering 수순을 통해 복잡한 물리 효과를 단계별 수리 수치로 분해하여 구현할 수 있는 가?

Industry

  • 실무 셰이더 검수 시, 모바일 하드웨어의 Register usage 수치를 분석하여 수리적 병렬 효율을 최적화할 수 있는 가? (SFIA)
  • Frame Debugger 수치를 통해 특정 셰이더가 물리적 '오버드로(OverdrawOverdraw)' 수치를 얼마나 폭증시키는지 진단할 수 있는 가?