Optimizaciones de Wonderland Engine

Para permitir aplicaciones y escenas más complejas en tu aplicación WebXR, Wonderland Engine implementa varias optimizaciones. Encuentra a continuación una lista no exhaustiva:

Rendimiento de renderizado 

Optimizaciones que apuntan a un renderizado de fotogramas más rápido.

Grafo de escena de Cuaterniones Dual 

Mientras que los grafos de escena convencionales se implementan usando matrices, el grafo de escena de Wonderland Engine utiliza cuaterniones duales.

Los cuaterniones duales requieren solo la mitad de la cantidad de memoria de una matriz 4x4 y requieren menos operaciones para concatenar.

Como los cuaterniones duales solo representan rotación y traslación, los aumentamos con un vector de escala separado.

Los cuaterniones duales son especialmente ventajosos para la piel, ya que preservan mejor el volumen que otros métodos. Con el grafo de escena, esto se integra perfectamente.

Agrupamiento en Tiempo de Ejecución 

Wonderland Engine une las mallas en tiempo de ejecución para permitir que múltiples mallas se dibujen con una sola llamada de dibujo. Como cada malla generalmente utiliza diferentes materiales, tenemos shaders especiales que pueden usar una lista de materiales para dibujar partes del grupo de diferentes maneras.

Las texturas se combinan automáticamente en “atlas de texturas”.

Esta optimización reduce en gran medida las llamadas de dibujo al fusionar miles de llamadas en una sola siempre que compartan el mismo shader.

Texturas Comprimidas y Transmisión de Texturas 

Al usar formatos de textura comprimidos en la GPU, Wonderland Engine utiliza la memoria de la GPU de manera más eficiente. La misma cantidad de memoria de la GPU puede contener más texturas y la resolución de textura en la escena puede ser mayor.

Además, nuestra función de Transmisión de Texturas intercambia piezas de texturas dentro y fuera de la memoria según lo que sea visible para la cámara. Esto permite usar texturas de alta resolución incluso en entornos con limitaciones de memoria.

WebAssembly (C++) 

Wonderland Engine está escrito en C++ y compilado a WebAssembly.

WebAssembly da a Wonderland Engine más control sobre el uso de memoria y un rendimiento mejorado sobre JavaScript. Funciones intensivas en computación, por ejemplo, el cálculo de transformaciones del grafo de escena o funciones intensivas en memoria como el agrupamiento, pueden ser implementadas de manera mucho más eficiente.

WebAssembly SIMD 

Las instrucciones SIMD en WebAssembly permiten procesar múltiples piezas de datos en una sola instrucción. Esto acelera significativamente las matemáticas vectoriales.

El SIMD de WebAssembly es compatible con todos los navegadores principales desde marzo de 2023.

Diseño orientado a datos 

El sistema de componentes y el grafo de escena de Wonderland Engine, así como otras partes del código, siguen el Diseño Orientado a Datos (DOD). El DOD es una forma de escribir código de manera que los datos se procesen de manera más eficiente por la CPU mejorando el uso de la caché y ayudando a la ejecución predictiva del código.

Tiempo de carga 

Optimizaciones que apuntan a una carga más rápida.

Formato binario de escena 

Como el análisis de texto (por ejemplo, de archivos gltf o obj) en binario para WebGL ya se realiza en el editor, los datos se pasan al tiempo de ejecución en un formato binario directamente.

Estos datos binarios están dispuestos de tal manera que se requiere un esfuerzo mínimo por parte del tiempo de ejecución para usarlos en el renderizado.

También nos permite realizar Cuantización en, por ejemplo, los datos de la malla: algunas propiedades de la malla se pueden almacenar con menos bits por vértice, si su rango de valor es conocido.

Compresión de imágenes Basis Universal 

El soporte de formato de Textura Comprimida es diferente según el dispositivo. Con Basis Universal, podemos comprimir imágenes a un solo formato que luego puede convertirse (“transcodificarse”) a formatos de texturas GPU comprimidas específicas del dispositivo.

Compresión de animación 

Utilizamos Cuantización y eliminamos fotogramas clave redundantes para reducir el tamaño de las animaciones.

Tamaño en tiempo de ejecución 

Prestamos especial atención a mantener el tamaño binario de WebAssembly pequeño y a mantener bajo el impacto de las dependencias, ya que el tiempo de ejecución es una de las primeras cosas que se descargan.

Nuestro tiempo de ejecución de WebAssembly actualmente tiene un tamaño de ~580 kB comprimido y se reduce continuamente.

Optimizaciones Especiales 

Optimizaciones realizadas para plataformas específicas.

Safari en iOS y Apple Vision 

En 2022 reescribimos una gran parte de nuestro renderizador para asegurar un rendimiento excelente en Safari en iOS.

Hoy en día, el rendimiento de Wonderland Engine en iOS es comparable al rendimiento en Android. Debido a que Safari en Apple Vision PRO hereda las mismas características de rendimiento, proporcionamos también un rendimiento excelente allí.