Kiedy wyłączyć poprawną interpolację perspektywy (noperspective)

13

W GLSL domyślna interpolacja atrybutów wierzchołków jest ustawieniem domyślnym - można ją wyłączyć dla określonych atrybutów wierzchołków za pomocą kwalifikatora noperspective . Oprócz shaderów przetwarzających post nigdy nie widziałem wyłączonej perspektywy poprawnej interpolacji - czy są jakieś inne przypadki użycia? Czy to w ogóle robi różnicę pod względem wydajności?

klejnot
źródło

Odpowiedzi:

15

Przypadki użycia są ograniczone tylko twoją wyobraźnią! noperspectiveoznacza, że ​​atrybut jest interpolowany w poprzek trójkąta, tak jakby trójkąt był całkowicie płaski na powierzchni ekranu. Za pomocą tego można wykonać renderowanie krawędziowe z antyaliasingiem : wypisywanie odległości ekranu do najbliższej krawędzi jako noperspectivezmiennej i używanie jej jako pokrycia w module cieniującym piksele.

Lub jeśli robisz nierealistyczne renderowanie i chcesz uzyskać wzór w przestrzeni ekranu, taki jak półtonowanie , możesz włączyć noperspectivena UVs używane do teksturowania.

Czy to robi różnicę w wydajności? Prawdopodobnie, ale prawdopodobnie tego nie zauważysz (z potencjalnym wyjątkiem słabszego sprzętu graficznego). Większość układów GPU składa się z szeregu etapów potoku, które są wykonywane równolegle iw pewnym sensie płacisz tylko za koszt najdroższego etapu. Jeśli rasteryzacja jest dla Ciebie najbardziej ograniczającą częścią, możesz zauważyć różnicę w podziale na pomijanie na piksel. Sądzę, że jest to najbardziej prawdopodobne przy renderowaniu mapy cienia lub wstępnego głębokości, ale mają one również najmniej atrybutów do interpolacji.

John Calsbeek
źródło