Czy są projekcje 3D inne niż ortograficzne i perspektywiczne? [Zamknięte]

22

Pytanie jest prawie w tytule. Czy istnieją znaczące projekcje 3D inne niż ortograficzne i perspektywiczne, które można by zastosować w systemie 3D, takim jak OpenGL?

W szczególności, czy są jakieś, które mają szczególne zastosowanie w projektowaniu gier?

jmite
źródło

Odpowiedzi:

23

Tak, aby wymienić tylko kilka:

Projekcja Pannini, na przykład, można uchwycić szerokie pole widzenia w przyjemnych sposobów . (całkowicie tylko moja opinia)

Myślę, że szczegóły wdrożenia wykraczałyby poza zakres tego konkretnego pytania.


EDYCJA: Dzięki za komentarz, pomyliłem się Pannini. Aby ta edycja była opłacalna, oto kilka innych:

  • Paraboloid / Dual-Paraboloid (Przydatny do odbić, cieni, witraży)
  • Równokątny (może wytworzyć widok kuli na mapie świata)
  • Kulisty
  • Sinusoidalny
MickLH
źródło
4
+1 za projekcję Panini; Nigdy wcześniej o tym nie słyszałem. BTW, o ile mówimy o projekcjach nieliniowych, dual-paraboloid jest czasem używany do map środowiska i map cienia.
Nathan Reed,
Jest bardzo wybredna, ale wydaje się, że jest to projekcja „Pannini”, a nie „Panini”.
aardvarkk
Bardzo fajny! Zgaduję, że wszystkie są nieliniowe, jak mówi Nathan Reed?
jmite
Myślę, że tak, najprawdopodobniej będziesz musiał użyć teselacji sprzętowej lub przetwarzania obrazu, aby je osiągnąć w praktyce. Mam problem z myśleniem o innej projekcji, która odwzorowuje linie proste w linie proste, ale dodam ją do tej odpowiedzi, jeśli coś wymyślę.
MickLH,
Prawdopodobnie nie istnieje, właśnie o tym myślałem!
jmite
15

Zależy to od tego, co rozumiesz przez „który może być użyty w systemie 3D takim jak OpenGL”. :)

Wąsko mówiąc, sprzęt graficzny 3D i interfejsy API, takie jak OpenGL, działają poprawnie tylko z rzutami liniowymi - rzutowaniami, które odwzorowują linie proste w przestrzeni świata na linie proste na obrazie. Nigdy nie zniekształcają czegoś w zakrzywiony kształt (chyba że na początku było zakrzywione). Dzieje się tak, ponieważ procesory graficzne zależą od trójkątów o prostych krawędziach, aby poprawnie zrasteryzować je na ekranie.

Jeśli ograniczymy się do projekcji liniowych, nie ma zbyt wielu możliwości wyboru. Oprócz standardowej orto i perspektywy istnieją również odmiany „poza środkiem”, które są uzyskiwane przez ścinanie widoku ściętego.

  • Rzut ortocentryczny jest nazywany rzutem ukośnym i jest często używany do tworzenia schematów technicznych, ale nie pokazuje się zbyt wiele w grach.
  • Rzuty perspektywiczne poza środkiem są stosowane w renderowaniu stereo 3D , ponieważ okazuje się, że widoki lewego i prawego oka lepiej łączą się w mózgu, jeśli ścinasz frustum zamiast obracać je, aby skupić się na obiekcie.

Projekcje te można przedstawić za pomocą zwykłej matrycy projekcyjnej 4 × 4 i bez problemu zastosować w interfejsie API 3D.

Następnie są rzuty nieliniowe, które nie mają ograniczenia mapowania linii prostych na linie proste; wolno im zniekształcać rzeczy w krzywe. Jest ich wiele, w tym cylindryczne, kuliste, różne rodzaje rybiego oka i inne.

W przypadku rzutów nieliniowych nie można po prostu użyć macierzy projekcji; musisz jakoś zrealizować projekcję samodzielnie za pomocą shaderów. Jednym ze sposobów jest napisanie niestandardowego modułu cieniującego wierzchołek, aby wykonać rzut na wierzchołek. GPU nadal będzie rysować trójkąt prostymi liniami między wierzchołkami, więc podczas gdy małe trójkąty będą dość blisko do poprawienia, większe trójkąty będą wyraźnie błędne. Może to powodować problemy , a geometria może wymagać bardzo drobnego podziału w celu poprawnego renderowania.

Drugim podejściem do uzyskania projekcji nieliniowej jest najpierw renderowanie sceny przy użyciu zwykłej projekcji perspektywicznej (być może do mapy sześcianu, która ma rzut perspektywiczny dla każdej powierzchni sześcianu), a następnie zastosowanie postprocesowego modułu cieniującego piksele w celu ponownego próbkowania go do pożądanego projekcja nieliniowa. Ma to tę zaletę, że nie wymaga modyfikacji geometrii, ale może być droższe z powodu dodatkowej wymaganej pracy renderowania, a wynik może być rozmazany w niektórych obszarach, jeśli renderowanie pierwszego przejścia nie ma wystarczającej rozdzielczości. Podejście postprocesowe jest stosowane w grach Oculus Rift, na przykład w celu realizacji projekcji nieliniowej, której Rift wymaga do pracy z soczewkami.

Nathan Reed
źródło
1

Nie mogę w to uwierzyć, ale nikt nie wspomniał o rzucie izometrycznym, które kiedyś było dość powszechne.

Roy T.
źródło
11
O ile mi wiadomo, rzuty izometryczne są szczególnymi przypadkami użycia pozostałych dwóch typów rzutów, ortograficznej i perspektywicznej. Na przykład rzut orto z widokiem pod pewnym kątem daje kamerę izometryczną.
Grimshaw,