[Из песочницы] Создание изометрических объектов для игр в Blender

77d4ac23ddfc405aad6de75638448c75.png

Статья будет полезна начинающим разработчикам игр. В ней мы рассмотрим преимущества и способы создания и рендеринга трёхмерных объектов для изометрических 2D-игр на примере Blender. В статье не будет каких-то сложных операций, достаточно начальных знаний 3D-редактора. Для примера рендеринга и анимации я взял башню из Dune2, и, чтобы ей было не так скучно одной, дополнил двумя постройками из Desert Strike.
Преимущества такого подхода по сравнению с отрисовкой в 2D: скорость и удобство создания анимаций, простота модернизации моделей (например, для создания апгрейдов зданий), достаточно хорошие результаты при низких затратах времени.

Недостатки: снижение «душевности» изображений и, собственно, необходимость знания 3D-моделирования.

Начало работы, подготовка сцены


По умолчанию «пустой» файл Blender создается с тремя объектами: камерой, источником света и кубиком в центре. Начнём настройку с камеры, в её свойствах переключимся с режима Perspective на Orthographic, затем укажем для неё в панели Properties следующие параметры:

Transform
X: 12.0
Y: -12.0
Z: 12.0

(как видите, координаты имеют вид N, -N, N, при этом N может быть любым, ведь у нас ортогональная камера)

Rotation
X: 54.8°
Y: 0°
Z: 45°

56a10bba0ab9494da34ac2a887e6cc84.png

Если всё сделано правильно, то взглянув теперь на сцену через камеру (для этого нужно нажать Num0), мы увидим наш кубик в изометрии.

Попробовав отрендерить (F12) первую изометрическую пробу, вы убедитесь, что грани куба освещены очень неравномерно. Займемся же светом! Во-первых, в свойствах мира (вкладка World) включим Ambient Occlusion и укажем для него нужное значение Factor (в примере установлено 0.5). Во-вторых, сменим тип источника света с Point на Sun. Это нужно, чтобы все тени были направлены в одну сторону и не зависели от положения объекта относительно источника света.

ac6f101b56f44a448d08e1c62596d09e.png
Пример рендера с источником света Point

09d3d491e6924172a38dbc33c3c60eb6.png
Пример рендера с источником света Sun

Кстати о тенях, не повторяйте моей ошибки! Если вы по какой-то причине хотите, чтобы все игровые объекты находились на одной сцене и рендерились одновременно (например, чтобы не склеивать spritesheet из отдельных изображений), то следите за тем, чтобы друг на друга они никак не влияли и их тени и освещение (неоновые вывески, фонари и т.д.) не перекрывали другие объекты. На изображении в начале статьи заметно, что тень от башни падает на дозорную вышку.

Кубики наши рендерятся на некрасивом сером фоне, который конечно же нужно отключить, чтобы не мучаться потом с вырезанием фона объектов. Для этого во вкладке Render найдите раздел Shading и измените режим Alpha со Sky на Transparent (если вы используете рендер Blender Render) или поставьте галочку Transparent в разделе Film (в Cycles Render).

С настройкой мы закончили, перейдём к созданию объектов, например, той самой башни. Думаю, не стоит подробно рассматривать процесс её моделирования, сразу воспользуемся теми самыми преимуществами, которые дает нам трехмерный объект.

03bf1d2804b14f47a839e5f57077fbf5.gif
Башня бодро вращается

Во многих стратегиях используется визуальное отображение строительства зданий: сначала возводится фундамент, затем стены и так далее. Попробуем сделать что-нибудь подобное. Выделим все объекты в сцене (A), затем дублируем их (Shift-D) и переместим во второй слой (M и выбрать нужный слой). Операцию можно повторять столько раз, сколько нам нужно фаз строительства. Перейдём во второй слой и «разрушим» башню.

34cbe4ff6b914655b7e28a35e3ee7f19.png
Повторим нужное количество раз, et voila!

348f10c8fc844cecbc7feff049be8a64.gif

Постпроцессинг


В начале статьи среди недостатков такого подхода я упомянул отсутствие ощущения «ламповости». К счастью, его можно частично вернуть, воспользовавшись постпроцессингом и встроенным в Blender движком Freestyle. Не буду рассматривать его подробно, просто покажу, на что он способен.

80ed28342e9c404e95833b0dfbbb0ac2.jpg

d7774d9b4db34d1cbbbddbdc823073d6.jpg
Примеры работы Freestyle

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

d1090358af0a4c10b285a247f0c8ec0a.gif

© Habrahabr.ru