Войти
ПрограммированиеФорумГрафика

Сто миллиардов билбордов и текстовых меток, и как это оптимизировать? (2 стр)

Страницы: 1 2
#15
13:26, 20 янв. 2016

"Ребята давайте его побьем"(с) Он тут какие то задачи ставит нелепые. Это по нашему.))


#16
13:33, 20 янв. 2016

innuendo
Это правильно ))
Turbochist
На самом деле всё не так плохо. Инстансинг не так страшен - это многократный рендеринг одной модели с разными наборами данных (позиция, размер, цвет, uv на атласе и т.п.).
В шейдере ты выбираешь нужный набор по индексу. Если это DX11, индекс доступен в спец. регистре. Если DX <= 9 или OpenGL ES <= 2.0 - можно сэмулировать инстансинг.
Продублировать меш биллборда, скажем 16 раз, и в каждой копии проставить индекс инстанса. Меш биллборда небольшой, можно запихнуть в 16 байт.
И дальше пихаешь в конст.регистры наборы данных, и выборка их из шейдера по индексу в вершине.

Чтобы не рисовать все, как сказали, можно сделать quadtree с регулярной сеткой, для карты как раз удобно.

Если совсем много биллбордов и они закрывают почти весь экран, то все эти оптимизации потеряют силу, на первое место вылезет fillrate.

#17
13:51, 20 янв. 2016

Turbochist
Первый вопрос, который нужно задавать в такой ситуации - а в чем, собственно, состоит задача? Я не про билборды - это то, как видит автор ее решение - а про то, зачем это все надо

#18
15:14, 20 янв. 2016

VoidSpirit
> Первый вопрос, который нужно задавать в такой ситуации - а в чем, собственно,
> состоит задача? Я не про билборды - это то, как видит автор ее решение - а про
> то, зачем это все надо

+1
Я так понял автор хочет рисовать надписи на карте, но там нет никаких миллиардов билбордов.
То что где-то там в базе хранится миллиард надписей различных объектов это другой разговор, не имеющий ничего общего с билбордами.

#19
15:25, 20 янв. 2016

VoidSpirit
Задача состоит в том, что есть много билбордов(очень много), они распределены беспорядочно в трехмерном пространстве, и надо придумать такую структуру данных, или предложить подход(например инстансинг) которы так или иначе позволит рендерить объекты в данном случае билборды, грубо говоря без тормозов или с минимальными тормозами.
Я как автор вижу это как много много много билбордов в пространстве, сквозь которые я летаю, и куда не гляну складывается впечатление что все видимые и различимые  в перспективе билборды или объекты, но в данном случае всетаки билборды, присутствуют на сцене в полном объеме.
Вот люди предлагают три варианта, инстансинг, квадродерево(мне больше нравится октодерево, но это не принципиально), и еще побить постановщика задачи, но это не конструктивно, и вообще не интеллигентно.
Инстансинг очень четко подходит к таким задачам как рендеринг растительности, деревьев в далеке, и прочей травы. Поэтому я привел в пример билборды в гугл земле, которые выглядят как фотока карточки. Собственно моя задача почти такая-же. Не стоит беспокоиться о памяти, память может быть внешняя, и проблемы с подгрузкой данных не должно существовать. Возможно лучшим вариантом будет иерархическая структура типа дерево, с боундинг боксом для каждых наборов билбордов. Но что если билборды двигаются? Стороить дерево с нуля? Нет, наверное надо просто перекидывать билборды из одного узла в другой, тогда можно перебирать только те билборды которые в видимом узле, соостветсвенно кидать билборд в коллекцию соседнего узла. Наверное так.

#20
15:27, 20 янв. 2016

Executor
Есть миллиард билбордов. Или два. Не все из них видимые в кадре. Это верно.

#21
15:33, 20 янв. 2016

Turbochist
> побить постановщика задачи, но это не конструктивно, и вообще не интеллигентно.

Ну почему же, хороший вариант. :) Поставь задачу более конкретно, может с примерами.
"Миллиапд билбордов" звучит как бред, либо используются некорректные термины. Билборд одно, хранение и кулинг данных другое.
Что такое билборды в твоём случае? Это именно надписи (как они делаются?), это текстурки или ещё что-то? Они прозрачные? Они разного размера? Да стопицот условий, задача у тебя слишком абстрактна и неточна.

#22
15:36, 20 янв. 2016

Turbochist
> Сто миллиардов билбордов и текстовых меток

если всё это на большом расстоянии друг от друга и на экран влазит только какая то очень малая часть точек, то

Turbochist
> квадродереве или октодерево
очевидно что октодерево увеличивает накладные расходы на каждый лист грубо говоря в 2 раза по сравнению с квадро
это имеет смысл только если пространство реально трёхмерно и его нельзя развернуть в плоскость (т.е. не на поверхности сферы например обьекты)


Turbochist
> Но что делать если точки движутся?
если точки движутся конечно их нужно переиндексировать
но не обязательно переиндексировать сразу все точки, даже невидимые
имеет смысл разбить пространство на одно неглубокое дерево, конечным содержимым листа которого будет уже другое октодерево с более мелким масштабом
и при показе небольшой области на экране переиндексировать движущиеся точки только для тех листьев глобального дерева , которые видны
также имеет смысл сделать несколько параллельных деревьев разного уровня детализации, например при максимальном масштабе это будет дерево, содержащее все миллиарды точек, а низкодетальное дерево только точки, видимые на большом расстоянии (крупные города, как подсказывали выше). и при крупном масштабе также переиндексировать точки реалтайм только для глобального дерева
в видеопамяти можно хранить запас из 10 000 квадов например, их за глаза хватит
и после выборки по деревьям загружать в видеопамять массив координат связанный с индексами вершин. при этом неиспользуемые вершины должны будут быть с координатами, уходящими за пределы экрана. для лучшего кулинга можно сделать несколько групп таких наборов квадов, например 10 штук по 1000 квадов, т.е. десять проходов для отрисовки 10 000 точек
т.е.:
1. несколько деревьев разного уровня детализации
2. двухуровневая иерархия деревьев. одно дерево с крупными сегментами пространства и много мелких под-деревьев , являющихся его листами
3. заранее заготовленная геометрия в видеопамяти в виде кучи квадов, не связанных друг с другом

#23
15:41, 20 янв. 2016

Executor
Да что-же такого не понятного-то...Есть МИЛЛИАРД БИЛБОРДОВ(текстовые метки - это тоже билборды в каком то смыле, глифы рендерятся в билборды), они все эти миллиард билбордов, хорошо пускай миллион, ну ладно сто тысяч билбордов, они хотят пявиться на экране, и они рады бы быть какими ибудь партиклями, или травой, но так распорядилась судьба, что им не суждено быть партиклями или травой, потому что они сложнее по своей структуре, у каждого билборда есть цвет, прозрачность, угол поворота,размеры, направляющая ось, картинка, положение в пространстве, у них есть ИМЕНА КАРЛ! Которое они с радостью всем показывают и даже функция масштабирования! И они сейчас неплохо рендерятся 100000 могут за раз, и это круто, но они хотят большего они хотят на порядок больше  своих братьев, чтобы их увидели, понимаешь меня?

#24
15:43, 20 янв. 2016

Chupakaber
А это мысль! Спасибо!

#25
15:49, 20 янв. 2016

Turbochist
> И они сейчас неплохо рендерятся 100000 могут за раз, и это круто, но они хотят
> большего они хотят на порядок больше  своих братьев, чтобы их увидели,
> понимаешь меня?
Бред. Слишком толсто

#26
15:52, 20 янв. 2016
Бить или не бить? Вот в чем вопрос. Однозначно бить. В контексте данного разговора это даже будет интеллегентнее, чем реализовывать таску.
#27
16:20, 20 янв. 2016

Turbochist

Тут всем станет легче, если ты скажешь, что в итоге нужно нарисовать.
С точки зрения обывателя, без употребления слова "биллборд".

#28
16:27, 20 янв. 2016

http://www.perlmonks.org/?node=XY+Problem

#29
16:35, 20 янв. 2016

-Eugene-
Или так
http://www.gunsmoker.ru/2008/10/x-y-z.html

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.

Тема закрыта.