Skip to content

브라우저 타이밍 (Browser Timings)

이 페이지는 Application.targetFrameRate 매개변수와 관련된 WebGL 아키텍처의 기술적 한계에 대해 자세히 설명합니다.

Unity 프로젝트를 WebGL용으로 컴파일할 때 Application.targetFrameRate 매개변수는 엔진의 내부 프레임 한도만 변경하는 것이 아니라 메인 루프가 실행되는 브라우저 기본 API도 수정합니다.

무제한 (Uncapped) (requestAnimationFrame)

프레임 속도 제한을 해제하면(Unity 버전에 따라 Application.targetFrameRate-1 또는 0으로 설정) Emscripten 컴파일러가 Unity의 메인 루프를 브라우저 API window.requestAnimationFrame에 직접 연결합니다.

  • 장점: 웹에서 가장 기본적이고 원활하며 정확한 렌더링 방법입니다. 브라우저는 모니터의 화면 주사율(VSync)과 통화를 자동으로 동기화합니다.
  • 분석: cpuMainThreadFrameTime 지표(WebAP에서 읽음)는 CPU가 물리 및 스크립트를 계산하는 데 소비한 실제 시간을 반영하게 됩니다.

인위적 제한 (setTimeout)

프레임 속도를 엄격하게 제한하면(예: Application.targetFrameRate = 30) Emscripten은 어쩔 수 없이 requestAnimationFrame을 포기합니다. 대신 setTimeout() API 또는 복잡한 내부 타이머 조합을 사용하여 루프를 인위적으로 지연시킵니다.

CPU 지표 왜곡 (Emscripten의 함정)

인위적 타이머는 CPU 시간을 측정할 때 엄청난 불일치를 초래합니다. 프로세서는 단 5ms 만에 게임 로직의 모든 연산을 완료하고 유휴 상태에 들어갈 수 있지만 setTimeout 타이머가 소진될 때까지 WaitForEndOfFrame 코루틴이 재개되지 않습니다.

결과: FrameTimingManager는 이 대기 시간을 CPU 타이밍 내에 기록합니다. 프로세서가 기능적으로 유휴 상태이고 프레임이 단순히 브라우저 타이머를 기다리고 있더라도 프로파일러(및 WebAP의 Tracker)는 *CPU 병목 현상(CPU Bottleneck)*이 있다고 판단합니다.

올바른 설정 전략

Web Adaptive Performance가 브라우저에서 최적으로 작동하려면:

  1. Application.targetFrameRate를 사용하지 마세요. -1 (무제한)로 둡니다.
  2. 플러그인 설정에 원하는 FPS를 지정하세요(Target Min FPS = 60). WebAP는 이 값을 엄격한 제한이 아니라 렌더링 품질을 결정하기 위한 기준으로 활용합니다.