Meshes

Aprende qué propiedades de mesh son compatibles en modelos 3D importados a Decentraland.

Los modelos 3D tienen un mesh compuesto por triángulos faces. Estas caras 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).

Limitaciones de espacio

Todos los modelos 3D en tu escena deben caber dentro de los límites de sus parcelas. Si alguna parte de tus modelos se extiende más allá de estos límites al ejecutar una vista previa, las partes que se extiendan serán recortadas y no se renderizarán.



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


circle-info

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

Bounding Boxes

Si tienes un modelo que tiene todos sus vértices perfectamente dentro del área de la escena, pero que tiene cajas delimitadoras grandes que están mayormente vacías y se extienden más allá de los límites de la escena, todo el modelo será marcado como fuera de los límites de la escena en el Creator Hub. Las partes del modelo que están dentro de tus parcelas se renderizarán correctamente, y se te permitirá publicar tu escena.

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

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



En Blender puedes hacer eso seleccionando los objetos, presionando Ctrl+A y luego Aplicar “All transforms”.

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



Recomendamos que apliques (bakees) la rotación y 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 necesitan tener.

Limitaciones de triángulos

Porque Decentraland es un mundo abierto lleno de diferentes escenas y objetos que se descargan sobre la marcha (en el mismo espacio 3D) es importante optimizar nuestros meshes para tener un buen rendimiento mientras se juega. En ese sentido, hay algunas limitaciones de escena que siempre debemos tener en cuenta cuando se trata de meshes:

n representa el número de parcelas que ocupa una escena.

  • Triángulos: n x 10000 Cantidad total de triángulos para todos los modelos en la escena.

  • Altura: log2(n+1) x 20 Altura en metros.

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

  • Tamaño máximo de archivo 50 MB por archivo Ningún archivo individual de ningún tipo en la escena puede exceder los 50 MB, sin importar cuántas parcelas tenga la escena.

Para más información revisa todas las limitaciones de la escena aquí.arrow-up-right

circle-exclamation

Meshes en escenas grandes

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

  • Modularidad: Divide meshes grandes en partes más pequeñas y modulares. Por ejemplo, en lugar de tener un único mesh para todo un edificio, el edificio podría dividirse en meshes separados para cada pared, suelo y sección del edificio. Esto permite que el frustum culling de Unity funcione de forma más efectiva, ya que solo las partes visibles necesitan ser consideradas para el renderizado. También mejorará la huella de memoria, porque un mesh puede reutilizarse varias veces para el mismo objeto en diferentes ubicaciones (para lograr esto necesitarás referenciar el mismo mesh en la definición de tu escena SDK7 o usar instancias en lugar de objetos duplicados al exportar la escena desde Blender).

  • Volumen delimitador: Asegúrate de que el volumen delimitador de cada objeto se ajuste lo más estrechamente posible. El espacio superfluo en el volumen delimitador puede hacer que los objetos se rendericen cuando no son visibles.



¿Qué es Frustum Culling?

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



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



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

Instanciar objetos vs duplicar objetos

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

Cuando un objeto es duplicado, se crea un nuevo objeto con un conjunto de datos completamente independiente, incluyendo toda su geometría, materiales y animaciones. Esto significa que cualquier cambio hecho al objeto original no se reflejará en el objeto duplicado, y viceversa.

Por otro lado, cuando un objeto es instanciado, cualquier cambio realizado en el objeto 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, la instanciación puede ser mucho más eficiente que la duplicación, especialmente al trabajar con escenas complejas o con un gran número de objetos. Esto se debe a que la instanciación usa menos memoria que la duplicación, ya que no crea nuevos datos para cada instancia. Además, la instanciación puede permitir que Blender optimice el proceso de renderizado tratando todas las instancias como un único objeto, en lugar de renderizar cada duplicado por separado.

En general, la instanciación puede ser una herramienta poderosa para mejorar el rendimiento y la eficiencia del flujo de trabajo en Blender y en tu escena de Decentraland, especialmente al trabajar con escenas grandes y complejas.



En algunos casos, al duplicar objetos como árboles, plantas y farolas, la instanciación puede mejorar significativamente el rendimiento en comparación con duplicarlos. Por ejemplo, esta escena tiene catorce farolas, todas 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 etapa de clonar y posicionar elementos en el espacio, tienes tres opciones. Duplicar, Instanciar o Mergear objetos.

Analicemos cuáles son los pros y los contras de cada procedimiento.

Duplicar objetos

Menú:
Object ‣ Duplicate Objects

Atajo:

Shift-D

Esto creará una copia visualmente idéntica del objeto seleccionado pero serán tratados como objetos diferentes. Así que cuando exportes tendrá 2 draw calls por objeto, 2 * 14 = 28 draw calls, y un uso total en disco de 320kb.



Instanciar objetos

Panel:
Toolbar ‣ Tools ‣ Edit ‣ Duplicate Linked

Menú:

Object ‣ Duplicate Linked

Atajo:

Alt-D

Esto creará un nuevo objeto con todos sus datos vinculados al objeto original. Si modificas uno de los objetos vinculados en Edit Mode, todas las copias vinculadas se modifican. Las propiedades de transform aún siguen siendo copias, no enlaces, por lo que aún puedes rotar, escalar y mover libremente sin afectar las otras copias.



Cuando exportamos estos modelos, todavía tendremos el mismo número de draw calls (28). Sin embargo, observa que ahora solo tenemos un mesh, lo que reduce significativamente el uso en disco (41 kb).



Para mantener las cosas organizadas puedes simplemente instanciar collections en tu escena, esta forma te permite controlar todas las instancias desde una sola carpeta y fuente.

Nombrado 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 refiere.

Para el nombrado de assets usa una mezcla de PascalCase y snake_case, que podemos llamar PascalSnake_case. Las reglas básicas - una palabra nueva o palabra después del separador (_) comienza con Letra Capital.

  • Usa nombres significativos para tus meshes Ejemplos: 🟢 Prefiere nombres - Teatro, Tranvía 🔴 Evita nombres - Untitiled.008, primitive(1), Cylinder.091, _sphere-AB

  • Usa guion bajo _ como separador para aportar más contexto al nombre. Pon las cosas más comunes primero y los específicos al final. Ejemplos: 🟢 Prefiere nombres - FountainStatue, TheaterMainWall, TramWheelLeft 🔴 Evita nombres - North_MainWall_Theater, Tram_LeftFront_Wheel

Si hay más de un objeto con el mismo nombre añade un número después de la palabra: FountainStatue01, FountainStatue02, 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; algunos son gratuitos y otros de pago. Para nombrar algunos:

Decimate

Este es un modificador conocido que puede usarse para reducir la cantidad de tris de tu mesh mientras mantiene la estructura superficial del modelo. Aunque esta es una herramienta muy potente para optimizar modelos, ten en cuenta que una vez que el modelo es decimado la topología puede verse afectada causando 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 triángulos, haciendo difícil modificarlo después de su uso. En ese sentido la decimación puede ser útil para modelos estáticos pero no es preferida para modelos animados.




Otra forma de optimizar tus meshes usando decimación es decimar el modelo y luego hacer una retopología adecuada. De esta manera puedes asegurar un resultado más predecible y una topología limpia.

Algunos addons de retopología que pueden ser útiles son (algunos de ellos 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 al espejar una mitad de un objeto en cualquier dirección (X,Y,Z). Es una gran herramienta cuando tienes modelos simétricos porque reduce el tiempo de modelado 3D, facilita el UV Unwrapping (porque solo necesitarás desplegar 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.



Batch Rename

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



Selecciona los objetos que quieres renombrar y simplemente reemplaza el nombre por defecto del objeto por el nuevo. Esta herramienta proporciona diferentes métodos y tipos de asset para renombrar, por lo que es muy flexible para cambiar los nombres también de meshes, animaciones, huesos, etc.




Buenas prácticas para geometrías #arrow-up-right

  • Ten en cuenta cuántas caras añades a tus modelos 3D, ya que más caras hacen que su renderizado sea más exigente. Ver limitaciones de la escenaarrow-up-right para los límites impuestos por una escena.

  • Asegúrate de que no haya caras ocultas que no puedan verse pero que sumen al conteo de triángulos.

  • Para formas que deberían tener lados redondeados, configúralas para que sean smooth en lugar de añadir caras adicionales.

  • Asegúrate de que las normals de todas las caras apunten hacia afuera en lugar de hacia adentro. Si hay caras en tu modelo que parecen no estar presentes cuando lo renderizas, esta es muy probablemente la causa.

  • Aplica (bakea) la rotación y escala de tus meshes, de modo que sus cajas delimitadoras no se extiendan innecesariamente.

Última actualización