Только что Фэй-Фэй Ли представила свое последнее достижение: мобильные телефоны теперь могут запускать трехмерный мир с сотнями миллионов частиц Ссылка на демонстрацию прилагается.

Возможность создавать интерактивный 3D-мир с помощью серии фотографий — не новость. Настоящая проблема заключается в том, чтобы уместить этот огромный мир в мобильном браузере среднестатистического пользователя.

Только что компания World Labs, занимающаяся моделированием мира с помощью искусственного интеллекта и возглавляемая Фэй-Фэй Ли, выпустила и открыла исходный код нового достижения: Spark 2.0.

Этот динамический движок рендеринга 3D-облаков точек Гаусса (3DGS), разработанный специально для веб-приложений, постепенно делает возможным плавное отображение сверхбольших 3D-сцен с сотнями миллионов частиц в браузерах на любом устройстве.

Почему так сложно уместить трехмерный мир, состоящий из сотен миллионов частиц, в мобильный телефон?

Возможно, вы слышали о «3D-гауссовском сплэттинге», или сокращенно 3DGS. Вкратце, это технология, которая преобразует реальные сцены в интерактивный 3D-контент без необходимости моделирования; его можно создать, просто сделав серию фотографий.

В отличие от традиционного 3D-моделирования, использующего треугольные грани, 3DGS использует миллионы полупрозрачных цветных эллипсоидов, каждый из которых называется «сплитом».

▲Слева используются текстурированные треугольные сетки, а справа — гауссовы пятна для рендеринга того же объекта.

Каждый пик представляет собой не простую точку, а эллипсоид с собственной «индивидуальностью». Он фиксирует свое положение в пространстве, длину радиусов трех осей, угол ориентации, значение цвета RGB и прозрачность.

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

Именно этот метод наложения «мягких границ» позволяет накладывать миллионы пятен друг на друга, чтобы создать текстуру кирпичных стен, полупрозрачность листьев и отражение стекла, а не пластичную текстуру множества треугольников с четкими краями.

Результаты превосходны, а объем информации значителен. Высококачественная сцена сканирования 3DGS часто содержит десятки миллионов пятен, размер файла легко превышает 1 ГБ.

Это создает сложную проблему: максимальное количество «штрихов», которое обычный мобильный телефон может плавно отобразить, составляет примерно от 1 до 5 миллионов, что на порядок меньше, чем 40 миллионов «штрихов» при высококачественном сканировании.

Существующие рендереры также не могут корректно отображать несколько отсканированных объектов в одной сцене. Они могут отображать только один объект за раз, иначе объекты располагаются в неправильном порядке и «застревают» на поверхностях друг друга, создавая неразбериху.

Так появился Spark. Согласно официальному блогу, Spark изначально был внутренним инструментом, используемым World Labs. World Labs нужно было отображать миры, сгенерированные 3DGS, на веб-странице, но существующие рендереры имели существенные ограничения: некоторые могли отображать только отдельные объекты, некоторые полагались на WebGPU (который многие устройства еще не поддерживали), а некоторые не поддерживали динамическую анимацию.

После сравнения нескольких вариантов они решили построить его сами.

В качестве технологической платформы они выбрали THREE.js, самый популярный 3D-фреймворк в интернете, работающий на WebGL2 и охватывающий практически все современные устройства. Основная логика рендеринга выполняется в три этапа: сначала генерируется глобальный список точек рендеринга (splat) для всех объектов на графическом процессоре; затем точки рендеринга равномерно сортируются от самой дальней к самой ближней; и, наконец, все точки рендерятся одновременно.

«Глобальная сортировка» может звучать ничем не примечательно, но на самом деле это ключ к сосуществованию нескольких объектов 3DGS в одной сцене без взаимного наложения. Spark также предоставляет конвейер обработки на графическом процессоре, позволяющий пользователям выполнять пользовательские операции над каждым объектом, такие как перекрашивание, регулировка прозрачности и динамическая анимация, используя GLSL или реализуя это с помощью графа узлов, как в Blender.

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

Настройте устройство таким образом, чтобы оно всегда отображало только тот объем информации, который "необходим".

Spark 2.0 построен на сочетании трех технологий: уровня детализации (LoD), прогрессивной потоковой передачи и управления виртуальной памятью. Хотя каждая из этих технологий имеет свои прецеденты, их объединенная мощь позволяет плавно отображать миллиарды экземпляров объектов в мобильных браузерах.

1. Непрерывное дерево уровней детализации (LoD Tree): рациональное использование ресурсов.

Уровень детализации (LoD) — это уже хорошо зарекомендовавшая себя концепция в игровой индустрии. Она использует тысячи треугольников для ближайших деревьев и всего несколько десятков для дальних, распределяя ресурсы по мере необходимости для экономии вычислительной мощности. Система Nanite в Unreal Engine использует тот же подход, связывая детализацию треугольников с дальностью обзора и автоматически масштабируя изображение.

В Spark 2.0 та же логика была перенесена в Splat, что сделало его еще более продуманным.

Переключение между несколькими дискретными версиями может легко вызвать визуальные «скачки». Подход Spark заключается в построении полного «непрерывного дерева уровней детализации». Каждый внутренний узел представляет собой приблизительную версию своих дочерних элементов, которая сходится слой за слоем и, наконец, достигает корневого узла, являющегося самым грубым отдельным элементом во всей сцене.

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

Весь процесс ограничен фиксированным бюджетом на использование графических процессоров: приблизительно 500 000 для мобильных устройств и 2,5 миллиона для настольных компьютеров. Общее количество графических процессоров в сцене не имеет значения; пока фактическое количество используемых графических процессоров остается стабильным в рамках бюджета, частота кадров, естественно, будет оставаться стабильной.

Кроме того, Spark внедряет «фовеальное рендеринг», которое выделяет большую часть бюджета рендеринга на направление взгляда, автоматически сужая детализацию краев и областей позади вас. Этот эффект особенно заметен на VR-устройствах, где для его достижения обычно требуется отслеживание взгляда. Spark аппроксимирует это с помощью фиксированной конусообразной области, и это работает так же хорошо.

2. Совершенно новый формат .RAD: "потоковая передача", как при просмотре коротких видеороликов.

Проблема эффективности рендеринга решена, но проблема эффективности передачи остается столь же сложной. Существуют два формата файлов 3DGS: .PLY и .SPZ. Первый не сжат, и файл размером 10 МБ может достигать внушительных 2,3 ГБ. Хотя он позволяет одновременно загружать и отображать файлы, их размер просто невыносим.

Последний способ использует столбцовое хранение и сжатие Gzip, сжимая тот же объем данных до 200-250 МБ. Недостатком является то, что для отображения необходимо загрузить весь файл целиком, поскольку атрибуты каждого фрагмента разбросаны по всему файлу, и полное содержимое невозможно восстановить, если какая-либо его часть отсутствует.

Чтобы объединить преимущества обоих подходов, в Spark 2.0 был представлен новый формат .RAD (RADiance fields). Он разделяет данные splat на независимые блоки по 64 КБ каждый, сжимает их отдельно и записывает смещение в байтах каждого блока в заголовок файла, обеспечивая произвольный доступ к любому блоку.

Первый блок всегда представляет собой самые грубые 64-килобайтные фрагменты всей сцены; после загрузки контур сцены сразу становится виден. Затем система определяет, какие области требуют наибольшей детализации в зависимости от точки зрения, отдавая приоритет загрузке соответствующих блоков данных и постепенно раскрывая детали размытого изображения. Три параллельных потока Web Worker синхронно загружают и декодируют данные в фоновом режиме, обеспечивая сохранение деталей, где бы вы ни находились.

3. Виртуальная память графического процессора: хранение неограниченного пространства в рамках ограниченного объема видеопамяти.

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

Для решения этой проблемы Spark 2.0 заимствует механизм виртуальной памяти из операционной системы.

Система выделяет на графическом процессоре фиксированный пул памяти с максимальным объемом в 16 миллионов блоков и использует таблицу страниц для записи того, какие блоки данных .RAD в данный момент находятся на графическом процессоре. Когда необходимо отрендерить определенную область…

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

Благодаря этому механизму, 3D-сцены из разных источников могут использовать один и тот же пул памяти. Теоретически, при достаточной скорости сети, бесчисленное множество независимых отсканированных сцен может быть плавно объединено в бесконечно большой мир.

Одна ссылка обеспечивает доступ ко всему миру.

После выхода Spark 2.0 Фэй-Фэй Ли немедленно публично заявил: «Spark 2.0 теперь может плавно воспроизводить более 100 миллионов объектов на любом устройстве. Для меня большая честь внести свой вклад в открытую экосистему веб-ориентированного 3D-рендеринга».

Она не акцентировала внимание на «своих достижениях», а скорее на «своем вкладе в сообщество открытого исходного кода». Это утверждение интригует. 3D-рендеринг — быстро развивающаяся область; одна компания не может продвинуть вперед всю экосистему. Открытый исходный код — правильный подход для ускорения этого процесса.

Судя по существующим примерам, разработчики действительно используют Spark для изучения различных направлений. Лауреат премии Webby Award Джеймс С. Кейн самостоятельно разработал многопользовательскую космическую стрелялку под названием Starspeed.

Вся игровая вселенная создана из более чем 100 миллионов «сплэтов» и включает в себя 10 оригинальных саундтреков в стиле синтезированной волны, все из которых транслируются в формате .RAD через браузер. В потрясающую научно-фантастическую среду можно играть прямо на веб-странице.

▲Ссылка, чтобы получить незабываемые впечатления  https://starspeed.game/

В художественном оформлении участвовал Юг Брюйер, автор проекта *Dormant Memories*. Он является соучредителем интерактивной студии Dpt. В этой серии 3D-сканы реальных локаций сопоставляются с воображаемыми пространствами для создания интерактивных, исследуемых сред. Граница между реальностью и вымыслом размывается в зернистости изображения, что на удивление уместно.

▲ Прилагается адрес места проведения мероприятия  https://smallfly.com/dormant_memories/

Рю Фудзивара из отдела пространственных информационных технологий Hololive использовал Spark для рендеринга множества крупномасштабных сцен захвата реального мира, с максимальным количеством 40 миллионов точек на сцену, что обеспечивало бесперебойную работу на смартфонах, Quest и Vision Pro.

▲Ссылка, чтобы получить незабываемые впечатления  https://works.lilea.net/spark/

Эти разнообразные попытки разработчиков в полной мере демонстрируют мощные возможности Spark 2.0 на разных устройствах и в различных сценариях применения. Но это лишь половина истории.

Для компании, занимающейся созданием «модели мира на основе ИИ», амбиции команды Фэй-Фэй Ли выходят далеко за рамки простого предоставления инструмента рендеринга с открытым исходным кодом. Если Spark 2.0 решил финальную проблему доставки — «как смотреть плавно», — то их настоящий козырь — это создание 3D-контента с низким порогом входа.

Spark и платформа для создания контента Marble от World Labs тесно интегрированы. В Marble можно создать 3D-мир, используя строку текста или изображение, объединить несколько миров в более крупную сцену с помощью Marble Studio, а затем визуализировать его в виде веб-контента, которым можно поделиться, используя Spark. Этот процесс уже работает.

В технологическом прогрессе часто приоритет отдается «неограниченному совершенствованию», но иногда подход «достаточно хорошо» может быть наиболее подходящим. Spark 2.0 как раз об этом.

Идея отображения устройством лишь «достаточного» количества объектов в любой момент времени не нова, но её реализация в веб-рендеринге при сохранении совместимости с мобильными браузерами и Quest представляет собой серьёзную инженерную проблему на каждом этапе.

Когда искусственный интеллект сможет создавать бесконечно большие трехмерные миры, какой носитель мы будем использовать, чтобы донести их до каждого обычного человека? Новейший ответ World Labs – это веб-ссылка.

Вот адрес блога:

https://www.worldlabs.ai/blog/spark-2.0

#Добро пожаловать на официальный аккаунт iFanr в WeChat: iFanr (идентификатор WeChat: ifanr), где вы сможете в кратчайшие сроки увидеть еще больше интересного контента.