[UNSEEN] 테스트 대비 6. 게임 최적화 기법

Doorbals·2023년 2월 17일
0

UNSEEN

목록 보기
6/10

1. 병목 지점 파악

가장 먼저 볼 것은 자신의 소스코드에 문제점이 있어 병목 현상이 일어나고 있지는 않은지 확인하는 것이다. 이때 각 게임 엔진에 내장되어 있는 프로파일러 또는 외부 프로파일링 도구를 사용하여 어떤 부분에서 병목 현상이 일어나고 있는지 확인할 수 있다.


2. 스크립트 최적화

  • 오브젝트의 생성과 삭제
    : 인스턴스의 생성과 삭제는 동적 메모리 할당 및 해제가 필요하기 때문에 많은 비용이 발생한다. 따라서 짧게 사용하고 사라진 뒤 다시 생성되는 오브젝트(ex. 총알) 같은 경우에는 객체를 매번 생성 및 삭제하지 않고 고정 크기 풀에 들어있는 객체를 재사용함으로써 메모리 성능을 개선할 수 있다.

  • 나눗셈이 아닌 곱셈 사용
    : 나눗셈은 곱셉보다 연산 속도가 느리기 때문에 곱셈을 사용한다. (100 / 10 -> 100 * 0.1)

  • 삼각함수와 같이 고비용의 수학 함수들은 상수로 저장해놓고 사용하는 것이 좋다.

  • 언리얼의 BeginPlay()나 Tick()과 같은 콜백 함수들은 내부 내용이 비어있어도 성능에 영향을 미치기 때문에 사용하지 않는다면 제거한다.

  • 사용한 알고리즘을 더 나은 알고리즘으로 최적화한다. (ex. 삽입 정렬을 퀵 정렬로, 선형 검색을 해쉬 함수로, 백트래킹을 다이나믹 프로그래밍으로, DFS를 A*로)


3. 드로우 콜(Draw Call) 줄이기

: 드로우콜은 화면에 그려야 할 것을 CPU가 GPU에게 전달할 때 발생한다. 메시와 머티리얼의 개수가 드로우 콜에 가장 많은 영향을 준다.

1) 메시 병합
: 똑같은 오브젝트가 여러 개 있거나, 움직이지 않고 그 자리에 고정되어있는 오브젝트들에 대하여 메시를 병합하면 드로우 콜을 하나로 묶을 수 있다.

2) 여러 머티리얼을 텍스처 시트로 병합
: 머티리얼도 각 머티리얼마다 하나의 드로우 콜이 생성되는데, 여러 개의 머티리얼들을 하나의 텍스처 시트로 만들어 사용하면 드로우 콜을 하나로 묶을 수 있다.


4. LOD (Level of Detail)

: 플레이어와 거리가 멀어질 수록 폴리곤이 적은 오브젝트로 대체하여 최적화


5. HLOD (Hierarchical Level of Detail)

: LOD와 드로우콜 관리가 합쳐진 개념으로, 플레이어와의 거리에 따라 폴리곤 수와 드로우콜 수를 함께 관리할 수 있는 방법. 플레이어와의 거리가 멀어지면 하이폴 메시가 로우폴 메시로 교체되고, 여러 메시가 하나로 병합되어 프록시 메시로 교체된다. 머티리얼도 하나의 텍스처 시트로 병합되어 드로우콜 수도 감소한다.


6. 컬링(Culling) 기법

: 현재 화면에 보이지 않아도 되는 오브젝트들을 렌더링에서 제외하는 것

1) 프러스텀 컬링(Frustum Culling)
: 시야 범위에서 벗어나는 오브젝트는 렌더링에서 제외한다.
2) 오클루전 컬링(Occlusion Culling)
: 시야 범위 내에 있더라도 다른 오브젝트에 가려져 있는 오브젝트는 렌더링에서 제외한다.
3) 컬 디스턴스(Cull Distance)
: 플레리어와의 거리가 지정 거리보다 멀어지면 렌더링에서 제외한다. 주로 크기가 작은 오브젝트에 사용된다.
4) 포탈 컬링(Portal Culling)
: 시야 범위 내에 포탈이 보일 때만 포탈과 연결된 공간이 렌더링 됨. 완전히 닫힐 수 있는 공간에서만 사용 가능하다.


7. PVS(Potentially Visible Set)

: 맵에 존재하는 모든 공간들 간의 가시성 검사를 사전에 계산하여 실시간 컬링의 계산량을 줄이는 것. 현재 공간에서 볼 수 없는 공간은 렌더링 되지 않는다.


8. 텍스처

  • 여러 텍스처를 최대한 하나의 텍스처 아틀라스로 묶어 사용한다.
  • 각 텍스처의 용도에 맞게 텍스처를 압축해 사용한다.
  • 퀄리티가 중요한 텍스처가 아니라면 텍스처 사이즈를 줄인다.

9. 라이팅

  • 고정된(정적) 라이트와 오브젝트의 경우 라이트 맵을 최대한 활용하여 라이트를 미리 계산한다.
profile
게임 클라이언트 개발자 지망생의 TIL

0개의 댓글