Как мы ускоряли WebGL
Мстислав Живодков
Что ждать
Наше приложение
Наше приложение
Наше приложение
Наше приложение
20 fps
Объединяем геометрии
Было
300 геометрий
20 fps
Стало
1 геометрия
50 fps
Объединяем геометрии
Маркеры
Было
150-1000 элементов
50 fps
Стало
1 геометрия
60 fps
• object.addEventListener("click")
Интерактив
Интерактив
• Raycaster из three.js
• Маркеры
github.com/mourner/rbush
Интерактив
Интерактив
Облегчаем приложение
[CELLRANG
E]
наш код
18%
[CELLRANG
E]
three.js
82%
Облегчаем зависимости
• Размер three.js 507kB
Облегчаем зависимости
• Размер three.js 507kB
• Размер 2gl 103kB
github.com/2gis/2gl [CELLRANG
E]
наш код
53%
[CELLRANG
E]
2gl
47%
Облегчаем данные
Облегчаем данные
• Триангуляция
Облегчаем данные
• Триангуляция
 Увеличивает количество данных
 Требует больших вычислений
 github.com/mapbox/earcut
Облегчаем данные
• Триангуляция
 Увеличивает количество данных
 Требует больших вычислений
 github.com/mapbox/earcut
• Бинарный формат
 github.com/google/protobuf
Сглаживание
Сглаживание
• TypedArray
• Параллельность
• Профилирование
Важные детали
Незнакомые проблемы
Z-fighting
C WebGL нужно по-другому думать
Что было
Спасибо за
внимание!
@Trufid
github.com/Trufi

Как мы ускоряли WebGL / Мстислав Живодков (2GIS)