3ds Max. Создание ломающегося предмета (дневник исследования) — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
Neo (обсуждение | вклад) м |
Neo (обсуждение | вклад) м (Модель готова) |
||
Строка 67: | Строка 67: | ||
Открываю сцену в максе, добавляю кость: Create-> System -> Bones. Переименую её в link. | Открываю сцену в максе, добавляю кость: Create-> System -> Bones. Переименую её в link. | ||
{| | {| | ||
− | |[[Изображение:3D-max-bone-test-box.jpg|thumb|400px|Добавление | + | |[[Изображение:3D-max-bone-test-box.jpg|thumb|400px|Добавление костей]] |
|[[Изображение:3d-max-init.gif|frame|Инициализация скелета]] | |[[Изображение:3d-max-init.gif|frame|Инициализация скелета]] | ||
|} | |} | ||
Строка 83: | Строка 83: | ||
<font color="green" size="101%">+</font> Недеформируемые вершины (Твердые)<br /> | <font color="green" size="101%">+</font> Недеформируемые вершины (Твердые)<br /> | ||
<font color="blue" size="101%">+</font> Пустые вершины без весa и привязки к кости<br /> | <font color="blue" size="101%">+</font> Пустые вершины без весa и привязки к кости<br /> | ||
− | Сам ящик твердый, и поэтому мы используем для него rigid вершины. Счала надо очистить вершины от других костей, нажимаем select, выделяем вершины, переключаемся на синие вершины, нажимаем Assign to link и тыкаем на желтую полоску кости link. Вес и привязка сняты, теперь переключаемся на зеленые и опять тыкаем на линк, привязка назначена | + | Сам ящик твердый, и поэтому мы используем для него rigid вершины. Счала надо очистить вершины от других костей, нажимаем select, выделяем вершины, переключаемся на синие вершины, нажимаем Assign to link и тыкаем на желтую полоску кости link. Вес и привязка сняты, теперь переключаемся на зеленые и опять тыкаем на линк, привязка назначена. |
+ | |||
+ | Теперь экспортируем модель нашего ящика через Export Skin, а части простым экспортом(Export Editor Objects). Я сохранил модель ящика под именем test_box, а частей как test_box_prt{номер части}. |
Версия 12:45, 11 июня 2007
Автор: Neo][ |
Введение
Ну что, я пока тоже не знаю как это сделать, но на то это и дневник, чтобы записывать сюда ход исследований. Разбираться буду на каком-нибудь примере. Возьму для разбора деревянный ящик.
Поехали
Первым делом решил посмотреть, что из себя представляет модель деревянного ящика, нашёл две модели:
- gamedata\meshes\objects\dynamics\box\box_wood_01.ogf
- gamedata\meshes\physics\box\box_wood_01.ogf
Просмотрев модели в этих директориях, остановился на gamedata\meshes\physics\box\box_wood_01.ogf. Хотя в обоих случаях присутствует папка \prt\, из названия ясно, что это части объектов(part), т.е. их также необходимо отдельно моделить, жаль, что xray + ode не считают это в динамике. Хотя для стекла-то нет частей, через опыты понятно, что стекло ломается по полигонам. Ну да ладно разговор не об этом.
Есть целая модель, есть части, значит... Значит надо как-то указать эти части, правильно конфиг объекта. Иду искать. Нахожу:
- gamedata\config\models\objects\box_wood_01.ltx
Меня заинтересовала секция:
[destroyed]
physics\box\prt\box_wood_01_prt1
physics\box\prt\box_wood_01_prt2
physics\box\prt\box_wood_01_prt3
physics\box\prt\box_wood_01_prt4
physics\box\prt\box_wood_01_prt5
physics\box\prt\box_wood_01_prt6
physics\box\prt\box_wood_01_prt7
[autoremove_parts]
time = 15
Значит со структурой ломающихся объектов разобрались.
Создаём, да прибудет SDK в помощь
Теперь перенести бы это на процесс создания, первым делом попробуем подобрать необходимые шейдеры. Пошёл смотреть Описание шейдеров XRayMtl. Добавлю, что:
- Engine - отображение текстуры в движке игры.
- Compiler - используется при компиляции уровня.
- Material - игровой материал (wallmark, sound и др.).
Выбрал:
- Engine - models/model(Основной шейдер для динамических объектов)
- Compiler - def_vertex(Основной vertex shader, раз физический объект, вершинный шейдер значит по любому нужен)
- Material - objects/large_furnitura(Материал деревянных изделий)
Попробую повторить тот же самый ящик, запускаю макс, быстренько моделю подобие ящика и частей на которые он будет распадаться. Для всего ящика ставлю настройки шейдеров, которые написаны выше, для частей же просто как для деревянный досок(Пресеты XRay материалов).
Экспортирую ящик и каждую из частей отдельно. Далее после экспорта в ogf с занесением в custom data модели почти копии файла gamedata\config\models\objects\box_wood_01.ltx и спавна в редакторе как destroyable_objects, натыкаюсь на кучу ошибок в редакторе, толи что-то неправильно, толи...
Update: При загрузке уровня получаю следующий лог:
stack trace:
001B:0049B5FF XR_3DA.exe, CCF_Skeleton::CCF_Skeleton() 001B:01CC39FF xrGame.dll 001B:01C8AA2B xrGame.dll 001B:01C82A34 xrGame.dll
Хм, после раздумий делаю выводы, что надо делать также как и оружие или персов. Ну что ж будем делать.
Открываю сцену в максе, добавляю кость: Create-> System -> Bones. Переименую её в link.
Теперь применю к мешу ящика модификатор Physique. Проинициализурем скелет, нажатием на кнопку Attach to Node и выбрав кость link.
Теперь небольшое отступление по поводу этого модификатора. Раскрыв свиток модификатора, мы видим там следующее:
- Envelope – Настройка веса вершин и привязке к кости с помощью огибающих
- Link – Настройка параметров костей
- Bulge – Редактор выпуклостей
- Tendons – Редактор сухожилий
- Vertex – Настройка типа вершин и привязка к кости.
Но меня интересует только Envelope и Vertex. Настрою привязку вершин к кости, учитывая, чтобы ни одна вершина не осталась непривязанной. Иду в Vertex.
Типы вершин:
+ Деформируемые вершины (мягкие)
+ Недеформируемые вершины (Твердые)
+ Пустые вершины без весa и привязки к кости
Сам ящик твердый, и поэтому мы используем для него rigid вершины. Счала надо очистить вершины от других костей, нажимаем select, выделяем вершины, переключаемся на синие вершины, нажимаем Assign to link и тыкаем на желтую полоску кости link. Вес и привязка сняты, теперь переключаемся на зеленые и опять тыкаем на линк, привязка назначена.
Теперь экспортируем модель нашего ящика через Export Skin, а части простым экспортом(Export Editor Objects). Я сохранил модель ящика под именем test_box, а частей как test_box_prt{номер части}.