I
> как отдельный атрибут, не ? при слиянии двух VBO он будет такой же как к примеру нормали
А-а. Не путай то, что ты передаешь на визуализацию и то, что ты имеешь внутри шейдера.
> Пока вижу решение такое в каждой вершине указывать индекс матрицы.
> А массив матрицы передавать через константные буферы.
Вот об этом я и говорил.
I
> Инстансинг будет 100%, так что конечно там где он будет батчинг будет сделан
> через него, кстати какой хак ? где почитать ? )
К сожалению, я не помню где об этом читал. Там какие-то есть ограничения, по моему нужно чтобы количество вершин каждого меша совпадало, но я точно не помню, так что придумывать не буду. :)
Попробуй погуглить, может что найдётся.
На вскидку, пришло в голову делать TexelFetch(tbo, gl_VertexID * gl_InstanceID).
asvp
> Не разную, а одну и туже, но с разными, н-р, матрицами.
С разными матрицами это обычный инстансинг.
А я говорю именно о том, чтобы геометрия при инстансинге была разная.
> Да но как передать массив матриц?
Массив матриц как угодно, что больше подходит для задачи.
Аналогично и для массива индексов на матрицы.
Для GL к примеру можно TBO заюзать, но это уже от конкретики зависеть будет.
Индексы можно передать отдельным вершинным буфером.
> И размер массива матриц тогда тоже должен соответствовать количеству вершин.
> И смысл тогда в массиве индексов на матрицы.
Не должен. Размер массива матриц равен количеству матриц, а не количеству вершин.
Количеству вершин равен массив индексов на матрицы.
> Пока вижу решение такое в каждой вершине указывать индекс матрицы.
> А массив матрицы передавать через константные буферы.
А я разве не тоже самое сказал? :)
Только не обязательно в вершине, может быть куча вариантов как передать, тут в конкретной задаче надо смотреть как лучше будет.
Executor
> А я говорю именно о том, чтобы геометрия при инстансинге была разная.
Это как? Насколько я понимаю инстансинг - это несколько проходов по одним и тем же вершинам, но с другими данными лежащими в другом буфере.
Т.е. за один вызов можно нарисовать несколько одинаковых предметов, но в разных н-р, позициях.
Чего-то я не догоняю в ваших мыслях.
ИМХО Батчинг геометрии ваще узкая вещь. Для него нужно чтобы два или более объекта при визуализации имели:
1. Одинаковые шейдеры
2. Текстуры (ну или атлас текстур)
3. Материалы.
4. Может ещё что-то забыл.
Executor
> TexelFetch(tbo, gl_VertexID * gl_InstanceID)
Только скорее так: gl_VertexID + VertexCount*gl_InstanceID, где VertexCount - количество вершин в одном меше. Вот только где этот хак с такими ограничениями может понадобиться, это надо ещё придумать.
asvp
> Это как? Насколько я понимаю инстансинг - это несколько проходов по одним и тем
> же вершинам, но с другими данными лежащими в другом буфере.
> Т.е. за один вызов можно нарисовать несколько одинаковых предметов, но в разных
> н-р, позициях.
Ну как бы да. Одна копия объекта и потом много её инстанций.
Но вот люди извратились и прикрутили инстансинг имея разные объекты.
gammaker
Да, как-то так.
Я помню в какой-то папере читал, кто-то юзал. Возможно какая-то специфика проекта.
Executor
> Но вот люди извратились и прикрутили инстансинг имея разные объекты.
Хм... Надо будет тоже поизвращаться....
I
> Я просто тут выпал на энное количество времени и подумал, а вдруг умные дядьки
> придумали )
Умные дядьки много чего придумал - тот же indirect multidraw. Сделай с инстансингом для начала и расскажи о результатах :)
По себе знаю -слов много, толку - ноль ...
innuendo
> Умные дядьки много чего придумал - тот же indirect multidraw. Сделай с
> инстансингом для начала и расскажи о результатах :)
> По себе знаю -слов много, толку - ноль ...
Executor
> Но вот люди извратились и прикрутили инстансинг имея разные объекты.
Хотелось бы посмотреть банальный код установки и визуализации (можно и псевдо).
asvp
> Хотелось бы посмотреть банальный код установки и визуализации (можно и псевдо).
Видимо как-то так:
texelFetch(tbo, gl_VertexID + VertexCount * gl_InstanceID);
В tbo засовываешь позиции вершин. К примеру два объекта у которых количество вершин равно VertexCount и рисуешь с инстансингом с двумя инстансами.
Executor
индексы должны совпадать тогда ещё, не? т.е. по сути мы рисуем одинаковые модели, только по разному деформированные.
для немного отличающихся объектов типа персов/деревьев разве что.
Mr F
> индексы должны совпадать тогда ещё, не? т.е. по сути мы рисуем одинаковые
> модели, только по разному деформированные.
> для немного отличающихся объектов типа персов/деревьев разве что.
Угу.
Но можно извращаться дальше, завести tbo индексов. :)
texelFetch(tboPos, texelFetch(tboIndex, gl_VertexID + VertexCount * gl_InstanceID));
Мне уже не кажется, что в этом есть что-то, на что стоит потратить время. :)
Я тут наткнулся на эту статью, про которую тут никак не мог вспомнить, где можно инстансить разные меши.
Эта хрень называется merge-instancing. Можно почитать здесь:
http://www.humus.name/Articles/Persson_GraphicsGemsForGames.pdf
Тема в архиве.