Комментарии 13
Идея интересная, ухудшается частота кадров достаточно сильно, но видимо она и не является особо важной в данном случае
0
Для пользователей важна не частота кадров сама по себе, а возможность работать с большими сетками.
Поэтому для оптимизации мы делали замеры на тестовой сетке, которая представляет собой худший из возможных случаев.
Реальные сетки угловой геометрии более-менее состыкованы, и уж точно не имеют 50% случайно-неактивных ячеек, поэтому там падение FPS в худшем случае не такое большое.
Поэтому для оптимизации мы делали замеры на тестовой сетке, которая представляет собой худший из возможных случаев.
Реальные сетки угловой геометрии более-менее состыкованы, и уж точно не имеют 50% случайно-неактивных ячеек, поэтому там падение FPS в худшем случае не такое большое.
+1
Недавно занимался чем-то похожей задачей. Надо было сделать визуализацию больших пространств для аналитической программы. В итоге пришел к тому, что пространство рассматривается не как одна сетка, а как набор сеток с разным разрешением.
Нет никакого смысла рисовать такие же ячейки в сотне километров от камеры, как и в десяти метрах. Поэтому пространство разбивается на дерево квадратов, каждый из который может в свою очередь еще дробиться в зависимости от удаленности от камеры пока не будет получена сетка оптимального разрешения.
В результате такого подхода сохраняется простота работы с регулярными сетками, но появляется высокая скорость работы. Пришлось повозиться со сшивкой сеток разного разрешения, но результат того стоил. Интегрированная видеокарта на ноутбуке отлично справляется с визуализацией. Как бонус можно еще и перемещаться на практически неограниченные расстояния при наличии соответствующих данных.
Нет никакого смысла рисовать такие же ячейки в сотне километров от камеры, как и в десяти метрах. Поэтому пространство разбивается на дерево квадратов, каждый из который может в свою очередь еще дробиться в зависимости от удаленности от камеры пока не будет получена сетка оптимального разрешения.
В результате такого подхода сохраняется простота работы с регулярными сетками, но появляется высокая скорость работы. Пришлось повозиться со сшивкой сеток разного разрешения, но результат того стоил. Интегрированная видеокарта на ноутбуке отлично справляется с визуализацией. Как бонус можно еще и перемещаться на практически неограниченные расстояния при наличии соответствующих данных.
+1
Вы визуализировали регулярные сетки? И насколько быстро выполнялся предрасчёт для разбиения пространства?
Сетки угловой геометрии обычно не настолько велики (десятки километров и 500-1000 ячеек по одной из осей). К тому же, нестыкованность и неактивность ячеек осложняет алгоритм уменьшения разрешения сетки — пользователям важно видеть корректную картинку.
Но в целом это хорошая идея — мы могли бы, к примеру, отображать внешний слой ячеек с полной детализацией, а внутренние слои с меньшей детализацией. Но нам для сохранения корректности картинки придется использовать Occlusion Query — предрасчёт будет слишком долгим, как мне кажется.
Сетки угловой геометрии обычно не настолько велики (десятки километров и 500-1000 ячеек по одной из осей). К тому же, нестыкованность и неактивность ячеек осложняет алгоритм уменьшения разрешения сетки — пользователям важно видеть корректную картинку.
Но в целом это хорошая идея — мы могли бы, к примеру, отображать внешний слой ячеек с полной детализацией, а внутренние слои с меньшей детализацией. Но нам для сохранения корректности картинки придется использовать Occlusion Query — предрасчёт будет слишком долгим, как мне кажется.
+1
Прочитал с интересом,
но ожидал увидеть результаты по встроенной видеокарте, упомянутой в заголовке...
+1
Спасибо!
Замер производительности на встроенной видеокарте не вошел в статью по недосмотру, добавим.
На Intel UHD 630 до оптимизаций на тестовой сетке было 6 и 5 FPS в лучшем и худшем случае, после оптимизаций — 12 FPS в обоих случаях.
Учитывая, что наша тестовая сетка представляет собой худший случай, встроенная видеокарта сможет показать реальную сетку с миллиардом ячеек, хоть и не очень быстро.
Замер производительности на встроенной видеокарте не вошел в статью по недосмотру, добавим.
На Intel UHD 630 до оптимизаций на тестовой сетке было 6 и 5 FPS в лучшем и худшем случае, после оптимизаций — 12 FPS в обоих случаях.
Учитывая, что наша тестовая сетка представляет собой худший случай, встроенная видеокарта сможет показать реальную сетку с миллиардом ячеек, хоть и не очень быстро.
0
Вполне научная статья, было бы здорово в конце статьи увидеть список полезных литературных источников
0
Подскажите, не было попыток еще уменьшить количество памяти за счет использования геометрического шейдера?
0
Пробовали, потребление памяти сокращалось на 30%, но при этом FPS падал на 40-50%. Геометрические шейдеры считаются медленными чуть ли не с самого их появления, и на новых поколениях видеокарт улучшений нет. Возможно, новые Mesh-шейдеры окажутся быстрее, но пока видеокарт с их поддержкой очень мало.
К тому же, мы оптимизировали обычную версию так, что потребление памяти сравнялось с версией на геометрических шейдерах, а производительность выросла на 20% (>60% по сравнению с геометрическим шейдером).
К тому же, мы оптимизировали обычную версию так, что потребление памяти сравнялось с версией на геометрических шейдерах, а производительность выросла на 20% (>60% по сравнению с геометрическим шейдером).
0
А не пробовали положить все данные в один буфер? Вот как здесь 2-й и 3-й варианты:
www.khronos.org/opengl/wiki/Vertex_Specification_Best_Practices#Formatting_VBO_Data
Мне 3-й метод кажется более предпочтительным, т.к. он в целом более популярен (используется в DirectX), и видеокарты должны быть лучше заточены под такое расположение данных. Хотя это только предположение, не проверял.
Также отмечу, что если изначально у вас объёмные данные, которые можно представить 3D-массивом, то их можно визуализировать вообще без использования вершин и полигонов, через volume raycasting.
habr.com/ru/post/123632
www.khronos.org/opengl/wiki/Vertex_Specification_Best_Practices#Formatting_VBO_Data
Мне 3-й метод кажется более предпочтительным, т.к. он в целом более популярен (используется в DirectX), и видеокарты должны быть лучше заточены под такое расположение данных. Хотя это только предположение, не проверял.
Также отмечу, что если изначально у вас объёмные данные, которые можно представить 3D-массивом, то их можно визуализировать вообще без использования вершин и полигонов, через volume raycasting.
habr.com/ru/post/123632
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Майнкрафт для геологов: 3D-рендеринг миллиарда ячеек на встроенной видеокарте (часть 2)