Реакция на прикосновение

Материал из CryWiki Russia

Версия от 04:14, 4 ноября 2013; AndreyFilantrop (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
О статье
АвторAndreyFilantrop
СложностьСредняя
ТребованияCrysis Mod SDK 1.2; Sandbox 2; 3ds Max
Дата добавления02/02/11


Содержание

Реакция на прикосновение для растений

Далее по тексту для удобства чтения «изгиб от прикосновения для растительности или ИП».

Введение

Изгиб от прикосновения это эффект, когда игрок, проходя мимо части растения, задевает ветви, заставляя их двигаться. Руководство подразумевает, что вы уже настроили растение для базового экспорта и детальную реакцию (синоним = детальный изгиб) как описано в статье Детальная реакция для растительности, и что у вас имеется базовое знание 3ds Max и CryEngine экспортера. Эта процедура предназначена для больших листьев или веток, которые изгибаются при воздействии. Это типа установки костей или веревки, базирующееся на UV instancing. UV instancing означает повторение, точнее клонирование элементов с идентичной UV развёрткой — это очень важно для нас в создании ИП. Когда вы наберете в вашем редакторе Sandbox 2 в консоли команду p_draw_helpers = 1, то увидите, что все оригинальные большие кусты и деревья в Crysis имеют помимо непосредственной геометрии также еще два прокси, расположенных один в другом, в центре которых сама геометрия и располагается. А теперь нажмите Ctrl+G, и попробуйте подойти вплотную к любому большому кусту, постреляйте в него или пройдите сквозь него. Вы увидите массу появившихся розовых палочек, которые дублируют форму каждой ветки иммитируя её скелет. О том, как эти палочки созданы — данная статья.

Установка

Для того чтобы изгибы прикосновений работали, вам нужен элемент растения, к которому уже применен UV-модификатор и правильно применен детальный изгиб. Вам также нужно по крайней мере 3 думми dummy и proxy mesh. Думми нужны чтобы создать деформирующий скелет, а прокси решает, когда скелет активируется (что-то типа AreaTrigger, то есть триггерная зона).

При установке изгибов прикосновением важно помнить, что система базируется на UV instancing. Установленный правильно, единственный UV-mapped mesh (меш к которому применем UV модификатор) работает как шаблон, позволяющий другим его клонам (instances) этого же mesh использовать шаблонную думми-установку для симуляции изгибания. Если ваше растение состоит из нескольких различных листьев или веток, крайне важно, чтоб каждый уникальный mesh имел свою собственную думми установку. Таким образом, начинаем шоу: врубайте 3ds Max и открывайте файл с вашим растением. После применения детальной реакции перед началом настройки ИП у вас должно уже быть растение такого вида (на картинке я для удобства выделил два прокси элемента, а геометрия растения не выделена):

Before touch bending.jpg


То есть должна иметься:

  1. Сама геометрия растения с назначенным детальным изгибом,
  2. Прокси proxy_bending с настройкой как у меня (впрочем пока можете пропустить настройку, так как о ней речь пойдёт чуть дальше),
  3. obstruct_Ai прокси, который для нашего ИП не нужен, но его назначение описывается в статье Настройка деревьев. Настройте его сейчас, а то потом забудете: также как и всегда назначьте в субматериале Crytek Shader, выберите из выпадающего списка «Obstruct» и установите галочку в «Physicalize». Можете добавить прозрачность.

Для этого руководства я буду использовать один любой элемент моего растения, а именно — лист, так как все мои листья с их ветками соответствуют выше заданному условию UV instancing (оба прокси и все элементы модели кроме листа я временно отщепил и спрятал).

Этот лист который будет гнуться, когда игрок проходит через него. Для начала нам нужно создать и установить думми, которые будут формировать скелет. В 3ds Max — смотрим на панель справа, вкладка Create/Helpers/Dummy . Необходимо по крайней мере 3 думми для установки, так что для этого примера создадим и назовем их branch1_1, branch1_2, and branch1_3. Важно, чтоб вы назвали думми в точности как описано, так как в противном случае движок не распознает их. Вы можете создать более детальный скелет за счет добавления большего количества думми, т.к я не знаю, какое максимальное их количество вообще возможно. Если у вас более чем одна ветко-установка, то следующая ветко-установка должна иметь думми с именами branch2_x. То что вы видите на рисунке ниже, это:

  1. Мой отщепленный от всего растения листок в двух проекциях
  2. Три думми, с именами в точности как указано выше,
  3. Иерархия, появившаяся при нажатии в 3dS Max кнопки Select by Name|, показывающая, что я создал думми и присоединил их к основной геометрии листа (обратите внимание, что branch1_1 расположен ближе к основанию листа, а branch1_3 на кончике листа).

2 views.jpg

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

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

Материалы и экспорт

Так как прокси должны быть прикреплены к основной геометрии растения (повторяю это уже не первый раз, но это очень важно), нам потребуется мульти субматериал Multi-Sub Material. Ниже представлены Multi-Sub и Proxy Sub Material. Proxy материал должен быть назван proxy_bend. (у меня proxy_bending — но тоже работает) Должна стоять галочка в Physicalize и в выпадающем меню быть выбран «No Collide». Не забудьте назначить этому мэшу правильный суб-материал sub-material. Как видите у меня на рисунке материала 2 окошка — это сделано в Adobe Photoshop, у вас в 3ds Max естественно будет только одно. К тому же в моем материале модели zelenaya_botva целых 6 субматериалов. Это не принципиально, просто следуйте логике — чем больше субматериалов с назначенными текстурами, тем больше грузится память в редакторе. Поэтому для моего растения вполне достаточно трёх первых по списку id 1-3.

Proxybend mat.jpg

Примечание:
Очень важно помнить, что вы должны сначала ПОЛНОСТЬЮ подготовить материал именно с ПОЛНОСТЬЮ установленными субматериалами для обоих прокси, а потом уже его экспортировать в редактор.

Вот как выглядят розовые палочки о которых шла речь в начале статьи (на заднем плане — сейчас камера игрока находится как раз внутри proxy_bending) и два вышеописанных прокси относительно самой геометрии растения (на переднем плане).

Plant skelenon.jpg

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

Отладка

Эти консольные команды вы можете использовать для отладки ваших ресурсов в редакторе:

p_draw_helpers 1
Показывает физикализированные сетки.
e_debug_draw 1
Показывает используемую вашим объектом память текстур и сетки.

Чтобы отключить их, замените 1 на 0.

См. также