Construir la estación de una manera modular nos permitió actualizar y propagar actualizaciones de contenido de manera fluida y fue clave para asegurarnos de que no pasáramos horas actualizando mallas individuales, texturas, partes y más.
Los paquetes de Roblox nos permiten lograr este diseño modular al permitirnos empaquetar juntos una paleta de Meshparts que se ensamblan fácilmente, conjuntos de hojas de recorte y nodos de SurfaceAppearance que los MeshParts podían compartir. Esto nos permitió adaptarnos a cambios en el diseño y tamaño durante las primeras pruebas de juego y hizo que el proceso de completar la estación fuera mucho más rápido.

Diseños flexibles para el arte final
Cuando comenzamos, no teníamos una comprensión completa de lo que queríamos que estuviera en la estación, ni de cuán grande necesitaba ser para 50 jugadores.
Para averiguarlo, comenzamos construyendo primero el entorno utilizando Parts y trayendo algunas mallas como la forma de la rotonda desde nuestra aplicación DCC externa, como Maya o Blender. Con estas formas simples, ajustamos la escala del mapa, la disposición de las habitaciones y los caminos para encontrar las disposiciones más divertidas. Ya sea para un juego o una experiencia social, esta etapa temprana tiende a ser la más dinámica.
Al construir el diseño de la estación, lo más importante para impulsar la exploración era darle al usuario un objetivo. En este caso, el objetivo más obvio es acercarse al agujero negro. A continuación, sabíamos que darles un camino recto hacia el agujero negro sería aburrido, porque un jugador puede simplemente caminar desde el punto de aparición hasta el final del mapa. Rompimos el camino para que el jugador no pudiera llegar al agujero negro sin antes rodear y ver otras cosas que también podrían atraerlo.
El diseño modular nos permitió hacer tales cambios en el entorno sin una reestructuración catastrófica del diseño general. Podíamos mover secciones enteras de la estación para jugar con diferentes ideas de juego. En última instancia, estas mismas piezas modulares podrían actualizarse utilizando paquetes, por lo que no teníamos que reconstruir múltiples versiones del mismo activo.




Diseño modular del DSR-14 Kerr-Newman
La estación espacial utiliza solo un puñado de piezas de paleta modular. Las piezas de paleta modular son activos reutilizables, lo que significa que no tenemos que crear cada pared de manera única, sino que podemos ensamblar varias paredes más pequeñas. Esto permite flexibilidad en el diseño mientras estamos construyendo.
Aquí hay algunos consejos que nos ayudaron a crear nuestro diseño modular:
Decidir un tamaño de cuadrícula uniforme — Para la estación, decidimos un tamaño de cuadrícula de 16 studs para crear la mayor parte del conjunto modular. El tamaño de cuadrícula que uses es arbitrario, pero debe ser consistente a lo largo del proyecto y entre todos los artistas que trabajen en ese proyecto. Decidir un tamaño de cuadrícula al comienzo de tu proyecto asegura que cada pieza encaje bien con la pieza que está al lado. También te permite intercambiar piezas fácilmente, por ejemplo, intercambiando una sección de pared por una sección de puerta.
Todas las unidades se importan como studs — Al crear mallas en otras aplicaciones DCC, como Maya o Blender, Studio no convierte metros, centímetros, pies o pulgadas; simplemente reemplaza las unidades entrantes con las mismas unidades en studs. Por ejemplo, si configuras tus unidades en metros, Studio convierte 2 metros a 2 studs. Es mejor tratar tus escalas de unidades en tu aplicación de elección como escalas de studs en Roblox. La escala del mundo real más cercana para un solo stud en Roblox es de 28 centímetros.
Mantener las piezas simples — No intentes construir cada pieza que creas que necesitarás. La idea es tener algunas piezas muy versátiles y no muchas únicas. Cuantas más piezas tengas, más tiempo llevará crear cada pieza y más afectará tu presupuesto general de memoria y rendimiento. Siempre puedes agregar otra pieza a tu kit si es absolutamente necesario.
Usar paquetes — Convierte cada pieza modular en un paquete y también coloca materiales en paquetes antes de comenzar a poblarlos en tu juego. Esto te permite enviar actualizaciones fácilmente a todas las instancias. Profundizaremos en los paquetes un poco más adelante.
Las siguientes capturas de pantalla te muestran varias formas en que utilizamos el diseño modular para construir partes de la estación.




Crear hojas de recorte
Las texturas 1:1 son el camino del futuro, pero se vuelven costosas en cuanto a presupuestos de memoria y tiempo de creación. Para la estación espacial, el 90% de los elementos arquitectónicos utilizaron un puñado de conjuntos de hojas de recorte intercambiables, que son un conjunto de mapas de texturas dispuestos de manera vertical u horizontal. Cada fila o columna de la hoja tiene un aspecto único, dándote una variedad de tratamientos de superficie para elegir al desenrollar un modelo, todo mientras usas una sola hoja de imagen.
Aquí hay algunos consejos para hacer hojas de recorte:
Comienza con un inventario de los tipos de objetos y materiales que necesitas — Las hojas de recorte pueden incluir una gran variación en tipos de materiales, como madera, metal, goma y más. Antes de comenzar a modelar tu primer objeto, crea una plantilla de hoja de recorte. Este es el punto de partida para todos tus otros conjuntos de hojas de recorte y te da un punto de partida rápido para desenrollar tus modelos. Estas hojas de recorte viven dentro del nodo SurfaceAppearance, que cubriremos más adelante.
Incluye una variedad de tratamientos de superficie en una hoja — Esto te permite mantener más de la malla junta, para que puedas aplicar nuevos tratamientos sin tener que dividir tus mallas en múltiples mallas. Esto mejora el rendimiento en tiempo de ejecución al disminuir las llamadas de dibujo de objetos y materiales.
Haz una plantilla de hoja de recorte — Una plantilla asegura que puedas intercambiar cualquier conjunto de mapas por otro. Por ejemplo, puedes intercambiar un conjunto de metal limpio por un conjunto de metal oxidado.
Así es como creamos hojas de recorte para la estación:
Creamos un esquema aproximado de cómo debería verse la hoja:

En Photoshop, creamos un mockup para tener una idea rápida de cómo se vería cada sección de la hoja.

Usamos Substance, pero puedes usar cualquier aplicación que te convenga para crear los mapas finales. Este es el conjunto final de mapas de hojas de recorte que se generaron en Substance. Los cuatro mapas funcionan juntos dentro de un nodo SurfaceAppearance para producir un material renderizado basado en física (PBR).




Aquí hay algunos renders finales de la hoja de recorte dentro de Substance Designer:


Y aquí hay ejemplos de las mismas hojas de recorte utilizadas en una amplia gama de objetos:

Si deseas aprender más sobre el mapeo UV de hojas de recorte, simplemente busca el tema en la web; hay muchos tutoriales excelentes disponibles.
Aplicar apariencias de superficie
SurfaceAppearance te permite especificar nuevas entradas de textura para nuestro sistema de renderizado basado en física para MeshParts y te permite anular la apariencia de una malla con opciones gráficas avanzadas, incluyendo ColorMap, MetalnessMap, RoughnessMap y NormalMap. También hace uso del nuevo sistema de cubemap dinámico que Roblox utiliza para reflejos en materiales, como el cromo. Por ejemplo, aquí hay una imagen lado a lado de una malla con SurfaceAppearance aplicada junto a una malla sin ella:

Al usar la apariencia de superficie, ten en cuenta los siguientes consejos:
- Si tus mapas de recorte contienen información alfa para la transparencia, cambia el AlphaMode de Overlay a Transparency.
- La apariencia de superficie no funciona con Parts porque no tienen la información UV requerida para aplicar los mapas. Parts utilizan proyecciones alineadas al mundo en lugar de información UV. MeshParts normalmente se crean en otra aplicación como Maya, 3ds Max o Blender y contienen información de desenrollado UV.
Para aplicar SurfaceAppearance:
Haz clic en el al final de un MeshPart o nombre de carpeta en el Explorer y busca SurfaceAppearance. Agregar uno anulará cualquier BrickColor, Color, Material y TextureID que ya hayas aplicado.
Cambia el nombre del nodo SurfaceAppearance a algo único y agrega un sufijo de _SA para que sea fácil de buscar. En este ejemplo, usamos Metal_Trim_A_SA.
Importa los mapas de hojas de recorte, copia los ID de la ventana Asset Manager y pégalos en los espacios apropiados en la ventana Properties. Así es como se ve el nodo Metal_Trim_A_SA con todos los ID de mapas insertados y aplicados a la puerta.

Aumentar la eficiencia con paquetes
Los paquetes te permiten crear instancias de objetos en tus juegos de Roblox, de modo que las actualizaciones que realices en el paquete se publiquen en todas las instancias de ese paquete. Usamos paquetes para casi todos los objetos que pusimos en la estación, por lo que no tuvimos que buscar cada colocación si necesitábamos hacer ajustes. Por ejemplo, utilizamos más de 1,000 instancias de paneles de pared de un paquete y pudimos publicar actualizaciones a ellas instantáneamente modificando el paquete.
Sigue estos consejos al usar paquetes:
Activa la función de actualización automática en PackageLink. Todas las modificaciones se aplican a todos los usos del paquete cuando esto está habilitado, ahorrándote el paso de tener que usar la función "actualizar todo".

Puedes usar paquetes para objetos SurfaceAppearance para crear una "biblioteca de materiales". Esto te permite modificar bitmaps en un objeto SurfaceAppearance y publicarlos en cada objeto que lo utilice. La siguiente captura de pantalla muestra materiales maestros utilizados en toda la demostración. Si necesitábamos modificar los mapas, solo teníamos que actualizar el material maestro y republicar el paquete.
