경일 메타버스 20220510 6주차 2일 수업내용. 프레임 워크 - Game Loop, 더블 랜더링, 델타 타임, 특강 - 랜더링 파이프라인
프레임 워크가 뭔지, 어떻게 만들고 작동하는 건지 수박 겉핥기 식으로 배운 느낌이다. 나중에라도 반드시 제대로 학습해야겠다.
프로그램이 어떻게 동작해야 하는지를 정의하는 뼈대. 게임의 경우 Game Loop를 반드시 포함한다.
가장 간단한 Game Loop
입력 처리 processInput
게임 업데이트 update
게임 출력 render
- 게임 프레임 워크 관련 책
- Game Engine Architecture
- 게임엔진 아키텍쳐
- 마이크로소프트 관련 시스템프로그래밍 검색 : msdn
ex) msdn CreateConsoleScreenBuffer() 검색
화면을 두 개 만들어 스왑
내가 보고 있는 장면을 지우고 다음 장면을 출력하면 화면이 찢어져 버리는 tearing이라는 현상이 일어남. → 그 방지를 위해 더블 버퍼링 사용.
컴퓨터 프로그램을 사용하여 모델 또는 이들을 모아놓은 장면인 씬 파일(scene file)로부터 영상을 만들어내는 과정
GPU(Graphic Processing Unit)
그래픽 처리, 특히 3D 데이터를 빠르게 처리하기 위한 장치
VGA(그래픽 카드)에 내장되어 있는 칩
입력 조립 단계 (Input Assembler, IA) : 데이터(점)를 입력 받아서
정점 셰이더 (Vertex Shader) : 각 점들에 대한 변환을 거쳐서
래스터라이저 (Rasterizer) : 각 점들의 정보를 이용하여 실제 화면에 출력할 픽셀 정보를 계산하고
픽셀 셰이더 (Pixel Shader) : 각 픽셀의 색상을 결정한 다음
출력 병합기 (Output Merger) : 화면에 출력한다.
정점 (Vertex)
정점 버퍼 (Vertex Buffer)
기본 도형 (Primitive)
기본 도형 위상 구조 (Primitive topology)
색인 (Index)
색인 버퍼 (Index Buffer)
입력 조립 단계 (Input Assembler, IA)
메모리로부터 정점 버퍼, 색인 버퍼를 읽고 이 정보를 기준으로 정점들이 어떻게 연결되어 있는 지에 따라 어떤 기본 도형을 형성하는지 결정하는 단계
정점 셰이더 단계 (Vertex Shader, VS)
입력 조립 단계에서 조립된 삼각형 (Primitive)의 각 정점들에 대한 연산을 수행.
공간 (space)을 바꾼다.
이동 (translate)
비례 (scale)
회전 (rotation)
표현 형식은 행렬(Matrix)
카메라 기준으로 바라보는 공간
같은 위치의 오브젝트도 카메라의 위치에 따라 다르게 보인다.
표현의 한계 때문에 시야 영역이 한정 되어 있다. 이 영역을 시야 절두체 (View Frustum)이라 한다.
시야 공간의 정점을 2차원으로 표현하기 위한 공간
깊이와 원근감을 표현 가능
볼 수 없는 정점을 절단
3차원 물체를 표현하는 삼각형들을 더 잘게 쪼개서 새로운 삼각형들을 만드는 과정
LOD(Level-Of-Detail)
카메라에 가까운 삼각형들은 표현하는 삼각형의 양을 늘려 정밀도를 높이고, 먼 삼각형들은 단순하게 표현하는 기법
헐 셰이더 (Hull Shader) → 테셀레이터 (Tessellator) → 영역 셰이더 (Domain Shader)로 3단계로 수행된다.
래스터화 (Rasterization)
변환된 정점들로 삼각형들을 조립한 후, 각 삼각형의 정점 데이터들 간의 보간 (interpolation)을 통해서 삼각형 내부를 차지하는 프래그먼트(fragment)를 생성
프래그먼트
한 픽셀을 출력하는데 필요한 데이터의 총칭
컬러, 노멀, UV(텍스터 좌표) 등
절단 (Clipping)
후면 선별 (Backface culling)
원근 분할 (Perspective Division)
뷰포트 변환 (Viewport transform)
스캔 변환 (Scan transform)
각각의 픽셀에 대해서 연산을 실행해 최종 컬러값 결정
최종적으로 픽셀의 색상을 생성해 렌더 타깃으로 출력
깊이 판정
스텐실 판정
블렌딩
- 추천 책 : DirectX 12를 이용한 3D 게임 프로그래밍 입문