Оптимизация текстур под UDK

Мощный редактор материалов в UDK (Unreal Development Kit) позволяет использовать оптимизированные текстуры для экономии памяти. В чем заключается оптимизация текстур? Возьмем, например, карту спекуляра (Specular Map). Она показывает, какие части текстуры должны отражать свет и в каком количестве (подробнее про Specular Map). Для создания карты Specular Map нам достаточно всего одного канала в RGB-изображении. Если использовать под эту карту отдельную текстуру, то остальные каналы не будут использоваться вовсе. Это непростительное расточительство! Мы поступим хитрее, и запакуем карту Spacular Map в неиспользуемый канал другой текстуры, например Diffuse Map.

Аналогичным образом мы можем поступить и с картой прозрачности для прозрачных текстур, используемых в частности для создания решетчатых заборчиков. В данном примере я покажу, как запаковать карту прозрачности Opacity Mask в альфа-канал текстуры карты нормалей (Normal Map) того же заборчика. А так как я стараюсь использовать бесплатные программы, то сделаем мы это в Gimp.

Оптимизация текстур для UDK


( Итак, приступим... )

Просто заборчик :)

Заборчик

Потратил час-полтора, но зато как симпатично :)

Создание дороги в UDK с помощью Spline Loft Actor

«Эх, дороги! Пыль да туман. Города, тревоги, да степной бурьян.»

Снова проблемы, господа! Опять движок Unreal Engine заставляет нас лишь облизнуться на потенциальные возможности такого классного инструмента, как Spline Loft Actor в UDK. А дело все в том, что он не доделан! Он почему-то не позволяет поверхности, выгнутой при помощи сплайна, принимать динамические тени. Тени от статичных объектов запекаются в LightMap нормально, но хочется-то всех плюшек от такого движка!

Дороги с помощью Spline Loft Actor в UDK


( Как же быть? )

Паркур и лазанье в UDK: как это сделать?

Climbing systemЕсли вы внимательно следите за игровыми новинками, то не могли не заметить тенденции к объединению в современных тайтлах всех жанров и элементов геймплея в единое целое: это и стрелялка, и увлекательное приключение с неповторимым сюжетом и историей, и рукопашные схватки, ну и, конечно, жанр Экшн (Action) подразумевает динамичную акробатику с различными трюками — паркур да и только!

Чтобы реализовать все это в едином проекте самому — жизни не хватит. Но кое-что придется сделать, иначе не дотянуть до современного уровня. В своей игре я решил реализовать систему лазания и паркура в UDK. Головокружительных трюков не планирую, но карабкаться по выступам и прыгать со стенки на стенку герой должен.


( Читать дальше )
  • 0
  • 23 сентября 2012, 13:52
  • dimanjy
  • 2

Применение Skeletal Controller в UDK или как повернуть кость?

В задаче постановки стоп в UDK при инверсной кинематике IK персонажа в UDK я использовал скелетный контроллер (Skeletal Controller) SkelControlSinbleBone. Именно он позволяет доворачивать стопу так, чтобы она совпадала с неровной поверхностью земли после того, как уже отработала система инверсной кинематики IK в Unreal Engine.

Поворот кости через SkelControlSinbleBone в UDK

Но проблема в том, что сама модель (или поверхность — Mesh) стопы персонажа привязана к системе координат конкретной кости, которая, как правило, совершенно не совпадает с полученной нами системой координат, а зависит от 3D-редактора, в котором разрабатывалась модель персонажа. И уж точно 3D-моделлер не захочет как-то по-особенному выворачивать кость и терпеть потом из-за этого жуткие неудобства с анимацией персонажа только из-за того, что программист не удосужился учесть этот момент в скриптах на UnrealScript.

В моем случае я — и моделлер, и программист, но мне все-равно не хочется изгаляться в Blender'е. Поэтому мне необходимо теперь как-то переложить полученные нами вектора на систему координат скелетного контроллера SkelControlSingleBone, чтобы передать полученное вращение правильно.


( Читать дальше )

Ротаторы (Rotator) в UDK и преобразование координат

Работая над инверсной кинематикой (IK) стопы персонажа в UDK наткнулся на непонимание мной работы ротаторов (Rotator) в UDK и их отношение к системам координат (мировым — world, и локальным — local). Плохо я в школе учил векторную алгебру и сейчас очень об этом жалею. Переместить стопу в точку на поверхности у меня получилось очень легко (читай предыдущий пост Инверсная кинематика IK в UDK: Постановка стоп персонажа на поверхности), а вот довернуть саму стопу так, чтобы она была параллельно поверхности и при этом смотрела в сторону движения персонажа — тут у меня образовался затык.

Первое, что я сделал — просто задал стопе поворот, точно соответствующий нормали поверхности. Все ОК — стопа точно повторяет поверхность, но оказывается жестко закреплена этой нормалью, как гвоздем прибита. Мало того, что стопы при этом смотрят в совершенно произвольную сторону (а как же еще — ведь нормали по кривой поверхности распределены совершенно произвольно), так ведь еще при вращении персонажа стопы также остаются на месте и не вращаются вместе с ним! Но это так и должно быть, ведь я прилепил их к нормали поверхности.

Для решения этой проблемы оставалось только довернуть стопу в сторону вектора X персонажа (по направлению движения). Для этого я просто скопировал свойство ротатора персонажа Yaw в результирующий ротатор для стопы (в то же свойство Yaw, соответственно). Но в результате стопа провернулась в мировой системе координат (world coordinates) вместо ожидаемой локальной системы координат нормали (local coordinates).

Rotator в UDK и система координат



( Как же быть? )

Инверсная кинематика IK в UDK: Постановка стоп персонажа на поверхности

Создавая современную игру, нельзя упускать из виду такой важный момент, как соответствие положения ног персонажа поверхности, на которой он находится. Если персонаж стоит на лестнице, то одна нога должна стоять на одной ступеньке, а вторая — на другой. Аналогично при ходьбе по наклонной поверхности стопы должны находиться на разном уровне. Более того, поверхность стопы должна точно соответствовать нормали поверхности, на которой она находится.

Инверсная кинематика IK в UDKВ UDK есть встроенная поддержка постановки стоп, но она, почему-то, мало у кого работает, судя по множеству вопросов на официальном форуме Epic Games. У меня также не получилось заставить ее работать, да и в документации по скелетным контроллерам написано, что она годится только для стоящей на месте модели, а для ходьбы и бега все-равно придется шаманить.

Поэтому многие берутся за создание собственной системы IK для постановки стоп в UDK. Я тоже решил более глубоко разобраться в этом вопросе, потому как это точно пригодится в будущем для разработки более сложных систем с лазаньем по лестницам и стенам, хватанием за карнизы и прочего паркура.



( Итак, приступим... )

Процедурная (программная) анимация в UDK

Настало время заняться программированием анимации в UDK. Чтобы освоить этот аспект разработки игр на Unreal Engine, попробуем начать с чего-то простого, но в тоже время полезного. Создадим актера (Actor), который будет проигрывать различные заданные нами анимации в ответ на какое-либо внешнее воздействие или действие игрока. В качестве примера представим себе экскаватор, который игрок может заставить копать, нажав на рычаг или кнопку. Понятно, что экскаватор должен быть выполнен в виде модели со скелетной анимацией (SkeletalMesh). Если мы хотим заставить экскаватор ездить и при этом копать, то нам, возможно, придется использовать AnimTree и блендинг различных анимаций. Также вместо экскаватора можно представить себе какой-либо более-менее сложный роботизированный станок с механической рукой, или что-то в этом роде…

Для имитации простого механизма со скелетом я создал болванку, похожую на лапу экскаватора:

Простой SkeletalMesh в UDK



( Итак, приступим... )

Создание своего персонажа для UDK в Blender

UDK Skeleton

Создание скелета для персонажа в Blender не представляет особой сложности. По этому вопросу написано столько руководств и отснято такое количество гигабайт видео, что не найти информацию очень трудно. Однако в море простеньких туториалов очень легко затеряться настоящим жемчужинам, созданным профессионалами.

Например вот это руководство по экспорту скелетных моделей из Blender в UDK ссылается на шикарный видеоурок по риггингу в Blender'е от создателя шедевров визуального искусства.

Что же касается экспорта скелетной модели (Skeletal Mesh) из Blender в UDK, то тут все уже не так однозначно. Существует несколько вариантов, и в них очень легко запутаться. Говорят, что новый экспортер в .FBX-формат в Blender'е работает очень хорошо и позволяет одновременно в одном .FBX-файле передавать сразу несколько анимационных треков, которые потом в UDK автоматически преобразуются в AnimSets. Однако в Blender'е реализована старая версия FBX-формата, на которую UDK постоянно ругается. Эту ошибку поможет исправить конвертер FBX от Autodesk, поставляемый в виде плагина или отдельного приложения.

Также существует плагин для Blender, позволяющий экспортировать Skeletal Mesh в родной формат Unreal Engine для скелетных моделей и анимации .PSK/.PSA. Этого плагина существует уже несколько версий, каждый из которых работает правильно в той или иной версии очень динамично развивающегося Blender'а. В этом, в основном, и заключается основная проблема. Слишком уж быстро он развивается и меняется. Не успевают разработчики плагинов корректировать код под все нововведения.


( Читать дальше )

Создание персонажа в Sculptris

В данный момент занимаюсь созданием персонажа в Sculptris. Можно прорабатывать модель в мельчайших деталях. Для использования этой модели внутри игрового движка есть прекрасный инструмент уменьшения числа полигонов, а возможность экспорта в OBJ-формат позволяет легко импортировать полученного персонажа в Blender для дальнейшей обработки, в частности, для создания скелета и его анимации.

Создание персонажа в Sculptris

Создание персонажа в Sculptris