게임 최적화 공부 정리

2025. 11. 30. 15:06·Unity 3D/Inkoid

유니티에서는 프로파일러(Ctrl+7)를 통해 런타임 중 어느 메서드에서 시간을 많이 소요하는지, 드로우콜이 많이 발생하는지 체크할 수 있음

어디서 어떤 항목에 병목이 발생하는지에 따라 해결 방법도 천차만별이므로 많이 경험할 수밖에 없음..


CPU Usage에서 주로 많은 것을 확인할 수 있음
내 PC의 경우 GPU Usage를 확인할 수 없었기에 CPU Usage에서 체크
Gfx.WaitForPresent 함수가 CPU 사용 프로파일러에서 가장 오래 걸린다면, 이는 CPU가 GPU를 기다리고 있다는 뜻. 즉, 이 시점에서 게임이 GPU 바운드가 된 상태

<< 최적화를 위해 주의할 사항 >>
1. 움직이는 오브젝트에는 리지드바디 포함할 것
리지드바디가 포함되지 않은 오브젝트는 유니티에서 정적인 가능성이 높은 객체로 간주
>> 리지드바디를 붙일 경우 언제든 움직일 수 있다고 인지한 상태이므로 움직임과 연산에 필요한 것들을 미리 할당해둔 상태여서 움직일 때 그렇지 않은 오브젝트에 비해 연산량이 적음

2. 개방된 환경에서는 오클루전이 큰 효과를 얻지 못함. 다만, 건물, 지형 등 변곡이 있다면 여전히 효과 유효

3. LOD : 랜더링 관련인데 멀리 떨어진 오브젝트 요소들에 대해 랜더링 해상도를 뭉갠다던지 랜더링하지 않는다(Cull 단계)던지 간략화하여 그래픽 성능 최적화. LOD0 는 적당히 낮추는 것이 중요 (유니티 LODGroup)

4. 그림자 : 빛의 영향을 받는 모든 객체가 버퍼에 랜더링. 빛에 맞은 객체가 여러번 랜더링 >> 탄을 발사할 때 Light가 포함되어 있으니 이에 따라 많은 드로우콜이 발생 >> light 효과가 미미하면 빼는 것이 상책
그 외 불필요한 light 조명들이 있다면 최대한 없애도록
+ 실시간 계산 대신 라이트맵을 구워두고 쓰거나
+ Quality 설정에서 pixel light count를 제한할 수 있음
>> 확인해보니 각 씬에는 Light 컴포넌트가 단 하나. 그러나 이펙트마다 존재 >> 이펙트에서 Light, Glow 관련 지우고 봐도 크게 퀄리티 차이를 느끼지 못해 비활성화부터 시작하는 중

5. 드로우콜: 최대한 줄이도록 노력해야 함 >> 단순한 매시로 사용(캡슐, 구, 육면체 등으로 비슷하게 대체), 여러 매시 결합하여 한번에 드로우

1) 정적 배칭(로드할 때)
Static 체크 시 메모리 증가 가능(배치된 메쉬 복제)
Runtime에서 위치 변경하면 Static이 깨져서 재배칭 비용 발생

2) 동적 배칭(런타임 중에 생성하는 것들에 대해 결합)
그러나 제약이 많아 실전에서 큰 효과 보기가 힘듦

대부분 GPU Instancing + Texture Atlas 조합을 사용

적은 종류의 머티리얼, Atlas 텍스쳐들을 사용(가능한 한 돌려쓰기) >> 동일한 소재의 측정값만 배칭하고 함께 랜더링 가능
텍스쳐를 하나의 텍스쳐로 결합 >> 이를 머티리얼에서 사용하는 큰 Atlas 텍스쳐 생성 (?) : 방법은 아직 모르겠으나 이렇게 설명


# 프로그래밍 기법으로 드로우콜을 줄이기 위해 어떻게 해야하나?
1) 오브젝트 풀링 >> 이미 적극 활용 중 >> 유도탄 생성 / 파괴가 성능 소모가 클 수 있기에 이를 풀링으로 바꾸면 좀 더 향상 가능성 있음
2) Update() 남용 금지 >> Update(), FixedUpdate() 등 반복하는 이벤트 함수들 중 빈 함수들 or 줄일 수 있는 것들은 다 확인하고 삭제해주기
3) GC.Alloc 0 만들기 >> 프로파일러 - CPU - GC.Alloc 꼭 확인
줄이는 방법
(1) string.Format 지양 -> StringBuilder 사용
(2) .ToString() 남발 금지 (로컬라이징에 많이 써서 반성..) >> 줄일 수 있는 방안 모색하기

(3) foreach에서 종종 GC 발생(var 타입) >> for 권장
(4) LINQ 대부분 할당 발생
(5) new 생성 반복 금지 >> 구조체 or 풀링 or 미리 생성해두고 이용

저작자표시 비영리 동일조건 (새창열림)

'Unity 3D > Inkoid' 카테고리의 다른 글

Inkoid 튜토리얼 제작  (0) 2026.01.11
Inkoid 최적화 내용 정리  (0) 2025.11.30
지스타 2025 출품 이후 Inkoid 무기 개편  (0) 2025.11.25
'Unity 3D/Inkoid' 카테고리의 다른 글
  • Inkoid 튜토리얼 제작
  • Inkoid 최적화 내용 정리
  • 지스타 2025 출품 이후 Inkoid 무기 개편
ybbro
ybbro
대부분의 포스팅은 pc에서 작성되었습니다. 모바일에서 볼 때 설명이 잘리면 데스크탑 모드를 사용해보길 바랍니다.
  • ybbro
    어떻게든 굴리는 게임 공방
    ybbro
  • 전체
    오늘
    어제
    • 전체
      • 스파르타코딩클럽_Unity개발과정
      • Unity 2D
        • 카드게임
        • 플랫포머 게임
        • 뱀서라이크
      • Unity 3D
        • 닷지
        • 유니티 짱
        • 디펜스 게임
        • Inkoid
      • Unity 에러 노트
      • 기능 구현 방법 정리
      • 셰이더 그래프
        • 2D
        • 3D
      • 프로그래머스
      • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    텍스트매시프로
    유니티 애니메이터 파라미터 초기화
    64비트
    삭제
    sprite mask
    앱이 휴대전화와 호환되지 않아 설치되지 않았습니다
    마스크
    유니티
    스파인
    대시
    무료스킨
    UI
    다크모드
    룰렛
    unity
    세이브
    hello
    갤럭시 S24
    잔상
    직렬화
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ybbro
게임 최적화 공부 정리
상단으로

티스토리툴바