Unity 2022.1 테크 스트림을 다운로드하고 Adaptive Performance 4.0을 사용해 보세요. 물리, 데칼, 커스터마이징, 레이어 컬링으로 구성된 추가 스케일러 4개와 앱 성능 최적화를 위한 비주얼 스크립팅 지원을 활용하면 삼성 기기에서 Android 성능을 더욱 향상할 수 있습니다.
Unity 2022.1에서는 다음 LTS(장기 지원) 릴리스에 포함될 여러 가지 혁신적인 새 기능을 미리 사용해 볼 수 있습니다. Adaptive Performance 4.0은 검증된 패키지로, 앱 스케일링을 확장하고 전반적인 성능을 개선할 수 있는 몇 가지 유용한 신규 기능이 추가되었습니다.
GDC 2022에서 유니티는 삼성과 함께 진행한 세션 갤럭시 게임데브(Galaxy GameDev)를 활용해 게임의 잠재력을 펼치는 방법(영문)을 통해 Adaptive Performance 4.0에 대한 최신 업데이트 내용을 공개했습니다. 아래에서 요약된 내용을 확인하세요.
비주얼 스크립팅
Unity 비주얼 스크립팅 통합을 통해 누구나 Adaptive Performance를 활용하여 앱을 스케일링하고 배터리 수명을 연장할 수 있습니다. Adaptive Performance 4.0을 설치하면 Unity 비주얼 스크립팅 시스템이 제공하는 유닛을 사용하여 C#으로 별도의 구현 작업을 하지 않고도 Adaptive Performance 지표에 액세스할 수 있습니다.
다시 말해 비주얼 스크립팅 패키지를 설치하면 Unity는 자동으로 Adaptive Performance 유닛을 활성화합니다. 유닛이 활성화되면 기존 비주얼 스크립팅 그래프를 사용하는 프로젝트에 Adaptive Performance를 추가할 수 있지만, 유닛을 다시 컴파일해야 합니다. 자세한 데모와 베스트 프랙티스는 Adaptive Performance 샘플 기술 자료를 확인하시기 바랍니다.
Unity가 Adaptive Performance 유닛을 다시 생성할 때 스크립트 그래프의 바탕면을 오른쪽 클릭하면 그래프에 새 유닛을 추가할 수 있습니다. 유닛은 Adaptive Performance 하위 메뉴에서 찾을 수 있습니다.
보트 어택 데모의 파티클 효과
비주얼 스크립팅에서 Adaptive Performance를 어떻게 사용하는지 보여 주는 예시를 소개합니다. 아래 이미지는 보트 어택(Boat Attack) 비주얼 스크립팅의 일부로, '스로틀링이 임박'했을 때 모든 파티클이 비활성화되고 경고가 없으면 활성화됩니다. 파도에서 이는 물보라, 보트 엔진 연기, 패러글라이더 뒤에 생기는 흔적 등의 효과가 CPU와 GPU에 부담이 되므로 이러한 효과를 스케일링했습니다. 이렇게 하면 게임 자체에 주는 영향을 최소화하면서 성능을 개선할 수 있습니다.
발열 경고가 변경될 때마다 파티클 시스템이 이 과정을 반복한 다음 파티클 시스템을 중지하거나 다시 시작합니다. 물론 게임에서 필요한 사항에 따라 설정을 바꿀 수 있습니다. 예를 들어 효과를 완전히 비활성화하는 대신 이미터 수를 변경하거나 원본 이미지의 품질을 조정할 수도 있습니다.
모든 Adaptive Performance API가 비주얼 스크립팅으로 재탄생했습니다. API 전체 목록과 관련 정보는 비주얼 스크립팅 통합 기술 자료에서 확인할 수 있습니다.
스케일러
이미 사용 가능한 여러 스케일러 외에도 Adaptive Performance 4.0에는 다음 네 가지 스케일러가 새로 추가되었습니다.
인덱서 시스템과 이 시스템을 바탕으로 구축된 모든 스케일러에는 다음과 같은 장점이 있습니다.
커스텀 Adaptive Performance Unity Profiler 모듈에 스케일러가 어떻게 변경되는지 표시되며, 이를 통해 스케일러가 제대로 작동하고 있는지 아니면 조정이 필요한지 확인할 수 있습니다. 아래는 해상도가 꽤 높은 편인 삼성 폴드3을 펼친 상태로 보트 어택 데모를 실행했을 때의 예시입니다.
보트 어택 데모를 시작할 때는 메뉴 씬에서 많은 스케일러가 사용되지만 캡처가 완료되기 전에 안정화되었습니다. 이 예시에서는 온도가 빠르게 상승하고 기기는 스로틀링 상태가 됩니다.
이는 분명히 병목 현상이기 때문에 Adaptive Performance에서 상황을 안정화하고 GPU에 미치는 영향을 줄이려고 합니다. 따라서 그림자 스케일러가 화질을 빠르게 낮추지만 이 작업만으로는 충분하지 않아 시야 거리와 해상도도 함께 줄입니다. 작업이 진행되면서 프레임 속도가 안정화되고 온도가 내려갑니다. 결과적으로 게임의 스로틀링 문제가 해결되고 프레임 속도가 60fps로 올라갔습니다.
레이어 컬링 스케일러
레이어 컬링 스케일러를 사용하면 런타임 시 레이어 컬 거리를 동적으로 조정할 수 있습니다.
이 기능은 인덱서 시스템을 사용하여 최적의 성능과 발열 안정성을 확보하기 위해 레이어 컬 거리를 언제 얼마나 늘리거나 줄일지 등의 결정을 내립니다.
Adaptive Performance와 함께 제공되는 샘플은 중간 수준의 CPU 로드에서 실행을 반복하다가 한계 프레임 속도에 다다르면 레이어의 컬 거리를 줄입니다. 그 결과 레이어의 컬 거리가 CPU와 GPU 로드를 기준으로 변경됩니다.
각 레이어의 컬링 거리에 서로 다른 값을 설정하면 스케일링이 비례적으로 적용됩니다. 이 방식을 활용하면 최적의 성능을 발휘하기 위해 어떤 오브젝트를 더 일찍 컬링해야 할지 파악할 수 있습니다. 자세한 방법은 다음 코드 샘플을 참조하시기 바랍니다.
어댑티브 데칼
어댑티브 데칼의 대상은 시각 효과입니다. Amazing Adventures of Dr. Arm에는 많은 파티클과 데칼 프로젝터를 사용하는 보스 전투 시나리오가 있습니다. 모바일 디바이스의 발열이 심해져서 스로틀링이 임박했거나 이미 발생하고 있는 경우, 방출되는 파티클의 수가 줄어듭니다. 이 게임에서는 바람에 나부끼는 나뭇잎, 매우 작은 불똥 등 시각적으로 덜 중요한 이미터가 완전히 꺼집니다. 또한 스케일러가 데칼 거리를 줄입니다.
경고가 없을 때
스로틀링 임박/발생 시
이뿐만 아니라 일부 파티클에서는 충돌이 비활성화됩니다. 발열 로드가 줄어들면 이러한 효과를 스케일링하여 다시 활성화할 수 있습니다.
커스텀 스케일러
커스텀 스케일러는 안개 스케일러를 구현하며, 이 스케일러를 사용하면 Unity에서 직접 제공하지 않는 스케일러를 자체적으로 만들 수도 있습니다. 커스텀 스케일러는 발열 로드가 증가할 때 안개를 늘리고 시야 거리를 줄입니다. 이렇게 하면 시스템에 걸리는 로드를 줄여 시스템이 복구되도록 할 수 있습니다.
포스트 프로세싱은 프레임 렌더링에 있어서 리소스를 빠르게 많이 소모할 수 있습니다. 게임플레이에 핵심적인 요소는 아니지만 포스트 프로세싱은 게임에 분위기를 더하고 개발 팀이 열심히 제작한 아트를 더 아름답게 표현하는 방법이기도 합니다.
Adaptive Performance를 사용하면 게임의 다양한 포스트 프로세싱 효과를 활용할 수 있으며, 기기의 로드가 최대에 도달하는 순간에 필요하지 않은 효과를 줄일 수도 있습니다. 스로틀링이 발생하는 경우 Amazing Adventures of Dr. Arm에서는 주로 씬의 분위기를 고조하지만 게임플레이에는 실질적인 영향을 미치지 않는 특정 효과가 꺼집니다. 안개, 블룸, 뎁스오브필드(피사계심도), SSAO(스크린 공간 앰비언트 오클루전), 모션 블러는 분위기를 조성하는 데 탁월하지만 게임플레이에는 필수적이지 않은 시각 효과의 좋은 예입니다. 이러한 효과를 조정하면 게임에서 성능을 크게 개선할 수 있습니다.
경고가 없을 때
스로틀링 임박/발생 시
어댑티브 물리
어댑티브 물리는 물리 엔진이 업데이트될 고정 델타 타임을 변경합니다. 다른 시스템에 이 방식을 사용하면 다른 시스템도 같이 스케일링됩니다. 하지만 다른 시스템에 고정 델타 타임을 사용하는 대신 자체 물리 스케일러를 만들어서 더 구체적인 설정을 적용하는 것이 좋습니다.
원래 Time.fixedDeltaTime 값과 스케일 다운 버전 값을 비교한 위 이미지를 확인해 보세요. 원래 평균 프레임 시간은 28ms였지만, 스케일 다운 버전의 평균 프레임 시간은 21ms입니다.
유니티 Adaptive Performance 팀은 패키지와 플랫폼의 지원 범위를 확장하기 위해 계속해서 노력하고 있으며, 새로운 사업자와의 협업도 기대하고 있습니다. 유니티는 언제나 Adaptive Performance 포럼에서 여러분의 피드백을 기다리고 있습니다. 적극적으로 의견을 들려 주세요.