В Cruise сотни инженеров по программному обеспечению и тестированию взаимодействуют с данными, собранными в дороге и при моделировании с помощью наших автономных транспортных средств. Команда AV Tools создает приложения для визуализации, изучения и анализа этих данных. Наши пользователи должны понимать, что автомобиль видит в своей среде и что он планирует делать - это включает облака точек с десятками тысяч возвращенных LIDAR, сотни объектов, отслеживаемых антивирусом, подробные данные картографии улиц и т. Д. пользовательские визуализации, созданные инженерами Cruise.

Как и многие другие команды Cruise, мы создаем инструменты для браузера, и React является стандартом для всех наших проектов. Чтобы упростить наши приложения и улучшить взаимодействие с разработчиками при построении этих сложных пространственных визуализаций, мы создали библиотеку React, которая упрощает рендеринг 2D- и 3D-сцен. Мы называем это Мировоззрение.

WebGL - это сложно

Программирование на графическом процессоре - это мощный инструмент, но его сложно изучить. Браузер представляет собой комплексный API для компиляции и связывания шейдеров, загрузки буферов массивов вершин и текстур, а также отрисовки объектов, но он чрезвычайно подробный, сложный и трудный для отладки. Во время итераций по нашим инструментам мы экспериментировали с несколькими фреймворками, построенными на основе WebGL.

Мы остановились на regl, библиотеке, которая скрывает сложность WebGL за простым API, переводя реквизиты в низкоуровневые примитивы и упрощая выполнение вызовов отрисовки графического процессора - аналогично тому, как React использует реквизиты и обновления состояния, чтобы абстрагироваться от манипуляций. элементов DOM.

regl предоставляет знакомый React-подобный интерфейс, но при этом дает нам прямой и полный доступ к функциям WebGL, таким как текстуры, фреймбуфер и создание экземпляров. Это позволило нам сосредоточиться на функциях доставки, а не на изучении синтаксиса WebGL.

Круиз 💕 React

Когда другие команды разработчиков интерфейса Cruise начали использовать наш рендерер на основе regl в своих проектах, стало ясно, что некоторые шаблоны проектирования React все еще трудно согласовать с API regl. Несмотря на схожую парадигму, основанную на реквизитах, для создания пользовательских визуализаций и их эффективной интеграции с нашим модулем рендеринга требовался некоторый опыт в области GL.

Чтобы еще больше упростить процесс разработки, мы абстрагировались от шаблонного кода, необходимого для рендеринга общих форм и типов данных с помощью regl, создав общую библиотеку компонентов React. Это позволило другим командам легко повторно использовать нашу работу, но при этом сохранила возможность настройки.

Эта библиотека стала Мировоззрение. Он предоставляет 2D- и 3D-камеры, элементы управления движением мыши и клавиатуры, взаимодействие при щелчке мышью и набор встроенных команд для рисования. Теперь наши инженеры могут легко создавать собственные визуализации без необходимости изучать сложные графические API-интерфейсы или писать оболочки, чтобы заставить их работать с React.

Мировоззрение с открытым исходным кодом

Хотя наша первоначальная разработка Worldview была тесно связана с потребностями компании Cruise в визуализации, границы API стали более четкими по мере развития библиотеки, и мы выделили Worldview в отдельный пакет, который мы выпускаем как программное обеспечение с открытым исходным кодом под лицензией Apache 2.0. Мы надеемся, что Worldview снизит барьер для входа в мощный мир WebGL, предоставив веб-разработчикам простую основу и предоставив им возможность создавать более сложные визуализации.

Что дальше?

Мы продолжим выпускать больше кода по мере дальнейшего развития Worldview и других библиотек визуализации. Мы рады получать отзывы и предложения от сообщества - пул-реквесты и проблемы приветствуются. Наслаждаться!

Джейкоб Бандес-Сторч, Брайан Карлсон, Ян Пол Посма, Одри Ли, Эстер С. Веон