Równanie kamery z otworem
Każde przedstawienie perspektywiczne, takie jak szkic, fotografia lub scena 3D, redukuje się do jednego działania arytmetycznego: modelu kamery z otworem, w którym światło z punktu 3D (x, y, z) przechodzi przez pojedynczy punkt ogniskowy i pada na płaszczyznę obrazu, oddaloną o f (odległość ogniskową). Podobne trójkąty dają współczynnik perspektywiczny:
x_screen = f * x / z y_screen = f * y / z -- Obiekty o większym z (dalej) dzielą się przez większą liczbę, co powoduje ich zmniejszenie; to pojedyncze podzielenie stanowi całą zawartość matematyczną stwierdzenia "rzeczy wydają się mniejsze w oddali", a każdy renderer, kamera i oko realizuje je. Zauważ, że z pojawia się tylko w liczniku, nigdy nie jest odejmowany ani dodawany, co również sprawia, że projekcja perspektywiczna nie może być odwrócona z pojedynczego obrazu 2D; potrzebne są dwa widoki (stereo), znana wielkość obiektu lub założenie.
To równanie opisuje podstawę działania perspektywy, niezależnie od tego, czy jest to ręczna szkicownica, cyfrowa kamera, czy ludzkie oko. Zrozumienie tej relacji między współrzędnymi 3D i 2D jest kluczowe dla tworzenia realistycznych obrazów.
x_screen = f * x / z y_screen = f * y / z -- objects at larger z (farther away) get divided by a bigger number, so they shrink; this single division is the entire mathematical content of "things look smaller far away," and every renderer, real camera and eye implements it
Wyłaniające się punkty to po prostu kierunki, projekcje
Wyłaniający się punkt to miejsce, w którym zbiór równoległych linii w przestrzeni 3D wydaje się zbiegać na płaszczyźnie obrazu. Obliczany jest bezpośrednio z wzoru perspektywnego-dzielącego: linie równoległe dzielą wspólnym wektorem kierunku 3D, a gdy punkt wyścigowy przesuwa się w nieskończoność wzdłuż tego kierunku, jego projekcja (x_screen, y_screen) zbiega do jednego stałego ograniczenia – wyłaniającego się punktu – który zależy tylko od kierunku, a nie od tego konkretnej linii równoległej, którą zaczęto lub od tego, jak daleko w niej punkt znajduje się.
Jednopunktowy, dwupunktowy, trójpunktowy: ile osi jest przechylonych
Klasyczna terminologia 'N-punktowej perspektywy' liczy, ile z trzech głównych osi (zazwyczaj krawędzie pudełka: szerokość, wysokość, głębokość) nie są równoległe do płaszczyzny obrazu i wymagają własnego punktu zaniku. Perspektywa jednopunktowa występuje, gdy kamera patrzy prosto w jedną oś (zdjęcie korytarza zrobione od dołu jej długości) — tylko oś głębokości wypieraja się do jednego punktu na horyzoncie, a szerokość i wysokość pozostają równoległe do krawędzi obrazu. Perspektywa dwupunktowa pochyla kamerę, aby spojrzeć na narożnik pudełka zamiast na jego twarz — każda z dwóch poziomych osi ma własny punkt zaniku na linii horyzontu, a pionowe krawędzie pozostają równoległe do pionowej osi obrazu. Perspektywa trójpunktowa dodaje pochylenie kamery w górę lub w dół (patrząc na wieżowiec z góry lub z drona), które również łamią równoległość osi pionowej i nadają jej trzeci punkt zaniku, zwykle prosto w górę lub w dół poza klatką.
Horyzont to linia zbiegająca się, a nie stała wysokość
Wszystkie linie zbiegu dla kierunków poziomych leżą na jednej linii – horyzoncie – która jest dokładnym projektem nieskończenie oddalonej płaszczyzny poziomej w wysokości oka kamery. Dlatego też horyzont w szkicu perspektywiczny podnosi się i opada wraz z wysokością kamery, a nie z fizycznego horyzontu: sfotografuj pokój z krzesła, a linia horyzonu będzie znajdować się nisko, blisko wysokości oka siedzącego, przecinając dolną trzecią mebli stojących; sfotografuj ten sam pokój ze schodów i ona wzniecie się odpowiednio. Malarze wykorzystują ten jeden fakt, bardziej niż którykolwiek inny, aby utrzymać wewnętrzną spójność geometrii sceny – każdy zestaw równoległych linii poziomych musi wysłać swój punkt zbiegu do tej samej linii horyzontu, bez wyjątków.
Dlaczego renderery używają macierzy 4x4 zamiast dzielenia wprost
Silniki grafiki czasu rzeczywistego otaczają operację perspektywicznego podziału macierzą 4x4 działającą na współrzędnych jednorodnych (x, y, z, w). Sama mnożenie macierzy jest całkowicie liniowe – kopiuje wartość z do slotu w, a faktyczny dzielenie x/w, y/w, z/w odbywa się jako osobny krok sprzętowy później. Wpakuwanie tego mechanizmu w macierz 4x4 pozwala używać tej samej uniwersalnej macierzy do tłumaczenia, obracania i skalowania, a także do obsługi projekcji. Dzięki temu rurka renderowania GPU może łączyć pozycję kamery, orientację kamery i pole widzenia soczewki w jednym mnożeniu macierzy na wierzchołek, a nieliniowe dzielenie odroczone do jednego stałego, sprzętowo przyspieszonego kroku końcowego.
Frequently asked questions
Dlaczego linie równoległe wydają się przecinać w fotografii?
Wynika to z podziału perspektywicznego x_screen = f·x/z: punkty na tym samym odcinku 3D mają ten sam kierunek, a gdy te punkty oddalają się ku nieskończoności, ich projekcja na ekran zbiega się do jednego ustalonego punktu – punktu zanikającego. Linie nigdy nie przecinają się w rzeczywistości w 3D – tylko ich projekcje.
Co decyduje o tym, czy rysunek jest jednopunktowy, dwupunktowy czy trójpunktowy perspektywy?
Ilość osi głównych sceny, które są nachylone względem płaszczyzny obrazu. Patrzenie prosto w korytarz daje jeden punkt zanikający; patrzenie na narożnik skrzyni daje dwa; pochylenie kamery do góry lub w dół (np. patrzenie na wysokie budynki) dodaje trzeci, zwykle pionowy, punkt zanikający.
Dlaczego linia horyzontalna przesuwa się między zdjęciami tego samego pokoju?
Wynika to z faktu, że linia horyzontalna w rysunku perspektywicznym jest linią zanikającą dla wszystkich kierunków poziomych, która znajduje się na wysokości oczu kamery, a nie w stałym punkcie fizycznym. Kamera ustawiona na wysokości siedzącej powoduje, że linia horyzontalna jest niska w kadrze; to samo zdjęcie pokoju zjeżdżone po schodach podnosi ją.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Perspective Projection & Vanishing Points i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Perspective Projection & Vanishing Points