Unity WebGL 환경에서는 일반적인 모바일이나 PC 환경보다 성능 제약이 훨씬 크다. 브라우저 위에서 동작하는 구조 특성상 메모리, CPU, GPU 자원이 제한적이며, 특히 고정된 힙 메모리와 싱글 스레드 환경으로 인해 최적화의 중요성이 더욱 커진다. 따라서 단순히 런타임 성능뿐만 아니라 에셋 구성, 로딩 방식, 데이터 처리까지 전반적인 최적화가 필요하다.

1. 게임 에셋 최적화
가장 기본이 되는 최적화는 에셋 자체를 줄이는 것이다. 텍스처와 모델은 게임에서 가장 많은 메모리를 차지하는 요소이기 때문에, 압축 포맷을 사용하거나 해상도를 줄이고, 모델의 폴리곤 수를 낮추는 방식으로 데이터를 줄여야 한다. 이는 메모리 절약뿐만 아니라 다운로드 크기 감소와 로딩 속도 개선에도 직접적인 영향을 준다.
2. 오브젝트 풀링(Object Pooling)
Unity에서 객체를 생성하고 파괴하는 과정은 힙 메모리를 사용하며 GC를 유발한다. WebGL 환경에서는 GC가 메인 스레드를 멈추기 때문에 프레임 드랍이 크게 체감된다. 따라서 오브젝트 풀링을 활용해 객체를 재사용하는 방식이 중요하다. 이는 런타임에서 발생하는 불필요한 메모리 할당을 줄이고, GC 발생 빈도를 낮추는 데 효과적이다.
다만 오브젝트 풀링을 적용할 때 풀의 크기를 무작정 크게 잡으면 오히려 초기 메모리 사용량이 증가할 수 있다. 특히 WebGL 환경에서는 힙 메모리가 제한되어 있기 때문에, 필요한 만큼만 생성하도록 설계하는 것이 중요하다. 또한 생성 비용이 크지 않거나, 사용 빈도가 낮은 오브젝트까지 풀링하면 오히려 관리 비용만 증가할 수 있기 때문에 총알, 이펙트처럼 반복 생성이 빈번한 객체에 우선적으로 적용하는 것이 효율적이다.
3. URP 및 SRP Batcher 활용
Unity의 SRP Batcher는 동일한 머티리얼을 사용하는 오브젝트들을 묶어서 처리함으로써 렌더링 시 상태 변경 횟수를 줄여준다. 이를 통해 CPU에서 발생하는 렌더링 비용을 효과적으로 감소시킬 수 있다. 특히 오브젝트 수가 많은 씬에서 성능 향상 효과가 크게 나타난다.
4. 오클루전 컬링(Occlusion Culling)
오클루전 컬링은 카메라에 보이지 않는 오브젝트를 렌더링하지 않도록 하는 기술이다. 예를 들어 벽 뒤나 건물 뒤에 가려진 오브젝트는 실제로 화면에 보이지 않지만, 별도의 처리를 하지 않으면 계속 렌더링된다. 오클루전 컬링을 적용하면 이러한 불필요한 GPU 연산을 줄일 수 있어 성능 개선에 도움이 된다.
5. LOD(Level of Detail) 시스템
LOD 시스템은 카메라와의 거리에 따라 오브젝트의 디테일을 조절하는 방식이다. 가까이 있는 오브젝트는 높은 디테일을 유지하고, 멀리 있는 오브젝트는 저해상도 모델로 교체함으로써 렌더링 부담을 줄인다. 이를 통해 시각적인 품질을 크게 해치지 않으면서도 GPU 사용량을 효과적으로 줄일 수 있다.
6. 조명 베이크(Baked Lighting)
실시간 조명은 연산 비용이 높기 때문에 WebGL 환경에서는 부담이 크다. 따라서 가능한 경우 라이트맵과 라이트 프로브를 활용해 조명 정보를 사전에 계산해 두는 것이 좋다. 이렇게 하면 런타임에서의 조명 계산이 줄어들어 전체적인 성능을 안정적으로 유지할 수 있다.
7. 문자열 생성 최소화
C#에서 문자열은 참조 타입이기 때문에 새로운 문자열을 생성할 때마다 힙 메모리를 사용하게 되고, 이는 GC를 유발한다. 따라서 반복적으로 문자열을 생성하는 로직은 피하는 것이 중요하다. 런타임에 문자열을 빌드해야할 경우 StringBuilder를 사용하거나, JSON이나 XML과 같은 텍스트 기반 데이터 대신 Scriptable Object / MessagePack / Protobuf 같은 포맷 바이너리 포맷을 사용하는 것도 성능 개선에 도움이 된다.
8. Addressable Asset System 활용
WebGL에서는 모든 리소스를 한 번에 로드하는 방식이 비효율적이다. Addressable을 활용하면 필요한 시점에 필요한 에셋만 비동기적으로 로드할 수 있다. 또한 CDN을 통한 원격 로딩도 가능하기 때문에 초기 로딩 시간을 줄이고 메모리 사용량을 효율적으로 관리할 수 있다.
9. 포스트 프로세싱 효과 제한
블룸이나 모션 블러와 같은 포스트 프로세싱 효과는 전체 화면에 적용되기 때문에 GPU 비용이 크다. WebGL 환경에서는 이러한 효과가 성능 저하의 주요 원인이 될 수 있으므로, 꼭 필요한 경우에만 제한적으로 사용하는 것이 좋다.
결론적으로..
Unity WebGL 최적화는 특정 기술 하나만 적용한다고 해결되는 문제가 아니다. 에셋, 메모리, 렌더링, 데이터 처리 등 다양한 요소를 종합적으로 고려해야 하며, 각 요소가 서로 영향을 주기 때문에 전체적인 균형이 중요하다. 특히 WebGL 환경에서는 “필요한 것만, 최소한의 비용으로 처리한다”는 원칙이 핵심이며, 이를 기반으로 설계를 진행하는 것이 안정적인 성능을 확보하는 데 중요하다.
사실 위 내용은 꼭 WebGL 환경이 아니라도 사용하는 최적화 방법들이기에,, 다양한 것들을 고려해서 개발하면 좋을 것 같다!
Reference
https://unity.com/how-to/profile-optimize-web-build#the-built-in-render-pipeline-or-urp?
웹 빌드를 프로파일링하고 최적화 (하다) 방법 | Unity
Unity 웹 프로젝트 최적화(하다) 팁을 확인하세요. 웹 게임이 웹사이트와 소셜 미디어에 효율적으로 배포되고 임베드되도록 최적화해야 합니다.
unity.com