Optimize

[Unity Optimize] 렌더링 파이프 라인

구찬애 2023. 7. 24. 14:31
반응형

자 먼저 게임루프..(뭐 다짜고짜?)

 

  • 초기화(Initialization)        : 리소스가 생성 과정
  • Update                              : 물리, Input, Logic, Animation...등의 연산과정
  • Render                              : 오브젝트를 화면에 그리는 과정
  • 해제(Decommissioning)  : 종료하기 위한 해제 과정

 

GameLoop

 

 

이 부분을 유니티 공식 매뉴얼에서는 아래와 같이 표현하고 있다.

 

유니티 공식 매뉴얼 : Script Lifecycle Flowchart / Unity 버전: 2022.3

 

자 그럼 이 거창한 차트에서 오브젝트 하나를 그리기 위한 렌더링 루프를 알아보자.

 

1개의 오브젝트를 그리기 위해서는 

  • 오브젝트 Mesh정보
  • 텍스쳐 Texture정보
  • 쉐이더 정보
  • 트랜스폼 정보
  • 기타등등

들이 필요 하며 이것은 또 랜더링 파이프라인을 정의 할수 있다.

 

랜더링 파이프라인이란?  3차원 이미지를 2차원 이미지로 표현하기 위한 단계

파이프라인을 크게 나눈 도식

애플리케이션 스테이지

: 말 그대로 애플리케이션 상에서 처리되는 단계를 의미

 

이걸 또 굳이 설명하자면

  • 본격적인 랜더링 파이프 라인에 들어오기 전의 CPU가 필요로 하는 연산들을 처리하는 과정
  • 예를 들면 컬링연산 / 애니메이션 / 뼈대위치 / 메시의 버텍스 등등

 

지오메트리

: 지오메트리를 구성하는 요소인 버텍스와 폴리곤을 처리하는 단계

  • 월드-뷰-프로젝션 트랜스폼
  • 클리핑
  • 버텍스 쉐이더

 

월드-뷰-프로젝션 트랜스폼

 : 모든 버텍스와 노멀 정보가 있는 로컬 스페이스의 정보를 월드좌표계(월드스페이스)로 바꾼후 다시 카메라 스페이스

   (즉 카메라의 위치와 방향을 가지므로 카메라에 상대적인 위치)로 변환하여 3D를 2D상의 위치로 바꾸는 포로젝션

 

클리핑

 : 어떤 배열을 대상으로 하여 배열 내 모든 값들 중 특정한 범위 내에 속하는 것들은 그대로 살리고 범위 바깥에 속하는 것들은 범위 경계값으로 대체하는 기법 / 카메라의 클립 공간으로 변환?

 

버텍스 쉐이더

 : 말 그대로 버텍스를 처리하는 쉐이더..를 일컬으며

월드-뷰-프로젝션 트랜스폼은 버텍스 쉐이더에서 메시를 버텍스로 행열을 곱해줌으로써 수행된다.

즉, 버텍스쉐이더는 메시의 버텍스들을 저적할 위치에 있도록 변화하는 역할을 수행한다.

 

래스터라이즈

: 메시의 폴리곤이 속한 영역을 화면의 픽셀로 매칭하는 과정

: 오브젝트를 그리는 픽셀만 걸러서 그 픽셀의 색을 결정하고 최종색을 입히는 과정

 

 

플래그먼트(픽셀) 쉐이더는 컬러버퍼와 별도로 픽셀의 깊이값을 갖는 버퍼로 이루어져 있는데 이때 깊이값은 카메라로 부터의 거리를 뜻하며 이를 Z or Depth Buffer라고 부른다.

 

뎁스버퍼 / Z 버퍼 (Depth Buffer /  Z Buffer)

: 각 픽셀이 카메라로 부터 얼마나 떨어져 있는지 거리값(깊이값)을 의미

이를 이용해 픽셀을 그릴때 다른 픽셀(먼저 그려진 픽셀)과 겹치는지 여부를 판단하여 겹치는 부분은 랜더링을 하지 않는 방법으로 그릴지 말지를 결정하기 위한 중요한 값..

 

블렌딩(Blending)

: 투명도를 가지는 오브젝트라면 픽셀을 랜더링 할 때 알파블랜딩 과정을 거친다.

픽셀의 알파값을 이용하여 픽셀 위치의 기존 컬러값과 적절하게 혼합하여 최종 출력 색상을 결정하게 된다.

 

 

 

정리하면..

 

 

랜더링파이프라인 정리

 

 

반응형