개인프로젝트/IronBird

[IronBird #8] 드로우콜 최적화 시도 - PC 프로파일링 결과 분석

Client Side 2026. 6. 5. 16:54

IronBird 개발일지 #8

드로우콜 최적화 시도 - PC 프로파일링 결과 분석

Shadow Casting · Object Pool · 콜리전 분리 · 프로파일링

🎯 목표

모바일 목표 수치(드로우콜 100 이하, FPS 30 안정)를 향해 최적화를 시도한다. PC에서 프로파일링하고 각 최적화 기법의 실제 효과를 측정한다.

최적화는 반드시 수치로 증명해야 한다. "빠를 것 같다"는 감이 아니라 Before/After 측정이 기준이다.

📊 Before 수치

측정 환경: PC, 엔진 퀄리티 중간, 게임플레이 중 적 다수 존재

항목 수치 모바일 목표
FPS 56.91 30fps 안정
Frame 18.04ms 33ms 이하
Game 18.01ms -
GPU Time 3.34ms -
Draws 252 100 이하
메모리 4.70GB 1~1.5GB

🔧 최적화 시도 결과

✅ Object Pool - 효과 있음 (이전 #3에서 측정)

Game 스레드 17.35ms → 13.05ms (-25%), FPS 59 → 76 (+27%)

✅ 콜리전 아키텍처 분리 - 구조적 개선

MeshComponent NoCollision + USphereComponent hitbox 분리. FBX 복잡한 콜리전 계산 제거.

✅ 불필요한 라이팅 제거

DirectionalLight, SkyAtmosphere, VolumetricCloud, ExponentialHeightFog 제거. Unlit 머티리얼 사용으로 라이팅 연산 불필요.

⚠️ Shadow Casting Off - PC에서 효과 미미

총알·적·플레이어 MeshComponent->SetCastShadow(false) 적용. Draws 252 → 302로 오히려 증가. 이미 Unlit 머티리얼이라 Shadow 연산이 없었던 것이 원인.

✅ Object Pool 크기 축소

BulletPool 30→20개, EnemyBulletPool 15개로 축소. 초기 메모리 할당 감소.

🔍 분석

PC에서 Draws 252는 게임 오브젝트보다 씬 자체(SM_SkySphere, SkyLight 등)의 비중이 크다. 게임 오브젝트 최적화만으로는 전체 드로우콜을 100 이하로 낮추기 어렵다.

핵심 인사이트: PC stat 수치는 참고용이다. 모바일 최적화의 실제 지표는 Android 실기기에서 Unreal Insights로 측정해야 한다. PC에서 최적화 효과가 미미했던 Shadow Casting Off도 모바일 GPU에서는 다른 결과가 나올 수 있다.

💡 배운 것

• 최적화는 항상 수치로 검증해야 한다. "효과가 있을 것 같다"는 감으로 적용하면 오히려 역효과가 날 수 있다.

• Shadow Casting Off는 Lit 머티리얼에서 효과적이다. Unlit 머티리얼에서는 이미 Shadow 연산이 없어 효과가 없다.

• PC 드로우콜과 모바일 드로우콜은 다르다. 실기기 측정 없이 PC 수치만으로 최적화 완료를 판단할 수 없다.

• Object Pool은 드로우콜보다 Game 스레드 ms에 영향을 준다. 최적화 목표에 맞는 지표를 선택해야 한다.

📌 다음 작업

[IronBird #9] Android 빌드 + 실기기 프로파일링

Android SDK/NDK 세팅 후 실기기 빌드. Unreal Insights로 실측 수치 기록. PC와 모바일 수치 비교.