пятница, 11 февраля 2011 г.

UDK Tutorial 01 - Snow example

Приветствую, читатель! В задумках моего блога так же есть и публикация обучающих материалов от себя в стиле "How to" . В частности, в этом направлении будет затрагиваться UDK, 3D графика и возможно в будущем и Unity. Предполагается что основы со всеми редакторами Вы уже хорошо знаете, на них я не буду заострять внимание.


UDK Tutorial 01: example of making a snow (Пример создания снега)
Сегодня я покажу вам один из способов создания снега в UDK без использования Эмиттеров (источников частиц). В основе данного урока лежит идея использовать редактор материалов, для того, чтбы сделать прозрачный двигающийся шейдер, который будет похожим на снег.


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

1) Создаем текстуры снега в Photoshop.
Я использовал CS3 версию, вы же можете использовать любую другую версию или вообще программу, отличную от фотошопа. Однако, чтобы было проще и понятнее, я решил сделать текстуру именно в PS.

Для начала я нашел подходящие кисти в интернете (например, отсюда) и нарисовал снег белым цветом на черном полотне размером 256x256 (это важно, чтобы размеры текстур были двойкой в степени). При рисовании я следил, чтобы расположение снежинок были приблизительно равномерными по всей площади. В итоге я применил стандартный фильтр  Filter > Pattern Maker (Конструктор узоров) в PS для создания бесшовных текстур и вот что у меня получилось:


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


И еще раз:


Для начала и для демонстрации способа, три текстуры нам вполне будет достаточно.

2) Импорт в UDK и подготовка уровня.
Теперь есть смысл запустить наш горячо любимый движок и импортировать свежеиспеченные текстуры. Для этого три наших текстуры сохраним в каком либо поддерживаем формате 2д графики в UDK, я решил использовать для этого *.png. Затем импортируем их в Content Browser в свой package.


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

Для примера я сделал комнату из простого холокуба (куб со внутренней и внешней стенкой) размерами 1024x1024. Текстуры пола/стен можете выбрать по своему усмотрению. Добавьте свет, точку старта и каких нибудь декораций, если хотите (я решил не перебарщивать, пример все таки). Вот что вышло у меня, вид сверху и общий вид (можно кликнуть для полного просмотра):



Итак, комната готова, теперь сделаем нечто, что будет носить наш материал снега.

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

Делаем сетку из панелей размерами 1024х1024 (тобы охватывали всю комнату) и располагаем примерно так:



У меня на картинке выше панели все вместе уже конвертированы в один Static Mesh
(вам нужно сделать тоже самое), так удобнее будет работать и добавлять снежное пространство куда захотим. Материал который был при конвертации нам не важен, мы его потом всегда можем изменить в настройках сатик меша.

4) Создание материала.
Пожалуй, самая основная часть того, ради чего мы здесь собрались. Все остальное было подготовкой к этому шагу. Приступаем. Создайте новый материал в Content Browser'е и назовите по своему усмотрению, например Snow_Material_01.

Теперь рассмотрим сам уже готовый материал и ваша задача сделать такой же или со своими изменениями, как вам больше нравится. На картинке я добавил комментарии и значения, так что вопросов возникнуть не должно. Не забудьте также настроить сам метериал: Bland Mode- BLAND_Translucent, Lighting Model - MLM_Unlit, Two Sided - Yes, Allow Lightmap Specular - No.


И сама финальная картинка с примеенением этого материала на нашу сетку из панелей (в которой нужно в настройках отключить восприятие света во всех световых слоях и тенях - иначе свет может не пройти "через" снег).


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

Финальное видео:


Удачи с UDK, удачно присыпать все своё - своим же снежком.

7 комментариев:

  1. А как наулице сделать? На всю карту у меня 4 км карта

    ОтветитьУдалить
  2. На всю карту скорее всего метод не подойдет, либо сделать его с динамеческой подгрузкой, разбить карту на области. Метод что я описывал он скорее для закрытых пространств..

    ОтветитьУдалить
  3. > Метод что я описывал он скорее для закрытых пространств..

    Забавно, я наверное отстал от жизни... Снег теперь идет в закрытых помещениях? Конденсируется и превращается в снег, пока падает с потолка?) Хотя выполнено очень хорошо

    ОтветитьУдалить
  4. можно к башке персонажа прилепить систему частиц)) и на улице волюм тригер для эго запуска

    ОтветитьУдалить
  5. "сделать сетку плоскостей" это как?? sheet`ы расставить?

    ОтветитьУдалить
  6. Да,что такое сетка плоскостей и как сделать,не могу допереть?

    ОтветитьУдалить