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

Граф сцены (3 стр)

Страницы: 1 2 3 4 58 Следующая »
#30
16:00, 24 ноя 2022

THE_MASTER
> что за ецс?
Entity Component System

#31
20:09, 24 ноя 2022

MrShoor
> Смысл в том, что у тебя не будет GPU-GPU синхронизаций между дравколлами

glUniform(...);
glDrawElements(...);
glUniform(...);
glDrawElements(...);
...

Где тут синхронизация, когда меняешь uniform?
> Сначала максимально обновляешь данные, потом из этих данных рисуешь. А не обновил-сделал_дроуколл-обновил-сделал_дроуколл.
А как одним дроуколом вывести множество мешей, пусть с одним шейдером?

#32
21:08, 24 ноя 2022

Aslan
> Где тут синхронизация, когда меняешь uniform?
В драйвере же. Твой юниформ драйвер кладет в буфер. Пока GPU рисует из этого буфера треугольники - его нельзя менять, следовательно драйвер скопирует себе твой юниформ, дождется окончания отрисовки видеокартой, обновит его, и только тогда начнется новая отрисовка. Это и есть GPU-GPU синхронизация.

Aslan
> А как одним дроуколом вывести множество мешей, пусть с одним шейдером?
glDrawElementsInstancedBaseVertexBaseInstance или как-то так функция называется.

#33
21:30, 24 ноя 2022

Aslan

glDrawArrays // enum, first vertex, vertex count
glDrawElements // enum, vertex count, indices type, indices data
glDrawElementsInstanced // enum, vertex count, indices type, indices data, prim count
glMultiDrawElements // enum, vertices data [], indices type, indices data [], vertices and indices [] length
glMultiDrawElementsIndirect // enum, indices buffer type, indirect data [], indirect data [] length

glMultiDrawElements: many different Objects, 1 Textures, 1 Shaders
glMultiDrawElementsIndirect: many different Objects, many different Textures, 1 Shaders
#34
9:33, 25 ноя 2022

MrShoor
> В драйвере же. Твой юниформ драйвер кладет в буфер. Пока GPU рисует из этого
> буфера треугольники - его нельзя менять, следовательно драйвер скопирует себе
> твой юниформ, дождется окончания отрисовки видеокартой, обновит его, и только
> тогда начнется новая отрисовка. Это и есть GPU-GPU синхронизация

Интересно. Хорошо, что юниформ весит считанные байты, максимум матрица 4х4 или ссылка на вершинный буффер, значит драйвер может их копить, ставить в очередь, не теряя скорости.
С другой стороны, разве отрисовка не всегда последовательна? Например результат Z-теста или альфа-блендинга зависит от порядка подачи фрагментов

> glDrawElementsInstancedBaseVertexBaseInstance
Крутое название :)

lookid
> glMultiDraw
Точно! Значит все меши вваливаешь в один в VBO, все индексы в один EBO и рисуешь одним ударом

Чисто ради любопытства - нельзя ли тогда и абсолютные матрицы расчитать на шейдере?
Можно обойтись без рекурсии, если обьекты разложенны в линейном массиве, родители раньше детей, в дите индекс родителя, тогда в цикле берем родительскую матрицу и домножаем

#35
(Правка: 17:03) 17:00, 25 ноя 2022

Aslan
> А как одним дроуколом вывести множество мешей, пусть с одним шейдером?
Ослан, добавь Multi.

Aslan
> Можно обойтись без рекурсии, если обьекты разложенны в линейном массиве
Ослан, нельзя, ибо видюха считает только паралельно. А трансформы чилдов можно рассчитать только тогда когда рассчитан трансформ парента.

#36
17:55, 25 ноя 2022

samrrr
Гондон, че ты прилип к моему ботинку?

#37
19:29, 25 ноя 2022

Aslan
> С другой стороны, разве отрисовка не всегда последовательна? Например результат
> Z-теста или альфа-блендинга зависит от порядка подачи фрагментов
Само собой фрагменты подаются в том же порядке что и треугольники, но треугольники при этом рисуются параллельно. Иначе GPU мог бы рисовать только один треугольник в один момент времени.

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

#38
(Правка: 10:22) 10:20, 26 ноя 2022

THE_MASTER
> ну как же, если у старшипа граф выглядит так и сам корабль является корневой
> нодой (ноль на рисунке из интернета), то при изменение позиции корабля
> (изменение его model matrix) придётся обновлять всех потомков без исключений.
вопрос: зачем? Где ты будешь использовать эти обновленные позиции, если кроме самого корабля ты всё равно больше на экране ничего не увидишь и обновленные его внутренности останутся без дела.

+ Показать
#39
11:03, 26 ноя 2022

Aroch
> Где ты будешь использовать эти обновленные позиции
Если, к примеру, выглядываешь в иллюминатор старшипа и видишь звезды, планеты и другой старшип
Придется высчитывать относительные позиции одного от другого

#40
11:38, 26 ноя 2022

Aslan
> Если, к примеру, выглядываешь в иллюминатор старшипа и видишь звезды, планеты и
> другой старшип
> Придется высчитывать относительные позиции одного от другого
другой старшип из окна всего лишь 1 объект (который можно заменить на импостер если он достаточно далеко), нам не нужно просчитывать его внутренности. Внутренности того в котором сейчас камера, ограничены лишь пространством вокруг камеры, там будет пускай несколько комнат, но это снова не весь корабль и все его объекты. То есть задача сводится к тому чтобы отбросить всё лишнее и обновить только необходимую часть графа.

#41
(Правка: 11:47) 11:44, 26 ноя 2022

Aroch
На самом деле современное железо без проблем потянет и миллион позиций просчитать за кадр, в сравнении с тем что происходит в рендере это детский сад.
Но учитывая что более сложные объекты, например с ИИ все равно надо оптимизировать по потенциальной видимости/палевности, то и околостатику лишнюю можно отбросить.

#42
(Правка: 11:46) 11:45, 26 ноя 2022

Aroch
Получается, надо совместить расчет матриц с occlusion test, чтобы не считать каждую заклепку

#43
11:49, 26 ноя 2022

Aslan
> Получается, надо совместить расчет матриц с occlusion test, чтобы не считать
> каждую заклепку
Если у тебя aabb родительской ноды после расчёта не попал в экран детей можешь не считать и не рисовать.
(На самом деле не всегда)

#44
15:06, 26 ноя 2022

Aslan
> Получается, надо совместить расчет матриц с occlusion test, чтобы не считать
> каждую заклепку
тени от объектов не попавшие в экран ты так выкинуть можешь. На самом деле пример с кораблем не нужно рассматривать как глобальное что-то, нужно разделять внутренности корабля которые в целом статичны и сам корабль и тогда не будет проблемы как таковой.
Super_inoy
> На самом деле современное железо без проблем потянет и миллион позиций
> просчитать за кадр
да посчитает то без проблем, только всё равно это будет не бесплатно и там где миллион может быть их и два и десять и сотня, пока всё колом не встанет, ограничения есть всегда.

Страницы: 1 2 3 4 58 Следующая »
ПрограммированиеФорумГрафика