Montar una biblioteca de activos

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.


Ensamblar una biblioteca de recursos es el proceso de importar y configurar una colección de recursos en una ubicación central dentro de tu experiencia para un acceso y reutilización fáciles.Este proceso puede ahorrarle tiempo significativo mientras se prepara para construir su entorno, ambiente, especialmente si configura los valores de cada activo para mejorar el rendimiento y optimizar el uso de la memoria en dispositivos de gama media a baja.

Usando el archivo Environment Art - Assembling.rbxl como referencia, esta sección del programa de arte ambiental te muestra cómo ensamblar una biblioteca de activos desde tus activos pulidos, incluyendo instrucciones paso a paso sobre:

  • Crear materiales personalizados para tu terreno a partir de tus texturas escalables.
  • Crear objetos de apariencia de superficie para su hoja de recorte y aplicarlos a mallas sin desempaquetar en su biblioteca de activos.
  • Establecer parámetros de renderizado para sus activos para garantizar un rendimiento óptimo en todos los dispositivos.
  • Convertir tus activos en paquetes para que puedas actualizarlos y reutilizarlos en todos tus proyectos.

Una vez que completes esta sección, aprenderás cómo utilizar tu biblioteca de activos de manera creativa para reemplazar o convertir el entorno, ambientede caja gris, y añadir toques finales que mejoren el espacio 3D en general.

The sample laser tag experience's modular and prop kit.

Crear materiales personalizados

Studio representa materiales personalizados como objetos MaterialVariant dentro del MaterialService.Estos objetos MaterialVariant tienen cuatro propiedades que combinan las cuatro mapas de textura personalizables para crear un material personalizado de alta calidad con características físicas:

Después de proporcionar los mapas de textura a estas propiedades, puedes aplicar tu nuevo material personalizado a ambas partes, mallas y terreno.Puede usar o modificar los archivos de mapa de textura de muestra .png para crear el Lumpy Moss, Lumpy Moss con flores, Lumpy Moss con piedras y materiales personalizados de piedras dentro del entorno, ambientede etiqueta láser final, o puede usar el suyo que diseñó en la sección anterior del tutorial.

Para crear MaterialVariant objetos para tus texturas escalables:

  1. En la pestaña Inicio o Modelo de la barra de herramientas, haga clic en el botón Administrador de materiales .Se abre la ventana Gestor de material .

  2. En la lista de Materiales , seleccione el material base que más se alinee con su textura empapelable.Por ejemplo, si estabas creando un objeto MaterialVariant para la textura de superficie irregular de musgo, elige el material predeterminado para que el material herede sus propiedades físicas.

  3. En la barra de herramientas , haga clic en el ícono .Un nuevo MaterialVariant se muestra en la paleta con un icono en la esquina inferior derecha que indica que es un material personalizado.

    New MaterialVariant tile in Material Manager with icon to indicate a custom material
  4. En el inspector , navegue hasta la sección general , luego renombre el material para alinearse con el nombre de su textura escalable.

    The Inspector view with the name of the material highlighted.
  5. En la sección Mapas de textura en el lado derecho de Color , haga clic en el botón Importar . Se muestra un explorador de archivos.

    The Texture Maps section of the Inspector view with the Import button highlighted.
  6. En el explorador de archivos, seleccione el mapa de textura Albedo para la textura correspondiente, luego el botón Abrir.El navegador de archivos se cierra y se muestra el nuevo mapa de colores con su ID de activo.

  7. Repita este proceso para los mapas de textura de Metalidad , Normal y Rugosidad .Las actualizaciones de material personalizado se reflejan para reflejar los mapas de textura.

    All texture maps for the Moss_Lumpy_A material.
     sphere part with the Moss_Lumpy_A material applied.
  8. En la sección Reemplazos , habilita la opción Establecer como reemplazo para asegurarte de que cuando apliques terreno a tu terreno, Studio use este material personalizado.

    The Set as Override toggle enabled.
  9. (Opcional) Si está creando un material personalizado que representa un material orgánico,

    1. En la sección Azulejos , haga clic en el desplegable Patrón .
    2. Seleccione Orgánico para aleatorizar la salida y reducir la colocación visible.
    The Tiling section of the Inspector view with its settings.
  10. Repita este proceso para cada textura escalable que desea incluir en su experiencia.

Crear paquetes de apariencia de superficie

Studio utiliza hojas de recorte dentro de SurfaceAppearance objetos que puedes padecer a MeshParts que contienen datos UV.Al igual que los materiales personalizados, los objetos SurfaceAppearance tienen cuatro propiedades que combinan las cuatro mapas de textura de hoja de acabado para crear un tratamiento de superficie visual 3D de alta calidad:

SurfaceAppearance.ColorMap – Representa el mapa de textura de reflectancia.SurfaceAppearance.MetalnessMap—Representa el mapa de textura de metalidad.SurfaceAppearance.NormalMap - Representa el mapa de textura normal.SurfaceAppearance.RoughnessMap - Representa el mapa de textura de rugosidad.

Después de proporcionar los mapas de textura a estas propiedades, puedes hacer que el objeto SurfaceAppearance sea un hijo de un MeshPart con datos UV que se mapean a tu hoja de recorte, y los datos UV se aplican automáticamente a la malla padre.Es por esta razón que es útil hacer que el objeto SurfaceAppearance sea un paquete para que puedas reutilizar el mismo objeto SurfaceAppearance en todos tus recursos y propiedades modulares.Por ejemplo, las siguientes mallas todas tienen datos de UV que se mapean al mismo diseño de página de recorte que se representa dentro de un solo paquete de objeto SurfaceAppearance.

Puede usar o modificar los archivos de mapa de textura de muestra .png para crear un objeto SurfaceAppearance que respete los datos UV de los recursos modulares de muestra y los accesorios dentro del entorno, ambientede etiqueta láser final, o puede usar el suyo propio que diseñó en la sección anterior del tutorial que se aplica a sus propios recursos y accesorios modulares.

Para crear SurfaceAppearance paquetes que puedes hijar a tu kit modular y accesorios:

  1. Inserta un objeto Apariencia de superficie en .

  2. Seleccione el objeto Apariencia de superficie , luego en la ventana Propiedades , seleccione la propiedad Mapa de colores . Se muestra un pop-up.

  3. Haga clic en el botón Añadir imagen… . Se muestra un explorador de archivos.

    The ColorMap pop-up with the Add Image button highlighted.
  4. Seleccione el mapa de textura Albedo para la textura correspondiente, luego el botón Abrir .El navegador de archivos se cierra y la propiedad Mapa de colores actualiza con un nuevo ID de activo.

  5. Repita este proceso para las propiedades MetalnessMap , NormalMap y RoughnessMap , seleccionando sus respectivos mapas de textura desde el navegadorde archivos.

  6. En la ventana Explorador , haz clic derecho en el objeto Apariencia de superficie , luego selecciona Convertir a paquete e del menú contextual.El diálogo Convertir a paquete se muestra.

  7. Llena los campos Título y Descripción , establece la propiedad para ti o para un grupo, luego haz clic en el botón Enviar .Una vez completado, un símbolo de enlace de cadena se muestra sobre el icono del objeto SurfaceAppearance para identificarlo como un paquete.

    The Surface Appearance icon with a chain link symbol.
  8. (Opcional) Seleccione el objeto Apariencia de superficie hijo del objeto Enlace de paquete , luego en la ventana Propiedades , habilite Actualización automática para actualizar automáticamente el paquete si realiza alguna modificación al objeto Apariencia de superficie .

Importar recursos y atrezos modulares

Studio representa los recursos modulares y accesorios que importas como objetos con hijo para cada componente del recurso.Por ejemplo, si importas una sección de pared con un borde superior, un borde inferior y un componente de pared, Studio representa el archivo o como una Sección de pared con un borde infantil separado Top_Trim , Bottom_Trim y Wall .

Al usar el importador 3D, puedes importar el kit modular de muestra y los accesorios en Studio para su uso en tu biblioteca de activos, o puedes importar cualquier activo que hayas diseñado en la sección anterior del tutorial.Para obtener más información sobre la funcionalidad de esta herramienta, vea Importador 3D.

Para importar tus recursos y atributos modulares a la experiencia:

  1. En la pestaña Inicio o Avatar de la barra de herramientas, haz clic en el botón Importar 3D . Se muestra un explorador de archivos.

  2. Seleccione un archivo .fbx para un activo o pieza decorativamodular.

  3. Verifique la vista previa del objeto y compruebe que las configuraciones de importación son correctas para su objeto.

  4. Verifique cualquier mensaje de advertencia o error ..

  5. Haga clic en Importar . El recurso se muestra en la ventana Explorador y en la ventana del ventanilla.

  6. Repita este proceso para cada activo modular y pieza decorativa.

  7. Mueve todos tus activos a una zona de tu experiencia cerca de tu geometría de caja gris. Esta zona es tu biblioteca de activos.

Aplicar datos de apariencia de superficie

Cuando pasas por el proceso de desempaquetar los UV de una malla en software de modelado de terceros, el software almacena los datos UV dentro del archivo .fbx o .obj de la malla.Cuando importas ese malla en Studio, el objeto resultante MeshPart retiene esos datos, pero aún necesitas aplicar un objeto SurfaceAppearance con propiedades de mapa de textura desde tu hoja de recorte para mostrar tus texturas de recorte en el recurso.

Para aplicar los datos del mapa de textura SurfaceAppearance a las mallas desempaquetadas en tu biblioteca de activos:

  1. En la ventana Explorador , haga clic en su paquete Apariencia de superficie , luego presione CtrlD (D ) para duplicarlo.
  2. Hijo del paquete duplicado Apariencia de superficie para convertirlo en un recurso modular o un pieza decorativa.El recurso aplica sus datos UV a los mapas de textura y muestra su tratamiento visual.
  3. Repita este proceso para cada activo modular y pieza decorativa.

Establecer parámetros de física y renderizado

Ahora que tienes tus activos dentro de Studio, es importante establecer los parámetros de física y renderizado que permitan que los activos mantengan la calidad visual más alta posible en dispositivos con limitaciones de memoria y GPU.En general, cuanto más estrictamente sigas la orientación de esta sección, más exitosa harás tu experiencia.Sin embargo, es importante considerar cuidadosamente el contexto de dónde planeas colocar cada activo dentro del entorno general para asegurarte de mantener tus objetivos estéticos y requisitos de juego.

Anclado

La propiedad BasePart.Anchored determina si el sistema de física del Motor de Roblox afecta la posición del objeto.Cuando habilitas esta propiedad para un Part o MeshPart, elimina el objeto de los cálculos físicos de la simulación dinámica que siempre se ejecuta en la experiencia, lo que significa que el objeto nunca cambiará de posición debido a la gravedad o la colisión de otros objetos.

Los objetos que no simulan una respuesta de física son más baratos de renderizar porque no ocupan la GPU que es necesaria para esos cálculos de física.Cuando liberas la GPU, mejora el rendimiento para tu experiencia, especialmente en dispositivos de gama baja que necesitan guardar la GPU para un juego de ritmo rápido.Es por esta razón que cada activo aparte de las puertas en el entorno de etiqueta láser final está anclado.

Puede colisionar

La propiedad BasePart.CanCollide determina si el objeto puede interactuar físicamente con otros objetos.Cuando habilitas esta propiedad para un Part o MeshPart, el objeto es impenetrable, y las cuentas del Motor de Roblox lo cuentan en las calculaciones de física.Estas calculaciones pueden afectar el rendimiento de tu experiencia cuando hay muchos objetos que el motor debe considerar en sus cálculos de física.

Para aliviar parte de este impacto en el ejecución, desactive esta propiedad para objetos con los que el usuario nunca interactuará.Por ejemplo, el entorno de etiqueta láser final de muestra desactiva esta propiedad para todo el follaje.

Puede tocar

La propiedad BasePart.CanTouch determina si Touched y TouchEnded eventos se disparan en el objeto.Cuando habilitas esta propiedad para un Part o MeshPart, el motor de Roblox comprueba el estado del evento de toque del objeto para ver si debe activar o detener un evento.

Este proceso ocurre para cada marco, que puede ocupar una cantidad significativa de memoria si el motor debe verificar el estado del evento de toque para muchos objetos a la vez.Para aliviar parte de este impacto en la memoria, solo habilite esta propiedad para objetos que deben desencadenar un evento.

Puede consultar

La propiedad BasePart.CanQuery determina si el motor de Roblox considera al objeto durante las operaciones de consulta espacial, como el intersección rayo-superficie, emisión de rayos.Studio habilita esta propiedad para cada Part o MeshPart por defecto, lo que significa que el motor verifica si cada objeto necesita llamar una operación de consulta espacial.Este proceso ocurre para cada marco individual, que puede ocupar una cantidad significativa de memoria cuando el motor deba realizar estas comprobaciones para muchos objetos a la vez.

Por esta razón, se recomienda deshabilitar esta propiedad para objetos que el motor de Roblox no necesita considerar para operaciones de consulta espacial.Al tomar decisiones sobre dónde desactivar esta propiedad, considera cómo cada activo afecta el juego.Por ejemplo, el entorno de etiqueta láser final mantiene esta propiedad habilitada para cada pared en el edificio porque el motor debe tener en cuenta estas superficies cuando los usuarios disparan láseres desde su arma de etiqueta láser.Si el motor no representa estos activos, entonces el láser dispararía directamente a través del edificio como si no estuviera allí en todos/todas.

Sombra de lanzamiento

La propiedad BasePart.CastShadow determina si el objeto lanza una sombra.Cuando habilitas esta propiedad para un Part o MeshPart , el motor de Roblox calcula cada ubicación de vértice del objeto en tiempo de ejecución, luego dibuja un raycast desde el sol a cualquiera de sus objetos vecinos hasta que se choque con otro objeto para crear la sombra.

Estas calculaciones pueden tener un costo de rendimiento, especialmente cuando tienes muchos objetos de complejidad geométrica.Esto se debe a que los objetos con complejidad geométrica tienen más polígonos que los objetos que son geométricamente simples, lo que significa que tienen más vértices que el motor debe calcular para la sombra del objeto.Cuantos menos polígonos tenga un objeto, más rápida será la operación y más barata su sombra.

A wall section with few polygons, and a plant with many polygons casting shadows on a white wall.

Las sombras pueden proporcionar un gran sentido de realismo a los objetos con profundidad geométrica 3D, por lo que cuando estés decidiendo dónde desactivar esta propiedad, considera dónde los objetos proporcionan una mejora visual significativa al entorno, ambientey dónde los usuarios notarán la falta de sombras.Por ejemplo, las sombras complejas de las hojas pueden proporcionar un gran sentido de inmersión en el espacio exterior donde es probable que los usuarios las vean, pero esa misma inmersión no es necesaria para las hojas que sobresalen por el techo con el que los usuarios nunca interactuarán.

Foliage casting shadows.
BasePart.CastShadow = Habilitado
Foliage not casting shadows.

BasePart.CastShadow = Deshabilitado
>

De doble lado

La propiedad MeshPart.DoubleSided determina si renderizar ambas caras o polígonos en la malla.Cuando habilitas esta propiedad para un plano MeshPart , como hojas, pelo o cartas de tela, el motor de Roblox renderiza ambas caras o polígonos en la malla para permitir que los usuarios vean la completitud del objeto sin importar qué ángulo estén mirando el objeto.Por ejemplo, las siguientes hojas de árbol son mallas planas de un solo lado, y cuando habilitas esta propiedad, cualquiera de las hojas que se encuentran lejos de la cámara se vuelve visible para el usuario.

A tree with less leaves because all planar meshes facing away from the camera are disabled.

MeshPart.DoubleSided = Deshabilitado
>

Esta propiedad es útil para agregar realismo a tu entorno, ambiente, pero tiene un costo de rendimiento porque el motor debe renderizar los polígonos del objeto dos veces: una vez para la dirección que se enfrenta a la cámara del usuario y nuevamente para cualquier malla que se aleja de la cámara del usuario.Para aliviar parte de este impacto en el ejecución, el entorno de etiqueta láser final solo habilita esta propiedad para las hojas porque tiene un fuerte impacto visual para el realismo en el espacio 3D.

Fidelidad de colisión

La propiedad MeshPart.CollisionFidelity determina qué tan cerca está la hitbox física de una malla o unión a su representación visual.Por defecto, esta configuración renderiza una caja de golpes que es aproximadamente igual a la forma poligonal de la malla, lo que significa que donde los usuarios colisionan con el objeto es similar a la geometría real de la malla.Por ejemplo, la malla del castillo en las siguientes imágenes tiene una hitbox predeterminada que casi coincide con la forma de su geometría.

A grey castle mesh.
Malla original
The same castle mesh with a colorful hitbox that shows where users can collide with the castle.

Por defecto
>

Puedes establecer esta propiedad a un valor diferente para reducir la precisión de la hitbox de una malla.Por ejemplo, cuando estableces esta propiedad a Casco , el motor de Roblox reduce significativamente los vértices de la hitbox del malla, y cuando estableces esta propiedad a Caja , el motor reduce la hitbox de la malla a un cubo que rodea la malla.Además, si quieres aumentar la precisión de la caja de golpe de un modelo de malla, puedes establecer esta propiedad en PrecisaConvexDecomposition para aumentar la cantidad de vértices en la caja de golpe.

The same castle mesh with cube hitbox that shows where users can collide with the castle.

Caja
>

The same castle mesh with a cylindrical hitbox that shows where users can collide with the castle.
Casco
The same castle mesh with a colorful hitbox that shows where users can collide with the castle. This version shows more colorful faces than the default hitbox.

Descomposición convexa precisa
>

Al igual que BasePart.CastShadow, cuantos más vértices necesita el motor de Roblox para Renderizar, mayor es el costo de rendimiento.Por esta razón, es importante considerar cómo quieres que los usuarios interactúen con cada malla para ver si puedes reducir la cantidad de vértices que el motor necesita para renderizar para la hitbox de la malla.En casos en que no es necesario que una hitbox sea precisa, establece esta propiedad en Caja o Cubierta .

Para demostrar este concepto, consulte las siguientes imágenes que muestran el hitbox de cada malla del modelo de pared que proporciona un aumento de elevación entre el primer y el segundo piso del entorno, ambientede etiqueta láser final.La hitbox predeterminada para la pared principal tiene mucha geometría innecesaria cuando solo necesita proporcionar una superficie para evitar que el usuario se mueva en esa dirección.Si estableces la propiedad a Caja para este malla, puedes eliminar esta geometría redundante mientras mantienes el propósito de la hitbox intacto.

A wall model that provides a rise in elevation.
Malla original
The same wall model with a colorful hitbox that shows where users can collide with the wall.

Por defecto
>

The same wall model with a colorful hitbox for the trim, but only a box hitbox for the wall mesh.

Caja
>

Mientras tomas estas decisiones, es importante considerar cómo cambiar el valor predeterminado puede afectar negativamente a los usuarios mientras navegan por tu entorno, ambiente.Por ejemplo, si estableces la propiedad a Caja para las mallas de recorte del aplicación de modeladode pared, los usuarios chocarían con la hitbox si intentan saltar cerca de la pared.En cambio, establece estas mallas en Casco para que reduzcas el número de vértices mientras mantienes la hitbox más cerca de la geometría de la malla.

A wall model with a box hitbox for the top trip. Because the box sticks out, users can unintentionally collide with the top trim.

Caja
>

The same wall model with a hull hitbox for the top trip. Because hull hitbox conforms much closer to the top of the model, allowing users to avoid colliding with the trim.
Casco

Tenga en cuenta que puede ser importante tener una caja de golpe que se ajuste precisamente a la forma de su malla, especialmente cuando necesita controlar exactamente cómo los usuarios se chocan con su forma.Por ejemplo, en el entorno, ambientede etiqueta láser final de muestra, es importante que los usuarios solo colisionen con los bordes de la entrada y no con la entrada misma, de lo contrario, nunca podrían entrar o salir de un bolsillo de combate.

A doorway model with optimized hitbox meshes.

Fidelidad de renderizado

La propiedad MeshPart.RenderFidelity determina el nivel de detalle de la malla que se muestra al usuario.Cuando estableces esta propiedad a Enum.RenderFidelity.Automatic , el motor de Roblox reduce la fidelidad del modelo cuanto más lejos está el usuario del modelo, y cuando estableces esta propiedad a Enum.RenderFidelity.Precise , cada vértice de tu modelo se renderiza exactamente como lo deseas sin importar la distancia entre ellos.

Cuantos más objetos el motor debe renderizar con precisión al usuario desde cualquier distancia, especialmente si tienen un alto recuento de vértices, mayor es el costo de rendimiento.Para aliviar parte de este impacto en el ejecución, establece esta propiedad a Enum.RenderFidelity.Performance para objetos con complejidad geométrica, como follaje en la biblioteca de activos de muestra, porque no necesitan mostrarse en su totalidad desde una distancia para cualquier requisito de juego.Esto reduce el número de polígonos de tu experiencia sin renunciar a la calidad visual general.

Convertir recursos en paquetes

Ahora que todos sus recursos modulares están en Studio con parámetros de renderizado configurados para mantener su alta calidad visual para todos los usuarios, es hora de convertirlos en paquetes.Es importante convertir tus activos en paquetes porque te permite reutilizarlos repetidamente a lo largo de tu experiencia actual y otros proyectos.Además, puedes hacer fácilmente ediciones a un paquete que se llene instantáneamente a todas sus instancias, lo que te ahorra mucho tiempo en el proceso de iteración.

Debido a que tus objetos SurfaceAppearance ya son paquetes, cuando conviertas tus objetos Model en paquetes, se convierten en paquetes anidados.Los paquetes anidados te permiten mantener complejas jerarquías de objetos hijos que puedes modificar independientemente del paquete de objeto Model.Esto te permite un mayor control sobre los componentes individuales de tus activos.

Para convertir tus recursos y atributos modulares en paquetes:

  1. En la ventana Explorador , haz clic derecho en un recurso modular o un pieza decorativa, luego selecciona Convertir a paquete del menú contextual.El diálogo Convertir a paquete se muestra.

  2. Llena los campos Título y Descripción , establece la propiedad para ti o para un grupo, luego haz clic en el botón Enviar .Una vez completado, un símbolo de enlace de cadena se muestra sobre el icono del aplicación de modeladopara identificarlo como un paquete.

    The Model icon with a chain link symbol.
  3. Repita este proceso para cada activo modular y pieza decorativa.

Una vez que estés satisfecho con el diseño general de tu biblioteca de activos, puedes pasar a decorar el entorno con tus activos recién pulidos y configurar elementos adicionales del espacio 3D para llevar tu mundo a la vida.