Saltar al contenido

Volver a proyectos

WebGL

Tiempo de carga percibido en un juego 3D en el navegador

· 6 min

Un juego de acción en 3D, corriendo enteramente en el navegador vía WebGL, necesita equilibrar dos objetivos que compiten entre sí: cargar suficiente audio y modelos tridimensionales para parecer completo, y aun así dar la sensación de estar listo para jugar casi en el instante en que se abre la página.

Ilustración de un botón de play con una barra de progreso

Audio bloqueando el inicio del juego

En una versión anterior, todos los archivos de sonido de las armas se cargaban de forma anticipada, durante la inicialización de la escena, incluso antes de que el jugador interactuara con nada. Esto sumaba un tramo de tiempo de red al momento en que el juego quedaba listo, y chocaba con una restricción común del navegador: el contexto de audio no puede iniciarse sin un gesto del usuario, así que parte de esa carga anticipada ni siquiera cumplía su propósito.

Postergando la carga hasta el primer gesto del jugador

La carga de audio pasó a postergarse hasta después del primer clic o toque del jugador. Esto resolvió los dos problemas de una vez: el tiempo hasta que la escena pareciera lista bajó, porque esa carga salió del camino crítico, y la carga pasó a coincidir exactamente con el momento en que el navegador ya permite iniciar audio de todos modos.

Modelos 3D: mostrar algo de inmediato, reemplazar después

Las armas del juego inicialmente se construían solo con geometría primitiva simple, rápidas de armar, pero visualmente pobres. La versión más reciente adopta un enfoque híbrido: construye y muestra de inmediato una versión simplificada y barata de cada arma, y carga el modelo 3D real en segundo plano, reemplazando la versión provisional en cuanto termina la carga. Si el modelo real falla al cargar, el juego simplemente continúa con la versión simplificada en vez de trabarse o mostrar un hueco en la escena.

Lo que todavía falta

No todo el contenido 3D planeado tiene aplicada esta carga bajo demanda, parte de los modelos todavía existe solo como archivo en el proyecto, sin comprimir, esperando conectarse de la misma manera. Es un recordatorio de que este tipo de presupuesto de carga necesita vigilarse conforme se agrega más contenido, no resolverse una vez y olvidarse.

Resultado

Sin depender de ninguna métrica de FPS, el efecto es perceptible: el juego llega a un estado jugable más rápido y nunca se queda esperando a la red antes de que el jugador haya hecho algo, la única espera ocurre en paralelo, mientras el jugador ya está jugando con una versión provisional en pantalla.