Что произойдет, если я возьму мощный трехмерный веб-движок, такой как Babylon.js, и размещу его в собственном настольном или мобильном приложении? Конечно же, приложение Babylon Native!

Это не прогрессивное веб-приложение, где веб-страница размещается в собственном приложении. Одно большое отличие состоит в том, что нет HTML DOM. Уровень движка Babylon.js подключается непосредственно к уровню рендеринга, присущему платформе, без использования WebGL. Это похоже на то, как React Native относится к React, но для 3D-рендеринга.

Недавно мы начали экспериментировать с этой идеей, чтобы увидеть, насколько она жизнеспособна.

Какая была мотивация?

  1. Снижение затрат на разработку и обслуживание нескольких кроссплатформенных механизмов рендеринга.
  2. Повышение согласованности и согласованности рендеринга glTF в различных продуктах

Мы еще не совсем готовы к этому, но мы также хотим открыть исходный код, чтобы принести пользу сообществу.
[Обновление: исходный код теперь находится на GitHub! и у нас есть больше информации на нашем сайте]

Вот как сейчас выглядит приложение Babylon Native.

Помимо некоторых методов интерфейса, необходимых для запуска скриптов и т. Д., Как получить доступ к JavaScript из C ++ и наоборот во всех различных движках JavaScript? Нам нужен уровень абстракции, который может скрывать различные реализации под ним. Мы нашли ответ в N-API, а именно в node-addon-api для использования N-API с C ++. Единственная проблема в том, что нужно выделить узловую часть контракта. Мы работаем над этим с рабочей группой узла.

А что насчет шейдеров?

В настоящее время мы используем подмножество ANGLE для преобразования GLSL в HLSL для DirectX. Мы все еще определяем, что произойдет с другими API рендеринга.
[Обновление: теперь мы используем для этого glslang и SPIRV-Cross.]

Но даже без всякой абстракции платформы у нас уже есть интересный продукт. Мы уже можем загрузить все образцы моделей glTF 2.0 и большинство тестовых моделей генератора ресурсов glTF с помощью тестового приложения, ориентированного на Win32 или UWP с Chakra или V8.
[Обновление: у нас есть перешли с внутреннего механизма рендеринга на bgfx и активно работают над возвращением всех функций, включая поддержку UWP.]

Поскольку HTML DOM отсутствует на картинке, это тестовое приложение использует немного меньше памяти, чем браузер, использующий тот же код JavaScript. Возможно, будет интересно интегрироваться с React Native или каким-либо другим кроссплатформенным UI-фреймворком.

Мы ожидаем, что частота кадров будет соответствовать или превышать то, что может делать браузер.

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

Зачем писать об этом в блоге?

Мы хотим провести открытые обсуждения и получить раннюю обратную связь. Это полезно? Что-то нам не хватает? Мы с нетерпением ждем возможности обсудить это!

Гэри Хсу - команда Babylon.js