В 2.5D вы используете 2D активы / методы рендеринга, чтобы создать ощущение трехмерной среды.
Теперь, с этим определением, в следующем потенциально неоднозначном сценарии требуется некоторая разработка:
Игра А
Используя трехмерную графику, GPU ускоряется и все (игровые объекты - это меши, а не изображения), с фиксированным углом камеры. Позволяет сделать еще хуже, проекция ортогональна, классическая 63,43 градуса. Единственный способ заметить, на первый взгляд, что графика не 2D, это то, что 3DGC, за исключением того, что вы рендерите их с особой тщательностью, легко отличить от спрайтов рисования вручную, независимо от проекции, используемой для их рендеринга. Вы можете экспериментировать с различными методами рендеринга, параметрами, шейдерами и т. Д., И вам будет трудно скрыть тот факт, что они являются трехмерными сетками.
Игра Б
Порт Игры A, но предназначенный для платформ, которые, как известно, имеют оборудование, которое не очень хорошо справляется с 3D-графикой или вообще не справляется с этим. Затем порт заменяет сетки спрайтами. Например, он все еще использует трехмерные ограничивающие рамки для столкновений, и объекты имеют свойство position со значениями x, y и z, поскольку игровая логика в основном не затрагивалась или не затрагивалась, только код рендеринга был изменен.
Поскольку спрайты Игры B представляют собой 3D-ресурсы Игры A, и, чтобы сделать вещи более двусмысленными, Игра A не делает ничего, требующего сложных шейдеров, в 99% всех графических процессоров вы не можете отличить кадр от Игры. B кадра из игры А.
В 2.5D взаимодействие между игровыми объектами ограничено набором ситуаций, в которых иллюзия 3D не может быть скомпрометирована. Например, для представления объятия двух символов вам нужно будет создать один файл изображения с двумя взаимодействующими символами, поскольку попытка представить действие объятия, используя только одно изображение на символ, будет слишком сложной или невозможной. Возможно, вы можете прийти с разделенным на части телом персонажа и нарисовать его в правильном порядке. В 3D эта проблема не существует (существует другой, который правильно позиционирует двух персонажей, чтобы они не проникали в сетку другого персонажа).
Теперь, чтобы визуализировать это, представьте, что в играх A и B есть ошибка, которая в некоторых ситуациях позволяет игровому персонажу проходить через другой игровой объект, что позволяет нам легко различать 2.5D и 3D.
Игра B, 2.5D Render, спрайты упорядочены по значению z его вектора положения. В этом примере положительное z вниз, а отрицательное z вверх. Ось z и ось y параллельны, но z масштабируется в 0,5 раза от y. Таким образом, если видимая область составляет от 10 до -10, то в той же области мы имеем от 20 до -20. Объекты с большим z будут нарисованы последними, поэтому они будут рассматриваться как находящиеся перед объектами с более низким z. Тень персонажа игрока выглядит странно, потому что тени находятся в более высоком слое, чем пол, но в более низком слое, чем все другие объекты, поэтому тень персонажа игрока никогда не находится сверху куба.
Игра А, 3D визуализация. Буфер глубины (также известный как z-буфер) используется для проверки глубины пиксельной точности. Таким образом, объект не должен полностью перекрывать другой, даже треугольник не должен полностью перекрывать другой, у нас есть тест глубины пиксельной точности. Мы можем вращать игровые объекты любым способом и все же получать реалистичные результаты, когда они взаимодействуют.
В резюме: в 2.5D спрайт находится либо впереди, либо позади другого спрайта. В 3D сетка состоит из треугольников, но треугольник не является минимальной единицей при тестировании на глубину, вы можете иметь пиксельную точность. Конечно, поворот камеры в 2,5D невозможен, поскольку объекты были созданы для фиксированного угла камеры, в то время как в 3D это естественно, если углы камеры ограничены дизайном в 3D-игре, это другая тема.
Существуют разные приемы, которые дают ощущение того, что вы находитесь в трехмерном мире, когда вы можете визуализировать только 2D-графику, я представил только быстро созданный пример, используя некоторые ресурсы заброшенного моего проекта.
Почему бы не использовать 3D всегда и не забыть о 2.5D?
Ну, я могу подумать на некоторых примерах, почему разработчик может предпочесть подход 2.5D:
- Может быть, они не знают или не любят 3D API (Direct3D, OpenGL, есть и другие).
- Возможно, целевая платформа плохо справляется с 3D-графикой (старые настольные компьютеры, 2D-консоли).
- Ваша команда может создавать удивительные спрайты, но не 3D-модели.
Насколько вы можете приблизить результаты 3D-графики с помощью 2.5D?
Существует горизонт производительности и сложности программирования. Когда вы приближаетесь к этому горизонту, вы начинаете сомневаться в том, что ваш проект действительно возможен в 2.5D или вам нужно перейти в полное 3D. Например, вы можете использовать z-буферизацию в 2.5D (теоретически), но можете ли вы оплатить стоимость видеопамяти (старый настольный компьютер с встроенной графикой, а не мощные мобильные устройства)? Хотите ли вы оплатить стоимость хранения дополнительного изображения, чтобы сохранить z-маску каждого спрайта?
Хорошими кандидатами на 2.5D являются RPG-игры, полагают, что серия Baldur's Gate, или RTS, считает Age of Empires 1 и 2 (AoE 3 полностью 3D и легко дифференцируется).
Полезные ссылки:
Z-буферизация: http://en.wikipedia.org/wiki/Z-buffering
Ортогональные проекции: http://glasnost.itcarlow.ie/~powerk/GeneralGraphicsNotes/projection/orthographicprojection.html