Phase 8: 최적화와 실전 워크플로우 | 예상 학습 시간: 40분


🎯 학습 목표

  • Draw Call, Profiler, 모바일 최적화, 텍스처 아틀라스, VR/AR 고려사항, 에셋 파이프라인 자동화를 하나의 “최적화 체크리스트"로 통합해 적용할 수 있다
  • 실제 프로젝트(또는 지금까지 만든 씬)에 체크리스트를 순서대로 적용해 병목을 진단하고 개선할 수 있다
  • 8주차에서 배운 각 최적화 기법이 서로 어떤 순서와 관계로 연결되는지 설명할 수 있다

1. 8주차 복습 — 무엇을 배웠나

Phase 8은 “만드는 법"에서 “잘 돌아가게 만드는 법"으로 관점을 전환하는 주차였습니다. 앞의 절반(50-51)은 문제를 측정하는 도구를, 중반(52-54)은 플랫폼별 구체적인 최적화 기법을, 마지막(55)은 이 모든 걸 반복 가능하게 자동화하는 방법을 다뤘습니다.

Day주제체크리스트에서의 역할
50Draw Call과 배칭(Batching)렌더링 비용의 근본 원인을 이해
51Profiler로 성능 분석하기어디가 느린지 “측정"으로 확인
52모바일/저사양 기기 최적화타겟 플랫폼에 맞는 예산(budget) 설정
53텍스처 아틀라스와 메모리 최적화메모리 사용량을 줄이는 구체적 기법
54VR/AR 프로젝트 3D 모델 고려사항프레임률 요구가 극단적인 플랫폼 대응
55에셋 파이프라인 자동화위 규칙들을 사람이 아니라 시스템이 강제하도록

이 순서를 보면 8주차의 논리는 명확합니다: “측정 없이 최적화하지 말고(50-51) → 플랫폼 목표를 정한 뒤(52) → 구체적 기법으로 줄이고(53-54) → 그 규칙을 자동화로 고정한다(55).” 실무에서도 이 순서를 거꾸로 하면(예: 측정 없이 감으로 최적화) 시간만 쓰고 실제 병목은 그대로 남는 경우가 많습니다.


2. 실습 — 씬에 최적화 체크리스트 적용하기

오늘은 새 개념 없이, 지금까지 만든 씬(또는 Phase 6-7에서 완성한 환경/인터랙션 씬) 하나를 골라 아래 체크리스트를 순서대로 적용하는 실습을 진행합니다.

1단계 — 측정부터 (Day 50-51)

  • Window > Analysis > Profiler를 열고 Play 모드에서 CPU/GPU 타임라인 확인
  • Stats 창(Game 뷰 우측 상단)에서 현재 씬의 Batches, SetPass Calls, Triangles 수치 기록
  • Frame Debugger로 Draw Call이 가장 많이 발생하는 오브젝트 그룹 특정
  • 병목이 CPU(Draw Call 수)인지 GPU(픽셀/쉐이더 연산)인지부터 구분
체크 예시: Stats 창 기준치(모바일 목표)
Batches:        < 100 (목표)      실측: ___
SetPass Calls:  < 50  (목표)      실측: ___
Triangles:      < 100,000 (목표)  실측: ___

2단계 — 플랫폼 목표 확정 (Day 52)

  • 타겟 플랫폼(모바일 저사양/중급/PC/VR)에 맞는 폴리곤·드로우콜·텍스처 예산을 먼저 문서화
  • Quality Settings에서 타겟 플랫폼용 프로파일이 별도로 구성되어 있는지 확인
  • Day 27에서 다룬 LOD가 실제로 이 씬의 주요 오브젝트에 설정되어 있는지 재점검

3단계 — 구체적 최적화 적용 (Day 53-54)

  • 같은 재질을 공유할 수 있는 텍스처들을 아틀라스로 묶어 Draw Call/SetPass Call 감소
  • Texture Import Settings에서 불필요하게 큰 Max Size(예: 4096)를 플랫폼 기준으로 하향 조정
  • VR/AR 타겟이라면 90fps 이상 유지가 가능한지 Profiler로 재확인 (Day 54 기준)
  • Static Batching 대상 오브젝트에 Static 플래그가 제대로 켜져 있는지 확인

4단계 — 자동화로 고정 (Day 55)

  • 위에서 정한 텍스처 압축/Max Size 규칙을 Preset으로 저장
  • AssetPostprocessor로 신규 임포트되는 에셋에 규칙이 자동 적용되는지 테스트
  • 네이밍 규칙 문서(NAMING.md 등)에 오늘 정한 최적화 기준(예: _MASK 텍스처는 압축 제외)을 추가

💡 실무 팁: 체크리스트를 한 번 통과했다고 끝이 아닙니다. 씬에 오브젝트를 추가할 때마다 Stats 창 수치를 다시 확인하는 습관을 들이면, 문제가 누적되기 전에 작은 단위로 잡아낼 수 있습니다.


3. 흔한 실수와 점검 포인트

  • 측정 없이 최적화: “이 텍스처가 크니까 줄이자"처럼 감으로 최적화를 시작하면, 실제 병목이 아닌 곳에 시간을 쓰게 됩니다. 반드시 Profiler/Frame Debugger로 원인을 먼저 특정하세요.
  • 플랫폼 예산 없이 작업: 목표 수치(Batches, Triangles 등) 없이 “일단 최적화"하면 언제 멈춰야 할지 판단하기 어렵습니다. 프로젝트 초반에 플랫폼별 예산표를 만들어두는 것이 좋습니다.
  • 아틀라스 갱신 누락: 텍스처를 개별적으로 추가/교체한 뒤 아틀라스를 다시 빌드하지 않으면, 여전히 개별 텍스처를 참조하는 머티리얼이 남아 최적화 효과가 사라집니다.
  • 자동화 규칙의 예외 처리 부재: AssetPostprocessor가 모든 텍스처에 동일한 규칙을 강제하면 UI 스프라이트처럼 예외가 필요한 에셋까지 잘못 압축될 수 있습니다. 경로/이름 기반 필터를 함께 설계하세요.

📝 핵심 요약

  1. 8주차는 “측정(50-51) → 플랫폼 목표 설정(52) → 구체적 최적화(53-54) → 자동화로 고정(55)“이라는 하나의 흐름으로 요약된다
  2. 최적화는 항상 Profiler/Frame Debugger로 병목을 먼저 특정한 뒤에 시작해야 시간 낭비를 줄일 수 있다
  3. 텍스처 아틀라스와 압축 설정은 개별 에셋이 아니라 프로젝트 전체 기준으로 통일해야 효과가 유지된다
  4. VR/AR처럼 프레임률 요구가 높은 플랫폼은 일반 최적화 체크리스트에 더해 별도의 여유(margin)를 두고 목표를 잡아야 한다
  5. 체크리스트를 Preset과 AssetPostprocessor로 자동화해두면, 프로젝트가 커져도 최적화 기준이 흐트러지지 않는다

🔗 참고 자료


⬅️ 이전: Day 55 — 에셋 파이프라인 자동화 (네이밍 규칙, 임포트 프리셋) | 다음: Day 57 — 캡스톤 프로젝트 기획 - 나만의 미니 씬 컨셉 잡기 ➡️