Я ищу способ рендеринга множества мешей одновременно, чтобы мне не нужно было вызывать отрисовку для каждого меша. Я имею дело с 2D-рендерингом, и типичный объект, такой как квадрат, может иметь только два треугольника. Однако объект также может быть довольно сложным и иметь тысячи треугольников.
Теперь каждый объект может перемещаться самостоятельно. Концептуально вполне разумно иметь VBO (или пару VBO / IBO) для каждого «объекта»: пока объект не изменяется, все, что мне нужно, чтобы загрузить в GPU каждый кадр, это информация преобразования: вектор положения и значение ориентации. Или, что эквивалентно, матрица преобразования.
Но проблема с этим подходом заключается в сцене из 1000 квадратных объектов, для инициализации у которых было бы 1000 VBO и 1000 IBO, и 1000 вызовов отрисовки, устанавливающих 1000 наборов униформ в каждом кадре для рендеринга 2000 треугольников.
Хорошо. Если все эти объекты идентичны, я могу иметь один VBO / IBO, чтобы описать их, настроить унифицированный буферный объект (или, возможно, более уместен унифицированный массив - мне все еще нужно научиться использовать их) с данными преобразования для каждый из них, и выполните один вызов отрисовки экземпляра, чтобы вершинный шейдер извлек из UBO данные преобразования, используя номер экземпляра, который он получает. Отлично.
Я просто хочу пойти еще дальше. Я хочу сделать то, что равносильно созданию экземпляров в неидентичных сетках: у меня есть 1000 различных объектов, которые я с удовольствием опишу либо в 1000 отдельных парах буферов вершин / индексов, либо в одной гигантской паре буферов вершин / индексов. Я хочу отправить свои данные преобразования в GPU в один вызов. Это просто вопрос привязки драйвера или графического процессора или выбора вершин.
Можно ли это сделать? Можно ли это сделать без использования геометрических шейдеров SM4?
Обновление: я только что подумал о потенциальном методе для достижения этой цели. Я использую атрибут вершины в качестве значения для "экземпляра", с помощью которого можно проиндексировать UBO, содержащее преобразования. Это способ сделать это?