SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
 Profiler
 Samples
 Detailed RAM
 Gamebench
 Scripts
 Caches
 Resources Folder
 Pools
 Tips
 Materiales
 Batching
 Alpha
 Atlas
 Shared vs Instance
 CombineChildren
 Texture Formats
 UI (4.6)
 Tips
 Target 60 FPS gama media
 ~ 40 drawcalls, ~50k verts
 ~ 120 tracks runtime
 150 texturas en total
 70 cargadas a la vez
 ~250 animaciones
 ~550 meshes
 Profiler.BeginSample(“DoSomething”);
DoSomething();
Profiler.EndSample();
 Profiler.GetRuntimeMemorySize(t)
 Memory -> Simple/Detailed ->Take Sample
 Acceder al transform es lo mismo que
acceder a GetComponent<Transform>()
 Acceder al GetComponent en el Update está
desaconsejado
 Cachear en el awake/start
private Transform myTransform;
void Awake() {
myTransform = transform;
}
void Update() {
myTransform.Translate(0, 0, 5);
}
 Jamás usar GameObject.Find.Aparte de ser
lentísimo, el nombre puede cambiar y tu
código dejará de funcionar.
GameObject.Find ("MenuObject").transform.
GetChild(2).transform.GetChild (1).transform;
 Referencias en la propia clase (public). Si
necesitas muchas referencias, hacer un
CustomInspector
 Muy cómodo hacer Resources.Load pero
ojocuidao con los tiempos de carga. Evitarlo
dentro de lo posible.
 Uso aceptable: elementos que no se utilizan
en el juego inicialmente, pero que más tarde
puede que si (cosméticos, habitaciones para
un sistema aleatorio, etc). Si se referenciasen
estos elementos se cargarían en memoria
siempre, haciendolo desde Resources no.
 Instantiate / Destroy son operaciones MUY
costosas.
 En el pool podemos tener pre-creados una lista
de objetos a usar e ir activando/desactivando y
reseteando según necesitemos.
 Dos posibilidades. Crear todos los objetos en el
Awake o tenerlos ya creados en la Scene.
 Dato curioso. Cargar una escena con un Pool y X
elementos tarda menos que cargar una escena
con un Pool que en su awake cree X elementos
 Foreach genera basura, no usarlo nunca.
 Las clases ArrayList y Array son muy lentas en
Unity. Mucho más rapido usar List o un array
simple.
 ¿Seguro que necesitas llamar al método para
actualizar la distancia cada frame? Optimizar
las llamadas recurrentes.
DYNAMIC
 Se aplica automáticamente
(si se cumplen requisitos)
 Menos de 900 vertices.
300 si el shader usaVertex
Position, Normal y UV
180 si además se usa UV1 y
Tangent.
 Misma escala
STATIC
 Se activa en
QualitySettings
 Hay que marcar los objetos
como Static, no se podrán
mover durante todo su
lifetime.
 Mejor performance que
Dynamic batching
 Unity Pro
 Gran ahorro en el número de draw calls = mejor performance
 Batching solo funciona en objetos con el mismo material -> atlas (ojo con instancias)
 MultiplesAlpha en pantalla multiplican
drawcalls
 Usar cutout en la medida de lo posible (peor
calidad, mejor rendimiento)
 Unificar todos los efectos con Alpha del juego
en un Atlas para hacer batching
 No soportado por texturas ETC (tampoco el
cutout)
 Agrupando texturas en un Atlas conseguimos
aumentar las posibilidades de Batching
 Agrupar elementos relacionados (por nivel,
por obstaculo / decoracion, etc).
 TexturePacker de Unity funciona de forma
automática, pero tiene algunos problemas
 TexturePackerPro > all
 Si accedemos al material desde script
(renderer.material) estaremos creando una
Instancia del material
 Las instancias no hacen batching, por lo que
generarán nuevos draw calls
 Usar siempre que se pueda el sharedMaterial
(renderer.sharedMaterial). Esto cambiará los
parámetros en todos los objetos y no creará
instancias del material.
 Utilidad de Unity para combinar geometría al
vuelo
 Se puede usar on demand en runtime o hacerlo
desde el editor y tener las meshes preparadas
 La mesh será gigante, no se hará culling
eficientemente y ocupará más espacio en
memoria
 Teniendo todos los elementos combinados solo
se hará un draw call por material, aunque haya
diferentes escalas y demás dado que contará
como una sola mesh.
 Mejor compresión para Android -> ETC 4 bits
 Soportado en el 99.9% de los moviles (OpenGL 2.0)
 No soporta Alpha
 ETC2 soporta Alpha, pero solo está asegurado en OpenGL 3.0
 Mejor compresión para iOS -> PVRTC 4 bits
 Soportado en todos los dispositivos
 Soporta Alpha
 Texturas cuadradas o las deformará
 16 bits / 32 (Truecolor)
 Si necesitamos Alpha en Android o nada de perdida de calidad
sobre la textura original
 Gran impacto en memoria (1024x1024TC + mipmaps -> 5.3MB)
 TextMeshPro >Text (65$). Mejor calidad con
escalados, mejor implementación de outline /
sombras / efectos, más opciones con el texto
 No actualizar cada frame la UI
 Separar en diferentesCanvas en caso de que
algun panel tenga animaciones.Al mover /
animar alguna parte, hace draw y batch de
todo el canvas al completo
guillermo.andrades@cremagames.com
@xYaW
@CremaGames

Más contenido relacionado

Similar a Performance Unity Mobile

Similar a Performance Unity Mobile (20)

Motores de graficos
Motores de graficosMotores de graficos
Motores de graficos
 
Look and feel java
Look and feel javaLook and feel java
Look and feel java
 
Blender
Blender Blender
Blender
 
Comandos y tema de 3 dmax y vray curso arqmodel
Comandos y tema de 3 dmax y vray curso arqmodelComandos y tema de 3 dmax y vray curso arqmodel
Comandos y tema de 3 dmax y vray curso arqmodel
 
El Procesador o CPU 3
El Procesador o CPU 3El Procesador o CPU 3
El Procesador o CPU 3
 
Ogre Game Engine
Ogre Game EngineOgre Game Engine
Ogre Game Engine
 
ECImag 2010 - Clase 3/5
ECImag 2010 - Clase 3/5ECImag 2010 - Clase 3/5
ECImag 2010 - Clase 3/5
 
Programación de código
Programación de códigoProgramación de código
Programación de código
 
Unidad i
Unidad iUnidad i
Unidad i
 
Web Fonts: Rendereo y suavizado
Web Fonts: Rendereo y suavizadoWeb Fonts: Rendereo y suavizado
Web Fonts: Rendereo y suavizado
 
Tema 1
Tema 1Tema 1
Tema 1
 
Flash Duban
Flash DubanFlash Duban
Flash Duban
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010
 
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018  Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
 
Guia para el programa desktop garp
Guia para el programa desktop garpGuia para el programa desktop garp
Guia para el programa desktop garp
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Resumen Ejecutivo1.2
Resumen Ejecutivo1.2Resumen Ejecutivo1.2
Resumen Ejecutivo1.2
 
Elementos de la interfaz de flash
Elementos de la interfaz de flashElementos de la interfaz de flash
Elementos de la interfaz de flash
 
Final
FinalFinal
Final
 
Programación con Pygame V
Programación con Pygame VProgramación con Pygame V
Programación con Pygame V
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 

Último (11)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 

Performance Unity Mobile

  • 1.
  • 2.
  • 3.  Profiler  Samples  Detailed RAM  Gamebench  Scripts  Caches  Resources Folder  Pools  Tips  Materiales  Batching  Alpha  Atlas  Shared vs Instance  CombineChildren  Texture Formats  UI (4.6)  Tips
  • 4.
  • 5.  Target 60 FPS gama media  ~ 40 drawcalls, ~50k verts  ~ 120 tracks runtime  150 texturas en total  70 cargadas a la vez  ~250 animaciones  ~550 meshes
  • 6.
  • 8.  Memory -> Simple/Detailed ->Take Sample
  • 9.
  • 10.
  • 11.  Acceder al transform es lo mismo que acceder a GetComponent<Transform>()  Acceder al GetComponent en el Update está desaconsejado  Cachear en el awake/start private Transform myTransform; void Awake() { myTransform = transform; } void Update() { myTransform.Translate(0, 0, 5); }
  • 12.  Jamás usar GameObject.Find.Aparte de ser lentísimo, el nombre puede cambiar y tu código dejará de funcionar. GameObject.Find ("MenuObject").transform. GetChild(2).transform.GetChild (1).transform;  Referencias en la propia clase (public). Si necesitas muchas referencias, hacer un CustomInspector
  • 13.
  • 14.  Muy cómodo hacer Resources.Load pero ojocuidao con los tiempos de carga. Evitarlo dentro de lo posible.  Uso aceptable: elementos que no se utilizan en el juego inicialmente, pero que más tarde puede que si (cosméticos, habitaciones para un sistema aleatorio, etc). Si se referenciasen estos elementos se cargarían en memoria siempre, haciendolo desde Resources no.
  • 15.  Instantiate / Destroy son operaciones MUY costosas.  En el pool podemos tener pre-creados una lista de objetos a usar e ir activando/desactivando y reseteando según necesitemos.  Dos posibilidades. Crear todos los objetos en el Awake o tenerlos ya creados en la Scene.  Dato curioso. Cargar una escena con un Pool y X elementos tarda menos que cargar una escena con un Pool que en su awake cree X elementos
  • 16.  Foreach genera basura, no usarlo nunca.  Las clases ArrayList y Array son muy lentas en Unity. Mucho más rapido usar List o un array simple.  ¿Seguro que necesitas llamar al método para actualizar la distancia cada frame? Optimizar las llamadas recurrentes.
  • 17.
  • 18. DYNAMIC  Se aplica automáticamente (si se cumplen requisitos)  Menos de 900 vertices. 300 si el shader usaVertex Position, Normal y UV 180 si además se usa UV1 y Tangent.  Misma escala STATIC  Se activa en QualitySettings  Hay que marcar los objetos como Static, no se podrán mover durante todo su lifetime.  Mejor performance que Dynamic batching  Unity Pro  Gran ahorro en el número de draw calls = mejor performance  Batching solo funciona en objetos con el mismo material -> atlas (ojo con instancias)
  • 19.
  • 20.
  • 21.  MultiplesAlpha en pantalla multiplican drawcalls  Usar cutout en la medida de lo posible (peor calidad, mejor rendimiento)  Unificar todos los efectos con Alpha del juego en un Atlas para hacer batching  No soportado por texturas ETC (tampoco el cutout)
  • 22.  Agrupando texturas en un Atlas conseguimos aumentar las posibilidades de Batching  Agrupar elementos relacionados (por nivel, por obstaculo / decoracion, etc).  TexturePacker de Unity funciona de forma automática, pero tiene algunos problemas  TexturePackerPro > all
  • 23.
  • 24.  Si accedemos al material desde script (renderer.material) estaremos creando una Instancia del material  Las instancias no hacen batching, por lo que generarán nuevos draw calls  Usar siempre que se pueda el sharedMaterial (renderer.sharedMaterial). Esto cambiará los parámetros en todos los objetos y no creará instancias del material.
  • 25.  Utilidad de Unity para combinar geometría al vuelo  Se puede usar on demand en runtime o hacerlo desde el editor y tener las meshes preparadas  La mesh será gigante, no se hará culling eficientemente y ocupará más espacio en memoria  Teniendo todos los elementos combinados solo se hará un draw call por material, aunque haya diferentes escalas y demás dado que contará como una sola mesh.
  • 26.  Mejor compresión para Android -> ETC 4 bits  Soportado en el 99.9% de los moviles (OpenGL 2.0)  No soporta Alpha  ETC2 soporta Alpha, pero solo está asegurado en OpenGL 3.0  Mejor compresión para iOS -> PVRTC 4 bits  Soportado en todos los dispositivos  Soporta Alpha  Texturas cuadradas o las deformará  16 bits / 32 (Truecolor)  Si necesitamos Alpha en Android o nada de perdida de calidad sobre la textura original  Gran impacto en memoria (1024x1024TC + mipmaps -> 5.3MB)
  • 27.
  • 28.  TextMeshPro >Text (65$). Mejor calidad con escalados, mejor implementación de outline / sombras / efectos, más opciones con el texto  No actualizar cada frame la UI  Separar en diferentesCanvas en caso de que algun panel tenga animaciones.Al mover / animar alguna parte, hace draw y batch de todo el canvas al completo