Когда отключить перспективную правильную интерполяцию (ноперспективная)

13

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

gemse
источник

Ответы:

15

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

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

Это влияет на производительность? Возможно, но вы, вероятно, не заметите (за исключением, возможно, менее мощного графического оборудования). Большинство графических процессоров состоят из последовательности этапов конвейера, которые выполняются параллельно, и в некотором смысле вы платите только за самый дорогой этап. Если растеризация является наиболее ограничивающей частью для вас, то вы можете увидеть отличие от делений, которые вы пропускаете на пиксель. Я думаю, что это наиболее вероятно при рендеринге карты теней или глубины, но они также имеют наименьшее количество атрибутов для интерполяции.

Джон Калсбек
источник