Descripción General
Mesh Baker es un toolkit para Unity que ayuda a mejorar el performance optimizando props y escenas, reduciendo el numero de batches, Esto se logra combinando meshes en un solo objeto y materiales/texturas en atlas.
Alcances
Siguiendo las buenas prácticas de optimización en el quest, el objetivo es lograr batches por debajo de 300 y arriba de 75 FPS. Se busca aplicar este plugin en escenarios estáticos y en objetos dinámicos con skinned mesh de complejidad sencilla para reducir el número de batches y además reducir tiempos que generaría hacer estos procesos manualmente.
Proceso de Desarrollo
Este doc contiene un resumen general de los alcances del plugin asi que se incluyen video-tutoriales con mas detalles sobre su funcionamiento.
Instalación en Unity
Descarga desde la asset store Mesh Baker | Modeling | Unity Asset Store

Configuración del proyecto
- URP
- 4X Antialiasing
- Disable Depth Texture (En el asset de URP)
- Disable Color texture
- Elegir ASTC texture compression (en Built Settings y en Player Settings)
- Desactivar postprocessing
- Desactivar sombras en tiempo real
- No usar ningún mapa de Height en los materiales
Cómo funciona
- Combina las texturas de los objetos en atlas, lo que resulta en un solo material.
- Combina los objetos individuales en un solo objeto grande
Buenas prácticas de assets 3D para un correcto merging con Mesh Baker
- Not using out of bound UVs on 3D models, all UV shells should be inside the 0 to 1 UV set box.
- Not using too many tiling materials (keep the number of tiling material at minimum), use same UV space instead to achieve the tiling effect.
- Aunque no es un impedimento, es recomendable tener mapas de texturas de Metallic aunque sean de tamaño 64x64.
Procedimiento: Uso en escenarios (static objects)
A) Configuración inicial
- Abre la Escena que quieres optimizar y crea un TextureBaker and MeshBaker Game Object en la jerarquía.

2.Selecciona el MeshBaker GameObject y blockea la vista del inspector

3.Selecciona todos los modelos que quieres combinar y****agrúpalos a un padre, con clic derecho en la jerarquía > Create Empty Parent (este paso no es tan necesario pero asi se tiene una mejor organización.)

4.Selecciona el grupo/objetos y arrástralos a la sección "Object To Be Combined en el Meshbaker Game Object, Aparecerá un lista de todos los objetos que se combinarán.

Elige entre estas dos opciones la mejor, si es algo pequeño Generate new UV2 pero asegúrate de que los objetos estén marcados como static., detalles más abajo en la seeción de Meshbaker y lightmapping.
B) Bake de textura en atlases
Antes de combinar los objetos hay que combinar las texturas en uno/varios atlases.
- Crea un folder para guardar las nuevas texturas y materiales bakeados.
- En el Texture Baker Game Object , da clic en " Create Empty Assets For Combined Material" .

- Guarda el asset en el folder creado anteriormente.

Hay dos métodos para hacer el bake de texturas, dependerá de que tan complicada es la escena.
1 - Un solo atlas/material
2- Multiples atlases/materiales
Método 1 - Un solo atlas
- Cuándo se usa
- No se tienen muchos tiling materials
- El numero de texturas no es tan alto
- Ventajas
- El el método más sencillo, como resultado se tendrá un solo atlas/material por cada selección de objetos que decidas
- Desventaja
- Si se tienen muchas texturas o tiling materials, el atlas resultara borroso y de mala calidad con tal de hacer encajar todas las texturas en un solo mapa
- Evitar incluir objetos que requieran un material transparente, combina estos por separado.
- Procedimiento
- Desmarca la casilla de "multiple Combined Materials" y usa esta configuración. El tamaño del atlas dependerá de cuantas texturas se tiene. Después da clic en "Bake Material Into Combined Material".

- Ejemplo:
- En esta escena se tiene dos tiling material, la textura de ladrillos de la pared y el techo. Sin embargo se tienen muchas texturas/materiales y muchos tienen texto o partes que requieren leerse con claridad. Por lo que deje el tamaño del atlas en 8192.
- Resultado:


- Nota: Se generaran tantas texturas como mapas hay conectados en el shader que esta en uso, en este caso se generaron 5 texturas.
Escenario sin optimizar con los objetos separados / 1749 batches /27 materiales /56 texturas
Escenario con optimización "manual" - 59 Batches / 27 materiales / 56 texturasLos objetos que comparten mismo material combinados manualmente desde blender/maya
Escenario 8 batches/ un solo mesh/ un material/5 texturas**.**Se redujeron los batches, sin embargo, algunas partes de los tubos (etiqueta de flechas) y las paredes(ladrillos) se blurearon, recomendaría que la pared se dejara como un tiling material sin combinar en atlas. Esto no aumentaría mucho en batches y mejoraría la calidad visual. Otro problema que surge es que tenia un par de texturas transparentes, estos desaparecieron en la textura y el objeto al hacer el bake. Los objetos con transparencia se tendrían que combinar entre si y no con los opacos.
Método 2 - Bake de multiples atlas de textura/materiales
- Cuándo se usa
- Se tienen muchos tiling materials
- Meshes con UVS fuera de los límites
- Materiales con shaders diferentes
- Objetos que tienen asignados varios materiales que son diferentes entre sí, ej. casa (metal,brick,glass,etc) Personajes(piel y ropa ), árboles (tronco opaco, hojas transparentes)

- Ventajas
- Como se crean varios atlases las texturas no se blurrea y mantienen la calidad.
- Permite agrupar atlases por cada shader diferente.
- Permite agrupar atlases por materiales.
- Desventaja
- Puede producir muchos atlases/texturas.
- Procedimiento
Activa la casilla **"**Multiple Combined Material" y realiza la siguiente configuración

Da clic en “Build Source To Combined Mapping From Objects To Be Combined“.
Es creará un arreglo automático de "Combined Materials" según el shader. Nota: Aunque suele generar más materiales de los necesarios y no garantiza un buen resultado siempre, en este modo también puedes agregar o quitar source materials de la lista.
Activa las casillas “Consider Mesh UVs“ para todos los materiales (mientras no sean tiling materials)

Puedes Agregar/agrupas los materiales que quieres que sea combinados juntos a la lista en Source Materials

Desventajas:
- No garantiza un buen resultado siempre
- Es un poco confuso si hay muchos materiales
- Cuidado con los tiling materials
También puedes hacerlo manualmente dando clic en el boton + para crear un set para el material combinado. Haz tantos como consideres. Si agregas otro material combinado se creará con la lista anterior, puedes solucionar esto cambiando la casilla del numero de materiales a 0 y quedará limpia la lista, también ten cuidado de no repetir materiales entre listas o te aparecerá error en consola.
No olvides crear los assets de materiales combinados dando clic en "Create Empty Assets For Combined Material" después de crear las listas de los materiales fuente.

Estos nuevos materiales combinados por default se crean con el Legacy Shader/diffuse asi que recuerda cambiarlos a Lit (o el shader que estes usando) antes de hacer el bake.


Ahora da clic en “Bake Materials Into Combined Material“ para generar los atlases de textura.
Cuando se tengan Tiling materials/textures, se requiere combinarlo en un solo material cada uno , desactiva la casilla de Consider Mesh Uvs. y haz un bake de nuevo. Esto es un equivalente a combinar en maya/blender los objetos que comparten el mismo material tiled sin modificar la textura. En esta acción no se crean nuevas texturas para los materiales combinados, solo se les asigna el mismo material a todos los elementos y se conectan las texturas tiled originales.
Reglas
> 1 material = Consider Mesh UVs ON
1 Material = Consider Mesh UVs OFF

En este ejemplo esta desactivado Consider Material UVs en los tiling materials y en el ultimo material, donde combino todos los materiales del auto, si esta activado.

Ej. El resultado de esta configuración seria 3 tiling materials (floor/wood/brick) y un material/atlas para el carro de policía.
**Recuerda que puedes seguir haciendo ajustes y haciendo bake de materiales/meshes siempre y cuando no elimines el game Object Mesh Baker de la jerarquía. **

Ejemplo de bake con tiling materials.
Originales 5 meshes / 3 materiales / 16 Batches

Baked 1 mesh/3 materiales / 12 batches

Ejemplo 2 Materiales transparentes y opacos. En este primer ejemplo hice una material combinado para: el cuerpo del carro, otro para las partes metálicas, y un tercero combinando las sombras falsas con los cristales. Sin embargo esta combinación no me resultó del todo bien, por que me marca los cristales invisibles, así que separe las sombras en otro material y los cristales en otro.

Modelos originales 239 Batches 57 Objetos/ 17 materiales
Modelos con multiple material combined 9 Batches/ 1 mesh /3 materiales

TIP: Combina cristales en un solo material, los materiales con mapa de trasparencia como Sombras falsas en otro material y combina los materiales con alpha clipping en otro grupo. También considera cual es la mejor opción debido a que tener transparencias una detrás de la otra puede causar flickering que solo se arregla con la prioridad de renderizado del material y para esto deberán estar en meshes separadas con materiales individuales.
Hay casos en los que aplicamos el color tint en el albedo del material, o agregamos solo una textura y modificamos los sliders de los materiales, esto se puede guardar en el atlas activando la opción Blend non- texture properties en las opciones del bake material.

EJ. Prueba con materiales cristalinos sin mapa de texturas , como son valores numéricos me creó un mapa pequeño de 64x64 px de albedo y metallic.

Los del a izquierda son objetos separados con un material indivual y el de la derecha es un solo objeto con un material.

B) Mesh Baking
Después de bakear las texturas/materiales se procede a bakear las mallas en una o varios objetos. Este procedimiento se repite cada que se hace vuelve a generar los atlases de texturas por algún ajuste.
Nota: También se puede saltar el paso el bake de texturas y solo combinar los objetos, si los objetos comparten el mismo material.
Caso 1 . Bake de un grupo pequeño de objetos en escena. Ejemplo una casa que esta construida con múltiples meshes.

En este caso no se necesita modificar ningún parámetro del mesh baker , solo da clic en "Bake All Child MeshBakers" después de generar los atlases.


**NOTA:**Toma en cuenta que esta nueva mesh se genera como un asset nativo de Unity, por lo que si buscas el archivo FBX no lo encontraras. Si deseas exportar este mesh a otro proyecto de Unity, tienes que hacerlo un PREFAB (arrastrando el objeto al panel de Project o activar la opcion Create Prefab del panel de mesh baker) y exportar un package de este, si necesitas usarlo fuera de Unity, usa FBX Exporter para obtener un FBX.
Caso 2 : Hacer un bake de todo el escenario o una gran parte de él.
Para grandes escenarios es buena idea agrupar partes de él en clusters , asi mesh baker creará un mesh para cada cluster/grupo. Esto también es útil si quieres usar Oclussion Culling.
Mesh Baker tiene una herramienta para agrupar los objetos en clusters.
Haz scroll hacia abajo en "MB3_Mesh Baker Grouper" ,en el campo Parent Scene Objectagrega el padre de la escena (Environment) puede ser un empty game object posicionado en el centro del escenario. ConfiguraCluster Type en "Agglomerative" después da clic en "refresh clusters".

Juega con el valor de**"Max Distance"** y verifica en la visualización de la escena el rango que toma para agrupar las geometrías. El valor de "18" funciona bien usualmente.
Después da clic en “Generate Mesh Bakers“ para generar los meshes bakers para cada cluster.

Finalmente, da clic en “Bake All Child MeshBakers“ para generar las baked meshes para cada cluster.

Dependiendo del tamaño de la escena se combinarán tantos objetos en tantos grupos según la configuración.
Batches 31,536 / 15,768 objetos

Batches 2,743 /18 Clusters con 4-6 objetos cada uno/
Mesh Baker y Lightmapping
Como sabemos, los objetos tienen un primer set de UVs donde se mapean las texturas, y puede contener un segundo juego de uvs hecho desde blender/maya/3dmx que se usar para mapear la iluminación o puede ser generado desde Unity cuando se da clic en Generate lightmaps UVs en los ajustes de importación.
En la sección de Mesh Baker Settings permite revisar ajustes para los lightmaps uvs , Tenemos estos dos que son los más usados.

Estos son los usos de cada uno (los que están en rojo no debemos usarlos salvo algún caso donde se requiera):
Preserve_current_Lightmapping : Solo funciona en versiones muy viejas de Unity
Ignore_UV2 : Ignora el canal/set UV2 para la malla combinada. Úsalo si no vas a incluir la nueva mesh en el bake de iluminación.
Copy_UV2_unchanged : Copia el canal de uvs de las mallas originales a la nueva malla combinada. Pero no funcionará para el mapeo de iluminación porque los triángulos se encimarán.
Generate_new_UV2_layout will generate : Generará un canal de UV2 apropiado para el mapeo de iluminación. Es similar a usar Generate lightmaps UVs en los ajustes de importación del FBX. Ten cuidado con esto en escenas/objetos grandes a combinar. Asegúrate que la escena/objetos estén en static y activos antes de hacer esto.
Copy_UV2_unchanged_to_separate_rects : Esta opción copia el set uv2 de las mallas de origen, y funciona para el mapeo de iluminación siempre y cuando tus mallas de origen tengan un adecuado UV2 (es decir, activaste Generate UV lightmapping en la importación).
Combining Skinned meshes
El bake de texturas y meshes también se puede aplicar a personajes animados que contengan un skinned mesh. Casos de uso:
Grupo de personajes ej.una parvada de pájaros volando en una misma área
Cuztomizable Characters: Para personajes que se les puede cambiar la ropa/cabello/props, solo que esta combinación de hace en tiempo real.
Baking accesories into Skinned mesh Character : Cuando se añade/emparenta un objeto (mesh renderer) a un skinned mesh. Puedes elegir si se unirá a un joint existente aunque perderá movilidad, o añadir un joint extra
Combine Many Low poly meshes into a Skinned Mesh : Animación de una pared/vidrio rompiéndose:(la original no tiene un skinned mesh) y la convierte en una skinned mesh para que se considere un solo drawcall.
Meshbaker también permite hacer combinaciones de skinned mesh y texturas en tiempo real. Esta es una función avanzada que se hace mediante un script.
Procedimiento
El procedimiento es muy similar a bakear las meshes simples. La diferencia esta en elegir Skinned Mesh Render en las opciones de Renderer.

Si tus modelos tienen blendshapes puedes agregarlos activando este checkbox Include Blend Shapes , y si deseas combinar los que tengan el mismo nombre activa el checkbox de abajo. Esto te permite controlar los blendshapes desde la nueva mesh combinada. Sin embargo, si los blendshapes esta animados desde la fuente de origen, la nueva mesh no los leerá.

Para guardar la nueva skinned mesh combine como prefab debes incluir las meshes originales. Ya que para reproducir las animaciones se usan los archivos base. Este proceso se puede hacer usando mesh baker, Selecciona mesh baker en tu jerarquía, y en output options , cambia a Bake into Prefab, crea y guarda el nuevo prefab y más bajo da clic en el botón Bake.
El resultado será un prefab que contenga la mesh combinada y clones de las meshes originales.


Errores :
Si la animación de alguno de los personajes no se reproduce asegúrate que tus meshes tengan la opción Always animate .
Meshbaker no puede combinar skinned meshes que tengan activado "Optimize Game Object" en los ajustes de importación.

Prueba con gatos. Este modelo tiene 5 materiales, animación con joints y blendshapes, Configuración de materiales y texturas resultantes.

Batches 91 /Skinned meshes 56 / 5 materiales
Batches 11 / skinned mesh 1/ materiales 2/ pero No funciona animación del blendshape de la fuente original solo de joints
Aunque no respeta la animación de Blendshapes de la fuente de origen en la malla combinada, si puedes animar los blendshapes, Este proceso es el mismo al hacer una animación en Unity.
Creas un controlador y un clip de animación, y lo conectas a través de un animator component en la nueva malla creada. Al darle play, se van a reproducir ambas animaciones.
Video sobre animación de blendshapes en la nueva skinned mesh combinada
[Video no disponible: Animacion blendshapes.mp4 — removido durante la migración. Las áreas correspondientes ya fueron notificadas.]
Consideraciones Generales
- No incluyas objetos con materiales transparentes junto con materiales opacos en el bake de texturas/materiales con el método 1, Mantén esos objetos como subobjetos de la mesh combinada o materiales separados.
- Después de generar el mesh baked conviertelo en un Prefab.
- Después de generar las nueva/s meshes se tiene que hacer el bake de luces de nuevo.
- Haz pruebas sobre que objetos funcionan mejor combinados en un atlas y que otros se podrían dejar solo con el tiling material.
- Al combinar skinned meshes los blendshapes se respetan pero no se considera su animación, sin embargo, si se pueden animar desde Unity.
Enlaces de descarga
Liga de descarga (Usar cuenta de developer si no aparece en tu cuenta personal de Inmersys) Mesh Baker | Modeling | Unity Asset Store
Pagina web Mesh Baker – Digital Opus
Playlist con Tutoriales https://youtube.com/playlist?list=PLCzm-udM-shncdtvrieqgi-hHDU1kt0d4
Archivos Adjuntos
Comentarios
Si bien es una herramienta que el programador puede aplicar sin problema, es recomendable que sea el artista 3D quien haga el bake, para balancear entre optimización y calidad visual.
Importante hacer testing con el visor (si es para quest) después de hacer el bake.
Mantén en carpetas separadas los assets combinados texturas/materiales/prefabs de meshes aparte de los originales
Ventajas
+Funciona en URP/HDRP/Built in
+Non-destructive workflow. Se crea un nuevo mesh sin modificar el original
+Tarda poco tiempo en hacer el bake (esto depende de la escena, sin embargo para el ejemplo usado se tardo 1-2 min por lo que sigue siendo un buen tiempo)
+Tiene mucha documentación de apoyo (Manual,tutoriales,foros)
- Para assets descargados y escenarios armados dentro de Unity, permite realizar el proceso de mesh merging y la creación de atlas dentro de Unity.
+Los objetos no necesitan tener el mismo material o shader para combinarse
+Se puede combinar varios skinnedMeshRenderer en uno solo
Desventajas
-Se llegan a presentar atlases blureados si se usan muchos tiling materials en un atlas junto con otras texturas mapeadas.
-Hay que tener cuidado con transparencias y no combinarlas con objetos opacos. El método para estos casos es Bake multiple atlases/materials y separarlos por tipo de shaders.
-Algunas meshes pueden ser difíciles/imposibles de combinar: si tienen canales que otros no (colores,tangentes) si las submallas que comparten vertices y tienen UVs fuera del rango 1,1.
-No se pueden combinar Skinned Meshes que tengan activado el "Optimized Game Object" en los ajustes de importación del modelo.
-Al combinar skinned meshes con blendshapes animados, solo se leerá el blendshape pero no sus animaciones. Solo reconocerá los keys de los joints. Sin embargo, la animación de los blendshapes se puede hacer desde unity, aunque dependiendo de la complejidad de la animación requerirá más tiempo.
Ubicación Proyecto
La ubicación del proyecto en el servidor.
Elaboró
Diana Delfino