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?

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.