Метод бросания лучей
Источник:
В начале девяностых компьютерные мощности возросли настолько, что разработчики начали подумывать о рендеринге текстурированных трехмерных миров — правда, не совсем честном. Они придумали метод бросания лучей — когда для освещения объектов и цвета пикселя на двумерном экране используются вертикальные, а не горизонтальные лучи. Представьте, что вы наблюдаете за происходящим на театральной сцене из одной точки. Из этой точки на объекты сцены направляются лучи. Когда лучи достигают любого объекта на сцене или ее фона, они прекращают распространение.
Источник:
Если игровой мир состоит из стен одинаковой высоты (как в Wolfenstein 3D), их можно текстурировать, как спрайты в Space Harrier. А если высота стен разная, нужно расширить зону отслеживания луча, что и было сделано в вышедшем в 1993 году Doom.
Освещение в реальном времени
Осветить объекты в реальном времени можно, просто затенив их по методу Гуро. Но для игр этого мало, ведь даже при самом суровом минимуме эффектов игроку нужны локальные источники освещения — определенного цвета, яркости и с изменением степени освещенности по мере удаления от источника света, поэтому разработчики комбинируют несколько разных техник.
Источник:
В частности, используются более сложные алгоритмы (например, затенение по Фонгу) на стадии рендеринга. При подсчете учитывается расстояние и позиции источников света, а на итоговый цвет каждого пикселя влияют текстурирование и другие эффекты поверхности. Освещение в реальном времени отлично отработали в Quake (1996): в мрачных подземельях роль точечных источников света играли факелы на стенах, а роль динамических источников — пролетающие ракеты.
Z-буферизация
Источник:
При рендеринге трехмерных изображений труднее всего вычислить, когда одни полигоны должны появляться перед другими, и правильно их отобразить. Можно, конечно, отсортировать полигоны по глубине (одни ближе к игроку, другие — дальше) и сначала рисовать те, что находятся на экране дальше всего. Но как быть, если два полигона пересекаются? Тут на помощь приходит Z-буферизация, которая и отвечает за сортировку полигонов по глубине. Сначала нужно рассказать о кадровом буфере. Это область памяти, в которой хранится изображение перед отправкой на экран. Обычно изображений два — то, что рендерится, и то, что уже отображено. Сюда же записывается информация об альфа-канале, тенях и глубине полигона (это и есть Z-буфер).
Источник:
Итак, глубина расположения на экране просчитывается при рендеринге каждого полигона. Изначально Z-буфер настроен на максимальное расстояние от экрана, но в процессе рендеринга глубина каждого пикселя сравнивается с тем значением, что хранится в буфере. Если новый пиксель ближе к экрану, то в буфер сохраняется новое значение глубины. Если нет — пиксель не учитывается, потому что в нарисованной сцене его закрывает уже существующий пиксель. Хотя эту технологию использовали с середины девяностых, именно геометрически сложные миры Super Mario 64 показали, что с помощью Z-буфера можно избавиться от многих ограничений, усложняющих работу с трехмерными мирами.
Карта отражения
Помните повторы Gran Turismo? Там еще гонка показывалась с самого впечатляющего ракурса, а машины вели себя точь-в-точь как настоящие. А природа, отражающаяся в глянцевых корпусах машин? Вот когда чувствовалась скорость!