Среда, 14.01.2026, 11:25
Приветствую Вас Гость | RSS
F.R.O.N.T.
Главная | Статьи | Регистрация | Вход
Меню сайта
Все новые статьи находяться на форуме!!! Видеть их могут только рарегистрированые пользователи...
Категории каталога
Мои статьи [28] Сценарии [0]
Пишите сюда свои сцинарии
Модострой [152]
Статьи по созданию модов
КАК СНЯТЬ ФИЛЬМ??? [0]
Статьи о том как снять фильмы
Мини-чат
Наш опрос
Вы пытались делать моды и получилось ли?
1. Да, получилось
2. Да, но не получилось
3. Нет, но хочу попробовать
4. Пусть другие делают
5. Нет, и не хочу
Всего ответов: 89
Главная » Статьи » Модострой

Создание ломаючегося предмаета
Структура статьи

Раз это дневник, а не полноценная статья, то структура несколько странная получилась. Если интересен сам процесс исследования, то можно читать по порядку, иначе можно сразу перейти к секции Создание модели.

Введение

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

Поехали

Первым делом решил посмотреть, что из себя представляет модель деревянного ящика, нашёл две модели:
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-a

Запускаем 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]
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 [destroyed]
physics\test_box\prt\test_box_prt1
physics\test_box\prt\test_box_prt2


Остальное пока оставил без изменений. Загрузим получившийся конфиг в 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. Всё можно компилировать уровень и идти ломать её

Что дальше?

А дальше постараемся вспомнить все ролики, ФО и постараемся восстановить всё, что видели в них. Шкаф с отпадывающими дверками, "самодельные" бьющиеся лампы и т.д.

Благодарности
Юрию Негробову - за помощь в настройке объекта в Actor Editor-е.







Категория: Модострой | Добавил: front (06.05.2008)
Просмотров: 787 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
счетчик посещенийсчетчик посещений
Друзья сайта
 
Фан сайт игры S.T.A.L.K.E.R.

Бар_У_границы_Зоны_бар_настоящего_сталкера!

Статистика

На портале: 1
Новичков: 1
Участников: 0

Copyright MyCorp © 2026