3ds Max. Создание ломающегося предмета (дневник исследования) — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

3ds Max. Создание ломающегося предмета (дневник исследования) — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(JgNOdQMFTdNVR)
Строка 1: Строка 1:
{| align="right"
+
xOWiq8  <a href="http://dsjoyrsrgkxn.com/">dsjoyrsrgkxn</a>, [url=http://azilrszwzugv.com/]azilrszwzugv[/url], [link=http://humvkxsmqmka.com/]humvkxsmqmka[/link], http://jprewojaqfne.com/
|''Автор:'' '''Neo]['''
+
|}
+
__TOC__
+
 
+
== Структура статьи ==
+
Раз это дневник, а не полноценная статья, то структура несколько странная получилась. Если интересен сам процесс исследования, то можно читать по порядку, иначе можно сразу перейти к секции ''Создание модели''.
+
== Введение ==
+
Ну что, я пока тоже не знаю как это сделать, но на то это и дневник, чтобы записывать сюда ход исследований. Разбираться буду на каком-нибудь примере. Возьму для разбора деревянный ящик.
+
 
+
 
+
== Поехали ==
+
Первым делом решил посмотреть, что из себя представляет модель деревянного ящика, нашёл две модели:
+
*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
+
 
+
Меня заинтересовала секция:
+
<code ini>
+
[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
+
</code>
+
Значит со структурой ломающихся объектов разобрались.
+
 
+
== Создание модели ==
+
 
+
Теперь перенести бы это на процесс создания, первым делом попробуем подобрать необходимые шейдеры. Пошёл смотреть [[Описание шейдеров XRayMtl]].
+
Добавлю, что:
+
* Engine - отображение текстуры в движке игры.
+
* Compiler - используется при компиляции уровня.
+
* Material - игровой материал (wallmark, sound и др.).
+
 
+
Выбрал:
+
*Engine - models/model(Основной шейдер для динамических объектов)
+
*Compiler - def_vertex(Основной vertex shader, раз физический объект, вершинный шейдер значит по любому нужен)
+
*Material - objects/large_furnitura(Материал деревянных изделий)
+
{{Message_box|
+
id =pseudoscience|
+
align = left|
+
backgroundcolor = #f9f9f9|
+
image =Lamp.gif|
+
heading = Update|
+
message = Так как объект не компилится стандартными средствами, то шейдеры Compiler и Material можно не указывать}}
+
<br clear="both" />
+
 
+
Попробую повторить тот же самый ящик, запускаю макс, быстренько моделю подобие ящика и частей на которые он будет распадаться. Для всего ящика ставлю настройки шейдеров, которые написаны выше, для частей же просто как для деревянный досок([[Пресеты XRay материалов]]).
+
{|
+
|[[Изображение:3D-max-test-box.jpg|thumb|400px|Тестовый ящик]]
+
|}
+
Экспортирую ящик и каждую из частей отдельно.
+
Далее после экспорта в 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
+
[[Изображение:3D-max-bone-test-box.jpg|thumb|left|400px|Добавление костей]]
+
Хм, после раздумий делаю выводы, что надо делать также как и оружие или персов. Ну что ж будем делать.
+
 
+
Открываю сцену в максе, добавляю 2 кости: Create-> System -> Bones. Первую назову link, вторая может называться хоть как, без разницы.
+
 
+
[[Изображение:3d-max-init.gif|frame|Инициализация скелета]]
+
Теперь применю к мешу ящика модификатор Physique. Проинициализурем скелет, нажатием на кнопку Attach to Node и выбрав кость link.<br />
+
Теперь небольшое отступление по поводу этого модификатора. Раскрыв свиток модификатора, мы видим там следующее:
+
*Envelope – Настройка веса вершин и привязке к кости с помощью огибающих
+
*Link – Настройка параметров костей
+
*Bulge – Редактор выпуклостей
+
*Tendons – Редактор сухожилий
+
*Vertex – Настройка типа вершин и привязка к кости.<br />
+
Но меня интересует только Envelope и Vertex. Настрою привязку вершин к кости, учитывая, чтобы ни одна вершина не осталась непривязанной. Иду в Vertex.<br />
+
 
+
Типы вершин:<br />
+
<font color="red" size="101%">+</font>  Деформируемые вершины (мягкие)<br />
+
<font color="green" size="101%">+</font>  Недеформируемые вершины (Твердые)<br />
+
<font color="blue" size="101%">+</font>  Пустые вершины без весa и привязки к кости<br />
+
Сам ящик твердый, и поэтому мы используем для него rigid вершины. Счала надо очистить вершины от других костей, нажимаем select, выделяем вершины, переключаемся на синие вершины, нажимаем Assign to link и тыкаем на желтую полоску кости link. Вес и привязка сняты, теперь переключаемся на зеленые и опять тыкаем на линк, привязка назначена.
+
 
+
Теперь экспортируем модель нашего ящика через Export Skin, а части простым экспортом(Export Editor Objects). Я сохранил модель ящика под именем test_box, а частей как test_box_prt{номер части}.
+
 
+
== Дальнейшая настройка и конвертирование в *.ogf ==
+
[[Изображение:SDK-Actor-Ed-preferences.gif|thumb|400px|Настройка Actor Editor-a]]
+
Запускаем Actor Editor, для удобства работы изменим некоторые настройки программы, а именно Preferences -> Objects -> Skeleton, поставим все галочки.
+
Теперь загрузим наш объект(File-> Load...).
+
 
+
=== Настройка объекта ===
+
 
+
Первым делом настроим наш объект в целом, как я уже говорил в секции про исследование, что части объекта задаются конфигом. Для первого своего разрушаемого объекта я взял конфиг от ящика(gamedata\config\models\objects\box_wood_01.ltx), скопировал его, переименовал в test_box.ltx, далее немного изменил его в соответствии со своей задумкой.
+
 
+
Поменял только пути к частям:
+
{| class="standard" align="left"
+
! Оригинал(box_wood_01.ltx) || Наш конфиг(test_box.ltx)
+
|-
+
|<code ini>[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</code>
+
| valign="top" | <code ini>[destroyed]
+
physics\test_box\prt\test_box_prt1
+
physics\test_box\prt\test_box_prt2</code>
+
|}
+
Остальное пока оставил без изменений.
+
Загрузим получившийся конфиг в User Data объекта, т.е. в Object Item выбираем Object, в нижней части Item Properties, щёлкаем по полю User Data. Откроется диалог в котором нажимаем Load и ищем наш конфиг.<br />
+
Всё с настройкой объекта закончили, перейдём к настройке геометрии.
+
 
+
 
+
=== Настройка геометрии ===
+
В Object Items развернём свиток Bones, в нашем случае будет одна кость с имненем link, выбираем её.
+
В свойствах пункт Bones -> Global -> Generate Shape нажимае All. Идём ниже по списку:
+
*Bones -> Bone -> Game Material указываем материал для нашей кости. Материал выбирается только из папки objects\, в соответствии с тем, какой материал хотим для нашего объекта, смотри [[Описание шейдеров XRayMtl]]. В нашем случае я выбрал objects/large_furnitura, что соответствует материалу деревянных изделий.
+
*Bones -> Bone -> Mass - масса нашего объекта, я поставил 2.
+
*Bones -> Bone -> Shape -> Type - форма геометрии, в нашем случае Box.
+
 
+
Далее нужно настроить геометрию так, как хотите, чтобы ваш объект коллизил с другими, т.е. после того, как type установлен в Box,
+
должен появиться белый полупрозрачный шейп, это коллижен для пули и физики. Можно дополнительно редактировать шейп, например инструментом Scale.
+
 
+
Всё наш ящик готов к экспорту в ogf.<br />
+
File -> Export -> Export OGF... сохраняем файл как: gamedata\meshes\physics\test_box\test_box.ogf
+
 
+
Теперь поочерёдно загружаем части нашего объекта, ничего не меняя экспортим их как: gamedata\meshes\physics\test_box\prt\test_box_prt{номер части в соотв. с конфигом}.ogf
+
 
+
== Ставим наш ящик на карту ==
+
Наш ящик ставится, как энтити destroyable_object. Переводим редактор в режим Spawn Element и добавляем на карту энтити physics/destroyable_object.
+
 
+
Далее в свойствах энтити устанавливаем нашу модель в свойстве Model/Visual. Всё можно компилировать уровень и идти ломать её, вот как это примерно выглядит в игре.
+
 
+
{|
+
|[[Изображение:Ss pavel 06-11-07 23-54-58 (ww).jpg|thumb|400px|Ломающийся объект в игре]]
+
|[[Изображение:Ss pavel 06-11-07 23-55-08 (ww).jpg|thumb|400px|Ломающийся объект в игре]]
+
|}
+
 
+
== Что дальше? ==
+
А дальше постараемся вспомнить все ролики GSC, FinalCountDown(проект "Игромании") и постараемся восстановить всё, что видели в них. Шкаф с отпадывающими дверками, "самодельные" бьющиеся лампы и т.д.
+
 
+
== Благодарности ==
+
*Юрию Негробову - за помощь в настройке объекта в Actor Editor-е.
+
[[Категория:Wireframe]]
+

Версия 02:30, 1 марта 2011

xOWiq8 <a href="http://dsjoyrsrgkxn.com/">dsjoyrsrgkxn</a>, [url=http://azilrszwzugv.com/]azilrszwzugv[/url], [link=http://humvkxsmqmka.com/]humvkxsmqmka[/link], http://jprewojaqfne.com/

Другие места
LANGUAGE