내가 일하며 알게 된 프로그래밍
article thumbnail

게임 설정의 최적화 및 옵션 관련 부분을 개발하다보면,

흔히 말하는 풀옵, 상옵, 하옵 등 성능 관련을 작업하는 날이 올 것이다.

오늘은 렌더링의 주기를 관리하는 "온디맨드 렌더링" 에 대해 알아보자.

 

렌더링 주기를 관리하는 방법이라면

Application.targetFrameRate

 

혹은

QualitySettings.vSyncCount

 

해당 프로퍼티를 수정해서 렌더링 주기를 관리할 수 있었다.

 

하지만 이러한 접근 방식은 렌더링 뿐만 아니라 Unity가 실행하는 모든 함수 주기에도 영향을 주기 때문에

OnDemandRendering 을 통해 플레이어 루프 주기와 렌더링 주기를 분리할 수 있다.

 

쉽게 말해 매 주기마다 체크하는 터치이벤트는 그대로 60프레임을 기준으로 체크를 하면서

렌더링은 이보다 낮은 프레임으로 표시할 수 있다는 말이다.

 

왜 굳이 이런 기능을 써야할까?

게임에서 전투화면은 좀 더 부드럽게 표현하기 위해 빠른 프레임 주기를 갖지만

화면을 꽉 채우는 UI화면을 띄울때나 버튼 클릭만으로 이루어진 화면을 표현할 때는

굳이 빠른 프레임 주기가 필요없다.

 

자동차 운전으로 비교해서 생각해보면

주행중 전방 및 속도계기판은 렌더링 주기가 빠를수록 좋을 것이다.

하지만 센터페시아부분의 에어컨 온도, 미디어가 재생되는 네이게이션 화면 등 보다 정적인 표현이 가능한 곳은

굳이 렌더링 주기가 빠를 필요가 없는 것과 비슷하게 생각하면 된다.

 

다시와서.

OnDemandRendering의 주요 프로퍼티를 살펴보자

OnDemandRendering.renderFrameInterval

가장 중요한 프로퍼티로 현재 프레임 속도 간격을 설정한다.

예를들어 targetFrameRate가 60프레임 일때

renderFrameInterval 해당 값을 2로 설정하면, 두 프레임당 1번 렌더링하기 때문에

렌더링 주기는 30fps가 된다.

다시 원래의 프레임으로 돌아가기 위해선 0이나 1로 재설정해준다.

 

OnDemandRendering.effectiveRenderFrameRate

현재 앱에서 렌더링의 속도를 추정할 수 있다.
(*추정값은 정확한 값이 아니며 다른 작업에 의해 렌더링 시 마다 변할 수 있다)

 

OnDemandRendering.renderFrameInterval

해당 변수를 통해 현재 프레임이 화면에 렌더링 되는지 체크할 수 있다.

 

더 정확한 정보는 유니티 공식문서를 통해 확인 할 수 있도록하자.

profile

내가 일하며 알게 된 프로그래밍

@CtrlVGames