3D Graphics

Rendering Pipeline 렌더링 파이프라인

now2ah 2025. 10. 16. 23:28

Rendering Pipeline

  • 3차원 데이터를 2차원 화면 이미지로 변환하는 과정

Application Stage - CPU에서 렌더링에 필요한 데이터를 준비

  • Scene의 모든 3D 모델과 카메라, 광원 데이터들의 렌더링 순서와 방법을 결정
  • 3D 모델의 기하학 정보(위치, 노멀, UV 좌표, 색상 등)를 담은 Vertex Buffer 생성
  • Vertex Shader에서 사용할 Transformation Matrices(변환 행렬) 계산 (MVP)
  • Culling - 화면에 보이지 않을 객체를 제거
    • View Frustum Culling - 카메라 절두체 밖 객체를 제외
    • Occlusion Culling - 다른 객체에 가려진 객체를 제외
  • Draw Call
    • CPU에서 준비된 데이터를 바탕으로 객체를 GPU에게 렌더링 하라는 명령 호출
    • Vertex Buffer 주소, Shader Program, Texture, Material, Transformation Matrices 전달
    • 성능
      • Draw Call 시 Render State 재설정으로 상당한 CPU 시간 소모. (CPU Bound)
        • 그래픽스 API 호출 오버헤드
        • 리소스 바인딩 (Shader, Texture, Vertex Buffer)

Geometry Stage - GPU에서 3D 모델의 Vertex 데이터 처리

  • Vertex Shader - 3D 좌표 변환과 조명 계산을 위한 데이터 준비
    • 각 Vertex에 대해 한 번씩 실행
    • MVP 변환 - 행렬 곱셈을 통해 Vertex 위치 변환
      • Model Matrix - 로컬 좌표계 → 월드 좌표계 변환
      • View Matrix - 월드 좌표계 → 카메라 좌표계 변환
      • Projection Matrix - 카메라 좌표계 → 클립 공간 변환
        • 4차원 동차 좌표계 w 값으로 나누어 사용하여 원근감 반영
        • 정규화 되어 NDC 좌표계 변환
    • Vertex Attribute (Color, UV Coordinate..) 출력
  • Clipping
    • Clip space 기준으로 View Frustum 외부를 제거
  • Viewport Transformation - NDC 좌표계를 모니터 화면 2D 픽셀 좌표로 매핑

Rasterization Stage - 3D Geometry를 2D 화면 Pixel로 변환

  • Fixed-Function Stage(고정 기능)와 Programmable Stage(프로그래밍 가능) 단계로 나누어짐
  • Triangle Setup (삼각형 설정)
    • Viewport Transfromation (뷰포트변환) 거친 2D 화면 좌표의 세 Vertex로 삼각형의 가장자리 방정식과 내부 영역 정의
  • Triangle Traversal (삼각형 순회)
    • 설정된 삼각형 영역 내부의 모든 Pixel 식별 → Fragment 후보
  • Interpolation (보간)
    • 삼각형을 이루는 세 Vertex들의 모든 Attributes를 삼각형 내부의 각 Fragment로 보간하여 전달.
    • 거리에 비례하여 값을 계산하는 Barycentric Coordinates를 주로 사용.
  • Back-face Culling (후면 제거) - Winding Order(정점 순서)로 카메라를 등진 삼각형 전체를 파이프라인에서 제거
  • Fragment Shader - Rasterize를 거친 각 Fragment의 화면에 그려질 최종 픽셀 색상을 계산
    • Inputs
      • Interpolated Vertex Attributes (보간 된 정점 속성)
      • Uniform Variables - Draw Call 시 전달 된 렌더링 상태 관련 Data (MVP, View Position, Material Data.. 등)
      • Texture Data
    • Shading - 물체가 빛과 상호작용하는 방식을 수학적으로 모델링
      • 프로그래밍 가능 단계
      • 광원에 따른 조명 계산 (PBR 물리 기반 렌더링)
      • Texturing
        • Albedo Map - 기본 색상 (Diffuse 확산광)
        • Normal Map - 표면 굴곡 정보

Output Merge Stage - Fragment의 정보를 Render Target에 기록하는 과정

  • Fragment Shader의 출력과 Buffer에 존재하는 데이터와 비교
  • Depth Test / Z-Test
    • Buffer에 저장된 깊이 값을 비교, 더 가까울 때 통과
  • Stencil Test
    • Stencil Buffer에 저장된 Masking 값을 비교하여 렌더링 결정
  • Blending - 투명/반투명 여부에 따라 가중치에 따른 색상 혼합
  • 최종적으로 Frame Buffer에 기록