De qué son capaces los dispositivos móviles? Cómo debería planear su juego de acuerdo a esto? Si su juego corre lento, y el profiler (perfilador) indica que está renderizando cuello de botellas, cómo usted sabe qué cambiar, y cómo hace que su juego se vea tan bueno pero todavía que corra rápido? Esta página está dedicada a una exposición no general y no técnica de los métodos. Si usted está buscando por algo especifico, ver la página Optimizaciones del Renderizado
Lo que razonablemente se puede esperar para correr en los móviles actuales de los consumidores:
Lightmapped static geometry (Geometría estática lightmapped). Pero tenga cuidado de:
Utilizando muchos shaders (sombreadores) alpha-test
Bumpmapping, especialmente utilizando los shaders integrados.
Cantidad elevada de polígonos
Personajes animados, incluso con shaders de lujo! Pero tenga cuidado de:
Multitudes masivas o personajes con hartos polígonos
Juegos 2D con sprites. Pero tenga cuidado de:
Dibujar mucho, o muchas capas dibujadas encima de cada uno.
Efectos de partículas. Pero tenga cuidado de:
Alta densidad en grandes partículas. (Muchas partículas dibujadas encima de cada una. Esta es otra situación que se dibuja de más)
Un número ridiculo de partículas, o colliders de partículas.
Física pero tenga cuidado de:
Mesh Colliders:
Muchos cuerpos activos.
Lo que no puede razonablemente esperar para correr en los móviles actuales de los consumidores:
Efectos de Pantalla Completas como glow y un campo profundo.
Iluminación dinámica por pixel (hay múltiples luces que son marcadas importante y no son baked al lightmap)
Cada objeto afectado es dibujado una vez adicional para cada luz dinámica que usted utilice, y esto se vuelve lento rápidamente.
Sombras en tiempo real en todo
Unity tiene soporte para sombras en tiempo real en plataformas móviles, pero su uso debe ser muy acertado, y ciertamente limitado a dispositivos de alta gama.
Ejemplos - Cómo se hacen los juegos de alta categoría
Shadowgun es un ejemplo impresionante de lo que se puede hacer en un hardware móvil actual. Pero más específicamente, es un buen ejemplo de lo que no se puede hacer, y cómo abordar las limitaciones. Especialmente porque una pequeña parte del juego se ha hecho disponible públicamente en este blog post.
Aquí hay un resumen básica de las cosas de que Shadowgun hace con el fin de mantener el rendimiento arriba:
Iluminación dinámica - casi no se utiliza-
Sombras blob y los lightmaps son utilizados en vez de cualquier sombra real.
Lightprobes, en vez de luces verdades, son utilizadas en sus personajes.
Flashes muzzle agregados a los datos del ligthprobe vía script.
La única iluminación dinámica por pixel es una dirección de luz arbitraria utilizada para calcular un BRDF en los personajes.
Bumpmapping - casi no se utiliza.
El bumpmapping verdadero solo se utiliza en personajes.
El mayor contraste y detalle posible es baked a los mapas de textura difusos. La información de iluminación de los bumpmaps es baked.
Un buen ejemplo es su estatua de textura, o su pared brillante, como se ve en la derecha. Ningún bumpmap es utilizado para renderizar esto, la especularidad es falsificada al hacerle bake a una textura. El lightmapping es combinado con una iluminación de vértice (vertex-lighting) basado en un resaltado especular para darle a estos modelos un aspecto de brillo.
Se utilizan las texturas UV-Scrolling en vez de los efectos de partículas densas.
Efectos de niebla - evitado.
Sus rayos de dios son modelados a mano.
Planos sencillos que se desvanecen para adentro y afuera son utilizados para lograr efectos cinemáticos de niebla sin en realidad renderizar cualquier niebla.
Esto es más rápido porque los planos son un poco y están lejos entre ellos, y esto significa que la niebla no tiene que ser calculada en cada pixel en cada shader.
Resplandor (glow) - evitado.
Los planos sprite mezclados son utilizados para darle apariencia a un brillo en ciertos objetos.
Este demo fue diseñado para mostrar que Unity es capaz de funcionar en dispositivos Android de alta gama.
Iluminación Dinámica - no se utiliza.
Solamente Lightmaps.
Bumpmapping - utilizado
Los ladrillos son todos bumpmapped, prendidos por lightmaps direccionales. Esto es dónde la parte de “dispositivos de alta game” viene al juego.
Reflexiones en tiempo real - limitado.
Colocan con cuidado sus superficies reflectivas en tiempo real separadas y en áreas aisladas, para que solamente uno se ejecute a la vez, y el entorno que necesita ser renderizado el doble pueda ser fácilmente culled (cortado).
En pocas palabras - Esto qué significa para su juego
Entre más respete y entienda las limitaciones de los dispositivos móviles, mejor se verá su juego, y se va a realizar de manera más suave. Si usted quiere hacer un juego de alta clase para móviles, usted se beneficiará de entender el pipeline de las gráficas de Unity y ser capaz de escribir sus propios shaders. Pero si usted quiere algo para agarrar y utilizar ya, los shaders Shadowgun, que están disponibles aquí, es un buen lugar para comenzar.
No lo simule, hágale bake!
No hay duda que los juegos intentan seguir las leyes de la naturaleza. El movimiento de cada proyectil parabólico y el color de cada pixel de chromo brillando se deriva por formulas primero para mimar observaciones del mundo real. Pero un juego es una parte de una simulación científica y una parte de pintar. Usted no puede competir en el mercado móvil con un renderizado preciso físico; el hardware simplemente no está ahí, si usted intentar imitar el mundo real, su juego terminará limitado, monótono, y con lag.
Usted tiene que recoger su polígonos y sus nodos de mezcla (blend nodes) como si fueran pinceles.
Los baked bumpmaps mostrados en Shadowgun son un excelente ejemplo de esto. Hay unos reflejos especulares ya en la textura - el ojo humano no nota que no coinciden con las luces reflejadas y las direcciones de la vista - son simplemente detalles de contraste altos en la textura, completamente falsos, no obstante terminan viéndose muy bien. Esta es una técnica común de trampa que ha sido utilizada en muchos juegos exitosos. Compare el visor en la primera foto de Halo que sacaron con el visor de esta foto. Parece que las protuberancias de la armadura se sale de arriba del casco en el visor, pero el reflejo en realidad es baked a la textura del viso. En League of Legends, un efecto de un hechizo parece tener una luz de pixel adjunta a este, pero en realidad es un plano mezclado con una textura que probablemente fue generado al tomar una foto de una luz de pixel brillando en el suelo.
Qué funciona bien:
Geometría estática Lightmapped
Una iluminación dramática y unos ambientes grandes dramáticos no funciona. Escoja uno, o el otro.
Lightprobes para mover objetos
Hardware móvil actual no funciona en realidad para muchas luces dinámicas, y no puede hacer sombras. Los Lightsprobes son una solución muy limpia para mundos de juego complejos con una iluminación estática.
Shaders especializados y detallados, texturas de alto contraste
Los shaders en ShadowGun minimiza los cálculos por-pixel y explotan texturas complejas y de alta calidad. Ver la página de Rendering Optimizations para más información acerca de cómo hacer texturas que se ven mucho mejor incluso cuando el shader es simple.
Gráficas de caricatura
Quién dice que su juego se tiene que ver como una foto? Si usted hace que la iluminación y el ambiente sea la responsabilidad del artista de textura, no el motor, usted no tiene que preocuparse por optimizar el renderizado.
Qué no funciona:
Brillo y otros efectos de Post Procesamiento
Aproxime tales efectos cuando sea posible al utilizar quads mezclados, reviso el proyecto de Shadowgun para un ejemplo de esto.
Bumpmapping, especialmente con shaders integrados.
Uselo escasamente, solamente en los personajes y objetos más importantes. Cualquier cosa que pueda tomar la pantalla entera probablemente no debería ser bumpmapped.
En vez de utilizar bump maps, bake más detalles y contraste a la textura difusa. El efecto de League of Legends es un ejemplo interesante de esto siendo utilizado con éxito en la industria.