WebGL에서 텍스처 최적화 - 용량과 성능 관리하기
🎨 WebGL에서 텍스처 최적화가 중요한 이유
WebGL 프로젝트에서 텍스처는 **렌더링 성능과 로딩 속도**에 직접적인 영향을 미침.
최적화되지 않은 텍스처는 메모리 사용량을 증가시키고, 게임이나 애플리케이션의 속도를 저하시킬 수 있음.
🖼 1. 텍스처 크기 최적화
✅ 적절한 해상도 선택
- **불필요하게 큰 텍스처 사용 금지!**
- **512x512, 1024x1024 등의 2의 제곱수 크기 권장** (GPU 최적화)
- **UI 요소는 최대한 작은 크기로 유지**
✅ 해상도별 텍스처 가이드라인
| 텍스처 유형 | 권장 크기 |
|————-|———|
| UI 아이콘 | 256x256 이하 |
| 캐릭터 스킨 | 1024x1024 ~ 2048x2048 |
| 배경 텍스처 | 2048x2048 이상 |
📦 2. 텍스처 압축 포맷 활용
✅ WebGL에서 지원하는 압축 포맷
| 포맷 | 설명 | 지원 |
|——–|—————-|——–|
| PNG | 무손실 압축, 투명 지원 | ✅ 모든 브라우저 |
| JPG | 손실 압축, 파일 크기 작음 | ✅ 모든 브라우저 |
| WebP | 고압축률, 품질 유지 | ✅ 최신 브라우저 |
| Basis | 유니티 WebGL 최적화 | ✅ 권장 |
csharp
// 유니티에서 Basis 텍스처 압축 적용
TextureImporter importer = (TextureImporter)AssetImporter.GetAtPath("Assets/Textures/example.png");
importer.textureCompression = TextureImporterCompression.Compressed;
importer.SaveAndReimport();
🔄 3. MipMap 활용
✅ MipMap 활성화 시 장점**
- 원거리 오브젝트 렌더링 시 **자동으로 해상도를 낮춰 성능 최적화**
- 텍스처의 **계단현상(Aliasing) 방지**
✅ MipMap 비활성화가 좋은 경우**
• UI 요소처럼 고정된 크기의 텍스처에는 비활성화 필요
• 작은 텍스처에는 오히려 메모리 낭비가 될 수 있음
// 유니티에서 특정 텍스처의 MipMap 비활성화
TextureImporter importer = (TextureImporter)AssetImporter.GetAtPath("Assets/Textures/example.png");
importer.mipmapEnabled = false;
importer.SaveAndReimport();
🚀 4. 텍스처 애틀라스(Texture Atlas) 활용**
여러 개의 작은 텍스처를 **하나의 큰 텍스처로 합쳐서** 관리하면 드로우콜을 줄일 수 있음.
이 방법은 특히 **UI 및 2D 게임 최적화**에 효과적임.
// 유니티에서 Texture Atlas 활용 예제
SpriteAtlas atlas = new SpriteAtlas();
atlas.Add(new Texture2D[] { texture1, texture2, texture3 });
🎯 결론**
- 텍스처 크기를 **2의 제곱수로 설정**하여 GPU 성능 최적화
- WebGL에 맞는 **압축 포맷(PNG, WebP, Basis)** 활용
- 필요할 때만 **MipMap 활성화**하여 메모리 절약
- 여러 개의 텍스처를 **Texture Atlas**로 합쳐서 최적화