경일게임아카데미 멀티 디바이스 메타버스 플랫폼 개발자 양성과정 20220510 2022/04/04~2022/12/13

Jinho Lee·2022년 5월 10일
0

경일 메타버스 20220510 6주차 2일 수업내용. 프레임 워크 - Game Loop, 더블 랜더링, 델타 타임, 특강 - 랜더링 파이프라인

프레임 워크가 뭔지, 어떻게 만들고 작동하는 건지 수박 겉핥기 식으로 배운 느낌이다. 나중에라도 반드시 제대로 학습해야겠다.

프레임 워크

  • 프로그램이 어떻게 동작해야 하는지를 정의하는 뼈대. 게임의 경우 Game Loop를 반드시 포함한다.

  • 가장 간단한 Game Loop

    1. 입력 처리 processInput

    2. 게임 업데이트 update

    3. 게임 출력 render

  • https://gameprogrammingpatterns.com/game-loop.html

  • 게임 프레임 워크 관련 책
    • Game Engine Architecture
    • 게임엔진 아키텍쳐
  • 마이크로소프트 관련 시스템프로그래밍 검색 : msdn
    ex) msdn CreateConsoleScreenBuffer() 검색

더블 버퍼링

  • 화면을 두 개 만들어 스왑

  • 내가 보고 있는 장면을 지우고 다음 장면을 출력하면 화면이 찢어져 버리는 tearing이라는 현상이 일어남. → 그 방지를 위해 더블 버퍼링 사용.

  • https://gameprogrammingpatterns.com/double-buffer.html

델타 타임

  • 프레임 간의 시간, 이전 프레임으로부터 현재 프레임을 시작할 때까지 걸린 시간
  • clock 함수를 이용해 단위 시간을 준비함으로써, 기기 간 발생하는 프레임 처리 속도의 차이를 맞추어주는 역할을 한다.

코드

랜더링 파이프라인 (Rendering Pipeline)

  • 3차원 공간(world space)의 물체가 있을 때, 이를 바라보는 시점(카메라)을 기준으로 2차원 이미지(모니터 화면)로 출력하는데 필요한 일련의 단계들.

랜더링(Rendering)

  • 컴퓨터 프로그램을 사용하여 모델 또는 이들을 모아놓은 장면인 씬 파일(scene file)로부터 영상을 만들어내는 과정

  • GPU(Graphic Processing Unit)
    그래픽 처리, 특히 3D 데이터를 빠르게 처리하기 위한 장치
    VGA(그래픽 카드)에 내장되어 있는 칩

셰이더(Shader)

  • 3D 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색을 정해주는 함수,
    화면에 출력할 픽셀의 위치와 색상을 결정하는 함수.

랜더링 파이프라인이란?

  1. 입력 조립 단계 (Input Assembler, IA) : 데이터(점)를 입력 받아서

  2. 정점 셰이더 (Vertex Shader) : 각 점들에 대한 변환을 거쳐서

  3. 래스터라이저 (Rasterizer) : 각 점들의 정보를 이용하여 실제 화면에 출력할 픽셀 정보를 계산하고

  4. 픽셀 셰이더 (Pixel Shader) : 각 픽셀의 색상을 결정한 다음

  5. 출력 병합기 (Output Merger) : 화면에 출력한다.

입력 조립 단계 (Input Assembler, IA)

  • 정점 (Vertex)

    • 3차원 공간의 위치, 컬러, 추가적인 정보(법선 벡터, 텍스쳐 좌표)
  • 정점 버퍼 (Vertex Buffer)

    • 정점을 모아 놓은 메모리, 연속된 공간
  • 기본 도형 (Primitive)

    • 선분, 삼각형
  • 기본 도형 위상 구조 (Primitive topology)

    • 정점의 형식 (정점 위치, 색상 등)
  • 색인 (Index)

    • 기본 도형을 표현하기 위해서 사용된 색인 (Index)을 저장한 메모리, 연속된 공간
  • 색인 버퍼 (Index Buffer)

    • 색인을 모아 놓은 메모리, 연속된 공간
  • 입력 조립 단계 (Input Assembler, IA)

    메모리로부터 정점 버퍼, 색인 버퍼를 읽고 이 정보를 기준으로 정점들이 어떻게 연결되어 있는 지에 따라 어떤 기본 도형을 형성하는지 결정하는 단계

  • 정점 셰이더 단계 (Vertex Shader, VS)

    입력 조립 단계에서 조립된 삼각형 (Primitive)의 각 정점들에 대한 연산을 수행.

변환 (Transform)

  • 공간 (space)을 바꾼다.

    • 이동 (translate)

    • 비례 (scale)

    • 회전 (rotation)

  • 표현 형식은 행렬(Matrix)

투영 (Projection)

  • 시야 공간의 정점을 2차원 공간에 표현하기 위해서 정점 위치를 재계산한다.

시야 공간

  • 카메라 기준으로 바라보는 공간

    • 같은 위치의 오브젝트도 카메라의 위치에 따라 다르게 보인다.

    • 표현의 한계 때문에 시야 영역이 한정 되어 있다. 이 영역을 시야 절두체 (View Frustum)이라 한다.

동차 절단 공간 (Clip Space)

  • 시야 공간의 정점을 2차원으로 표현하기 위한 공간

    깊이와 원근감을 표현 가능

    볼 수 없는 정점을 절단

테셀레이션 (Tessellation)

  • 3차원 물체를 표현하는 삼각형들을 더 잘게 쪼개서 새로운 삼각형들을 만드는 과정

    • LOD(Level-Of-Detail)

    • 카메라에 가까운 삼각형들은 표현하는 삼각형의 양을 늘려 정밀도를 높이고, 먼 삼각형들은 단순하게 표현하는 기법

    • 헐 셰이더 (Hull Shader) → 테셀레이터 (Tessellator) → 영역 셰이더 (Domain Shader)로 3단계로 수행된다.

기하 셰이더 (Geometry Shader)

  • 기하 구조를 동적으로 파이프라인에 추가하거나 제거하는 능력

래스터라이저 (Rasterizer)

  • 래스터화 (Rasterization)

    • 변환된 정점들로 삼각형들을 조립한 후, 각 삼각형의 정점 데이터들 간의 보간 (interpolation)을 통해서 삼각형 내부를 차지하는 프래그먼트(fragment)를 생성

    • 프래그먼트

      한 픽셀을 출력하는데 필요한 데이터의 총칭
      컬러, 노멀, UV(텍스터 좌표) 등

    1. 절단 (Clipping)

    2. 후면 선별 (Backface culling)

    3. 원근 분할 (Perspective Division)

      • NDC(Normalized Device Corridnates) 공간
    4. 뷰포트 변환 (Viewport transform)

    5. 스캔 변환 (Scan transform)

픽셀 셰이더 (Pixel Shader)

  • 각각의 픽셀에 대해서 연산을 실행해 최종 컬러값 결정

    • 보간된 정점 특성들을 입력 받아서 하나의 색상을 계산

출력 병합기 (Output Merger, OM)

  • 최종적으로 픽셀의 색상을 생성해 렌더 타깃으로 출력

    • 깊이 판정

    • 스텐실 판정

    • 블렌딩

  • 추천 책 : DirectX 12를 이용한 3D 게임 프로그래밍 입문

0개의 댓글