Presentamos SLIM: Modelos interactivos ligeros y escalables
Aprovechando el poder de los compuestos de renderizado ligero para construir mundos más grandes y detallados para cada dispositivo
Roblox es el hogar de millones de experiencias, desde minijuegos sencillos hasta vastos mundos abiertos llenos de recursos 3D de alta fidelidad. Nuestro objetivo es respaldar las experiencias cada vez más densas y complejas que los creadores imaginan en un amplio espectro de dispositivos de usuario, lo que requiere innovación en nuestro motor, sistemas de entrega de contenido e infraestructura. Los modelos interactivos ligeros y escalables, o SLIM, son una parte de un esfuerzo de desarrollo compuesto por varias fases que permite a los creadores lograr sus grandes visiones artísticas sin comprometer el rendimiento.
SLIM permite que los creadores generen automáticamente representaciones ligeras de cualquier objeto dentro de una experiencia de Roblox, reduciendo al mínimo la cantidad de draw calls, triángulos e instancias del modelo de datos que el cliente necesita para renderizar un mundo sólido y fluido. SLIM le da a nuestro modelo de transmisión nuevas y potentes formas de optimizar el contenido, lo que permite que un usuario con una PC de gaming de alta gama y otro con un dispositivo móvil básico compartan la misma experiencia con la mayor fidelidad que su dispositivo pueda manejar.
| Sin transmisión de instancias y SLIM | Con transmisión de instancias y SLIM | |
| Instancias del modelo de datos del cliente | 159,745 | 92,536 |
| Triángulos | 20 millones | 3.35 millones |
| Draw calls | 2,402 | 1,454 |
Dos pilares de la transmisión: instancias y recursos
Cuando ves una película en tu servicio de streaming favorito, tu dispositivo no descarga todo el archivo antes de que empiece la reproducción. Descarga solo los datos suficientes para que puedas comenzar a verla de inmediato y luego descarga continuamente (o almacena en búfer) los siguientes segundos para que no haya interrupciones en la experiencia. Si tu dispositivo es de gama baja o tienes una conexión lenta, la plataforma se adapta automáticamente y te envía una versión de menor fidelidad mientras descarga la cantidad de datos necesaria para reproducir el contenido en alta fidelidad.
Roblox utiliza un concepto similar para transmitir contenido sobre la marcha, pero los datos necesarios para representar una simulación 3D de alta fidelidad presentan sus propios desafíos. Mientras que un video tiene una línea temporal lineal de contenido visto desde una sola perspectiva, las experiencias de Roblox contienen vastos mundos interactivos en 3D llenos de muchos tipos de recursos que se pueden ver desde múltiples perspectivas controladas por el usuario. Si añadimos 151.5 millones de usuarios activos diarios que juegan, exploran y, en última instancia, transmiten contenido desde una amplia variedad de dispositivos, surge un enorme potencial para optimizar la forma en que se entrega y muestra el contenido.1
Todo lo que un usuario ve en Roblox, ya sea un automóvil, un árbol, un avatar o un edificio, se representa como una serie de instancias dentro del motor. Un automóvil utilizable, por ejemplo, se divide en instancias para los parachoques, puertas, ruedas, etc. Cada instancia se construye en la experiencia a partir de varios recursos, como mallas 3D, texturas, animaciones y audio.
Casi todo la transmisión en Roblox se divide en dos tecnologías principales: transmisión de instancias y transmisión de recursos.
-
La transmisión de instancias determina qué instancias necesita transmitir el dispositivo de un usuario. No hay necesidad de transmitir partes de la experiencia que el usuario aún no puede ver o con las que no puede interactuar. En el ejemplo anterior, solo las instancias que representan los edificios cercanos se transmiten al cliente.
-
La transmisión de recursos determina la calidad de las instancias transmitidas. No hay necesidad de descargar una textura 4K de alta resolución para una montaña que está tan lejos que el usuario no puede distinguir los detalles más pequeños. En la imagen de arriba, los edificios a lo lejos y los edificios que ocupan una pequeña cantidad de espacio en la pantalla utilizan mallas reducidas y texturas de menor resolución.
El cerebro central de esta operación es un sistema que llamamos Harmony, el cual monitorea los recursos disponibles de cada usuario en cada fotograma. Harmony ajusta la transmisión de instancias y de recursos para proporcionar la mejor experiencia en función de la memoria del dispositivo, la carga de la GPU y la CPU y el ancho de banda de la red. Para una PC de gaming de alta gama, Harmony eleva todo a la máxima calidad. Para un dispositivo móvil con una conexión débil, reduce todo automáticamente para mantener la experiencia del usuario fluida.
El equipo analizó la tecnología detrás de la transmisión, la transcodificación en la nube y SLIM en el episodio 30 del podcast Tech Talks.
SLIM: Modelos interactivos ligeros y escalables
La idea central de SLIM es sencilla pero poderosa: SLIM puede crear automáticamente múltiples representaciones ligeras y optimizadas de cualquier objeto o modelo en el mundo de un creador y almacenarlas en el servidor para que se recuperen en tiempo de ejecución. El cliente de cada usuario puede alternar dinámicamente entre renderizar las instancias y los recursos originales o una de las representaciones ligeras de SLIM, en función de los recursos disponibles del dispositivo.
SLIM utiliza dos técnicas principales para generar una representación ligera:
1. Composición
Primero, SLIM combina varias partes en menos partes. En lugar de que el automóvil de abajo requiera 112 mallas y 24 texturas separadas, su representación ligera podría requerir solo una malla y cuatro texturas. El proceso de composición se ajusta con precisión para que coincida con la forma en que el motor finalmente renderizará el contenido, lo que elimina la geometría invisible dentro de un objeto y reduce la cantidad de draw calls necesarias para renderizarlo.
2. Nivel de detalle (LoD)
Después de componer el modelo, SLIM genera varias versiones con diferentes niveles de detalle. Esto implica crear versiones de la malla 3D con muchos menos triángulos y generar texturas en resoluciones mucho más bajas, tal como lo hacemos con cualquier malla individual o recurso de textura mediante técnicas tradicionales de LoD. Estas técnicas se pueden optimizar aún más cuando se aplican a modelos SLIM, ya que tenemos los marcos de coordenadas individuales de cada instancia subyacente. Esto nos da un contexto completo de cómo el creador planeó que cada uno de estos recursos se renderizara en conjunto. Con este conocimiento, SLIM nos permite tomar decisiones más informadas sobre dónde eliminar detalles innecesarios y dónde conservar los detalles que los usuarios notarán.
La representación correcta en el momento adecuado
Una vez que hemos creado múltiples representaciones de un objeto, SLIM debe decidir cuál usar para el dispositivo de un usuario específico o si es mejor usar técnicas de renderizado tradicionales en su lugar. El sistema divide el mundo en tres regiones distintas. Una forma sencilla de pensar en estas regiones es imaginar círculos concéntricos de detalle que se extienden hacia afuera desde el reproductor.
Los límites de transmisión no son realmente circulares. Su forma depende de una variedad de factores.
Región HH (instancias pesadas, renderización pesada)
En la región HH, el servidor transmite al modelo de datos del cliente las instancias completas y pesadas, y es el cliente quien determina la representación específica del recurso que debe descargar y renderizar para cada instancia. En esta región todavía es posible escalar con LoD de mallas y mips de texturas, pero no hay composición. Antes de SLIM, así es como se renderizaba cada instancia que se transmitía a una experiencia.
Región HL (instancias pesadas, renderización ligera)
La región HL se encuentra entre las regiones HH y LL. En esta región, el cliente tiene las instancias pesadas en el modelo de datos, pero puede optar por renderizar mediante el proceso de renderización completo o el proceso SLIM. Esta región se adapta para garantizar una transición fluida entre las regiones HH y LL, incluso si el usuario encuentra latencia de red. El punto de transición entre las regiones HH y HL es dinámico, lo que permite que Harmony escale hacia arriba o hacia abajo de inmediato en respuesta a un pico de recursos en cualquier dirección.
Región LL (instancias ligeras, renderización ligera)
En la región LL, el cliente solo transmite representaciones superligeras de las instancias necesarias para definir un marco de coordenadas para un modelo SLIM, junto con la cantidad mínima de metadatos. En esta región solo se renderizan modelos SLIM compuestos y ligeros, en lugar de cada instancia y recurso. La región LL requiere muchos menos triángulos y draw calls, y reduce el uso de memoria en el dispositivo del usuario en comparación con la transmisión de cada instancia pesada y el uso del proceso de renderización tradicional.
Esta técnica de regiones permite al cliente renderizar todo el mundo visible en todo momento sin incurrir en el costo computacional total de usar todas las instancias y recursos pesados al mismo tiempo. Los objetos lejanos son representaciones ligeras y altamente optimizadas, que se reemplazan por sus equivalentes de alta fidelidad a medida que el usuario se acerca. La capacidad de SLIM para crear compuestos y modelos LoD de escala múltiple le da a Harmony más herramientas para optimizar la calidad de los recursos según el dispositivo de cada usuario.
Cuando todo se integra, el jugador debe experimentar una inmersión completa y no notar ninguno de los puntos de transición ni los distintos niveles de detalle.
El futuro: ¿Hacia dónde se dirige SLIM?
SLIM es solo el primer paso de un camino compuesto por varias etapas, y nos entusiasma ver cómo los creadores integran esta tecnología en sus flujos de trabajo. En el futuro, planeamos ampliar SLIM en dos direcciones principales.
Determinar qué más se puede optimizar con SLIM
Ya comenzamos con los modelos estáticos que los creadores designan en Studio, pero en el futuro, SLIM podrá optimizar algunos de los modelos más complejos de Roblox: los avatares de la plataforma. Los avatares, con todas sus animaciones asociadas, ropa en capas y accesorios, pueden ser una variable impredecible para los creadores. Permitir que los avatares sean SLIM significa que el motor puede limitar de manera efectiva los recursos que utiliza un modelo de avatar individual.
Con el tiempo, queremos dar a los creadores la opción de aprovechar SLIM para realizar cambios en los modelos dinámicos. Imagina un modelo en el que el servidor puede realizar cambios de forma activa (por ejemplo, una puerta se abre o una pieza se destruye), pero, con algunos trucos ingeniosos, el cliente puede reutilizar la misma representación ligera.
Optimización del proceso SLIM
Ahora que tenemos un proceso completo que proporciona al motor una nueva dimensión de flexibilidad, también nos enfocamos en hacer que dicho proceso sea más inteligente, rápido y eficiente. Esto incluye:
-
Regeneración de atlas de texturas: empaquetar de forma inteligente múltiples texturas de modelos en una única hoja de texturas optimizada.
-
Segmentación automática: uso automático de la comprensión semántica y espacial del mundo para identificar los mejores modelos SLIM.
-
Representaciones más ligeras: para los objetos dinámicos que dependen menos de la latencia, estamos explorando la generación de representaciones 2D que prácticamente no requieren recursos para renderizarse en el cliente.
-
SLIM jerárquico: anidar modelos SLIM uno tras otro para que se puedan simplificar grupos completos de instancias y el motor pueda seleccionar dinámicamente entre niveles de granularidad, por ejemplo, desde un solo árbol hasta un bosque o incluso una extensión completa de terreno llena de bosques y otros objetos.
-
Aumento de la resolución: hoy en día, nos enfocamos en la optimización del rendimiento, pero muy pronto, este mismo sistema nos permitirá aumentar la resolución de los recursos para hardware futuro sin perder la intención artística original del creador. Esta nueva arquitectura significa que, a medida que nuestro motor mejora en la simulación de la realidad, podemos actualizar continuamente las representaciones que utiliza.
SLIM, en combinación con Harmony y el resto de nuestra arquitectura de transmisión y entrega de contenido, representa un avance enorme en nuestra visión de apoyar mundos más expansivos y detallados para más jugadores. La estrecha integración de nuestro motor, la entrega de contenido y la infraestructura en la nube, junto con la enorme base de contenido de millones de creadores, nos permite construir sistemas profundamente interconectados que mejoran toda la experiencia. A medida que nuestro motor mejora en la simulación de la realidad, podemos actualizar continuamente las representaciones que utiliza. Hoy en día, nos enfocamos en la optimización del rendimiento, pero muy pronto, este mismo sistema nos permitirá aumentar la resolución de los recursos para hardware futuro sin perder la intención artística original de los creadores.
Estamos construyendo una plataforma que no solo respeta esa intención artística, sino que también puede entregar de forma inteligente y automática sus creaciones a cualquier usuario en una amplia variedad de dispositivos, en cualquier lugar donde Roblox esté disponible. Deseamos ver lo que la comunidad construirá con ella.
1A partir del tercer trimestre de 2025.