Оптимизации 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 наследует те же характеристики производительности, мы также обеспечиваем отличную производительность и там.