Оптимизации Wonderland Engine

Чтобы позволить более сложным приложениям и сценам в вашем WebXR приложении, Wonderland Engine реализует различные оптимизации. Найдите неполный список ниже:

Производительность рендеринга 

Оптимизации, направленные на более быстрое рендеринг кадров.

Сценограф на основе двойных кватернионов 

В то время как традиционные сценографы реализованы с использованием матриц, сценограф Wonderland Engine использует двойные кватернионы.

Двойные кватернионы требуют лишь половину объёма памяти по сравнению с матрицей 4x4 и требуют меньше операций для объединения.

Поскольку двойные кватернионы представляют только вращение и трансляцию, мы дополняем их отдельным вектором масштабирования.

Двойные кватернионы особенно полезны для скелетной анимации, поскольку они лучше сохраняют объём, чем другие методы. В сочетании со сценографом это интегрируется превосходно.

Пакетирование в реальном времени 

Wonderland Engine объединяет меши во время выполнения, чтобы позволить рисовать несколько мешей одним вызовом рисования. Поскольку каждый меш обычно использует разные материалы, у нас есть специальные шейдеры, способные использовать список материалов для отрисовки частей пакета различными способами.

Текстуры автоматически объединяются в “текстурные атласы”.

Эта оптимизация значительно снижает количество вызовов рендеринга, объединяя тысячи вызовов в один, если они используют одинаковый шейдер.

Сжатие текстур и потоковая передача текстур 

Используя сжатые форматы текстур на GPU, Wonderland Engine более эффективно использует память GPU. То же количество памяти GPU может содержать больше текстур, и разрешение текстур в сцене может быть выше.

Кроме того, наша функция Texture Streaming заменяет фрагменты текстур в памяти в зависимости от того, что видно камере. Это позволяет использовать текстуры высокого разрешения даже в средах с ограниченной памятью.

WebAssembly (C++) 

Wonderland Engine написан на C++ и скомпилирован в WebAssembly.

WebAssembly предоставляет Wonderland Engine больше контроля над использованием памяти и увеличивает производительность по сравнению с JavaScript. Особенно эффективны являются вычислительно тяжелые функции, такие как вычисление преобразований сценографа или функции, интенсивно использующие память, такие как пакетирование.

WebAssembly SIMD 

Инструкции SIMD в WebAssembly позволяют обрабатывать несколько частей данных за одну инструкцию. Это значительно ускоряет векторную математику.

WebAssembly SIMD поддерживается всеми основными браузерами с марта 2023 года.

Дизайн, ориентированный на данные 

Сценограф и система компонентов Wonderland Engine, а также другие части кодовой базы следуют Дизайну, ориентированному на данные (DOD). DOD — это способ написания кода, при котором данные обрабатываются более эффективно процессором за счет улучшения использования кэша и помощи в предсказуемом выполнении кода.

Время загрузки 

Оптимизации, направленные на более быструю загрузку.

Бинарный формат сцены 

Поскольку разбор текста (например, из файлов gltf или obj) в бинарный для WebGL уже выполнен в редакторе, данные передаются в время выполнения в бинарном формате непосредственно.

Эти бинарные данные организованы таким образом, чтобы минимальные усилия требовались для их использования в рендеринге.

Это также позволяет нам выполнить Квантование на данных мешей, где некоторые свойства меша могут быть сохранены с меньшим количеством бит на вершину, если их диапазон значений известен.

Сжатие изображений Basis Universal 

Поддержка сжатых текстур различна на каждом устройстве. С Basis Universal мы можем сжать изображения в единый формат, который затем может быть преобразован (“транскодирован”) в специфичные для устройства сжатые GPU-форматы текстур.

Сжатие анимации 

Мы используем Квантование и удаляем избыточные ключевые кадры, чтобы уменьшить размер анимаций.

Размер времени выполнения 

Мы уделяем особое внимание тому, чтобы наш размер бинарного WebAssembly был мал, а след, оставляемый зависимостями, минимален, т.к. время выполнения является одной из первых загружаемых вещей.

Наш WebAssembly runtime в данный момент имеет размер ~580 кБ в сжатом виде и мы продолжаем его уменьшать.

Специальные оптимизации 

Оптимизации для конкретных платформ.

Safari на iOS и Apple Vision 

В 2022 году мы переписали существенную часть нашего рендерера, чтобы обеспечить отличную производительность на iOS Safari.

Сегодня производительность Wonderland Engine на iOS сопоставима с производительностью на Android. Поскольку Safari на Apple Vision PRO наследует те же характеристики производительности, мы также обеспечиваем отличную производительность и там.