1-точкова · 2-точкова · 3-точкова перспектива · Реальна математика проекції камери
Камера чи око проєктує 3D-світ на пласку 2D картинну площину за допомогою перспективної проекції: точка з координатами (x, y, z) у просторі камери відображається на екранні координати xекран = f·x/z, yекран = f·y/z, де f — фокусна відстань (визначається кутом огляду), а z — глибина точки перед камерою. Саме це «перспективне ділення» — ділення на глибину — і є причиною того, що віддалені об'єкти виглядають меншими.
Важливий наслідок: сім'я паралельних ліній у 3D має один спільний напрямний вектор, і коли точки рухаються нескінченно далеко вздовж цього напряму, їхні спроєктовані відношення x/z та y/z збігаються до одного фіксованого значення — точки сходу цієї лінії. Сцена з ребрами, вирівняними вздовж одної, двох або трьох незалежних осей відносно камери, тому дає одну, дві або три точки сходу: одноточкова перспектива — коли камера дивиться прямо на грань коробки, двоточкова — коли камера повернута так, щоб бачити дві бічні грані під кутом, а триточкова — коли камера ще й нахилена вгору або вниз, тож вертикальні ребра також сходяться.
Лінійна перспектива з істинно математичними точками сходу була сформульована на початку 1400-х років флорентійським архітектором Філіппо Брунеллескі та популяризована трактатом Леона Баттіста Альберті 1435 року Della Pittura, що майже миттєво змінило західний живопис. До цього середньовічне мистецтво використовувало вільніші просторові прийоми без єдиної узгодженої точки зору. Та сама математика перспективного ділення — x/z, y/z — реалізована тут, є точнісінько тією операцією, яку кожен сучасний 3D-ігровий рушій та CAD-рендерер виконує мільярди разів на секунду, щоб перетворити 3D-сцени на 2D-зображення на екрані.
Цей симулятор проєктує підлогову сітку та кілька 3D-коробок на канву за допомогою справжньої математики перспективної камери: точки світу переводяться у простір камери й діляться на власну глибину (x/z, y/z), масштабовану фокусною відстанню, отриманою з кута огляду — точнісінько так, як це робить справжня камера чи 3D-рендерер.
Сітка коробок повертається відносно нерухомої камери, щоб перемикатися між одно-, дво- та триточковою перспективою. Точки сходу обчислюються аналітично шляхом проєктування напряму кожної головної осі (а не лише вибіркових точок ребер) через те саме перетворення камери, що використовується для решти сцени.
Оберіть режим перспективи, а потім змініть кут огляду, висоту камери та відстань камери. Увімкніть побудовні лінії точок сходу, щоб побачити, як пунктирні напрямні сходяться, і лінію горизонту, щоб побачити орієнтир рівня очей, на якому лежать усі точки сходу горизонтальних напрямів.
Математично коректна лінійна перспектива була сформульована лише близько 1415 року Філіппо Брунеллескі у Флоренції — упродовж більшої частини історії мистецтва художники не мали систематичного способу зробити паралельні лінії реалістично сходящимися.
Це операція x_screen = f·x/z, y_screen = f·y/z, яка перетворює 3D-точку у просторі камери на 2D-екранні координати. Ділення на глибину z — це те, що робить віддалені об'єкти меншими, і є основною операцією кожного перспективно-коректного 3D-рендерера.
Усі точки на 3D-лінії мають один спільний напрямний вектор. Коли точка рухається далі вздовж цього напряму, її відношення x/z та y/z наближаються до фіксованої межі, визначеної лише напрямом, а не початковою позицією лінії — тож кожна лінія з таким напрямом, незалежно від того, де вона починається, сходиться до тієї самої точки на екрані.
Це залежить від того, скільки головних осей об'єкта розташовані під кутом (не паралельно й не перпендикулярно) до напряму погляду камери. Камера, що дивиться прямо на грань коробки, має лише одну похилу вісь (глибину), що дає одну точку сходу; поворот камери чи коробки робить дві осі похилими для двоточкової перспективи, а нахил робить похилою і вертикальну вісь для триточкової.
Горизонт — це лінія в просторі екрана, куди проєктується власна висота рівня очей камери, оскільки точки на цій висоті відображаються на y_screen = 0 (відносно камери) незалежно від їхньої відстані. Усі точки сходу для горизонтальних (рівневих) напрямів у сцені лежать саме на цій лінії.
Так. Рушії реального часу 3D та CAD-рендерери використовують ідентичний крок перспективного ділення (ділення x та y на z, масштабоване фокусною відстанню з кута огляду) усередині своїх повних матриць проекції, лише реалізований з додатковим відсіканням та буферизацією глибини заради продуктивності.