Требуется ли усилие для создания 3D игрового движка?

Ради теории (и общего понимания),

Я хотел бы понять в довольно исчерпывающем списке всех вещей, которые необходимо сделать, чтобы создать "современный" 3D игровой движок (с точки зрения программиста)

Кажется, мне трудно найти эту информацию где-то еще, поэтому я думаю, что вы, ребята из переполнения стека, получите знания, которые я ищу.

В терминах "умеренно исчерпывающий" я имею в виду такие вещи, как общее объяснение этапов проектирования такого механизма, таких как двоичное разделение пространства, фактическая реализация такого механизма и использование программного обеспечения (было бы полезно, если бы средства рендеринга, отличные от BSP, могут быть объяснены).

Я не хочу создавать 3D-движок, но просто понимаю, сколько усилий требуется для его создания.

1 ответ

Фокусируясь только на 3D рендеринге:

Разделение двоичного пространства, как и многие элементы 3D-рендеринга, необязательно. В данном случае это оптимизация, позволяющая компьютеру выполнять меньше работы по визуализации сцены, вырезая невидимые участки.

По своей сути рендеринг - это просто пятиэтапный процесс. Сначала создается список треугольников. Далее, треугольники преобразуются из 3-х пространств в 2-мерные с использованием умножения матриц. Далее треугольники заполняются пикселями и метаинформацией. Наконец, пиксели затеняются индивидуально с использованием метаинформации. Наконец, пиксели выводятся на экран.

Большинство из этих шагов частично или полностью выполняются графической картой, что означает, что задача программиста состоит в том, чтобы сообщить платформе, какой шаг выполнить, и предоставить входные данные.

Впрочем, этот голый двигатель даже не похож на современный двигатель. Современные движки будут заполнены оптимизациями, такими как разбиение двоичного пространства, упрощение сетки, загрузка фона и сжатие текстур. Они также будут заполнены специальными функциями, такими как тени, зеркала, эффекты тумана и частиц.

Современные движки должны иметь возможность загружать и интерпретировать текстуры и сетки, а в некоторых случаях деформировать и модифицировать оба во время выполнения. Наиболее распространенным примером будет интерполяция между ключевыми кадрами.

Двигателям может потребоваться взаимодействие с игровыми логическими модулями, чтобы повторно использовать данные для обнаружения столкновений. Обнаружение столкновения - это то, что определяет, попадают ли пули в что-то, а также то, что делает стены и полы реальными.

Другие вопросы по тегам