События

Геометрия под «прицелом»

2016-09-02

Я обожаю изучать новые фичи релизов и с нетерпением жду очередных версий. К радости пользователей, разработчики Blend4Web каждый месяц балуют их чем-то новеньким. В июльской сборке 16.07 появилась крутая возможность экономии памяти за счет клонирования геометрии. Потирая ручки, я решил досконально изучить этот момент и выложить свои изыскания на общее обозрение.

Что такое инстансинг геометрии... Есть объект-эталон, который загружается в память GPU. Его можно использовать для отрисовки любого количества копий. Это значительно разгружает вычислительные возможности аппаратуры.

Для клонирования геометрии Blend4Web предлагает использовать систему частиц. Достаточно выбрать режим Hair, добавить нужный объект и размножить его по поверхности. Движок автоматически включит клонирование, если, конечно, ваша видеоплата не слишком древняя.

Включите эти опции для активации клонирования.

Остров клонов

Какой может быть тест без тестируемой сцены! Я постарался создать насыщенный объектами остров, чтобы по максимуму загрузить GPU, CPU и прочие железяки.

Полторы тысячи объектов, больше миллиона вершин, почти 700000 полигонов. Это без использования клонирования. Браузеру явно не понравится...

Сотни деревьев и кустов в окружении безбрежного океана.

Каждый эталонный объект содержит сложные материалы с использованием прозрачности, текстур Normal Map и отнюдь не слабого количества элементов. Например, деревья состоят из почти 10000 вершин.

Для красоты были включены тени, окружающий свет и прочие прелести.

Вид с другого ракурса.

Подготовка к тесту

В качестве тестового железа был выбран вполне обычный компьютер с параметрами чуть выше офисного варианта.

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

Тестовая конфигурация.

Также были готовы две сборки сцены. Первая экспортировалась из SDK версии 16.06, а вторая из SDK 16.08. Таким образом, у меня имелись два приложения, с клонированием геометрии и без него. Итак, приступим!

Результаты тестов

Тестирование выполнялось на основании показаний программы-просмотрщика конкретной версии фреймворка.

Сначала меня заинтересовало количество FPS (кадры в секунду). По логике, клонирование геометрии не должно вызывать значительного расхода вычислительных мощностей GPU, но, в совокупности, с дополнительными эффектами (тени, текстуры) это выглядело по иному.

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

Меня заинтересовал достаточно низкий FPS. После некоторых изысканий, выяснилось, что львиная доля нагрузки приходится на GPU в момент просчета теней.

Существуют хитрые алгоритмы оптимизации теней в зависимости от разных факторов. Blend4Web предлагает несколько вариантов. В этот раз я использовал честную визуализацию, когда качество теней не изменяется от расстояния. Хотя ради интереса, я попробовал отключить тени и закономерно получил 60-80 FPS.

Однако, главная фича клонирования геометрии — экономия оперативной памяти. Особенно это важно для веб-платформ. Здесь тестирование показало просто сумасшедший результат!

Расход памяти на геометрию для оптимизированной версии составил 6Мб против 292Мб. Если смотреть с точки зрения браузера, то в целом приложение с клонированием занимает 124Мб, в то время, как его оппонент «съел» аж 410Мб.

А в итоге... Используйте инстансинг, где только возможно, ведь память в браузерах поистине бесценна.

Ссылки:
Демо с оптимизацией
Демо без оптимизации

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