Перейти к содержанию

Использование 3D в Construct


Лучший контент GameSoul,

Рекомендуемые сообщения

  • BEST

Всем привет! Этот урок является моим переводом официального урока Scirra. Если заметите какие-то ошибки в переводе, дайте мне знать. Вот ссылка на оригинал.

Construct в основном разработан для 2D игр, но он также предоставляет несколько функций, которые позволяют добавить элементы 3D в ваши игры. В этом уроке мы рассмотрим доступные 3D-функции и как они работают.

Во время просмотра уровня (Layout View) можно предварительно просматривать 3D-функции в том виде, в каком они будут отображаться в игре. Таким образом, вы можете легко попробовать многие из этих функций и посмотреть как они работают, прямо в редакторе без запуска уровня. Также редактор упрощает прокрутку и масштабирование уровня, оба из которых влияют на отображение 3D-функций, так что это хороший способ предварительного просмотра этих функций.

Z Высота (Z Elevation)

Самая простая 3D-функция в Construct - это Z высота. Она позволяет вам перемещать 2D-объекты, такие как спрайты, вверх и вниз по оси Z. Увеличение Z высоты переместит объект ближе к камере, поэтому он будет казаться больше. Уменьшение Z высоты переместит объект дальше от камеры, поэтому он будет казаться меньше. Во время прокрутки уровня, вы заметите, что объекты у которых изменена Z высота, также перемещаются по-разному для отражения их 3D-позиции. Это простой и быстрый способ перемещения объектов в 3D. Пример On-rails shooter - это хорошая демонстрация возможностей использования Z высоты.

z-elevation-piggys_v320.png

Некоторые спрайты свинок используют Z высоту для отображения перспективы

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

Камера

Ориентируясь на 2D-игры, Construct обычно обращается к прокрутке и масштабированию при описании видимой части уровня и его размера. Однако, вид на самом деле отображается как 3D-мир с положением камеры, которое определяет то, что видно.

В Construct прокрутка к позиции перемещает камеру и позицию, на которую она смотрит, к заданным координатам X и Y. Таким образом, прокрутка это фактически перемещение камеры в 2D.

По-умолчанию, Z позиция камеры равна 100, и она смотрит вниз на Z позицию равную 0. У всего обычного 2D-содержимого уровня Z позиция равна 0 (если оно не использует Z высоту). Камера настроена таким образом, чтобы объекты на расстоянии 100 пикселей от нее отображались в 100% масштабе, чтобы все выглядело так, как ожидалось для 2D-игры.

z-camera.png

Визуализация камеры Z позиция которой равна 100, смотрящей вниз на уровень с 2D-содержимым Z-позиция которого равно 0.

Перемещение спрайта на Z высоту равной 50 означает, что он помещается на полпути к камере и поэтому кажется вдвое большим. Точно так же перемещение спрайта на Z высоту -100 означает, что он помещается вдвое дальше от камеры и поэтому выглядит вдвое меньше.

Масштабирование

В Construct, настройка масштаба уровня или слоя (или в редакторе, увеличение и уменьшение масштаба) фактически перемещает камеру по оси Z. Например, при 2-кратном масштабе (или масштабировании 200%) камера по сути перемещается в Z позицию равную 50. Поскольку камера ближе к содержимому в 2 раза, оно кажется больше в 2 раза. В 2D это делает именно то, что вы ожидаете, и все масштабируется соответственно. Однако, у этого есть дополнительный 3D-эффект: поскольку камера движется по оси Z, перспектива 3D-объектов изменяется соответственно. Например, вы заметите, что спрайты у которых изменена Z высота перемещаются в поле обзора, для отражения их позиции относительно камеры. Это означает, что масштабирование - это настоящий 3D-эффект в Construct, а не просто растягивание всего до большего размера.

Расчет Z позиции камеры

Z позиция камеры для 2D масштабного коэффициента может быть рассчитана с помощью 100/масштаб. Например, если масштаб равен 2, для масштаба 2x положение камеры равно 100/2 = 50.

Если вы хотите установить Z позицию камеры напрямую, вам все равно придется использовать действия Set layout/layer scale на основе 2D масштабного коэффициента. Однако, вы можете отменить расчет и установить масштаб с помощью 100/z. Например, чтобы установить позицию камеры на 50, вы должны установить масштаб на 100/50 = 2.

Расстояние поля обзора

Из-за того как работает 3D-рендеринг, у камеры есть как минимальное, так и максимальное расстояние, на котором видно содержимое. Если содержимое находится слишком близко к камере или слишком далеко, оно исчезнет.

В Construct минимальное расстояние 1, а максимальное - 10000. Следовательно все, что находится ближе, чем на 1 единицу (unit) от камеры по оси Z или дальше чем на 10000 единиц по оси Z не будет видно. Например, с Z позицией камеры по умолчанию (Z=100), самый высокий спрайт будет виден на Z высоте равной 99. Он не будет виден на 99.5, даже если он все еще находится перед камерой (и, естественно, содержимое за камерой не видно). Точно так же спрайт с Z высотой равной -9900 (это Z-позиция камеры равная 100, минус максимальное расстояние поле обзора 10000) только будет видимым, но полностью исчезнет, если будет дальше.

Соприкосновения

Все 3D-функции в Construct являются чисто косметическими - они не влияют на работу соприкосновений. Соприкосновения все еще продолжают работать, как если бы Z высота объекта равнялась 0, то есть как если бы он все еще был 2D. Об этом следует помнить при разработке игр с использованием 3D-функций. В некоторых случаях вам может потребоваться отключить соприкосновения для объектов, использующих 3D-функции, например, если вы хотите, чтобы игрок мог бегать под ними.

Порядок отрисовки

Construct использует порядок отрисовки по принципу "сзаду наперед", что означает, что он сначала начинает отрисовывать объекты, находящиеся дальше всего от камеры, а затем рисует более близкие объекты сверху. Поскольку последний нарисованный объект находится в верхней части Z order'а, он появляется сверху.

В Construct, Z высота имеет приоритет над Z order'ом. Другими словами, вы не можете использовать действие "Move to top", чтобы что-то появилось поверх чего-то другого с большей Z высотой. Порядок отрисовки сначала основан на Z высоте, а затем Z order используется только там, где несколько объектов имеют одинаковую Z высоту. Другой способ подумать об этом - Z order - это 2D функция. В чисто 2D-игре все находится на одной и той же Z высоте равной 0, и поэтому Z order определяет только внешний вид.

Порядок отрисовки в некоторых случаях влияет на прозрачность. Подробнее см. специальный раздел "Прозрачность" ниже урока.

3D-фигура (3D Shape)

Плагин 3D Shape это простой способ добавить дополнительные элементы 3D в ваш проект. Вы можете выбирать из ряда заготовленных фигур, таких как "коробка", и использовать изображения для каждой грани фигуры. Для более подробной информации, см. в соответствующем разделе мануала. Вы также можете опробовать пример 3D shape tour example.

3d-shapes_v500.png

Пример некоторых объектов 3D Shape, использующих форму "коробки"

Как и в случае с 2D-объектами, вы можете использовать то же свойство Z высоты для перемещения 3D-фигур вверх и вниз по оси Z. Объект 3D Shape также имеет свойство глубины (Z height), которое определяет его высоту, то есть его глубину. Значение глубины должно быть положительным - если вы хотите, чтобы 3D-фигура отображалась ниже, измените ее Z высоту на меньшее значение. Свойство глубины работает в тех же единицах измерения, что и Z высота, поэтому глубина равная 25, будет четвертью расстояния до камеры (при условии, что все остальное установлено по умолчанию).

Прозрачность

Из-за того как работает 3D-рендеринг, прозрачность может не работать должным образом в объектах 3D Shape. Для правильного отображения 3D-объектов, Construct должен использовать буфер глубины, но он полностью поддерживает только непрозрачные поверхности. Поэтому объекты 3D Shape лучше всего будут выглядеть, если их изображения будут непрозрачными.

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

Прозрачность в изображениях 3D-фигур может работать в некоторых случаях, но это зависит от порядка отрисовки Construct. Пока объект 3D Shape, использующий прозрачность в одном из изображений, отрисовывается после содержимого видимого за ним, результат будет правильным. Это связано с тем, что прозрачное содержимое будет нарисовано поверх содержимого, находящегося за ним. Однако, если объект 3D Shape отрисован до того, как содержимое, видимое за ним, то прозрачные части его граней будут блокировать отображение содержимого, нарисованного впоследствии. Это связано с тем, что прозрачные части его изображений заполняются в буфер глубины, как если бы они были непрозрачными, а затем предполагается, что содержимое, которое должно отображаться за ним, является невидимым, и поэтому не отображается. Как отмечалось в разделе "Порядок отрисовки" выше, Construct использует порядок прорисовки по принципу "сзаду наперед", начиная с самой дальней Z высоты и двигаясь вперед, и используя Z order, где Z высота одинакова. Поэтому правильная настройка Z высоты или Z order может помочь обойти проблемы, связанные с прозрачностью 3D-фигур.

3d-shape-transparency_v420.png

Пример неожиданных результатов с помощью прозрачности на боковой грани объекта 3D Shape. Слева: у спрайта свинки Z высота чуть ниже 3D Shape, и прозрачность работает должным образом, поскольку свинка отрисовывается первой. Справа: у спрайта свинки Z высота чуть выше 3D Shape, и прозрачность не работает должным образом, поскольку свинка отрисовывается последней.

Обратите внимание, что порядок отрисовки игнорирует глубину объекта 3D Shape: порядок отрисовки основан только на его Z высоте, которая является положением основания объекта, а затем на его Z order'е. Проблемы с прозрачностью обычно возникают когда глубина объекта 3D Shape выходит за пределы содержимого, которое идет после него в порядке отрисовки, то есть при более высокой Z высоте или Z order.

Проблемы с прозрачностью ограничиваются только объектами 3D Shape. Z высота с такими вещами, как спрайты, никогда не имеет проблем с прозрачностью, поскольку у них нет глубины, и поэтому они не могут выступать над чем-либо еще. Только с объектами 3D Shape следует использовать только непрозрачные изображения.

Z высота mesh'ей

Функция искажения mesh'ей (Mesh distortion) в Construct позволяет деформировать объекты, разделяя их на сетку точек mesh'а, которые могут независимо перемещаться. Вы можете увидеть как это работает в примере Mesh distortion example.

Как в редакторе, так и в игре (runtime) точки mesh'а также можно по отдельности перемещать по оси Z с помощью свойства Z высоты. Это предоставляет еще один способ создания 3D внешнего вида в вашем проекте и может даже использоваться в качестве ограниченного вида 3D-моделирования. Пример того, как выглядит Z высота динамического mesh'а, можно посмотреть в примере Mesh Z elevation example.

Использование 2D слоев

Слои - это еще одна форма Z order'а. Содержимое более высокого слоя обычно отображается над содержимым более низкого слоя. Однако 3D-функции могут это переопределить. Например, высокий объект 3D Shape может по-прежнему перекрывать и закрывать содержимое на более высоком слое.

В некоторых случаях это нежелательно. Например, вы можете захотеть, чтобы 2D фон с Z высотой равной 0, по-прежнему отображался за 3D объектами, имеющие более низкую Z высоту. В качестве альтернативы вы можете пожелать, чтобы HUD или другие элементы управления пользовательского интерфейса отображались перед 3D объектами, имеющими более высокую Z высоту.

В обоих случаях вы можете решить эту проблему, изменив свойство режима рендеринга (Rendering mode) слоя на 2D. Это гарантирует, что его содержимое будет отрисовано плоско в 2D, снова игнорируя глубину любых 3D-функций. Вы можете увидеть это в действии в примере Combining 2D & 3D layers.

2d-layer_v550.png

Демонстрация эффекта 2D слоя с текстовыми объектами как на 2D, так и на 3D слое, показывающая, как каждый из них перекрывает 3D-содержимое.

Расширенные настройки проекта

Есть две настройки проекта, которые также могут влиять на 3D-функции: режим рендеринга (Rendering mode) проекта и анизотропная фильтрация (Anisotropic filtering). Обычно вам не нужно менять их, поскольку они оба по умолчанию имеют значение Авто, что должно делать то, что вы хотите. Однако опытные пользователи могут захотеть их настроить. Например, если вы используете только 3D-функции, например, настраивая mesh для использования Z высоты во время игры, вы можете захотеть установить режим рендеринга в 3D. Подробнее см. раздел мануала, посвященный свойствам проекта.

Заключение

Construct - это, по сути, движок для 2D игр, но он предоставляет ряд функций, которые могут добавить в ваши игры захватывающие 3D-элементы. Они варьируются от простого свойства Z высоты до искажения 3D mesh'а (3D mesh distortion). Все они предварительно просматриваются во время просмотра уровня, что позволяет быстро с ними экспериментировать. Попробуйте и посмотрите, что вы можете сделать! Вы также можете посмотреть дополнительные примеры на стартовой странице с тегом 3D.

  • Like 3
  • браво! 2
  • класс! 2
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...