한 줄로 배터리를 절반 쓰는 방법
Esc

    한 줄로 배터리를 절반 쓰는 방법

    –Unity최적화렌더링

    지금까지의 글은 전부 같은 화면을 더 싸게 그리는 법 이었습니다. 여기서 방향을 한 번 바꿉니다. 덜 자주 그리는 것 도 선택지입니다.

    Application.targetFrameRate = 30;

    이 한 줄이 앞의 글 여러 편을 합친 것보다 효과가 클 수 있습니다.

    예산이 두 배가 된다

    지금 프레임이 20밀리초 걸린다고 해 봅시다. 60 목표면 매 프레임 미달 이라 화면이 계속 끊깁니다. 30 목표면 13밀리초가 남습니다. 완전히 안정적입니다.

    같은 코드입니다. 고친 게 하나도 없습니다.

    발열과 배터리

    모바일에서는 이게 프레임 이야기로 끝나지 않습니다.

    GPU 가 절반만 일하면 발열이 줄고, 발열이 줄면 스로틀링이 안 걸립니다. 스로틀링은 무서운 게, 처음 3분은 60fps 로 잘 돌다가 기기가 뜨거워지면 갑자기 40으로 떨어지고 다시는 안 올라옵니다.

    처음부터 30으로 고정한 쪽이, 60으로 돌다 스로틀링에 걸리는 쪽보다 체감이 더 안정적입니다. 40과 60을 오가는 것보다 30으로 붙어 있는 게 덜 거슬립니다.

    배터리도 같은 이야기입니다. 30분 플레이에 배터리가 20퍼센트 빠지는 게임과 10퍼센트 빠지는 게임은 리텐션이 다릅니다. 리뷰에 그대로 적힙니다.

    그런데 공짜는 아니다

    30fps 는 확실히 잃는 게 있습니다.

    • 입력 지연이 늘어납니다. 최악의 경우 한 프레임인 33밀리초입니다
    • 카메라 팬이 뚝뚝 끊겨 보입니다. 배경이 옆으로 흐르는 화면에서 특히 티가 납니다
    • 빠른 액션의 손맛이 죽습니다

    그래서 장르가 정합니다.

    장르 권장
    퍼즐, 카드, 방치형, 턴제 30 으로 충분합니다. 60일 이유가 없습니다
    횡스크롤 플랫포머, 러너 60이 낫습니다. 카메라가 계속 흐릅니다
    액션, 대전 60. 입력 지연이 곧 게임성입니다
    RPG, 시뮬레이션 30. 전투 중에만 60으로 올리는 것도 방법입니다

    런타임에 바꿀 수 있다는 것도 기억해 두면 좋습니다. 메뉴와 로딩 화면은 30, 전투는 60 식으로 장면마다 다르게 둘 수 있습니다. 그리고 설정 화면에 옵션으로 내놓으면 사용자가 알아서 고릅니다.

    vSync 와 같이 봐야 한다

    targetFrameRate 는 vSync 가 꺼져 있을 때만 동작합니다. QualitySettings.vSyncCount 가 0 이 아니면 그쪽이 이깁니다.

    모바일은 vSync 개념이 좀 다르고 targetFrameRate 가 먹지만, 에디터나 PC 빌드에서 “설정했는데 안 먹는다” 는 대개 이것입니다.

    QualitySettings.vSyncCount = 0;
    Application.targetFrameRate = 30;

    그리고 120Hz 기기가 늘었습니다. 아무것도 안 하면 Unity 가 기기 기본값을 따라가는데, 그러면 120으로 돌면서 배터리를 두 배로 씁니다. targetFrameRate 를 명시하지 않는 것은 “기기가 알아서” 가 아니라 “제일 비싼 쪽으로” 입니다.

    재는 법

    30과 60의 차이를 숫자로 보려면 실기에서 A/B 를 해야 합니다.

    • targetFrameRate 30과 60
    • Render Scale 0.8과 1.0

    네 조합을 각각 10분씩 돌립니다. 10분인 이유는 스로틀링이 그쯤에서 걸리기 시작해서입니다. 1분만 돌리면 네 조합이 다 잘 돌아서 아무것도 못 봅니다.

    기록할 것은 셋입니다. 실제 평균 fps, 기기 온도, 배터리 잔량. 온도는 안드로이드면 개발자 옵션이나 adb shell dumpsys battery 로 볼 수 있습니다.

    여기서 10분 뒤의 fps 가 진짜 숫자입니다. 시작 직후의 60fps 는 아무것도 증명하지 않습니다.

    이 표를 한 번 만들어 두면 “우리 게임은 30이 맞다” 를 감이 아니라 근거로 말할 수 있습니다. 그리고 대개 그 표를 보고 나면 최적화 우선순위가 바뀝니다.