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

Батчинг геометрии, вопрос о подходе (2 стр)

Страницы: 1 2
#15
15:05, 14 фев 2014

I
> как отдельный атрибут, не ? при слиянии двух VBO он будет такой же как к примеру нормали
А-а. Не путай то, что ты передаешь на визуализацию и то, что ты имеешь внутри шейдера.

> Пока вижу решение такое в каждой вершине указывать индекс матрицы.
> А массив матрицы передавать через константные буферы.
Вот об этом я и говорил.

#16
17:10, 14 фев 2014

I
> Инстансинг будет 100%, так что конечно там где он будет батчинг будет сделан
> через него, кстати какой хак ? где почитать ? )

К сожалению, я не помню где об этом читал. Там какие-то есть ограничения, по моему нужно чтобы количество вершин каждого меша совпадало, но я точно не помню, так что придумывать не буду. :)
Попробуй погуглить, может что найдётся.

На вскидку, пришло в голову делать TexelFetch(tbo, gl_VertexID * gl_InstanceID).

asvp
> Не разную, а одну и туже, но с разными, н-р, матрицами.

С разными матрицами это обычный инстансинг.
А я говорю именно о том, чтобы геометрия при инстансинге была разная.

> Да но как передать массив матриц?

Массив матриц как угодно, что больше подходит для задачи.
Аналогично и для массива индексов на матрицы.
Для GL к примеру можно TBO заюзать, но это уже от конкретики зависеть будет.
Индексы можно передать отдельным вершинным буфером.

> И размер массива матриц тогда тоже должен соответствовать количеству вершин.
> И смысл тогда в массиве индексов на матрицы.

Не должен. Размер массива матриц равен количеству матриц, а не количеству вершин.
Количеству вершин равен массив индексов на матрицы.

> Пока вижу решение такое в каждой вершине указывать индекс матрицы.
> А массив матрицы передавать через константные буферы.

А я разве не тоже самое сказал? :)
Только не обязательно в вершине, может быть куча вариантов как передать, тут в конкретной задаче надо смотреть как лучше будет.

#17
18:11, 14 фев 2014

Executor
> А я говорю именно о том, чтобы геометрия при инстансинге была разная.
Это как? Насколько я понимаю инстансинг - это несколько проходов по одним и тем же вершинам, но с другими данными лежащими в другом буфере.
Т.е. за один вызов можно нарисовать несколько одинаковых предметов, но в разных н-р, позициях.

Чего-то я не догоняю в ваших мыслях.

ИМХО Батчинг геометрии ваще узкая вещь. Для него нужно чтобы два или более объекта при визуализации имели:
1. Одинаковые шейдеры
2. Текстуры (ну или атлас текстур)
3. Материалы.
4. Может ещё что-то забыл.

#18
18:35, 14 фев 2014

Executor
> TexelFetch(tbo, gl_VertexID * gl_InstanceID)
Только скорее так: gl_VertexID + VertexCount*gl_InstanceID, где VertexCount - количество вершин в одном меше. Вот только где этот хак с такими ограничениями может понадобиться, это надо ещё придумать.

#19
18:55, 14 фев 2014

asvp
> Это как? Насколько я понимаю инстансинг - это несколько проходов по одним и тем
> же вершинам, но с другими данными лежащими в другом буфере.
> Т.е. за один вызов можно нарисовать несколько одинаковых предметов, но в разных
> н-р, позициях.

Ну как бы да. Одна копия объекта и потом много её инстанций.
Но вот люди извратились и прикрутили инстансинг имея разные объекты.

gammaker
Да, как-то так.
Я помню в какой-то папере читал, кто-то юзал. Возможно какая-то специфика проекта.

#20
19:00, 14 фев 2014

Executor
> Но вот люди извратились и прикрутили инстансинг имея разные объекты.
Хм... Надо будет тоже поизвращаться....

#21
21:57, 14 фев 2014

I
> Я просто тут выпал на энное количество времени и подумал, а вдруг умные дядьки
> придумали )

Умные дядьки много чего придумал - тот же indirect multidraw. Сделай с инстансингом для начала и расскажи о результатах :)

По себе знаю -слов много, толку - ноль ...

#22
22:50, 14 фев 2014

innuendo
> Умные дядьки много чего придумал - тот же indirect multidraw. Сделай с
> инстансингом для начала и расскажи о результатах :)
> По себе знаю -слов много, толку - ноль ...
Executor
> Но вот люди извратились и прикрутили инстансинг имея разные объекты.
Хотелось бы посмотреть банальный код установки и визуализации (можно и псевдо).

#23
16:06, 15 фев 2014

asvp
> Хотелось бы посмотреть банальный код установки и визуализации (можно и псевдо).

Видимо как-то так:
texelFetch(tbo, gl_VertexID + VertexCount * gl_InstanceID);
В tbo засовываешь позиции вершин. К примеру два объекта у которых количество вершин равно VertexCount и рисуешь с инстансингом с двумя инстансами.

#24
16:12, 15 фев 2014

Executor
индексы должны совпадать тогда ещё, не? т.е. по сути мы рисуем одинаковые модели, только по разному деформированные.
для немного отличающихся объектов типа персов/деревьев разве что.

#25
16:30, 15 фев 2014

Mr F
> индексы должны совпадать тогда ещё, не? т.е. по сути мы рисуем одинаковые
> модели, только по разному деформированные.
> для немного отличающихся объектов типа персов/деревьев разве что.

Угу.
Но можно извращаться дальше, завести tbo индексов. :)
texelFetch(tboPos, texelFetch(tboIndex, gl_VertexID + VertexCount * gl_InstanceID));

Мне уже не кажется, что в этом есть что-то, на что стоит потратить время. :)

#26
12:47, 12 мая 2014

Я тут наткнулся на эту статью, про которую тут никак не мог вспомнить, где можно инстансить разные меши.
Эта хрень называется merge-instancing. Можно почитать здесь:
http://www.humus.name/Articles/Persson_GraphicsGemsForGames.pdf

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

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