Meshes

Aprende qué propiedades de mesh se admiten en modelos 3D importados a Decentraland.

Los modelos 3D tienen una mesh compuesta por triangulares faces. Estas faces se encuentran entre sí en edges (las líneas a lo largo de las cuales se tocan) y vertices (los puntos donde se unen sus esquinas).

💡 Consejo: instala el plugin Decentraland Tools Blender plugin. Incluye varias funciones útiles para ayudarte a editar y exportar modelos 3D, wearables y emotes.

Limitaciones de espacio

Todos los modelos 3D en tu scene deben caber dentro de los límites de sus parcels. Si alguna parte de tus modelos se extiende más allá de estos límites al ejecutar un preview, esas partes que se extiendan se recortarán y no se renderizarán.



En el editor de Creator Hub, verás el modelo teñido de rojo y su caja delimitadora marcada en rojo.



📔 Nota: En el antiguo cliente Web de Decentraland, por motivos de rendimiento, si alguna parte de un modelo 3D estaba fuera de los límites, incluso si solo era la caja delimitadora, entonces no se renderizaba todo el modelo. Desde el cliente de escritorio de Decentraland 2.0, solo se recortan las partes de un modelo que están fuera de los límites. Las partes del modelo que están dentro de la scene se renderizan.

Cajas delimitadoras

Si tienes un modelo que tiene todos sus vertices perfectamente dentro del área de la scene, pero que tiene cajas delimitadoras grandes que en su mayoría están vacías y se extienden más allá de los límites de la scene, todo el modelo se marcará como fuera de los límites de la scene en Creator Hub. Las partes del modelo que están dentro de tus parcels se renderizarán correctamente, y se te permitirá publicar tu scene.

Cada mesh tiene una caja delimitadora que rodea los límites de la forma. Para hacer que un modelo 3D sea más útil dentro de Decentraland, asegúrate de que sus cajas delimitadoras no se extiendan más allá del modelo más de lo necesario.

Para evitar este problema, puedes limpiar tus modelos 3D para restablecer las posiciones y rotaciones de los meshes de modo que las cajas delimitadoras no se extiendan más allá de los meshes que envuelven.



En Blender puedes hacerlo seleccionando los objects, presionando Ctrl+A y luego aplicando “All transforms”.

Por ejemplo, ten cuidado al rotar un sub-mesh cerca del borde de tu modelo. Como las cajas delimitadoras son cubos, incluso si el mesh es redondo, las esquinas de su caja delimitadora podrían terminar sobresaliendo después de rotarlo 45°.



Te recomendamos que hornees la rotación y la escala de cada mesh en el modelo, para asegurarte de que no haya cajas delimitadoras no deseadas que se extiendan más allá del tamaño que deben tener.

Limitaciones de triangles

Porque Decentraland es un open world lleno de diferentes scenes y objects que se descargan al vuelo (en el mismo espacio 3D), es importante optimizar nuestros meshes para lograr un buen rendimiento mientras jugamos. En ese sentido, hay algunas limitaciones de la scene que siempre debemos tener en cuenta cuando se trata de meshes:

n representa la cantidad de parcels que ocupa una scene.

  • Triangles: n x 10000 Cantidad total de triangles para todos los models en la scene.

  • Height: log2(n+1) x 20 Height in meters.

  • File size: 15 MB por parcel - 300 MB máx. Tamaño total de los archivos subidos al content server. Incluye modelos 3D y audio. No incluye archivos que no se suben, como paquetes de node.js.

  • Tamaño máximo de archivo: 50 MB por archivo Ningún archivo individual de ningún tipo en la scene puede exceder 50 MB, sin importar cuántos parcels tenga la scene.

Para más información, consulta todas las limitaciones de la scene aquí.

Meshes en escenas grandes

Al crear meshes, debemos tener en cuenta estas 2 buenas prácticas:

  • Modularidad: Divide los meshes grandes en partes más pequeñas y modulares. Por ejemplo, en lugar de tener un solo mesh para todo un edificio, el edificio podría dividirse en meshes separados para cada pared, piso y sección del edificio. Esto permite que el frustum culling de Unity funcione de manera más eficaz, ya que solo hay que considerar las partes visibles para renderizar. También mejorará la huella de memoria, porque un mesh puede reutilizarse varias veces para el mismo object en distintas ubicaciones (para lograr esto tendrás que referenciar el mismo mesh en la definición de tu scene de SDK7 o usar instancias en lugar de objetos duplicados al exportar la scene desde Blender).

  • Volumen delimitador: Asegúrate de que el volumen delimitador de cada object encaje lo más ajustadamente posible. El espacio sobrante en el volumen delimitador puede hacer que los objects se rendericen cuando no son visibles.



¿Qué es Frustrum Culling?

Frustum Culling es una técnica de optimización que desactiva los renderers (meshes) de los objects que están fuera del área de visión de la cámara. Mira estos 2 ejemplos:



Un nivel interior tipo laberinto. Esta vista normal de la scene muestra todos los Game Objects visibles.



El frustum culling normal solo renderiza los objects dentro de la vista de la cámara. Esto es automático y siempre ocurre.

Instanciar objetos vs duplicar objetos

En Blender, duplicar un object crea una copia completamente separada del object, mientras que instanciar un object crea un duplicado que comparte los mismos datos que el object original.

Cuando se duplica un object, se crea un nuevo object con un conjunto de datos completamente independiente, incluida toda su geometría, materiales y animations. Esto significa que cualquier cambio realizado en el object original no se reflejará en el object duplicado, y viceversa.

Por otro lado, cuando un object se instancia, cualquier cambio realizado en el object original se reflejará en todas sus instancias, y viceversa. Esto se debe a que todas las instancias comparten los mismos datos subyacentes.

En términos de rendimiento, instancing puede ser mucho más eficiente que duplicar, especialmente cuando se trabaja con scenes complejas o con grandes cantidades de objects. Esto se debe a que instancing usa menos memoria que duplicar, ya que no crea nuevos datos para cada instancia. Además, instancing puede permitir que Blender optimice el proceso de renderizado al tratar todas las instancias como un solo object, en lugar de renderizar cada duplicado por separado.

En general, instancing puede ser una herramienta poderosa para mejorar el rendimiento y la eficiencia del flujo de trabajo en Blender y en tu Decentraland Scene, especialmente cuando trabajas con scenes grandes y complejas.



En algunos casos, al duplicar objects como árboles, plantas y farolas, instancing puede mejorar significativamente el rendimiento en comparación con duplicarlos. Por ejemplo, esta scene tiene catorce farolas, y todas son exactamente iguales. Sabemos que cada farola tiene dos texturas diferentes, una para el poste y otra para la luz. Así que en este caso tendremos dos draw calls, una por textura.



En Blender, cuando estás en la fase de clonar y posicionar elementos en el espacio, tienes tres opciones. Duplicar, Instancing o fusionar objects.

Analicemos cuáles son las ventajas y desventajas de cada procedimiento.

Duplicar objetos

Menú:
Object ‣ Duplicate Objects

Atajo:

Shift-D

Esto creará una copia visualmente idéntica del object seleccionado, pero se tratarán como objects diferentes. Así que al exportarlo tendrá 2 draw calls por object, 2 * 14 = 28 draw calls, y un uso total de disco de 320kb.



Instancing Objects

Panel:
Toolbar ‣ Tools ‣ Edit ‣ Duplicate Linked

Menú:

Object ‣ Duplicate Linked

Atajo:

Alt-D

Esto creará un nuevo object con todos sus datos vinculados al object original. Si modificas uno de los objects vinculados en Edit Mode, todas las copias vinculadas se modifican. Las propiedades de Transform siguen siendo copias, no vínculos, así que aún puedes rotar, escalar y mover libremente sin afectar a las otras copias.



Cuando exportemos estos modelos, seguiremos teniendo el mismo número de draw calls (28). Sin embargo, ten en cuenta que ahora solo tenemos una mesh, lo que reduce significativamente el uso de disco (41 kb).



Para mantener todo organizado, puedes simplemente instanciar collections en tu scene; de esta manera puedes controlar todas las instancias desde una sola carpeta y fuente.

Nombres de meshes

Usa nombres significativos para tus meshes. El nombre debe dar contexto de dónde se usa el asset o a qué parte del objeto se relaciona.

Para nombrar assets usa una mezcla de PascalCase y snake_case, a lo que podemos llamar PascalSnake_case. Las reglas básicas allí: una palabra nueva o una palabra después de un separador (_) empieza con letra mayúscula.

  • Usa nombres significativos para tus meshes Ejemplos: 🟢 nombres - Tram_Wheel_LeftFront_collider Teatro, Tranvía 🔴 Evita Tram_Wheel_LeftFront_collider Sin título.008, primitiva(1), Cilindro.091, _esfera-AB

  • Usa guion bajo _ como separador para aportar más contexto al nombre. Pon primero lo más común y los detalles específicos al final. Ejemplos: 🟢 nombres - Tram_Wheel_LeftFront_collider EstatuaDeLaFuente, ParedPrincipalDelTeatro, RuedaIzquierdaDelTranvía 🔴 Evita Tram_Wheel_LeftFront_collider Norte_ParedPrincipal_Teatro, Tranvía_RuedaDelantera_Izquierda

Si hay más de un object con el mismo nombre, añade un número después de la palabra: EstatuaDeLaFuente01, EstatuaDeLaFuente02, etc.

Herramientas para crear modelos

Hay muchos addons y herramientas externas que facilitan el trabajo al crear assets para hacer el pipeline más rápido y eficiente; algunas son gratis y otras de pago, por nombrar algunas:

Decimate

Este es un modificador muy conocido que puede usarse para reducir la cantidad de tris de tu mesh manteniendo la estructura superficial del modelo. Aunque es una herramienta muy potente para optimizar models, ten en cuenta que una vez que el modelo se decima, la topología puede verse afectada y provocar una mala topología (porque rompe la geometría en piezas impredecibles). Por otro lado, la decimación convertirá los quads de tu mesh en triangles, lo que dificultará modificarlo después de usarlo. En ese sentido la decimación puede ser útil para modelos estáticos, pero no se prefiere para modelos animados.




Otra forma de optimizar tus meshes usando decimation es decimar el modelo y luego hacer una retopología adecuada. Así puedes asegurar un resultado más predecible y una topología limpia.

Algunos addons de retopología que pueden ser útiles son (algunos son de pago):

  • Simplygon: https://www.simplygon.com/

  • Speedretopo: https://blendermarket.com/products/speedretopo?ref=2

  • Retopoflow: https://blendermarket.com/products/retopoflow

Mirror Modifier

El Mirror Modifier en Blender es una herramienta usada para crear modelos simétricos espejando una mitad de un object en cualquier dirección (X,Y,Z). Es una gran herramienta cuando tienes modelos simétricos porque reduce el tiempo de modelado 3D, de hacer UV Unwrapping (porque solo necesitarás desenvolver una parte del modelo y el resto compartirá las mismas coordenadas UV) y también optimiza tus texturas evitando desperdiciar resolución de textura en partes que son esencialmente espejadas.



Renombrado por lotes

Una herramienta muy útil para cambiar las convenciones de nombres de forma sencilla es usar el Batch Rename que Blender tiene integrado en su toolkit. Para acceder a él, ve a Edit y luego Renombrado por lotes.



Selecciona los objects a los que quieras cambiar el nombre y simplemente reemplaza el nombre predeterminado del object por el nuevo. Esta herramienta ofrece diferentes métodos y tipos de asset para renombrar, así que es muy flexible para cambiar también los nombres de meshes, animations, bones, etc.




Buenas prácticas para geometrías #

  • Ten en cuenta cuántas faces añades a tus modelos 3D, ya que más faces hacen que su renderizado sea más exigente. Consulta limitaciones de la scene las limitaciones impuestas por una scene.

  • Asegúrate de que no haya faces ocultas que no puedan verse pero que sí sumen al conteo de triangles.

  • Para las formas que deban tener lados redondeados, configúralas para que sean smooth en lugar de añadir faces adicionales.

  • Asegúrate de que los normals de todas las faces estén orientados hacia afuera en lugar de hacia adentro. Si hay faces en tu modelo que parecen no estar ahí cuando lo renderizas, esa es probablemente la causa.

  • Hornea la rotación y la escala de tus meshes, para que sus cajas delimitadoras no se extiendan innecesariamente hacia fuera.

Última actualización