PC와 마찬가지로 iOS 또는 Android와 같은 모바일 플랫폼에는 다양한 성능의 디바이스가 있습니다. 어떤 휴대전화의 경우에는 다른 모델보다 10배 강력한 렌더링이 가능하기도 합니다. 다음은 스케일링을 쉽게 하는 방법입니다.
그래픽스 퍼포먼스는 필레이트, 픽셀, 지오메트리의 복잡성(버텍스 개수)에 따라 좌우됩니다. 더 많은 렌더러를 컬링하는 방법을 찾는다면 앞의 세 가지 요인을 모두 줄일 수 있습니다. Unity는 시야 범위 외부의 오브젝트를 자동으로 컬링하므로, 오클루전 컬링을 활용하면 많은 도움이 됩니다.
모바일에서는 기본적으로 필레이트(필레이트=화면 픽셀 수 셰이더 복잡성 오버드로우)가 퍼포먼스를 좌우하며, 지나치게 복잡한 셰이더가 문제의 주요 원인입니다. 따라서 Unity에서 제공하는 모바일 셰이더를 사용하거나, 자체 셰이더를 설계하고 최대한 단순하게 만들어야 합니다. 가능하다면 코드를 버텍스 셰이더로 이동하여 픽셀 셰이더를 단순하게 만드는 것이 좋습니다.
Quality 설정에서 텍스처 품질을 낮췄을 때 게임이 더 빠르게 실행된다면 메모리 대역폭 때문에 제한을 받았을 가능성이 큽니다. 이 경우 텍스처를 압축하고, 밉맵을 사용하면서, 텍스처 크기를 줄이는 등의 조치를 해야 합니다.
LOD(세부 수준) - 오브젝트가 멀어짐에 따라 오브젝트를 더 단순화하거나 완전히 제거합니다.
모바일 GPU는 발열량, 전력 사용량, 소음 발생량 등의 이유로 제약이 큽니다. 따라서 데스크톱 부품에 비해 대역폭이 작고 ALU 성능과 텍스처링 파워가 낮습니다. GPU 아키텍처 또한 가능한 한 적은 대역폭 및 전력을 사용하게 튜닝됩니다.
Unity는 OpenGL ES 2.0에 최적화되어 있으며, GLSL ES(HLSL과 유사) 셰이딩 언어를 사용합니다. 빌트인 셰이더는 대부분의 경우 HLSL(Cg라고도 함)로 작성되어 있습니다. 이는 모바일 플랫폼용 컴파일을 위해 GLSL ES로 크로스 컴파일됩니다. 또한 원할 경우 GLSL로 직접 코딩할 수 있으나, 현재는 GLSL->HLSL 이동 툴이 없기 때문에 OpenGL 같은 플랫폼(예: 모바일+Mac)에만 국한하여 가능합니다. HLSL에서 float/half/fixed 타입을 사용하면, GLSL ES에서 highp/mediump/lowp 정밀도 한정자로 바뀌게 됩니다.
굿프랙티스를 따르기 위한 체크리스트는 다음과 같습니다.
void Update (){
// flip between meshes
bufferMesh = on ? meshA : meshB;
on = !on;
bufferMesh.vertices = vertices; // modification to mesh
meshFilter.sharedMesh = bufferMesh;
}
필레이트의 영향을 받는지 확인하는 방법은 간단합니다. 디스플레이 해상도를 낮췄는데 게임이 더 빨라진다면 필레이트로부터 제약을 받고 있다는 것을 의미합니다.
다음 방법을 통해 셰이더 복잡도를 줄일 수 있습니다.
픽셀 프로세싱에 있어 게임이 GPU의 제약을 받는 경우가 많이 있습니다. 그러므로 CPU는 사용되지 않는 경우가 발생하며, 특히 멀티코어 모바일 CPU인 경우 자주 발생합니다. 따라서 GPU 작업을 일부 덜어서 CPU에서 대신 처리할 수 있게 하는 것이 합리적입니다(Unity에서 이를 모두 처리합니다). 메시 스키닝, 작은 오브젝트 일괄 처리, 파티클 지오메트리 업데이트 등이 이에 해당합니다.
이는 신중하게 사용되어야 합니다. 드로우 콜에 좌우되지 않는 상황이라면, 일괄 처리가 성능에 더 악영향을 줄 수도 있습니다. 왜냐하면 이 때 컬링 효율이 떨어지고, 광원의 영향을 받는 오브젝트가 더 많아지기 때문입니다.
물리 연산은 CPU를 많이 사용합니다. 에디터 프로파일러를 통해 프로파일링할 수 있습니다. CPU에서 물리 연산이 시간을 지나치게 소모하는 것 같다면 다음을 참조하십시오.
다음은 잘 알려진 모바일 아키텍처 리스트입니다. PC/콘솔 부문과는 다른 하드웨어 공급업체이며, 동시에 “일반” GPU와는 매우 다른 GPU 아키텍처입니다.
서로 다른 렌더링 접근 방식을 적용하면서 그에 맞게 게임을 설계해야 합니다. 특히 정렬에 주의를 기울여야 합니다. 개발 사이클 초기에 저사양 디바이스를 어디까지 지원할지 정의해야 합니다. 게임 설계를 진행하면서 프로파일러를 설정하고 테스트를 진행해야 합니다.
플랫폼 특정 텍스처 압축을 사용해야 합니다.
PowerVR 아키텍처(타일 기반 디퍼드)만 고려합니다.
즉,
단점으로는,
다운로드는 OS에서 제공하는 비동기 API를 통해 구현되어 있기 때문에, 다운로드를 위해 얼마나 많은 스레드를 생성해야 할지를 OS가 결정합니다. 여러 개의 병행 다운로드를 시작할 때에는 장치가 지원할 수 있는 총 대역폭 및 가용 메모리 공간을 염두에 두어야 합니다. 각각의 병행 다운로드마다 임시 버퍼를 할당하므로, 메모리가 부족하지 않도록 주의해야 합니다.
때로는 콘솔 문제가 아닌 랜덤 크래시일 수 있습니다.