Tal como en PCs, las plataformas móviles como iOS y Android tienen dispositivos de varios niveles de rendimiento. Usted puede de manera fácil encontrar un celular que sea 10x más poderoso para renderizar que otros teléfonos. Modo muy fácil de escalamiento:
El rendimiento gráfico está vinculado por el fillrate, complejidad de pixeles y geometría (conteo de vértices). Todos estos tres pueden ser reducidos si usted encuentra una manera de cull (desechar) más renderizadores. El Occlusion culling (Desecho de oclusión) puede ayudarlo aquí ya que Unity de manera automática desechará objetos afuera del frustum de vista.
En móviles usted está esencialmente vinculado al fillrate (fillrate = pixeles de la pantalla * complejidad del shader * overdraw), y sobre los shaders complejos es la causa más común de causar problemas. Por lo que utilice los shaders móviles que vienen con Unity o diseño su propio pero hágalas lo más simple posible. Si es posible, simplifique sus shaders de pixel al mover el código al vertex shader.
If reducing the Texture Quality in Quality settings makes the game run faster, you are probably limited by memory bandwidth. So compress textures, use mipmaps, reduce texture size, etc.
LOD (Level of Detail (Nivel de Detalle)) - hace que los objetos sean más simples o los elimina completamente a medida que se muevan más lejos.
Los GPUs Móviles tienen grandes restricciones acerca de qué tanto calor pueden producir, qué tanto poder pueden utilizar, y qué tan grande o ruidosos pueden ser. Por lo que comparado a las partes del escritor, los GPUs móviles tienen menos banda ancha, un rendimiento bajo ALU y un poder de texturazación. Las arquitecturas de los GPUs también están prendidas para utilizar tan poco bandaancha y pode como sea posible.
Unity es optimizado para OpenGL ES 2.0, utiliza GLSL ES (similar a HLSL) para un lenguaje de shading. Los shaders integrados a menudo son escritos en HLSL (también conocido como Cg). Esto se compila de manera cruzada a GLSL ES para plataformas móviles. Usted también puede escribir GLSL directamente si usted quiere, pero al hacer esto lo limita a plataformas OpenGL- parecidas (e.g. móvil + Mac) ya que actualmente no hay herramientas de traslación GLSL->HLSL. Cuando usted utilice los tipos float/half/fixed en HLSL, estos terminan como calificadores de precisión highp/mediump/lowp en GLSL ES.
Una lista de buenas prácticas:
void Update (){
// flip between meshes
bufferMesh = on ? meshA : meshB;
on = !on;
bufferMesh.vertices = vertices; // modification to mesh
meshFilter.sharedMesh = bufferMesh;
}
Revisar si usted está vinculado al fillrate es fácil: Su juego corre más rápido si aumenta la resolución de la pantalla? Si es así, usted está limitado por el fillrate.
Intente reducir la complejidad de los shaders mediante los siguientes métodos:
A menudo es el caso que los juegos están limitados por el GPU en el procesamiento de pixel. Por lo que terminan con un poder CPU sin utilizar, especialmente en CPUs móviles multi-core. Entonces a menudo es sensible realizar un pull de algún trabajo en el GPU y ponerlo en el CPU más bien (Unity hace todos esto): mesh skinning, btaching de objetos pequeños, actualizaciones de la geometría de las partículas.
Estos deberían ser utilizados con cuidado, no ciegamente. Si usted no está vinculado a los draw calls, entonces el batching en realidad es peor para el rendimiento, ya que hace que el culling sea menos eficiente y hace que más objetos sean afectados por las luces!
La física puede ser pesada para el CPU. Puede ser perfilada vía el perfilador del Editor. Si la física parece que toma mucho del tiempo de CPU:
Estas son las arquitecturas móviles populares. Esto es diferente a los vendedores de hardware en el espacio de PC/consola, y muy diferente a las arquitecturas de GPU a las GPUS “usuales”.
Gaste un poco de tiempo buscando acercamientos diferentes de renderización y diseñe su juego de acuerdo a esto. Preste una atención especial al ordenamiento. Defina los dispositivos de baja gama soportados tan pronto en el ciclo de diseño. Pruebe en estos con el profiler (perfilador) a medida que usted diseña su juego.
Use una compresión de texturas específica para la plataforma.
Solamente la arquitectura PowerVr (basado ten teja deferred) para preocuparse.
Esto quiere decir:
Y los contras:
Las descargas son implementadas vía la API async proporcionada por OS, por lo que OS decide qué tantos hilos (threads) necesitan ser creados para descargas. Cuando se lance múltiples descargas concurrentes, usted debería tener en cuenta el bando de ancha total del dispositivo que pueda soportar y la cantidad de memoria disponible. Cada descarga concurrente asigna su propio buffer temporal, por lo que debería tener cuidado de no quedarse sin memoria.
A veces no hay nada en la consola, simplemente un crash aleatorio