У 2D спрайт-іграх я можу зрозуміти, що спрайти рухаються по осі X і Y. Однак для 3D-ігор, як ігрові двигуни підраховують, як візуалізувати 3D-середовище на плоскому 2D-моніторі комп'ютера?
Math.PI
, багато.
У 2D спрайт-іграх я можу зрозуміти, що спрайти рухаються по осі X і Y. Однак для 3D-ігор, як ігрові двигуни підраховують, як візуалізувати 3D-середовище на плоскому 2D-моніторі комп'ютера?
Math.PI
, багато.
Відповіді:
3D-спрайти отримують нову вісь Z, яка зберігає глибину, масштабування та розміри рухів у площині X / Y. Далі спрайт має більше значення Z. Тепер розділіть розмір спрайта та рухи осі X / Y на вісь Z. Як зазначали інші, це 3D-перспективна проекція . Ось найкраща ілюстрація, яку я міг знайти:
Це має сенс концептуально, тому що речі, які знаходяться далі, виглядають менше. Їх видимі рухи також виглядають менше.
Крім того, поблизу об’єктів потрібно намалювати поверх далеких предметів. Знову ж таки, це має сенс концептуально, оскільки поблизу об'єктів замикається погляд на об'єкти, що стоять за ними.
Ці прийоми можна реалізувати на рівні спрайтів. Однак для найбільш реалістичної проекції кожен спрайт має 3D-модель і відображається на рівні пікселів.
Це схоже на те, як ви можете знімати 2D фотографії нашого світу на камеру. Середовище 3D описується за допомогою координат X, Y і Z, але в кінцевому підсумку вам потрібно відобразити це на 2D-екрані з віссю лише X і Y. Це робиться проекцією , де кожна 3D-точка проектується на двовимірну площину перегляду.
Простіше кажучи, ви можете уявити проекційні лінії, що йдуть від віртуальної камери в 3D-просторі до кожної 3D-точки, проходячи через площину огляду. Точка, де проекційна лінія перетинає 2D площину, є проекцією 3D-точки. В ортографічній проекції ці лінії проекції всі паралельні; відстань між об'єктом і камерою не має жодної різниці для проектованої форми. Цей тип проекції не реалістичний, але корисний у певних випадках, наприклад, малювання 2D графіки за допомогою 3D-двигуна (наприклад, HUD). Інший тип проекції - це перспективне проектування, де ці лінії сходяться, роблячи більш віддалені об'єкти меншими і даючи більш реалістичні результати. На цій сторінці є цифри, які можуть допомогти вам візуалізувати процес.
Проекція є одним з декількох об'єктів перетворення, що зазнають у графічному конвеєрі , і зазвичай виконується за допомогою матриці проекції . Зауважимо, що хоча проекція передбачає відкидання координати Z, насправді трансформоване значення Z все ще використовується мірою глибини екрану, щоб ми могли сказати, які об’єкти видимі, а які - заткнуті іншими об'єктами. Це відомо як z-буферизація .
Вся справа в проекції , геометричній операції, яка дозволяє визначити простір з іншого простору вищого виміру (в основному, у вашому випадку ви описуєте 2D-зображення з 3D-середовища).
Простіше кажучи, ось як 3D-рендері генерують зображення (з урахуванням 3D сцени та проекції):
Для кожного пікселя отриманого зображення
Звичайно, це проста модель, я не кажу про світловідбиваючі / заломлюючі / напівпрозорі предмети спеціальних ефектів, такі як дим ...
Матриця . А точніше, багато матричної математики.
Це страшні речі для непосвячених. Зазвичай три матриці 4х4 беруть участь у перетворенні набору 3D-координат у просторі в двовимірні координати на екрані (включаючи глибину в екрані як Z).
3D-матриці - це набір 16 значень з плаваючою точкою, розташованих у сітці 4x4. Алгоритми використовуються для генерування необхідних значень, а потім, використовуючи множення матричного вектора, ці числа перетворюють тривимірний вектор (X, Y, Z).
[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ 0, 0, 0, 1 ]
Це матриця ідентичності . Він по суті нічого не робить для координат вектора.
Перша - це матриця світу чи моделі . Ця матриця бере вершини в індивідуальній моделі (наприклад, ящик), змодельовану навколо початку (0, 0, 0) і перетворює їх у світові вершинні координати. Це може включати в себе масштабування об'єкта, обертання його навколо його походження і, нарешті, переведення його туди, де він знаходиться в сцені.
Друга матриця - матриця перегляду . Це бере світові координати і перетворює їх так, щоб вони знаходилися в контексті погляду. Для створення цієї матриці зазвичай використовується концепція камери.
Камера зазвичай містить вектор позиції, вектор напрямку або цілі та вектор вгору . Цей вектор вгору описує "віджимання" камери.
Ці вектори використовуються для генерування того, що називається переглядом матриці.
Афект, який це має, схожий на світову матрицю тим, що вона по суті обертається і переводить світ навколо камери, щоб "розташувати" камеру.
Камера, яка знаходиться на 10 одиниць уздовж осі X, переведе світові координати 10 одиниць в інший бік.
Заключний фрагмент головоломки - матриця проекцій . У камерно-перспективній проекції матриця перетворює майже екранні координати, щоб створити ілюзію перспективи із полем зору x градусів.
Якщо ви думаєте з точки зору кутів екрана (для гри 640x480), саме так проекція «вирівнює» координати вздовж осі Z у межах 2D координат екрана. Для ортографічної проекції не відбувається масштабування по осі Z на екран. На перспективу, чим далі від об'єкта, тим він стає меншим щодо розмірів екрана.