среда, 19 апреля 2017 г.

Сравнение игровых движков Unreal Engine 4 и Unity 5

В этом посте я постараюсь провести как можно более подробное сравнение двух популярных игровых движков. Движки рассматриваются в базовой поставке, т. е. без плагинов и дополнений. Упор при сравнении делаю на два аспекта: особенности использования их в связке с Blender 3D и работе редакторов в среде Linux. Последняя особенность проявляется уже на этапе установки движков.


ВозможностьUnity 5UE 4
Установка движковустанавливается очень просто: с официального форума качается DEB-пакет для debian-based дистрибутивов и sh-скрипт для всех остальных и устанавливается как обычный пакет (мой любимый способ -- через консоль с помощью dpkg -i). В начале соответствующей темы форума указаны зависимости, которые необходимо удовлетворить перед установкой.Для UE 4 доступны исходные коды. И их ПРИДЁТСЯ качать. На официальной wiki движка есть достаточно подробная инструкция по получению исходников и сборки из них редактора. Epic Games так до сих пор и не выкатили стандартный Epic Launcher для Linux. С этим обстоятельством связана следующая особенность...
Доступ к магазину ресурсоввкладка Asset store доступна прямо в редакторе, достаточно залогиниться в свой Unity ID -- и можно качать всё что нужно.доступ к Marketplace осуществляется исключительно из Epic Launcher, которого нет в Linux. Для этого приходится держать венду в дуалбуте или виртуалке. Epic Games заявили о поддержке Linux в 2014 году со словами "We love Linux!" однако, создаётся ощущение, что Linux они любят как-то вяло и неискренне.
Документация и обучающие материалыВесьма неплохая документация, даже переведена на русский язык.Достаточно подробная документация, встроенные "обучалки", о которых движок сообщает миганием значка. Весьма неплохо для того чтобы освоиться в движке и понять как с этим работать.
ИнтерфейсОднооконный интерфейс с возможностью открытия дополнительных вкладок и выведения вкладок в отдельные окна. Большинство настроек появляются во вкладке Inspector. В Linux иногда появляются некоторые баги отрисовки интерфейса, но вполне преодолимые.По умолчанию тоже одно окно, но почти на каждый чих открывается новое окно специализированного редактора, которое перекрывает основное. Причём, это окно можно сделать вкладкой основного и при следующем редактировании этого ресурса окно откроется уже в виде вкладки. Однако на каждый ресурс открывается отдельное окно и при большом количестве используемых ресурсов каждый раз вкладывать окно в окно может надоесть.
Транспорт контентаТекстуры, видеофайлы и blend-файлы можно записывать/читать прямо в каталоге проекта, они будут автоматически обновляться при сохранении файлов. Blend-файлы будут читаться только при условии, что Blender установлен в системе (ассоциирован с типом фалов), поскольку редактор использует блендеровский плагин экспорта FBX.Контент приходится (ре)импортировать и экспортировать вручную.
Работа с материалами и текстурами, возможности шейдингаХотя здесь используется PBR, возможностей шейдинга немного: металлическая или диэлектрическая глянцевость и прозрачность. Подповерхностное рассеивание и прочие плюшки нужно писать в виде отдельного шейдера или пользоваться плагинами. Назначать текстуры в Блендере бесполезно, это всё равно придётся делать в движке. Здесь также используется PBR, имеются такие возможности, как SSS и преломления для прозрачных материалов. Редактор материалов основан на нодах, что позволяет добиваться весьма эффектных результатов. Если базовые карты (diffuse, normalmap) назначить материалу в Blender (Internal) renderer, то при импорте материалов и текстур они будут присоединены в соответствующие входы шейдера в движке.
Программирование игрового процессаПисать скрипты придётся буквально на каждый чих. Есть стандартные ассеты с предварительно написанными скриптами. Скрипты пишутся на C#.Для программирования можно использовать как C++, так и встроенную систему блюпринтов, поделенных на классы, позволяющие решать специализированные задачи (человекоподобные персонажи, четырёхколёсные ТС). Блюпринты состоят из параметрической части, характерной для для конкретного класса, и из общей алгоритмической части, реализованной в виде системы нодов, что позволяет не знать конкретного языка программирования, но требует хотя бы общего понимания программирования (понятие о переменных, типах данных, функциях и т.д.). При запуске движка можно выбрать предустановки различных типов геймплея для быстрого прототипирования (ну и поковырять на предмет как оно там устроено).
Отличия в инструментах редактора.Есть встроенный редактор деревьев Speed Tree.Шикарный компонент Bezier curve, который можно использовать в качестве пути для движения частиц или построения извилистой горной дороги с возможностью подогнать рельеф местности точно под меш дороги.



Пост, возможно, будет постепенно дополняться.

В целом, оба движка неплохо работают в Linux, но, не смотря на то, что Unity выпустили Linux-версию позже, чем UE, Unity выглядит гораздо более готовым для производства приложений в этой среде, чем UE4. UE4 можно изучать, но для финальной сборки, к сожалению, пока что лучше использовать MS Windows.




пятница, 19 февраля 2016 г.

Черновики, WIP-ы, наброски и прочий долгострой


Здесь я буду размещать работы, которые начал, но по каким-то причинам забросил или отложил в "долгий ящик".




















Текстурирование Substance Painter, скриншот из Unreal Engine 4.9.2 (Linux-версия, OpenGL 4).




Substance Painter, Iray, ~2645 полигонов (5206 треугольников).

суббота, 13 июня 2015 г.

Губка Менгера за несколько простых шагов. Урок.

Всем привет! Не так давно в одной социальной сети новичок пытался сделать губку Менгера по уроку и обратился ко мне за помощью с каким-то затруднением. Сейчас я точно не вспомню о сути затруднения, но точно помню, что я подумал, что урок слишком запутанный и перегруженный, поэтому решил создать свой урок.

Шаг первый:

Начнём, как водится, со стандартного куба. Накладываем на него три модификатора Array (Массив). Настройки модификаторов отличаются только осями, по которым происходит смещение.У новичков может возникнуть вопрос: "А почему бы не сделать смещение по всем осям в одном модификаторе?". Отвечаю: попробуйте! Не забываем во всех модификаторах проставить галки Merge – это избавит от необходимости удалять дублирующие вершины после применения модификаторов.

Накладываем модификаторы Array.

Шаг второй:

Применяем все три модификатора. Переходим в режим редактирования и переключаемся в режим редактирования граней. На этом шаге нам нужно удалить все ненужные грани. Во-первых, удалим квадраты из центра. Для этого перейдём в режим каркасного (Wire) затенения при помощи клавиши Z, поочерёдно переключаясь между проекциями и активируя круговую кисть выделения (С), выделяем и удаляем соответствующие полигоны. Во-вторых, если вы покрутили модельку, то могли заметить, что некоторые полигоны имеют отличающийся оттенок - тёмный, чёрный или они вовсе прозрачные. Связано это с неправильной ориентацией нормалей, а ориентируются они неправильно вот почему: на предыдущем шаге мы в модификаторе Array активировали опцию Merge, из-за чего вершины смежных стенок кубов слились как и соответствующие рёбра и полигоны. То есть из одного ребра стали расти ТРИ полигона, поэтому программа не может решить как правильно ориентировать нормали. На этом этапе избавляться от внутренних полигонов будем следующим образом: перейдём в режим редактирования вершин (или рёбер), снимем выделение (А), затем нажмём комбинацию Ctrl+Alt+Shift+M. В меню Select эта опция называется Select Non-Manifold. У этого инструмента есть ряд вариантов использования, в том числе выбор дырок в сетке. Но в данном случае выделяются все вершины, относящиеся к рёбрам, из которых растёт более двух полигонов. Нажимаем X (или Delete, кто как привык) → Faces.

Удаляем центральные полигоны.

Удаляем внутренние полигоны.

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

Шаг третий и четвёртый:

По сути это повторение предыдущих шагов. Мы точно так же накладываем три модификатора Array, применяем их и удаляем внутренние полигоны. Но поскольку теперь внутри нет полигонов, являющихся стенками пустот, мы просто выделяем их рамкой (B) в каркасном режиме и удаляем.

Опять Array.

Удаляем центральные полигоны.

Удаляем внутренние полигоны.

Шаги повторяем столько раз, сколько уровней фрактала хотим добиться. Вот и всё!

Нет, не всё. На самом деле есть способ ещё проще. Идём в пользовательские настройки, активируем аддон Extra Opjects, затем  нажимаем Add -> Mesh -> Extra -> Menger Sponge. Вуаля!

понедельник, 1 июня 2015 г.

Ответы на некоторые вопросы новичков, которые непонятно как гуглить

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


1. Что значит "применить масштаб" и зачем это делать?

  Как известно, масштабировать (двигать, вращать, далее - манипулировать) что-то можно как в объектном режиме, так и в режиме редактирования. Например, когда манипулируешь в объектном режиме, то в N-панели видно, что помимо размера меняется некий параметр, допустим при масштабировании, изменяется параметр Scale. Вообще, у объекта есть ТРИ параметра, описывающих его, так сказать, место под солнцем: это Scale - описывает насколько объект отличается в масштабах от своего базового размера; Rotation - насколько его локальные координаты отклоняются от глобальных; Location - насколько далеко локальный центр координат (в роли которого выступает Origin объекта) находится от центра координат мира. Так вот: некоторые модификаторы и инструменты свои числовые параметры корректируют на эти значения. Яркий пример - фаска (Bevel). Если стандартный куб растянуть по осям Х в 2 раза, Y в 0,5, то ширина фаски будет скорректирована на эти значения в соответствующих направлениях. То есть, по сути, 4 метра по Х и 1 метр по Y будут "не чистыми" 4 и 1 метрами, а 2 метра умноженные на 2 и 0,5 соответственно. Поэтому, чтобы получить равномерную фаску, нужно или применить масштаб, или масштабировать меш в режиме редактирования. Или ещё яркий пример - модификатор Mirror. Новичков этот модификатор своим поведением иногда повергает в недоумение. Но на самом деле он мягкий и пушистый, достаточно знать, что, во-первых, он работает относительно Origin объекта, во-вторых, в его локальных координатах. Поэтому, если вы в настройках модификатора ткнули галку "Отражать по оси Х", а он отражает по оси Z (глобальной), то это означает, что объект, с которого вы начали модель, вы повернули в объектном режиме по оси Y. Это как раз тот случай, когда нужно применить вращение. Ну и третий пример, касающийся того же модификатора Mirror: оси отражения совпадают, но половинки заезжают друг на друга или наоборот, находятся очень далеко. Избавиться от этого проще простого: в режиме редактирования сдвинуть меш так, чтобы Origin находился в плоскости симметрии или сдвинуть всю модель так, чтобы срез симметрии совпадал с соответствующей нулевой плоскостью мира и применить Location (в этом случае Origin встанет в начало координат мира).
  Возможно, у кого-то всё ещё стоит вопрос: "Но что конкретно делает применение параметра?" Ответ: оно делает изменённые, "мнимые" значения реальными, "честными", новыми базовыми. То есть размер куба честными 4,1,2 и Scale=1 вместо 2*2,2*0.5,2. Как если бы вы масштабировали, вращали и перемещали меш в режиме редактирования. Как-то так.


2. Какова логика слоёв (в нодах постобработки, материалов)?

  Я пытаюсь наложить друг на друга два изображения через нод Alpha Over, но они накладываются друг на друга наоборот. Разве тут слои накладываются не так, как в (название любимого растрового редактора)? Где логика?
  Логика тут есть. И расположение слоёв "как в фотошопе" - это только половина её. В чём она заключается? В банальном бытовом понимании слоёв, как в торте. То есть ВНИЗ мы кладём ПЕРВЫЙ слой, чуть выше - второй... на самом ВЕРХУ - ПОСЛЕДНИЙ. Так вот. Ноды стоит рассматривать в качестве... таблицы. Обычной такой таблицы из строк и столбцов. А в традиционной письменности таблицы пишутся и читаются слева направо и сверху вниз. То есть, ПЕРВЫЙ пункт таблицы находится на самом её ВЕРХУ, ПОСЛЕДНИЙ - ВНИЗУ. Так что "фотошоповская" логика попросту переворачивается с ног на голову: ПЕРВЫЙ НИЖНИЙ слой становится первым пунктом таблицы и располагается СВЕРХУ, ВТОРОЙ - вторым СВЕРХУ, ну а последний, ВЕРХНИЙ СЛОЙ располагается в самом НИЗУ. Только и всего.

3. Я создал (название объекта), сделал (название действия), как мне теперь изменить количество вершин в созданном объекте?

 Создать объект заново. Я не шучу. Дело в том, что в Блендере ты не создаёшь объект с параметрами по количеству вершин. Даже так: в  Т-панели (меню по F6) меняются не параметры объекта. Там меняются параметры ОПЕРАЦИИ. Создавая объект, мы совершаем ОПЕРАЦИЮ ДОБАВЛЕНИЯ объекта с параметрами ОПЕРАЦИИ "количество вершин", "радиус" и т. п. Как только мы совершаем другую ОПЕРАЦИЮ, в этом меню появляются её параметры.

воскресенье, 26 января 2014 г.

вторник, 21 января 2014 г.



Мои собственные работы, которые есть на данный момент:




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



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


Пытаемся прогрессировать потихоньку.



Первые попытки в LuxRender.
Результат одного ночного разговора в аське.

Как-то раз мне надоели скучные обои...


Работа выиграла конкурс "Баннер Блендер Украина январь 2012"





Иллюстрация на тему "Мира смерти" Гарри Гаррисона - моей любимой книги.

Делал на один конкурс. Шумновато получилось. Возможно, когда-нибудь переделаю.

Новогодняя игрушка, делалось на конкурс.




Четыре работы выше были сделаны в ходе работы над проектом Planner 5D.





LuxRender 



Cycles Render + Gimp
Делалось на конкурс, первые две -- эксперименты.


Ковыряем Unreal Engine 4... 

Переключил OpenGL с 3 на 4.






Просто интерьерчик.