2022. 1. 30. 00:38ㆍGame Development/Unity
게임 개발을 진행할 때, 처음에는 별 문제없이 잘 진행되다가 마지막에 테스트를 할 때 문제가 많이 발생한다고 한다.
그 중 하나가 바로 최적화 문제이다. 보통 성능이 좋은 컴퓨터에서 유니티를 통해 개발을 진행하기 때문에 프레임 드랍이나 속도 측면에서 문제가 있는 것을 알아차리기는 어렵다. 그러다가 나중에 베타 테스트 기간동안 성능이 떨어지는 컴퓨터나 모바일에서 구동했을 때 문제가 있음을 깨닫게 된다고 한다.
그래서 그 중, 그래픽에 의해 발생하는 프레임 드랍을 해결하는 방법을 알아봤다.
그래픽 최적화를 하는 기법들
1. 3D 모델링의 폴리곤(Polygon) 개수를 줄이는 방법 (디자인 영역)
디자이너 분들이 3D 모델링 작업을 할 때, 폴리곤(Polygon)을 통해 3D 모델 개체의 표면을 구성한다.
이 폴리곤 개수에 따라 물체 표면 재질의 세밀한 정도나 전반적인 퀄리티가 결정된다.
허나, 폴리곤 개수가 많다는 것은 그만큼 GPU가 연산할 양이 많음을 뜻하고 한계치를 넘어서면 성능 저하로 이어질 수 있다. 그래서, 게임 진행에 크게 상관없는 오브젝트 (Ex. 배경으로 있는 책상에 존재하는 연필 등과 같은 플레이어에게 잘 눈에 띄지 않는 작은 물체)는 로우 폴리곤(Low Polygon)으로 만들어서 최적화를 하기도 한다.
하지만, 디자이너와 프로그래머가 서로 싸우게 될 수 있는 부분이라 조심스럽게 접근을 해야 한다고 한다.
2. 카메라로부터의 거리에 따라 렌더링 여부 결정하는 방법 (Clipping)
카메라 컴포넌트 속성을 보면, Clipping Planes가 있다. 카메라로부터 거리가 Near보다 가까이 있고, Far보다 멀리 있는 오브젝트는 렌더링하지 않는 옵션이다.
마인크래프트 환경설정에서 거리에 따라 렌더링 여부를 결정하는 옵션이 이 부분을 조절하는 거겠구나 생각이 들었다.
거리에 따라 렌더링을 하지 않음으로써, 최적화를 할 수도 있다.
3. Occlusion Culling
다른 오브젝트에 가려져, 카메라에 보이지 않는 오브젝트들은 렌더링하지 않는 방법이다.
위와 같은 상황일 때, 가려져서 보이지 않는 노란색 오브젝트까지 전부 렌더링해주는 것은 리소스 낭비이므로 이럴 때 Occlusion Culling 기법을 통해 최적화를 할 수 있다. 이 Occlusion Culling 기법을 사용하기 위해선, 카메라 컴포넌트의 Occlusion Culling 속성이 체크되어 있어야 한다.
그리고 나선, 가릴 오브젝트(Occluder)와 가려질 오브젝트(Occludee)를 정해줘야 한다.
1. 가릴 오브젝트와 가려질 오브젝트 지정해주기
빨간색 빌딩 오브젝트는 카메라로부터 뒤에 있는 노란색 주택 오브젝트를 가리는 오브젝트다. 그래서 빨간색 빌딩 오브젝트들을 선택하고, Inspector 창에서 Static → Occluder Static으로 지정해주었다.
2. 유니티 에디터 Window → Rendering → Occlusion Culling 선택
그러면 Inspector 창에서 Occlusion 탭이 나온다. Bake 탭을 선택해서 Bake를 해준다. 앞 전에서 지정했던 Occluder와 Occludee에 대한 정보들을 저장을 하는 행위라고 볼 수 있다.
Bake를 했다면, 다음과 같이 Scene이 구성된다. Visibility Lines를 체크하면, 카메라 렌더링 영역을 초록색 선으로 나타내어 준다.
3. 카메라 렌더링 영역을 바꿔보며 테스트하기
좀 더 전체적으로 보여주기 위해, Scene을 위에서 내려다보게 했다. 한 번 카메라를 움직여보며 살펴보자.
Occlusion Culling 사용 시 주의사항
현재 씬(Scene)에서 Occlusion Culling을 사용했다면, Scene 폴더에 현재 씬에 대한 폴더가 생성되고, 그 안에OcclusionCullingData 파일이 자동 생성된다.
Bake를 하면서 Occlusion Culling에 필요한 데이터들을 이 파일 안에 저장을 해놓은 것이다.
해당 파일이 반드시 있어야 Occlusion Culling을 적용할 수 있다. 함부로 지우지 말자!
요약
- 그래픽 렌더링 최적화 방법에는 Low Polygon, Clipping Planes, Occlusion Culling 등이 있다.
- Low Polygon은 디자이너가 3D 모델링에 폴리곤 개수를 적게 사용하여 최적화하는 기법이다.
- Clipping Planes는 카메라로부터 오브젝트까지의 거리에 따라 렌더링 여부를 결정하는 기법이다.
- Occlusion Culling은 카메라 렌더링 영역에 있을 때만 오브젝트를 렌더링하는 기법으로, 벽 뒤에 가려지는 오브젝트가 많고 시점이 1인칭(FPS)인 게임에서 유용하게 쓰인다. (탑다운 뷰 시점에서는 그리 효율적이지 않음)
'Game Development > Unity' 카테고리의 다른 글
[Unity] 트랜스폼(Transform)에 대해 조금 더 공부하기 (0) | 2022.02.14 |
---|---|
[Unity] 클릭(터치)한 화면 좌표로 캐릭터 이동 시키기 (0) | 2022.02.01 |
[Unity] New Input System #2 | 키 입력을 스크립트에 전달하여 처리하기 (9) | 2022.01.26 |
[Unity] New Input System #1 | 세팅하기 (15) | 2022.01.26 |
[Unity] OnTriggerStay() 함수: 오브젝트의 변화가 감지되지 않으면 더 이상 호출되지 현상 해결법 (6) | 2022.01.19 |