<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блоги &#187; Игры</title>
	<atom:link href="http://software.intel.com/ru-ru/blogs/category/gaming/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/ru-ru/blogs</link>
	<description></description>
	<lastBuildDate>Tue, 07 Feb 2012 14:18:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Postal III: Халтура в абсолюте</title>
		<link>http://software.intel.com/ru-ru/blogs/2012/01/23/postal-iii/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2012/01/23/postal-iii/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 09:46:59 +0000</pubDate>
		<dc:creator>vilianov</dc:creator>
				<category><![CDATA[Игры]]></category>
		<category><![CDATA[Postal III]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2012/01/23/postal-iii/</guid>
		<description><![CDATA[Уже давно, лет эдак восемь назад, мне рассказали об очень смешной игре, где можно биться на лопатах, бороться с несправедливостью несправедливыми же методами, а если все надоест – поймать кошку и привлечь ее в союзники. Называлось это чудо Postal II. Я обещал непременно попробовать «Постал» в действии, но что-то все не складывалось да не складывалось. В результате руки до игры дошли только летом 2009 года, но и тогда она показалась вполне занимательной и смешной. Конечно, графика радовала средне, но зато можно было отлично играть на встроенном в чипсет Intel 945 графическом ядре (и, соответственно, на ноутбуке). Закончив недлинную игру, я стал ждать третьей части, которая к тому моменту находилась в разработке третий же год.]]></description>
			<content:encoded><![CDATA[<p>Уже давно, лет эдак восемь назад, мне рассказали об очень смешной игре, где можно биться на лопатах, бороться с несправедливостью несправедливыми же методами, а если все надоест – поймать кошку и привлечь ее в союзники. Называлось это чудо Postal II. Я обещал непременно попробовать «Постал» в действии, но что-то все не складывалось да не складывалось. В результате руки до игры дошли только летом 2009 года, но и тогда она <a href="http://software.intel.com/ru-ru/blogs/2009/08/10/postal-2/">показалась вполне занимательной и смешной</a>. Конечно, графика радовала средне, но зато можно было отлично играть на встроенном в чипсет Intel 945 графическом ядре (и, соответственно, на ноутбуке). Закончив недлинную игру, я стал ждать третьей части, которая к тому моменту находилась в разработке третий же год.</p>
<p>Однако ни в 2009-м году, ни в 2010-м игра так и не вышла, хотя на всевозможных выставках у нее непременно были стенды, где поначалу крутились ролики, а под конец 2010-го уже стали давать поиграть в один из эпизодов. Выглядело все довольно симпатично, но скучновато. Дата выхода игры упорно замалчивалась и стала известной лишь в конце сентября 2011-го. Правда, назвав ее, разработчики снова чуть-чуть наврали, и вместо 3 ноября новый Postal вышел 23-го, а в Steam появился и вовсе 21 декабря. У меня конец года получился крайне насыщенным, поэтому премьеру, каюсь, пропустил. И все же за разнообразными хлопотами не покидала мысль – почему же никто из знакомых в соцсетях ни словом не обмолвился о выходе почти легендарного долгостроя? Почему не дают ссылки на обзоры и не рапортуют о набегах на магазины? Неужели игра так и не вышла?</p>
<p>Но вот новогодние праздники закончились, за ними пронеслась и CES, и я наконец-то решил попробовать Postal III. Правда, в Steam его почему-то найти не удалось, и по  прямой ссылке из пресс-релиза меня просто выбрасывало на главную страницу. Ну да ладно, обойдемся архаичными DVD. Ставлю игру, активирую, запускаю и понимаю - почему молчат соцсети. Видимо, они оказались шокированы не меньше моего.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/7.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/7.jpg" alt="" width="600" height="338" class="aligncenter size-full wp-image-2006794" /></a></p>
<p>Напомню, Postal III делали без малого шесть лет. Если верить пресс-релизу, за это время «у пятерых разработчиков родились дети, двое человек, причастных к проекту, и одна собака отправились в лучший мир, дата релиза проекта переносилась раз 9. Студия TrashMasters сменила три офиса, 4 сотрудников проводили работать в заграничные компании. За годы разработки было выпито 69 800 литров кофе, 56 700 литров чая, 138 900 литров пива. Подсчитать количество более крепкого алкоголя не представляется возможным в силу провалов в памяти сотрудников». Жаль, что не уточняется – на каком этапе от издателей в ужасе убежала совесть. Потому что большей лажи я и припомнить не могу. На фоне Postal III многострадальный Duke Nukem Forever выглядит вполне приличной игрой.</p>
<p>В Postal III ужасно практически все. Графика – на уровне худших образцов года эдак 2006-го (поддержка только DirectX 9 в конце 2011-го, каково?). Сюжет по разнообразию уступает даже любовным романам в мягкой обложке, которые давно пишутся специально натасканными текстогенераторами. Играть в новый Postal просто дико неудобно – действительно разнообразное оружие интегрировано в геймплей из рук вон плохо, и применять его по назначению порой невозможно. Наконец, стабильность работы отсутствует: игра вылетает по поводу и без, иногда даже слегка «подвешивая» компьютер. Ну и, конечно, «потрясает» дизайн. Авторы игры явно пытались замаскировать уродливые меню под эдакий хитрый панк-стиль, где все нарочито небрежно и кривовато. Но нет: игра ДЕЙСТВИТЕЛЬНО сляпана на коленке, и ни под какой мусорный дизайн не замаскировать полное отсутствие последнего.</p>
<p>Полное ощущение, что Postal III забросили и похоронили еще года три назад, а потом, вдохновившись примером несчастного кадавра Duke Nukem, решили быстренько соорудить нечто из имеющихся набросков и запустить ЭТО в продажу. Народ, конечно, будет плеваться, но сотню-другую тысяч копий продать непременно успеем, пока раскушают. Всё деньги…</p>
<p>Пожалуйста, ни в коем случае не покупайте это безобразие. Не могу сказать, что прямо очень-очень ждал игру. Но все же обидно. Радует, правда, что действительно ожидаемых игр крайне мало, и вряд ли выпуск недоделок с громкими именами удастся поставить на поток. </p>
<p>Мне же остается надеяться, что в лапы подобных раздолбаев не попадет бренд Full Throttle.</p>
<p>P.S. И угадайте – почему я на этот раз даже не вспомнил о поддержке многоядерных процессоров?</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2012/01/23/postal-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L.A. Noire: когда квест встретил шутер</title>
		<link>http://software.intel.com/ru-ru/blogs/2011/12/23/la-noire/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2011/12/23/la-noire/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 07:10:09 +0000</pubDate>
		<dc:creator>vilianov</dc:creator>
				<category><![CDATA[Графика]]></category>
		<category><![CDATA[Игры]]></category>
		<category><![CDATA[GTA]]></category>
		<category><![CDATA[L.A. Noire]]></category>
		<category><![CDATA[Rockstar games]]></category>
		<category><![CDATA[Team Bondi]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2011/12/23/la-noire/</guid>
		<description><![CDATA[Давным-давно, когда компьютеры были большими и довольно слабенькими, большой популярностью пользовался игровой жанр под названием «квест». Графика на PC до поры оставляла желать лучшего, а квесты - с их огромным простором для домысливания и вообще применения головного мозга по прямому назначению - позволяли и удовольствие от игры получить, и забыть о весьма условной картинке. Когда же графика рванула вперед, квесты остались в прошлом. Просто потому, что желание думать у широких масс куда-то улетучилось. Нет, ну правда – кому охота сидеть и ломать голову, как из шляпы, утюга и вантуза сделать летательный аппарат, когда можно бегать и стрелять, иногда отвлекаясь на любование действительно роскошными пейзажами?]]></description>
			<content:encoded><![CDATA[<p>Давным-давно, когда компьютеры были большими и довольно слабенькими, большой популярностью пользовался игровой жанр под названием «квест». Графика на PC до поры оставляла желать лучшего, а квесты - с их огромным простором для домысливания и вообще применения головного мозга по прямому назначению - позволяли и удовольствие от игры получить, и забыть о весьма условной картинке. Когда же графика рванула вперед, квесты остались в прошлом. Просто потому, что желание думать у широких масс куда-то улетучилось. Нет, ну правда – кому охота сидеть и ломать голову, как из шляпы, утюга и вантуза сделать летательный аппарат, когда можно бегать и стрелять, иногда отвлекаясь на любование действительно роскошными пейзажами?</p>
<p>Каюсь, я и сам постепенно переключился с квестов на шутеры, а в последнее время прохожу от и до только сериалы FarCry/Crysis и GTA. «Раньше у нас было время, теперь у нас есть дела», как пел классик. Ну и жизнь порой подкидывала такие квесты, что компьютерные аналоги как-то перестали цеплять. Последним прошел, кажется, «Грим Фанданго» - и все, отрезало.</p>
<p>Делать квесты практически перестали. Затраты на них внушительные, нужны талантливые сценаристы, толпы актеров, художников и т.д., иначе будет не красиво и не интересно. А купит все это от силы сотня тысяч слоупоков. Кому ж охота несколько лет ваять эксклюзив, который никогда не окупится? </p>
<p><img src="http://helpix.ru/pic/vilianov/lanoire/lanoire05.jpg" alt="L.A. Noire" /></p>
<p>Но в Rockstar Games решили немного воскресить старый жанр. Еще в далеком 2004-м году они поддержали материально австралийскую компанию Team Bondi и приступили к совместной разработке полицейского триллера о Лос-Анджелесе конца сороковых. Чтобы с беготней по улицам, ездой на машинах, стрельбой – но и реальным участием геймера в расследовании преступлений. Для этого на лицах персонажей появилась почти естественная мимика, по которой можно определить – врет ли он, нервничает или, наоборот, рубит правду-матку от души. Планировалось, что игра выйдет в 2008 году, но тут некстати подкрался мировой финансовый кризис, и L.A. Noire отложили до лучших времен. Которые наступили только в мае сего года для приставочников и в ноябре для нас, обладателей настоящих компьютеров. Выход Windows-версии пришелся на не самый лучший период в жизни Team Bondi: в октябре компания обанкротилась, оставив кредиторам разного рода расписок на миллион с лишним долларов США. К счастью, повлиять это может разве что на выход сиквела, если таковой вдруг случится, а оригинальная игра к тому моменту была закончена полностью.</p>
<p><img src="http://helpix.ru/pic/vilianov/lanoire/lanoire04.jpg" alt="L.A.Noire" /></p>
<p>Итак, что такое L.A. Noire?</p>
<p>Во-первых, это GTA IV с сильно улучшенной графикой, действие которой происходит на улицах Лос-Анджелеса образца 1947 года. Ездят машины, ходят люди, дома и улицы очень похожи на настоящие – в общем, залюбуешься. Вот только машины угонять теперь не надо, у полицейского всегда есть своя. И давить людей не рекомендуется, за это жестоко штрафуют и заставляют переигрывать эпизоды. Стрелять можно, но только в конченных негодяев, а так – только в воздух. </p>
<p><img src="http://helpix.ru/pic/vilianov/lanoire/lanoire02.jpg" alt="" /></p>
<p>Вместо веселых кровожадных развлечений мы получаем "во-вторых", а именно квестовую составляющую. На месте преступлений надо искать и изучать улики, вспомнив навыки пиксель-хантинга. Подозреваемых и свидетелей надо опрашивать, постоянно догадываясь – врут они, недоговаривают что-то или говорят правду. Если не угадаешь, пропустишь ценную информацию, или собеседник замкнется в себе и прервет беседу. Наградой за успешно разгаданную головоломку становится ролик с флэшбеком главного героя, прошедшего вторую мировую войну, или просто забавный разговор между персонажами.</p>
<p>Я бывал в Лос-Анджелесе, но не могу сказать, что опознал в игре хоть кусочек города, не считая нескольких знаковых зданий. Наверное, за пятьдесят с лишним лет в нем действительно изменилось немало. Но нарисовано все удивительно симпатично, саундтрек идеально дополняет картинку, а диалоги, как это всегда бывает у Rockstar, радуют слух. Конечно, в них чуть не хватает мрачных и одновременно пошлых шуток из оригинальной GTA, ну да ничего, ее у нас никто не отнимал (как раз недавно еще разок прошел четвертую часть и жду пятую).</p>
<p><img src="http://helpix.ru/pic/vilianov/lanoire/lanoire03.jpg" alt="" /></p>
<p>Преступления в L.A. Noire приходится расследовать самые разные – от угона автомобиля у аргентинского посла, оказавшегося… не очень хорошим человеком, до негодяйств серийного убийцы. Приятно, что тебе не дают притомиться от однообразия. Едешь с локации на локацию, а тут тебе подбрасывают какую-то мелочевку, вроде кражи в магазине. Несешься, разбираешься, а потом уже снова занимаешься серьезным делом.</p>
<p>Системные требования у игры приемлемые. На Radeon 6850 она неплохо работает при разрешении 1600х1200 при почти максимальных графических настройках, и только со сглаживанием лучше не перебарщивать. На опробованной недавно GeForce 560Ti (ультратихой, производства Palit) все совсем хорошо. И теперь главное, ради чего, собственно, этот пост и написан <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  С поддержкой многоядерности у L.A.Noire порядок: два ядра процессора нагружены постоянно, а остальные – в зависимости от сложности сцены. Конечно, хотелось бы перетащить на CPU еще больше, чтобы GPU грелся поменьше, но это, пожалуй, уже из области капризов.</p>
<p><img src="http://helpix.ru/pic/vilianov/lanoire/lanoire01.jpg" alt="" /></p>
<p>Так что очень толковая получилась игра (продано уже больше 4 миллионов копий), и если на новогодних праздниках у вас будет свободное время – очень рекомендую. Можно смело брать и локализованную версию, потому что переозвучивать прекрасные диалоги никто не стал, а просто пустили снизу субтитры. Идеальный вариант.</p>
<p>На сим закругляюсь. Надо уже наказать этого неуловимого маньяка…</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2011/12/23/la-noire/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PVS-Studio: анализируем код Doom 3</title>
		<link>http://software.intel.com/ru-ru/blogs/2011/11/30/pvs-studio-doom-3/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2011/11/30/pvs-studio-doom-3/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 06:09:16 +0000</pubDate>
		<dc:creator>Andrey Karpov</dc:creator>
				<category><![CDATA[Игры]]></category>
		<category><![CDATA[Разработка софта]]></category>
		<category><![CDATA[c plus plus]]></category>
		<category><![CDATA[doom 3]]></category>
		<category><![CDATA[PVS-Studio]]></category>
		<category><![CDATA[статический анализ кода]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2011/11/30/pvs-studio-doom-3/</guid>
		<description><![CDATA[Компания id Software имеет лицензию на PVS-Studio. Тем не менее, мы решили проверить исходные коды Doom 3, которые недавно были выложены в сеть.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.viva64.com/external-pictures/habr91/image1.jpeg" alt="PVS-Studio VS Doom3"></p>
<p>Компания id Software имеет лицензию на PVS-Studio. Тем не менее, мы решили проверить исходные коды Doom 3, которые недавно были выложены в сеть. Результат - ошибок найдено мало, но всё-таки найдено. Я предполагаю, что это можно объяснить так.</p>
<p>Часть кода Doom3 используется и сейчас и, наверное, там ошибки уже исправлены. Часть кода устарела и не используется. Скорее всего, именно там и найдены подозрительные участки кода.</p>
<p>Для тех, кто интересуется данной тематикой, предлагаю вниманию фрагменты кода, на которые указал анализатор PVS-Studio. Как всегда напоминаю, что рассматриваю только некоторые предупреждения. Другие участки проекта требуют знания структуры программы, и я их не изучал.</p>
<p>Исходный код Doom 3 опубликован на <a href="http://www.viva64.com/go.php?url=757">GitHub</a> и на официальном <a href="http://www.viva64.com/go.php?url=758">FTP</a> компании под лицензией GPL v3. Для анализа я использовал инструмент <a href="http://www.viva64.com/en/pvs-studio/">PVS-Studio</a> 4.39. Кряки для программы прошу не искать. Я уже встречал трояны, замаскированные под ключи и кряки к PVS-Studio. Лучше <a href="http://www.viva64.com/en/about-feedback/">напишите</a> нам, и мы дадим пробный ключ на некоторое время.</p>
<h2>Фрагмент 1. Подозрительное условие.</h2>
<pre name="code" class="cpp">#define BIT( num ) ( 1 &lt;&lt; ( num ) )
const int BUTTON_ATTACK = BIT(0);
void idTarget_WaitForButton::Think( void ) {
  ...
  if ( player &amp;&amp;
      ( !player-&gt;oldButtons &amp; BUTTON_ATTACK ) &amp;&amp;
      ( player-&gt;usercmd.buttons &amp; BUTTON_ATTACK ) ) {
  ...
}</pre>
<p>Диагностическое сообщение PVS-Studio: </p>
<blockquote><p>V564 The '&amp;' operator is applied to bool type value. You've probably forgotten to include parentheses or intended to use the '&amp;&amp;' operator. Game target.cpp 257</p></blockquote>
<p>Обратите внимание на фрагмент "!player-&gt;oldButtons &amp; BUTTON_ATTACK". Здесь хотели проверить, что самый младший бит равен 0. Но <a href="http://www.viva64.com/ru/t/0064/">приоритет</a> оператора '!' выше, чем оператора '&amp;'. Это значит, что условие работает следующим образом:</p>
<pre name="code" class="cpp">(!player-&gt;oldButtons) &amp; 1</pre>
<p>Получается, что условие истинно, только если все биты равны нулю. Корректный вариант кода:</p>
<pre name="code" class="cpp">if ( player &amp;&amp;
    ( ! ( player-&gt;oldButtons &amp; BUTTON_ATTACK ) ) &amp;&amp;
    ( player-&gt;usercmd.buttons &amp; BUTTON_ATTACK ) ) {</pre>
<h2>Фрагмент 2. Подозрительный цикл.</h2>
<pre name="code" class="cpp">void idSurface_Polytope::FromPlanes(...)
{
  ...
  for ( j = 0; j &lt; w.GetNumPoints(); j++ ) {
    for ( k = 0; k &lt; verts.Num(); j++ ) {
      if ( verts[k].xyz.Compare(w[j].ToVec3(),
                                POLYTOPE_VERTEX_EPSILON ) ) {
        break;
      }
    }
    ...
  }
  ...
}</pre>
<p>Диагностическое сообщение PVS-Studio: </p>
<blockquote><p>V533 It is likely that a wrong variable is being incremented inside the 'for' operator. Consider reviewing 'j'. idLib surface_polytope.cpp 65</p></blockquote>
<p>Вложенный цикл увеличивает переменную 'j', а не 'k'. Переменная 'k' вообще не увеличивается. Последствия работы такого цикла непредсказуемы. Корректный вариант кода:</p>
<pre name="code" class="cpp">for ( k = 0; k &lt; verts.Num(); k++ ) {</pre>
<h2>Фрагмент 3. Другой подозрительный цикл.</h2>
<pre name="code" class="cpp">bool idMatX::IsOrthonormal( const float epsilon ) const {
  ...
  for ( int i = 0; i &lt; numRows; i++ ) {
    ...
    for ( i = 1; i &lt; numRows; i++ ) {
      ...
    }
    if ( idMath::Fabs( sum ) &gt; epsilon ) {
      return false;
    }
  }
  return true;
}</pre>
<p>Диагностическое сообщение PVS-Studio: </p>
<blockquote><p>V535 The variable 'i' is being used for this loop and for the outer loop. idLib matrix.cpp 3128</p></blockquote>
<p>Вложенный цикл организован с помощью той же переменной, что и внешний цикл. Оба цикла имеют условие остановки: i &lt; numRows. Получается, что внешний цикл всегда выполняет только одну итерацию. Для исправления кода, можно использовать другую переменную во внутреннем цикле. </p>
<h2>Фрагмент 4. Неопределенное поведение.</h2>
<pre name="code" class="cpp">int idFileSystemLocal::ListOSFiles(...)
{
  ...
  dir_cache_index = (++dir_cache_index) % MAX_CACHED_DIRS;
  ...
}</pre>
<p>Диагностическое сообщение PVS-Studio:</p>
<blockquote><p> V567 Undefined behavior. The 'dir_cache_index' variable is modified while being used twice between sequence points. TypeInfo filesystem.cpp 1877</p></blockquote>
<p>Переменная "dir_cache_index" изменяется дважды в одной <a href="http://www.viva64.com/ru/t/0065/">точке следования</a>. То, что используется префиксный инкремент, не имеет значение. Компилятор теоретически вправе создать код следующего вида:</p>
<pre name="code" class="cpp">A = dir_cache_index;
A = A + 1;
B = A % MAX_CACHED_DIRS;
dir_cache_index = B;
dir_cache_index = A;</pre>
<p>Конечно, скорее всего, выражение вычисляется правильно. Но уверенным в этом быть нельзя. На результат может влиять тип и версия компилятора, настройки оптимизации. Корректный вариант кода:</p>
<pre name="code" class="cpp">dir_cache_index = (dir_cache_index + 1) % MAX_CACHED_DIRS;</pre>
<h2>Фрагмент 5. Подозрительная очистка массива.</h2>
<pre name="code" class="cpp">void idMegaTexture::GenerateMegaMipMaps() {
  ...
  byte *newBlock = (byte *)_alloca( tileSize );
  ...
  memset( newBlock, 0, sizeof( newBlock ) );
  ...
}</pre>
<p>Диагностическое сообщение PVS-Studio: </p>
<blockquote><p>V579 The memset function receives the pointer and its size as arguments. It is possibly a mistake. Inspect the third argument. DoomDLL megatexture.cpp 542</p></blockquote>
<p>Нулями заполняется только часть массива 'newBlock'. По всей видимости, это неправильно. Как мне кажется, раньше было написано так:</p>
<pre name="code" class="cpp">byte newBlock[ CONST_ARRAY_SIZE ];
...
memset( newBlock, 0, sizeof( newBlock ) );</pre>
<p>Потом требования изменились и размер массива 'newBlock' стал изменяться. Но про функцию его очистки забыли. Корректный вариант кода:</p>
<pre name="code" class="cpp">memset( newBlock, 0, tileSize );</pre>
<h2>Фрагмент 6. Еще одна подозрительная очистка массива.</h2>
<pre name="code" class="cpp">void Sys_GetCurrentMemoryStatus( sysMemoryStats_t &amp;stats ) {
  ...
  memset( &amp;statex, sizeof( statex ), 0 );
  ...
}</pre>
<p>Диагностическое сообщение PVS-Studio: </p>
<blockquote><p>V575 The 'memset' function processes '0' elements. Inspect the third argument. DoomDLL win_shared.cpp 177</p></blockquote>
<p>Здесь при вызове функции 'memset' перепутаны аргументы. Функция очищает 0 байт. Это кстати весьма распространенная ошибка. Я встречал её многократно в разных проектах.</p>
<p>Корректный вызов функции:</p>
<pre name="code" class="cpp">memset( &amp;statex, 0, sizeof( statex ) );</pre>
<h2>Фрагмент 7. Здравствуй, Copy-Paste.</h2>
<pre name="code" class="cpp">void idAASFileLocal::DeleteClusters( void ) {
  ...
  memset( &amp;portal, 0, sizeof( portal ) );
  portals.Append( portal );

  memset( &amp;cluster, 0, sizeof( portal ) );
  clusters.Append( cluster );
}</pre>
<p>Диагностическое сообщение PVS-Studio: </p>
<blockquote><p>V512 A call of the 'memset' function will lead to underflow of the buffer '&amp; cluster'. DoomDLL aasfile.cpp 1312</p></blockquote>
<p>Обратите внимания, как похожи две верхние и две нижние строчки кода. Скорее всего, две последних строки были написаны с использованием технологии Copy-Paste. Это и привело к ошибке. В одном месте забыли заменить слово 'portal' на слово 'cluster'. В результате очищается только часть структуры. Корректный вариант кода:</p>
<pre name="code" class="cpp">memset( &amp;cluster, 0, sizeof( cluster ) );</pre>
<p>Я видел в коде и другие "недоочищенные" массивы, но про них писать не интересно.</p>
<h2>Фрагмент 8. Подозрительная работа с указателем.</h2>
<pre name="code" class="cpp">void idBrushBSP::FloodThroughPortals_r(idBrushBSPNode *node, ...)
{
  ...
  if ( node-&gt;occupied ) {
    common-&gt;Error( "FloodThroughPortals_r: node already occupied\n" );
  }
  if ( !node ) {
    common-&gt;Error( "FloodThroughPortals_r: NULL node\n" );
  }
  ...
}</pre>
<p>Диагностическое сообщение PVS-Studio: </p>
<blockquote><p>V595 The 'node' pointer was utilized before it was verified against nullptr. Check lines: 1421, 1424. DoomDLL brushbsp.cpp 1421</p></blockquote>
<p>Сначала указатель 'node' разименовывается: node-&gt;occupied. А затем, вдруг проверяется, не равен ли он NULL. Это очень подозрительный код. Я не знаю, как его сделать правильным, так как не знаю логику работы функции. Возможно, достаточно написать так:</p>
<pre name="code" class="cpp">if ( node &amp;&amp; node-&gt;occupied ) {</pre>
<h2>Фрагмент 9. Подозрительный формат строки.</h2>
<pre name="code" class="cpp">struct gameVersion_s {
  gameVersion_s( void )
  {
    sprintf(string, "%s.%d%s %s %s",
            ENGINE_VERSION, BUILD_NUMBER, BUILD_DEBUG,
            BUILD_STRING, __DATE__, __TIME__ );
  }
  char string[256];
} gameVersion;</pre>
<p>Диагностическое сообщение PVS-Studio:</p>
<blockquote><p> V576 Incorrect format. A different number of actual arguments is expected while calling 'sprintf' function. Expected: 7. Present: 8. Game syscvar.cpp 54</p></blockquote>
<p>Подозрительно то, что аргумент '__TIME__' никак не используется.</p>
<h2>Фрагмент 10. Код, который сбивает с толку.</h2>
<p>Неоднократно встречается код, который как я понимаю, работает правильно, но выглядит странно. Приведу только один пример такого кода.</p>
<pre name="code" class="cpp">static bool R_ClipLineToLight(..., const idPlane frustum[4], ...)
{
  ...
  for ( j = 0 ; j &lt; 6 ; j++ ) {
    d1 = frustum[j].Distance( p1 );
    d2 = frustum[j].Distance( p2 );
    ...
  }
  ...
}</pre>
<p>Для подсказки, программист написал, что массив 'frustum' состоит из 4 элементов. Но обрабатывается 6 элементов. Если посмотреть вызов 'R_ClipLineToLight', то там массив из 6 элементов. То есть всё должно работать правильно, но код заставляет задуматься.</p>
<p>Другие ошибки и недочеты, можно увидеть, запустив анализатор PVS-Studio. Кстати, пользуясь, случаем хочу передать привет Джону Кармаку и сообщить ему, что мы скоро исправим недочет, который не позволяет в полную силу использовать PVS-Studio в компании id Software.</p>
<p>Этим недочетом является низкая скорость работы анализатора. Учитывая большой объем исходного кода, с которым работает компания, это существенное ограничение. В PVS-Studio версии 4.50, которая выйдет в этом году, можно будет в качестве препроцессора использовать Clang, а не препроцессор от Visual C++. Это позволит существенно ускорить проверку проектов. Например, при использовании препроцессора от Visual C++ исходные коды Doom 3 проверяются за 26 минут. А при использовании препроцессора от Clang - за 16 минут. Пример, правда, получился не очень удачный. На большинстве проектах выигрыш по скорости анализа будет значительно сильнее.</p>
<p>Правда по умолчанию, пока придется использовать препроцессор от Visual C++. У Clang все еще есть некоторые несовместимости и недоделки, касающиеся Windows-платформы. Так что успешно удаётся проверить только 80% проектов.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2011/11/30/pvs-studio-doom-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>О программировании, ошибках и опыте на примере сервера онлайн игры</title>
		<link>http://software.intel.com/ru-ru/blogs/2011/11/22/2005877/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2011/11/22/2005877/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 15:18:42 +0000</pubDate>
		<dc:creator>ronsenval</dc:creator>
				<category><![CDATA[Intel Software Network]]></category>
		<category><![CDATA[Игры]]></category>
		<category><![CDATA[Параллельное программирование]]></category>
		<category><![CDATA[Acceler8]]></category>
		<category><![CDATA[game architecture]]></category>
		<category><![CDATA[gamedevelopment]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2011/11/22/2005877/</guid>
		<description><![CDATA[<p>Около года назад передо мной встала  задача написания сервера и клиента для онлайн игры. В результате поиска  информации по этой теме оказалось, что описанных решений такой задачи либо нет,  либо их сложно найти. Оставался один вариант &#8211; самому решить задачу. В итоге &#8211; полгода работы, три версии сервера и значительное кол-во опыта.</p>]]></description>
			<content:encoded><![CDATA[<p>Около года назад передо мной встала  задача написания сервера и клиента для онлайн игры. В результате поиска  информации по этой теме оказалось, что описанных решений такой задачи либо нет,  либо их сложно найти. Оставался один вариант &ndash; самому решить задачу. В итоге &ndash; полгода работы, три версии сервера и значительное кол-во опыта.</p>
<p>Понятно, что сервер разрабатывался  под конкретную игру, и потому в определенной мере специфичен, но все же  постараюсь изложить общие подходы, которые, я надеюсь, могут быть применены и в  других проектах. Также возможны небольшие отступления, для лучшего понимания  вопроса.</p>
<p><b>Задача:</b>&nbsp; необходимо разработать сервер и клиент для  игры через интернет, с количеством одновременно играющих игроков не менее 1000. </p>
<p><b>Сама  игра:</b>&nbsp; игра состоит из сражений,  сражения никак не пересекаются друг с другом, в каждом сражении участвует несколько  игроков, игроки одновременно отдают команды, видят результаты действия других  игроков, можно сохранить состояние сражения и продолжить позднее.</p>
<h2>Выбор языка  программирования</h2>
<p>Из знакомых мне языков, с помощью  которых можно было бы реализовать, были следующие: <b><i>php</i></b>, <b><i>c#</i></b>, <b><i>c++</i></b>. Из плохо известных: <b>Java</b>. Остальные  не рассматривались ввиду отсутствия опыта работы с ними.</p>
<p>За год до этого был опыт  разработки более упрощенной задачи подобного вида, при этом стояло жесткое  условие: язык программирования <b>PHP</b>. Так что я сполна оценил все недостатки  этого языка применительно к подобной задаче (все же он предназначен для других целей,  хотя при желании и топором можно торт нарезать, но что из этого выйдет &ndash; вопрос  интересный). <b>С#</b> представлялось  сложным использовать на <b>Debian</b>. <b>Java</b> был отклонен  ввиду маленького опыта работы с ним. Вероятно, люди, хорошо в нем разбирающиеся,  смогли бы качественно реализовать подобный сервер. В итоге: C++. </p>
<p>Как показала дальнейшая практика,  решение оказалось вполне разумным. И сейчас понимаю, что реализовать его с той  же простотой и функционалом на PHP  просто невозможно (собственно, как и аккуратно порезать торт топором).</p>
<p> Вывод: стоит использовать наиболее подходящий инструмент, исходя из  требований, окружения, своих знаний, желания расширить свои профессиональные  качества (конечно если это не идет вразрез, например, со временем выполнения  задачи, а то ведь я и <b>Java</b> хотел получше изучить, но боюсь,  заказчик остался бы недоволен сроками <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<h2>Выбор инструментов языка</h2>
<p>Тут тоже было просто. Исходя из  того, что разработка велась на <b>Windows 7</b>, а работать должно на <b>Debian</b>,  все средства должны быть переносимы. В качестве основы кроссплатформенности  была выбрана библиотека <b>boost</b>. Основную роль сыграло то, что <b>boost</b>  является основой для вышедшего и следующих стандартов языка C++, других значительных &laquo;за и против&raquo;  применительно к данной задаче я не нашел (сравнивания например с <b>Qt</b>).  Как позже выяснилось, нужны были только базовые возможности библиотеки (потоки,  работа с файловой системой), а потому не было особой разницы, что выбирать.</p>
<p><b>Вывод:</b> если не находишь разницы между вариантами, выбери любой <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , и делай, там будет видно.</p>
<h2>Проектирование</h2>
<p>Любопытна склонность к <b>необоснованному</b> преувеличению сложности  программы. Это проявляется как на уровне алгоритмов и структур данных (желание  сразу все оптимизировать), так и на уровне архитектуры приложения (к примеру,  попытка сделать все сверхпараллельно). И как следствие: рост сложности  программы, отсюда большее число ошибок и возрастающая трудность в их  исправлении, отсюда затягивание сроков, нервы и т.д. Кому такое надо?  Правильно, никому. </p>
<p>Как сказано в одной книге: &laquo;программирование &ndash; есть  управление сложностью&raquo;. </p>
<p>Взять хотя бы конкретный пример (<a href="http://software.intel.com/ru-ru/articles/contest-acceler8-2011-main/">задачи конкурса Acceller8</a>). За время конкурса решение  эволюционировало и прошло следующие этапы:      </p>
<ol>
<li>Используем библиотеку TBB. И сразу пошло-пошло распараллеливание  по задачам. Что будет дальше не знаю, но точно будет много потоков (не сделал,  осталось только в планах).</li>
<li>Запущенны N  потоков стандартной функцией, они из общего массива каждый в своем порядке  (чтобы не мешать друг другу) берут матрицы для вычисления и считают, когда  очередь заканчивается они просматривают сначала потоки, запущенные на этом же  процессоре, чтоб им помочь. Если на этом процессоре потоки всё посчитали, то  поиск производиться на других (реализовано).</li>
<li>Запущенны N  потоков стандартной функцией, они <b>из  очереди подряд</b> берут матрицы для вычисления и считают, когда очередь  заканчивается они <b>просматривают подряд  все другие потоки</b>, чтоб им помочь (реализовано).</li>
<li>Запущенны N  потоков стандартной функцией, они из очереди берут матрицы и считают (уже не  было времени рефакторить старый код из п.3 чтоб убрать лишний функционал. Это ж  надо, что получается: реализовываешь этот лишний функционал, реализовываешь,  время тратишь... Так чтоб его еще и убрать потом, нужно время тратить!</li>
</ol>
<p>Очевидно, что в пункте 1-3 было  потрачено время на реализацию некоторого функционала, который оказался не  нужен. Ведь не было оснований полагать, что доступ через очередь или массив  будет критически влиять на сложность, или тоже разделение по процессорам. Хотя  некоторые решения принимаются обоснованно: изначально не было быстрого  алгоритма, и потому тогда возможность совместной обработки потоками одной  матрицы была обоснованна (вычисление больших матриц занимало минуты).</p>
<p><b>Вывод: </b>если хочется сделать суперпрограмму, то стоит  обосновать действительную необходимость тех или иных &laquo;улучшений&raquo;, иначе, в  лучшем случае, они не нанесут вреда. Хотя, с другой стороны, это лишь вопрос  опыта и времени, требуемого на его приобретение. &nbsp; </p>
<p>Каждый из нас будет совершать  ошибки, независимо от своих желаний и взгляда на мир, и, единственный возможный  путь что-то делать - это что-то делать (некому не говорите <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , это страшшшный секрет). И, наверное, время от времени стоит задумываться <b>как</b> делаешь.</p>
<h2>Реализация сервера: от  сложного к простому</h2>
<p>Далее рассматриваются основные  сложности, которые возникли по ходу реализации сервера, описывается, как они  были разрешены. </p>
<p><strong>Параллельная обработка  бывает разная</strong></p>
<p>Главное требование к серверу &ndash;  справляться с текущей нагрузкой, а также иметь возможность улучшения/расширения/масштабируемости  для увеличения нагрузки в будущем. Очевидное решение &ndash; параллельная обработка.  Схема первоначально реализованного варианта работы потока представлена ниже:</p>
<p><img src="http://s017.radikal.ru/i407/1111/64/b4826ce8437d.png" align="middle" border="0" /></p>
<p>Есть управляющий поток, содержащий  списки активных соединений и текущие сражения. Каждые 100 мс (для разрабатываемой  игры +/- 100 мс не значительно) сражения и соединения передаются в очередь  менеджеру потоков на выполнение (для соединений проверяется поступление команд  игрока, для сражений &ndash; происходит обработка 100мс игрового времени).</p>
<p>Минусы, из-за которых пришлось  отказаться от данной модели:</p>
<ol>
<li> Сложность всвязи с возможностью  одновременного выполнения сражений и соединений, возникает необходимость  гарантировать, что состояние игры будет изменено в один момент времени либо  командой от игрока, либо внутренней обработкой. В результате, ко всем функциям,  изменяющим состояние игры необходимо добавлять мьютексы и т.д.</li>
<li>Сложность контроля за  выполнением потоков в менеджере. Выполнил он потоки? Или еще выполняет?</li>
</ol>
<p><img src="http://s017.radikal.ru/i407/1111/b6/07524fed5dc8.png" border="0" /></p>
<p>В результате была реализована модель  представленная ниже:</p>
<p ><img src="http://s017.radikal.ru/i436/1111/1e/d1a51df2d06b.png" border="0" /></p>
<p>Создается необходимое кол-во  потоков. Каждый поток обрабатывает часть сражений и соединения, относящиеся к  этим сражениям.&nbsp;</p>
<p>Алгоритм обработки внутри  потоков:</p>
<ol>
<li>последовательно проверить поступление новых команд от  пользователей и передать им данные,  </li>
<li>последовательно обработать сражения,</li>
<li>подождать до следующего цикла.</li>
</ol>
<p>Преимущества данной модели в отсутствии  недостатков прошлой:</p>
<ol>
<li>состояние сражения может измениться либо из-за команд  пользователя, либо во время обработки внутриигрового времени, но не  одновременно без дополнительного кода. Как результат можно вызывать любые  функции из класса &laquo;соединение с игроком&raquo; и внутри класса &laquo;сражения&raquo; не задумываясь  о том, что кто-то еще может изменить состояние игры.  </li>
<li>Также появилась  возможность контроля времени выполнения. Например, если после выполнения цикла  обработки до следующего цикла остается менее 10 мсек, то поток почти все время  тратит на обработку сражений, и, в случае увеличение нагрузки будут задержки.  Но мы ведь знаем это и поэтому можем реагировать на это (например, отказывать  новым игрокам в подключении, или сделать запись в лог, что в следующий раз  необходимо запустить большее число потоков).  </li>
</ol>
<p class="MsoNormal"><img src="http://s017.radikal.ru/i443/1111/17/ded560c04a02.png" border="0" /></p>
<p class="MsoNormal"></p>
<h2>Проблема большого кода</h2>
<p>Для представления сражения  реализован класс Game.  И все бы хорошо, если бы в итоге он не разросся до 70 функций. Большое количество  времени стало уходить на поиск нужного участка кода. Проблемой стал поиск  ошибок, ибо любая функция может взаимодействовать с любой другой и менять любые  данные, т.к. всё внутри одного класса. </p>
<p><img src="http://s017.radikal.ru/i406/1111/aa/facfc124a0a2.png" border="0" /></p>
<p> Когда я устал от этого  безобразия, было принято решения провести основательный рефакторинг и разделить  функционал класса. В итоге получилось иерархия из 10 классов по 6-8 логически  связных функций в каждом. Новые классы инкапсулируют данные относящиеся только  к ним, и взамен предоставляют соответствующий интерфейс. Таким образом,  ограничивается область сторонних эффектов работы каждого из них. </p>
<p><img src="http://s017.radikal.ru/i401/1111/1d/7e654cec6854.png" border="0" /></p>
<h2>Рыцарь атакует орка,  которого убивает эльф</h2>
<p>Рассмотрим пример с добрым рыцарем,  спящим орком и славным эльфом. Добрый рыцарь видит спящего орка, решает  атаковать его и начинает подкрадываться к нему, делая себе пометку, что на это  уйдет 10 сек. Славный эльф тоже видит сложившуюся ситуацию и решает помочь  доброму рыцарю, и потому в течении 5 сек выпускает пять стрел, которые убивают  орка. В реальной жизни славный рыцарь прокравшись в течении 10 сек (в  соответствии со своей пометкой), понял что его опередили и стал бы  подкрадываться к следующему спящему орку. В игре же возможен вариант, что  подкравшись к орку, он увидит &laquo;<b>Access violation at address 0A6C77BE</b>&raquo;, и, вероятно, упадет вместе с сервером.</p>
<p>Решение очевидно &ndash;  хранения счетчика ссылок на орков, а в общем случае &ndash;  на игровые объекты. Ниже приведена первоначальная реализация:</p>
<p>&nbsp;<img src="http://s017.radikal.ru/i430/1111/93/86ab8c613cd1.png" border="0" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>Происходит следующее, объект  &laquo;рыцарь&raquo; создает событие &laquo;нанести удар через 10 сек&raquo;, вызывая функцию <b>AddEvent</b>  менеджера событий. Одновременно с этим, он сообщает менеджеру объектов, что он  рассчитывает, что объект &laquo;орк&raquo; (или то, что от него останется) будет дожидаться  его в том же самом месте (через вызов функции <b>AddDependency</b>). &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>После наступления события,  &laquo;рыцарь&raquo; сообщает менеджеру объектов, что &laquo;орк&raquo; не представляет для него  интереса (через вызов <b>RemoveDependency</b>). Если от объекта больше никто не  зависит, то объект удаляется.&nbsp;&nbsp;&nbsp; Проблема  возникла, когда стало понятно, что на каждое событие приходиться писать по две  строчки кода для добавления зависимостей (по одной при создании и наступлении  события). </p>
<p>Если есть работа, которую  можно не делать, то ее лучше не делать. Потому модель была изменена на  следующую: </p>
<p><img src="http://s017.radikal.ru/i430/1111/d4/c1efb2c75d32.png" border="0" /></p>
<p>Параметры событий были стандартизированы,  так, чтобы менеджер событий смог &nbsp;разобраться,  к каким объектам требуется добавить зависимости, чем он теперь и занимается.  Соответственно, объектам теперь требуется создать только само событие.</p>
<h2>Сохранение сражения</h2>
<p>Требовалось предусмотреть  возможность сохранения сражения и освобождения, занимаемых им ресурсов, а также  последующая загрузка и продолжение сражения. Первоначальный вариант был  следующий:</p>
<p><img src="http://s017.radikal.ru/i443/1111/a0/4f59128e3213.png" border="0" /></p>
<p>В общем случае всё сражение строится  на объектах и событиях, поэтому задача сохранения &ndash; есть задача сохранения всех  объектов и событий (в реальной игре также необходимо сохранять: текущее время,  количество очков у игроков и т.д., эта часть задачи рассмотрена не будет&ndash; на  смысл примера это не повлияет). Итак, &nbsp;первоначальный вариант предполагал сохранение  данных путем их сериализации и последующей десериализации. Каждый объект  наследуется от базового класса с виртуальными функциями сериализации и десериализации,  объекты событий &ndash; аналогично. В качестве формата хранения данных предполагалось  использовать JSON.  А в качестве места хранения -<span style="font-weight: bold"> базу данных. </p>
<p>Проблема стала очевидна при дальнейшей&nbsp; модификации объектов (их наборов свойств),  ведь любое добавление или удаление вело к необходимости переписывания функций  сериализации/десериализации. Решением проблемы было сохранение дампа памяти:</p>
<p><img src="http://s017.radikal.ru/i417/1111/df/75421191cf07.png" border="0" /></p>
<p>Фактически, сохраняется область  памяти, в которой размещены данные менеджеров объектов и событий. Здесь  пришлось модифицировать программу таким образом, чтобы все данные сражения  (класс <strong>Game</strong>) располагались в  памяти последовательно (сюда относятся пулы для выделения памяти под объекты и  события, информация о ресурсах, игроках и т.д.). Сейчас сохранение занимает  порядка <strong>250КБ</strong>, сюда входит возможность одновременного присутствия в сражении <strong>1000</strong>  игровых объектов (монстров, зданий и т.д.) и <strong>3000</strong> событий (ничего не мешает при  необходимости увеличить их количество в будущем).</p>
<p>Также потребовалось: (1)  преобразование адресов в индексы, и обратно. Это пришлось сделать из-за  отсутствия гарантии на то, что память под класс будет выделена в том же самом  месте (внести это изменения было несложно, т.к. адреса объектов хранятся только  в менеджере событий, и в очень-очень малом числе игровых объектов). (2)  Потребовалось добавить проверки на изменение версии сервера и модели карты (т.к.  она хранится в памяти отдельно). </p>
<p>Думаю, что это небольшая плата за возможность не задумываться о том, как сохранится состояние сражения после каждой  модификации. Но здесь есть и отрицательный  момент: использование сохранений предыдущих версий при таком подходе становиться  нетривиальной задачей.</p>
<h2>Заключение</h2>
<p>Большинство рассмотренных вопросов  касались удобства написания и дальнейшей модификации программы. Не были  затронуты вопросы быстродействия (сейчас сервер проходит бета-тестирование под  небольшой нагрузкой). Оставлена за кадром организация клиент-серверного  взаимодействия, и то, к каким архитектурным решениям она привела. В  рассмотрение также не попала событийная модель и все вопросы, касающиеся  непосредственных алгоритмов и структур данных.  </p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2011/11/22/2005877/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Battlefield 3: удовольствие с конвейера</title>
		<link>http://software.intel.com/ru-ru/blogs/2011/11/01/battlefield-3/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2011/11/01/battlefield-3/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 08:43:45 +0000</pubDate>
		<dc:creator>vilianov</dc:creator>
				<category><![CDATA[Игры]]></category>
		<category><![CDATA[Activision]]></category>
		<category><![CDATA[Battlefield 3]]></category>
		<category><![CDATA[Call of Duty]]></category>
		<category><![CDATA[Electronic Arts]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2011/11/01/battlefield-3/</guid>
		<description><![CDATA[3D-шутеры бывают разные. Одни делают по несколько лет на собственном движке, работая не только над графикой, но и над искусственным интеллектом, не забывая об оригинальном сюжете игры (насколько, конечно, он может быть оригинальным в 3D-шутере). Другие штампуют, как на конвейере, минимум по одной игре в год. Движок покупается на стороне, искусственный интеллект вполне успешно эмулируется скриптами, а фактическое отсутствие сюжета маскируется привязкой к реальным историческим событиям и бешеной динамикой действа. Есть немало и промежуточных вариантов. Лично я отношусь с симпатией к любым подходам, если в результате получается толковая игра. В конце концов, можно за год на чужом движке сделать вполне занимательную вещицу, а можно десять лет корпеть и соорудить ужасного Duke Nukem Forever… В общем, давайте немного поговорим о Battlefield 3 – классическом конвейерном шутере, порадовавшем меня больше многих долгостроев.]]></description>
			<content:encoded><![CDATA[<p>3D-шутеры бывают разные. Одни делают по несколько лет на собственном движке, работая не только над графикой, но и над искусственным интеллектом, не забывая об оригинальном сюжете игры (насколько, конечно, он может быть оригинальным в 3D-шутере). Другие штампуют, как на конвейере, минимум по одной игре в год. Движок покупается на стороне, искусственный интеллект вполне успешно эмулируется скриптами, а фактическое отсутствие сюжета маскируется привязкой к реальным историческим событиям и бешеной динамикой действа. Есть немало и промежуточных вариантов. Лично я отношусь с симпатией к любым подходам, если в результате получается толковая игра. В конце концов, можно за год на чужом движке сделать вполне занимательную вещицу, а можно десять лет корпеть и соорудить ужасного <a href="http://software.intel.com/ru-ru/blogs/2011/06/15/duke-nukem-forever/">Duke Nukem Forever</a>… В общем, давайте немного поговорим о Battlefield 3 – классическом конвейерном шутере, порадовавшем меня больше многих долгостроев.</p>
<p>Battlefield – это бренд крупнейшего издателя игр Electronic Arts. Он (бренд) на рынке с 2002-го, и с тех пор вышло аж 19 (!) частей. Это значит, что каждый год минимум два продолжения, а бывает и по три. На фоне Call of Duty, главного бренда-конкурента издателя Activision, под которым выходит максимум одна игра в год, налицо сильный отрыв по очкам. Но так получилось, что Call of Duty я перепробовал практически все, начиная с первой части, а Battlefield как-то проходил мимо вплоть до октября нынешнего года. Так бы, наверное, и продолжалось, но на одном из форумов попались очень эмоциональные комментарии по поводу вышедшей на днях Battlefield 3. Мол, тоска страшная, графика никакая, глючит страшно – не покупайте ни в коем случае. После <a href="http://software.intel.com/ru-ru/blogs/2011/10/19/rage/">провальной Rage</a> мне стало немножко страшно – а ну как и Electronic Arts теперь пытается продавать недоделанные игры? Решил попробовать, и вот уже третий день, воспользовавшись индульгенцией на грех безделья в виде довольно тяжкой простуды, не без удовольствия изучал данный продукт.</p>
<p>Помню, году в 95-м были модны игры-видеотиры. Уже не могу припомнить ни одного названия, но смысл такой: вся игра представляла собой фильм, для просмотра которого целиком пользователю надо было шустро и довольно точно наводить курсор и кликать мышью. Попал – смотри кино дальше. Не попал – кликай, пока не попадешь. С тех пор игровая графика шагнула далеко вперед, и для создания действительно убедительной картинки больше не надо снимать фильм – все можно рисовать в реальном времени. Но сам жанр этого не изменился: фактически пользователь в Battlefield остается «мышенажимателем», потому что абсолютно все в игре проскприптовано насквозь, и сотворить что-нибудь эдакое не получится при всем желании. Например, попробовал я в одной из миссий спрятаться за заборчик и обойти врага с тыла. Ага! Счаз! Игра тут же сообщила, что я покинул игровое поле и потребовала срочно вернуться обратно. За ослушание же покарала необходимостью переигрывать эпизод с начала. И ее ни капельки не смутило, что всего через несколько секунд после уничтожения нужного количества виртуальных террористов зона за заборчиком стала вполне игровой, и по ней стало возможным перемещаться без неприятных последствий.  </p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/BF3_Iraq_city1.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/BF3_Iraq_city1.jpg" alt="" width="600" height="338" class="aligncenter size-full wp-image-2005597" /></a></p>
<p>Сюжет я, честно говоря, перестал понимать уже минут через сорок. Надо отдать авторам должное: дикое мешанину из эпизодов, происходящих в разных концах света, они маскируют за флэшбэками некоего морпеха, допрашиваемого по подозрению в чем-то очень нехорошем. Бегать по охваченному беспорядками мегаполису за него было довольно весело, и я даже почти поверил, когда он перевоплотился в русского парня Диму, но вот с инкарнацией в девушку-летчицу уже случился перебор, и за дальнейшими скачками фантазии предпочел следить чуть отстраненно. Зато не только побегал, но и покатался на машинке с пулеметом, полетал на истребителе и погромыхал на танке. В игре постоянно что-то происходит, расслабиться она не даст, но и перенапрячь мозг не получится, ведь по каждому пустяковому поводу последует подсказка в виде строчки текста на экране или, как минимум, реплики напарников. На особенно важных целях просто появляется горящий значок, означающий «СТРЕЛЯТЬ ТУДЫ». Стреляешь – и цель красиво падает или вовсе разлетается на тысячу осколков. Кррасота!</p>
<p>Игра сделана на движке Frostbite 2. Он же используется и в консольных версиях, однако графика там просто драматически хуже, чем на PC. Настолько, что фанаты сериала (есть и такие) выключали свои Xbox и шли покупать новую видеокарту для компьютера. Меня картинка порадовала, но не потрясла. А вот движок все же немного потряс своей удивительной всеядностью. Хочешь – рисуй очень естественно передвигающихся людей, хочешь переполненные движущимися автомобилями улицы, хочешь пустыню, по которой движется танковый взвод, а хочешь – полет сверхзвукового истребителя над штормящим морем. И все это с вполне достаточным уровнем убедительности. Звук в данном случае является неотъемлемой частью движка и сделан он весьма добротно. Мне в свое время приходилось попадать под настоящие обстрелы с участием танков и вертолетов, и звуковые впечатления отложились в памяти довольно прочно. Так вот здесь все очень, очень похоже. Кстати, движок настолько продвинут, что игра не поддерживает DirectX 9 и, соответственно, даже не запустится на Windows XP. Жестоко, но по-своему логично.</p>
<p>В системных требованиях к BattleField 3 рекомендуется использовать четырехъядерный процессор. Проверил – действительно, не для красоты написали. Два ядра загружены постоянно практически под завязку, а на остальных нагрузка плавающая, от 30 до 60%. GPU при этом загружен полностью, и уже минут через двадцать кулер видеокарты начинает давать о себе знать довольно отчетливо. Тут уж ничего не поделаешь: быстрые и холодные графические чипы пока встречаются только в сказках да роадмапах Intel <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Справедливости ради, несмотря на заметное отставание моего Radeon 6850 от рекомендованного разработчиками 6950, игра очень быстро носится в разрешении 1600х1200 со всеми графическими настройками на максимуме. Достойно уважения.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/1318783241_skachat-battlefield-31.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/1318783241_skachat-battlefield-31.jpg" alt="" width="600" height="368" class="aligncenter size-full wp-image-2005598" /></a></p>
<p>Строго говоря, одиночная кампания в Battlefield – это не основа игры, и главное удовольствие в ней принято получать от мультиплеера. Врать не буду, до многопользовательских баталий пока не добрался, но попробую обязательно, благо карты там, по слухам, очень солидны и позволяют решать тактические задачки многовариантно. </p>
<p>Вот же чудеса: вроде и понимаешь, что имеешь дело с поточной штамповкой, просто сделанной на приличном заводе и умелыми руками, а ведь радует! Радует! Вот и поди разбери: то ли и на конвейере можно делать хорошие вещи, то ли все дело в том, что автор этого поста в последние годы смотрит сериалы гораздо чаще, чем художественные фильмы…</p>
<p>P.S. С мест сообщили, что за первую неделю люди купили 5 000 000 копий Battlefield 3. Лучший результат в истории Electronic Arts. Вот тебе и сериал.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2011/11/01/battlefield-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MeeGo между прошлым и будущим</title>
		<link>http://software.intel.com/ru-ru/blogs/2011/10/24/meego-8/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2011/10/24/meego-8/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 07:49:37 +0000</pubDate>
		<dc:creator>vilianov</dc:creator>
				<category><![CDATA[Игры]]></category>
		<category><![CDATA[Мобильность]]></category>
		<category><![CDATA[Открытый код]]></category>
		<category><![CDATA[Разработка софта]]></category>
		<category><![CDATA[Alchemy Classic]]></category>
		<category><![CDATA[MeeGo]]></category>
		<category><![CDATA[Nokia N9]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2011/10/24/meego-8/</guid>
		<description><![CDATA[Еще с полгода назад, когда я пытался представить – каким именно будет MeeGo на смартфонах, в голове складывался не очень четкий образ, отдаленно напоминающий Android 1.5. То есть очень интересно, есть ощущение потенциала платформы, хочется купить, но одновременно понимаешь, что нормальному человеку пользоваться <em>этим</em>  будет тяжко. Ведь на начальном этапе все силы бросаются на, скажем так, базовую работоспособность платформы, и только потом, через версию, если не через две, руки доходят до мелочей, вроде usability. Но сейчас, проведя в обществе с Nokia N9 уже неделю, я должен признаться, что ошибался. MeeGo 1.2 в своей смартфонной инкарнации оказалась не только интересной, но и очень, очень тщательно продуманной платформой. Настолько, что мое желание перейти на эту платформу, возникшее еще при знакомстве с сэмплом, усилилось примерно на порядок.]]></description>
			<content:encoded><![CDATA[<p>Еще с полгода назад, когда я пытался представить – каким именно будет MeeGo на смартфонах, в голове складывался не очень четкий образ, отдаленно напоминающий Android 1.5. То есть очень интересно, есть ощущение потенциала платформы, хочется купить, но одновременно понимаешь, что нормальному человеку пользоваться <em>этим</em>  будет тяжко. Ведь на начальном этапе все силы бросаются на, скажем так, базовую работоспособность платформы, и только потом, через версию, если не через две, руки доходят до мелочей, вроде usability. Но сейчас, проведя в обществе с Nokia N9 уже неделю, я должен признаться, что ошибался. MeeGo 1.2 в своей смартфонной инкарнации оказалась не только интересной, но и очень, очень тщательно продуманной платформой. Настолько, что мое желание перейти на эту платформу, возникшее еще при знакомстве с сэмплом, усилилось примерно на порядок.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/with_box.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/with_box.jpg" alt="" width="553" height="700" class="aligncenter size-full wp-image-2005517" /></a></p>
<p>Как известно, проще всего придираться, потому что небанальные оборотцы так и лезут в голове. А вот хвалить почему-то трудно. Правда, Дмитрий Рыжков недавно потребовал вообще все обзоры сводить к одному предложению: мол, хочется сразу прочитать вывод, а не продираться через словеса, таблички и графики. Поэтому специально для Дмитрия я напишу, что <em>N9 на MeeGo – это очень интересный и самобытный аппарат, просто феноменально хорошо допиленный для первого блина, каковым он, несомненно, является</em>. А для тех, кто еще не привык к столь коротким формам, допишу еще несколько слов.</p>
<p>В наше время римэйков и сиквелов очень редко можно встретить что-то действительно новое. Даже гранды индустрии не гнушаются клонировать решения более успешных конкурентов, и это почти не считается зазорным. Проблема только в том, что, копируя внешние признаки, почти невозможно заодно стянуть и их, скажем так, информационное наполнение. Ведь разработчик оригинала сделал все так, как есть, не случайно, а со смыслом. И одна его идея цепляется зубчиками за другую, заставляя двигаться весь механизм в целом. Стащив несколько идей-колесиков, из них тоже можно соорудить нечто, однако <em>магии</em> в этом нечто не будет уж наверняка.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/601.png"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/601.png" alt="" width="337" height="600" class="aligncenter size-full wp-image-2005519" /></a></p>
<p>Прелесть MeeGo именно в продуманной оригинальности. Определенное сходство с коллегами по бизнесу там, несомненно, имеется, но это не тупое копирование, а реализация лучшего варианта из возможных. И за всем ощущается та самая продуманность, свойственная оригинальным вещам.  Что же до приятных мелочей, вроде выведения смартфона из спящего режима двойным постукиванием по экрану или мгновенного переключения между приложениями одним «листающим» движением пальца, то такого я просто нигде не видел, и теперь остро чувствую – как не хватает этого на других моих телефонах. Не забываем и о полноценной вытесняющей многозадачности, когда браузер продолжает дорисовывать страничку, даже отправленный в фон, а «тяжелые» игры пробуждаются ото сна мгновенно, словно вы забавлялись с ними всего несколько секунд назад, а не вчера. Для обеспечения этих маленьких чудес N9 потребовался целый гигабайт оперативной памяти, но по нынешним временам это добавляет к себестоимости буквально пару десятков центов. </p>
<p>Также MeeGo воплощает в себе мечту целого поколения разработчиков, когда с одной стороны мы имеем действительно простой, красивый и быстро работающий интерфейс, а с другой – самый настоящий матерый Linux с возможностью допиливания всего и вся, а также установкой DEB-пакетов. Причем линуксовая составляющая спрятана настолько аккуратно, что обычный пользователь может о ней никогда и не узнать, просто пользуясь N9 в свое удовольствие.</p>
<p>Правда, как и следовало ожидать, ПО для MeeGo пока очень негусто. Почти все необходимое для жизни стоит на аппарате изначально – от достойного почтового клиента до абсолютно всеядного плеера со всеми остановками. Но если захочется излишеств – увы, придется подождать. Порадовало, кстати, что в магазине приложений уже живет Alchemy Classic, написанная <a href="http://habrahabr.ru/company/intel/blog/114404/">знакомыми нам парнями из Самары</a>. Работает нормально, но над интерфейсом и иконками еще надо чуть-чуть помозговать, а то уж слишком мелко. И, конечно, хочется верить, что подобную оперативность проявят разработчики из других городов и стран.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/2011-10-23_17-34-05.png"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/2011-10-23_17-34-05.png" alt="" width="650" height="365" class="aligncenter size-full wp-image-2005520" /></a></p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/2011-10-23_17-34-28.png"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/2011-10-23_17-34-28.png" alt="" width="650" height="365" class="aligncenter size-full wp-image-2005521" /></a></p>
<p>ОТЛИЧНАЯ операционка получилась, иначе и не скажешь. И потому особенно обидно, что будущее ее сейчас слегка туманно. Получилась бы MeeGo чем-то сыроватым, выглядящим в лучших традициях стиля «инженеры для инженеров», можно было бы и не переживать: ну, возьмут разработки за основу чего-то нового, и в итоге будет хорошо. Однако то, что я вижу, меня очень сильно радует, да и обзоры коллег со всего мира излучают сплошной позитив. Поэтому я выражаю осторожную надежду на некоторую преувеличенность слухов о том, что продолжения банкета не будет. Право же, даже сейчас результат может на равных конкурировать с основными мобильными платформами, а если еще чуть докрутить, да опереться на поддержку разработчиков… </p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/2011-10-23_17-43-38.png"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/2011-10-23_17-43-38.png" alt="" width="650" height="365" class="aligncenter size-full wp-image-2005522" /></a></p>
<p>Long Live MeeGo!</p>
<p>P.S. Если хотите прочитать действительно большой текст о первом смартфоне на MeeGo, рекомендую  <a href="http://www.3dnews.ru/offsyanka/618494/">труд Сергея Маленковича</a>, подготовленный при некотором вмешательстве с моей стороны.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2011/10/24/meego-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Игра Rage, или Кривая &quot;Ярость&quot;</title>
		<link>http://software.intel.com/ru-ru/blogs/2011/10/19/rage/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2011/10/19/rage/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 14:56:44 +0000</pubDate>
		<dc:creator>vilianov</dc:creator>
				<category><![CDATA[Графика]]></category>
		<category><![CDATA[Игры]]></category>
		<category><![CDATA[Параллельное программирование]]></category>
		<category><![CDATA[id Software]]></category>
		<category><![CDATA[quake]]></category>
		<category><![CDATA[Rage]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2011/10/19/rage/</guid>
		<description><![CDATA[Последняя игра id Software, на которую я потратил действительно много времени, была Quake 3. Их, правда, потом и вышло-то всего ничего, Doom 3 да Quake 4, но первую я не смог осилить из-за невозможности собрать достаточно мощный для нее компьютер, а вторую даже не стал устанавливать. Культовость-культовостью, а игры радовать должны. Правда, id Software не раз удавалось достучаться до моего сердца, потому что разработанные компанией движки регулярно использовались в неплохих игровых продуктах. Все шло к тому, что в будущем только движками все и ограничится, но вот в прошлом августе обещали выпустить 13/09/2011 совершенно новую игру Rage, а 4 октября нынешнего года, по нынешним меркам почти не опоздав, начала ее продажи. Rage вышла в версиях для PC, Xbox и PS3, и, наверное, нетрудно догадаться – какую именно я решил попробовать.]]></description>
			<content:encoded><![CDATA[<p>Последняя игра id Software, на которую я потратил действительно много времени, была Quake 3. Их, правда, потом и вышло-то всего ничего, Doom 3 да Quake 4, но первую я не смог осилить из-за невозможности собрать достаточно мощный для нее компьютер, а вторую, посмотрев у коллег, даже не стал устанавливать. Культовость-культовостью, а игры радовать должны. Правда, id Software не раз удавалось достучаться до моего сердца, потому что разработанные компанией движки регулярно использовались в неплохих игровых продуктах. Все шло к тому, что в будущем только движками все и ограничится, но вот в прошлом августе обещали выпустить 13/09/2011 совершенно новую игру Rage, а 4 октября нынешнего года, по нынешним меркам почти не опоздав, начала ее продажи. Rage вышла в версиях для PC, Xbox и PS3, и, наверное, нетрудно догадаться – какую именно я решил попробовать.</p>
<p>Еще до покупки игры мне приходилось слышать, что с ней не все в порядке: мол, глючит страшно, и в id Software объясняют проблемы очень просто – мол, компания не рассматривает PC, как основную платформу для игр. И все же я был уверен, что трудности преувеличены: ну может где-нибудь текстурка мигнет, или игра зависнет пару раз за день… В конце концов, это же id Software, «премиальный бренд», не может же она выпустить на рынок совсем недоделанный продукт?</p>
<p>Оказывается, еще как может. И выпустила. На момент выхода Rage была абсолютно неработоспособна на большинстве персональных компьютеров. И сейчас, после выхода нескольких патчей и неоднократных попыток срочного допиливания драйверов производителями графических чипов ситуация остается аховой. </p>
<p>Расскажу о своих мытарствах подробнее. Игра поставляется аж на 3 DVD и занимает на жестком диске больше 15 гигабайт. При первом запуске она порадовала меня дикой мешаниной из текстур, исключающей возможность собственно играть. Несколько озадаченный, я стал советоваться с Интернетом, вывалившим на меня целую груду рецептов. Перво-наперво порекомендовали установить новую бета-версию драйвера для моего Radeon HD6850. Я скачал сначала неправильную, выпущенную 8 октября, и она решала проблему капитально: просто отключала ВСЕ текстуры и всё. Картинка выглядела чуть лучше, чем в легендарном Wolfenstein 3D,но желания поиграть почему-то не вызывала. Добрые люди прислали ссылку на правильную бету, которая Preview 3. При ее установке компьютер впервые за очень долгое время продемонстрировал синий экран, но после аварийной перезагрузки Rage запустилась с текстурами. Счастье, правда, длилось недолго: продемонстрировав свою красоту, игра начала зависать. Делала она это настолько регулярно и разнообразно, что невольно вспомнился перечень способов приготовления креветок из фильма «Форрест Гамп». Она зависала при загрузке уровня, при попытке выйти в главное меню, при переключении задач, при оглашении сути очередного задания, при сохранении игры, при подгрузке текстур… Наконец, больше всего ей нравилось зависать просто так. А бета-драйвер оказался настолько совершенным, что намертво вешал Adobe Photoshop, пока я не догадался отключить в нем поддержку вычислений на GPU.</p>
<p><img src="http://helpix.ru/pic/vilianov/200501/22/rage.jpg" alt="Rage" /></p>
<p>В Интернете советовали поправить реестр, изменив что-то в свойствах драйвера – не помогло. Выкладывали  якобы решающие все проблемы профили настроек – с тем же результатом. Наконец, одна добрая душа посоветовала откатиться на позапрошлую версию драйверов – дескать, с ней все будет в порядке. Действительно, я ликовал минут десять, пока не дошло до загрузки новой локации, во время которой игра намертво зависла. После перезапуска загрузка проходит гладко, но изображение на экране оказалось полностью лишенным текстур… Честно скажу, потратив в общей сложности около шести часов на борьбу с Rage, я сдался. И до появления вестей о полном решении проблем, подтверждаемом авторитетными источниками, запускать эту, с позволения сказать, игру больше не стану.</p>
<p>И вот это – id Software. Легенда, технологический лидер и просто небедный коллектив разработчиков, уж точно способный позволить себе целую банду QA-специалистов. Провал же получился такой, что я даже не могу припомнить аналогов. Да, бывало, новые игры неприлично тормозили и вылетали, но чтобы вообще толком не работали… Нет, не могу вспомнить. </p>
<p>И главное – не получается объяснить причину случившегося. Кроме, разве что, взбешенных пинками менеджеров разработчиков PC-версии, которые из вредности отправили на золото заведомо сырую бета-версию. Мол, не хотите подождать еще полгодика? Ну, вот вам. Продавайте, если сможете.</p>
<p>Что характерно, приставочные версии работают стабильно, но тут всплывает другой меганедостаток: Rage безнадежно однообразна и скучна. Как только надоедает смотреть по сторонам, любуясь действительно роскошными пейзажами, желание играть тут же пропадает. Сюжет никогда не был сильной стороной игр id Software, но тут на нем отдохнули как-то особенно хорошо.</p>
<p>В те короткие моменты, когда игра работала, я смог понаблюдать за нагрузкой на процессор и GPU. С удовлетворением отметил, что движок id Tech 5 эффективно использует четыре ядра процессора, распределяя между ними нагрузку практически поровну. Пиковая нагруженность графического чипа составила 69% (разрешение 1600х1200), но обычно она не превышает 62%. В результате компьютер не перегревается и не шумит.</p>
<p>Поэтому я бы рассматривал Rage как здоровенную демоверсию нового движка, который непременно блеснет в играх других разработчиков. Благо он довольно шустр, а картинка очень, очень хороша. Вот только непонятно – как хватило наглости брать за демоверсию ту же сумму, что и за настоящую игру? </p>
<p>P.S. Заголовок этого поста отсылает к популярному в свое время боевику "Слепая ярость" с Рутгером Хауэром в главной роли. Вот только не уверен, что нынешняя молодежь его вообще помнит <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2011/10/19/rage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deus Ex: Human Revolution, или О гуттаперчевом мире</title>
		<link>http://software.intel.com/ru-ru/blogs/2011/09/22/deus-ex-human-revolution/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2011/09/22/deus-ex-human-revolution/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 07:32:44 +0000</pubDate>
		<dc:creator>vilianov</dc:creator>
				<category><![CDATA[Графика]]></category>
		<category><![CDATA[Игры]]></category>
		<category><![CDATA[Deus Ex]]></category>
		<category><![CDATA[Deus Ex: Human Revolution]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2011/09/22/deus-ex-human-revolution/</guid>
		<description><![CDATA[Оживлять знаменитых покойников – занятие модное и прибыльное. Каким бы скучным и плохо сделанным ни был Duke Nukem Forever, только за первый месяц его раскупили тиражом 376000 экземпляров, и это не считая продаж электронных копий.  На круг же «Дюк» не только отбил все затраты на разработку за много-много лет, но и принес Take-Two некоторую прибыль. Нетрудно догадаться, что в наше неприлично богатое на сиквелы и римэйки время последуют и другие попытки сплясать на нарисованных костях. И вот в августе вышла новая часть легендарной игры Deus EX – Human revolution…]]></description>
			<content:encoded><![CDATA[<p>Оживлять знаменитых покойников – занятие модное и прибыльное. Каким бы скучным и плохо сделанным ни был Duke Nukem Forever, только за первый месяц его раскупили тиражом 376000 экземпляров, и это не считая продаж электронных копий.  На круг же «Дюк» не только отбил все затраты на разработку за много-много лет, но и принес Take-Two некоторую прибыль. Нетрудно догадаться, что в наше неприлично богатое на сиквелы и римэйки время последуют и другие попытки сплясать на нарисованных костях. И вот в августе вышла новая часть легендарной игры Deus EX – Human revolution…</p>
<p>Первую часть, отправленную на золото в мае 2000-го года, журнал PC Gamer назвал лучшей игрой всех времен и народов. И, пожалуй, было за что: игра очень гармонично сочетала в себе стрелялку и RPG, а работало все на прокачанной первой версии Unreal Engine. Правда, с прокачкой чуть переборщили, и на типовых конфигурациях того времени игра малость того… подтормаживала-с. Ну и особенно дотошные геймеры немного покричали, что-де уж очень похоже на System Shock 2. И все же – продажи за миллион копий, куча наград и, понятное дело, неплохая прибыль для Eidos и Ion Storm.</p>
<p>Сиквел Invisible War, выпущенный в 2003-м аккурат под Рождество, критику имел пожиже, но по продажам обошел оригинал. Движком выбрали Unreal Engine 2, снова все подтормаживало, но это бы еще полбеды. Сюжет, так цеплявший в первой части, на этот раз был уныл до предела, и, положа руку на сердце, еще одного продолжения никто ждать не собирался.</p>
<p><img style="margin:8px;" align="left" src="http://upload.wikimedia.org/wikipedia/en/7/7d/Dxhr_box.jpg" alt="Deus Ex: Human Revolution" /></p>
<p>Но вот в августе 2011-го полыхнуло: на прилавках появилась Deus Ex: Human Revolution, приквел к самой первой части. Не удержался, купил, благо 600 рублей – вполне гуманная цена. Ну и сработал тот же механизм, что и с «Дюком»: раз за первые версии не платил, зашлю денег хоть сейчас.</p>
<p>Сначала вроде бы пошло неплохо. Занимательные ролики, болтливые статисты на этажах здания таинственной био-нанотехнологической корпорации, персонажи с характером. Вроде бы неплохой выбор оружия, многовариантные задания. Вот только графика… Вместо Unreal Engine на этот раз выбрали Crystal Engine, гостя с приставок. Именно на нем всю последнюю пятилетку клепали одинаково тоскливых Tomb Raider’ов, работавших одновременно  на PS3, Nintendo Wii, Nintendo DS, PSP и даже мобильных телефонах. Как добиться работы на всем подряд минимальными усилиями? Правильно, упростить все до предела! Вот бедный Deus Ex: Human Revolution и выглядит, как привет из начала двухтысячных: ни следов от пуль, ни разбитых стекол, ни даже отражений в зеркале, которые в игре почему-то все перебиты. Более-менее прилично картинка выглядит только в роликах, сделанных отнюдь не на движке. Но вот кино заканчивается, и ты снова оказываешься в сером мире с жуткими текстурами…</p>
<p>Задания поначалу кажутся интересными, но скоро разнообразие оказывается дутым. Все сводится к «убей или обойди», перемежаемому опросами жителей виртуального мира на предмет подсказок к загадкам. Враг скучен, однообразен. Уничтожать его не интересно, а прятаться от этой серой стреляющей массы – стыдно. Мегананотехнологичный герой, в котором по сюжету все, что можно и нельзя, заменено на железки, мало чем уступает в хрупкости гуттаперче и гибнет под первым же залпом врага. Сохраненные же игры загружались поначалу просто безумно долго, и это вылечилось только после первого патча. Интересно, чем занимался QA в Eidos Montreal? </p>
<p>Я честно побродил по дурно нарисованному Детройту один из выходных, а потом понял, что мне дико скучно. Словно еще раз прохожу первый Deus Ex, время которого давным-давно ушло. На прощание проверил, как у нас там с многоядерностью. Выяснилось, что никак: игра грузит только одно ядро CPU, что значительно усиливает мои подозрения в нетронутости движка года с 2006-го. </p>
<p>Наверное, единственным достоинством Human Revolution, не считая трогательных отсылок к первой части, можно назвать полное отсутствие подтормаживаний, особенно после установки всех патчей. </p>
<p>Но нет уж. Умерла – так умерла.</p>
<p>P.S. Кстати, можете и не доверять моему мнению. Этот заунывный как бы триллер за месяц разошелся двухмиллионным тиражом (с учетом версий для приставок). Не могли же они все ошибиться, верно? </p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2011/09/22/deus-ex-human-revolution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crysis 2 v.1.9: Поиграй в меня, если сможешь</title>
		<link>http://software.intel.com/ru-ru/blogs/2011/06/28/crysis-2-v19/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2011/06/28/crysis-2-v19/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 13:08:52 +0000</pubDate>
		<dc:creator>vilianov</dc:creator>
				<category><![CDATA[Intel Software Network]]></category>
		<category><![CDATA[Игры]]></category>
		<category><![CDATA[Параллельное программирование]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2011/06/28/crysis-2-v19/</guid>
		<description><![CDATA[Сегодня поутру дошла до меня весть благая: вышел мегапатч для игры Crysis 2, добавляющий в нее поддержку DirectX 11. Рекламный ролик обещал такое тотальное улучшение графики, что я не поехал в редакцию, включил большой компьютер и приготовился к приятному потрясению. И поначалу все шло гладко...]]></description>
			<content:encoded><![CDATA[<p>Сегодня поутру дошла до меня весть благая: вышел мегапатч для игры Crysis 2, добавляющий в нее поддержку DirectX 11. Рекламный ролик обещал такое тотальное улучшение графики, что я не поехал в редакцию, включил большой компьютер и приготовился к приятному потрясению. И поначалу все шло гладко…</p>
<p>Сам патч относительно невелик (мегабайт сто) и скачивается автоматически (если, конечно, у вас лицензионная копия игры). А вот для всех красот DirectX 11 надо стянуть файл размером больше 500 мегабайт, что при небыстром соединении может занять некоторое время. Еще по соседству лежит комплект текстур высокой четкости, тянущий аж на 1.6 гигабайт, но я его решил отложить на потом. И правильно сделал.</p>
<p>Сама установка обоих патчей прошла очень гладко. После запуска Crysis 2 отрапортовал о появлении возможности включить все прелести DirectX 11, включил их и… на этом, в общем-то, игра закончилась. Нет, я правда верю, что картинка стала красивее и натуральнее, благодаря улучшенной модели теней, освещения и bump-mapping’у. Вот только раньше в Crysis 2 можно было играть. А теперь он превратился в динамичное слайд-шоу. Да, я не шучу: на системе с Core i7-965 Extreme Edition с 6 гигабайтами ОЗУ и ускорителем Radeon HD 6850 играть невозможно вообще. </p>
<p>Если DirectX 11 отключить, а графические настройки откатить на пару уровней назад, играбельность возвращается. Но осадочек, мягко говоря, остается: если патч пробудил комплекс неполноценности у обладателя, прямо скажем, не самой слабой системы, можно только представить реакцию людей с «просто компьютерами».</p>
<p>Не поленился, проверил – вдруг после установки патча в Crysis 2 появилась поддержка действительно многоядерных процессоров. Куда там: как налегала игра на два ядра, не обращаясь к остальным, так все и осталось. Неважно, дорогой пользователь, что у тебя хороший CPU. Давай, чеши в магазин за новой видеокартой. И пусть она будет реветь, как слон во время брачного сезона, и греться, как веселый тульский самовар, зато сможешь увидеть объемные кирпичи в стенах. Извини за неудобства, но нам так улучшать привычнее.</p>
<p>Дорогой, безмерно уважаемый CryTek! То, что ты делаешь – это очень, очень важно для нас. Но временами создается ощущения, что мы любим тебя чуть больше, чем ты нас. Первого июля Intel проводит вебинар <a href="http://software.intel.com/ru-ru/blogs/2011/06/27/2004696/">"Инструменты для разработчиков игр в действии"</a>. Так как раз будут говорить о том, как выявить причины ограниченной производительности приложения и выполнить детальный анализ и оптимизацию отдельных фреймов игры. Ну и о других полезных в данном случае вещах. Пусть его послушают твои русскоязычные сотрудники, расскажут остальным, и следующие патчи смогут улучшать игру, не вгоняя пользователей в комплексы и долги. </p>
<p>А пока пойду давать объявление об обмене Radeon 6850 на 6970 с щедрой доплатой.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2011/06/28/crysis-2-v19/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alice:Madness Returns, или Возвращение Алисы</title>
		<link>http://software.intel.com/ru-ru/blogs/2011/06/21/alicemadness-returns/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2011/06/21/alicemadness-returns/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 13:57:14 +0000</pubDate>
		<dc:creator>vilianov</dc:creator>
				<category><![CDATA[Игры]]></category>
		<category><![CDATA[Alice:Madness Returns]]></category>
		<category><![CDATA[American McGee]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2011/06/21/alicemadness-returns/</guid>
		<description><![CDATA[Что-то этот месяц богат на продолжения древних игр. Только мы, поиграв в Duke Nukem Forever, выпили за Дюка не чокаясь, как подоспел еще один сиквел. Не такой громкий, но тоже навевающий немало приятных воспоминаний. Итак, несколько слов об игре Alice: Madness Returns.]]></description>
			<content:encoded><![CDATA[<p>Что-то этот месяц богат на продолжения древних игр. Только мы, поиграв в Duke Nukem Forever, выпили за Дюка не чокаясь, как подоспел еще один сиквел. Не такой громкий, но тоже навевающий немало приятных воспоминаний. Итак, несколько слов об игре Alice: Madness Returns.</p>
<p>Хорошо помню позднюю осень 2000-го. За окном моей иерусалимской квартиры было дождливо, тепло, а по вечерам иногда постреливали. Настроение было, что называется, разнонаправленным, но в целом все складывалось неплохо. В компьютере с основательно разогнанным Pentium III стояла видеокарта GeForce 256 DDR, и по тем временам это была неплохая конфигурация. Времени на компьютерные игры, в общем, хватало, потому что Интернет был довольно медленным, а соцсети еще не изобрели. И вот как-то раз я пришел домой с диском, на обложке которого была нарисована маленькая девочка  с огромными глазами, как у котика из «Шрека». С той лишь поправкой, что «Шрек» тогда еще не вышел и никаких ассоциаций с котами оттуда не возникало. Называлась игра American McGee's Alice.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/American_McGees_Alice.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/American_McGees_Alice-300x170.jpg" alt="" width="300" height="170" class="aligncenter size-medium wp-image-2004684" /></a></p>
<p>Надо сказать, что сам American McGee – мужчина очень суровый и склонный к непростым экспериментам над психикой. В ID Software он приложил руку к первым двум частям Doom и Quake, но там ему особо развернуться не давали, зато в Electronic Arts, куда он пришел на позицию креативного директора (красивая должность, кстати), по рукам никто не бил. И вот вышла игра про Алису, где в кислотной, но очень красивой игровой вселенной бегали персонажи Кэролла и с удовольствием уничтожали друг друга. Работало все на движке Quake III, который, в общем-то, слабо подходил для создания флоры и фауны, однако МакДжи смог превратить угловатость в своеобразный стиль, и выглядело все очень концептуально и законченно. А уж что вытворяла маленькая Алиса, вооруженная тесаком…</p>
<p>Игра продавалась неплохо, однако почти сразу после завершения работ над ней МакДжи ушел из Electronic Arts, а без него сиквела случиться не могло никак. Да я, честно говоря, и не думал о продолжении – уж больно штучный продукт получился. Прошел «Алису» до самого конца, и время от времени вспоминал о ней, как об игре, сделанной очень качественно, необычно и с душой. Пусть душа эта и подпитывалась странными  материями.</p>
<p>Но вот в 2009-м сиквел внезапно анонсировали, а 16 июня сего года готовая игра Alice: Madness Returns поступила в продажу. По доброй традиции сооружать свой движок не стали, а взяли Unreal Engine 3. Стоит уточнить, что это не самая свежая версия, уже вовсю выходят игры на 3.5, однако МакДжи, видимо, испытывает слабость к раритетам.</p>
<p>Запустил новую «Алису» - и пропал. Атмосферность тут такая, что снова забываешь об угловатости персонажей, которая, впрочем, также неплохо обыграна. Просто поразительно  – ну как, как можно  было продумать каждую деталь огромного игрового мира, как добавить все эти милые сумасшедшие  рюшечки, как задрапировать ограничения и превратить их в фишки игры? Нет, ну чего стоит охота на летающие свиные пятачки при помощи перечницы-пулемета? И все это со вкусом, в меру смешно и в меру же страшно.</p>
<p>Вообще, сделать из чуть странной детский сказки такое брутальное месилово – это покруче, чем по развеселой книге про балбеса Форреста Гампа снять историко-душещипательную мелодраму. МакДжи этот фокус удался дважды, и во второй раз, кажется, даже лучше. Особенно в игре хорош Чеширский Кот, которого явно рисовали с самого дизайнера игры. Ну и, конечно, мила сама Алиса, которая в момент гибели не лежит неподвижной кучкой текстур, а превращается в стаю синих-синих бабочек…</p>
<p>Серьезно, если в жизни осталось еще место для игр, купите новую Алису. В ней есть еще приятный бонус: грамотная поддержка многоядерных процессоров. Нагрузка пропорционально распределена по всем доступным ядрам, и в моем случае каждое загружалось не больше, чем на треть. Плюс, как и в <a href="http://software.intel.com/ru-ru/blogs/2011/03/09/bulletstorm/">Bulletstorm</a>, грамотно загруженный CPU не доводил до изнеможения видеокарту, и та не перегревалась и не жужжала кулером даже через пару часов игры. </p>
<p>Каких еще приветов из прошлого ждать от игровой индустрии? Я бы, например, с удовольствием вернулся в мир Full Throttle, который, с учетом нынешних возможностей компьютеров, можно было сделать очень ярким. Главное, чтобы занялись этим не только денег ради (куда ж без этого), но и просто по велению души. Еще одного виртуального кадавра, коим сделали несчастного Дюка, сердце может и не выдержать…</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2011/06/21/alicemadness-returns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

