Нормали вершин и рендеринг в 3D играх

Швы при освещении модульных конструкций
Занявшись модульным моделированием игровых локаций, я еще в Unity столкнулся с проблемой наложения освещения на блочные конструкции. Проблема в том, что при рендере блоки отчетливо видны, хотя в теории должны образовывать единую конструкцию. Это отчетливо видно на рисунке в верхней части кирпичной стенки.

Все, на что у меня хватило ума в тот раз — это отказаться от использования освещения в Unity и применять Unlit-шейдеры, да и вообще, отказаться от Unity и перейти на UDK:), в котором на первый взгляд таких проблем с модульными конструкциями не наблюдалось. Потом, правда, оказалось, что и в UDK эта проблема имеет место быть, в частности при создании травы. Теперь же хочу поделиться решением этой проблемы, да и вообще, немного погрузиться в теорию нормалей вершин в рендере 3D движков.


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

DLLBind и C# в UDK

UDK DLLBind и C#
Думал, что меня это как-то обойдет стороной, ан нет! В общем, назрела необходимость в подключении к UnrealScript через DLLBind внешней DLL-библиотеки. Писать на стандартном C++ как-то совершенно не улыбается, ведь на данный момент есть нечто более развитое и дружелюбное по отношению к программисту, как то C#, например. Кроме того, работая с движком Unity, я более-менее освоил этот язык. Особенно легко на него переходить после знакомства с Java.

Как же заставить UDK DLLBind работать с DLL-библиотеками, написанными на C#? Есть занятная реализация экспорта DLL из C# в пригодную для DLLBind библиотеку, но у меня этот способ не заработал, хоть я и бился над ним два дня. По прошествии двух дней у меня заработал-таки другой способ, который предлагает нам корпорация Microsoft в качестве стандартного решения — это C++/CLI.


( Теперь обо всем по порядку )

Создаем Locomotion систему в UDK

Locomotion системаПродолжая работать над постановкой стоп персонажа в UDK через инверсную кинематику (IK), мы плавно переходим к созданию так называемой Locomotion-системы для UDK. Вечно меня тянет в те области, в которых я вообще не разбираюсь! ;)

В чем же заключаются недостатки обычной IK-системы для постановки стоп?

Во-первых, она работает пост-фактум. Т.е. корректировка стопы осуществляется уже после того, как в анимации стопа поставлена на землю. А учитывая неровность поверхности — поставлена изначально неправильно. Стопа проваливается в землю и только после получения сигнала из анимации корректируется IK-контроллером. Смотрится это, честно говоря, не айс!

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

А в чем же заключается отличие Locomotion-системы от постановки стоп при помощи IK-контроллеров?


( Читать дальше )
  • +1
  • 05 ноября 2012, 14:20
  • dimanjy
  • 1

Полезные инструменты в UDK

Здесь я попробую собрать кое-какие полезные инструменты из UDK, о которых я раньше не знал.

Как посмотреть FPS в UDK?
Есть такой инструмент — Remote Control. Вызывается консольной командой rc или remotecontrol. Вот о нем на официальном сайте:

Также можно подробно следить за расходом памяти и других ресурсов. Кто бы мог подумать, что такое есть в UDK? :)

Анимационные нотификаторы в UDK: события в анимации

Анимация в UDKАнимационные нотификаторы в UDK (Anim Sequence Notifies) — крайне полезная, даже можно сказать, незаменимая вещь. Они дают разработчику обратную связь из анимационной последовательности (Animation Sequence) в UnrealScript в виде вызовов определенных событий (функций) при анимации. Благодаря нотификаторам мы всегда сможем знать, в каком состоянии находится наш персонаж (точнее, в каком положении находится его тело).

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


( Читать дальше )
  • 0
  • 30 октября 2012, 11:47
  • dimanjy
  • 4

Проблемы с освещением в UDK: Свет сквозь стены

Освещение в UDKКак человек увлекающийся, я быстро загораюсь какой-то идеей. Однако по прошествии некоторого времени (обычно небольшого его количества) идея уже кажется мне не столь привлекательной, как раньше. Более того, я могу полностью разочароваться в ней. Раньше мне это очень сильно мешало доводить проекты до конца. Но теперь ко мне пришла старость:), и я (кажется) научился справляться с этим недостатком и даже немного использовать его в своих целях.

К чему это я? Подустал я пилить боевую систему и решил немного отвлечься, занявшись освещением. Эту тактику работы я считаю правильной для увлекающегося человека — чуть-чуть поделать одно, пока интересно, потом чуть-чуть поделать другое, а потом опять вернуться к предыдущему этапу, когда снова станет интересно. Так я потихоньку двигаюсь по всем фронтам, и это иногда спасает от серьезных ошибок.

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


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

Создание рукопашного боя на UDK

Рукопашный бой в UDKЭта тема является логическим продолжением статьи о Создании холодного оружия в UDK, ведь где еще применять холодное оружие, если не в рукопашном бое? Итак, что нам нужно знать для создания более-менее реалистичного рукопашного боя на Unreal Engine в UDK (Unreal Development Kit)? Правильно! Нам нужно знать, в каком месте ударило наше холодное оружие по модели противника, чтобы включить соответствующую анимацию повреждения. В более продуманных играх можно рассчитывать степень повреждения каждой конкретной части тела (например, как в Fallout).

Понятное дело — стандартной моделью для определения столкновений (Collision Cylinder) здесь не обойтись. Как же мы будем выкручиваться?


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

Экспорт анимации из Blender в UDK (Unreal Engine)

Blender 2.64aВ данный момент активно занялся анимацией своего персонажа для UDK (Unreal Development Kit), и столкнулся с проблемой экспорта из Blender в UDK. Ранее я уже писал про экспорт из Blender в UDK в статье Создание своего персонажа для UDK в Blender. Проблема заключалась в том, что при экспорте в FBX-формат Blender 2.63 неправильно понимал параметр Scale при экспорте, а точнее применял его только к самой модели, но не к скелету. Изначально приходилось работать с увеличенной в 50 раз моделью и, соответственно, скелетом, а это не очень удобно.

Все изменилось с выходом Blender 2.64a.

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

Создание холодного оружия в UDK

Холодное оружие в UDKЕсли огнестрельное оружие встроено в Unreal Development Kit (UDK) по умолчанию и может быть использовано в собственной игре практически без изменений (за исключением, разве что самой модели оружия), то с холодным оружием (ножами, мечами, палками, дубинками и кусками арматуры) придется повозиться самому.

Проблема в том, что для холодного оружия в UDK нет встроенного механизма определения столкновений (коллизий — collisions). Да и не только для холодного оружия. Вообще нельзя отдельно для прикрепленных объектов просчитать столкновение. Считается только один единственный Collision Cylinder для всего персонажа, а прикрепленные объекты теряют свои коллизионные примитивы, даже если они у них были. Все это справедливо для режима ходьбы (PHYS_Walking) — так уж устроен движок Unreal Engine. Давайте разбираться, как это ограничение обойти.


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

Материалы с автоматическим тайлингом в UDK

2 фото
Забор с авто-тайлингом текстуры в UDK
image
Работая над сценой игры в редакторе UnrealEd очень часто сталкиваешься с ситуацией, когда нужно растянуть объект на произвольную ширину, но при этом сохранить исходный размер текстуры. Иными словами, текстура при растягивании объекта должна автоматически размножаться (тайлиться) на дополнительную поверхность объекта, полученную в результате растягивания.

Показать все 2 фото →