<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://stalkerin.gameru.net/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=78.106.0.168&amp;*</id>
		<title>S.T.A.L.K.E.R. Inside Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=78.106.0.168&amp;*"/>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/78.106.0.168"/>
		<updated>2026-05-31T00:32:07Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=3ds_Max._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BB%D0%BE%D0%BC%D0%B0%D1%8E%D1%89%D0%B5%D0%B3%D0%BE%D1%81%D1%8F_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0_(%D0%B4%D0%BD%D0%B5%D0%B2%D0%BD%D0%B8%D0%BA_%D0%B8%D1%81%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)</id>
		<title>3ds Max. Создание ломающегося предмета (дневник исследования)</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=3ds_Max._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BB%D0%BE%D0%BC%D0%B0%D1%8E%D1%89%D0%B5%D0%B3%D0%BE%D1%81%D1%8F_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%B0_(%D0%B4%D0%BD%D0%B5%D0%B2%D0%BD%D0%B8%D0%BA_%D0%B8%D1%81%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)"/>
				<updated>2008-08-03T16:36:22Z</updated>
		
		<summary type="html">&lt;p&gt;78.106.0.168: /* Что дальше? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
|''Автор:'' '''Neo]['''&lt;br /&gt;
|}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Структура статьи ==&lt;br /&gt;
Раз это дневник, а не полноценная статья, то структура несколько странная получилась. Если интересен сам процесс исследования, то можно читать по порядку, иначе можно сразу перейти к секции ''Создание модели''.&lt;br /&gt;
== Введение ==&lt;br /&gt;
Ну что, я пока тоже не знаю как это сделать, но на то это и дневник, чтобы записывать сюда ход исследований. Разбираться буду на каком-нибудь примере. Возьму для разбора деревянный ящик.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Поехали ==&lt;br /&gt;
Первым делом решил посмотреть, что из себя представляет модель деревянного ящика, нашёл две модели:&lt;br /&gt;
*gamedata\meshes\objects\dynamics\box\box_wood_01.ogf&lt;br /&gt;
*gamedata\meshes\physics\box\box_wood_01.ogf&lt;br /&gt;
Просмотрев модели в этих директориях, остановился на gamedata\meshes\physics\box\box_wood_01.ogf.&lt;br /&gt;
Хотя в обоих случаях присутствует папка \prt\, из названия ясно, что это части объектов(part), т.е. их также необходимо отдельно моделить, жаль, что xray + ode не считают это в динамике. Хотя для стекла-то нет частей, через опыты понятно, что стекло ломается по полигонам.&lt;br /&gt;
Ну да ладно разговор не об этом.&lt;br /&gt;
&lt;br /&gt;
Есть целая модель, есть части, значит... Значит надо как-то указать эти части, правильно конфиг объекта. Иду искать. Нахожу:&lt;br /&gt;
*gamedata\config\models\objects\box_wood_01.ltx&lt;br /&gt;
&lt;br /&gt;
Меня заинтересовала секция:&lt;br /&gt;
&amp;lt;code ini&amp;gt;&lt;br /&gt;
[destroyed]&lt;br /&gt;
physics\box\prt\box_wood_01_prt1&lt;br /&gt;
physics\box\prt\box_wood_01_prt2&lt;br /&gt;
physics\box\prt\box_wood_01_prt3&lt;br /&gt;
physics\box\prt\box_wood_01_prt4&lt;br /&gt;
physics\box\prt\box_wood_01_prt5&lt;br /&gt;
physics\box\prt\box_wood_01_prt6&lt;br /&gt;
physics\box\prt\box_wood_01_prt7&lt;br /&gt;
&lt;br /&gt;
[autoremove_parts]&lt;br /&gt;
time = 15&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Значит со структурой ломающихся объектов разобрались.&lt;br /&gt;
&lt;br /&gt;
== Создание модели ==&lt;br /&gt;
&lt;br /&gt;
Теперь перенести бы это на процесс создания, первым делом попробуем подобрать необходимые шейдеры. Пошёл смотреть [[Описание шейдеров XRayMtl]].&lt;br /&gt;
Добавлю, что:&lt;br /&gt;
* Engine - отображение текстуры в движке игры.&lt;br /&gt;
* Compiler - используется при компиляции уровня.&lt;br /&gt;
* Material - игровой материал (wallmark, sound и др.). &lt;br /&gt;
&lt;br /&gt;
Выбрал:&lt;br /&gt;
*Engine - models/model(Основной шейдер для динамических объектов)&lt;br /&gt;
*Compiler - def_vertex(Основной vertex shader, раз физический объект, вершинный шейдер значит по любому нужен)&lt;br /&gt;
*Material - objects/large_furnitura(Материал деревянных изделий)&lt;br /&gt;
{{Message_box|&lt;br /&gt;
id	=pseudoscience|&lt;br /&gt;
align = left|&lt;br /&gt;
backgroundcolor	= #f9f9f9|&lt;br /&gt;
image	=Lamp.gif|&lt;br /&gt;
heading	= Update|&lt;br /&gt;
message = Так как объект не компилится стандартными средствами, то шейдеры Compiler и Material можно не указывать}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Попробую повторить тот же самый ящик, запускаю макс, быстренько моделю подобие ящика и частей на которые он будет распадаться. Для всего ящика ставлю настройки шейдеров, которые написаны выше, для частей же просто как для деревянный досок([[Пресеты XRay материалов]]).&lt;br /&gt;
{|&lt;br /&gt;
|[[Изображение:3D-max-test-box.jpg|thumb|400px|Тестовый ящик]]&lt;br /&gt;
|}&lt;br /&gt;
Экспортирую ящик и каждую из частей отдельно.&lt;br /&gt;
Далее после экспорта в ogf с занесением в custom data модели почти копии файла gamedata\config\models\objects\box_wood_01.ltx и спавна в редакторе как destroyable_objects, натыкаюсь на кучу ошибок в редакторе, толи что-то неправильно, толи...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Update:''' При загрузке уровня получаю следующий лог:&lt;br /&gt;
  stack trace:&lt;br /&gt;
&lt;br /&gt;
  001B:0049B5FF XR_3DA.exe, CCF_Skeleton::CCF_Skeleton()&lt;br /&gt;
  001B:01CC39FF xrGame.dll&lt;br /&gt;
  001B:01C8AA2B xrGame.dll&lt;br /&gt;
  001B:01C82A34 xrGame.dll&lt;br /&gt;
[[Изображение:3D-max-bone-test-box.jpg|thumb|left|400px|Добавление костей]]&lt;br /&gt;
Хм, после раздумий делаю выводы, что надо делать также как и оружие или персов. Ну что ж будем делать.&lt;br /&gt;
&lt;br /&gt;
Открываю сцену в максе, добавляю 2 кости: Create-&amp;gt; System -&amp;gt; Bones. Первую назову link, вторая может называться хоть как, без разницы.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:3d-max-init.gif|frame|Инициализация скелета]]&lt;br /&gt;
Теперь применю к мешу ящика модификатор Physique. Проинициализурем скелет, нажатием на кнопку Attach to Node и выбрав кость link.&amp;lt;br /&amp;gt;&lt;br /&gt;
Теперь небольшое отступление по поводу этого модификатора. Раскрыв свиток модификатора, мы видим там следующее:&lt;br /&gt;
*Envelope – Настройка веса вершин и привязке к кости с помощью огибающих&lt;br /&gt;
*Link – Настройка параметров костей&lt;br /&gt;
*Bulge – Редактор выпуклостей&lt;br /&gt;
*Tendons – Редактор сухожилий&lt;br /&gt;
*Vertex – Настройка типа вершин и привязка к кости.&amp;lt;br /&amp;gt;&lt;br /&gt;
Но меня интересует только Envelope и Vertex. Настрою привязку вершин к кости, учитывая, чтобы ни одна вершина не осталась непривязанной. Иду в Vertex.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Типы вершин:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot; size=&amp;quot;101%&amp;quot;&amp;gt;+&amp;lt;/font&amp;gt;  Деформируемые вершины (мягкие)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot; size=&amp;quot;101%&amp;quot;&amp;gt;+&amp;lt;/font&amp;gt;  Недеформируемые вершины (Твердые)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot; size=&amp;quot;101%&amp;quot;&amp;gt;+&amp;lt;/font&amp;gt;  Пустые вершины без весa и привязки к кости&amp;lt;br /&amp;gt;&lt;br /&gt;
Сам ящик твердый, и поэтому мы используем для него rigid вершины. Счала надо очистить вершины от других костей, нажимаем select, выделяем вершины, переключаемся на синие вершины, нажимаем Assign to link и тыкаем на желтую полоску кости link. Вес и привязка сняты, теперь переключаемся на зеленые и опять тыкаем на линк, привязка назначена.&lt;br /&gt;
&lt;br /&gt;
Теперь экспортируем модель нашего ящика через Export Skin, а части простым экспортом(Export Editor Objects). Я сохранил модель ящика под именем test_box, а частей как test_box_prt{номер части}.&lt;br /&gt;
&lt;br /&gt;
== Дальнейшая настройка и конвертирование в *.ogf ==&lt;br /&gt;
[[Изображение:SDK-Actor-Ed-preferences.gif|thumb|400px|Настройка Actor Editor-a]]&lt;br /&gt;
Запускаем Actor Editor, для удобства работы изменим некоторые настройки программы, а именно Preferences -&amp;gt; Objects -&amp;gt; Skeleton, поставим все галочки.&lt;br /&gt;
Теперь загрузим наш объект(File-&amp;gt; Load...). &lt;br /&gt;
&lt;br /&gt;
=== Настройка объекта ===&lt;br /&gt;
&lt;br /&gt;
Первым делом настроим наш объект в целом, как я уже говорил в секции про исследование, что части объекта задаются конфигом. Для первого своего разрушаемого объекта я взял конфиг от ящика(gamedata\config\models\objects\box_wood_01.ltx), скопировал его, переименовал в test_box.ltx, далее немного изменил его в соответствии со своей задумкой. &lt;br /&gt;
&lt;br /&gt;
Поменял только пути к частям:&lt;br /&gt;
{| class=&amp;quot;standard&amp;quot; align=&amp;quot;left&amp;quot;&lt;br /&gt;
! Оригинал(box_wood_01.ltx) || Наш конфиг(test_box.ltx)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code ini&amp;gt;[destroyed]&lt;br /&gt;
physics\box\prt\box_wood_01_prt1&lt;br /&gt;
physics\box\prt\box_wood_01_prt2&lt;br /&gt;
physics\box\prt\box_wood_01_prt3&lt;br /&gt;
physics\box\prt\box_wood_01_prt4&lt;br /&gt;
physics\box\prt\box_wood_01_prt5&lt;br /&gt;
physics\box\prt\box_wood_01_prt6&lt;br /&gt;
physics\box\prt\box_wood_01_prt7&amp;lt;/code&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;code ini&amp;gt;[destroyed]&lt;br /&gt;
physics\test_box\prt\test_box_prt1&lt;br /&gt;
physics\test_box\prt\test_box_prt2&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Остальное пока оставил без изменений. &lt;br /&gt;
Загрузим получившийся конфиг в User Data объекта, т.е. в Object Item выбираем Object, в нижней части Item Properties, щёлкаем по полю User Data. Откроется диалог в котором нажимаем Load и ищем наш конфиг.&amp;lt;br /&amp;gt;&lt;br /&gt;
Всё с настройкой объекта закончили, перейдём к настройке геометрии.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Настройка геометрии ===&lt;br /&gt;
В Object Items развернём свиток Bones, в нашем случае будет одна кость с имненем link, выбираем её.&lt;br /&gt;
В свойствах пункт Bones -&amp;gt; Global -&amp;gt; Generate Shape нажимае All. Идём ниже по списку:&lt;br /&gt;
*Bones -&amp;gt; Bone -&amp;gt; Game Material указываем материал для нашей кости. Материал выбирается только из папки objects\, в соответствии с тем, какой материал хотим для нашего объекта, смотри [[Описание шейдеров XRayMtl]]. В нашем случае я выбрал objects/large_furnitura, что соответствует материалу деревянных изделий.&lt;br /&gt;
*Bones -&amp;gt; Bone -&amp;gt; Mass - масса нашего объекта, я поставил 2.&lt;br /&gt;
*Bones -&amp;gt; Bone -&amp;gt; Shape -&amp;gt; Type - форма геометрии, в нашем случае Box.&lt;br /&gt;
&lt;br /&gt;
Далее нужно настроить геометрию так, как хотите, чтобы ваш объект коллизил с другими, т.е. после того, как type установлен в Box,&lt;br /&gt;
должен появиться белый полупрозрачный шейп, это коллижен для пули и физики. Можно дополнительно редактировать шейп, например инструментом Scale.&lt;br /&gt;
&lt;br /&gt;
Всё наш ящик готов к экспорту в ogf.&amp;lt;br /&amp;gt;&lt;br /&gt;
File -&amp;gt; Export -&amp;gt; Export OGF... сохраняем файл как: gamedata\meshes\physics\test_box\test_box.ogf&lt;br /&gt;
&lt;br /&gt;
Теперь поочерёдно загружаем части нашего объекта, ничего не меняя экспортим их как: gamedata\meshes\physics\test_box\prt\test_box_prt{номер части в соотв. с конфигом}.ogf&lt;br /&gt;
&lt;br /&gt;
== Ставим наш ящик на карту ==&lt;br /&gt;
Наш ящик ставится, как энтити destroyable_object. Переводим редактор в режим Spawn Element и добавляем на карту энтити physics/destroyable_object.&lt;br /&gt;
&lt;br /&gt;
Далее в свойствах энтити устанавливаем нашу модель в свойстве Model/Visual. Всё можно компилировать уровень и идти ломать её, вот как это примерно выглядит в игре.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Изображение:Ss pavel 06-11-07 23-54-58 (ww).jpg|thumb|400px|Ломающийся объект в игре]]&lt;br /&gt;
|[[Изображение:Ss pavel 06-11-07 23-55-08 (ww).jpg|thumb|400px|Ломающийся объект в игре]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Что дальше? ==&lt;br /&gt;
А дальше постараемся вспомнить все ролики GSC, FinalCountDown(проект &amp;quot;Игромании&amp;quot;) и постараемся восстановить всё, что видели в них. Шкаф с отпадывающими дверками, &amp;quot;самодельные&amp;quot; бьющиеся лампы и т.д.&lt;br /&gt;
&lt;br /&gt;
== Благодарности ==&lt;br /&gt;
*Юрию Негробову - за помощь в настройке объекта в Actor Editor-е.&lt;br /&gt;
[[Категория:SDK]]&lt;/div&gt;</summary>
		<author><name>78.106.0.168</name></author>	</entry>

	</feed>