<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Записки о геймдеве</title>
  <link>http://joker-ru.livejournal.com/</link>
  <description>Записки о геймдеве - LiveJournal.com</description>
  <lastBuildDate>Sat, 07 Nov 2009 20:23:14 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>joker_ru</lj:journal>
  <lj:journalid>13901638</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://l-userpic.livejournal.com/76584432/13901638</url>
    <title>Записки о геймдеве</title>
    <link>http://joker-ru.livejournal.com/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/9468.html</guid>
  <pubDate>Sat, 07 Nov 2009 20:23:14 GMT</pubDate>
  <title>Unreal Development Kit - лайтмапы</title>
  <link>http://joker-ru.livejournal.com/9468.html</link>
  <description>&lt;p&gt;Забавно, что в недавно вышедшем UDK текстуры лайтмапов пожаты как я писал в этом посте : &lt;a href=&quot;http://sergeymakeev.com/?p=232&quot;&gt;Alpha-test высокого качества&lt;/a&gt;, только вместо альфы используют текстуры L8. Реально можно сильно сэкономить на разрешении лайтмапов, жалко у нас их нет в движке.&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=373&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/9468.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/9111.html</guid>
  <pubDate>Fri, 21 Aug 2009 15:36:50 GMT</pubDate>
  <title>C++ reflection с блэк-джеком и шлюхами</title>
  <link>http://joker-ru.livejournal.com/9111.html</link>
  <description>&lt;p&gt;Отсутствие &lt;strong&gt;Reflection&lt;/strong&gt; в &lt;strong&gt;C++&lt;/strong&gt; порождает множество проблем, лично у меня, и возможно у многих людей, которые будут читать данный текст.&lt;/p&gt;
&lt;p&gt;Первая проблема в том, что все функции оперирующие или выдающие как результат множества объектов должны работать с базовым типом, каким нибудь &lt;strong&gt;IEtity. &lt;/strong&gt;&lt;em&gt;Для примера:&lt;/em&gt; выбрали мы из мира с помощю AABB набор игровых объектов и хотим нанести урон, всем кто поддерживает интерфейс &lt;strong&gt;IDamageable&lt;/strong&gt;, для этого обычно используют &lt;strong&gt;dynamic_cast&lt;/strong&gt; или какой нибудь &lt;strong&gt;getType.&lt;/strong&gt; На консолях, где RTTI в релизном билде обычно запрещен - приходится изобретать свои методы (&lt;a href=&quot;http://nocturnal.insomniacgames.com/index.php/Reflect_Usage&quot; target=&quot;_blank&quot;&gt;см. библиотеку от Insomniac&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Вторая проблема, отсутсвие в &lt;strong&gt;С++&lt;/strong&gt; &lt;strong&gt;P&lt;/strong&gt;&lt;strong&gt;roperty&lt;/strong&gt; и средств для работы с ними. Движки по типу &lt;strong&gt;Unreal Engine3&lt;/strong&gt; и &lt;strong&gt;CryEngine&lt;/strong&gt; приучают творческих людей работать с набором параметров у любого игрового объекта - будь то объект миссии, текстура или спецэффект, что совершенно логично и удобно.&lt;/p&gt;
&lt;p&gt;Но вот незадача, в &lt;strong&gt;C++&lt;/strong&gt; отсутсвует возможноть получить какие либо метаданные класса - что бы узнать его поля / свойства и использовать это для управления объектом в реальном времени. Т.е. написание удобного и визуального средства редактирования &lt;strong&gt;C++&lt;/strong&gt; классов становится проблемой.&lt;/p&gt;
&lt;p&gt;Существует множество вариантов решения, кто-то пишет уникальные редакторы для уникальных объектов, кто-то использует кодогенерацию мета-информации и классов, кто-то просто игнорирует проблему или пишет редактируемые объекты на скриптовых языках с поддержкой &lt;strong&gt;Reflection.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Третья проблема, система автоматического &lt;strong&gt;save&lt;/strong&gt; / &lt;strong&gt;load&lt;/strong&gt; любых объектов. Делают её обычно банально через &lt;strong&gt;virtual ::save(&lt;/strong&gt;file * f&lt;strong&gt;)&lt;/strong&gt; и &lt;strong&gt;virtual ::load (&lt;/strong&gt;file *f&lt;strong&gt;)&lt;/strong&gt; для всех объектов которым нужно уметь сохраняться, и с разной степенью успеха борются с проблемой при загрузке - как, имея имя класса в &lt;strong&gt;const char *&lt;/strong&gt; создать экземпляр класса.&lt;/p&gt;
&lt;p&gt;Чтобы решить эти проблемы один раз и навсегда, я написал маленькую библиотеку &lt;strong&gt;С++ reflection&lt;/strong&gt; (&lt;a href=&quot;http://sergeymakeev.com/files/public/reflectionLibrary.zip&quot; target=&quot;_blank&quot;&gt;скачать тут&lt;/a&gt;) которая позволяет удобно добавлять произвольную метаинформацию к любым классам, не требует специального препроцессора или кодогенерации и намного быстрее существующих средств в языке (&lt;strong&gt;dynamic_cast&lt;/strong&gt;) или библиотек.&lt;/p&gt;
&lt;p&gt;Вот пример объявления метаданных внутри &lt;strong&gt;cpp&lt;/strong&gt; файла.&lt;/p&gt;
&lt;table width=&quot;100%&quot; bgcolor=&quot;#F2F2F2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;&lt;font color=&quot;#000000&quot;&gt;BEGIN_REFLECTION_METADATA&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;foo_class&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;base_class&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;)&lt;/font&gt;
    &lt;font color=&quot;#000000&quot;&gt;ATTRIBUTE_FLOAT&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#006400&quot;&gt;&quot;myFloatProperty&quot;&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;foo_class&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;::&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;setFloatFunc&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;foo_class&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;::&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;getFloatFunc&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
    &lt;font color=&quot;#000000&quot;&gt;ATTRIBUTE_INT&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#006400&quot;&gt;&quot;myIntProperty&quot;&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;foo_class&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;::&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;setIntFunc&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;foo_class&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;::&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;getIntFunc&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;END_REFLECTION_METADATA&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;foo&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;)&lt;/font&gt;
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://dobrokot.nm.ru/WinnieColorizer.html&quot;&gt;&lt;font color=&quot;#727272&quot;&gt;_Winnie C++ Colorizer&lt;/font&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Немного макрос-магии и метаданные готовы. Для скорости, все строковые параметры используются вместе с хешами, вычисляемыми на этапе компиляции. Это дает реальный выигрыш в скорости по сравнению с &lt;strong&gt;dynamic_cast&lt;/strong&gt; или альтернативами.&lt;/p&gt;
&lt;p&gt;Пример использования &lt;strong&gt;dynamic_cast&lt;/strong&gt;&lt;/p&gt;
&lt;table width=&quot;100%&quot; bgcolor=&quot;#F2F2F2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;&lt;font color=&quot;#000000&quot;&gt;base&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;*&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;base_ptr&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;new&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;foo&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;();&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;foo&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;*&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;foo_ptr&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;base_ptr&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;DynamicCast&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;foo&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;&amp;gt;();&lt;/font&gt;
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://dobrokot.nm.ru/WinnieColorizer.html&quot;&gt;&lt;font color=&quot;#727272&quot;&gt;_Winnie C++ Colorizer&lt;/font&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Плюсы и минусы библиотеки:&lt;/strong&gt;&lt;br /&gt;
+ можно создавать классы по текстовому имени класса&lt;br /&gt;
+ получать список всех классов с метаинформацией и создавать их по метаинформации&lt;br /&gt;
+ получать список аттрибутов (&lt;strong&gt;property&lt;/strong&gt;) для любого класса&lt;br /&gt;
+ быстрый &lt;strong&gt;dynamic_cast&lt;/strong&gt;&lt;br /&gt;
+ получать метаинформацию из созданного экземпляра класса&lt;br /&gt;
+ аттрибуты поддерживают наследование&lt;br /&gt;
+ вся информация строится в compile time&lt;/p&gt;
&lt;p&gt;- нужно писать небольшие макросы&lt;br /&gt;
- не поддерживается множественное наследование (&lt;em&gt;для меня это фича&lt;/em&gt;)&lt;br /&gt;
- незначительно увеличивается время компиляции (&lt;em&gt;нужно все таки хеши считать&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Вот несколько примеров скорости работы:&lt;/p&gt;
&lt;table width=&quot;100%&quot; bgcolor=&quot;#F2F2F2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;&lt;font color=&quot;#006400&quot;&gt;&quot;Xenon X360 (3.2 GHz)&quot;&lt;/font&gt;
&lt;font color=&quot;#C8003C&quot;&gt;-------------------&lt;/font&gt;
&lt;font color=&quot;#0000FF&quot;&gt;dynamic_cast&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;9.52&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;M&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;casts&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;per&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;second&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;reflection&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;::&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;cast&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;18.94&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;M&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;casts&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;per&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;second&lt;/font&gt;

&lt;b&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;#1087;&amp;#1088;&amp;#1080;&amp;#1088;&amp;#1086;&amp;#1089;&amp;#1090;&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;#1073;&amp;#1099;&amp;#1089;&amp;#1090;&amp;#1088;&amp;#1086;&amp;#1076;&amp;#1077;&amp;#1081;&amp;#1089;&amp;#1090;&amp;#1074;&amp;#1080;&amp;#1103;&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;x&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;1.99&lt;/font&gt;

&lt;font color=&quot;#006400&quot;&gt;&quot;AMD 64X2 3800+ (2.0GHz)&quot;&lt;/font&gt;
&lt;font color=&quot;#C8003C&quot;&gt;-------------------&lt;/font&gt;
&lt;font color=&quot;#0000FF&quot;&gt;dynamic_cast&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;12.02&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;M&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;casts&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;per&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;second&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;reflection&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;::&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;cast&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;35.50&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;M&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;casts&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;per&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;second&lt;/font&gt;

&lt;b&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;#1087;&amp;#1088;&amp;#1080;&amp;#1088;&amp;#1086;&amp;#1089;&amp;#1090;&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;#1073;&amp;#1099;&amp;#1089;&amp;#1090;&amp;#1088;&amp;#1086;&amp;#1076;&amp;#1077;&amp;#1081;&amp;#1089;&amp;#1090;&amp;#1074;&amp;#1080;&amp;#1103;&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;x&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;2.95&lt;/font&gt;

&lt;font color=&quot;#006400&quot;&gt;&quot;Core2Duo E6750 (2.66GHz)&quot;&lt;/font&gt;
&lt;font color=&quot;#C8003C&quot;&gt;-------------------&lt;/font&gt;
&lt;font color=&quot;#0000FF&quot;&gt;dynamic_cast&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;26.49&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;M&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;casts&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;per&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;second&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;reflection&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;::&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;cast&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;45.70&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;M&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;casts&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;per&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;second&lt;/font&gt;

&lt;b&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;#1087;&amp;#1088;&amp;#1080;&amp;#1088;&amp;#1086;&amp;#1089;&amp;#1090;&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;#1073;&amp;#1099;&amp;#1089;&amp;#1090;&amp;#1088;&amp;#1086;&amp;#1076;&amp;#1077;&amp;#1081;&amp;#1089;&amp;#1090;&amp;#1074;&amp;#1080;&amp;#1103;&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;x&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;1.73&lt;/font&gt;
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://dobrokot.nm.ru/WinnieColorizer.html&quot;&gt;&lt;font color=&quot;#727272&quot;&gt;_Winnie C++ Colorizer&lt;/font&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Буду рад мнениям и результатам тестов - скомпилированный тест производительности лежит внутри архива. Повторяю ссылку, что бы не искать её выше по тексту. (&lt;a href=&quot;http://sergeymakeev.com/files/public/reflectionLibrary.zip&quot; target=&quot;_blank&quot;&gt;Библиотека reflection&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Обновил архив, ускорил получение метаданных из указателя на объект.&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=328&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/9111.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/8737.html</guid>
  <pubDate>Fri, 24 Jul 2009 09:55:07 GMT</pubDate>
  <title>Миллион батчей в секунду на Xbox360</title>
  <link>http://joker-ru.livejournal.com/8737.html</link>
  <description>&lt;p&gt;Во время очередного витка оптимизации на Xbox360, захотелось очень дешевых по производительности батчей - т.к. батчей в кадре было достаточно много, а CPU времени они кушали еще больше, при тысяче батчей в кадре тратилось &lt;strong&gt;20-25 ms&lt;/strong&gt; на установку констант и вызов DP. CPU лимит в 40-50 FPS явно не устраивал.&lt;/p&gt;
&lt;p&gt;Как потом выяснилось часть оверхеда была от использования &lt;strong&gt;D3D Effects&lt;/strong&gt; в качестве шейдерной системы. Большое количество &lt;a href=&quot;http://www.gamasutra.com/view/feature/3687/sponsored_feature_common_.php&quot; target=&quot;_blank&quot;&gt;Load Hit Store&lt;/a&gt; и двойное копирование всех констант, были одной из проблем.&lt;/p&gt;
&lt;p&gt;Итак, задача: 30 тысяч строк написанных и отлаженых шейдеров которые нельзя менять и желание иметь в runtime подобие &lt;strong&gt;PS3 libGCM&lt;/strong&gt; и полностью контролировать генерацию command buffer.&lt;br /&gt;
Я начал рыть в сторону PrecompiledCommandBuffer т.к. там явно была возможность записать CommandBuffer и потом отправить его в GPU. К сожалению, изменять параметры у записанного CB можно очень ограниченно, поэтому данный метод не подошел.&lt;/p&gt;
&lt;p&gt;В результате экспериментов я получил дамп памяти GPU буфера и стал его разбирать ручками. К счастью, &lt;strong&gt;Xenos&lt;/strong&gt; это развитие чипа &lt;strong&gt;ATI R500&lt;/strong&gt;, а на R500 &lt;a href=&quot;http://www.x.org/docs/AMD/R5xx_Acceleration_v1.3.pdf&quot;&gt;документация открыта&lt;/a&gt; (спасибо AMD/ATI). Очень быстро был готов парсер CB, который выдавал полную информацию, о том что лежит в буфере.&lt;/p&gt;
&lt;p&gt;Выяснилось, что часть операций которые можно делать из D3D совсем по другому мапяться в железо, да и &lt;strong&gt;Runtime D3D&lt;/strong&gt; сохраняет зеркальные стейты GPU, что тоже не бесплатно. Также паралельно выяснилось, что размер CB на каждом батче слишком большой, т.к. частично шейдеры эмбедились в CB и устанавливалось очень много констант (они всегда эмбедятся в буфер).&lt;/p&gt;
&lt;p&gt;Как результат всех эксперементов я написал компилятор на входе берущий &lt;strong&gt;D3D Effect&lt;/strong&gt; файл и генерирующий из него кусочки CB (кусочки что бы можно было не сабмитить уже установленные в GPU данные), так же runtime ремапинг адресов, сабмишн данных в GPU и всякий дополнительный код.&lt;/p&gt;
&lt;p&gt;Теперь рендер батча стал просто заполнением буфера памяти, поборовшись &lt;strong&gt;Load-Hit-Store&lt;/strong&gt; на заполнении памяти и сделав кеширование CB в системной памяти (общая память CPU и GPU на X360 и на PC в режиме &lt;strong&gt;WriteCombined&lt;/strong&gt;, что отключает все кеши и ведет к разным пенальти из за непоследовательной записи) я получил хороший прирост производительности.&lt;/p&gt;
&lt;p&gt;После всех основных оптимизаций, батчи стали стоить до &lt;strong&gt;4ms &lt;/strong&gt;на кадр (вместо 25ms), профайлинг показывал узкое место на доступе к памяти (констант было от 200 до 400 на батч). У &lt;strong&gt;ATI GPU&lt;/strong&gt; есть очень приятная фича, на вход микрокода вершинного шейдера приходит номер индекса, и сборка вершины происходит в шейдере с возможностью random read из потока вершин. Я переделал большинство констант на vertex stream (данные vertex stream заполнялись в другом cpu потоке) и избавился от &lt;strong&gt;90%&lt;/strong&gt; констант при отрисовке, результат: &lt;strong&gt;1-2ms&lt;/strong&gt; из секунды это расходы на отрисовку &lt;strong&gt;1000&lt;/strong&gt; батчей, на этом и остановился.&lt;/p&gt;
&lt;p&gt;В теории успех можно было развить дальше, т.к. можно вести отрисовку с нескольких потоков (при рендере мы просто работаем с памятью, не трогая D3D вообще, D3D нужен только для сабмишена данных в GPU) - но на текущем проекте этого не потребовалось. CPU лимит в миллион батчей в секунду кажется мне достаточным, да и PC такого не переживет - надо все таки и о второй платформе помнить.&lt;/p&gt;
&lt;p&gt;Итого:&lt;/p&gt;
&lt;p&gt;Было&lt;strong&gt;: D3D Effects + D3D runtime&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;0.02&lt;/strong&gt;&lt;em&gt;ms&lt;/em&gt; batch * &lt;strong&gt;1000&lt;/strong&gt; = &lt;strong&gt;20&lt;/strong&gt;&lt;em&gt;ms&lt;/em&gt; на кадр (&lt;strong&gt;50000&lt;/strong&gt; batches per second)&lt;/p&gt;
&lt;p&gt;Стало:&lt;strong&gt; Своя библиотека работы с GPU:&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;0.001&lt;/strong&gt;&lt;em&gt;ms&lt;/em&gt; batch * &lt;strong&gt;1000&lt;/strong&gt; = &lt;strong&gt;1&lt;/strong&gt;&lt;em&gt;ms&lt;/em&gt; на кадр (&lt;strong&gt;1000000&lt;/strong&gt; batches per second)&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=286&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/8737.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>9</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/8548.html</guid>
  <pubDate>Mon, 04 May 2009 19:13:05 GMT</pubDate>
  <title>Много бесплатных текстур</title>
  <link>http://joker-ru.livejournal.com/8548.html</link>
  <description>&lt;p&gt;Сегодня чуть не потерял данную ссылку, на &lt;a href=&quot;http://cgtextures.com/&quot;&gt;замечательный сайт с огромным количеством бесплатных текстур для игр&lt;/a&gt;. Оставляю ссылку в посте, что бы не забывать. А кому еще пригодится, мне не жалко. Текстуры можно использовать в коммерческих продуктах, плюс удобный каталог - что еще нужно для счастья.&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=243&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/8548.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/8422.html</guid>
  <pubDate>Sun, 19 Apr 2009 14:31:30 GMT</pubDate>
  <title>Alpha-test высокого качества</title>
  <link>http://joker-ru.livejournal.com/8422.html</link>
  <description>&lt;p&gt;&lt;strong&gt;Valve&lt;/strong&gt; уже давно публиковали свой доклад &lt;a href=&quot;http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf&quot;&gt;SIGGRAPH 2007 &amp;#8220;Improved Alpha-Tested Magnification for Vector Textures and Special Effects&amp;#8221;&lt;/a&gt; о том, как очень получить сверх-качественные текстуры с альфа каналом, очень низкого разрешения.&lt;/p&gt;
&lt;p&gt;Техника очень проста: берем альфа канал текстуры большого разрешения, к примеру 4096&amp;#215;4096 и уменьшаем до размера 64&amp;#215;64 или меньше со специальным фильтром.&lt;/p&gt;
&lt;p&gt;Фильтр в результирующую альфу записывает дистанцию до первого непрозрачного пикселя на большой текстуре, вместо обычной альфа-маски. Дистанцию уже можно корректно интерполировать &lt;strong&gt;LINEAR&lt;/strong&gt; фильтром, в отличие от альфа маски - а обычный &lt;strong&gt;ALPHA_REF&lt;/strong&gt; задает задает границу дистанции после которой пиксель считается прозрачным.&lt;/p&gt;
&lt;p&gt;В результате: получаетсся практически векторное качество альфа-маски текстуры и работает на любом &lt;strong&gt;GPU&lt;/strong&gt; поддерживающем &lt;strong&gt;LINEAR&lt;/strong&gt; фильтрацию и альфа-тест, что снова актуально учитывая всякие &lt;strong&gt;NintendoDS&lt;/strong&gt; и &lt;strong&gt;iPhone&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Я накидал по данному докладу &lt;a href=&quot;http://sergeymakeev.com/files/public/Distance2Alpha.zip&quot;&gt;тестовый фильтр (скачать тут)&lt;/a&gt;, результаты более чем хороши, попробуйте сами.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Пользоваться так:&lt;/em&gt;&lt;br /&gt;
&lt;strong&gt;DistanceToAlphaFilter&lt;/strong&gt; исходная_текстура текстура_результат.tga resolution_x resolution_y&lt;/p&gt;
&lt;p&gt;Для загрузки файлов используется &lt;strong&gt;D3DXCreateTextureFromFile&lt;/strong&gt;, поэтому нужен файл D3DX9_39.dll (в комплекте). Форматы исходной текстуры могут быть: &lt;strong&gt;bmp, dds, dib, hdr, jpg, pfm, png, ppm, tga&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Для отрисовки получившейся маски нужно установить следующие стейты:&lt;br /&gt;
&lt;strong&gt;ALPHABLEND&lt;/strong&gt; = false;&lt;br /&gt;
&lt;strong&gt;ALPHATEST&lt;/strong&gt; = true;&lt;br /&gt;
&lt;strong&gt;COLORARG1&lt;/strong&gt;=texture;&lt;br /&gt;
&lt;strong&gt;ALPHAARG1&lt;/strong&gt;=texture;&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=232&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/8422.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/7965.html</guid>
  <pubDate>Mon, 06 Apr 2009 18:32:15 GMT</pubDate>
  <title>GDC09 free content</title>
  <link>http://joker-ru.livejournal.com/7965.html</link>
  <description>&lt;p&gt;&lt;a href=&quot;http://mygdc.gdconf.com/vault/1337&quot;&gt;Тут лежит free content&lt;/a&gt; с GDC07, GDC08, GDC09 - в принципе не очень много, но есть всякие интересные доклады.&lt;/p&gt;
&lt;p&gt;Вот тут, еще немножко есть &lt;a href=&quot;http://msinilo.pl/blog/?p=345&quot;&gt;http://msinilo.pl/blog/?p=345&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;И вот тут, &lt;a href=&quot;http://www.tilander.org/aurora/2009/03/gdc-2009-aftermath.html&quot;&gt;еще про God of War 3&lt;/a&gt;&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=229&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/7965.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/7887.html</guid>
  <pubDate>Sat, 07 Feb 2009 14:34:28 GMT</pubDate>
  <title>Полезный ключ cl.exe /EP</title>
  <link>http://joker-ru.livejournal.com/7887.html</link>
  <description>&lt;p&gt;Раньше, когда я занимался в свободное время J2ME играми, очень напрягало отсутствие препроцессора в java, т.к. сложно было делать и поддерживать много микроизменений в коде требуемых издателями/особенностями телефонов и т.д. Тогда я сделал свой препроцессор для java с синтаксисом как у  C++,  недавно выяснилось - снова изобретал велосипед, но т.к. на момент написания я информации не нашел, напишу об этом тут:&lt;/p&gt;
&lt;p&gt;У cl.exe есть отличный ключик /EP о котором &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/becb7sys.aspx&quot; target=&quot;_blank&quot;&gt;естественно написано в MSDN&lt;/a&gt;. Так вот этот ключик обрабатывает препроцессром заданый файл и результат выдает в stdout. Обрабатывается файл полноценно, гораздо лучше чем мой велосипед, на который я еще и время зря тратил.&lt;/p&gt;
&lt;p&gt;Файл: &lt;strong&gt;test.java&lt;/strong&gt;&lt;/p&gt;
&lt;table width=&quot;100%&quot; bgcolor=&quot;#F2F2F2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//test.java&lt;/font&gt;&lt;/i&gt;
&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//------------------------------------------------------------------&lt;/font&gt;&lt;/i&gt;
&lt;font color=&quot;#000000&quot;&gt;import&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;java&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;io&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.*;&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;import&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;javax&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;microedition&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;io&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;StreamConnection&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;;&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;import&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;javax&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;microedition&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;lcdui&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.*;&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;import&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;javax&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;microedition&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;rms&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.*;&lt;/font&gt;

&lt;font color=&quot;#0000C8&quot;&gt;#ifdef&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;NOKIA&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;import&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;com&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;nokia&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;mid&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;ui&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;FullCanvas&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;;&lt;/font&gt;
&lt;font color=&quot;#0000C8&quot;&gt;#endif&lt;/font&gt;

&lt;font color=&quot;#0000FF&quot;&gt;public&lt;/font&gt; &lt;font color=&quot;#0000FF&quot;&gt;class&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;Game&lt;/font&gt;
&lt;font color=&quot;#0000C8&quot;&gt;#ifdef&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;NOKIA&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;extends&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;FullCanvas&lt;/font&gt;
&lt;font color=&quot;#0000C8&quot;&gt;#else&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;extends&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;Canvas&lt;/font&gt;
&lt;font color=&quot;#0000C8&quot;&gt;#endif&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;implements&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;Runnable&lt;/font&gt;
&lt;font color=&quot;#C8003C&quot;&gt;{&lt;/font&gt;
    &lt;font color=&quot;#0000FF&quot;&gt;public&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;Game&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;()&lt;/font&gt;
    &lt;font color=&quot;#C8003C&quot;&gt;{&lt;/font&gt;
&lt;font color=&quot;#0000C8&quot;&gt;#ifdef&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SOUND_SUPPORT&lt;/font&gt;
      &lt;font color=&quot;#0000C8&quot;&gt;#include&lt;/font&gt; &lt;font color=&quot;#006400&quot;&gt;&quot;sound_check.java&quot;&lt;/font&gt;
&lt;font color=&quot;#0000C8&quot;&gt;#endif&lt;/font&gt;
    &lt;font color=&quot;#C8003C&quot;&gt;}&lt;/font&gt;
&lt;font color=&quot;#C8003C&quot;&gt;}&lt;/font&gt;

&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//------------------------------------------------------------------&lt;/font&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://dobrokot.nm.ru/WinnieColorizer.html&quot;&gt;&lt;font color=&quot;#727272&quot;&gt;_Winnie C++ Colorizer&lt;/font&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Файл: &lt;strong&gt;sound_check.java&lt;/strong&gt;&lt;/p&gt;
&lt;table width=&quot;100%&quot; bgcolor=&quot;#F2F2F2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//sound_check.java&lt;/font&gt;&lt;/i&gt;
&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//------------------------------------------------------------------&lt;/font&gt;&lt;/i&gt;

        &lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//check if sound is supported&lt;/font&gt;&lt;/i&gt;
        &lt;font color=&quot;#000000&quot;&gt;Class&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;null&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;;&lt;/font&gt;
        &lt;font color=&quot;#0000FF&quot;&gt;try&lt;/font&gt;
        &lt;font color=&quot;#C8003C&quot;&gt;{&lt;/font&gt;
          &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;Class&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;forName&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#006400&quot;&gt;&quot;javax.microedition.media.Player&quot;&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#C8003C&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#0000FF&quot;&gt;catch&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Exception&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;ex&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;}&lt;/font&gt;

        &lt;font color=&quot;#0000FF&quot;&gt;if&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;!=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;null&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;)&lt;/font&gt;
        &lt;font color=&quot;#C8003C&quot;&gt;{&lt;/font&gt;
            &lt;font color=&quot;#000000&quot;&gt;System&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;out&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;println&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#006400&quot;&gt;&quot;Sound supported&quot;&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
            &lt;font color=&quot;#0000FF&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;#0000FF&quot;&gt;true&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;;&lt;/font&gt;
        &lt;font color=&quot;#C8003C&quot;&gt;}&lt;/font&gt;

        &lt;font color=&quot;#000000&quot;&gt;System&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;out&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;println&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#006400&quot;&gt;&quot;Sound NOT supported&quot;&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;

        &lt;font color=&quot;#000000&quot;&gt;System&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;out&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;println&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;__DATE__&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;

&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//------------------------------------------------------------------&lt;/font&gt;&lt;/i&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://dobrokot.nm.ru/WinnieColorizer.html&quot;&gt;&lt;font color=&quot;#727272&quot;&gt;_Winnie C++ Colorizer&lt;/font&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;И запустим на них: &lt;strong&gt;cl /C /I&amp;#8221;c:\commonfiles\&amp;#8221; /DNOKIA=1 /DSOUND_SUPPORT=1 /EP /Tctest.java &amp;gt; output.java&lt;/strong&gt; в результате получим output.java который уже можно скармливать java компилятору.&lt;/p&gt;
&lt;p&gt;Так же можно делать с любым текстом где нужен препроцессор, всякие скриптовые языки/генерация кода и т.д., очень полезно знать, что такая фича есть.&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=195&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/7887.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/7545.html</guid>
  <pubDate>Tue, 03 Feb 2009 17:00:27 GMT</pubDate>
  <title>Нормалмапы, как они есть</title>
  <link>http://joker-ru.livejournal.com/7545.html</link>
  <description>&lt;p&gt;Все давно знают и используют у себя в движках нормал мапы. Художники делают хайрез, &amp;#8220;снимают&amp;#8221; карту нормалей и все при этом счастливы. Нормалмапы естественно в tangent space, что бы все как у людей было и про мэпинг артистам не думать. Но иногда, на модельках с нормалмапом появляются &amp;#8220;швы&amp;#8221; их как-то обычно забарывают, но особо про это никто не думает и даже на ушедших в печать играх часто можно увидеть швы на нормалмапе.&lt;/p&gt;
&lt;p&gt;Так вот, если подумать, почему же появляются ошибки ? Для этого представим как все работает: запекалка нормал-мапа с хайреза, трассирует лучи и строит карту нормалей &lt;em&gt;(из карты разницы высот или другим способом - неважно)&lt;/em&gt; но полученная карта нормалей получается в &lt;strong&gt;object space&lt;/strong&gt;. Затем, запекалка нормал-мапа &lt;strong&gt;сама СЧИТАЕТ tangent space&lt;/strong&gt; и используя посчитанные tangent матрицы, конвертирует полученные нормали в tangent пространство.&lt;br /&gt;
В этом и кроется подвох: если расчет tangent матриц у вас в игре и в запекалке карт нормалей отличается &lt;em&gt;(а он 99% будет отличаться, т.к. в каких случаях разрывать мэпинг а в каких нет, даже в разных 3D пакетах реализованно по разному)&lt;/em&gt; в местах несовпадения tanget векторов будет шов. Обычно для устранения эффекта стараются не делать зеркальный мэпинг для моделек с нормал-мапом, это минимизирует ошибку, но не полностью её исключает.&lt;/p&gt;
&lt;p&gt;Возникает логичный вопрос, что же делать ? Можно конечно пытаться &amp;#8220;угадать&amp;#8221;, как считается tangent пространство в модуле запекающем нормали в 3D пакете, но это не самый лучший выход на мой взгляд. К счастью недавно я обнаружил &lt;a href=&quot;http://www.xnormal.net/&quot;&gt;вот эту програмку&lt;/a&gt;, она умеет считать нормал-мапы используя CUDA и прочие радости и &lt;strong&gt;САМОЕ ГЛАВНОЕ&lt;/strong&gt; позволяет &lt;strong&gt;написать свой генератор tangent матриц&lt;/strong&gt;, такой же как у вас в игре. После этого про швы можно больше не думать. Надеюсь кому-нибудь это поможет уменьшить количество проблем в проекте. К сожалению alien интерфейс делает не очень казуальной использование софтинки, но привыкнуть можно.&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=151&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/7545.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/7237.html</guid>
  <pubDate>Sat, 24 Jan 2009 14:19:12 GMT</pubDate>
  <title>Плавный deltaTime и GPU : part 2</title>
  <link>http://joker-ru.livejournal.com/7237.html</link>
  <description>&lt;p&gt;Недавно, &lt;a href=&quot;http://sergeymakeev.com/?p=110&quot;&gt;я написал&lt;/a&gt; как избежать рванного &lt;strong&gt;deltaTime&lt;/strong&gt; используя простую синхронизацию &lt;strong&gt;CPU&lt;/strong&gt; и &lt;strong&gt;GPU&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sim0nsays.livejournal.com/&quot;&gt;Семен&lt;/a&gt; справедливо заметил, что такой способ синхронизации приведет к тому, что некоторое время в начале кадра &lt;strong&gt;GPU&lt;/strong&gt; будет проставивать в ожидании данных. И, что нужно делать несколько &lt;strong&gt;Query&lt;/strong&gt; синхронизируясь на кадр назад. Тогда и &lt;strong&gt;deltaTime&lt;/strong&gt; будет плавный и &lt;strong&gt;GPU idle&lt;/strong&gt; пропадет.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.everfall.com/paste/id.php?9e9j4ej8etvf&quot;&gt;Вот ссылка на код&lt;/a&gt; который синхронизирует на любое заданное количество кадров через серию query. По тестам наибольший выигрыш получился на мощных видеокартах (до 50% от предыдущей схемы), на слабых видеокартах эффект заметен гораздо меньше, но тоже присутствует.&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=180&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/7237.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>12</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/7051.html</guid>
  <pubDate>Wed, 14 Jan 2009 21:09:52 GMT</pubDate>
  <title>Факинг, вирусы</title>
  <link>http://joker-ru.livejournal.com/7051.html</link>
  <description>&lt;p&gt;Вот, народ сегодня начал писать про &lt;a href=&quot;http://bishop3000.livejournal.com/105424.html&quot; target=&quot;_blank&quot;&gt;вирус новый,&lt;/a&gt; я между тем с ним уже два дня веду войну на работе. При том, что обнаружил  вирус чисто случайно.&lt;/p&gt;
&lt;p&gt;Обнаружился он когда я с сетевой код пробовал запустить и обратил внимание, что все результаты &lt;strong&gt;gethostbyname&lt;/strong&gt; возвращали одинаковый IP. После того как баги в своем коде не обнуружил, начал рыть глубже и нашел это зло.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.f-secure.com/v-descs/worm_w32_downadup_al.shtml&quot; target=&quot;_blank&quot;&gt;Вот тут&lt;/a&gt; про него умные люди пишут, я же от себя добавлю по результатам борьбы с ним: никакими из существующих антивирусов по состоянию на 13 января его обнаружить не удалось, никакие ad-aware проги его не видят. Между тем вирус внедряясь в &lt;strong&gt;svhost&lt;/strong&gt; пробрасывает весь мой трафик через огромную сеть &lt;strong&gt;relay &lt;/strong&gt;серверов в Амстердаме, совершенно прозрачно для меня и устанавливает руткит на зараженный компьютер, в общем вся ваша информация сразу перестает быть конфиденциальной.&lt;/p&gt;
&lt;p&gt;Ах, да - судя по всему разных типов вируса много: для заражения по локалке и для заражения через флешку, а ко мне, я почти уверен, залез через браузер.&lt;/p&gt;
&lt;p&gt;Определяется с последними апдейтами как: &lt;strong&gt;Worm:W32/Downadup.AL, 	Net-Worm.Win32.Kido, Worm:W32/Downadup.AL, Worm:Win32/Conficker (Microsoft), W32/Conficker.worm.gen (Symantec), Mal/Conficker (Sophos)&lt;/strong&gt;, будте осторожны!&lt;/p&gt;
&lt;p&gt;p.s. из антивирусов стоял корпоративный Nod32 со свежими апдейтами &lt;img src=&quot;http://sergeymakeev.com/wp-includes/images/smilies/icon_sad.gif&quot; alt=&quot;:(&quot; class=&quot;wp-smiley&quot; /&gt;&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=173&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/7051.html</comments>
  <category>разное</category>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/6728.html</guid>
  <pubDate>Tue, 06 Jan 2009 15:55:32 GMT</pubDate>
  <title>База кода в проекте</title>
  <link>http://joker-ru.livejournal.com/6728.html</link>
  <description>&lt;p&gt;Простая и удобная &lt;a href=&quot;http://www.locmetrics.com/&quot;&gt;утилита&lt;/a&gt; которая считает метрики кода. Натравил на &lt;a href=&quot;http://games.1c.ru/capitain_blood/&quot;&gt;нашу прелесть&lt;/a&gt; и вот, что получилось:&lt;/p&gt;
&lt;p&gt;Игра + Движок&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
&lt;strong&gt;1284&lt;/strong&gt; файлов&lt;br /&gt;
&lt;strong&gt;320735&lt;/strong&gt; строк кода&lt;br /&gt;
&lt;strong&gt;65635&lt;/strong&gt; пустых строк&lt;br /&gt;
&lt;strong&gt;39803&lt;/strong&gt; строк с комментариями&lt;/p&gt;
&lt;p&gt;Редакторы (уровней, спецэффектов, графов-анимации, звуков, ForceFeedBack эффектов)&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
&lt;strong&gt;383&lt;/strong&gt; файлов&lt;br /&gt;
&lt;strong&gt;72286&lt;/strong&gt; строк кода&lt;br /&gt;
&lt;strong&gt;14476&lt;/strong&gt; пустых строк&lt;br /&gt;
&lt;strong&gt;8790&lt;/strong&gt; строк с комментариями&lt;/p&gt;
&lt;p&gt;Шейдеры:&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
&lt;strong&gt;101&lt;/strong&gt; файл&lt;br /&gt;
&lt;strong&gt;12131&lt;/strong&gt; строк кода&lt;br /&gt;
&lt;strong&gt;2571&lt;/strong&gt; пустых строк&lt;br /&gt;
&lt;strong&gt;2609&lt;/strong&gt; строк с комментариями&lt;/p&gt;
&lt;p&gt;Плагины и тулзы для арта:&lt;br /&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;br /&gt;
&lt;strong&gt;113&lt;/strong&gt; файлов&lt;br /&gt;
&lt;strong&gt;27846&lt;/strong&gt; строк кода&lt;br /&gt;
&lt;strong&gt;5242&lt;/strong&gt; пустых строк&lt;br /&gt;
&lt;strong&gt;4850&lt;/strong&gt; строк с комментариями&lt;/p&gt;
&lt;p&gt;Все это пишут и поддерживают 5 программистов (4 и лид) + Я (30-40% времени трачу на код и архитектуру, больше не получается)&lt;/p&gt;
&lt;p&gt;Естественно в метриках нет никаких SDK и прочего шлака, все это мы написали своими руками.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;p.s.&lt;/strong&gt; ради интереса нашел в TXT &amp;#8220;Войну и Мир : Том 1&amp;#8243; и померил. Получилось: 12821 строка, понятно, что строчки там длинные, но все равно круто.&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=131&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/6728.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/6437.html</guid>
  <pubDate>Sun, 04 Jan 2009 18:49:33 GMT</pubDate>
  <title>NVidia и веселье</title>
  <link>http://joker-ru.livejournal.com/6437.html</link>
  <description>&lt;p&gt;Вот кстати вспомнил: в свое время пришлось с этим помучаться, на некоторых драйверах Nvidia, &lt;strong&gt;pow(n, 0.0) возвращает -1&lt;/strong&gt; Если кто использует степень спекуляра которую художники могут менять, то на некоторых драйверах будут неприятные артефакты.&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=147&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/6437.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/6320.html</guid>
  <pubDate>Sat, 27 Dec 2008 14:10:38 GMT</pubDate>
  <title>WideCharToMultiByte</title>
  <link>http://joker-ru.livejournal.com/6320.html</link>
  <description>&lt;p&gt;К сожалению в нашем проекте, внутри еще живет ANSI для печати текста, а локкит мы естественно сделали unicode &lt;em&gt;(это обычный unicode csv, легко парсить и локализаторам удобно)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Через некоторое время выяснилось, что &lt;strong&gt;WideCharToMultiByte&lt;/strong&gt; на &lt;strong&gt;Xbox360&lt;/strong&gt;, который в соответствии с текущей локалью конвертирует &lt;strong&gt;UTF16&lt;/strong&gt; в &lt;strong&gt;ANSI&lt;/strong&gt; не работает, для русского языка! Т.к. просто тупо нет русской локали, а при выборе русского языка в Dashboard, возвращается локаль &lt;strong&gt;UNITED_STATES&lt;/strong&gt;. В результате пришлось писать самому руками конвертацию для &lt;strong&gt;ANSI 1251&lt;/strong&gt; и &lt;strong&gt;1252&lt;/strong&gt;. Так вот для тех, кто будет писать конвертацию,  следующие ссылки (я о них узнал, когда уже все сделал сам - в общем как обычно изобретал велосипед)&lt;/p&gt;
&lt;p&gt;Таблицы соответствия юникода и ANSI для различных code pages лежат &lt;a href=&quot;http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/&quot;&gt;вот тут&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;А &lt;a href=&quot;http://www.gnu.org/software/libiconv/&quot;&gt;вот тут&lt;/a&gt; лежит либа, которая все что угодно может делать с кодировками, к сожалению либа &amp;#8220;заражена&amp;#8221; &lt;strong&gt;GPL&lt;/strong&gt; лицензией поэтому она только на посмотреть, хотя вроде и &lt;strong&gt;LGPL&lt;/strong&gt; есть при распространении как &lt;strong&gt;*.lib *.h&lt;/strong&gt;&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=120&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/6320.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/5914.html</guid>
  <pubDate>Wed, 24 Dec 2008 11:27:06 GMT</pubDate>
  <title>Плавный deltaTime и GPU</title>
  <link>http://joker-ru.livejournal.com/5914.html</link>
  <description>&lt;p&gt;PC разработчики почему то, часто забывают или не интересуются как работает DirectX изнутри. Типичный пример: большинство думает, что Present блокирующий вызов и приводит к синхронизации. На самом же деле Present фактически просто добавляет в PushBuffer команду которая делает flip для отображаемой на экране GPU памяти, но это в том случае, если все хорошо.&lt;/p&gt;
&lt;p&gt;Если же CPU заполняет PushBuffer, быстрее чем GPU успевает его исполнять, DX Runtime некоторое время (2 кадра) продолжает класть все команды в PushBuffer надеясь, что GPU успеет или CPU будет поменьше данных давать.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sergeymakeev.com/wp-content/uploads/2008/12/cpu_gpu_frames.jpg&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-111&quot; title=&quot;GameTimeLine1&quot; src=&quot;http://sergeymakeev.com/wp-content/uploads/2008/12/cpu_gpu_frames.jpg&quot; alt=&quot;&quot; width=&quot;450&quot; height=&quot;68&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;После того, как GPU &amp;#8220;отстал&amp;#8221; от CPU на пару кадров происходит ожидание GPU при этом CPU простаивает (stall frame). Это очень неприятно, т.к. deltaTime становится крайне неравномерным и брюква становится уже не той &lt;strong&gt;(см.лекцию: Баткин Борис. О некоторых особенностях приготовления брюквы.)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;В случае проблем график deltaTime типично принимает вид, но может и отличаться (90% случаев на практике, график был именно такой)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sergeymakeev.com/wp-content/uploads/2008/12/gpu_overload_graph.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-113&quot; title=&quot;deltaTime_graph&quot; src=&quot;http://sergeymakeev.com/wp-content/uploads/2008/12/gpu_overload_graph.jpg&quot; alt=&quot;&quot; width=&quot;370&quot; height=&quot;248&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Возникает вопрос: как же это забороть ? Забороть совсем нельзя (зоопарк конфигураций, CPU с GPU могут отличаться на порядки по загруженности/производительности), можно уменьшить вред, от этого эффекта, для этого нужно сделать выхов Present синхронизирующим. Что бы получить следующую картину:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sergeymakeev.com/wp-content/uploads/2008/12/cpu_gpu_frames_synced.jpg&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-114&quot; title=&quot;GameTimeLine2&quot; src=&quot;http://sergeymakeev.com/wp-content/uploads/2008/12/cpu_gpu_frames_synced.jpg&quot; alt=&quot;&quot; width=&quot;450&quot; height=&quot;68&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;При использовании DX9 можно использовать механизм Query, в предыдущих DX Query отсутствуют, но можно использовать Lock/Unlock бэфбуффера.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Код для DirectX9:&lt;/strong&gt;&lt;/p&gt;
&lt;table width=&quot;100%&quot; bgcolor=&quot;#F2F2F2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;&lt;font color=&quot;#C8003C&quot;&gt;...&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Init&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;...&lt;/font&gt;

&lt;font color=&quot;#000000&quot;&gt;D3D&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;()-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;CreateQuery&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;D3DQUERYTYPE_EVENT&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;pEventQuery&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;

&lt;font color=&quot;#C8003C&quot;&gt;...&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Frame&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;...&lt;/font&gt;

&lt;font color=&quot;#000000&quot;&gt;HRESULT&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;issueResult&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;pEventQuery&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Issue&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;D3DISSUE_END&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#0000FF&quot;&gt;if&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;issueResult&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;!=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;D3DERR_DEVICELOST&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;)&lt;/font&gt;
&lt;font color=&quot;#C8003C&quot;&gt;{&lt;/font&gt;
 &lt;font color=&quot;#000000&quot;&gt;HRESULT&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;queryResult&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;pEventQuery&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;GetData&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;NULL&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;0&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;D3DGETDATA_FLUSH&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
 &lt;font color=&quot;#0000FF&quot;&gt;if&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;queryResult&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;==&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;S_FALSE&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;)&lt;/font&gt;
 &lt;font color=&quot;#C8003C&quot;&gt;{&lt;/font&gt;
   &lt;font color=&quot;#0000FF&quot;&gt;for&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;(;;)&lt;/font&gt;
   &lt;font color=&quot;#C8003C&quot;&gt;{&lt;/font&gt;
     &lt;font color=&quot;#000000&quot;&gt;queryResult&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;pEventQuery&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;GetData&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;NULL&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;0&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;D3DGETDATA_FLUSH&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
     &lt;font color=&quot;#0000FF&quot;&gt;if&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;queryResult&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;!=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;S_FALSE&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;)&lt;/font&gt;
     &lt;font color=&quot;#C8003C&quot;&gt;{&lt;/font&gt;
       &lt;font color=&quot;#0000FF&quot;&gt;break&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;;&lt;/font&gt;
     &lt;font color=&quot;#C8003C&quot;&gt;}&lt;/font&gt;

    &lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//&amp;#1058;&amp;#1091;&amp;#1090; &amp;#1076;&amp;#1077;&amp;#1083;&amp;#1072;&amp;#1077;&amp;#1084;, &amp;#1095;&amp;#1090;&amp;#1086; &amp;#1093;&amp;#1086;&amp;#1090;&amp;#1080;&amp;#1084; - &amp;#1074;&amp;#1080;&amp;#1076;&amp;#1077;&amp;#1086;&amp;#1082;&amp;#1072;&amp;#1088;&amp;#1090;&amp;#1072; &amp;#1085;&amp;#1077; &amp;#1091;&amp;#1089;&amp;#1087;&amp;#1077;&amp;#1074;&amp;#1072;&amp;#1077;&amp;#1090;,&lt;/font&gt;&lt;/i&gt;
    &lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//CPU &amp;#1074;&amp;#1088;&amp;#1077;&amp;#1084;&amp;#1103; &amp;#1084;&amp;#1086;&amp;#1078;&amp;#1085;&amp;#1086; &amp;#1090;&amp;#1088;&amp;#1072;&amp;#1090;&amp;#1080;&amp;#1090;&amp;#1100;&lt;/font&gt;&lt;/i&gt;
    &lt;font color=&quot;#000000&quot;&gt;Sleep&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#40B440&quot;&gt;0&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
   &lt;font color=&quot;#C8003C&quot;&gt;}&lt;/font&gt;
 &lt;font color=&quot;#C8003C&quot;&gt;}&lt;/font&gt;
&lt;font color=&quot;#C8003C&quot;&gt;}&lt;/font&gt;

&lt;font color=&quot;#000000&quot;&gt;D3D&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;()-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Present&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;();&lt;/font&gt;
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://dobrokot.nm.ru/WinnieColorizer.html&quot;&gt;&lt;font color=&quot;#727272&quot;&gt;_Winnie C++ Colorizer&lt;/font&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Код для DirectX8:&lt;/strong&gt;&lt;/p&gt;
&lt;table width=&quot;100%&quot; bgcolor=&quot;#F2F2F2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;&lt;font color=&quot;#000000&quot;&gt;D3DLOCKED_RECT&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;lockedRect&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;;&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;d3d8BackBufferSurface&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;LockRect&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;lockedRect&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;NULL&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;D3DLOCK_READONLY&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;d3d8BackBufferSurface&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;UnlockRect&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;();&lt;/font&gt;

&lt;font color=&quot;#000000&quot;&gt;D3D&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;()-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Present&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;();&lt;/font&gt;
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://dobrokot.nm.ru/WinnieColorizer.html&quot;&gt;&lt;font color=&quot;#727272&quot;&gt;_Winnie C++ Colorizer&lt;/font&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Код для DirectX7:&lt;/strong&gt;&lt;/p&gt;
&lt;table width=&quot;100%&quot; bgcolor=&quot;#F2F2F2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt;&lt;font color=&quot;#000000&quot;&gt;DDSURFACEDESC2&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;surfaceDesc&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;;&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;sDesc&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;dwSize&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#0000FF&quot;&gt;sizeof&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;surfaceDesc&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;d3d7BackBuffer&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Lock&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;NULL&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;surfaceDesc&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;DDLOCK_WAIT&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;NULL&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;d3d7BackBuffer&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Unlock&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;NULL&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;

&lt;font color=&quot;#000000&quot;&gt;D3D&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;()-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;Present&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;();&lt;/font&gt;
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://dobrokot.nm.ru/WinnieColorizer.html&quot;&gt;&lt;font color=&quot;#727272&quot;&gt;_Winnie C++ Colorizer&lt;/font&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=110&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/5914.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/5724.html</guid>
  <pubDate>Sat, 20 Dec 2008 11:26:19 GMT</pubDate>
  <title>про DirectX</title>
  <link>http://joker-ru.livejournal.com/5724.html</link>
  <description>&lt;p&gt;Меня периодически спрашивают программисты из различных геймдев компаний всякое про DirectX. Ну почему какие то вызовы DX иногда тормозят, а иногда нет. Что происходит в Present и т.п. (на Xbox ближе к железу и проще ответить что оно там внутри драйвера/DX делает ) Вот нашел неплохой &lt;a title=&quot;Toms DX FAQ&quot; href=&quot;http://tomsdxfaq.blogspot.com/&quot; target=&quot;_blank&quot;&gt;DXFAQ&lt;/a&gt; который на 90% этих вопросов отвечает.&lt;/p&gt;
&lt;p&gt;Вот еще добавлю от себя. Не все знают, что на некотором железе tex2Dproj подменяется на tex2D и деление. А texCUBE к примеру даже принципиально не может фильтровать пиксели на эджах кубмапа, т.к. все равно сводится все внутри к вызову обычного tex2D (см. &lt;a href=&quot;http://developer.nvidia.com/object/cube_map_ogl_tutorial.html&quot; target=&quot;_blank&quot;&gt;сюда&lt;/a&gt; глава &lt;strong&gt;Mapping Texture Coordinates to Cube Map Faces&lt;/strong&gt; или &lt;a href=&quot;http://developer.nvidia.com/attach/6756&quot; target=&quot;_blank&quot;&gt;сюда&lt;/a&gt; страница 5)&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=103&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/5724.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/5486.html</guid>
  <pubDate>Thu, 20 Nov 2008 16:35:13 GMT</pubDate>
  <title>Волшебное затухание</title>
  <link>http://joker-ru.livejournal.com/5486.html</link>
  <description>&lt;p&gt;В игродеве частенько бывает нужно, что нибудь плавно растворить или сфейдить. Тот-же звук к примеру или объекты какие нибудь по альфе, обычно не задумываясь пишут &lt;strong&gt;getDistance()&lt;/strong&gt; до объекта и потом считают коэфицент фейдинга, но &lt;strong&gt;getDistance()&lt;/strong&gt; не менее класически содержит в себе &lt;strong&gt;sqrt&lt;/strong&gt;, а если объектов много ?&lt;/p&gt;

&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;

Некоторое время назад, оптимизируя код для xbox360 этот корень вылез в одном из модулей игры, немного времени на раздумье и вот оно решение, без корней:

&lt;table width=&quot;100%&quot; bgcolor=&quot;#F2F2F2&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//&amp;#1043;&amp;#1076;&amp;#1077; &amp;#1085;&amp;#1080;&amp;#1073;&amp;#1091;&amp;#1076;&amp;#1100; &amp;#1074;&amp;#1085;&amp;#1072;&amp;#1095;&amp;#1072;&amp;#1083;&amp;#1077;, &amp;#1089;&amp;#1095;&amp;#1080;&amp;#1090;&amp;#1072;&amp;#1077;&amp;#1084; &amp;#1082;&amp;#1086;&amp;#1085;&amp;#1089;&amp;#1090;&amp;#1072;&amp;#1085;&amp;#1090;&amp;#1099;...&lt;/font&gt;&lt;/i&gt;
&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//&amp;#1044;&amp;#1080;&amp;#1089;&amp;#1090;&amp;#1072;&amp;#1085;&amp;#1094;&amp;#1080;&amp;#1103; (&amp;#1074; &amp;#1082;&amp;#1074;&amp;#1072;&amp;#1076;&amp;#1088;&amp;#1072;&amp;#1090;&amp;#1077;) &amp;#1085;&amp;#1072; &amp;#1082;&amp;#1086;&amp;#1090;&amp;#1086;&amp;#1088;&amp;#1086;&amp;#1081; &amp;#1086;&amp;#1073;&amp;#1098;&amp;#1077;&amp;#1082;&amp;#1090; &amp;#1085;&amp;#1072;&amp;#1095;&amp;#1080;&amp;#1085;&amp;#1072;&amp;#1077;&amp;#1090; &amp;#1088;&amp;#1072;&amp;#1089;&amp;#1090;&amp;#1074;&amp;#1086;&amp;#1088;&amp;#1103;&amp;#1090;&amp;#1100;&amp;#1089;&amp;#1103; &lt;/font&gt;&lt;/i&gt;
&lt;font color=&quot;#0000FF&quot;&gt;float&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;startFadeDistSq&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;startFadeDist&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;*&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;startFadeDist&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;;&lt;/font&gt;
&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//&amp;#1044;&amp;#1080;&amp;#1089;&amp;#1090;&amp;#1072;&amp;#1085;&amp;#1094;&amp;#1080;&amp;#1103; &amp;#1088;&amp;#1072;&amp;#1089;&amp;#1090;&amp;#1074;&amp;#1086;&amp;#1088;&amp;#1077;&amp;#1085;&amp;#1080;&amp;#1103; (&amp;#1074; &amp;#1082;&amp;#1074;&amp;#1072;&amp;#1076;&amp;#1088;&amp;#1072;&amp;#1090;&amp;#1077;) &amp;#1086;&amp;#1073;&amp;#1098;&amp;#1077;&amp;#1082;&amp;#1090;&amp;#1072; &lt;/font&gt;&lt;/i&gt;
&lt;font color=&quot;#0000FF&quot;&gt;float&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;magicFadeLenK&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;1.0&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;/&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;((&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;endFadeDist&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;*&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;endFadeDist&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;-&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;startFadeDistSq&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;     
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://dobrokot.nm.ru/WinnieColorizer.html&quot;&gt;&lt;font color=&quot;#727272&quot;&gt;_Winnie C++ Colorizer&lt;/font&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;br&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#F2F2F2&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//&amp;#1057;&amp;#1095;&amp;#1080;&amp;#1090;&amp;#1072;&amp;#1077;&amp;#1084; &amp;#1082;&amp;#1086;&amp;#1101;&amp;#1092;&amp;#1080;&amp;#1094;&amp;#1077;&amp;#1085;&amp;#1090; &amp;#1087;&amp;#1088;&amp;#1086;&amp;#1079;&amp;#1088;&amp;#1072;&amp;#1095;&amp;#1085;&amp;#1086;&amp;#1089;&amp;#1090;&amp;#1080; &amp;#1086;&amp;#1073;&amp;#1098;&amp;#1077;&amp;#1082;&amp;#1090;&amp;#1072; &amp;#1074; &amp;#1079;&amp;#1072;&amp;#1074;&amp;#1080;&amp;#1089;&amp;#1080;&amp;#1084;&amp;#1086;&amp;#1089;&amp;#1090;&amp;#1080;&lt;/font&gt;&lt;/i&gt;
&lt;i&gt;&lt;font color=&quot;#808080&quot;&gt;//&amp;#1086;&amp;#1090; &amp;#1076;&amp;#1080;&amp;#1089;&amp;#1090;&amp;#1072;&amp;#1085;&amp;#1094;&amp;#1080;&amp;#1080; &amp;#1076;&amp;#1086; &amp;#1082;&amp;#1072;&amp;#1084;&amp;#1077;&amp;#1088;&amp;#1099;&lt;/font&gt;&lt;/i&gt;
&lt;font color=&quot;#0000FF&quot;&gt;vector&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;dist&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;objectPosition&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;-&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;cameraPosition&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;;&lt;/font&gt;
&lt;font color=&quot;#0000FF&quot;&gt;float&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;distSquared&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;dot&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;dist&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;dist&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#0000FF&quot;&gt;float&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;transparencyK&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;clamp&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#40B440&quot;&gt;1.0&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;-&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;((&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;distSquared&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;-&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;startFadeDistSq&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#C8003C&quot;&gt;*&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;magicFadeLenK&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;),&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;0.0&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#40B440&quot;&gt;1.0&lt;/font&gt;&lt;font color=&quot;#C8003C&quot;&gt;);&lt;/font&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://dobrokot.nm.ru/WinnieColorizer.html&quot;&gt;&lt;font color=&quot;#727272&quot;&gt;_Winnie C++ Colorizer&lt;/font&gt;&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;br&gt;



результат функции красивый практически линейный, идеально ложиться в &lt;strong&gt;HLSL&lt;/strong&gt;, на &lt;strong&gt;PowerPC&lt;/strong&gt; обрезаем через &lt;strong&gt;fsel&lt;/strong&gt;, что бы избежать &lt;strong&gt;float compare&lt;/strong&gt; и &lt;strong&gt;branch&lt;/strong&gt;

результаты так же можно возводить в квадрат и в куб, для более интересной функции затухания, в результате практически все объекты движка, которым нужно плавное растворение/затухание теперь работают через эту функцию. А это: attenuation звуков, лоды источников света, лоды геометрии, 3d текст и еще куча всякого.

&lt;br&gt;
&lt;br&gt;

&lt;strong&gt;График функции:&lt;/strong&gt;

&lt;br&gt;


&lt;a href=&quot;http://sergeymakeev.com/wp-content/uploads/2008/11/fade_function.jpg&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-45&quot; title=&quot;Функция затухания&quot; src=&quot;http://sergeymakeev.com/wp-content/uploads/2008/11/fade_function.jpg&quot; alt=&quot;&quot; width=&quot;480&quot; height=&quot;845&quot; /&gt;&lt;/a&gt;



&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=35&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/5486.html</comments>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/5184.html</guid>
  <pubDate>Fri, 24 Oct 2008 09:21:12 GMT</pubDate>
  <title>Отладочные символы для windows</title>
  <link>http://joker-ru.livejournal.com/5184.html</link>
  <description>&lt;p&gt;Оказывается, если скачать Debugging Tools for Windows вот &lt;a href=&quot;http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx#a&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;, а потом выполнить в консоли: &lt;strong&gt;symchk /r c:\windows\system32 /s SRV*c:\symbols\*http://msdl.microsoft.com/download/symbols&lt;/strong&gt; то тулза автоматически просканирует всю виндовую директорию и заберет нужные PDB. И можно в отладчике вместо ntdll.dll и компании в колстеке видеть человеческую инфу&lt;/p&gt;

&lt;small&gt;&lt;br&gt;&lt;a href=&quot;http://sergeymakeev.com/?p=31&quot;&gt;Данный пост&lt;/a&gt;  размещен в моем личном блоге &lt;a href=&quot;http://sergeymakeev.com&quot;&gt;SergeyMakeev.com&lt;/a&gt;.&lt;/small&gt;</description>
  <comments>http://joker-ru.livejournal.com/5184.html</comments>
  <category>разное</category>
  <category>игрострой</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/4128.html</guid>
  <pubDate>Sun, 21 Sep 2008 04:54:00 GMT</pubDate>
  <link>http://joker-ru.livejournal.com/4128.html</link>
  <description>&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;утащено с &lt;a href=&quot;http://realtimecollisiondetection.net/blog/?p=15&quot;&gt;http://realtimecollisiondetection.net/blog/?p=15&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;// M matrix, for encoding&lt;br /&gt;const static float3x3 M = float3x3(&lt;br /&gt;    0.2209, 0.3390, 0.4184,&lt;br /&gt;    0.1138, 0.6780, 0.7319,&lt;br /&gt;    0.0102, 0.1130, 0.2969);&lt;br /&gt;&lt;br /&gt;// Inverse M matrix, for decoding&lt;br /&gt;const static float3x3 InverseM = float3x3(&lt;br /&gt;	6.0013,	-2.700,	-1.7995,&lt;br /&gt;	-1.332,	3.1029,	-5.7720,&lt;br /&gt;	.3007,	-1.088,	5.6268);	&lt;br /&gt;&lt;br /&gt;float4 LogLuvEncode(in float3 vRGB)  {&lt;br /&gt;    float4 vResult;&lt;br /&gt;    float3 Xp_Y_XYZp = mul(vRGB, M);&lt;br /&gt;    Xp_Y_XYZp = max(Xp_Y_XYZp, float3(1e-6, 1e-6, 1e-6));&lt;br /&gt;    vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;&lt;br /&gt;    float Le = 2 * log2(Xp_Y_XYZp.y) + 127;&lt;br /&gt;    vResult.w = frac(Le);&lt;br /&gt;    vResult.z = (Le - (floor(vResult.w*255.0f))/255.0f)/255.0f;&lt;br /&gt;    return vResult;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;float3 LogLuvDecode(in float4 vLogLuv) {&lt;br /&gt;	float Le = vLogLuv.z * 255 + vLogLuv.w;&lt;br /&gt;	float3 Xp_Y_XYZp;&lt;br /&gt;	Xp_Y_XYZp.y = exp2((Le - 127) / 2);&lt;br /&gt;	Xp_Y_XYZp.z = Xp_Y_XYZp.y / vLogLuv.y;&lt;br /&gt;	Xp_Y_XYZp.x = vLogLuv.x * Xp_Y_XYZp.z;&lt;br /&gt;	float3 vRGB = mul(Xp_Y_XYZp, InverseM);&lt;br /&gt;	return max(vRGB, 0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://joker-ru.livejournal.com/4128.html</comments>
  <category>gpu</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/3842.html</guid>
  <pubDate>Fri, 12 Sep 2008 08:44:27 GMT</pubDate>
  <title>Скорость печати</title>
  <link>http://joker-ru.livejournal.com/3842.html</link>
  <description>Му-ха-ха !! 283 осмысленных знака в минуту ! Почти 4.71 в секунду&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.klavogonki.ru/sign/37140.gif&quot; /&gt;</description>
  <comments>http://joker-ru.livejournal.com/3842.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/3658.html</guid>
  <pubDate>Tue, 26 Aug 2008 18:08:36 GMT</pubDate>
  <title>LinkedIn</title>
  <link>http://joker-ru.livejournal.com/3658.html</link>
  <description>&lt;a href=&quot;http://www.linkedin.com/in/sergeymakeev&quot;&gt;&lt;img src=&quot;http://www.linkedin.com/img/webpromo/btn_viewmy_160x33.gif&quot; width=&quot;160&quot; height=&quot;33&quot; border=&quot;0&quot; alt=&quot;View Sergey Makeev&amp;#39;s profile on LinkedIn&quot;&gt;&lt;/a&gt;</description>
  <comments>http://joker-ru.livejournal.com/3658.html</comments>
  <category>social networks</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/3294.html</guid>
  <pubDate>Wed, 20 Aug 2008 18:19:13 GMT</pubDate>
  <title>3D Голова из фото</title>
  <link>http://joker-ru.livejournal.com/3294.html</link>
  <description>По результатам тестов Faceworx, iClone, Facial Studio, FaceGen, FaceShopPro и GenHead&lt;br /&gt;победил GenHead, на втором месте Faceworx&lt;br /&gt;&lt;br /&gt;может еще есть что посмотреть на эту тему ?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;upd: Вот круто, но руками сделано&lt;br /&gt;&lt;a href=&quot;http://forums.cgsociety.org/showthread.php?t=399499&quot;&gt;http://forums.cgsociety.org/showthread.php?t=399499&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://forums.cgsociety.org/showthread.php?p=3661085#post3661085&quot;&gt;http://forums.cgsociety.org/showthread.php?p=3661085#post3661085&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;upd2: Еще посмотрел 3DMeNow от Biovirtual неплохо, но не поддерживают с 2002 года уже, а XHead от них же найти не смог и It&apos;s me это вообще какая то ерунда</description>
  <comments>http://joker-ru.livejournal.com/3294.html</comments>
  <category>soft</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/2888.html</guid>
  <pubDate>Mon, 28 Jul 2008 18:30:11 GMT</pubDate>
  <title>зарубки на память</title>
  <link>http://joker-ru.livejournal.com/2888.html</link>
  <description>все время забываю такие URL&apos;ы :)&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://pixelstoomany.wordpress.com/&quot;&gt;http://pixelstoomany.wordpress.com/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://realtimecollisiondetection.net/blog/&quot;&gt;http://realtimecollisiondetection.net/blog/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://zeuxcg.blogspot.com/&quot;&gt;http://zeuxcg.blogspot.com/&lt;/a&gt;</description>
  <comments>http://joker-ru.livejournal.com/2888.html</comments>
  <category>bookmarks</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/2761.html</guid>
  <pubDate>Thu, 24 Jul 2008 14:28:59 GMT</pubDate>
  <title>смешной счетчик</title>
  <link>http://joker-ru.livejournal.com/2761.html</link>
  <description>&lt;a href=&quot;http://dkg.pp.ru/nosmoke.php&quot;&gt;&lt;img src=&quot;http://dkg.pp.ru/nosmoke/JokerRu.png&quot; border=&quot;0&quot;&gt;&lt;/a&gt;</description>
  <comments>http://joker-ru.livejournal.com/2761.html</comments>
  <category>nosmoke</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/2543.html</guid>
  <pubDate>Sun, 13 Jul 2008 19:13:10 GMT</pubDate>
  <link>http://joker-ru.livejournal.com/2543.html</link>
  <description>&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Мероприятия по ситуации «Атомная тревога» &lt;br /&gt;Штабы Гражданской обороны Москвы Отделения служб МЧС Руководства пожарных, аварийных, спасательных и медицинских служб &lt;br /&gt;&lt;br /&gt;§1. Предварительные сведения. &lt;br /&gt;1.1. Наиболее вероятное время нанесения ядерного удара по Москве — около 18 часов по московскому времени. Это обусловлено тем, что: &lt;br /&gt;а) 10 часов утра по вашингтонскому времени позволяют подготовить и произвести удар в течение рабочего утра соответствующих силовых структур, не привлекая преждевременно повышенного внимания наших разведок к активности ведомств возможного противника в нерабочее время; &lt;br /&gt;б) все виды городской и междугородной связи в конце рабочего дня перегружены, и координация экстренных оборонительных мер затруднена; &lt;br /&gt;в) внимание дежурных служб именно в это время снижается; &lt;br /&gt;г) значительная часть населения находится в дороге между местами работы и проживания, что дополнительно затрудняет координацию мер и действий; &lt;br /&gt;д) транспортные артерии парализованы пробками, а находящееся в них население в первую очередь незащищено перед поражающими факторами. &lt;br /&gt;1.2. Наиболее вероятная мощность термоядерного боеприпаса — от 2 до 10 мегатонн. Сверхмощность боеприпаса ограничивается возможностями средств доставки и обусловлена большой площадью мегаполиса Москвы, сосредоточением в нем центральных разведывательно-оборонных подразделений и предприятий, а по его периметру — пояса ракетных и авиационных комплексов прикрытия, но в первую очередь — высокой защищенностью убежищ президентского и правительственного аппаратов и служб управления Министерства Обороны, являющихся основной целью. &lt;br /&gt;1.3. Наиболее вероятное время от момента сигнала оповещения «Атомная тревога!» до момента поражающего удара: &lt;br /&gt;а) порядка 14 минут при запуске ракетоносителей наземного базирования с территории американского континента; &lt;br /&gt;б) порядка 7 минут при запуске ракетоносителей с морских ракетоносцев подводного базирования, занимающих позиции в Северной Атлантике и Северном Ледовитом океане. &lt;br /&gt;Это соответствует подлетному времени баллистических ракет, движущихся в надатмосферном пространстве по баллистическим траекториям со скоростью порядка первой космической, т. е. 7,9 км/сек, или ок. 28 000 км/час. Практически в боевых условиях возможно предусмотреть некоторые сбои и задержки связи, что может сократить время оповещения реально до нескольких минут. &lt;br /&gt;&lt;br /&gt;§2. Сигнал «Атомная тревога!» подается голосом по всем каналам теле- и радиовещания, а также дублируется гудками железнодорожных локомотивов и плавсредств — один длинный гудок и два коротких, повторяющихся несколько раз. &lt;br /&gt;&lt;br /&gt;§3. Лица, обеспеченные по своему должностному положению убежищами, немедленно начинают действовать согласно эвакуационному плану на случай атомной тревоги под руководством уполномоченных гражданской обороны, или комендантов зданий, или руководителей коллективов, или самостоятельно. Действовать следует без паники, организованно, без малейших промедлений. Любые проявления паники должны незамедлительно пресекаться любыми возможными средствами, вплоть до применения силы и оружия. &lt;br /&gt;Не более чем через 6 минут (либо ранее по приказу старшего по убежищу, убедившемуся в наличии в убежище приписанных групп в полном составе) после первого сигнала оповещения все входы в убежище должны быть перекрыты и блокированы по боевому режиму, невзирая на случаи не успевших укрыться в них и количество оставшихся снаружи. Попытки препятствовать закрытию входов со стороны любых лиц без исключения должны незамедлительно подавляться любыми средствами вплоть до применения оружия. &lt;br /&gt;&lt;br /&gt;§4. По сигналу «Атомная тревога!» лица, не обеспеченные убежищами, действуют самостоятельно в зависимости от того, где они в данный момент находятся, без промедления и паники принимая все необходимые меры по защите и укрываясь от факторов ядерного поражения. Действовать следует спокойно, грамотно, оценивая конкретные условия своего местопребывания, голосом и действием побуждая окружающих следовать своему примеру и вселяя в них уверенность. В первую очередь необходимо позаботиться о безопасности детей и женщин, а также лиц пожилого возраста. &lt;br /&gt;4.1. Если в доме есть подвал, следует укрыться в подвале. Щели в дверях надо заткнуть любой тканью, ее можно намочить. С собой полезно взять небольшой запас питьевой воды. &lt;br /&gt;4.2. Находясь в здании, лучше укрыться в закрытом помещении — внутреннем коридоре, ванной, кладовой — которое отделено от наружных стен дополнительной перегородкой и не имеет окон. Также полезно заткнуть дверные щели и запастись водой. &lt;br /&gt;4.3. В помещении с окном лягте на пол ногами к наружной стене, прикрыв голову руками. Выберите место внизу или сбоку окна, чтобы свет падал на вас как можно меньше. Лучше укрыться от света за тяжелым предметом — шкафом, диваном, столом. &lt;br /&gt;4.4. Находящимся на улицах следует немедленно укрыться в зданиях, хотя бы в их подъездах, или применить другие естественные убежища, к которым относится: &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;4.5. Находясь в общественном наземном транспорте, следует немедленно покинуть его и укрыться (см. выше). &lt;br /&gt;4.6. Находясь в автомобиле, следует немедленно покинуть его и укрыться (см. выше). При нахождении автомобиля в тоннеле следует остановиться в нем. При невозможности покинуть автомобиль в уличной пробке или отсутствии поблизости укрытий следует лечь на пол между сидений и прикрыть голову руками, защитившись от излучения извне. &lt;br /&gt;4.7. При невозможности укрыться в каком-либо помещении лягте на землю у здания под стеной, противоположной центру города, где будет находиться эпицентр взрыва. Постарайтесь выбрать закрытый со всех сторон двор-колодец или узкий проход между зданий. &lt;br /&gt;4.8. При нахождении в парковой зоне в отдалении от возможных укрытий — определите толстое дерево, или холм, или канаву, или любую неровность местности, или памятник, и лягте ногами к нему, лицом от центра города, где будет находиться эпицентр взрыва. Это предохранит вас от теплового излучения, являющегося основным поражающим фактором. &lt;br /&gt;4.9. Все входы в метрополитен по сигналу оповеще¬ния закрываются немедленно. Любые проявления паники среди населения или попытки противодействовать немедленному закрытию входов подавляются незамедлительно сотрудниками станционных пикетов милиции соответствующими средствами вплоть до применения оружия на поражение. Вместе с тем: &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;br /&gt;странстве, должны достичь входов в тоннели и по воз &lt;br /&gt;можности углубиться в них. &lt;br /&gt;&lt;br /&gt;§5. В ясную безоблачную погоду в светлое время суток приближение снижающейся боеголовки может быть определено по белому инверсионному следу, подобному следу от самолета на большей высоте, дугообразно снижающемуся из верхних слоев атмосферы в на¬правлении центра Москвы с большой скоростью. Помните: звук подлетающей и снижающейся боеголовки не будет слышен вследствие ее сверхзвуковой скорости. &lt;br /&gt;&lt;br /&gt;§6. При точности современных средств наведения эпицентр взрыва расположится в пределах Бульварного кольца, ориентируясь на район Кремль—Лубянка—Арбат. &lt;br /&gt;&lt;br /&gt;§7. В Москве следует ожидать наземного взрыва. Это несколько уменьшает радиус общего поражения по сравнению с надземным взрывом, но увеличивает силу сейсмической волны, что ведет к грунтовым подвижкам типа тектонических возмущений характера сходного с землетрясением большой мощности в верхних слоях, приводя к раздавливанию и разрушению даже значительно заглубленных убежищ повышенной степени прочности в радиусе десяти—пятнадцати километров. &lt;br /&gt;&lt;br /&gt;§8. Тепловой поражающий фактор. &lt;br /&gt;8.1. В эпицентре взрыва возникает световая вспышка, по яркости многократно превосходящая наблюдаемый солнечный свет. В течение 0,03—0,04 сек. вспышка оформляется в ослепительную светящуюся сферу 1,5— 2 км в диаметре, с температурой 10—20 млн &quot;С. Она покрывает центр города в радиусе Бульварное Кольцо — Кремль — Полянка, причем все, входящее в это пространство, мгновенно перестает существовать, переходя в плазменное состояние. &lt;br /&gt;8.2. В радиусе 3—4 км мгновенно испаряются и испепеляются все объекты органического происхождения, непосредственно открытые прямому тепловому излучению взрыва (неукрытые люди, животные, растения, деревянные части строений, обращенные в сторону взрыва). Плавятся, испаряются, мгновенно сгорают асфальтовые дорожные покрытия, металлические ограды, кровли и части конструкций зданий, бетонные и кирпичные стены, в т. ч. с каменной и керамической облицовкой, как открытые прямому тепловому излучению взрыва, так и укрытые на глубину до нескольких метров. Все вещества, как органические укрытые, так и неорганические термостойкие, в радиусе Садового Кольца непосредственно вслед за моментом взрыва сгорают в течение нескольких секунд с температурой в десятки тысяч градусов. &lt;br /&gt;8.3. В радиусе 20—25 км вспыхивают все обращенные в сторону взрыва и доступные прямому тепловому излучению деревянные, пластиковые, окрашенные поверхности, растения, прогорают металлические крыши, оплавляются бетон, кирпич, стекло, металл, камень; сгорают оконные рамы, испаряются стекла, плавятся провода, загорается асфальт. Зона активного пожара мгновенно охватывает город в пределах внутри МКАД. За пределами МКАД возникает кольцевой лесной пожар. Возгораются полностью застроенные массивы и лесопарковые зоны. Водоемы Москва-реки и Яузы испаряются, вскипает верхний слой Химкинского водохранилища. &lt;br /&gt;Помните: прямое лучевое тепловое воздействие про¬должается от долей секунды до нескольких секунд и даже до нескольких десятков секунд в зависимости от мощности взрыва и распространяется только по прямой, т. е. любое препятствие между вами и взрывом, в тени которого вы окажетесь, может сохранить вам жизнь в ситуации достаточного удаления от эпицентра взрыва. &lt;br /&gt;&lt;br /&gt;§9. Поражающий фактор ударной волны. &lt;br /&gt;9.1. Действие ударной воздушной волны начинается непосредственно в момент взрыва и следует вслед за тепловым излучением, однако отставая от его мгно¬венного воздействия по мере удаления от эпицентра взрыва чем дальше, тем на больший промежуток времени, Во второй зоне поражения скорость воздушной ударной волны достигает 1—5 тыс м/сек, т.е. все в этой зоне, причем уже подвергшееся тепловому воздействию, сносится мощнейшим взрывом по направлению от эпицентра к периферии, превращаясь в выровненную поверхность измельченных обломков, горящих с высокими температурами (т. н. «сдувание ландшафта»). Измельченные горящие обломки веществ, находившиеся между радиусами Бульварного и Садового Кольца, выбрасываются ударной волной по расширя¬ющейся концентрической окружности в зону три. &lt;br /&gt;9.2. В третьей зоне, т. е. в пределах Москвы внутри МКАД, скорость ударной волны несколько снижается, особенно у самой поверхности, однако продолжает оставаться выше сверхзвуковой, т. е. до 300—500 м/сек на границе МКАД, что обусловливает мгновенное разрушение всех наземных строений, как высотных, так и малоэтажных. Раскаленные и горящие части поверхностей, обращенных к эпицентру, перемешиваясь при сносе с прочими материалами, дают т.н. «огненный ковер» с температурой, обеспечивающей горение металлов и плавление керамик. В процессе прохождения ударной волны отдельные части и детали движутся в воздухе со скоростями порядка артиллерийских снарядов, усугубляя процесс разрушения всего, что возвышается над поверхностью. Все насаждения вырываются, вода из всех водоемов «выдавливается». &lt;br /&gt;9.3. Ближайшие за МКАД леса, населенные пункты и аэропорты также подвергаются полному или преимущественному уничтожению, частичному или полному разрушению и сгоранию. &lt;br /&gt;9.4. Внутри всей пораженной зоны возникает область резко пониженного атмосферного давления вследствие как выгорания в воздухе кислорода, так и концентрического «раздвигания» воздушных масс. Вследствие этого вскоре после прохода ударной волны возникает «обратная ударная волна», направленная к эпицентру. Она характеризуется значительно меньшей скоростью, соизмеримой со скоростью обычного урагана, но приносит на &lt;br /&gt;всю площадь загорания массы свежего кислорода, что создает эффект «кузнечных мехов», создавая т. н. «огненный шторм» на всей площади поражения. Зона в пределах МКАД уподобляется разровненной поверхности раскаленных углей в топке. &lt;br /&gt;&lt;br /&gt;§10. Сейсмическое воздействие наземного взрыва вызывает «эффект землетрясения» с уплотнением и сдвиганием поверхностных слоев. Все подземные сооружения метрополитена в пределах Кольцевой линии и ближайших за ней станций разрушаются и заваливаются полностью. Все бомбоубежища в пределах Садового Кольца разрушаются полностью. Все подвальные помещения в черте МКАД разрушаются полностью. Все канализационные и вентиляционные подземные сооружения в пространстве «Проспект Мира», «Зоопарк», «Серпуховская», «Площадь Ильича» раздавливаются, разрушаются и заваливаются. Все входы и выходы из метро, вентиляционные шахты, запасные и служебные выходы заваливаются, или раздавливаются, или полностью блокируются слоем раскаленной массы на поверхности. &lt;br /&gt;&lt;br /&gt;§11. Внешняя картина взрыва выглядит обычно и характерно для термоядерного взрыва большой мощности. Белая плазменная сфера, накрывающая, подобно двухкилометровому колпаку, центр Москвы и превышающая вчетверо по высоте Останкинскую телебашню, через несколько секунд начинает тускнеть, задергиваться багровой дымной пеленой и отделяется от поверхности, «всплывая» вверх. Горящий город «ложится» во все стороны, как круг домино, покрывается клубящимся дымом, и потоки дыма и огня устремляются от периферии круга МКАД к поднимающейся сфере, образуя характерную «ножку гриба», которая расширяется внизу до пределов зоны поражения, сужаясь вверху к сфере, которая окутывается облаком «шляпки гриба». Клубящийся дым у подножия гриба достигает километровой высоты, диаметр «ножки» сужается до восьмисот-тыся-чи метров под «шляпкой». «Гриб» продолжает подниматься, и, хотя подъем выглядит медленно вследствие его гигантских размеров, через три-пять минут высота его достигает 25—35 км. При взрыве большой мощности эта картина может стоять до нескольких часов. &lt;br /&gt;&lt;br /&gt;§12. Сам пожар, не дающий возможности начать какие бы то ни было спасательные работы, может про¬должаться, с учетом пораженной площади мегаполиса Москвы, до нескольких суток. &lt;br /&gt;&lt;br /&gt;§13. Высокий радиационный фон не позволит начинать какие бы то ни было спасательные работы в мегаполисе ранее, чем через 15—20 суток, за исключением спецопераций особой важности. Проведение любых спасательных операций следует считать целесообразным в зоне не ближе 5—10 км за линией МКАД. &lt;br /&gt;&lt;br /&gt;§14. Воронка в эпицентре взрыва представляет из себя кратер диаметром порядка 2 км и глубиной в центре до 200—300 м. Его поверхность представляет из себя стекловидную массу толщиной до 10—12 м. &lt;br /&gt;Вторая зона поражения представляет собой сравнительно ровную поверхность, покрытую слоем стекловидной спекшейся массы толщиной 0,3—0,9 м. &lt;br /&gt;Третья зона поражения представляет собой бугристую поверхность, в значительной части покрытую стекловидной спекшейся массой толщиной от нескольких миллиметров до нескольких сантиметров. &lt;br /&gt;Испытания подобных боеприпасов, проводимые как СССР, так и США и Францией, с надежностью показали, что попытки проведения любых спасательных работ в указанных радиусах не имеют реальных оснований. Поражение открытой и укрытой живой силы, техники и строений достигает 100%. Спасательные работы следует сосредоточить на отселение и оказание помощи людям, оказавшимся вне пределов зоны непосредствен¬ного поражения, за пределы 100-километровой зоны. &lt;br /&gt;Мегаполис Москва следует считать потерянным безвозвратно, какое-либо использование его территории в ближайшее десятилетие абсолютно невозможно&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://joker-ru.livejournal.com/2543.html</comments>
  <category>bookmark</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://joker-ru.livejournal.com/2200.html</guid>
  <pubDate>Sat, 12 Apr 2008 09:53:24 GMT</pubDate>
  <title>Вот тизер для КРИ намутили - наслаждйтесь :)</title>
  <link>http://joker-ru.livejournal.com/2200.html</link>
  <description>&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id=&quot;1&quot; /&gt;&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://joker-ru.livejournal.com/2200.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
</channel>
</rss>
