Ссылаясь на то, что question:Дегенерация треугольника треугольника OpenGL после вершинного шейдера?
Существует несколько способов улучшить скорость рендеринга для огромных сеток. Я пробовал следующие реализации:
- Просто визуализируйте сетку без какой-либо оптимизации или квантования.
- Я решил квантовать свою сетку как шаг предварительной обработки на CPU и переключить уровень LOD (= уровень квантования) во время выполнения. Я отправляю все данные вершин и обрабатываю Drawcall (numberOfNotDegeneratedIndices). -> быстрее, чем (0)
- Моя идея: все квантование в Vertex-Shader (все вершинные данные присутствуют для вычислений и динамического переключения LOD). Треугольная дегенерация должна произойти автоматически после этапа обработки вершины. Drawcall (numberOfAllIndices) -> не очень быстрее, чем (0)
Методы по сравнению: количество переданных данных вершин всегда одинаково. VS звонки: (0) == (2)> (1)
Так что мне было интересно, почему метод (2) не получает быстрее, чем (0), несмотря на квантование и возникающее треугольное вырождение?
Я хотел бы получить дополнительную информацию, почему это так нравится, и где могут быть узкие места на графическом процессоре.
Если ваши треугольники не касаются пиксельных центров, вы уже не оплачиваете стоимость затенения пикселя или что-то еще ниже этого. Независимо от вашего узкого места, это не затенение пикселей; это может быть вершинное затенение, это может быть стоимость получения вершинных шейдерных входов, это может быть что-то вверх по течению; в любом случае, сделать вашу вершинную затенение * более дорогой * не поможет. Уменьшая количество вершин, которые видит GPU вообще, как в вашем (1), будет. – moonshadow
Когда вы говорите «квантовать», что именно вы делаете? –
квантование: положение карты до [-1; 1], mutiply с уровнем 2 ^, round(), деление на 2 уровня –