3ds Max. Создание ломающегося предмета (дневник исследования) — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
Neo (обсуждение | вклад) (стоп - ошибки) |
м (→Дальнейшая настройка и конвертирование в *.ogf) |
||
(не показаны 24 промежуточных версий 9 участников) | |||
Строка 1: | Строка 1: | ||
− | + | ''Автор:'' '''Neo][''' | |
− | + | ||
− | + | == Структура статьи == | |
− | + | Раз это дневник, а не полноценная статья, то структура несколько странная получилась. Если интересен сам процесс исследования, то можно читать по порядку, иначе можно сразу перейти к секции ''Создание модели''. | |
== Введение == | == Введение == | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Ну что, я пока тоже не знаю как это сделать, но на то это и дневник, чтобы записывать сюда ход исследований. Разбираться буду на каком-нибудь примере. Возьму для разбора деревянный ящик. | Ну что, я пока тоже не знаю как это сделать, но на то это и дневник, чтобы записывать сюда ход исследований. Разбираться буду на каком-нибудь примере. Возьму для разбора деревянный ящик. | ||
Строка 40: | Строка 34: | ||
Значит со структурой ломающихся объектов разобрались. | Значит со структурой ломающихся объектов разобрались. | ||
− | == | + | == Создание модели == |
Теперь перенести бы это на процесс создания, первым делом попробуем подобрать необходимые шейдеры. Пошёл смотреть [[Описание шейдеров XRayMtl]]. | Теперь перенести бы это на процесс создания, первым делом попробуем подобрать необходимые шейдеры. Пошёл смотреть [[Описание шейдеров XRayMtl]]. | ||
Строка 52: | Строка 46: | ||
*Compiler - def_vertex(Основной vertex shader, раз физический объект, вершинный шейдер значит по любому нужен) | *Compiler - def_vertex(Основной vertex shader, раз физический объект, вершинный шейдер значит по любому нужен) | ||
*Material - objects/large_furnitura(Материал деревянных изделий) | *Material - objects/large_furnitura(Материал деревянных изделий) | ||
+ | {{Message_box| | ||
+ | id =pseudoscience| | ||
+ | align = left| | ||
+ | backgroundcolor = #f9f9f9| | ||
+ | image =Lamp.gif| | ||
+ | heading = Update| | ||
+ | message = Так как объект не компилится стандартными средствами, то шейдеры Compiler и Material можно не указывать}} | ||
+ | <br clear="both" /> | ||
Попробую повторить тот же самый ящик, запускаю макс, быстренько моделю подобие ящика и частей на которые он будет распадаться. Для всего ящика ставлю настройки шейдеров, которые написаны выше, для частей же просто как для деревянный досок([[Пресеты XRay материалов]]). | Попробую повторить тот же самый ящик, запускаю макс, быстренько моделю подобие ящика и частей на которые он будет распадаться. Для всего ящика ставлю настройки шейдеров, которые написаны выше, для частей же просто как для деревянный досок([[Пресеты XRay материалов]]). | ||
Строка 60: | Строка 62: | ||
Далее после экспорта в ogf с занесением в custom data модели почти копии файла gamedata\config\models\objects\box_wood_01.ltx и спавна в редакторе как destroyable_objects, натыкаюсь на кучу ошибок в редакторе, толи что-то неправильно, толи... | Далее после экспорта в ogf с занесением в custom data модели почти копии файла gamedata\config\models\objects\box_wood_01.ltx и спавна в редакторе как destroyable_objects, натыкаюсь на кучу ошибок в редакторе, толи что-то неправильно, толи... | ||
− | + | ||
+ | '''Update:''' При загрузке уровня получаю следующий лог: | ||
+ | <pre> stack trace: | ||
+ | |||
+ | 001B:0049B5FF XR_3DA.exe, CCF_Skeleton::CCF_Skeleton() | ||
+ | 001B:01CC39FF xrGame.dll | ||
+ | 001B:01C8AA2B xrGame.dll | ||
+ | 001B:01C82A34 xrGame.dll</pre> | ||
+ | [[Изображение: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|500px|Настройка 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]] |
Текущая версия на 13:32, 2 февраля 2018
Автор: 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
Значит со структурой ломающихся объектов разобрались.
Создание модели
Теперь перенести бы это на процесс создания, первым делом попробуем подобрать необходимые шейдеры. Пошёл смотреть Описание шейдеров XRayMtl. Добавлю, что:
- Engine - отображение текстуры в движке игры.
- Compiler - используется при компиляции уровня.
- Material - игровой материал (wallmark, sound и др.).
Выбрал:
- Engine - models/model(Основной шейдер для динамических объектов)
- Compiler - def_vertex(Основной vertex shader, раз физический объект, вершинный шейдер значит по любому нужен)
- Material - objects/large_furnitura(Материал деревянных изделий)
Update Так как объект не компилится стандартными средствами, то шейдеры Compiler и Material можно не указывать |
Попробую повторить тот же самый ящик, запускаю макс, быстренько моделю подобие ящика и частей на которые он будет распадаться. Для всего ящика ставлю настройки шейдеров, которые написаны выше, для частей же просто как для деревянный досок(Пресеты 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
Хм, после раздумий делаю выводы, что надо делать также как и оружие или персов. Ну что ж будем делать.
Открываю сцену в максе, добавляю 2 кости: 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{номер части}.
Дальнейшая настройка и конвертирование в *.ogf
Запускаем Actor Editor, для удобства работы изменим некоторые настройки программы, а именно Preferences -> Objects -> Skeleton, поставим все галочки. Теперь загрузим наш объект(File-> Load...).
Настройка объекта
Первым делом настроим наш объект в целом, как я уже говорил в секции про исследование, что части объекта задаются конфигом. Для первого своего разрушаемого объекта я взял конфиг от ящика(gamedata\config\models\objects\box_wood_01.ltx), скопировал его, переименовал в test_box.ltx, далее немного изменил его в соответствии со своей задумкой.
Поменял только пути к частям:
Оригинал(box_wood_01.ltx) | Наш конфиг(test_box.ltx) |
---|---|
[destroyed] |
[destroyed] |
Остальное пока оставил без изменений.
Загрузим получившийся конфиг в User Data объекта, т.е. в Object Item выбираем Object, в нижней части Item Properties, щёлкаем по полю User Data. Откроется диалог в котором нажимаем Load и ищем наш конфиг.
Всё с настройкой объекта закончили, перейдём к настройке геометрии.
Настройка геометрии
В 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.
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. Всё можно компилировать уровень и идти ломать её, вот как это примерно выглядит в игре.
Что дальше?
А дальше постараемся вспомнить все ролики GSC, FinalCountDown(проект "Игромании") и постараемся восстановить всё, что видели в них. Шкаф с отпадывающими дверками, "самодельные" бьющиеся лампы и т.д.
Благодарности
- Юрию Негробову - за помощь в настройке объекта в Actor Editor-е.