유니티 게임 개발/3D Portfolio

[유니티] 3D Portfolio #11 그래픽 최적화 작업

노랑꼬리 2023. 10. 6. 18:40

목표

그래픽 최적화를 통해 최대한 렌더링 비용을 줄여 렉을 없앤다.

(작업 기간 : 2023.10.06~10.06 (1일 소요), 추가 작업 + 10.12일)

 

1. Clipping Planes

유니티 카메라에는 Clipping Planes 라는 옵션이 있다.

해당 값은 카메라에 비춰지는 오브젝트 렌더링 여부를 거리로서 결정하는데 기본 값으로

최저 0.3, 최대 1000으로 0.3 거리에서 1000 거리 사이의 오브젝트만 렌더링 한다.

 

이를 최대 거리 1000에서 100으로 수정하여 게임의 거리감에 맞도록 수정하고 불필요한 오브젝트 렌더링을 줄여주었다.

 

설정 수정 이전 프로파일러 값
설정 변경 이후 프로파일러 값

 

2. 풀 들의 쉐도우 설정, 반사 프로브 설정 수정

- 중요도가 떨어지나 렌더링 값을 많이 잡아먹던 풀들의 그림자를 제거하고 반사 프로브를 Simple로 변경하였습니다.

ㄴ신전 건물이 아닌 다른 곳을 바라볼 경우 풀의 양이 더 많고 렌더링 자원 소모가 적어져 성능 향상 비율이 더 큼

 

- 나무나 건물, 천막 등 오브젝트는 자연스러운 환경을 보여주기 위하여 그림자 및 프로브 설정을 기본 값으로 유지.

 

약 15%의 성능 향상
프로파일러 기준은 가장 렌더링 값을 많이 잡아먹는 성당 건물을 바라보는 상태에서 측정

 

 

3. 건물 내 오브젝트의 비활성화로 렌더링 값 줄이기

 

건물 내에 있는 오브젝트들에 대해 언제나 구현되어 있을 필요는 없다.

이를 두가지 방법으로 처리할 수 있다.

 

1) occlusion culling (오클루전 컬링) 방식

가려질 오브젝트를 지정해주어 카메라에 비춰지지 않는 경우 해당 오브젝트의 렌더링을 처리를 하지 않도록 한다.

 

2) 구역을 지정하여 오브젝트 비활성 -> 활성으로 전환

구역을 지정해 해당 지역에 들어오게 되면 (트리거) 오브젝트를 활성화 시켜준다.

 

현 프로젝트에서는 해당 방법을 사용하였는데 오클루전 컬링은 가려질 오브젝트의 연산이 필요한데 현재 가려줄 오브젝트는 작은 오브젝트들이 많기 때문에 연산량이 높아 비효율 적이다.

 

그렇기 때문에 구역내 오브젝트를 비활성화 시켜주고 플레이어 진입 시 활성, 퇴장 시 비활성을 해주어 효율적으로 최적화를 해주었다.

(또한 씬 진입시 구현 해두었던 것을 비활성 하는 것 이기 때문에 활성화 시 자원 소모도 적다)

 

오브젝트 비활성화 상태일 때

 

가까이 다가가 오브젝트 활성 상태일 때

 

 

※ 오클루전 컬링 적용 전 후 비교

오클루전 컬링의 연산값이 오히려 렌더링 감소 값보다 크다는 것이 확인 되어 사용하지 않았다.

오클루전 컬링 적용 전 평소 렌더링 값 평균 9ms
오클루전 컬링 적용 후 평소 렌더링 값 평균 10ms
오클루전 컬링 적용 전 최대 렌더링 값 평균 32ms (가장 처리비용이 큰 성당 앞 기준)
오클루전 컬링 적용 전 최대 렌더링 값 평균 37ms (가장 처리비용이 큰 성당 앞 기준)