유니티 엔진 (Unity Engine)

유니티 그래픽스 최적화 - 2.렌더링 파이프라인

원소랑 2019. 8. 30. 19:29
728x90

.

.

책 읽으면서 대략적인 내용 정리.

이번엔 렌더링 파이프라인입니다.

기본적인 내용들이고 이미지 설명이 많아서 정리는 심플합니다.

자세한 설명은 책 본문에서 확인해주세요.

 

 


2. 렌더링 파이프라인 (Rendering Pipeline)

화면에 그려지는 과정, Graphics API 워크플로우

 

2-1 GPU의 의미

.

2-2 게임 루프

게임루프를 크게 묶어 보면 다음과 같다.

- 리소스 생성 및 초기화 (Initialization)

- 갱신 (물리, 입력, 로직, AI, 네트워크, 애니메이션 등)

- 렌더

- 종료 전 해제 (Decommissioning)

 

스크립트 라이프사이클 플로우차트 (Script Lifecycle Flowchart)

https://docs.unity3d.com/kr/2019.1/Manual/ExecutionOrder.html

 

2-3 렌더링 루프

오브젝트들은 순차적으로 그려진다.

 

2-4 렌더링 파이프라인

오브젝트 하나를 렌더링 하기 위한 데이터와 처리 흐름.

3D 오브젝트를 2D 이미지상으로 그리는 과정.

큰 덩어리로 간력화

[애플리케이션] -> [지오메트리] -> [래스터라이저]

 

01 애플리케이션 스테이지 (Application Stage)

실제 렌더링 파이프라인 진입 전까지의 과정 처리

 

02 지오메트리 스테이지 (Geometry Stage)

지오메트리 구성하는 버텍스와 폴리곤 처리.

월드 뷰 프로젝션 트랜스폼 (World View Projection Transform)

-> 클리핑 (Clipping)

-> 버텍스 쉐이더 (Vertex Shader)

= 메시의 버텍스들이 적절한 위치에 있도록 변환하는 역할.

(노멀, 버텍스 컬러도 버텍스 쉐이더에서 처리)

 

버텍스 쉐이더를 거쳐 트랜스폼들이 결정되고 나면 지오메트리 자동 생성.

-> 일부 최신 GAPI 에서는 테셀레이션 수행으로 지오메트리에 관여

 

버텍스 수가 많아지면 지오메트리 스테이지에서 병목 발생. 보여지지 않을 오브젝트를 최대한 커링해서 렌더링 파이프라인을 거치지 않도록 해줘야 함.

 

03 래스터라이저 스테이지 (Rasterizer Stage)

지오메트리가 어떤 픽셀에 어느 색으로 그려져야 하는지 처리하고 실제 그리는 과정.

프래그먼트(or 픽셀_ 쉐이더에서 결정된 픽셀 정보는 컬러 버퍼에 저장.

픽셀의 깊이값. 카메라로부터의 거리는 Z버퍼 혹은 뎁스버퍼

Z버퍼를 이용해 픽셀의 깊이를 판정해서 렌더링. 기본적인 보통 처리는 그리려는 픽셀의 Z버퍼에 있는 픽셀보다 앞에 있으면 그리는 식으로.

많은 칩셋들이 프래그먼트 쉐이더로 데이터를 넘기기 전에 Z 테스트를 거쳐 비용 절약.

 

프래그먼트(Fragment)는 화면상에 최종 픽셀이 되기 전의 데이터들. (용어상으론 그렇고, 프래그먼트 쉐이더 = 픽셀 쉐이더. 똑같음) 픽셀들의 최종 렌더링 색을 계산.

 

블렌딩은 투명한 오브젝트라면 겹치는 픽셀을 알파 블렌딩 해줘야 하는 부분. 알파값을 인자로 두 컬러를 혼합해서 최종 컬러를 결정.

 

2-5 정리

모든 오브젝트가 위 과정을 거쳐 버퍼에 차곡차곡 그려짐.

컬러 그레이딩, 블룸 등의 포스트 프로세스는 이 버퍼를 활용.

더블 버퍼링 = 뒷 버퍼에 그리고 앞 버퍼랑 교체

 

루프에서, 유니티는 기본적으로 프러스텀 컬링 수행하고, 추가적으로 오클루전 컬링 수행.

.

.

 

728x90
반응형