Пересекают ли вершина и фрагмент все точки или только те, которые остались после отсечения? - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь обернуть голову вокруг конвейера графического процессора и влияния на производительность ...

Я создаю систему координат и помещаю в нее миллион вершин, все они теперь находятся в памяти, используемой графическим процессором,Я предполагаю, что это удар по производительности на этом шаге: перемещение всех плавающих значений в память графического процессора с указанием точек, где они уже созданы.

Затем я преобразую координаты моих миллионов точек в координаты отсечения.Здесь я применяю преобразование к каждой точке.

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

Я предполагаю, что вершина работает на всех, кроме фрагмента, только на интерполяции видимых вершин.

Возможна ли единственная оптимизациятогда просто включить как можно меньше вершин в первую очередь?Если я смотрю на полный трехмерный мир со зданиями, деревьями, дорогами ... и затем увеличиваю масштаб только на один камень, я в любом случае запускаю все шейдеры на всех объектах ... так что единственным решением было бы не помещатьэти деревья и здания в первую очередь?Или я могу иметь этот мир в памяти GPU, но просто вычислить рок?Могу ли я применить преобразование координат только к скале?Где в конвейере происходит такая техника, как отбор графического процессора, уровень детализации или динамическая тесселяция?

1 Ответ

1 голос
/ 13 марта 2019

Вершинные шейдеры выполняются для каждой вершины, представленной с семействами функций glDrawArrays и glDrawElements, возможно, даже несколько раз на вершину. Преобразованные вершины затем собираются в примитивы и обрезаются - если они находятся вне области просмотра, то их обработка завершается. Чтобы уменьшить накладные расходы на обработку вершин объектов за пределами области просмотра, используются несколько методов. Самым простым из них является «отбраковка усеченного конуса» - отправка объекта на рендеринг только в том случае, если его ограничивающая рамка пересекает усеченную камеру.

Фрагментные шейдеры выполняются для каждого фрагмента («пикселя») в кадровом буфере, который проходит тест глубины. Один из способов уменьшить их количество - это рендериться спереди назад, чтобы вычислялись только фрагменты, видимые спереди.

...