Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Optimizaciones para android

Iniciado por fenixelian, Junio 30, 2015, 05:20:28 AM

Tema anterior - Siguiente tema
Hola a todos. Hace ya un tiempo que uso unity, soy programador y con la api de unity me es mas que suficiente para poder hacer lo que deseo. Trato de optimizar recursos lo mas que puedo en uso de gpu en los scripts por ejemplo haciendo algoritmos de orden constante y evitando que el recolector de basura pase muy seguido. Sin embargo, si bien puedo hacer juegos para pc, al momento de compilar mi juego para dispositivo android todo anda super lento, las texturas y demás no mantienen un color fijo(como que por ahi salen rallas en el juego o puntos negros). Cuando muevo un objeto por ejemplo en la pc se mueve suabemente pero en el teléfono no. Se que esto es porque yo hago que se mueva 1 unidad por segundo por ejemplo(usando Time.deltaTime) y en la pc tengo entre 60-70 fps mientras que en un SO android esto se hace en 30 fps.
-Para no instanciar objetos constantemente(como podrian ser las balas de las torres en el TD que estoy haciendo) uso pools de objetos, asi lo unico que hago es moverlos dentro o fuera de la ecena segun los necesito.
-Se que los terrenos consumen muchísimos recursos por la cantidad de polígonos que tienen asi que no los uso(por ahora este td lo estoy haciendo solo con las formas geométricas que trae unity y luego haré los modelos 3d con la menor cantidad de polígonos posibles)
-etc
 
O sea me trato de cuidar con los recursos lo máximo posible pero sin embargo el desempeño de mis juego es asqueroso comparado con otros juegos en la tienda de google
 
Las preguntas serian:
1-Veo que los juegos en la tienda logran un desplazamiento agradable a la vista y que no va a tirones.Como puedo lograr eso con mis juegos?
 
2-cual seria la cantidad de polígonos totales en la escena para que el juego corra bien en un dispositivo android?
 
3-Imágenes y texturas(todo lo que puedan explicarme acerca de que texturas tengo que usar para que se vean bien en android y a la vez que no gasten recursos excesivos). Por ejemplo resoluciones y formatos de imagenes, y como tratarlas dentro de unity para lograr un rendimiento óptimo
 
4-Musica:que formato usar? habia usado para uno de mis juegos musica en diferentes formatos pero hacian que la escena tardara mucho en cargarse.Si les bajaba la calidad se escuchaban muy feo aunque tardaban menos en cargarse
 
5-Partículas: Seria genial poder hacer que algunas torretas disparen balas de fuego por ejemplo, pero cuando le pongo el sistema de partículas a las balas, como se podrán imaginar el juego en el teléfono va super lento. Como tengo que hacer para poder usar un sistema de partículas en android? o sea con que cosas me tengo que cuidar para que no consuma tantos recursos?Veo que muchos juegos usan partículas o ciertas animaciones que parecen partículas en forma continua y andan muy bien.
 
6- Sombras luces y demas.Hasta que punto y cantidades puedo usar estos elementos?
 
Todo lo que sepan que puedan explicarme sobre como hacer que un juego ande bien en android y poder desarrollar a nivel profecional es agradecido desde ya.
 
Muchas gracias desde ya a todos los que respondan.Todo lo que sepan y puedan decirme siempre viene bien!!!
 
PD: Los juegos los pruebo en mi telefono android que es un telefono promedio de gama media-alta. 

Junio 30, 2015, 08:05:36 AM #1 Ultima modificación: Junio 30, 2015, 08:08:03 AM por Mantis
Tu juego en Android debe ir fluido al igual que en PC. Para eso tienes que cuidar todo, ya que en general un móvil no tiene la misma potencia que un PC:
 
Empieza por usar una luz direccional y pixel count a cero
Anti Aliasing desactivado.
No uses sombras.
Mantén los Draw call bajos.
Usa shaders para móviles y lo más sencillos posibles.
En el tamaño de texturas usa el mínimo que tenga un aspecto aceptable, si con 512 vale no uses 1024.
 
Estas son algunas cosas que te echan abajo el rendimiento. Si después de esto tu juego va fluido, puedes empezar a meter algunas cosillas más. Más luces, más shaders, mas DC, alguna sombra  etc...
 
Las texturas tienen un parámetro Aniso level. Modificándolo lograrás que se vean mejor (a mayor distancia y ángulo) y que no se vean borrosas.

FNK Games  Games Developer  -  Juegos realizados en Unity para iOS y Android



Cita de: Mantis date=1435644336Tu juego en Android debe ir fluido al igual que en PC. Para eso tienes que cuidar todo, ya que en general un móvil no tiene la misma potencia que un PC:
 
Empieza por usar una luz direccional y pixel count a cero
Anti Aliasing desactivado.
No uses sombras.
Mantén los Draw call bajos.
Usa shaders para móviles y lo más sencillos posibles.
En el tamaño de texturas usa el mínimo que tenga un aspecto aceptable, si con 512 vale no uses 1024.
 
Estas son algunas cosas que te echan abajo el rendimiento. Si después de esto tu juego va fluido, puedes empezar a meter algunas cosillas más. Más luces, más shaders, mas DC, alguna sombra  etc...
 
Las texturas tienen un parámetro Aniso level. Modificándolo lograrás que se vean mejor (a mayor distancia y ángulo) y que no se vean borrosas.
 
 
1000 gracias por tomarte el tiempo de responderme, ya estoy solucionando algunas cositas para que ande mas fluido, sin embargo hay algunas cosas que no te entendí sobre lo que me explicaste porque como dije lo que yo se hacer mas que nada es programar y con el resto de las cosas ando medio flojo.
 
Que seria pixel count? lo busque en los atributos de luz direccional y no lo veo
Que seria Anti Aliasing y para que me sirve? como o donde lo desactivo?
los Draw call que son? me imagino que sera algunos datos que puedo ver cuando pongo stats en la pantalla del juego.Como puedo mantenerlos bajos? En cuanto se consideran bajos para android?
Usa shaders para móviles y lo más sencillos posibles. Cuales exactamente tendría que usar.
 
​De nuevo muchísimas gracias!

Todo eso lo puedes ajustar en QualitySettings:
 
http://docs.unity3d.com/es/current/Manual/class-QualitySettings.html" rel="external nofollow">http://docs.unity3d.com/es/current/Manual/class-QualitySettings.html
 
Los drawcalls (SetPassCalls en unity 5), son la cantidad de envíos que hace el procesador a la gráfica para pintar cada fotograma. Los puedes ver en la ventana Game, desplegando Stats, fíjate en ellos cuando estas ejecutando el juego. En móviles, lo ideal es mantenerlos alrededor de 50 ó 60, aunque a veces puede ser más dependiendo de otros factores, pero siempre intentando no pasarte demasiado.
 
Sobre lo demás que comentas, las luces y sombras calculadas en tiempo real afectan de forma drástica, no se pueden usar. Únicamente usa una luz direccional para toda la escena, si quieres tener más de una luz y sombras, debes precalcularlas (lightmapping). Si haces bien esta parte te bajaran los drawcalls y lo vas a notar mucho.
 
Combina texturas y usa un mismo material para varios objetos. Cada material en pantalla genera un drawcall.
 
Otra cosa que afecta bastante es mover objetos que tengan rigidbody con transform.position, esto no se debe hacer. Si tiene rigidbody, úsalo para mover el objeto.
 
Un saludo.

Cita de: Mantis date=1435644336Tu juego en Android debe ir fluido al igual que en PC. Para eso tienes que cuidar todo, ya que en general un móvil no tiene la misma potencia que un PC:
 
Empieza por usar una luz direccional y pixel count a cero
Anti Aliasing desactivado.
No uses sombras.
Mantén los Draw call bajos.
Usa shaders para móviles y lo más sencillos posibles.
En el tamaño de texturas usa el mínimo que tenga un aspecto aceptable, si con 512 vale no uses 1024.
 
Estas son algunas cosas que te echan abajo el rendimiento. Si después de esto tu juego va fluido, puedes empezar a meter algunas cosillas más. Más luces, más shaders, mas DC, alguna sombra  etc...
 
Las texturas tienen un parámetro Aniso level. Modificándolo lograrás que se vean mejor (a mayor distancia y ángulo) y que no se vean borrosas.
Pero porque no exprimir el maximo potencial de los mobiles? Ahora un mobil tiene 3 gb ram mas de dual-core de mas de 1,5 ghz, porque no exprimirlos.

Cita de: ThePalyerZftP date=1436265189Pero porque no exprimir el maximo potencial de los mobiles? Ahora un mobil tiene 3 gb ram mas de dual-core de mas de 1,5 ghz, porque no exprimirlos.
 
Para conseguir que un juego llegue a la mayor cantidad de gente posible tienes que pensar en todos los tipos de economía, no todos pueden permitirse un móvil como el que mencionas y eso son fans potenciales que pierdes.
 
Cita de: fenixelian date=14356344281-Veo que los juegos en la tienda logran un desplazamiento agradable a la vista y que no va a tirones.Como puedo lograr eso con mis juegos?
 
2-cual seria la cantidad de polígonos totales en la escena para que el juego corra bien en un dispositivo android?
 
3-Imágenes y texturas(todo lo que puedan explicarme acerca de que texturas tengo que usar para que se vean bien en android y a la vez que no gasten recursos excesivos). Por ejemplo resoluciones y formatos de imagenes, y como tratarlas dentro de unity para lograr un rendimiento óptimo
 
4-Musica:que formato usar? habia usado para uno de mis juegos musica en diferentes formatos pero hacian que la escena tardara mucho en cargarse.Si les bajaba la calidad se escuchaban muy feo aunque tardaban menos en cargarse
 
5-Partículas: Seria genial poder hacer que algunas torretas disparen balas de fuego por ejemplo, pero cuando le pongo el sistema de partículas a las balas, como se podrán imaginar el juego en el teléfono va super lento. Como tengo que hacer para poder usar un sistema de partículas en android? o sea con que cosas me tengo que cuidar para que no consuma tantos recursos?Veo que muchos juegos usan partículas o ciertas animaciones que parecen partículas en forma continua y andan muy bien.
 
6- Sombras luces y demas.Hasta que punto y cantidades puedo usar estos elementos?
1. Sin duda es una absoluta armonía entre calidad y rendimiento, hace falta mucho tiempo de depuración para conseguirlo una vez acabado el juego. Cuando más lo mimes más óptimo acabará siendo.
 
2. Más que pensar en póligonos máximos tienes que pensar en crear un buen normal map, ya que si creas un buen normal map de un high poly te dará bastante igual que tu modelo tenga muy pocos polígonos.
 
3. Las texturas solo aumentan el tamaño del compilado final cuanto más tamaño y calidad tengan, pero su implicación en el rendimiento es casi nulo.
 
4. Los archivos de audio les pasa como a las texturas, no influyen demasiado en el rendimiento, así que te recomiendo que busques la mejor relación calidad-peso.
 
5. Para dispositivos móviles es mejor que te olvides de las partículas a no ser que vayas a usarlas con mucha moderación, ya que es de las cosas que más influyen en el rendimiento.
 
6. Trata que todas las luces posibles sean empaquetadas como bake, ya que la iluminación en tiempo real se come la cpu que da gusto.

Muchas gracias por las respuestas. Ya voy solucionando algunas cositas y el rendimiento va mejorando, ahora voy a mover los objetos de cuerpo rigido sin usar position y ver el tema de la luz haber si empieza a funcionar optimamente.

Etiquetas: