소개
**Web Adaptive Performance (WebAP)**는 Unity WebGL 애플리케이션의 동적 최적화를 위한 도구입니다.
강력한 PC부터 성능이 낮은 스마트폰에 이르기까지 다양한 디바이스 스펙트럼에서 시각적 품질과 안정적인 FPS 간의 균형을 찾는 데 도움이 됩니다. 고정된 제한에 의존하는 대신 플러그인은 실시간으로 프레임 타이밍을 분석합니다. 성능 저하의 근본 원인을 감지하고, 안정을 얻을 때까지 원활하게 부하를 줄이며, 성능 여유(Performance Headroom)를 얻으면 품질을 복원합니다.
디바이스 적응
기본적으로 Unity 프로젝트를 최대 품질 설정으로 구성하세요. 현재 디바이스가 해당 부하를 처리할 수 없는 경우 플러그인이 런타임 중에 부하를 자동으로 줄여줍니다.
왜 WebAP를 선택해야 할까요?
공식 Adaptive Performance 패키지가 아닌 이유는 무엇인가요?
공식 Unity 패키지는 강력한 도구이지만 WebGL과 근본적으로 호환되지 않습니다. 이는 두 가지 유형의 공급자에 의존하며 둘 다 브라우저 제한으로 인해 방해를 받습니다:
- 네이티브 제공자(Android): 열 데이터를 검색하고 주파수를 관리하기 위해 시스템 API에 의존합니다. 브라우저 샌드박스는 하드웨어에 대한 모든 액세스를 방지하므로 이 접근 방식은 불가능합니다. 새로운 웹 표준(Compute Pressure API와 같은)은 CPU만 모니터링하며 3D 그래픽에 대한 정확한 데이터를 제공하지 않습니다.
- Basic Provider (기본 제공자): Unity의 크로스 플랫폼 수학적 제공자입니다.
FrameTimingManager에 의존합니다. 그러나 엔진이 작동하려면 보안상의 이유로(Spectre/Meltdown 공격을 방지하기 위해) 브라우저에서 강제로 차단되거나 심하게 난독화된 고정밀 하드웨어 GPU 타이머가 필요합니다. 결과적으로 공식 Basic Provider는 실제로 WebGL에서 초기화할 수 없습니다.
WebAP 솔루션: 웹의 특성에 특별히 맞춰진 접근 방식을 설계했습니다. WebAP는 FrameTimingManager도 활용하지만, 차단된 GPU 타이머에 엄격하게 의존하는 대신 플러그인은 안전한 휴리스틱 분석을 사용합니다. 이는 브라우저의 이상 현상(Emscripten에서 setTimeout으로 인한 측정 왜곡과 같은)을 우회하고 순수 수학을 사용하여 병목 현상(CPU 대 GPU)을 계산합니다. 이를 통해 모든 브라우저에서 합법적이고 안정적으로 작동하는 AAA급 최적화 시스템이 제공됩니다.
왜 표준 스케일러 스크립트가 아닌가요?
기존 솔루션은 지연 징후가 처음 나타날 때 단순히 화면 해상도를 낮춥니다. 렌더링이 아니라 CPU 연산(물리, 스크립트, 로직) 때문에 애플리케이션이 끊기는 경우 이는 아무 소용이 없습니다.
WebAP 작동 방식:
- 병목 현상 감지 (Bottleneck Detection)
플러그인은 프레임을 제한하는 요소가 CPU인지 GPU인지 수학적으로 결정합니다. 물리가 지연되는 경우 시스템은 화면 해상도를 저하시키지 않고 물리를 단순화합니다. 이를 위해 12개 이상의 독립적인 Scaler(그림자, LOD, 레이어 컬링 등)가 제공됩니다. - 안티 요요 페널티 시스템 (Anti Yo-Yo Penalty System)
품질이 깜박이는(Quality flickering) 동적 해상도의 일반적인 문제를 해결합니다. 그래픽 향상으로 인해 즉시 FPS가 떨어지면 시스템은 임시 페널티 록아웃(Penalty Lockout)을 구현하여 추가 증가를 차단합니다. - UI 선명도 보존
RenderTexture를 통한 스케일 모드를 선택하면 3D 세계의 해상도는 줄어들지만 인터페이스는 네이티브 브라우저 스케일링(Native Browser Scaling)으로 유지됩니다. 맞춤형WebScaledPhysicsRaycaster구성 요소는 광선 좌표를 자동으로 다시 계산하므로 3D 개체 클릭이 프레임 압축에 관계없이 완벽하게 작동합니다. - Zero-GC 아키텍처
전체 프로젝트는 엄격한 메모리 절약을 염두에 두고 설계되었습니다. 코어는 O(1) 원형 버퍼를 사용하고Update루프에서 메모리 할당을 전혀 수행하지 않습니다. 결과적으로 플러그인은 가비지 컬렉터(GC)를 유발하지 않습니다. - 엄격한 빌드 정리
많은 에셋이 프리팹과 텍스처를Resources폴더에 넣어 출시 빌드를 비대하게 만듭니다(엔진이 강제로 빌드에 포함하도록 함). WebAP의 아키텍처는 이 오류를 피합니다. 씬에 명시적으로 추가되지 않는 한 모든 유틸리티와 Dashboard UI는 컴파일 중에 자동으로 제거됩니다. 최종 프로젝트에는 가벼운 코어만 도달합니다. - 플러그 앤 플레이 통합
설정은 Project Settings 내의 통합된 인터페이스에 통합됩니다. 플러그인은 자동으로 빌드에 삽입되므로 씬에 관리자 프리팹을 수동으로 배치할 필요가 없습니다.
호환성
- Unity 버전:
2020.3 LTS및 최신 버전. 플러그인은 최신 API를 활용하며 새로운 엔진 기능(예: Unity 6000.2+ 이상의Mesh LOD Threshold지원)을 자동으로 채택합니다. - 렌더 파이프라인: Built-in Render Pipeline (BiRP) 및 Universal Render Pipeline (URP) 모두 완벽하게 지원합니다.
