<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Book Mod</title>
		<link>http://book-mod.3dn.ru/</link>
		<description>Форум</description>
		<lastBuildDate>Sun, 12 Oct 2014 20:04:44 GMT</lastBuildDate>
		<generator>uCoz Web-Service</generator>
		<atom:link href="https://book-mod.3dn.ru/forum/rss" rel="self" type="application/rss+xml" />
		
		<item>
			<title>Один из способов запуска X-Ray SDK 0.4 на Windows Vista/7</title>
			<link>https://book-mod.3dn.ru/forum/24-270-1</link>
			<pubDate>Sun, 12 Oct 2014 20:04:44 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Автор темы: Wo1fRam&lt;br /&gt;Автор последнего сообщения: Wo1fRam&lt;br /&gt;Количество ответов: 16</description>
			<content:encoded>Для решения проблемы с файловым диалогом в SDK 0.4 нам понадобится программа &lt;a class=&quot;link&quot; href=&quot;http://u.to/bcKnBA&quot; title=&quot;http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;amp;id=7352&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Microsoft Application Compatibility Toolkit&lt;/a&gt; (&lt;a class=&quot;link&quot; href=&quot;http://u.to/MHzxAg&quot; title=&quot;http://www.microsoft.com/en-us/download/details.aspx?id=7352&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Еще одна ссылка&lt;/a&gt;). После её установки переходим в меню &quot;Пуск&quot;, там находим папку &lt;b&gt;Microsoft Application Compatibility Toolkit 5.6&lt;/b&gt;, открываем и выбираем &lt;b&gt;Compatibility administrator&lt;/b&gt;. Запускаем от имени администратора! &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerwCanLt&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerwCanLt&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerwCanLt&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerwCanLt&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerwCanLt&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Шаг 1&apos;);$(&apos;#uSpoilerwCanLt&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerwCanLt&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerwCanLt&apos;)).val(&apos;[+] Шаг 1&apos;);$(&apos;#uSpoilerwCanLt&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Шаг 1&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;b&gt;ПКМ -&gt; Create New -&gt; Application Fix...:&lt;/b&gt; &lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/0830968.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s0830968.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Шаг 1)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerzNCGP9&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerzNCGP9&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerzNCGP9&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerzNCGP9&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerzNCGP9&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Шаг 2&apos;);$(&apos;#uSpoilerzNCGP9&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerzNCGP9&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerzNCGP9&apos;)).val(&apos;[+] Шаг 2&apos;);$(&apos;#uSpoilerzNCGP9&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Шаг 2&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;b&gt;Выбираем екзешник LevelEditor&apos;а и отмечаем следующие параметры:&lt;/b&gt; &lt;br /&gt; &lt;!--IMG2--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/9935330.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s9935330.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG2--&gt; &lt;br /&gt; &lt;!--IMG3--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/2734683.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s2734683.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG3--&gt; &lt;br /&gt; &lt;!--IMG4--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/5559143.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s5559143.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG4--&gt; &lt;br /&gt; &lt;!--IMG5--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/7441302.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s7441302.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG5--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Шаг 2)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerRyBsrQ&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerRyBsrQ&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerRyBsrQ&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerRyBsrQ&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerRyBsrQ&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Шаг 3&apos;);$(&apos;#uSpoilerRyBsrQ&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerRyBsrQ&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerRyBsrQ&apos;)).val(&apos;[+] Шаг 3&apos;);$(&apos;#uSpoilerRyBsrQ&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Шаг 3&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;b&gt; Нажимаем &quot;готово&quot; и видим&lt;/b&gt; &lt;br /&gt; &lt;!--IMG6--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/3843041.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s3843041.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG6--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Шаг 3)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoiler9HF94U&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoiler9HF94U&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler9HF94U&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler9HF94U&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler9HF94U&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Шаг 4&apos;);$(&apos;#uSpoiler9HF94U&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler9HF94U&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler9HF94U&apos;)).val(&apos;[+] Шаг 4&apos;);$(&apos;#uSpoiler9HF94U&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Шаг 4&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;b&gt;File -&gt; Save as... Сохраняем в папку bins, затем ПКМ на образе и жмём Install&lt;/b&gt; &lt;br /&gt; &lt;!--IMG7--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/1942731.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s1942731.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG7--&gt; &lt;br /&gt; &lt;!--IMG8--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/1741467.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s1741467.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG8--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Шаг 4)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; &lt;span style=&quot;color:orange&quot;&gt;У кого не получается, прикрепляю готовый файл исправлений. Его нужно открыть через вышеупомянутую программу, изменить пути к файлам (все 4 редактора - Actor, Level, Particle и Shader) и установить как в шаге 4. Исправление скорее всего изменяет эксешники, поэтому для особо ленивых прикрепляю архив с правлеными файлами. Кидать в папку с СДК с заменой. &lt;br /&gt;&lt;br /&gt; &lt;div align=&quot;right&quot;&gt;&lt;b&gt;WurDalaK&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>Wo1fRam</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-270-1</guid>
		</item>
		<item>
			<title>Создание моделей NPC</title>
			<link>https://book-mod.3dn.ru/forum/24-135-1</link>
			<pubDate>Sun, 17 Nov 2013 14:37:26 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Описание темы: Автор: Senator&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: Возрожденный&lt;br /&gt;Количество ответов: 8</description>
			<content:encoded>&lt;b&gt;Вступление&lt;/b&gt; &lt;br /&gt; Сразу небольшая оговорка – в статье описывается процесс создания модели NPC для ЧН или ЗП. Однако для ТЧ суть остается та же, меняется лишь скелет. Как вариант, можно сделать все по статье, а потом конвертировать в ТЧ. (как легче всего это сделать, подробно описано в статье). Таким образом вы получите модели под все игры серии с минимальными усилиями. &lt;br /&gt; Для удобства восприятия урок разделен на три части – «Maya», «3DS Max» и «Настройка в SDK». &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoiler3Jvjsp&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoiler3Jvjsp&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3Jvjsp&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3Jvjsp&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler3Jvjsp&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Maya&apos;);$(&apos;#uSpoiler3Jvjsp&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3Jvjsp&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler3Jvjsp&apos;)).val(&apos;[+] Maya&apos;);$(&apos;#uSpoiler3Jvjsp&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Maya&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; Для работы вам потребуется Autodesk Maya 8.5 или Autodesk Maya 2008 с установленными плагинами из пакета X-Ray Asset Tools от bardak&apos;а. &lt;br /&gt; Начну, пожалуй, с перечисления ограничений на вашу модель. Она может быть сделана вами собственноручно, рипнута из другой игры или же была взята собственно из Сталкера, но перенесла небольшую пластическую операцию. Так или иначе, предполагается, что модель у вас есть. И есть она в формате, понимаемом Maya. &lt;br /&gt;&lt;br /&gt; Ограничения &lt;br /&gt; 1. Модель должна состоять из треугольников (то есть не должно быть ни одного четырех и более угольного полигона). Если вы не уверены в соблюдении этого условия или же уверены в его невыполнении, то проделываем операцию под названием триангуляция (автоматическое разбиение модели на треугольники): выделяем модель, нажимаем кнопку Mesh, затем выбираем пункт Triangulate: &lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/7183064.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s7183064.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt; 2. В модели должно быть приемлемое количество полигонов. Точного ограничения нет, но делать больше 12000 точно не стоит – лагов не избежать. Для справки, модели от GCS в среднем имеют по 6000 полигонов. Если в вашей модели много больше, чем положено, то оптимизируем ее любым удобным вам способом. Самый легкий – Mesh -&gt; Reduce &lt;br /&gt; 3. Размер модели должен соответствовать естественным размерам человека. Легче всего импортировать в сцену модель NPC из игры и подогнать свою инструментом «scale» &lt;br /&gt; 4. Модель должна быть с UV координатами, текстурой в формате DDS и X-Ray шейдером. &lt;br /&gt; 5. Модель должна находиться в начале координат. &lt;br /&gt; 6. Перед началом привязки модели к скелету, выполняем еще одну несложную операцию: &lt;br /&gt; &lt;!--IMG2--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/8159613.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s8159613.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG2--&gt; &lt;br /&gt; Edit -&gt; Delete all by type -&gt; History &lt;br /&gt; Вот, пожалуй, и все. Если вы успешно преодолели все ограничения, то можно приступать непосредственно к привязке модели. &lt;br /&gt;&lt;br /&gt; Привязка модели &lt;br /&gt; Для начала импортируем в сцену с нашей моделью визуал любого NPC из архивов игры. Удаляем меш. Таким образом, в сцене остается только ваша модель и скелет из игры. Теперь необходимо нацепить меш на скелет. Лучше всего менять именно модель, оставляя скелет неизменным, во избежание проблем с шейпами. Хотя плагин экспорта должен возвращать положения костей в исходные, происходит это почему-то не всегда, так что лучше перестраховаться). &lt;br /&gt; После того, как вы подогнали форму модели под скелет (кстати, можно не удалять модель сталкера, а ориентироваться по ней, так кому-то может показаться удобней) еще раз обнуляем историю, как описано выше. Теперь, когда все приготовления окончены, нужно заставить модель деформироваться под действием скелета. А делается это так: &lt;br /&gt; 1. Выделяем модель и скелет, затем жмем Skin, в открывшемся списке выбираем пункт Bind Skin, нажимаем на кубик, напротив Smooth Bind: &lt;br /&gt; &lt;!--IMG3--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/7256708.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s7256708.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG3--&gt; &lt;br /&gt; 2. В открывшемся окне делаем следующие настройки: &lt;br /&gt; &lt;!--IMG4--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/1061532.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s1061532.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG4--&gt; &lt;br /&gt; Все, наша модель привязана к скелету. Однако не все так радужно, как может показаться на первый взгляд – у модели кривая развесовка, то есть кости влияют на оболочку не совсем так, как надо. Чтобы вы поняли, что я имею ввиду, посмотрите на иллюстрацию: &lt;br /&gt; &lt;!--IMG5--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/3134574.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s3134574.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG5--&gt; &lt;br /&gt; Модель требует дополнительной настройки, однако уже на данном этапе можно проверить ее работоспособность, экспортировав в SDK и подставив в игру, как описано ниже. &lt;br /&gt; 3. Снова выделяем модель. Развесовка модели правится инструментом Paint Skin Weights tool, а находится он тут: &lt;br /&gt; &lt;!--IMG6--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/1986385.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s1986385.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG6--&gt; &lt;br /&gt; Обратите внимание, снова нажимаем на кубик, а не на надпись. Если вы все сделали правильно, то ваша модель превратится в черно-белую, а справа появится окно настроек инструмента. &lt;br /&gt; Попробую вкратце объяснить принцип работы с Paint Skin Weights tool: &lt;br /&gt; &lt;!--IMG7--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/6490541.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s6490541.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG7--&gt; &lt;br /&gt; 1. Список костей скелета, работа ведется с выделенной костью, в данном случае это «Bip01_l_clavicle». &lt;br /&gt; 2. Образно выражаясь, место, где можно указать радиус кисти инструмента, которой вы мазюкаете по несчастному и ее прозрачность (Opacity), если работали в фотошопе, то поймете, о чем я. &lt;br /&gt; 3. Четыре режима работы кисти: &lt;br /&gt; 3.1 Replace – заменяет значение влияния кости на вертексы, попадающие под влияние кости на заданное ( произведение степени влияния на прозрачность (Opacity x Value)). &lt;br /&gt; 3.2 Add - добавляет к имеющемуся значению опять же произведение степени влияния помноженное на прозрачность. &lt;br /&gt; 3.3 Smooth – сглаживает значения. (Если простым языком, то у вас есть белое пятно на черном фоне, мазюкаем и получаем белое пятно с серыми границами) &lt;br /&gt; 3.4 Scale – штука опасная, не трогаем вообще. &lt;br /&gt; 4. Value – степень воздействия кисти (0 – черный, 1 – белый). &lt;br /&gt; 5. Наглядное представление влияния кости на модель. &lt;br /&gt; Собственно, все. Выделяем все кости по очереди и мазюкаем кистью до получения удовлетворительных результатов. Для удобства открываем еще одно окно майки, импортируем модель из игры и смотрим, как какая кость влияет на что. Пытаемся повторить с поправкой на то, что модель у нас немного отличается. Крутим суставы, чтобы посмотреть привязку в динамике, но не забываем нажимать «Edit» - «Undo», вручную на место кости никогда не ставим. &lt;br /&gt; После пары дней мучений у нас получится что-то более-менее удовлетворяющее требованиям человекоподобного существа. Выделяем меш (скелет не нужно), нажимаем File –&gt; Export selection, выбираем формат (X-ray skeletal object) и кнопку Export. Если все сделано правильно и по гороскопу благополучный день, то экспорт пройдет удачно (зависит именно от гороскопа, так как часто случаются рендомные вылеты, и их причина мне неизвестна). &lt;br /&gt; Работа в Maya на этом закончена.&lt;!--/ust--&gt;&lt;!--usn(=Maya)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-135-1</guid>
		</item>
		<item>
			<title>Подключение локаций к ТЧ</title>
			<link>https://book-mod.3dn.ru/forum/24-272-1</link>
			<pubDate>Sat, 05 Oct 2013 17:05:26 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Описание темы: Автор: Loxotron; правил: barmidrol&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: Wo1fRam&lt;br /&gt;Количество ответов: 1</description>
			<content:encoded>&lt;b&gt;Предисловие &lt;/b&gt; &lt;br /&gt; Приветствую, дамы и господа. Если вы открыли эту тему, значит, вы обязуетесь все нижесказанное добросовестно выполнить Прямыми Руками, и при этом не задавать нупских вопросов. Если же вы нуп или тупой, закройте эту страницу. &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerEfU8P2&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerEfU8P2&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerEfU8P2&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerEfU8P2&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerEfU8P2&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Основы&apos;);$(&apos;#uSpoilerEfU8P2&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerEfU8P2&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerEfU8P2&apos;)).val(&apos;[+] Основы&apos;);$(&apos;#uSpoilerEfU8P2&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Основы&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; Ну что ж... начнем с самого простого, скомпилим левел с аи, монстрами на карте mp_atp_test. Открываем левел.. первое что надо сделать убрать все rpoint(мультиплеерные точки спавна). Убрали? Отлично. Создаем Spawn elements -&gt; actor ну и по желанию в свойствах (Properties) в custom data прописываем ему предположим вот это: &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;&amp;#91;spawn]&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; wpn_ak74&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Тем самым при появлении игрока у него в руках уже будет калаш. Далее, создаем монстра... любого по желанию, предположим кровососа и ставим на уровень. Теперь дело за AI map - аи сетка, которая необходима для того, чтобы нпс, монстры могли ориентироваться по уровню. Жмем Object и кликаем на земле(тем самым мы ее &quot;выбрали&quot; для дальнейших манипуляций), затем AI Map -&gt; Commands -&gt; Make list from selected, жмем add в разделе AI Map Nodes и add для добавления объектов слева вверху(чайник) и ставим на карте ноды в нужном вам порядке(достаточно одного), жмем Generate Full. Всё, аи-сетка сгенерированна. Теперь добавляем на левел обязательно! 1 graph point (Spawns-&gt;ai-&gt;graph point), в нем можно ничего не писать. Сохраняем уровень, билдим (build). &lt;br /&gt; После этого компилируем карту. Это можно делать двумя способами: &lt;br /&gt; 1. Нормальным (создавать диск Х приложенной прогой, и потом компилить) &lt;br /&gt; 2. Так, как я &lt;br /&gt; Я опишу способ, которым пользуюсь я. Открываем папку с X-Ray SDK. Далее открываем файл xrLC блокнотом, удаляем все оттуда и вписываем это: &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;@start bins&amp;#92;compiler&amp;#92;xrLC.exe -f mp_atp_test&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Сохраняем и запускаем этот файл. Должен начаться процесс компиляции. &lt;br /&gt; Следующим шагом будет правка конфигов. Править конфиги следует в папке gamedata&amp;#92;config папки SDK, а потом можно перенести файлы в аналогичную папку с игрой. &lt;br /&gt;&lt;br /&gt; Пример: &lt;br /&gt;&lt;br /&gt; game_maps_single.ltx &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;&amp;#91;level_maps_single]&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ...&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; testing_ai&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; //название вашего уровня&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt; &amp;#91;testing_ai]&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; global_rect&amp;nbsp;&amp;nbsp;= -6,1220.0, 248.0,1481.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; texture&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= map&amp;#92;map_escape&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; //текстура при загрузке&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; bound_rect&amp;nbsp;&amp;nbsp;= -502.148,-412.284,379.976,474,479&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; weathers&amp;nbsp;&amp;nbsp;= default&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; game_levels.ltx &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;&amp;#91;levels]&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ...&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; level190&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; //номер вашего уровня&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt; &amp;#91;level190]&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; name&amp;nbsp;&amp;nbsp;&amp;nbsp;= testing_ai&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; caption = &quot;testing_ai&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; offset&amp;nbsp;&amp;nbsp;= 2000.0, 800.0, 1000.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// положение нового уровня на глобальной карте, X, Y, Z&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; id&amp;nbsp;&amp;nbsp;&amp;nbsp;= 190&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; //индентифакционный номер, должен быть уникальным&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt; game_graphs.ltx&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; Code&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; 018&amp;nbsp;&amp;nbsp;&amp;nbsp;= &quot;testing_ai&quot;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Итак, когда карта скомпилирована, а конфиги настроены, открываем AI Compiler и указываем папку с СДК (я надеюсь, вы его уже скачали и настроили). &lt;span style=&quot;color:green&quot;&gt;Примечание&lt;/span&gt;: Если же вы его не скачали, внимательно посмотрите в конце урока ссылку на данную программу, а не кричите на весь форум. &lt;br /&gt; Выбираем mp_atp_test. Проходим 1-ую стадию чернового просчета аи карты(шаг 1), либо если вы хотите долго ждать и просчитать укрытия для НПС то выбираем шаг 2. Далее строим граф и кросс-таблицу уровня шаг 3, потом граф игры шаг 4 и наконец фаил .spawn шаг 5. После всех стадий заходим в gamedata&amp;#92;spawns&amp;#92; и переименовываем test.spawn в mp_atp_test.spawn &lt;br /&gt;&lt;br /&gt; &lt;span style=&quot;color:red&quot;&gt;&lt;b&gt;Важно&lt;/b&gt;&lt;/span&gt; - Если ваш X-Ray SDK НЕ объединён с игрой, то при переносе файлов для старта без вылетов вы должны перенести из папки с X-Ray SDK следующие файлы: &lt;br /&gt; gamedata&amp;#92;config&amp;#92;game_maps_single.ltx &lt;br /&gt; gamedata&amp;#92;config&amp;#92;game_graphs.ltx &lt;br /&gt; gamedata&amp;#92;config&amp;#92;game_levels.ltx &lt;br /&gt; gamedata&amp;#92;levels&amp;#92;папка с вашим уровнем &lt;br /&gt; gamedata&amp;#92;spawns&amp;#92;all.spawn &lt;br /&gt; gamedata&amp;#92;game.graph(этот файл многие не копируют и получают вылет при запуске игры) &lt;br /&gt; Далее в папке со Сталкером создаем bat-файл и вписываем в него такой текст: &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;@start bin&amp;#92;XR_3DA.exe -start server(mp_atp_test/single/alife&amp;#41; client(localhost&amp;#41;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Сохраняем, запускаем и радуемся новой локации. На этом все, спасибо за внимание.&lt;!--/ust--&gt;&lt;!--usn(=Основы)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; Список необходимых программ: &lt;br /&gt; &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/load/ai_compiler_build_0_1_1_1/19-1-0-253&quot; target=&quot;_blank&quot;&gt;AiCompiler 0.1&lt;/a&gt; от Neo (инструкция по установке прилагается) &lt;br /&gt; &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/load/programmy/prochie_programmy/x_ray_sdk_0_4/19-1-0-150&quot; target=&quot;_blank&quot;&gt;SDK 0.4&lt;/a&gt; от GSC</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-272-1</guid>
		</item>
		<item>
			<title>Видеоуроки by Wo1fRam</title>
			<link>https://book-mod.3dn.ru/forum/24-211-1</link>
			<pubDate>Mon, 01 Jul 2013 08:43:39 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Описание темы: Объясняю всё чётко и понятно&lt;br /&gt;Автор темы: Wo1fRam&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 3</description>
			<content:encoded>Доброго времени суток, коллеги модостроители! &lt;br /&gt; Как вы знаете, в Интернете полным полно уроков по модостроению, но действительно хороших уроков (таких как у Genior-а) можно по пальцам пересчитать. Что-то мне стукнуло в голову, и я тоже захотел записать несколько видеоуроков. Но я не буду рассматривать такие темы, как, например, добавление новой музыки в главное меню, или ковыряние параметров костюмов... Вместе мы подключим к игре новую локацию и будем на ней проводить всякие эксперименты. Например, мы создадим дверь, которая будет открываться при помощи рычага (вспомните SGM SoC - там таким образом открывалась дверь Сидоровича). Основной упор делаю на ТЧ, но на ЗП тоже будут уроки. Тем более, большая часть того, что я буду рассказывать и показывать, можно применить и к ЗП. &lt;br /&gt;&lt;br /&gt; &lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color:red&quot;&gt;&lt;span style=&quot;font-size:22pt;&quot;&gt;&lt;b&gt;Тень Чернобыля&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerceig89&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerceig89&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerceig89&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerceig89&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerceig89&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Урок 1. Создаём локацию-полигон. Перенос из мультиплеера в сингл.&apos;);$(&apos;#uSpoilerceig89&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerceig89&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerceig89&apos;)).val(&apos;[+] Урок 1. Создаём локацию-полигон. Перенос из мультиплеера в сингл.&apos;);$(&apos;#uSpoilerceig89&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Урок 1. Создаём локацию-полигон. Перенос из мультиплеера в сингл.&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scr02Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/f_M_KPLCLYY&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scr02Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt;&lt;!--/ust--&gt;&lt;!--usn(=Урок 1. Создаём локацию-полигон. Перенос из мультиплеера в сингл.)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerfSc9j4&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerfSc9j4&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerfSc9j4&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerfSc9j4&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerfSc9j4&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Урок 2. Двери. Дверь с рычагом. Разные варианты кодовых дверей&apos;);$(&apos;#uSpoilerfSc9j4&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerfSc9j4&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerfSc9j4&apos;)).val(&apos;[+] Урок 2. Двери. Дверь с рычагом. Разные варианты кодовых дверей&apos;);$(&apos;#uSpoilerfSc9j4&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Урок 2. Двери. Дверь с рычагом. Разные варианты кодовых дверей&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; Превью двери с рычагом &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scr12Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/i3jry7LEpYg&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scr12Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt;&lt;br /&gt; Разбираемся с дверями. Создаём дверь, открывающуюся при помощи рычага &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scr22Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/LVNWiATf3qE&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scr22Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt;&lt;br /&gt; Разные варианты кодовых дверей &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scr32Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/CAvbWfVRUm0&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scr32Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt;&lt;!--/ust--&gt;&lt;!--usn(=Урок 2. Двери. Дверь с рычагом. Разные варианты кодовых дверей)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerRI4ZG_&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerRI4ZG_&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerRI4ZG_&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerRI4ZG_&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerRI4ZG_&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Урок 3. Логика НПС&apos;);$(&apos;#uSpoilerRI4ZG_&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerRI4ZG_&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerRI4ZG_&apos;)).val(&apos;[+] Урок 3. Логика НПС&apos;);$(&apos;#uSpoilerRI4ZG_&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Урок 3. Логика НПС&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; Way-points и их функции. Создаём патрульных и охранника &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scr42Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/VcLF2YXosOA&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scr42Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt;&lt;br /&gt; Создаём посиделки у костра &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scr52Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/aRgmdhTDOao&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scr52Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt;&lt;br /&gt; Создание нового НПС. Схема [meet] &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scr62Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/lUJ6_e-4QSo&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scr62Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt;&lt;br /&gt; Так как в слудующем уроке надо будет писать диалоги, то выпущу я его после окончания блока уроков по диалогам. &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Урок 3. Логика НПС)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoiler78XKaR&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoiler78XKaR&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler78XKaR&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler78XKaR&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler78XKaR&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Урок 4. Диалоги&apos;);$(&apos;#uSpoiler78XKaR&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler78XKaR&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler78XKaR&apos;)).val(&apos;[+] Урок 4. Диалоги&apos;);$(&apos;#uSpoiler78XKaR&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Урок 4. Диалоги&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; Знакомство с диалогами. Создаём и модифицируем простой диалог &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scr72Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/N0o8H6QQTZ8&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scr72Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt;&lt;br /&gt; Создание сложных многоступенчатых диалогов. Функция выдачи предметов и денег &lt;!--BBvideo--&gt;&lt;span id=&quot;scr82Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/H20Aeu43sJQ&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scr82Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Урок 4. Диалоги)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerExLO4o&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerExLO4o&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerExLO4o&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerExLO4o&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerExLO4o&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Бонус&apos;);$(&apos;#uSpoilerExLO4o&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerExLO4o&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerExLO4o&apos;)).val(&apos;[+] Бонус&apos;);$(&apos;#uSpoilerExLO4o&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Бонус&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; Пускайте слюнки и ждите урока &lt;img src=&quot;http://s51.ucoz.net/sm/23/tongue.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;tongue&quot; /&gt; &quot;Запорожец-самоходка&quot; &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scr92Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/Y6IufjBuacE&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scr92Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;!--/ust--&gt;&lt;!--usn(=Бонус)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; &lt;span style=&quot;font-size:16pt;&quot;&gt;&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color:green&quot;&gt;Маленькие полезности&lt;/span&gt;&lt;/div&gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerk_C36E&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerk_C36E&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerk_C36E&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerk_C36E&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerk_C36E&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Спавн предметов в инвентарь ТЧ как в ЗП&apos;);$(&apos;#uSpoilerk_C36E&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerk_C36E&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerk_C36E&apos;)).val(&apos;[+] Спавн предметов в инвентарь ТЧ как в ЗП&apos;);$(&apos;#uSpoilerk_C36E&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Спавн предметов в инвентарь ТЧ как в ЗП&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; Ага, через файлик character_desc_general.xml &lt;br /&gt; Но есть один момент - не обязательно компилить граф. Это я так, для надёжности &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scra2Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/AaztStfYTuk&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scra2Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Спавн предметов в инвентарь ТЧ как в ЗП)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerZ3va2q&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerZ3va2q&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerZ3va2q&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerZ3va2q&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerZ3va2q&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Если в СДК не открываются диалоговые окна&apos;);$(&apos;#uSpoilerZ3va2q&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerZ3va2q&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerZ3va2q&apos;)).val(&apos;[+] Если в СДК не открываются диалоговые окна&apos;);$(&apos;#uSpoilerZ3va2q&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Если в СДК не открываются диалоговые окна&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; Пример на Windows 8 Pro x64 - мне сталкерин не помог &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scrb2Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/9-uoYUYKlfg&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scrb2Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt; А недавно мы изобрели фикс для этих самых окон. &lt;br /&gt; Авторы: dezodor, Alwen &lt;br /&gt; Тестеры: Alwen, Wo1fRam &lt;br /&gt; Установка: открыть архив, запустить инсталлятор, указать путь в папку bins вашего СДК. Перезагружать комп не обязательно. Если будут проблемы - пишите мне в личку (Wo1fRam) или на мыло: &lt;a href=&quot;mailto:gleborlov95@gmail.com&quot; class=&quot;link&quot;&gt;gleborlov95@gmail.com&lt;/a&gt; &lt;br /&gt; Скачать: &lt;a class=&quot;link&quot; href=&quot;http://u.to/r62tAw&quot; title=&quot;http://yadi.sk/d/-PQgXQGf5dx8d&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Яндекс.Диск&lt;/a&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Если в СДК не открываются диалоговые окна)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; &lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color:red&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size:22pt;&quot;&gt;Зов Припяти&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt; &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerNDWW22&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerNDWW22&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerNDWW22&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerNDWW22&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerNDWW22&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Правильная установка и настройка X-Ray SDK 0.7&apos;);$(&apos;#uSpoilerNDWW22&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerNDWW22&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerNDWW22&apos;)).val(&apos;[+] Правильная установка и настройка X-Ray SDK 0.7&apos;);$(&apos;#uSpoilerNDWW22&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Правильная установка и настройка X-Ray SDK 0.7&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scrc2Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/lbrZ7O3csKE&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scrc2Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Правильная установка и настройка X-Ray SDK 0.7)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerWWETRz&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerWWETRz&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerWWETRz&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerWWETRz&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerWWETRz&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Декомпиляция билдовских локаций&apos;);$(&apos;#uSpoilerWWETRz&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerWWETRz&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerWWETRz&apos;)).val(&apos;[+] Декомпиляция билдовских локаций&apos;);$(&apos;#uSpoilerWWETRz&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Декомпиляция билдовских локаций&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;!--BBvideo--&gt;&lt;span id=&quot;scrd2Hf1vsKMo&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;http://youtu.be/UViD0fYJZDU&apos;,&apos;width&apos;:&apos;425&apos;,&apos;height&apos;:&apos;355&apos;},&apos;scrd2Hf1vsKMo&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt; &lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Декомпиляция билдовских локаций)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerxjd3bq&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerxjd3bq&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerxjd3bq&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerxjd3bq&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerxjd3bq&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Статья. Создание тайников в Зове Припяти&apos;);$(&apos;#uSpoilerxjd3bq&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerxjd3bq&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerxjd3bq&apos;)).val(&apos;[+] Статья. Создание тайников в Зове Припяти&apos;);$(&apos;#uSpoilerxjd3bq&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Статья. Создание тайников в Зове Припяти&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;a class=&quot;link&quot; href=&quot;http://u.to/86qtAw&quot; title=&quot;http://yadi.sk/d/TRPfcRMp51j2C&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Ссылка на скачивание (*.doc)&lt;/a&gt; &lt;br /&gt; В документе все коды и имена файлов повыделял разными цветами, дабы не путаться. &lt;br /&gt;&lt;br /&gt; &lt;div align=&quot;center&quot;&gt;&lt;b&gt;КАК СОЗДАТЬ СВОЙ ТАЙНИК&lt;/b&gt; &lt;br /&gt; в Зове Припяти&lt;/div&gt; &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Автор:&lt;/b&gt; Wo1fRam &lt;br /&gt;&lt;br /&gt; &lt;b&gt;От автора:&lt;/b&gt; &lt;br /&gt; Подобные уроки не раз встречались на различных форумах и на сталкерине. Но, они были какими-то сухими. Это вставить туда, это сюда... А зачем, почему, что это даст?.. Кто на эти вопросы ответит? В данном туторе я попытался объяснить всё как можно подробнее. &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Внимание!&lt;/b&gt; &lt;br /&gt; Данный тутор рассчитан на тех, кто имеет представление о работе в X-Ray SDK, а именно: работа со спавн-элементами, компиляция спавна. &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Инструменты и оборудование:&lt;/b&gt; &lt;br /&gt; 1. Настроенный X-Ray SDK 0.7. &lt;br /&gt; 2. Файлы: configs&amp;#92;misc&amp;#92;secret_zaton.ltx &lt;br /&gt; 2. Прямые руки и голова (желательно с мозгами внутри &lt;img src=&quot;http://s51.ucoz.net/sm/23/smile.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;smile&quot; /&gt; ). &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Вступление:&lt;/b&gt; &lt;br /&gt; В ЗП система тайников была сильно переработана. Это не бездонный рюкзак, в который может поместиться сколько угодно вещей. Это просто лежащие в укромном местечке предметы, при поднятии которых появляется сообщение «Найден тайник». &lt;br /&gt; Такой тайник сделать очень просто при наличии вышеперечисленных инструментов. Ковыряние all.spawn мы разбирать не будем, поскольку это уже «прошлый век». &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Работа:&lt;/b&gt; &lt;br /&gt; Итак, открываем в СДК, к примеру, Затон. Ищем место, где хотим сделать тайник. Спавним предметы (например, калаш, 3 пачки патронов к нему, аптечку и бутылку водки). Затем выделяем их и в графе “Custom Data” пишем: &lt;br /&gt;&lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;&amp;#91;secret] &lt;br /&gt; name = zat_hiding_place_my&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt;&lt;br /&gt; Здесь [secret] – это секция, указывающая на то, что эти вещи являются тайником; zat_hiding_place_my – имя нашего тайника. &lt;br /&gt; И не забудьте в свойствах предметов снять галочки с параметров “Used AI locations”, “Useful for AI” и “Visible for AI”. Это нужно, чтобы предметы появились в нужном месте и чтобы их никто не спионерил. &lt;br /&gt;&lt;br /&gt; Также рядом с тайником нужно разместить спейс-рестриктор. Имя его должно быть zat_hiding_place_my, то есть которое мы указали в свойствах предметов. В “Custom Data” пишем следующее: &lt;br /&gt;&lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;&amp;#91;secret] &lt;br /&gt; cfg = misc&amp;#92;secret_zaton.ltx&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt;&lt;br /&gt; Здесь [secret] – секция, указывающая на то, что этот рестриктор контролирует тайник; cfg = misc&amp;#92;secret_zaton.ltx – ссылка на файл с описанием тайника. &lt;br /&gt; Также снимаем галочку с параметра “Used AI locations”, чтобы рестриктор мог находиться вне АИ-сетки, и ставим тип рестриктора “NOT A restrictor”. &lt;br /&gt;&lt;br /&gt; Всё, работа в СДК закончена. Сохраняем, компилируем спавн. &lt;br /&gt;&lt;br /&gt; Теперь перейдём к настройке конфигов. Помните, мы в свойствах рестриктора писали ссылку на файл? Так вот, открываем этот файл (configs&amp;#92;misc&amp;#92;secret_zaton.ltx) и в конце секции [list_zaton] пишем имя нашего тайника: &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;zat_hiding_place_my&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;. Это мы зарегистрировали наш тайник. Теперь создадим его описание. Для этого в самом конце файла создадим следующую секцию: &lt;br /&gt;&lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;&amp;#91;zat_hiding_place_my] &lt;br /&gt; wpn_ak74 = 1, 1 &lt;br /&gt; ammo_5.45x39_fmj = 3, 1 &lt;br /&gt; medkit = 1, 1 &lt;br /&gt; vodka = 1, 1&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt;&lt;br /&gt; Теперь разберёмся что к чему: в квадратных скобках написано название тайника; wpn_ak74 – это предмет (в данном случае калаш); первое число – количество предметов; второе – я так и не понял зачем оно нужно, поэтому лучше писать 1). &lt;br /&gt;&lt;br /&gt; Вот и всё. Сохраняем изменения и бежим тестировать! &lt;br /&gt;&lt;br /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Статья. Создание тайников в Зове Припяти)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt;&lt;br /&gt; Пока всё. Работа над уроками продолжается. &lt;br /&gt;&lt;br /&gt; &lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;color:yellow&quot;&gt;&lt;span style=&quot;font-size:20pt;&quot;&gt;&lt;b&gt;Удачи в моддинге!&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>Wo1fRam</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-211-1</guid>
		</item>
		<item>
			<title>Создание terrain плоскости (асфальт, земля и трава)</title>
			<link>https://book-mod.3dn.ru/forum/24-206-1</link>
			<pubDate>Sun, 19 May 2013 11:42:27 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 1</description>
			<content:encoded>&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerSROy5O&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerSROy5O&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerSROy5O&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerSROy5O&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerSROy5O&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Развернуть свиток знания&apos;);$(&apos;#uSpoilerSROy5O&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerSROy5O&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerSROy5O&apos;)).val(&apos;[+] Развернуть свиток знания&apos;);$(&apos;#uSpoilerSROy5O&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Развернуть свиток знания&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;b&gt;Внимание &lt;/b&gt; &lt;br /&gt; Данный тутор не является правильным. Этот вариант создания terrain поверхности удобен только при создании карт с качеством сборки - draft. При изменении качества, могут появится проблемы: &lt;br /&gt; -Долгое компилирование &lt;br /&gt; -Слишком детализированная поверхность &lt;br /&gt; В ближайшее время исправлю эту статью. Приношу свои извинения. &lt;br /&gt; &lt;b&gt;Инвентарь&lt;/b&gt; &lt;br /&gt; — Adobe Photoshop &lt;br /&gt; — 3d редактор &lt;br /&gt; — &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/load/programmy/prochie_programmy/x_ray_sdk_0_4/19-1-0-150#&quot; target=&quot;_blank&quot;&gt;SDK&lt;/a&gt; &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Создание Текстур &lt;/b&gt; &lt;br /&gt; В Photoshop’е создаем новый холст размером 1024x1024 пикс. (также возможны и другие размеры, в зависимости от геометрии создаваемой плоскости). Здесь можно отобразить такие детали ландшафта, как асфальтовая дорога, овраг, яму, лужу и др. Для рисования terrain’а очень удобно использовать уже готовые рисунки из игры + применять небольшие навыки пользования Photoshop’ом . А именно использовать такой инструмент, как «печать» (печать узором); кто не умеет — может нарисовать что-нибудь и попроще. &lt;br /&gt; Сохраняем этот файл в трех экземплярах, задавая разные имена, в формате .tga (32 bin). Так как нам необходимо отразить три типа поверхности (асфальт, землю и траву), сохраняем их с пометками, чтобы далее не запутаться. (Пример: terrain_test_asph, terrain_test_earth, terrain_test_grass). &lt;br /&gt; P.S. При рисовании текстур необходимо учитывать масштаб создаваемой поверхности, иначе могу возникнуть проблемы с размерами. «Создавали 4 полосную дорогу, а получилась тропинка». &lt;br /&gt;&lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/4974751.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s4974751.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt; Нарисованная текстура (справа) &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Моделирование&lt;/b&gt; &lt;br /&gt; В 3d редакторе создаем три одинаковые (в моем случае квадратные) плоскости. Далее начинаем разбираться с материалами. Нам необходимо создать 3 материала, к каждому из которых будет присвоен один из наших рисунков, а эти материалы к нашим плоскостям. Теперь настраивая Xray материал, сверяемся с нашими пометками, то есть: плоскость с текстурой terrain_test_asph – материал асфальта, плоскость с текстурой terrain_test_ earth – материал земли, а плоскость с текстурой terrain_test_grass – материал травы.(Пресеты XRay материалов) &lt;br /&gt;&lt;br /&gt; &lt;!--IMG2--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/9752675.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s9752675.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG2--&gt; &lt;br /&gt; Создание трех плоскостей. &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Асфальт &lt;/b&gt; &lt;br /&gt; Берем ту плоскость, к которой применены настройки и текстура асфальта(asph), вырезаем и выделяем нужные нам полигоны и с помощью инструмента Extrude (выдавливание) поднимаем их на несколько сантиметров. Лишние полигоны можно удалить. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG3--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/1234555.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s1234555.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG3--&gt; &lt;br /&gt; Вырезание полигонов &lt;br /&gt;&lt;br /&gt; &lt;!--IMG4--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/8153179.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s8153179.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG4--&gt; &lt;br /&gt; Выдавливание асфальта &lt;br /&gt;&lt;br /&gt; &lt;!--IMG5--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/8317892.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s8317892.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG5--&gt; &lt;br /&gt; Удаление полигонов &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Яма&lt;/b&gt; &lt;br /&gt; Теперь выбираем плоскость с текстурой и настройками земли(earth) и создаем из нее в нужном нам участке небольшое углубление, а края ямки необходимо слегка приспустить, чтобы не было наложения. И также лишние полигоны удаляются. Но так как наша яма уходит ниже уровня «земли» - в плоскости с текстурой и настройками травы(grass) вырезаем ненужные полигоны. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG6--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/8096492.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s8096492.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG6--&gt; &lt;br /&gt; Вырезание полигонов. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG7--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/3339573.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s3339573.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG7--&gt; &lt;br /&gt; Моделирование ямы &lt;br /&gt;&lt;br /&gt; &lt;!--IMG8--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/4945542.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s4945542.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG8--&gt; &lt;br /&gt; Вырез &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Сборка&lt;/b&gt; &lt;br /&gt; Осталось только совместить наши детали так, что бы не было никаких дыр, и экспортировать в формат .object. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG9--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/1397256.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s1397256.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG9--&gt; &lt;br /&gt; Совмещение&lt;!--/ust--&gt;&lt;!--usn(=Развернуть свиток знания)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-206-1</guid>
		</item>
		<item>
			<title>Создаем HOM, порталы и сектора</title>
			<link>https://book-mod.3dn.ru/forum/24-204-1</link>
			<pubDate>Fri, 17 May 2013 15:39:59 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Описание темы: Автор: Haron, коррекция - BAC9-FLCL&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoiler3sSKmY&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoiler3sSKmY&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3sSKmY&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3sSKmY&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler3sSKmY&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Пам-парам-пам-пам&apos;);$(&apos;#uSpoiler3sSKmY&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3sSKmY&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler3sSKmY&apos;)).val(&apos;[+] Пам-парам-пам-пам&apos;);$(&apos;#uSpoiler3sSKmY&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Пам-парам-пам-пам&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;Для работы нам понадобится X-Ray SDK. &lt;br /&gt; Для начала, зачем оно нужно: &lt;br /&gt; HOM - расшифровывается как Hierarchical Occlusion Mapping, или маппинг иерархических отсечений. Что это значит: упрощённо говоря, с помощью HOM, можно повысить производительность рендеринга сложных уровней на ~20%. &lt;br /&gt; Как работает HOM: Не вдаваясь в технические подробности, объясню упрощённо: то, что закрыто от игрока Occlusion&apos;ом - процессор не обрабатывает, а видеокарта не рендерит - а значит, система экономит свои ресурсы, производительность при этом, естественно, возрастает. &lt;br /&gt; Секторы и порталы: про них - читаем &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/forum/24-203-1&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt; - разъяснено очень просто и доступно. Могу лишь добавить, что в X-Ray 3D Engine, геометрия уровня в построении секторов не участвует, он использует для этого HOM-объекты. &lt;br /&gt; Вывод: Все эти заморочки позволяют практически двухкратно поднять производительность системы, и благодарные юзеры с не слишком сильными компами (а таких большинство), будут таскать вас на руках за такой шикарный подарок &lt;img src=&quot;http://s51.ucoz.net/sm/23/wink.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;wink&quot; /&gt; &lt;br /&gt; 1. Делать всё это, актуально для действительно сложных и мощных карт, так как не только поднимет скорость в итоге, &lt;br /&gt; но и позволит напихать в карту, побольше всякой интересной геометрии. &lt;br /&gt;&lt;br /&gt; 2. Изложенные выше принципы, актуальны не только для сталкера, но и для подавляющего большинства современных игр. &lt;br /&gt; Например, лучше всего это всё дело с порталами и секторами продумано на играх на движке Sourse (Half-Life 2 и т. д.) &lt;br /&gt; Итак, приступаем к креативу! &lt;br /&gt; Допустим, есть у вас карта, на которой надо сделать всё вышеперечисленное. Как это сделать, я объясню на примере старого доброго кубика, сделаем ему HOM, поставим на карту, и создадим порталы с секторами. &lt;br /&gt; Начнём с HOM. &lt;br /&gt; Вот наша карта, на ней кубик, надо для него сделать HOM. &lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/4499565.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s4499565.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt; Чтобы сделать HOM, сбрасываем сцену, и идём в Библиотеку статической геометрии, находим там наш кубик. У меня он находится по адресу editor&amp;#92;shadertest_box, вы можете заюзать свой. &lt;br /&gt; &lt;!--IMG2--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/3087584.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s3087584.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG2--&gt; &lt;br /&gt; Теперь, этот кубик, там же, в библиотеке, экспортим в формат LWO, чтобы стереть все настройки материалов, на базе экспортированного объекта мы и сделаем HOM, и материалы с шейдерами ему ни к чему: обозвал я его shadertest_box_occ, (OCC - значит окклюдер, отсекатель). &lt;br /&gt; &lt;!--IMG3--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/1801465.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s1801465.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG3--&gt; &lt;br /&gt; Всё, экспортировали. Теперь импортируем его обратно, заходим в настройки объекта, в поле Object Type (тип объекта), меняем его тип со Static на HOM, выходим с настроек и сохраняем изменения. Тут же - видим, вид нашего кубика - изменился, теперь - он стал HOM-объектом. &lt;br /&gt; &lt;!--IMG4--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/9572189.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s9572189.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG4--&gt; &lt;br /&gt; Теперь - загружаем снова нашу карту, выбираем режим &quot;объекты&quot;, в самом низу, жмём кнопку &quot;обновить список&quot;, чтобы в нём появился новый объект, и добавляем наш окллюдер на карту, как обыкновенный объект. &lt;br /&gt; &lt;!--IMG5--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/5406162.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s5406162.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG5--&gt; &lt;br /&gt; Осталось только &quot;подогнать&quot; (двигая, вращая и т. д...) окклюдер под имеющийся кубик как можно точнее. &lt;br /&gt; &lt;!--IMG6--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/1904502.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s1904502.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG6--&gt; &lt;br /&gt; Всё! HOM-окклюдер для объекта успешно создан. Таким-же образом, можно (и нужно) поступить со всеми объектами на карте, но создавать окклюдеры лучше всего - ещё в 3DSMax, в виде неких &quot;упрощённых муляжей&quot; для создаваемых объектов. Хотя можно и так как я описал выше. &lt;br /&gt; Секторы и порталы необходимо генерировать после того, как сборка карты закончена, все объекты на месте, окклюдеры установлены, и т.д. Короче, перед самой прекомпиляцией. Делаются они очень просто, так как в SDK - возможности по ним весьма убогие, а многие так и вообще &quot;временно отключены&quot;. Но создавать их можно. &lt;br /&gt; Итак: &lt;br /&gt; Переходим в режим Секторы и создаём базовые порталы, нажав соответствующую кнопку. Если объектов много, целесообразно &quot;проверить на правильность&quot; одноимённой кнопкой. Сектора созданы. &lt;br /&gt; &lt;!--IMG7--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/3719156.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s3719156.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG7--&gt; &lt;br /&gt; Переходим в режим &quot;порталы&quot; и &quot;вычисляем все порталы&quot;. &lt;br /&gt; &lt;!--IMG8--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/1576079.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s1576079.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG8--&gt; &lt;br /&gt; Всё. Occlusion Mapping - сделан, сектора созданы, а порталы к ним вычислены. Спасибо за внимание.&lt;!--/ust--&gt;&lt;!--usn(=Пам-парам-пам-пам)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-204-1</guid>
		</item>
		<item>
			<title>Доклад о порталах и секторах</title>
			<link>https://book-mod.3dn.ru/forum/24-203-1</link>
			<pubDate>Fri, 17 May 2013 15:35:19 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerDMXZQv&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerDMXZQv&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerDMXZQv&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerDMXZQv&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerDMXZQv&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Тыщ-пыщ-пыщ&apos;);$(&apos;#uSpoilerDMXZQv&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerDMXZQv&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerDMXZQv&apos;)).val(&apos;[+] Тыщ-пыщ-пыщ&apos;);$(&apos;#uSpoilerDMXZQv&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Тыщ-пыщ-пыщ&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;Введение &lt;br /&gt; В статье рассматривается несколько точных методов деления уровня на секторы, а также предлагается приблизительный “корпускулярный” метод. &lt;br /&gt; Благодарности: огромное спасибо Zemedelec’у (Сергею Милойкову) за разрешение представить в приложении описание двух его методов, а также за полезные/ценные советы. &lt;br /&gt;&lt;br /&gt; 1. Понятия портала и сектора &lt;br /&gt; Прежде чем говорить о каких-то методах и математических алгоритмах, попытаемся определить сами понятия портала и сектора. &lt;br /&gt; Чтобы было полегче, представим себе следующую картинку: посреди поляны стоит хижина без крыши. Подойдите к любому человеку, покажите ему эту картинку и попросите выделить на ней два сектора. В ответ человек гарантированно разграничит то, что внутри хижины и то, что снаружи. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/2/9184541.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/2/s9184541.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt;&lt;br /&gt; Почему так происходит? Что делает эти две области секторами? &lt;br /&gt; Как мне кажется, самый легкий способ “формально” ответить на этот вопрос – это выразить понятие сектора через понятие портала. &lt;br /&gt; Итак, сектор – это связная пустая замкнутая область, ограниченная статической геометрией и порталами. На нашей картинке секторами являются, как и следовало ожидать, внутренность хижины и пространство вокруг нее. Проиллюстрируем приведенное выше определение на внутренности хижины: &lt;br /&gt;&lt;br /&gt; 1) Внутренность хижины связная (т.е. не имеет изолированных друг от друга участков). &lt;br /&gt; 2) Внутренность хижины пустая. &lt;br /&gt; 3) Внутренность хижины замкнута, т.е. ограничена статической геометрией (стены, пол) и порталами (дверь и отсутствующая плоская крыша). &lt;br /&gt;&lt;br /&gt; Но при таком раскладе остается главный вопрос – что же такое портал? А вот определение портала мне вывести не удалось. Максимум, что получается, звучит примерно так: портал – это объект, связывающий два сектора. Но такое определение бессмысленно, так как мы уже определили сектор через портал. &lt;br /&gt; Поэтому я думаю так: портал – это объект, интуитивно воспринимаемый человеком как связывающий две области. Т.е. портал становится понятием нижнего уровня, вроде понятия множества в математике. Как следствие, здесь я не буду приводить каких-то мыслей по поводу поиска порталов и предположу, что они задаются дизайнерами на этапе моделирования. &lt;br /&gt;&lt;br /&gt; 2. Поиск границы сектора &lt;br /&gt; Если дизайнер уже выделил порталы на этапе моделирования, то на плечи программиста возлагается единственная задача: определить, на какие сектора оказался разделен уровень. Посмотрим на выведенное нами определение. Сектор – это область. Что значит задать область? В математике это значит задать (можно неявно, в виде уравнения) функцию, описывающую границу области. &lt;br /&gt; Посмотрим на обычный BSP-алгоритм: мы строим для созданного уровня BSP-дерево, потом описываем вокруг уровня ограничивающий куб и «спускаем» его по дереву вниз. Когда процесс «спускания» окончен, собираем висящие на листьях объедки и склеиваем их в сектора. &lt;br /&gt; Фактически, BSP-алгоритм находит плоскости, ограничивающие сектор. Иными словами, он неявно, в виде набора уравнений задает функцию, описывающую границу сектора. То есть BSP-алгоритм формально, в классическом смысле задает область, которой является сектор. Есть еще два интересных алгоритма, позволяющих определить границу сектора (автор обоих – Zemedelec), их описания представлены в приложении. &lt;br /&gt;&lt;br /&gt; 3. Поиск множества точек: “корпускулярный” метод winter’а &lt;br /&gt; Но что делать, если нам не нужно задавать границы секторов точно? Что если мы все равно собираемся описать вокруг каждого сектора ограничивающий куб и в дальнейшем использовать для всех проверок только его? &lt;br /&gt; Тогда поиск точной границы сектора оказывается избыточной операцией. Остается единственный вариант. Еще раз вспоминаем определение: сектор – это область. А что есть область, если отвлечься от ее границы? Множество точек. &lt;br /&gt; Сущность “корпускулярного” метода заключается в том, чтобы приблизительно задать множество точек, принадлежащее сектору, и описать ограничивающий куб вокруг этого множества. &lt;br /&gt; Хорошее приближение для точки в трехмерном пространстве – это, как известно, аксиальный (с гранями, параллельными главным осям) кубик. Тогда общий контур алгоритма будет выглядеть так: &lt;br /&gt;&lt;br /&gt; 1) Берем некоторый портал. Предположим, что это абстрактный четырехугольник. &lt;br /&gt; 2) Строим по обеим сторонам от портала два маленьких кубика заданного размера. &lt;br /&gt; 3) Для каждого кубика: &lt;br /&gt; а) Определяем, попадает ли в него какая-либо геометрия или порталы (поскольку кубик аксиальный, проверка проходит очень быстро). &lt;br /&gt; б) Если кубик пуст, для него строятся “соседи”. &lt;br /&gt; 4) Повторяем шаг 3) до тех пор, пока поток новых кубиков не иссякнет. &lt;br /&gt; 5) Описываем вокруг каждого множества кубиков большой ограничивающий куб (если сектор велик, можно и восьмеричное дерево). &lt;br /&gt;&lt;br /&gt; Таким образом, кубики заполняют все внутреннее пространство двух секторов, соединяемых порталом. Этот процесс можно представить себе примерно так: мы запускаем в нашу хижину цемент, который медленно заполняет все ее внутреннее пространство. Потом ждем, пока цемент застынет, “извлекаем” его из хижины и снимаем с него форму. &lt;br /&gt;&lt;br /&gt; 4. Приложение &lt;br /&gt; А теперь, обещанные точные алгоритмы поиска границы сектора. Автор обоих — Zemedelec (Сергей Милойков). &lt;br /&gt;&lt;br /&gt; Метод лучевой маркировки &lt;br /&gt; 1) Производим операцию маркировки первый раз: берем некоторый портал и испускаем из него лучи. Находим несколько полигонов, видимых из данного портала; найденные полигоны маркируются как принадлежащие новому сектору. &lt;br /&gt; 2) Перебираем таким образом все порталы. &lt;br /&gt; 3) Операция маркировки повторяется для только что отмаркированных полигонов – теперь уже они испускают лучи. Если некоторый маркированный полигон, принадлежащий сектору B, “видит” немаркированный полигон A, то полигон A тоже маркируется – приписывается сектору B. &lt;br /&gt; 4) Количество маркированных полигонов постепенно растет; когда их станет достаточно много, операция маркировки повторяется для оставшихся немаркированными полигонов. &lt;br /&gt;&lt;br /&gt; Т.е. вначале порталы находят несколько полигонов и маркируют их; потом маркированные полигоны находят “собратьев по сектору”; наконец, когда “собратьев” станет достаточно много, их обделенные вниманием товарищи начнут искать, к какому сектору им нужно прибиться. Алгоритм действует по принципу: меньшинству всегда легче увидеть большинство. &lt;br /&gt; Сущность метода лучевой маркировки можно выразить двумя словами: если полигон A “видит” один из полигонов сектора B, то он тоже принадлежит сектору B. &lt;br /&gt;&lt;br /&gt; Метод “хождения по ребрам” &lt;br /&gt; Этот метод — самый простой из всех, но и наиболее требовательный к геометрии. &lt;br /&gt; 1) Создаем пустой список для полигонов сектора. &lt;br /&gt; 2) Выбираем один из полигонов, смежных с порталом, и добавляем его в список. &lt;br /&gt; 3) Для каждого полигона из списка добавляем в список полигоны, имеющие с ним общие ребра. &lt;br /&gt;&lt;br /&gt; Т.е. мы начинаем от портала и далее “идем” по ребрам, добавляя полигоны в список сектора. Легко видеть, что этот метод при всей своей простоте требует некоторой “связности” геометрии, и поэтому применять его следует осторожно. &lt;br /&gt;&lt;br /&gt; Послесловие &lt;br /&gt; Если мой “корпускулярный” алгоритм найдет хоть какой-то отклик в народе, я попытаюсь написать еще одну статью, уже на тему Самой Быстрой Проверки пересечения аксиального кубика и полигона. А пока — спасибо всем тем, кто терпеливо прочитал этот документ. До новых встреч (я надеюсь).&lt;!--/ust--&gt;&lt;!--usn(=Тыщ-пыщ-пыщ)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-203-1</guid>
		</item>
		<item>
			<title>Собираем АИ-сетку</title>
			<link>https://book-mod.3dn.ru/forum/24-200-1</link>
			<pubDate>Sun, 12 May 2013 18:25:42 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerVQVyEW&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerVQVyEW&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerVQVyEW&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerVQVyEW&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerVQVyEW&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Пых..&apos;);$(&apos;#uSpoilerVQVyEW&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerVQVyEW&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerVQVyEW&apos;)).val(&apos;[+] Пых..&apos;);$(&apos;#uSpoilerVQVyEW&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Пых..&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;Итак, приступим... Раз вы здесь, значит есть на то причина: &lt;br /&gt; 1) вы нуп, увидевший аи-компилер и решивший забацать что то крутое &lt;br /&gt; 2) вы не нуп, но всё забыли или почти всё &lt;br /&gt; 3) вы супер-аццкий про решивший глянуть на весь этот детсад свысока ) &lt;br /&gt; 4) вы обычный модер, решивший расширить свои текущие познания. &lt;img src=&quot;http://s51.ucoz.net/sm/23/wink.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;wink&quot; /&gt; &lt;br /&gt;&lt;br /&gt; Основы &lt;br /&gt; Ну что ж... начнем с самого простого, скомпилим левел с аи, монстрами на карте mp_atp. Открываем левел.. первое что надо сделать убрать все rpoint(мультиплеерные точки спавна). Убрали? Отлично. Создаем Spawn elements -&gt; actor ну и по желанию в свойствах (Properties) в custom data прописываем ему предположим вот это: &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;[spawn] &lt;br /&gt; wpn_ak74&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; Тем самым при появлении игрока у него в руках уже будет калаш. Далее, создаем монстра... любого по желанию, предположим кровососа и ставим на уровень. Теперь дело за AI map - аи сетка, которая необходима для того, чтобы нпс, монстры могли ориентироваться по уровню. Жмем Object и кликаем на земле(тем самым мы ее &quot;выбрали&quot; для дальнейших манипуляций), затем AI Map -&gt; Commands -&gt; Make list from selected, жмем add в разделе AI Map Nodes и add для добавления объектов слева вверху(чайник) и ставим на карте ноды в нужном вам порядке(достаточно одного), жмем Generate Full. Всё, аи-сетка сгенерированна. Теперь добавляем на левел обязательно! 1 graph point (Spawns-&gt;ai-&gt;graph point), в нем можно ничего не писать. Сохраняем уровень, билдим (build). &lt;br /&gt; Следующим шагом будет правка конфигов. &lt;br /&gt; Пример: &lt;br /&gt; game_maps_single.ltx &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;[level_maps_single] &lt;br /&gt; ... &lt;br /&gt; testing_ai &lt;br /&gt; //название вашего уровня &lt;br /&gt;&lt;br /&gt; [testing_ai] &lt;br /&gt; global_rect = -6,1220.0, 248.0,1481.0 &lt;br /&gt; texture = map&amp;#92;map_escape &lt;br /&gt; //текстура при загрузке &lt;br /&gt; bound_rect = -502.148,-412.284,379.976,474,479 &lt;br /&gt; weathers = default &lt;br /&gt; //погода&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; game_levels.ltx &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;[levels] &lt;br /&gt; ... &lt;br /&gt; level190 &lt;br /&gt; //номер вашего уровня &lt;br /&gt;&lt;br /&gt; [level190] &lt;br /&gt; name = testing_ai &lt;br /&gt; caption = &quot;testing_ai&quot; &lt;br /&gt; offset = 2000.0, 800.0, 1000.0 // положение нового уровня на глобальной карте, X, Y, Z &lt;br /&gt; id = 193 &lt;br /&gt; //идентификационный номер, должен быть уникальным&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; game_graphs.ltx &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;018 = &quot;testing_ai&quot;&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; Теперь открываем AI Compiler, указываем папку с сдк(.../level_editor, либо если он объединен с игрой, путь до нее). Выбираем ваш уровень. Проходим 1ую стадию чернового просчета аи карты(шаг 1), либо если вы хотите долго ждать и просчитать укрытия для нпс то выбираем шаг 2. Далее строим граф и кросс-таблицу уровня шаг 3, потом граф игры шаг 4 и наконец фаил .spawn шаг 5. После всех стадий заходим в gamedata&amp;#92;spawns&amp;#92; и переименовываем test.spawn в all.spawn &lt;br /&gt;&lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt; (&lt;span class=&quot;qName&quot;&gt;&lt;!--qn--&gt;Важные моменты -- Loxotron&lt;!--/qn--&gt;&lt;/span&gt;)&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt; &lt;br /&gt; При правке конфигов не забывайте указывать реально существующую там погоду и картинку загрузки, иначе вылетит; также не пытайтесь запустить уровень через .bat фаил, подобный указанному ниже, тоже будет вылет &lt;br /&gt; bin&amp;#92;xr_3da.exe -ltx user.ltx -nointro -external -start server(level/single) client(localhost) &lt;br /&gt; Правильный .bat фаил &lt;br /&gt; @start bin&amp;#92;XR_3DA.exe -start server(%1/single/alife) client(localhost) &lt;br /&gt; %1 - название левела &lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt;&lt;br /&gt; Углубленное изучение &lt;br /&gt; Далее мы рассмотрим как собирать несколько уровней и устанавливать между ними переходы. &lt;br /&gt; Итак у вас два уровня... на одном из них стоит actor. Начнем с него: создаем ai-&gt;level changer, затем shape-&gt;sphere, с помощью scale увеличиваем до необходимых размеров, теперь переключаемся в режим редактирования spawn element, выделяем level changer и жмем commands-&gt;attach object, а затем кликаем на сферу... Всё, сфера и level changer теперь связаны. Далее идем в закладку properties, указываем название, например to_atp_2, теперь нужно прописать в custom data вейпоинт для возврата, в случае отказа игрока от перемещения с локации на локации(обязательно). Вписываем вот это: &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;[pt_move_if_reject] &lt;br /&gt; path = atp_1_way_if_reject &lt;br /&gt; //в случае отказа от перемещения на вторую локу, возвращаемся назад&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; В Level to change вписываем наименование уровня, куда мы хотим переместиться с этого левела, например atp_2. В Level Point to change указываем точку, в которой игрок появится... start_actor_01. С level changer на этом уровне всё, пошли далее. Создаем graph point или используем пустой существующий если у вас есть. В него вписываем start_actor_01, этот поинт для того чтобы мы смогли со второго левела atp_2 перейти на atp_1(первый). Создаем еще один graph point c названием exit_atp_1_01, в разделе location выбираем, например &quot;экскейп&quot;. В Connection -&gt; Level name указываем уровень, с которым будет связан atp_1, то есть выбираем atp_2, в Connection-&gt;Point Name вписываем точку связи из второго уровня, которую мы создадим потом exit_atp_2_01. С первым уровнем всё... &lt;br /&gt; Для чего нам нужен graph point&apos;ы exit_xxx? exit_xxx представляет собой connection_point(точку связи) - для того, чтобы компилятор знал, какие уровни он соединяет, а если по другому: начальный граф уровня, от него потом считаются все ноды. &lt;br /&gt; start_actor_xx - точка появления актера после перехода. &lt;br /&gt; Помните мы вписали в custom data level changer&apos;а вейпоинт? Вот теперь нам придется его создать. Выбираем Way Points -&gt; жмем &quot;чайник&quot; и стави 1 вейпоинт рядом с level changer(так мы создали начальную точку пути), теперь жмем point mode и ставим второй. Если они не соеденились стрелочкой, жмем create 1-link. Теперь у нас получился путь, который мы прописали в custom data level changer, заходим в свойства и обзываем его также как и в custom data, тоесть atp_1_way_if_reject. Всё с первым уровнем покончили. &lt;br /&gt; Итак, открываем второй уровень и поехали по новой... &lt;br /&gt; Создаем там путь из двух вейпоинтов по схеме выше и обзываем atp_2_way_if_reject. Создаем level changer называем его to_atp_1, в custom data пишем &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;[pt_move_if_reject] &lt;br /&gt; path = atp_2_way_if_reject //название вэйпоинта&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; В level to change указываем atp_1 //куда переходим с atp_2 В level point to change - start_actor_01(дада, тот который мы создали на первом левеле &lt;img src=&quot;http://s51.ucoz.net/sm/23/smile.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;smile&quot; /&gt; ) &lt;br /&gt; Теперь здесь же на atp_2 создаем graph point с названием start_actor_01. И еще один где вписываем следущие значения: &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;Name: exit_atp_2_01 &lt;br /&gt; Location: &quot;свалка&quot; //наименование локации &lt;br /&gt;&lt;br /&gt; Connection: &lt;br /&gt; Level name: atp_1 //первый уровень &lt;br /&gt; Point name: exit_atp_1_01 //связующая точка с первого уровня&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; Незабудьте, что ACTOR должен быть только на одной локации(в нашем случае на atp_1), иначе компилятор выдаст ошибку. Всё!... Сохраняем, прекомпилим. &lt;br /&gt; Запускаем Ai Compiler, выбираем по очереди наши два уровня и просчитываем шаг 1, проверям сетку. Теперь создаем текстовый документ и вписываем туда &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;@start /wait bins&amp;#92;ai&amp;#92;1.exe -g atp_1 &lt;br /&gt; @start /wait bins&amp;#92;ai&amp;#92;1.exe -g atp_2&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; сохраняем его как .bat и запускаем, в результате у каждого уровня появится свой level.graph(граф и кросс-таблица). &lt;br /&gt; Создаем еще один текстовик, пишем &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;@start /wait bins&amp;#92;ai&amp;#92;1.exe -m&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; сохраняем как .bat и стартуем. Так мы собрали game.graph из level.graph&apos;ов. &lt;br /&gt; И наконец.. создаем 3ий &quot;бантик&quot; для сборки all.spawn! &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;bins&amp;#92;ai&amp;#92;1.exe -s&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; Компилим, заходим в gamedata&amp;#92;spawns&amp;#92;, переименовываем получившийся спавн в all.spawn и запускаем через новую игру. Как видите, вы можете перемещаться с уровня на уровень, туда сюда без каких-либо проблем. &lt;br /&gt; Чуть не забыл, обязательно временно, на время компиляции переместите все остальные левелы игры кроме ваших в любую другую папку, иначе могут быть ошибки при сборе графов и спавна. &lt;br /&gt; Для сборки всех сингл уровней из оригинальной игры используйте bat фаил: fullgame.bat Если будут ошибки связанные с алайфом, жмем продолжить. Потом выполняйте процедуры как написано выше, сборка game.graph, а затем all.spawn. &lt;br /&gt; Добавляем наш уровень в сингл-плеер! &lt;br /&gt; Такс, продолжаем. Мне таки удалось наконец-то совместить свой тестовый левел с картами гсц. Итак приступим. Во первых нам необходим левел... свой, подготовленный. Если вы не читали инструкции выше, то дальше вам делать нечего. На нашем левеле должна быть во-первых connection point(соеденительная точка), вписываем в нее параметры данного примера, предположим такие: &lt;br /&gt; Name: point_test_location_escape // название коннекшн-поинта &lt;br /&gt;&lt;br /&gt; Connection &lt;br /&gt; Level Name:L01_Escape //с каким уровнем его связываем &lt;br /&gt; Point Name:esc_graph_point_0034 //соеденительный поинт на эскейпе, как &lt;br /&gt; //его добавить будет объяснено &apos;&apos;&apos;ниже&apos;&apos;&apos;. &lt;br /&gt; Сделали? &lt;br /&gt; Теперь создаем еще один граф на уровне, вписываем просто его имя... например Name: start_actor_01. Обязательно добавляем на уровень какой-нибудь уникальный объект... предположим машину. Зачем, узнаете потом. Но на левеле ни в коем случае не должно быть ACTOR&apos;а!! Сохраняем, прекомпилим левел. Компилим с помощью xrLC весь уровень, теперь открываем AICompiler от нео и выполняем 1 или 2 и 3 шаги в отношении нашего левела. &lt;br /&gt; Теперь нам нужно заручиться ОСОБЫМИ инструментами, в нашем случае понадобится скрипт от бардака, который позволяет узнать при запуске любого левела его level_vertex_id, game_vertex_id, position(координаты игрока в данный момент), direction(координаты направления его &quot;взгляда&quot;), всё это потребуется при работе с acdc несколькими этапами ниже. Загружаем игру, находим подходящее место где хотим видеть в будущем триггер для перехода уровней и записываем все параметры на бумажку, они нам понадобятся потом. По хорошему, желательно отдельно потом еще зайти в LE(level editor), открыть наш уровень, поставив эктора прям на графе с start_actor_01, закомпилировать проект, пройти все шаги компиляции в xraicompiler(1,3,4,5,6), обязательно предварительно забэкапив game.graph, начать новую игру и записать координаты level_vertex_id и direction, но это достаточно нудно и сложно, но желательно, а потом надо будет, вернуть всё в состояние до всех этих действий..., то есть убрать эктора, восстановить оригинальный game.graph. &lt;br /&gt; Итак... у вас обязательно должна быть распакованна вся игра, установлен aiwrapper от бардака(читайте ридми по установке!!!), и aicompiler он нео. &lt;br /&gt; Создаем .bat фаил в папке с aiwrapper&apos;ом с текстом &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;aiwrapper -extract_spawns&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; либо вводим то же в тотал коммандере, с помощью этого ключа мы обновили level.spawn&apos;ы всех сингл-уровней, так как они не обновлялись со времен первого патча. &lt;br /&gt; Теперь изучаем links.sample в блокноте. ничего не поняли? поясняю: aiwrapper обладает полезнейшим ключом -m2. &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;-m2 &lt;файл&gt;	- склеить ИИ-графы карт в глобальный игровой граф с учётом поправок для связей из указанного файла&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; То есть с помощью него мы можем взять любой существующий граф на уровне гсц, который &quot;не занят&quot;, и добавить ему нужные нам значения, например сделать его коннекшн поинтом(соединительной точкой), а потом всё это склеится в общий глобальный game.graph. &lt;br /&gt; Выполняем aiwrapper -dump_graph graphs.txt батом или тоталом. Комманда выведет нам список исходных вершин ИИ-графа в указанный файл, то есть список скомпиленных графов всех сингл-уровней гсц в фаил graphs.txt. Находим там точку esc_graph_point_0034. Видите что она пуста в плане связей в отличии от exit_escape_01,02? Значит мы можем ее использовать, в оригинале разрабы их ставили для путей ботов, то есть по ним перемещается аи, но мы ее заюзаем для связи с нашим тестовым левелом. &lt;br /&gt; Итак, создаем например текстовик links_fixed.txt и вписываем туда &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;[l01_escape] &lt;br /&gt; ; добавляем переход для ИИ с Кордона на тестовый уровень. &lt;br /&gt; esc_graph_point_0034	= test_level_x, point_test_location_escape&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; test_level_x - название нашего уровня. &lt;br /&gt; point_test_location_escape - коннекшн поинт на нашем уровне. То есть мы прописываем у графпоинта на эскейпе эти два параметра, которые превращают его в коннекшн-поинт, связанный с тем, что на нашем левеле; сохраняем текстовик. &lt;br /&gt; Выполняем батом или тотал коммандером: &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;aiwrapper -m2 links_fixed.txt&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; ЗЫЫ Желательно перед этим действом временно переместить куда-нибудь неиспользуемые левелы (мультиплеерные тоже) от греха подальше. Ждем пока соберется game_graph, ошибок быть не должно. &lt;br /&gt;&lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt; (&lt;span class=&quot;qName&quot;&gt;&lt;!--qn--&gt;Важные моменты 2 -- Loxotron&lt;!--/qn--&gt;&lt;/span&gt;)&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;Найден более простой способ вычисления game_vertex_id. В папке utils у компилятора бардака есть тулза ggtool.pl - утилита для показа меж уровневых связей в game.graph. Копируем к утилите откомпилированный game.graph из gamedata&amp;#92; и выполняем прогу (в командной строке или через батник): &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;ggtool.pl game.graph &gt;svyazi.txt&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; В результате в фаиле svyazi.txt в скобках будет указан game_vertex_id для конкретного уровня, таким образом не нужно узнавать dest_game_vertex_id c помощью перекомпилирования. &lt;br /&gt; Пример: l01_escape (0) --1206.29--&gt; l02_garbage (415) &lt;br /&gt; 0 - game_vertex_id, 415 - dest_game_vertex_id, 1206.29 - distance(расстояние между точками), не тот который в level_changer&apos;е, а между connection_point&apos;ами. &lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt;&lt;br /&gt; Теперь дело за all.spawn: &lt;br /&gt; aiwrapper -s &lt;br /&gt; В результате соберется полноценный all.spawn из всех уровней которые есть в папке levels. Но на этом работа только начинается, теперь надо отредактировать этот получившийся all.spawn и добавить level_changer на уровень гсц, чтобы мы смогли перейти с него на наш.(в нашем случае с эскейпа на test_level_x). Копируем получившийся all.spawn в &lt;туда, куда вы распаковали aiwrapper&gt;&amp;#92;utils и создаем .bat с таким текстом: &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;acdc.pl -d all.spawn&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; В результате мы разобрали all.spawn на ltx&apos;сы, нам нужен alife_l01_escape.ltx, вписываем в конец туда это: &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;&amp;#91;не забитый номер] &lt;br /&gt; ;например 9000 &lt;br /&gt; section_name = level_changer&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; name = exit_to_new_location_from_esc &lt;br /&gt; ;любое_название_на_англ, (только не использованное&amp;#41; &lt;br /&gt; position = &lt;br /&gt; ;здесь координаты где находиться левел чейнджер &lt;br /&gt; ;помните бумажку с координатами и параметрами, которую мы писали раньше? &lt;br /&gt; ;смотрим ту где параметры и координаты эскейпа и вписываем &lt;br /&gt; direction = 0,0,0&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;направление &quot;взгляда&quot; игрока &lt;br /&gt; ;по желанию, можно вписать координаты с бумажки &lt;br /&gt; game_vertex_id =&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;номер вершины игрового графа, задаёт первую вершину графа на данной локации &lt;br /&gt; ;с бумажки эскейпа &lt;br /&gt; distance = 14.6999998092651 &lt;br /&gt; ;&quot;Расстояние&quot; между точкой перехода(level_changer&amp;#41; и точкой появления &lt;br /&gt; ;актера на другом уровне (если считать зону неделимой&amp;#41;, можно и 0. &lt;br /&gt; level_vertex_id =&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;Вершина уровневого графа, должно покатить &apos;&apos;&apos;-1&apos;&apos;&apos;, но&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;ставьте лучше то что записано на бумажке с эскейпа &lt;br /&gt; object_flags = 0xffffff3e &lt;br /&gt; custom_data = &lt;&lt;END &lt;br /&gt; &amp;#91;pt_move_if_reject] &lt;br /&gt; path = esc_way_test_if_reject &lt;br /&gt; END &lt;br /&gt; ;custom data, где указано имя вейпоинта, который мы потом создадим&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;на карте с помощью acdc, таже &apos;&apos;&apos;custom data&apos;&apos;&apos;, что в начале&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;статьи. &lt;br /&gt; story_id = &lt;br /&gt; ;поставьте здесь неиспользуемый ID, например 8435 &lt;br /&gt; shapes = shape0 &lt;br /&gt; shape0:type = box &lt;br /&gt; shape0:axis_x = 5.8284006118774,0,0 &lt;br /&gt; shape0:axis_y = 0,5.0005970001221,0 &lt;br /&gt; shape0:axis_z = 0,0,5.3902206420898 &lt;br /&gt; shape0:offset = 0,0,0 &lt;br /&gt; ;сфера, в данном случае куб, именно в нем будет активироваться наш переход &lt;br /&gt; restrictor_type = 3 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;выставляем здесь все переменные для нового уровня &lt;br /&gt; dest_game_vertex_id =&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;номер вершины графа нашей новой локации, туда игрок переместится &lt;br /&gt; ;помните &apos;&apos;&apos;уникальный&apos;&apos;&apos; объект, который я просил вас поставить? &lt;br /&gt; ;открываем &apos;&apos;&apos;alife_lxx_unknown.ltx&apos;&apos;&apos; и ищем тачку, сдираем значение с нее &lt;br /&gt; dest_level_vertex_id = &lt;br /&gt; ;вершина уровнего графа нового левела &lt;br /&gt; ;должно покатить -1, но лучше взять с бумажки с параметрами с тестового левела &lt;br /&gt; dest_position = &lt;br /&gt; ;координаты на нашем уровне, где ты появляешься &lt;br /&gt; ;с бумажки тестового левела, либо наугад, либо используйте открорректированные &lt;br /&gt; ;координаты с любого объекта на вашей карте, то есть например есть дерево &lt;br /&gt; ;c координатами 0, 1 , 2, корректируем относительно дерева и&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;вписываем например 4, 1, 2 &lt;br /&gt; dest_direction = 0,-1.12671363353729,0 &lt;br /&gt; ;направление &quot;взгляда игрока на новом уровне&quot; &lt;br /&gt; ;по желанию &lt;br /&gt; dest_level_name =&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;название вашего уровня, в нашем случае test_level_x &lt;br /&gt; dest_graph_point =&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; ;название точки спавна игрока(графа, то есть в нашем случае &lt;br /&gt; ;start_actor_01&amp;#41;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Еще одно определение двух параметров для непонятливых: &lt;br /&gt; game_vertex_id - ставится как коннекшн поинт (&apos;&apos;&apos;graph_point&apos;&apos;&apos; c соответствующими настройками) &lt;br /&gt; level_vertex_id - &apos;&apos;&apos;graph_point&apos;&apos;&apos; - ставится как обычная граф поинт с уникальным номером без параметров &lt;br /&gt; В них вписываем уникальный ID для каждого уровня, то есть в некоторых случаях просто смотрим эти два параметра у соседних объектов этого левела и вписываем значения. Как правило, level_vertex_id можно поставить -1, но не для всех объектов, game_vertex_id = ид уровня. &lt;br /&gt; Устали? =) А ведь еще не всё, нужно создать вейпоинт, который мы прописали в custom data level changer&apos;а. Открываем way_l01_escape.ltx и вписываем чтото типа: &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;&amp;#91;esc_way_test_if_reject] &lt;br /&gt; points = p0,p1 &lt;br /&gt; ;два вейпоинта &lt;br /&gt; p0:name = name_test1 &lt;br /&gt; ;имя вейпоинта 1 &lt;br /&gt; p0:position = -243.491257,-19.758562,-140.328583 &lt;br /&gt; ;его координаты, ставьте их рядом с координатами level_changer &lt;br /&gt; ;но не в нём, корректируйте их, как в примере с деревом&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; p0:game_vertex_id = 8 &lt;br /&gt; p0:level_vertex_id = -1 &lt;br /&gt; p0:links = p1(1&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt; p1:name = name_test2 &lt;br /&gt; ;имя вейпоинта 2 &lt;br /&gt; p1:position = -255.491257,-19.758562,-140.328583 &lt;br /&gt; ;его координаты, всё тоже самое, только корректируйте относительно позиции &lt;br /&gt; ; вейпоинта 0, как в этом примере. &lt;br /&gt; p1:game_vertex_id = 9 &lt;br /&gt; p1:level_vertex_id = -1&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; Поставили? Всё, осталось только собрать all.spawn, батом или тотал коммандером выполняем это: &lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;acdc.pl -c all.ltx&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt; Теперь копируем получившийся all.spawn.new в gamedata&amp;#92;spawns&amp;#92; и переименовываем его в all.spawn. &lt;br /&gt; Мученья окончились &lt;img src=&quot;http://s51.ucoz.net/sm/23/smile.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;smile&quot; /&gt; Запускайте новую игру и наслаждайтесь вашим переходом... &lt;br /&gt; В заключении &lt;br /&gt; Если вы хотите, чтобы ваша точка перехода отображалась на карте игрока, то лезем в level_tasks.script и добавляем в function add_lchanger_location() секцию, подобную представленной ниже: &lt;br /&gt; &lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzc--&gt;-- test_level_x &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local obj = sim:story_object(8435&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if obj then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;level.map_add_object_spot(obj.id, &quot;level_changer&quot;, &quot;exit_to_new_location_from_esc&quot;&amp;#41; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt; &lt;br /&gt; В строке (obj.id, &quot;level_changer&quot;, &quot;exit_to_new_location_from_esc&quot;) выделенный текст - наименование вашего level_changer, а число - его уникальный story_id на уровне, например на эскейпе или вашем левеле, список занятых story_id смотреть в lua_help.script &lt;br /&gt; Список необходимых программ &lt;br /&gt; &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/load/programmy/prochie_programmy/ai_compiler_build_0_1_1_1/19-1-0-186&quot; target=&quot;_blank&quot;&gt;AiCompiler 0.1 от Neo&lt;/a&gt; &lt;br /&gt; &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/load/programmy/prochie_programmy/ai_wrapper_1_0/19-1-0-187&quot; target=&quot;_blank&quot;&gt;AiWrapper от bardak&apos;а &lt;/a&gt; &lt;br /&gt; Info_LVID_GVID скрипт от bardak&apos;а (живой ссылки не нашел, но есть несколько других способов: &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/forum/5-104-1&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;эта статья&lt;/a&gt; или &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/load/mody/mody_na_tch/position_informer/8-1-0-93#&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;этот мод&lt;/a&gt;) &lt;br /&gt; &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/load/programmy/prochie_programmy/x_ray_sdk_0_4/19-1-0-150&quot; target=&quot;_blank&quot;&gt;SDK 0.4 от GSC &lt;/a&gt; &lt;br /&gt; &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/load/programmy/prochie_programmy/sdk_update_0_3/19-1-0-188&quot; target=&quot;_blank&quot;&gt;SDK Update от Neo + GSC&lt;/a&gt; &lt;!--/ust--&gt;&lt;!--usn(=Пых..)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-200-1</guid>
		</item>
		<item>
			<title>Прозрачные работы.</title>
			<link>https://book-mod.3dn.ru/forum/24-199-1</link>
			<pubDate>Sun, 12 May 2013 16:04:30 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Описание темы: Делаем воду и окна на уровне&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>Введение &lt;br /&gt; В данном уроке попытаюсь показать, как добавить воду на свой уровень, а также застеклить окна в домах. Как всегда я не описываю подробно работу в пакетах 3D моделирования, так как сам только начал их осваивать, но при необходимости могу написать. В принципе всё сводится к назначению соответствующих шейдеров на плоскость(см. «Пресеты XRay материалов»), о чём и пойдёт речь в данном уроке. &lt;br /&gt; Создание геометрии &lt;br /&gt; Запускаем свой любимый пакет 3D моделирования(3D Studio Max &amp;&amp; Maya - если ещё не установлены плагины или пакет не настроен соотв. образом, смотри эту статью по основам создания уровня). Я предпочитаю работать в максе. &lt;br /&gt; Создаём box, размером допустим 10м*10м*0,1м, он будет основой нашего тестового уровня. Сделаем небольшое углубление, это будет у нас типа яма с водой. Тут же создадим стену с оконными проёмами, выглядеть это будет примерно так: &lt;br /&gt;&lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/0929136.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s0929136.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt; Тестовый уровень в максе &lt;br /&gt;&lt;br /&gt; &lt;!--IMG2--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/1044992.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s1044992.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG2--&gt; &lt;br /&gt; Плоскости стёкол и воды &lt;br /&gt; Теперь создадим плоскости(plane) для стекол и водной глади и займёмся назначением материалов. &lt;br /&gt;&lt;br /&gt; Назначение материалов &lt;br /&gt; Более подробно о создании и настройке XRay материала можно почитать всё в той же статье по основам создания уровня. Здесь же я приведу только пресеты для стекла и воды. &lt;br /&gt; Разбиваемое стекло &lt;br /&gt; Double side 	yes &lt;br /&gt; Engine 	models/window &lt;br /&gt; Compiler 	def_vertex &lt;br /&gt; Material 	objects/glass &lt;br /&gt; Вода &lt;br /&gt; Double side 	no &lt;br /&gt; Engine 	effects/water &lt;br /&gt; Compiler 	def_vertex &lt;br /&gt; Material 	material/water &lt;br /&gt; В качестве текстур воды и стекла я взял стандартные текстуры: &lt;br /&gt; * gamedata&amp;#92;textures&amp;#92;water.dds &lt;br /&gt; * gamedata&amp;#92;textures&amp;#92;glas&amp;#92;glas_br_01.dds &lt;br /&gt; Конвертировал их с помощью &lt;a class=&quot;link&quot; href=&quot;http://book-mod.3dn.ru/load/programmy/rabota_s_teksturami/dds2tga_converter/5-1-0-185&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;этой&lt;/a&gt; утилиты. Распакуйте архив в любое место, поместите нужные *.dds файлы в получившуюся папку и запустите CONV_ALL.BAT, в этой же папке появятся файлы *.tga. &lt;br /&gt;&lt;br /&gt; Далее соответственно импортируем уровень и текстуры в редактор, компилируем и в результате получаем в игре результат приведённый на скриншотах ниже. В дальнейших планах улучшить качество стекла, точнее качество эффекта разбития стекла, сейчас это непонятно что. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG3--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/4440450.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s4440450.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG3--&gt; &lt;br /&gt; Тестовый &quot;прозрачный уровень&quot; в редакторе &lt;br /&gt;&lt;br /&gt; &lt;!--IMG4--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/2766555.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s2766555.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG4--&gt; &lt;br /&gt;&lt;br /&gt; &lt;!--IMG5--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/0074399.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s0074399.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG5--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-199-1</guid>
		</item>
		<item>
			<title>Освещение игрового окружения - как и почему</title>
			<link>https://book-mod.3dn.ru/forum/24-197-1</link>
			<pubDate>Sun, 12 May 2013 14:57:47 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>Освещение игрового окружения – как и почему &lt;br /&gt; Теория о том, как осветить ваш уровень. Как интересно настроить и на что обратить внимание. &lt;br /&gt;&lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerIrWwr4&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerIrWwr4&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerIrWwr4&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerIrWwr4&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerIrWwr4&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Тра-та-та&apos;);$(&apos;#uSpoilerIrWwr4&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerIrWwr4&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerIrWwr4&apos;)).val(&apos;[+] Тра-та-та&apos;);$(&apos;#uSpoilerIrWwr4&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Тра-та-та&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;b&gt;Введение &lt;/b&gt; &lt;br /&gt; Освещение – это один из наиболее важных и влиятельных элементов в игровом окружении. Он имеет силу создать или разрушить стиль и атмосферу. Освещение часто забывается или недооценивается. Дизайнеры часто дабавляют его для галочки, без особой любви. В прошлом это было отчасти обусловлено слабым игровым железом и отсутствием надлежащей поддержки в игровых движках, но эти оправдания уже не проходят. Освещение также важно, как и геометрия. Без освещения всё созданное всего лишь набор трёхмерных объектов. Освещение имеет свойство вдыхать жизнь в группу объектов и поднимать их на новый уровень качества. Цель этого лежит дальше, чем просто дать игрокам возможность видеть, где они идут. Это создаёт атмосферу это делает места смотрящимися страшно/уютно или тепло/холодно. Это добавляет трём измерениям чувство объектов и это создаёт композицию и баланс для глаз. До сих пор понимания этого нету у многих игр и уровней, они до сих пор используют белое освещение везде. &lt;br /&gt; Источники света &lt;br /&gt; Самое базовое правило освещения – освещение всегда требует наличие источника освещения. Намного важнее, и это следующее правило: свет должен создаваться источником. Не возможно иметь света на локации без источника его появления, как в этом плохом примере: &lt;br /&gt;&lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/9171253.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s9171253.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt; Пример плохого тона (не повторяйте!). &lt;br /&gt; На данный момент в коридоре достаточно света, но невозможно определить, откуда он берётся. Всё это не правильно и смотрится фальшиво. &lt;br /&gt; Также необходимо избегать дисбаланса степени освещения и размерами его источника. Например, небольшого источника освещающего целую комнаты или коридор, как в этом плохом примере: &lt;br /&gt;&lt;br /&gt; &lt;!--IMG2--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/8504454.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s8504454.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG2--&gt; &lt;br /&gt; Пример плохого освещения: источник слишком мал для такой интенсивности света. &lt;br /&gt; Сохраняйте это в пропорции! &lt;br /&gt; Освещать может что угодно: маленькие или большие лампы, висящие на стенах или с потолка, луна или солнце, кристаллы, лазеры и другие типы хайтек лучей, огонь, зеркала, магические эффекты, водные поверхности отражающие свет, лава или радиоактивные отходы и тп. Всё что может светить – это достойный внимания источник света, со своими характеристиками. &lt;br /&gt; Тоже самое и с яркостью самого источника. Если свет очень яркий, то источник не должен быть тусклым. Он должен быть ярким и, если возможно, иметь эффекты подобные свечению (glow) чтобы подчеркнуть яркость. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG3--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/0570192.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s0570192.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG3--&gt; &lt;br /&gt; Слева плохое дизайнерское решение, справа – хорошее. &lt;br /&gt; С лева плохой пример, потому что лампа смотрится отключенной, в то время как окружение продолжает принимать её освещение. Яркость источника света и яркость освещения окружения должны быть сбалансированы и равны. С этим связан следующий важный момент. Показывайте игрокам – откуда идёт свет. Область возле источника должна смотреться ярче: &lt;br /&gt;&lt;br /&gt; &lt;!--IMG4--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/1096086.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s1096086.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG4--&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;&lt;br /&gt; &lt;!--IMG5--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/6493837.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s6493837.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG5--&gt; &lt;br /&gt; Оттенки температур. &lt;br /&gt; 1600K – это заря и восход солнца 1800K – свеча. 2800K – это обычный свет, 5000K – полдень и так далее. Таким образом шанс того, что свет в игровом окружении будет чисто белым очень мал. &lt;br /&gt; Также стоит заметить что красный на самом деле холоднее голубого. Дуга сварки – голубая потому что она горячее, чем, например, обычный оранжевый огонь. &lt;br /&gt; Тёплый – голубой и холодный – красный – это противоречие тому, что вы будите читать о теплоте цветов. Помните, что голубой только с научной точки зрения горячее, чем красный. Эмоционально красный, вероятно, ощущается теплее голубого. Базовые цветовые ассоциации – это основа чувств. Когда что-то горячо это будет светиться красным в то время, как холодные вещи, такие как вода и лёд – будут голубые. Это определяет перспективу нашего использования этих цветов. Это очень влиятельные клише. &lt;br /&gt; Ещё причина для использования цветов – это композиция. Факт: в большинстве случаев одного цвета не достаточно, необходимо минимум два цвета, иначе создание контраста будет не возможно. Если используется только один цвет освещения, то очень важный цветовой контраст будет потерян и результат может быть весьма пресным. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG6--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/3838622.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s3838622.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG6--&gt; &lt;br /&gt; Пример использования удачного (справа) и неудачного (слева) контраста в освещении. &lt;br /&gt; Переходы очень важны для формы композиции и один цвет не может дать необходимых переходов. Использование цветов необходимо для того, чтобы придать правильный контраст к всё ещё сливающимся объектам. Гармония – легко запоминающийся мир, когда её частью является освещение. Перед тем как быть готовым к работе с цветом, вам необходимо понять – как они работают. Здесь большая разница между обычного использования цветов для текстур и освещения ими локации. &lt;br /&gt; Освещение – это результат RGB, расшифровываемое как Красный (Red), Зелёный (Green) и Голубой (Blue) цвета. &lt;br /&gt; С другой стороны живопись, карандаши, принтеры и тп – это CMY. Они оперируют тремя полностью отличающимися основными цветами: Голубым (Cyan), Пурпурным (Magenta) и Жёлтым (Yellow). Или, просто говоря, голубой красный и жёлтый. &lt;br /&gt; Настоящее отличие в двух системах заключается в принципе создания ими других цветов (то как они смешиваются). Конечный (если смешать все три цвета) CMY цвет будет тёмно чёрный. Думаю объяснения того, что происходит со всеми цветами когда примешать к ним ещё какой-нибудь возвращают нас в школу, поэтому останавливаться на этом не будем. &lt;br /&gt; Другая система RGB является частями белого цвета. Смешивание этих цветов в одной точке, приводит к тому, что эта точка становится белой. &lt;br /&gt; Важнейшая разница для нас в этих системах то, что какая-то точная цветовая комбинация которая хорошо работает в рисовании никогда не сработает в освещении! И наоборот. Использование цветовых комбинаций работающих в CMY для освещения не возможно по двум причинам. &lt;br /&gt; Во-первых, любой цвет — это смесь из трёх базовых цветов. RGB смешивает цвета иначе чем CMY, поэтому и результирующие цвета в этих системах будут отличаться. Например, если голубой и красный в RGB, то мы получим фиолетовый цвет, а в CMY это будет уже немного другой оттенок. &lt;br /&gt; Во-вторых, освещение RGB просто не имеет всех цветов, которые есть в CMY. Конвертирование цветов в этих системах не всегда доступно. В RGB системе нет тёмно жёлтого, тёмно красного и тп. Вы не можете создавать тёмных цветов так как освещение всегда — светлое. Конечно не зависимо от системы смешивания цветов можно уменьшить насыщенность или интенсивность, но ни как не добавить темноту цвета. Чёрного света не бывает. &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;!--IMG7--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/3336462.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s3336462.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG7--&gt; &lt;br /&gt; Неудачные варианты контраста. &lt;br /&gt; Никакой из примеров не смотрится хорошо. Первая картинка слишком однообразна и скучна, так как всё кругом одного цвета. На другой же наоборот переизбыток цветов — что не смотрится гармонично, скорее как случайный набор цветов. Это не желательно. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG8--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/8716839.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s8716839.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG8--&gt; &lt;br /&gt; Сканлайны. &lt;br /&gt; Избегайте слабой или очень грубой композиции. &lt;br /&gt;&lt;br /&gt; &lt;i&gt;Статья не закончена, продолжение следует...&lt;/i&gt;&lt;!--/ust--&gt;&lt;!--usn(=Тра-та-та)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-197-1</guid>
		</item>
		<item>
			<title>Описание шейдеров X-Ray Mtl</title>
			<link>https://book-mod.3dn.ru/forum/24-196-1</link>
			<pubDate>Sun, 12 May 2013 14:49:24 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>Данная таблица взята из официального руководства к SDK &lt;br /&gt; &lt;b&gt;Engine&lt;/b&gt; &lt;br /&gt; Шейдера для статических объектов &lt;br /&gt; default				Основной lightmap shader. &lt;br /&gt; def_vertex				Основной vertex shader. &lt;br /&gt; def_aref				Прозрачность. alpha test - aref (без градиентов). &lt;br /&gt; def_trans				Прозрачность. alpha test - trans (с градиентами). &lt;br /&gt; selflight				Самосветящийся материал. &lt;br /&gt;&lt;br /&gt; Шейдера для динамических объектов &lt;br /&gt; models/model			Основной шейдер. &lt;br /&gt; models/antigas_glass		Шейдер с отражением CubeMap - 1 вариант. &lt;br /&gt; models/artefact			Шейдер с отражением CubeMap - 2 вариант. &lt;br /&gt; models/artefact2			Шейдер с отражением CubeMap - 3 вариант. &lt;br /&gt; models/model_fur		Прозрачность. alpha test - aref (без градиентов). &lt;br /&gt; models/lightplanes		Самосветящийся материал с прозрач. и с эффектом falloff. &lt;br /&gt; models/model_aref		Прозрачность. alpha test - trans (с градиентами). &lt;br /&gt; models/pautina			Материал с прозрачностью и с эффектом falloff. &lt;br /&gt; models/selflight			Основной самосветящийся материал. &lt;br /&gt; models/selflightl			Самосветящийся материал с меньшей интенсивностью. &lt;br /&gt; models/transparent		Прозрачность. &lt;br /&gt; models/weapons			Шейдер с отражением CubeMap - 4 вариант. &lt;br /&gt; models/window			Полупрозрачный шейдер с отражением CubeMap. &lt;br /&gt; effects/water			Шейдер чистой воды. &lt;br /&gt; effects/waterstuden		Шейдер болота. &lt;br /&gt; effects/waterryaska		Шейдер ряски. &lt;br /&gt; terrain/asfalt			Шейдер terrain, асфальт. &lt;br /&gt; terrain/grass			Шейдер terrain, трава. &lt;br /&gt; terrain/sand			Шейдер terrain, земля. &lt;br /&gt;&lt;br /&gt; Compiler &lt;br /&gt; default				Основной lightmap shader. &lt;br /&gt; def_vertex				Основной vertex shader. &lt;br /&gt; def_ghost				Lightmap shader без collision. &lt;br /&gt; def_kolizion_vertex		Специальный шейдер невидимой геометрии. &lt;br /&gt;&lt;br /&gt; Material &lt;br /&gt; Игровые шейдера для статических объектов &lt;br /&gt; default				Основной материал. &lt;br /&gt; material/asphalt			Материал асфальта. &lt;br /&gt; material/bricks			Материал кирпичной кладки. &lt;br /&gt; material/bush			Материал куста. &lt;br /&gt; material/cloth			Материал ткани. &lt;br /&gt; material/concrete		Материал бетона. &lt;br /&gt; material/death			Материал убивающий персонажа. &lt;br /&gt; material/dirt			Материал вязкой грязи. &lt;br /&gt; material/earth			Материал земли. &lt;br /&gt; material/fake			Невидимый материал ограничивающий перемещение. &lt;br /&gt; material/fake_ladders		Невидимая плоскость лестницы. &lt;br /&gt; material/flooring_tile		Материал кафельной плитки. &lt;br /&gt; material/glass			Материал стекла. &lt;br /&gt; material/grass			Материал травы (используется на текстуре terrain). &lt;br /&gt; material/gravel			Материал гравия. &lt;br /&gt; material/metal			Материал массивного, непробиваемого металла. &lt;br /&gt; material/metall_pipe		Материал металлической трубы. &lt;br /&gt; material/metal_plate		Материал листового, пробиваемого металла. &lt;br /&gt; material/sand			Материал песка. &lt;br /&gt; material/setka_rabica		Материал металлической сетки. &lt;br /&gt; material/shifer			Материал шифера и толи. &lt;br /&gt; material/stucco			Материал штукатурка. &lt;br /&gt; material/tin			Материал жестянки. &lt;br /&gt; material/tree_trunk		Материал ствола дерева. &lt;br /&gt; material/water			Материал воды. &lt;br /&gt; material/wood			Материал толстого деревянного изделия. &lt;br /&gt; material/wooden_board	Материал деревянных досок. &lt;br /&gt; &lt;br /&gt; Игровые шейдера для динамических объектов &lt;br /&gt; default_object			Основной материал. &lt;br /&gt; objects/barrel			Материал бочки. &lt;br /&gt; objects/bottle			Материал маленького стекла. &lt;br /&gt; objects/bullet			Материал пули. &lt;br /&gt; objects/car_cabine		Материал кабины автомобиля. &lt;br /&gt; objects/car_wheel		Материал шин автомобиля. &lt;br /&gt; objects/clothes			Материал ткани. &lt;br /&gt; objects/concrete_box		Материал бетона. &lt;br /&gt; objects/dead_body		Материал мёртвого тела. &lt;br /&gt; objects/fuel_can			Материал канистры с топливом. &lt;br /&gt; objects/glass			Материал стекла. &lt;br /&gt; objects/knife			Материал ножа. &lt;br /&gt; objects/large_furnitura		Материал деревянных изделий. &lt;br /&gt; objects/large_metal_trash	Материал массивного металла. &lt;br /&gt; objects/large_weapon		Материал автоматов. &lt;br /&gt; objects/metal_box		Материал листового металла. &lt;br /&gt; objects/monster_body		Материал мертвых монстров. &lt;br /&gt; objects/small_box		Материал маленьких металлических объектов. &lt;br /&gt; objects/small_metal_trash		Материал маленького металлического мусора. &lt;br /&gt; objects/small_weapon			Материал пистолетов. &lt;br /&gt; objects/tin_can				Материал жестянки.</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-196-1</guid>
		</item>
		<item>
			<title>Настройка сцены в LevelEditor</title>
			<link>https://book-mod.3dn.ru/forum/24-195-1</link>
			<pubDate>Sun, 12 May 2013 10:00:28 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerFBYl6q&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerFBYl6q&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerFBYl6q&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerFBYl6q&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerFBYl6q&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Ололо-Трололо&apos;);$(&apos;#uSpoilerFBYl6q&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerFBYl6q&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerFBYl6q&apos;)).val(&apos;[+] Ололо-Трололо&apos;);$(&apos;#uSpoilerFBYl6q&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Ололо-Трололо&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; Введение &lt;br /&gt; LevelEditor является компоновщиком. &lt;br /&gt; Системы координат между Maya и LevelEditor незначительно отличаются. &lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/6162230.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s6162230.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt; Слева - система координат Maya, справа - система координат LevelEditor &lt;br /&gt; Добавление текстур &lt;br /&gt; General issues &lt;br /&gt; Добавляемые текстуры должны быть в &lt;br /&gt; .tga &lt;br /&gt; формате (могут содержать альфа канал). Имена текстур составляются по такому шаблону: &lt;br /&gt; имядериктории_имятекстуры &lt;br /&gt;&lt;br /&gt; (если создать текстуру с именем user_blablabla.tga, то при импорте она добавится в папку под именем user). &lt;br /&gt; При добавлении текстуры через LevelEditor, редактор (LevelEditor) выполняет такие действия: &lt;br /&gt; •	user_blablabla.tga &lt;br /&gt; текстура копируется в директорию &lt;br /&gt; X:&amp;#92;rawdata&amp;#92;textures&amp;#92;user&amp;#92; &lt;br /&gt; •	Создаётся файл описания с расширением &lt;br /&gt; user_blablabla.thm &lt;br /&gt; в директории &lt;br /&gt; X:&amp;#92;rawdata&amp;#92;textures&amp;#92;user&amp;#92; &lt;br /&gt; •	Создаётся &lt;br /&gt; user_blablabla.dds &lt;br /&gt; файл в директории &lt;br /&gt; X:&amp;#92;gamedata&amp;#92;textures&amp;#92;user&amp;#92; &lt;br /&gt; •	В файл &lt;br /&gt; X:&amp;#92;gamedata&amp;#92;textures&amp;#92;textures.ltx &lt;br /&gt; записывается информация о текстуре &lt;br /&gt; user_blablabla.dds &lt;br /&gt; Необходимые действия для добавления текстур &lt;br /&gt; &lt;flash&gt;file=movie_01.swf|width=800|height=620|quality=medium|menu=false&lt;/flash&gt; &lt;br /&gt; •	Копируем новую текстуру в папку &lt;br /&gt; X:&amp;#92;import&amp;#92; &lt;br /&gt; •	Запускаем LevelEditor &lt;br /&gt; •	Images -&gt; check new textures &lt;br /&gt;&lt;br /&gt; &lt;!--IMG2--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/0865792.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s0865792.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG2--&gt; &lt;br /&gt; Добавление новой текстуры &lt;br /&gt;&lt;br /&gt; •	Делаем необходимые настройки &lt;br /&gt; •	Нажимаем ОК &lt;br /&gt; Удаление текстур &lt;br /&gt; •	Запускаем LevelEditor &lt;br /&gt; •	Images -&gt; Image Editor &lt;br /&gt; •	Выбираем текстуру, которую необходимо удалить &lt;br /&gt;&lt;br /&gt; &lt;!--IMG3--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/6511091.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s6511091.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG3--&gt; &lt;br /&gt; Удаление текстуры &lt;br /&gt; •	Жмём Remove Texture -&gt; yes -&gt; ok &lt;br /&gt; •	Images -&gt; Image Editor -&gt; Rebuild Association -&gt; yes -&gt; ok &lt;br /&gt;&lt;br /&gt; Создание сцены &lt;br /&gt; Добавление объектов из библиотеки LevelEditor&apos;a &lt;br /&gt; •	Edit Mode -&gt; Object -&gt;Select &lt;br /&gt; •	Выбираем необходимый объект. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG4--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/9605142.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s9605142.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG4--&gt; &lt;br /&gt; Выбор объекта из библиотеки &lt;br /&gt; •	Жмём Add и добавляем в сцену. &lt;br /&gt; Spawns Setup &lt;br /&gt; General issues &lt;br /&gt; В игре существует 3 типа мультиплеерной игры: &lt;br /&gt; •	DeathMatch &lt;br /&gt; •	TeamDeathMatch (только 2 команды) &lt;br /&gt; •	ArtefactHunt &lt;br /&gt; Максимальное количество игроков - 32. &lt;br /&gt; DeathMatch Setup &lt;br /&gt; Добавляем в сцену необходимое количество $rpoint &lt;br /&gt; (Edit Mode -&gt; Spawn Element -&gt; $rpoint) &lt;br /&gt; элементов с базовой настройкой. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG5--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/0255671.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s0255671.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG5--&gt; &lt;br /&gt; Базовая настройка для $rpoint &lt;br /&gt; TeamDeathMatch Setup &lt;br /&gt; •	Добавляем в сцену необходимое количество $rpoint (Edit Mode -&gt; Spawn Element -&gt; $rpoint) элементов с базовой настройкой. &lt;br /&gt; •	В случае если необходимо сделать $rpoint, принадлежащим только одной команде, меняем параметр &lt;br /&gt; Team: 1 или 2 &lt;br /&gt; , и &lt;br /&gt; Game Type: TeamDeathMatch &lt;br /&gt; (работает только в версии 1.003). В этом случае все $rpoint с базовыми настройками будут служить как spectator place. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG6--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/7978241.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s7978241.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG6--&gt; &lt;br /&gt; TeamDeathMatch настройка для $rpoint &lt;br /&gt; ArtefactHunt Setup &lt;br /&gt; Создание баз &lt;br /&gt; •	Создайте два box shapes ( &lt;br /&gt; Edit Mode -&gt; Shape -&gt; Box &lt;br /&gt; ), в тех местах где будут располагаться противоборствующие базы. &lt;br /&gt; •	Расположите в каждом $team_base ( &lt;br /&gt; Edit Mode -&gt; Spawn Element -&gt; $team_base &lt;br /&gt; ) внутри box shapes. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG7--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/4537376.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s4537376.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG7--&gt; &lt;br /&gt; ArtefactHunt настройка для $team_base &lt;br /&gt; •	Выбрать $team_base. &lt;br /&gt; •	Нажать &lt;br /&gt; Commands -&gt; Attach Object &lt;br /&gt; … &lt;br /&gt; •	Выбрать необходимый Shape. &lt;br /&gt; Добавление spawn point членов команды &lt;br /&gt; •	Добавляем в сцену необходимое количество $rpoint в пределах box shape 1ой команды с такими настройками: &lt;br /&gt;&lt;br /&gt; &lt;!--IMG8--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/2875359.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s2875359.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG8--&gt; &lt;br /&gt; ArtefactHunt настройка для $rpoint (игроки) &lt;br /&gt; •	Аналогично для 2ой команды, только параметр Team меняем на 2. &lt;br /&gt; Добавление командных частиц (символизирует границы базы команды) &lt;br /&gt; •	Добавляем в сцену необходимое количество $rpoint в пределах box shape 1ой команды с такими настройками: &lt;br /&gt;&lt;br /&gt; &lt;!--IMG9--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/4442533.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s4442533.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG9--&gt; &lt;br /&gt; ArtefactHunt настройка для $rpoint (частицы) &lt;br /&gt; •	Аналогично для 2ой каманды, только параметр Team меняем на 2. &lt;br /&gt; Добавление spawn point артефактов &lt;br /&gt; Добавляем в сцену необходимое количество $rpoint с такими настройками: &lt;br /&gt;&lt;br /&gt; &lt;!--IMG10--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/1842806.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s1842806.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG10--&gt; &lt;br /&gt; ArtefactHunt настройка для $rpoint (артефакты)&lt;!--/ust--&gt;&lt;!--usn(=Ололо-Трололо)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-195-1</guid>
		</item>
		<item>
			<title>Добавляем аномалии на уровень</title>
			<link>https://book-mod.3dn.ru/forum/24-185-1</link>
			<pubDate>Fri, 03 May 2013 19:47:54 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerb3vdEc&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerb3vdEc&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerb3vdEc&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerb3vdEc&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerb3vdEc&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Добавляем аномалии на уровень&apos;);$(&apos;#uSpoilerb3vdEc&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerb3vdEc&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerb3vdEc&apos;)).val(&apos;[+] Добавляем аномалии на уровень&apos;);$(&apos;#uSpoilerb3vdEc&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Добавляем аномалии на уровень&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; В данном уроке освещён вопрос работы с аномалиями. &lt;br /&gt; Приступим. Чтобы добавить аномалию, необходимо, чтобы редактор находился в режиме редактирования: &quot;Spawn Element&quot;(Edit Mode -&gt; Spawn Element). В списке spawns перейдём в категорию zones. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/6358861.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s6358861.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt; Инструмент Add &lt;br /&gt; В качестве примера разместим на нашей карте «Комариную плешь» средней мощности (mosquito bald average). Чтобы добавить объект на карту необходимо выбрать инструмент Add(сверху, на панели инструментов, либо нажатием горячей клавиши &quot;A&quot;), затем выбираем аномалию и щёлкаем на карте. Должен появится белый флажок. Далее нам необходимо определить область действия аномалии. Переключаемся на режим редактирования: &quot;Shape&quot;(Edit Mode -&gt; Shape) и добавляем сферу(Sphere). С помощью инструмента Scale устанавливаем нужные размеры области поражения аномалии(сферы). &lt;br /&gt;&lt;br /&gt; &lt;!--IMG2--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/5922723.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s5922723.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG2--&gt; &lt;br /&gt; Создание аномалии &lt;br /&gt;&lt;br /&gt; &lt;!--IMG3--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/9080084.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s9080084.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG3--&gt; &lt;br /&gt; Добавляем сферу на уровень &lt;br /&gt;&lt;br /&gt; У нас есть аномалия, есть область её действия, теперь необходимо их связать, для этого переключаемся на режим редактирования: &quot;Spawn Element&quot;, выбираем нашу аномалию и в разделе Commands щёлкаем на Attach Object. После этого щёлкаем на нашей сфере, флаг должен переместится в центр сферы. Наша аномалия почти готова, с помощью инструмента Move(T) размещаем её, где нам необходимо. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG4--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/4279817.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s4279817.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG4--&gt; &lt;br /&gt; Связывание аномалии и области действия &lt;br /&gt;&lt;br /&gt; &lt;!--IMG5--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/8041484.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s8041484.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG5--&gt; &lt;br /&gt; Размещение аномалии там, где необходимо &lt;br /&gt;&lt;br /&gt; &lt;!--IMG6--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/3232161.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s3232161.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG6--&gt; &lt;br /&gt; Задаём удобное имя для нашей аномалии &lt;br /&gt; Теперь перейдем непосредственно к редактированию свойств нашей «Плеши». Дадим нашей аномалии какое-нибудь удобное имя. Все остальные свойства можно не изменять &lt;br /&gt;&lt;br /&gt; &lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt; (&lt;span class=&quot;qName&quot;&gt;&lt;!--qn--&gt;Изменение свойств объекта&lt;!--/qn--&gt;&lt;/span&gt;)&lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight&lt;5?this.style.height:scrollHeight&gt;200?&apos;200px&apos;:&apos;&apos;+(this.scrollHeight+5)+&apos;px&apos;);&quot;&gt;&lt;!--uzq--&gt;Существует несколько способов получить доступ к свойствам объекта: &lt;br /&gt; 1) Щёлкаем правой кнопкой на объекте, выбираем Properties... &lt;br /&gt; 2) Горячая клавиша &quot;Enter&quot; &lt;br /&gt; 3) Tools -&gt; Properties &lt;br /&gt; Во всех случаях открывается Object Inspector, позволяющий менять свойства объектов.&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt; &lt;br /&gt;&lt;br /&gt; Осталось внести нашу аномалию в список аномалий карты. Для этого перейдем в редактирование свойств сцены. Ищем свойство Custom data, жмем на три маленькие точки и для каждого типа игры вводим следующие параметры, например для deathmatch-а: &lt;br /&gt; [deathmatch_game_anomaly_sets] &lt;br /&gt; permanent = &lt;название аномалии&gt; (в нашем случае это zone_mosquito_bald_average_1) &lt;br /&gt;&lt;br /&gt; &lt;!--IMG7--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/5713956.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s5713956.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG7--&gt; &lt;br /&gt; Вносим нашу аномалию в список аномалий карты &lt;br /&gt; Всё, наша аномалия готова.&lt;!--/ust--&gt;&lt;!--usn(=Добавляем аномалии на уровень)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-185-1</guid>
		</item>
		<item>
			<title>Добавление аномалий и костров</title>
			<link>https://book-mod.3dn.ru/forum/24-184-1</link>
			<pubDate>Fri, 03 May 2013 19:21:29 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 1</description>
			<content:encoded>&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerilFIkc&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerilFIkc&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerilFIkc&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerilFIkc&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerilFIkc&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Добавление аномалий&apos;);$(&apos;#uSpoilerilFIkc&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerilFIkc&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerilFIkc&apos;)).val(&apos;[+] Добавление аномалий&apos;);$(&apos;#uSpoilerilFIkc&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Добавление аномалий&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; &lt;b&gt;Первый способ&lt;/b&gt; &lt;br /&gt; Edit Mode -&gt; Group -&gt;Select &lt;br /&gt; Выбираем необходимую аномалию. &lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/5407495.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s5407495.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt; (Выбор группы из библиотеки) &lt;br /&gt; Жмём Add и добавляем в сцену. &lt;br /&gt; &lt;!--IMG2--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/8786530.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s8786530.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG2--&gt; &lt;br /&gt; (Добавление группы в сцену) &lt;br /&gt; &lt;b&gt;Второй способ&lt;/b&gt; &lt;br /&gt; Добавляем Spawn элемент аномалии &lt;br /&gt; &lt;!--IMG3--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/2381411.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s2381411.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG3--&gt; &lt;br /&gt; (Spawn элемент аномалии Gravi) &lt;br /&gt;&lt;br /&gt; Переименовываем аномалию &lt;br /&gt; &lt;!--IMG5--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/3824373.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s3824373.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG5--&gt; &lt;br /&gt; (Переименовываем аномалию на gravi_zone_average_1) &lt;br /&gt; Для определения области поражения аномалии используются Shape элементы &lt;br /&gt; &lt;!--IMG6--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/0998197.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s0998197.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG6--&gt; &lt;br /&gt; (Создания shape&apos;а аномалии) &lt;br /&gt; Выбираем нашу аномалию gravi_zone_average_1 в сцене и соединяем её с Shape элементом &lt;br /&gt; $IMAGE7$ &lt;br /&gt; (Присоединяем аномалию к shape&apos;у)&lt;!--/ust--&gt;&lt;!--usn(=Добавление аномалий)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-184-1</guid>
		</item>
		<item>
			<title>Глобальное озеленение, добавляем траву на уровень</title>
			<link>https://book-mod.3dn.ru/forum/24-183-1</link>
			<pubDate>Fri, 03 May 2013 18:41:22 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://book-mod.3dn.ru/forum/24&quot;&gt;Уроки по X-Ray SDK&lt;/a&gt;&lt;br /&gt;Автор темы: WurDalaK&lt;br /&gt;Автор последнего сообщения: WurDalaK&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>В данном туториале я попытаюсь научить вас работать с детальными объектами. Пока это только трава и листья, но можно добавить мусор, который был в первых билдах, но конечно при наличии соответствующих моделей. &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoiler3l1TJn&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoiler3l1TJn&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3l1TJn&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3l1TJn&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler3l1TJn&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Теория&apos;);$(&apos;#uSpoiler3l1TJn&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler3l1TJn&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler3l1TJn&apos;)).val(&apos;[+] Теория&apos;);$(&apos;#uSpoiler3l1TJn&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Теория&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; В комплекте пакета SDK идёт уже откомпилированный и настроенный список детальных объектов(Detail List), файл SDK/rawdata/detail_list.dti. Смысл Detail List заключается в привязке детальных объектов к цвету нарисованной особым образом текстуры, которая определяет положение и тип детального объекта на уровне. &lt;br /&gt; Структура текстуры: &lt;br /&gt; Цвет - определяет типа объекта в соответствии с Detail List. &lt;br /&gt; Альфа канал - определяет плотность объектов. &lt;br /&gt; Не люблю теорию, поэтому переходим к практике, лучше один раз сделать, чем сто раз прочитать &lt;img src=&quot;http://s51.ucoz.net/sm/23/smile.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;smile&quot; /&gt; &lt;!--/ust--&gt;&lt;!--usn(=Теория)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt; &lt;br /&gt; &lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerkuu6pE&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerkuu6pE&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerkuu6pE&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerkuu6pE&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerkuu6pE&apos;)).val(&apos;[&amp;#92;&amp;#8211;] Практика&apos;);$(&apos;#uSpoilerkuu6pE&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerkuu6pE&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerkuu6pE&apos;)).val(&apos;[+] Практика&apos;);$(&apos;#uSpoilerkuu6pE&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;[+] Практика&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt; &lt;br /&gt; Надеюсь у вас уже есть свой уровень на который вы хотите добавить траву и листья, я возьму свой тестовый уровень. &lt;br /&gt;&lt;br /&gt; &lt;!--IMG1--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/5955934.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s5955934.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG1--&gt; &lt;br /&gt; (Level Editor с загруженным уровнем) &lt;br /&gt; Рисуем детальную текстуру &lt;br /&gt; &lt;!--IMG2--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/5086351.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s5086351.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG2--&gt; &lt;br /&gt; (Загрузка списка детальных объектов) &lt;br /&gt; &lt;!--IMG3--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/2331369.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s2331369.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG3--&gt; &lt;br /&gt; (Детальная текстура) &lt;br /&gt; Первым делом надо нарисовать детальную текстуру для своего уровня, для чего она смотри в разделе &quot;Теория&quot;. Перед тем как начать рисовать, узнаем какими же цветами мы можем рисовать, для этого: &lt;br /&gt; 1. В Level Editore переключимся на режим редактирования детальных объектов; &lt;br /&gt; 2. В группе DO Commands, нажмём Object List. Откроется редактор Detail Objects; &lt;br /&gt; 3. Загрузим уже настроенный список деталей(SDK/rawdata/detail_list.dti). &lt;br /&gt; После загрузки списка в правой колонке вы увидите цвета и соответствующие им объекты, можно создавать новые цвета и им присваивать произвольные объекты, это даёт возможность иметь различные объекты в любых сочетаниях. Ну что ж, теперь мы знаем какому цвету что соответствует можем приступить и к рисованию. Запустим Photoshop, создадим новый файл размером 512х512. Вообще размер может быть любым кратным степени двойки, т.е. 128х128, 512х512, 1024х1024 и т.д. &lt;br /&gt; Начинаем рисовать расположение объектов на уровне в соответствии с тем цветом, который назначен в редакторе Detail Objects. Напомню, что альфа канал отвечает за плотность объектов. Мой вариант текстуры можно увидеть справа(рисовал для наглядности). &lt;br /&gt; Сохраняем получившуюся текстуру в папку SDK/import в формате Targa(TGA - 32bit/px, без сжатия). &lt;br /&gt; Применяем детальную текстуру к уровню &lt;br /&gt; &lt;!--IMG4--&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/7127402.jpg&quot; align=&quot;&quot; /&gt;&lt;!--IMG4--&gt; &lt;br /&gt; (Редактор нашёл текстуру) &lt;br /&gt; &lt;!--IMG5--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/5741896.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s5741896.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG5--&gt; &lt;br /&gt; (Свойства детальных объектов) &lt;br /&gt; &lt;!--IMG6--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/0119806.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s0119806.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG6--&gt; &lt;br /&gt; (Диалог импорта текстур) &lt;br /&gt;&lt;br /&gt; Переходим к работе с Level Editor-ом. Сначала добавим нашу текстуру в редактор, Images -&gt; Check New Textures. Данная команда заставляет редактор просмотреть папку SDK/Import и добавить новые файлы в Texture List. Не меняя ничего в диалоге импорта текстур нажимаем ОК. Всё теперь наша карта есть в списке текстур редактора. Напоминаю, что редактор должен быть в режиме работы с детальными объектами. &lt;br /&gt; Лезем Tools-&gt;Properties, либо просто нажимаем &quot;Enter&quot;, если не меняли настройки горячих клавиш. В свойствах детальных объектов нам необходимо выбрать в качестве базовой текстуры нашу, щёлкаем по полю Base Texture. Откроется диалог Select Texture, в котором находим нашу текстуру. &lt;br /&gt; &lt;!--IMG7--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/6416821.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s6416821.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG7--&gt; &lt;br /&gt; Snap List -&gt; Commands -&gt; Make List From Selected &lt;br /&gt; Теперь переключаемся на режим редактировани Object, выбираем объекты, которые хотим покрыть детальными объектами, т.е. в нашем примере, что на данном этапе выберем, то и будет покрыто травой. Переключаемся обратно в режим редактирования Detail Objects, необходимо заполнить Snap List, для этого даём команду Snap List -&gt; Commands -&gt; Make List From Selected. &lt;br /&gt; Список заполнен, проводим первую инициализацию(DO Commands -&gt; First Initialize). В итоге у нас должно получиться что-то типа того, что изображено на левом скриншоте ниже, я специально вставил скрин исходника текстуры для сравнения. &lt;br /&gt; Работа закончена, осталось собрать и откомпилировать уровень. &lt;br /&gt; &lt;!--IMG8--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/4072732.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s4072732.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG8--&gt; &lt;br /&gt; (Вид на наш уровень сверху) &lt;br /&gt; &lt;!--IMG9--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/5604001.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s5604001.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG9--&gt; &lt;br /&gt; (Более близкий взгляд) &lt;br /&gt;&lt;br /&gt; &lt;b&gt;Компиляция&lt;/b&gt; &lt;br /&gt; Компиляция детальных объектов осуществляется компилятором xrDO_light. Т.е. после сборки уровня(Compile -&gt; Build) компилируется уровень(xrLC), а потом просчитывается освещение для детальных объектов(xrDO_light). Таким образом, если пришлось поменять что-то в детальных объектах, нет необходимости заново компилировать уровень, достаточно просчитать освещение детальных объектов и всё, т.е. Compile -&gt; Make Detail + xrDO_light &lt;br /&gt; Вот как это выглядит в игре. &lt;br /&gt; &lt;!--IMG10--&gt;&lt;a href=&quot;http://book-mod.3dn.ru/_fr/1/0417774.jpg&quot; class=&quot;ulightbox&quot; target=&quot;_blank&quot; title=&quot;Нажмите, для просмотра в полном размере...&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;border:0;&quot; src=&quot;http://book-mod.3dn.ru/_fr/1/s0417774.jpg&quot; align=&quot;&quot; /&gt;&lt;/a&gt;&lt;!--IMG10--&gt;&lt;!--/ust--&gt;&lt;!--usn(=Практика)--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Уроки по X-Ray SDK</category>
			<dc:creator>WurDalaK</dc:creator>
			<guid>https://book-mod.3dn.ru/forum/24-183-1</guid>
		</item>
	</channel>
</rss>