Як 3D-ігрові двигуни переводять 3D-середовища на 2D-екран?


9

У 2D спрайт-іграх я можу зрозуміти, що спрайти рухаються по осі X і Y. Однак для 3D-ігор, як ігрові двигуни підраховують, як візуалізувати 3D-середовище на плоскому 2D-моніторі комп'ютера?


18
Математика, багато цього.
deceleratedcaviar

3
Magic Imps проектують землю, а потім знімають зображення на екрані, використовуючи свої чарівні палички.

Math.PI, багато.
Нік Бедфорд

Відповіді:


10

3D-спрайти отримують нову вісь Z, яка зберігає глибину, масштабування та розміри рухів у площині X / Y. Далі спрайт має більше значення Z. Тепер розділіть розмір спрайта та рухи осі X / Y на вісь Z. Як зазначали інші, це 3D-перспективна проекція . Ось найкраща ілюстрація, яку я міг знайти:

введіть тут опис зображення

Це має сенс концептуально, тому що речі, які знаходяться далі, виглядають менше. Їх видимі рухи також виглядають менше.

Крім того, поблизу об’єктів потрібно намалювати поверх далеких предметів. Знову ж таки, це має сенс концептуально, оскільки поблизу об'єктів замикається погляд на об'єкти, що стоять за ними.

Ці прийоми можна реалізувати на рівні спрайтів. Однак для найбільш реалістичної проекції кожен спрайт має 3D-модель і відображається на рівні пікселів.


2
Діаграма була тим, що дісталося мені. Малюнок вартує тисячі слів.
Кім Чен Ву Ву

17

Це схоже на те, як ви можете знімати 2D фотографії нашого світу на камеру. Середовище 3D описується за допомогою координат X, Y і Z, але в кінцевому підсумку вам потрібно відобразити це на 2D-екрані з віссю лише X і Y. Це робиться проекцією , де кожна 3D-точка проектується на двовимірну площину перегляду.

Простіше кажучи, ви можете уявити проекційні лінії, що йдуть від віртуальної камери в 3D-просторі до кожної 3D-точки, проходячи через площину огляду. Точка, де проекційна лінія перетинає 2D площину, є проекцією 3D-точки. В ортографічній проекції ці лінії проекції всі паралельні; відстань між об'єктом і камерою не має жодної різниці для проектованої форми. Цей тип проекції не реалістичний, але корисний у певних випадках, наприклад, малювання 2D графіки за допомогою 3D-двигуна (наприклад, HUD). Інший тип проекції - це перспективне проектування, де ці лінії сходяться, роблячи більш віддалені об'єкти меншими і даючи більш реалістичні результати. На цій сторінці є цифри, які можуть допомогти вам візуалізувати процес.

Проекція є одним з декількох об'єктів перетворення, що зазнають у графічному конвеєрі , і зазвичай виконується за допомогою матриці проекції . Зауважимо, що хоча проекція передбачає відкидання координати Z, насправді трансформоване значення Z все ще використовується мірою глибини екрану, щоб ми могли сказати, які об’єкти видимі, а які - заткнуті іншими об'єктами. Це відомо як z-буферизація .


5

Вся справа в проекції , геометричній операції, яка дозволяє визначити простір з іншого простору вищого виміру (в основному, у вашому випадку ви описуєте 2D-зображення з 3D-середовища).

Простіше кажучи, ось як 3D-рендері генерують зображення (з урахуванням 3D сцени та проекції):

Для кожного пікселя отриманого зображення

  • Обчисліть напрямок погляду (згідно з проекцією), це в основному 3D-вектор
  • Знайдіть найближчий об’єкт у вашій сцені, який "бачите" у цьому напрямку (просто вгадайте, які об’єкти перетинаються з вектором, і збережіть найближчий)
  • Обчисліть колір цього об’єкта, у вас є колір пікселя!

Звичайно, це проста модель, я не кажу про світловідбиваючі / заломлюючі / напівпрозорі предмети спеціальних ефектів, такі як дим ...


2

Матриця . А точніше, багато матричної математики.

Це страшні речі для непосвячених. Зазвичай три матриці 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 на екран. На перспективу, чим далі від об'єкта, тим він стає меншим щодо розмірів екрана.

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.