유니티 WebGL 성능 최적화 - FPS 향상 팁
🎯 WebGL에서 FPS가 중요한 이유
유니티 WebGL 프로젝트는 브라우저 환경에서 실행되므로, **최적화가 부족하면 FPS(초당 프레임 수)**가 낮아질 수 있음.
특히 **물리 연산, 오브젝트 개수, 셰이더 복잡도** 등이 FPS에 큰 영향을 줌.
🔹 1. 드로우 콜(Draw Call) 줄이기
WebGL은 CPU에서 GPU로 **그리기 명령**(Draw Call)을 보내는 방식이라, **드로우 콜이 많으면 렌더링 성능이 저하됨**.
✅ 해결 방법
- Batching(배칭) 활성화: 같은 머티리얼을 공유하는 오브젝트를 합쳐서 렌더링
- Static Batching 사용 (
GameObject
를 Static으로 설정) - Dynamic Batching 활용 (
Mesh
가 작을 경우 자동으로 그룹화됨) - GPU Instancing 사용 (
Material.EnableInstancing
활성화)
// GPU Instancing 적용 예제
[MaterialProperty("_Color", ShaderPropertyType.Color)]
public Color color = Color.red;
void Start() {
GetComponent<MeshRenderer>().material.EnableKeyword("_INSTANCING_ON");
}
🔹 2. 복잡한 물리 연산 줄이기
유니티 WebGL에서는 **PhysX 엔진이 멀티스레드가 아니라 단일 스레드로 동작함**.
즉, 물리 연산이 많아지면 FPS가 심하게 저하될 수 있음.
✅ 해결 방법
• Rigidbody의 Interpolation 옵션 비활성화 (None으로 설정)
• Fixed Timestep을 늘려서 연산 부담 감소 (Edit > Project Settings > Time)
• Collision Detection을 Discrete로 변경 (고속 이동이 아니라면 Continuous 비활성화)
// Rigidbody Interpolation 해제
void Start() {
GetComponent<Rigidbody>().interpolation = RigidbodyInterpolation.None;
}
🔹 3. 불필요한 Update 호출 줄이기
`Update()`는 매 프레임마다 호출되므로, 불필요한 연산을 포함하면 성능 저하가 발생함.
대신 **이벤트 기반 처리** 또는 **코루틴 사용**을 권장함.
❌ 비효율적인 Update() 코드
void Update() {
if (GameObject.Find("Player") != null) { // ❌ 매 프레임마다 Find() 호출
Debug.Log("플레이어가 존재함!");
}
}
✅ 최적화된 코드
private GameObject player;
void Start() {
player = GameObject.Find("Player"); // ✅ Start에서 캐싱
}
void Update() {
if (player != null) {
Debug.Log("플레이어가 존재함!");
}
}
🔹 4. 오디오 최적화
WebGL에서는 **오디오 재생 방식이 다르므로**, 최적화하지 않으면 성능 문제가 발생할 수 있음.
🔹 5. 렌더링 최적화 - LOD(Level of Detail) 사용
멀리 있는 오브젝트는 낮은 디테일로 표시하면 성능을 크게 향상시킬 수 있음.
**유니티 LOD 시스템**을 활용하여 자동으로 모델의 디테일을 조정 가능.
✅ LOD 설정 방법
1. 오브젝트에 LOD Group 추가 (Component > Rendering > LOD Group)
2. LOD 모델 추가 (LOD0: 원본 / LOD1: 저품질 모델 / LOD2: 더 낮은 품질)
3. LOD 전환 거리 조절 (카메라와의 거리 설정)
// LOD Group을 코드로 조작 가능
void Start() {
LODGroup lod = GetComponent<LODGroup>();
lod.ForceLOD(1); // 강제로 낮은 LOD 사용
}
🎯 결론
- **드로우 콜을 줄이고 배칭을 활용하여 렌더링 최적화**
- **물리 연산 최소화 & Fixed Timestep 조절**
- **불필요한 Update 호출 줄이고, 이벤트 기반 처리 권장**
- **오디오 및 LOD를 활용하여 CPU/GPU 부하를 줄일 것!**