메트릭 보기

Metrics 보기는 뼈대가 런타임에 어떻게 움직이는지 보여줍니다. 표시된 메트릭은 보이는 모든 뼈대의 합계입니다.

뼈대를 구성하는 모든 뼈의 개수입니다.

런타임에 뼈의 로컬 트랜스폼을 조정하여 뼈대의 자세를 잡고 나면(종종 애니메이션 적용), 각 뼈의 월드 트랜스폼이 계산됩니다(일반 코드). 일반적으로 이는 Skeleton#updateWorldTransform을 호출했을 때 이루어집니다.

뼈의 월드 트랜스폼을 계산할 때는 CPU를 사용합니다. 비교적 계산 부담이 적을 수 있지만 화면에 많은 뼈로 구성된 뼈대가 많아지면 부담이 늘어날 수 있습니다. 예를 들어, 30개의 뼈로 구성된 50개의 뼈대가 한 화면에 나타나면, 1500개의 월드 트랜스폼을 계산해야 합니다.

데스크톱에서 수천 개의 뼈는 일반적으로 문제가 되지 않습니다. 모바일에서 2천 개 이상의 뼈는 문제를 일으킬 수 있습니다. 예를 들어, 일부 테스트에서 Nexus 4는 프레임 속도가 초당 60프레임 미만으로 떨어지기 전에 2000개 정도의 뼈를 처리할 수 있습니다.

제약조건

뼈대에 있는 제약조건의 합계입니다.

Spine은 1개 또는 2개의 뼈가 있는 IK 제약조건을 지원합니다. 런타임에, 뼈 1개의 IK는 계산 부담이 꽤 적을 수 있습니다(일반 코드). 뼈 2개의 IK는 많은 계산이 필요합니다(일반 코드).

IK 제약조건을 계산할 때는 CPU를 사용합니다. 뼈 2개의 IK라도 계산 부담은 비교적 적지만 IK를 사용하는 뼈대가 화면에 많아지면 부담이 늘어날 수 있습니다.

슬롯

뼈대에 있는 슬롯의 합계입니다.

슬롯 개수는 뼈대의 복잡성을 나타내지만 성능에는 거의 영향을 주지 않습니다. 각 슬롯은 0 또는 1개의 어태치먼트를 표시할 수 있기 때문에 주어진 시점에 표시할 수 있는 어태치먼트의 최대 개수를 나타내기도 합니다.

타임라인

현재 활성화된 애니메이션의 타임라인의 합계입니다.

런타임에 애니메이션은 많은 "타임라인"으로 구성됩니다. 각 타임라인에는 키 프레임 값의 목록이 있습니다. 애니메이션이 적용되면 애니메이션의 각 타임라인이 적용됩니다. 타임라인은 목록에서 현재 애니메이션 시간의 키 프레임 값을 찾은 다음, 그 값으로 뼈대를 조정합니다(일반 코드). 프레임 0에 키가 1개 밖에 없는 타임라인이라도 애니메이션이 뼈대에 적용될 때마다 적용됩니다.

타임라인을 적용할 때는 CPU를 사용합니다. 단일한 타임라인을 적용하는 것은 계산 부담이 비교적 적지만, 모든 프레임에 애니메이션이 적용되는 뼈대가 많아지면 부담이 늘어날 수 있습니다. 또한 여러 개의 애니메이션을 하나의 뼈대에 프레임마다 적용할 수 있습니다. 예를 들어, 달리면서 동시에 총을 쏘거나 크로스페이딩을 위해 애니메이션을 믹스할 경우가 여기에 해당합니다.

합계

뼈대에 있는 어태치먼트의 합계입니다.

어태치먼트의 합계는 렌더링 성능에 영향을 주지 않으며 로드 시간에 거의 영향을 주지 않습니다.

표시

뼈대에 표시되는 어태치먼트의 개수입니다.

표시되는 어태치먼트는 렌더링 성능에 영향을 주지 않습니다. 예를 들어, 경계 상자 어태치먼트의 경우 아무 것도 렌더링되지 않습니다.

정점

모든 표시 영역 및 메쉬 어태치먼트의 정점 개수입니다.

정점 개수는 GPU로 전송되는 형상의 개수를 나타냅니다.

정점 트랜스폼

모든 표시 영역 및 메쉬 어태치먼트에서 변환되는 정점의 개수입니다.

뼈와 비슷하게 영역 및 메쉬 어태치먼트 정점은 로컬에서 월드 좌표로 변환해야 합니다(일반 코드: 영역, 메쉬가중 메쉬).

정점을 변환할 때는 CPU를 사용합니다. 계산 부담은 비교적 적지만 화면에 뼈대가 많아지면 부담이 늘어날 수 있습니다.

삼각형

모든 표시 영역 및 메쉬 어태치먼트의 삼각형 개수입니다.

삼각형 개수는 GPU로 전송되는 정점 인덱스의 개수를 나타냅니다.

영역

뼈대가 전체 크기로 그려질 때 표시되는 픽셀 개수입니다. 여기에는 투명 픽셀과 오버드로로 인해 여러 번 표시되는 픽셀이 포함됩니다.

표시되는 픽셀 개수는 뼈대를 렌더링할 때 얼마나 높은 GPU 필레이트가 사용되는지를 나타냅니다.

선택

하나 이상의 어태치먼트를 선택하면 두 세트의 숫자가 메트릭을 표시합니다. 사선 앞의 숫자는 선택된 어태치먼트를 나타냅니다. 사선 뒤의 숫자는 모든 어태치먼트를 나타냅니다.

성능

성능은 종종 문제가 되지 않기 때문에 흥미롭습니다.

구형 하드웨어에서 조악한 애플리케이션을 실행할 때도 성능이 그런대로 괜찮다면 최적화가 필요하지 않습니다. 규칙은 이렇습니다. 플레이어가 성능의 개선을 느낄 수 없을 경우, 성능 개선에 시간을 들이는 것은 낭비입니다. 언제나 플레이어가 느낄 수 있는 것에 시간을 투자하는 것이 현명합니다.

이는 개발 중에 성능을 무시해도 된다는 의미는 아니고, 최소한 성능 문제를 피하기 위한 예방적 조치로서 성능을 고려해야 한다는 의미입니다. 특히 다음과 같이 많은 변수가 관련되는 경우 성능에 지나치게 집착하고 시간을 낭비하기 쉽습니다.

  • 애플리케이션이 실행되는 하드웨어
  • 뼈대 렌더링 외에 애플리케이션과 게임 툴킷이 수행하는 모든 것
  • 게임 툴킷과 Spine 런타임이 렌더링을 수행하는 방식
  • 렌더링되는 뼈대의 개수
  • 뼈대를 구성하는 방식
  • 표시되는 픽셀 개수
  • 기타 등등

Spine 애니메이션을 디자인할 때, 애니메이터가 이 모든 것을 고려하고 우수한 성능의 에셋만을 제공하기란 불가능합니다. 그 대신 원하는 애니메이션에 필요한 메쉬 정점 개수만을 사용하는 등 성능 낭비를 피하기 위한 적당한 노력을 기울여야 합니다. 성능 문제가 발생한 후에야 뼈대를 단순화하기 위한 추가적인 노력을 기울여야 합니다.

성능은 수많은 변수에 의존하기 때문에 Metrics 보기에서 어느 숫자가 지나치게 큰지를 일반화하기란 불가능합니다. 성능을 최대한 높이고자 한다면, 특정한 환경에서 어떤 제한이 있는지 알아내기 위해 다양한 하드웨어에서 실제 뼈대를 사용하여 자체적으로 테스트를 실시해야 합니다. CPU 또는 GPU를 최고 한도로 사용하지 않는다면, 성능을 걱정하면서 시간을 낭비하거나 애니메이션의 품질을 희생할 필요가 없습니다.

성능 문제가 확인되면, 첫 번째 단계는 성능에 가장 큰 영향을 주는 부하 지점을 찾아내는 것입니다. 거기에 노력을 집중하면 큰 성과를 얻을 수 있기 때문입니다. Spine 뼈대를 렌더링할 때 가장 흔한 부하 지점은 CPU 사용량, 필레이트, 드로우콜입니다.

CPU 사용량

CPU 사용량이 너무 많으면 애플리케이션이 CPU를 너무 많이 사용해서 렌더링이 적절한 프레임 속도(일반적으로 초당 60 또는 30프레임) 미만으로 떨어진다는 것을 의미합니다. CPU 사용량에서 가장 중요한 메트릭은 뼈, 타임라인, 정점 트랜스폼, 제약조건입니다. 이것들이 과도하게 사용되면 문제가 될 수 있습니다.

뼈대의 복잡성을 줄이는 것 외에 몇 가지 방법이 있을 수 있습니다. 뼈대가 많은 경우, 뼈대의 서브셋만 라운드 로빈 방식으로 프레임마다 업데이트하는 것이 적절할 수 있습니다. 다른 방법은 적은 수의 뼈대만 움직이고 그 포즈를 사용하여 많은 수의 뼈대를 렌더링하는 것입니다.

필레이트

GPU 필레이트가 너무 높으면, GPU가 적절한 프레임 속도로 표시할 수 있는 픽셀보다 많은 픽셀을 표시하려고 시도한다는 것을 의미합니다. 픽셀을 표시할 때마다 필레이트가 올라갑니다. 픽셀이 완전히 투명한 경우 또는 어태치먼트가 겹치는 등 동일한 픽셀이 여러 번 표시될 때("오버드로"라고 부름)도 필레이트가 올라갑니다.

필레이트가 제한되는 것에 대한 해결책은 언제나 같습니다. 적은 수의 픽셀을 표시하는 것입니다. CPU가 변환해야 하는 정점이 더 많을 수 있지만, 투명한 픽셀을 표시하는 것을 피하기 위해 메쉬를 사용할 수 있습니다. 완전히 투명한 픽셀도 여전히 필레이트를 차지하기 때문에 알파를 0으로 설정하기보다는 어태치먼트를 숨겨야 합니다. 두 개 이상의 겹치는 이미지 대신 단일한 큰 이미지를 사용하여 오버드로를 최소화하는 방식으로 그림을 그릴 수도 있습니다.

드로우콜

GPU에 그림을 그리도록 요구하는 것은 부담이 많은 작업입니다. 너무 많이 그림을 그리도록 요구할 경우, GPU는 적절한 프레임 속도로 그림을 그리지 못할 수 있습니다.

대부분의 게임 툴킷은 GPU가 그림을 그리는 횟수를 줄이도록 최대한 많은 형상을 한 번에 배치로 처리합니다. 일반적으로 GPU가 다른 텍스처로부터 그림을 그릴 때는 배치를 비워야 하기 때문에 텍스처 전환을 줄이기 위해 텍스처 아틀라스를 사용합니다. 또한 슬롯에 추가적인 블렌딩을 사용하면 프리멀티플라이드 알파로 렌더링되지 않은 게임 툴킷의 배치를 비우도록 할 수 있습니다.

다음: 윤곽선 이전: Mesh Tools