2016-05-06 3 views
0

Ссылаясь на то, что question:Дегенерация треугольника треугольника OpenGL после вершинного шейдера?

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

  1. Просто визуализируйте сетку без какой-либо оптимизации или квантования.
  2. Я решил квантовать свою сетку как шаг предварительной обработки на CPU и переключить уровень LOD (= уровень квантования) во время выполнения. Я отправляю все данные вершин и обрабатываю Drawcall (numberOfNotDegeneratedIndices). -> быстрее, чем (0)
  3. Моя идея: все квантование в Vertex-Shader (все вершинные данные присутствуют для вычислений и динамического переключения LOD). Треугольная дегенерация должна произойти автоматически после этапа обработки вершины. Drawcall (numberOfAllIndices) -> не очень быстрее, чем (0)

Методы по сравнению: количество переданных данных вершин всегда одинаково. VS звонки: (0) == (2)> (1)

Так что мне было интересно, почему метод (2) не получает быстрее, чем (0), несмотря на квантование и возникающее треугольное вырождение?

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

+0

Если ваши треугольники не касаются пиксельных центров, вы уже не оплачиваете стоимость затенения пикселя или что-то еще ниже этого. Независимо от вашего узкого места, это не затенение пикселей; это может быть вершинное затенение, это может быть стоимость получения вершинных шейдерных входов, это может быть что-то вверх по течению; в любом случае, сделать вашу вершинную затенение * более дорогой * не поможет. Уменьшая количество вершин, которые видит GPU вообще, как в вашем (1), будет. – moonshadow

+0

Когда вы говорите «квантовать», что именно вы делаете? –

+0

квантование: положение карты до [-1; 1], mutiply с уровнем 2 ^, round(), деление на 2 уровня –

ответ

1

Ненавижу вызывать очевидное, но попробовали ли вы изменить размер своего фреймбуфера на что-то абсурдное, как 1x1, и подтвердив, что узкое место является фактической обработкой вершин?

Отсутствие скриншота или что-то еще, я должен угадать, что выглядит «огромная» сетка, которую вы пытаетесь сделать; Я могу думать о многих сценариях, где огромная сетка приводит к массивному перерасходу, и в этот момент вы можете фактически заполнить границу и использовать разные LOD, это будет очень мало.

Как ни странно, вы также можете столкнуться с узкими местами производительности растеризации, если вы нарисуете много (потенциально невидимых) треугольников подпикселей. Многие из них никогда не выживут при затенении, потому что они не удовлетворяют правилам покрытия, но если вы получите достаточно крошечных примитивов до стадии растеризации, вы платите штраф, не связанный с обработкой вершин. LODs отлично подходят для решения этой проблемы, так что это вряд ли будет вашей проблемой здесь.

Смежные вопросы