Как игровые движки 3D рендерит 3D-среды на 2D-экран?
9
Я могу понять, что для 2D-игр со спрайтами спрайты перемещаются по осям X и Y. Однако для 3D-игр как игровые движки рассчитывают, как визуализировать 3D-среду на плоском 2D-мониторе компьютера?
Волшебные бесы разрабатывают землю, а затем снимают изображение на экране с помощью своих волшебных палочек.
Math.PIмного чего.
Ник Бедфорд
Ответы:
10
Трехмерные спрайты получают новую ось Z, которая хранит глубину, размер масштабирования и движения в плоскости X / Y. Спрайт, который находится дальше, имеет большее значение Z. Теперь разделите размер спрайта и движения оси X / Y на ось Z. Как уже отмечали другие, это трехмерная перспективная проекция . Вот лучшая иллюстрация, которую я смог найти:
Это имеет смысл концептуально, потому что вещи, которые находятся дальше, выглядят меньше. Их видимые движения также выглядят меньше.
Кроме того, близкие объекты должны быть нарисованы поверх удаленных объектов. Опять же, это имеет смысл концептуально, потому что близкие объекты перекрывают вид объектов позади них.
Эти методы могут быть реализованы на уровне спрайтов. Однако для наиболее реалистичной проекции каждый спрайт имеет 3D-модель и отображается на уровне пикселей.
Диаграмма была то, что мне досталось. Одна картинка стоит тысячи слов.
Ким Чен Ву
17
Это похоже на то, как вы можете снимать 2D изображения нашего мира на камеру. 3D-среда описывается в терминах координат X, Y и Z, но в конечном итоге вам необходимо отобразить это на 2D-экран только с осями X и Y. Это делается с помощью проекции , где каждая 3D-точка проецируется на плоскость 2D-вида.
Проще говоря, вы можете представить проекционные линии, идущие от виртуальной камеры в трехмерном пространстве к каждой трехмерной точке, проходя через плоскость обзора. Точка, в которой линия проекции пересекает 2D-плоскость, является проекцией 3D-точки. В ортографической проекции все эти проекционные линии параллельны; расстояние между объектом и камерой не имеет никакого значения для проецируемой формы. Этот тип проекции нереалистичен, но он полезен в некоторых случаях, например при рисовании 2D-графики с использованием 3D-движка (например, HUD). Другой тип проекции - это перспективная проекция, где эти линии сходятся, делая более удаленные объекты кажущимися меньшими и давая более реалистичные результаты. На этой странице есть некоторые цифры, которые могут помочь вам визуализировать процесс.
Проекция - это один из нескольких объектов преобразования, которые выполняются в графическом конвейере и обычно выполняются с использованием матрицы проекции . Обратите внимание, что хотя проекция подразумевает отбрасывание координаты Z, в действительности преобразованное значение Z по-прежнему используется как мера глубины экрана, чтобы мы могли определить, какие объекты видны, а какие закрыты другими объектами. Это известно как z-буферизация .
Это все о проекции , геометрической операции, которая позволяет вам определить пространство из другого пространства высшего измерения (в основном, в вашем случае, вы описываете 2D-изображение из 3D-среды).
Проще говоря, вот как движки 3D-рендеринга генерируют изображение (с учетом 3D-сцены и проекции):
Для каждого пикселя полученного изображения
Вычислить направление взгляда (согласно проекции), это в основном трехмерный вектор
Найдите ближайший объект в вашей сцене, который «виден» в этом направлении (просто угадайте, какие объекты пересекаются с вектором, и сохраните ближайший)
Подсчитайте цвет этого объекта, у вас есть цвет пикселя!
Конечно, это простая модель, я не говорю о отражающих / преломляющих / полупрозрачных объектах спецэффектов, таких как дым ...
Матрица . Вернее, много математической математики.
Это страшная штука для непосвященных. Обычно для преобразования группы трехмерных координат в пространстве в двумерные координаты на экране используются три матрицы 4х4 (включая глубину экрана как 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 в экран не выполняется. Для перспективы, чем дальше объект, тем меньше он становится по отношению к экстентам экрана.
Math.PI
много чего.Ответы:
Трехмерные спрайты получают новую ось Z, которая хранит глубину, размер масштабирования и движения в плоскости X / Y. Спрайт, который находится дальше, имеет большее значение Z. Теперь разделите размер спрайта и движения оси X / Y на ось Z. Как уже отмечали другие, это трехмерная перспективная проекция . Вот лучшая иллюстрация, которую я смог найти:
Это имеет смысл концептуально, потому что вещи, которые находятся дальше, выглядят меньше. Их видимые движения также выглядят меньше.
Кроме того, близкие объекты должны быть нарисованы поверх удаленных объектов. Опять же, это имеет смысл концептуально, потому что близкие объекты перекрывают вид объектов позади них.
Эти методы могут быть реализованы на уровне спрайтов. Однако для наиболее реалистичной проекции каждый спрайт имеет 3D-модель и отображается на уровне пикселей.
источник
Это похоже на то, как вы можете снимать 2D изображения нашего мира на камеру. 3D-среда описывается в терминах координат X, Y и Z, но в конечном итоге вам необходимо отобразить это на 2D-экран только с осями X и Y. Это делается с помощью проекции , где каждая 3D-точка проецируется на плоскость 2D-вида.
Проще говоря, вы можете представить проекционные линии, идущие от виртуальной камеры в трехмерном пространстве к каждой трехмерной точке, проходя через плоскость обзора. Точка, в которой линия проекции пересекает 2D-плоскость, является проекцией 3D-точки. В ортографической проекции все эти проекционные линии параллельны; расстояние между объектом и камерой не имеет никакого значения для проецируемой формы. Этот тип проекции нереалистичен, но он полезен в некоторых случаях, например при рисовании 2D-графики с использованием 3D-движка (например, HUD). Другой тип проекции - это перспективная проекция, где эти линии сходятся, делая более удаленные объекты кажущимися меньшими и давая более реалистичные результаты. На этой странице есть некоторые цифры, которые могут помочь вам визуализировать процесс.
Проекция - это один из нескольких объектов преобразования, которые выполняются в графическом конвейере и обычно выполняются с использованием матрицы проекции . Обратите внимание, что хотя проекция подразумевает отбрасывание координаты Z, в действительности преобразованное значение Z по-прежнему используется как мера глубины экрана, чтобы мы могли определить, какие объекты видны, а какие закрыты другими объектами. Это известно как z-буферизация .
источник
Это все о проекции , геометрической операции, которая позволяет вам определить пространство из другого пространства высшего измерения (в основном, в вашем случае, вы описываете 2D-изображение из 3D-среды).
Проще говоря, вот как движки 3D-рендеринга генерируют изображение (с учетом 3D-сцены и проекции):
Для каждого пикселя полученного изображения
Конечно, это простая модель, я не говорю о отражающих / преломляющих / полупрозрачных объектах спецэффектов, таких как дым ...
источник
Матрица . Вернее, много математической математики.
Это страшная штука для непосвященных. Обычно для преобразования группы трехмерных координат в пространстве в двумерные координаты на экране используются три матрицы 4х4 (включая глубину экрана как Z).
3D матрицы представляют собой набор из 16 значений с плавающей запятой, расположенных в сетке 4x4. Алгоритмы используются для генерации требуемых значений, а затем с использованием умножения матрицы на вектор эти числа преобразуют трехмерный вектор (X, Y, Z).
Это единичная матрица. По сути, это никак не влияет на координаты вектора.
модель
Первая - это мир или модель матрицы. Эта матрица берет вершины в отдельной модели (такой как ящик), смоделированной вокруг начала координат (0, 0, 0), и преобразует их в координаты мировых вершин. Это может включать масштабирование объекта, вращение его вокруг его источника и, наконец, перемещение его туда, где он находится на сцене.
Посмотреть
Вторая матрица - это матрица вида . Это берет мировые координаты и преобразует их так, чтобы они находились в контексте представления. Концепция камеры обычно используется для генерации этой матрицы.
Камера обычно содержит вектор положения, вектор направления или цели и вектор повышения . Этот верхний вектор описывает «вращение» камеры.
Эти векторы используются для генерации так называемого взгляда на матрицу.
Это влияние похоже на мировую матрицу в том, что она по существу вращается и переводит мир вокруг камеры в «положение» камеры.
Камера, которая находится в 10 единицах вдоль оси X, будет переводить мировые координаты на 10 единиц в другом направлении.
проекция
Последний кусок головоломки - матрица проекции . В перспективной проекции, подобной камере, матрица преобразует почти экранные координаты, создавая иллюзию перспективы с полем обзора в x градусов.
Если вы думаете с точки зрения углов экрана (для игры 640x480), то именно так проекция «выравнивает» координаты вдоль оси Z в пределах 2D координат экрана. Для ортографической проекции масштабирование вдоль оси Z в экран не выполняется. Для перспективы, чем дальше объект, тем меньше он становится по отношению к экстентам экрана.
источник