<?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>highly professional scums</title>
	<atom:link href="http://blog.gamedeff.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.gamedeff.com</link>
	<description>the place where select game development veterans rant about life, universe, and everything</description>
	<lastBuildDate>Wed, 12 Aug 2015 07:23:26 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8.5</generator>
	<item>
		<title>Минутная задачка</title>
		<link>http://blog.gamedeff.com/?p=723</link>
		<comments>http://blog.gamedeff.com/?p=723#comments</comments>
		<pubDate>Tue, 30 Sep 2014 07:27:02 +0000</pubDate>
		<dc:creator><![CDATA[CEMEH]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.gamedeff.com/?p=723</guid>
		<description><![CDATA[Махонькая задачка на приятное щелканье в мозгу &#8211; аж три раза за одну задачку. Найти надо, разумеется, все решения. Спойлеры, традиционно для Кружочков, публикуются линками на http://gist.github.com &#8211; тыкайте осторожней! http://public.closedcircles.com/posts/few-minute-problem]]></description>
				<content:encoded><![CDATA[<p>Махонькая задачка на приятное щелканье в мозгу &#8211; аж три раза за одну задачку. Найти надо, разумеется, все решения. Спойлеры, традиционно для Кружочков, публикуются линками на <a href="https://gist.github.com/">http://gist.github.com</a> &#8211; тыкайте осторожней!</p>
<p><a href="http://public.closedcircles.com/posts/few-minute-problem">http://public.closedcircles.com/posts/few-minute-problem</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gamedeff.com/?feed=rss2&#038;p=723</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tiled forward rendering</title>
		<link>http://blog.gamedeff.com/?p=719</link>
		<comments>http://blog.gamedeff.com/?p=719#comments</comments>
		<pubDate>Sun, 15 Jun 2014 05:20:50 +0000</pubDate>
		<dc:creator><![CDATA[CEMEH]]></dc:creator>
				<category><![CDATA[#gamedeff]]></category>

		<guid isPermaLink="false">http://blog.gamedeff.com/?p=719</guid>
		<description><![CDATA[Тред аж двухгодичной давности &#8211; когда появились первые статьи про tiled forward shading. Мы там обсуждаем и метод, и его проблемы, и детали возможной реализации, и интересные трюки и детали. Прочитал и вспомнил, как занимался графикой. Всплакнул, практически. http://public.closedcircles.com/posts/tiled-forward-rendering]]></description>
				<content:encoded><![CDATA[<p>Тред аж двухгодичной давности &#8211; когда появились первые статьи про tiled forward shading. Мы там обсуждаем и метод, и его проблемы, и детали возможной реализации, и интересные трюки и детали.<br />
Прочитал и вспомнил, как занимался графикой. Всплакнул, практически.</p>
<p><a href="http://public.closedcircles.com/posts/tiled-forward-rendering">http://public.closedcircles.com/posts/tiled-forward-rendering</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gamedeff.com/?feed=rss2&#038;p=719</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>По следам WWDC</title>
		<link>http://blog.gamedeff.com/?p=715</link>
		<comments>http://blog.gamedeff.com/?p=715#comments</comments>
		<pubDate>Wed, 04 Jun 2014 05:05:08 +0000</pubDate>
		<dc:creator><![CDATA[CEMEH]]></dc:creator>
				<category><![CDATA[#gamedeff]]></category>

		<guid isPermaLink="false">http://blog.gamedeff.com/?p=715</guid>
		<description><![CDATA[Как и все остальные интернеты, обсуждаем Metal и Swift, по итогам WWDC. Ждем теперь креатива от Гугла! http://public.closedcircles.com/posts/wwdc-followup]]></description>
				<content:encoded><![CDATA[<p>Как и все остальные интернеты, обсуждаем Metal и Swift, по итогам WWDC. Ждем теперь креатива от Гугла!</p>
<p><a href="http://public.closedcircles.com/posts/wwdc-followup">http://public.closedcircles.com/posts/wwdc-followup</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gamedeff.com/?feed=rss2&#038;p=715</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вчерашний неформат</title>
		<link>http://blog.gamedeff.com/?p=711</link>
		<comments>http://blog.gamedeff.com/?p=711#comments</comments>
		<pubDate>Mon, 12 May 2014 07:10:31 +0000</pubDate>
		<dc:creator><![CDATA[CEMEH]]></dc:creator>
				<category><![CDATA[#toosmalltofloat]]></category>

		<guid isPermaLink="false">http://blog.gamedeff.com/?p=711</guid>
		<description><![CDATA[А еще со мной постепенно происходит страшное &#8211; вместо того, чтобы спокойно писать код и оптимизировать количество инструкций, я еще провожу время в SQL, Google Analytics и вот-вот запущу R. Один из сайд-эффектов &#8211; вот захожу на доклады не только про тек, а еще и про монетизацию. Взрослею, наверное. GDC 2014: Мелочи про F2P games]]></description>
				<content:encoded><![CDATA[<p>А еще со мной постепенно происходит страшное &#8211; вместо того, чтобы спокойно писать код и оптимизировать количество инструкций, я еще провожу время в SQL, Google Analytics и вот-вот запущу R.<br />
Один из сайд-эффектов &#8211; вот захожу на доклады не только про тек, а еще и про монетизацию.</p>
<p>Взрослею, наверное.</p>
<p><a href="http://public.closedcircles.com/posts/gdc-2014-f2p-games-little-details">GDC 2014: Мелочи про F2P games</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gamedeff.com/?feed=rss2&#038;p=711</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Последние технические доклады с GDC</title>
		<link>http://blog.gamedeff.com/?p=708</link>
		<comments>http://blog.gamedeff.com/?p=708#comments</comments>
		<pubDate>Sat, 10 May 2014 08:12:13 +0000</pubDate>
		<dc:creator><![CDATA[CEMEH]]></dc:creator>
				<category><![CDATA[#gamedeff]]></category>

		<guid isPermaLink="false">http://blog.gamedeff.com/?p=708</guid>
		<description><![CDATA[Итак, добиваем транскрипты с GDC. GDC 2014: Rendering in Ryse Долгий и подробный рассказ про устройство рендера в Ryse от Crytek. Много мяса про Physically based rendering, персонажей, итд итп. GDC 2014: Umbra Internals Про детали использования Umbra, популярного middleware для расчета видимости объектов в реалтайме, в Witcher 3: Wild Hunt. Деталей значительно больше, чем [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Итак, добиваем транскрипты с GDC.</p>
<p><a href="http://public.closedcircles.com/posts/gdc-2014-rendering-in-ryse">GDC 2014: Rendering in Ryse</a><br />
Долгий и подробный рассказ про устройство рендера в <a href="http://www.crytek.com/games/ryse/overview">Ryse</a> от Crytek. Много мяса про Physically based rendering, персонажей, итд итп.</p>
<p><a href="http://public.closedcircles.com/posts/gdc-2014-umbra-internals">GDC 2014: Umbra Internals</a><br />
Про детали использования <a href="http://www.umbrasoftware.com/en/">Umbra</a>, популярного middleware для расчета видимости объектов в реалтайме, в Witcher 3: Wild Hunt. Деталей значительно больше, чем в брошюрках Umbra, полезно и даже если вы его не используете.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gamedeff.com/?feed=rss2&#038;p=708</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Главное событие GDC</title>
		<link>http://blog.gamedeff.com/?p=703</link>
		<comments>http://blog.gamedeff.com/?p=703#comments</comments>
		<pubDate>Mon, 05 May 2014 07:21:52 +0000</pubDate>
		<dc:creator><![CDATA[CEMEH]]></dc:creator>
				<category><![CDATA[#gamedeff]]></category>
		<category><![CDATA[Zeux]]></category>

		<guid isPermaLink="false">http://blog.gamedeff.com/?p=703</guid>
		<description><![CDATA[В последние несколько лет застой в развитии графических API на PC/Mac в общем-то уже стал статусом кво. Наш ROBLOX, скажем, работает на DX9 и в ус не дует (у нас там 15-20% XP все еще, например). Кроме отдельных AAA-игр, которых можно пересчитать по пальцам, у всех остальных все либо также, либо вообще нет десктопа как [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>В последние несколько лет застой в развитии графических API на PC/Mac в общем-то уже стал статусом кво. Наш ROBLOX, скажем, работает на DX9 и в ус не дует (у нас там 15-20% XP все еще, например). Кроме отдельных AAA-игр, которых можно пересчитать по пальцам, у всех остальных все либо также, либо вообще нет десктопа как платформы.</p>
<p>Я часто рассказываю, что пришел в Windows Graphics в замечательный момент &#8211; Windows в целом перестал беспокоиться про трехмерную графику и геймдевелоперов. Не все в мире получили memo, но вот DirectX SDK снова вышел не раз в три месяца, а раз в три года, и многие стали <a href='http://ventspace.wordpress.com/2013/01/30/directxxna-phase-out-continues/'>что-то подозревать</a>!</p>
<p>И вот ситуация разворачивается, так что похоже и ушел я из MS тоже в замечательный момент &#8211; DX12 решает вполне актуальные проблемы. Не знаю, как там у мужиков мысленный процесс работает, но кажется, что это реакция прежде всего на независимые инициативы AMD и в некотором смысле NVidia в мире PC, а не на конкуренцию со стороны Мака и мобильного мира.<br />
Хотя казалось бы, беспокоиться-то надо про второе. </p>
<p>Итак, будет DX12 и он очень напоминает AMD Mantle. OpenGL тоже не стоит на месте, но пытается решить те же проблемы совсем другим способом.</p>
<p>А теперь подробнее.<br />
Начинать читать лучше с замечательного рассказа <a href="http://zeuxcg.org/">Zeux</a> про проблемы текущего состояния вещей:</p>
<p><a href="http://public.closedcircles.com/posts/gdc-2014-mantle-directx12-and-dip-cost">http://public.closedcircles.com/posts/gdc-2014-mantle-directx12-and-dip-cost</a></p>
<p>В частности, потому что он не только о будущих графических API, а о том, почему все так плохо в текущем положении вещей. История графических API на PC/Mac &#8211; это история наслаивающихся абстракций, яростной эволюции железа под этими абстракциями, legacy, длящейся 10 лет итд итп. Про какую-то ее часть этой истории я писал <a href="http://sim0nsays.livejournal.com/18587.html">тут</a> и <a href="http://sim0nsays.livejournal.com/18069.html">тут</a>.<br />
И вот стоимости этих абстракций постепенно накапливалась и накапливалась эти 10 лет, причем все это время все участники экосистемы в меру сил старались этому противостоять &#8211; и оптимизировали игры, и драйвера, и прослойку в операционной системе.<br />
Тем не менее, имеем что имеем &#8211; ситуация очень показательная.</p>
<p>Далее есть отдельные детали про DX12 и OpenGL:<br />
<a href="http://public.closedcircles.com/posts/gdc-2014-directx12">http://public.closedcircles.com/posts/gdc-2014-directx12</a><br />
<a href="http://public.closedcircles.com/posts/gdc-2014-optimizing-driver-overhead-in-opengl">http://public.closedcircles.com/posts/gdc-2014-optimizing-driver-overhead-in-opengl</a></p>
<p>В общем, это все здорово, позитивно и должно было блин случиться 5 лет назад. Ох, как бы опять не получилось too little too late у родной компании.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gamedeff.com/?feed=rss2&#038;p=703</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unity Dev Day at GDC 2014</title>
		<link>http://blog.gamedeff.com/?p=697</link>
		<comments>http://blog.gamedeff.com/?p=697#comments</comments>
		<pubDate>Mon, 28 Apr 2014 05:37:46 +0000</pubDate>
		<dc:creator><![CDATA[CEMEH]]></dc:creator>
				<category><![CDATA[#unity3d]]></category>
		<category><![CDATA[гтшен]]></category>

		<guid isPermaLink="false">http://blog.gamedeff.com/?p=697</guid>
		<description><![CDATA[Сходил на Unity Developer Day, посмотреть что происходит в побеждающей платформе для гейм-девелопмента. Наш ROBLOX тоже можно сказать платформа, только в более глобальном смысле, т.е. включает хостинг серверов, биллинг, источник трафика игроков и все разом. Посему посмотреть что происходит у мужиков, работающих с более взрослой аудиторией, всегда интересно. Надо иметь ввиду, у меня несколько искаженная [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Сходил на Unity Developer Day, посмотреть что происходит в побеждающей платформе для гейм-девелопмента. Наш <a href="http://developer.roblox.com/">ROBLOX</a> тоже можно сказать платформа, только в более глобальном смысле, т.е. включает хостинг серверов, биллинг, источник трафика игроков и все разом. Посему посмотреть что происходит у мужиков, работающих с более взрослой аудиторией, всегда интересно.</p>
<p>Надо иметь ввиду, у меня несколько искаженная перспектива, я все время смотрю на платформу в целом, не только на клиентскую часть.</p>
<p><a href="http://public.closedcircles.com/posts/gdc-2014-unity-dev-day-introduction">GDC 2014 Unity dev day: Introduction</a><br />
<a href="http://public.closedcircles.com/posts/gdc-2014-unity-dev-day-lighting">GDC 2014 Unity dev day: New lighting pipeline</a><br />
<a href="http://public.closedcircles.com/posts/gdc-2014-unity-dev-day-explort-to-webgl">GDC 2014 Unity dev day: Export to WebGL</a></p>
<p>Мне самым значительным показался экспорт в asm.js и WebGL, но он к сожалению всем будет доступен нескоро. Обратно, от Unity Cloud у меня впечатление, что там надо очень много работать. У Unity совершенно замечательный тулсет и рантайм для клиента, а вот в так называемое облако и паблишинг делаются только первые шаги.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gamedeff.com/?feed=rss2&#038;p=697</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>public.closedcircles и GDC 2014</title>
		<link>http://blog.gamedeff.com/?p=687</link>
		<comments>http://blog.gamedeff.com/?p=687#comments</comments>
		<pubDate>Thu, 24 Apr 2014 06:52:58 +0000</pubDate>
		<dc:creator><![CDATA[CEMEH]]></dc:creator>
				<category><![CDATA[#gamedeff]]></category>

		<guid isPermaLink="false">http://blog.gamedeff.com/?p=687</guid>
		<description><![CDATA[Как можно заметить, весь новый контент проекта появляется в виде записей разговоров на http://closedcircles.com. Мы собрались и сделали это новой функцией Кружков &#8211; все публикуемые разговоры теперь видны на http://public.closedcircles.com/, у него есть RSS и трансляция в Твиттер. Все оттуда можно и нужно к себе утаскивать, постить куда-то ссылки, итд итп. Релевантное геймдеву и программированию [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Как можно заметить, весь новый контент проекта появляется в виде записей разговоров на <a href="http://closedcircles.com">http://closedcircles.com</a>. Мы собрались и сделали это новой функцией Кружков &#8211; все публикуемые разговоры теперь видны на <a href="http://public.closedcircles.com/">http://public.closedcircles.com/</a>, у него есть <a href="http://public.closedcircles.com/atom.xml">RSS</a> и <a href="https://twitter.com/ruclosedcircles">трансляция в Твиттер</a>.</p>
<p>Все оттуда можно и нужно к себе утаскивать, постить куда-то ссылки, итд итп.</p>
<p>Релевантное геймдеву и программированию я постараюсь выкладывать и здесь, а там &#8211; вообще все интересное, что происходит.</p>
<p>Мы там начали выкладывать записи с GDC 2014 &#8211; <a href="https://twitter.com/zeuxcg">@zeuxcg</a> ходил на много докладов и я на чуть.<br />
Сейчас выложены транскрпиты с дня Advanced Visual Effects, дальше будут записи с Unity developer day и отдельные доклады.</p>
<p><a href="http://public.closedcircles.com/posts/gdc2014-gpu-particle-systems">GDC 2014: GPU Particle Systems</a><br />
<a href="http://public.closedcircles.com/posts/gdc2014-dx11-software-tesselation">GDC 2014: DX11 Software Tesselation</a><br />
<a href="http://public.closedcircles.com/posts/gdc2014-vertex-shader-tricks">GDC 2014: Vertex Shader Tricks</a><br />
<a href="http://public.closedcircles.com/posts/gdc2014-effecient-work-submission-direct3d">GDC 2014: Efficient Work Submission in Direct3D</a><br />
<a href="http://public.closedcircles.com/posts/gdc2014-yet-another-tesselation-talk">GDC 2014: Yet another Tesselation Talk</a><br />
<a href="http://public.closedcircles.com/posts/gdc2014-using-dx11-2-tiled-resources">GDC 2014: Using DX11.2 Tiled Resources</a><br />
<a href="http://public.closedcircles.com/posts/gdc2014-grass-fur-and-hair">GDC 2014: Grass, fur and hair</a><br />
<a href="http://public.closedcircles.com/posts/gdc2014-tesselation-call-of-duty">GDC 2014: Tesselation in Call of Duty: Ghosts</a></p>
<p>Ну и бонус:<br />
<a href="http://public.closedcircles.com/posts/powervr-raytracing">GDC 2014: PowerVR raytracing</a></p>
<p>Самое важное событие &#8211; пожалуй, анонс и сам факт существования DirectX 12. Следите за апдейтами!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gamedeff.com/?feed=rss2&#038;p=687</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Publish @Zeux: GDC report &#8211; DirectX 11 Performance Reloaded &#8211; Nick Thibieroz (AMD) and Holger Grun (NVIDIA)</title>
		<link>http://blog.gamedeff.com/?p=616</link>
		<comments>http://blog.gamedeff.com/?p=616#comments</comments>
		<pubDate>Sun, 04 Aug 2013 07:38:37 +0000</pubDate>
		<dc:creator><![CDATA[aruslan]]></dc:creator>
				<category><![CDATA[#gamedeff]]></category>
		<category><![CDATA[Zeux]]></category>

		<guid isPermaLink="false">http://blog.gamedeff.com/?p=616</guid>
		<description><![CDATA[Меж тем, прошло ежегодное мероприятие Game Developer Conference. Как обычно, можно посетовать, что про графику и суровый тек докладов все меньше, а про универсальные платформы для всех телефонов &#8211; все больше, но жизнь движется куда движется. Где, кстати, о GDC в рунете пишут еще? Как и любая конференция, GDC не столько про доклады, сколько про [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Меж тем, прошло ежегодное мероприятие Game Developer Conference. Как обычно, можно посетовать, что про графику и суровый тек докладов все меньше, а про универсальные платформы для всех телефонов &#8211; все больше, но жизнь движется куда движется. Где, кстати, о GDC в рунете пишут еще?<br />
Как и любая конференция, GDC не столько про доклады, сколько про возможность встретиться и пообщаться &#8211; вот например <strong>@wat</strong> выбрался в кои-то веки. Был очень рад всех увидеть, отлично посидели, надо чаще!<br />
На Кружочках постепенно зарождается традиция транслировать интересные доклады в реалтайме, что по мне отлично дополняет просмотр слайдов, а иногда их и успешно заменяет. Можно у докладчиков спрашивать точнения на вопросы, возникшие по у других ходу итд. Будем их потихоньку выкладывать.<br />
<strong>@Zeux</strong> ходил на много интересного по графике &#8211; спасибо и респекты за трансляции!</p>
<p>Алсо, прикрутил по случаю на <a href="http://blog.gamedeff.com">http://blog.gamedeff.com</a> Disqus comments, комментировать должно стать гораздо проще.<br />
<span id="more-616"></span><br />
People in this conversation:<br />
<strong>Arseny Kapoulkine (Zeux)</strong> <a target='_blank' href='http://closedcircles.com/add?circle=3&#038;userids=11'>Add</a><br />
CREAT Studios, Saber3D, Sperasoft (EA Sports &#8211; FIFA). Currently making kids happy at ROBLOX. <a class='cclink' href='http://zeuxcg.org/' target="_blank">http://zeuxcg.org/</a></p>
<p style='margin-left:0em'><strong>Zeux: </strong>DirectX 11 Performance Reloaded &#8211; Nick Thibieroz (AMD) and Holger Grun (NVIDIA)<br />
Парни из AMD и NVidia рассказывали про то как сделать так чтобы в вашей directx11 игре (если она у вас случайно таки есть) было все хорошо с производительностью &#8211; с точки зрения CPU и GPU. Большинство из рассказаного уже было упомянуто в различных talks, большинство советов были универсальны (NV/AMD), про часть была конкретика по вендорам. Поскольку куча материала уже где-то была, я выпишу то что почему-либо отметил.</p>
<p>При создании шейдера драйвер выполняет трансляцию из D3D микрокода в GPU-specific, при большом количестве шейдеров это может отнимать время.<br />
Общая рекомендация &#8211; создавать шейдеры заранее (сильно до отрисовки) и с нескольких потоков.<br />
Выглядит так, что у NV компиляция примерно в момент CreateShader, а у AMD в момент CreateShader в один из драйвер тредов делается schedule job на трансляцию<br />
Общая рекомендация про остальные ресурсы &#8211; создавать их из нескольких потоков, чтобы у драйвера было больше возможности параллелизации.<br />
В d3d11 рантайме есть способ проверить, поддерживает ли драйвер такое эффективно<br />
См. D3D11_FEATURE_DATA_THREADING</p>
<p>При создании ресурсов традиционно флаги биндинга надо стараться ставить те какие понадобятся<br />
Особенно были выделены флаги RENDER_TARGET и UNORDERED_ACCESS.<br />
Если их ставить ресурсам которые в этих возможностях не нуждаются, будут лишние overheads.</p>
<p>В дополнение к стандартным советам про группировку констант в constant buffers по update frequency прозвучали следующие:<br />
- С доступом к CB связан некий оверхед, поэтому количество CB привязанных к пайплайну следует ограничивать, было рекомендовано <5.<br />
Это связано в основном с каким-то фиксированным overhead, а не с паттернами доступа, вроде как.<br />
- Для улучшения локальности доступа к константам надо стараться читать из одного CB в следующих друг за другом инструкциях</p>
<p>Occlusion Queries рекомендовано использовать ограничено, было названо число несколько сотен на кадр.</p>
<p>При работе с динамической геометрией, традиционно рекомендуется использовать DISCARD + NOOVERWRITE.<br />
Дополнительные советы:<br />
- Не обязательно каждый кадр звать DISCARD если буфер используется как стек - достаточно звать при переполнении, это может происходить реже чем 1 раз за фрейм<br />
- На AMD рекомендуемый размер буферов которым делается DISCARD - 4 Mb и меньше<br />
- На NV специальных ограничений на размер нет, но есть фиксированное ограниченное количество discard-ов на кадр, после которого все становится медленно (CPU-GPU синхронизации)</p>
<p>Оптимизация vertex fetch/shade стадии:<br />
- Традиционно, чем меньше читаем на vertex fetch тем лучше - это значит минимизируем количество input атрибутов в декларации (layout), и по возможности распиливаем стримы (например, атрибуты вертекса для depth-only render и все остальное)<br />
- Традиционно, чем меньше пишем из vertex shader тем лучше - на NVidia вроде просто линейная зависимость скорости от размера, на AMD есть магическое число в 4 float4 атрибута, на котором (и меньше) скорость оптимальна<br />
Поговорили про тесселяцию, highlights которые я запомнил:<br />
- В hull shader бывает полезно делать frustum &#038; back-face culling вручную для патча, чтобы не тратить время на тесселяцию - fixed-function culling работает сильно позже<br />
- Фактор тесселяции >15 на AMD использовать не рекомендуется из соображений скорости<br />
- Как известно, у миллионов маленьких треугольников проблемы с производительностью; было названо число 10-16 пикселей на треугольник как качественное.<br />
Как обычно, чтобы его добиться нужна адаптивная тесселяция (зависящая от расстояния, величины требуемой деформации итп)</p>
<p>Поговорили про geometry shaders, все как обычно &#8211; если можете не использовать то лучше не используйте<br />
Если не можете то пишите фиксированное (маленькое) число данных<br />
На AMD есть специальный fast path<br />
На котором GS invocations выдают один и тот же render target index<br />
Если не один и тот же то медленнее.<br />
GS invocations с одного входного примитива.</p>
<p>Поговорили про глубину, на NVidia рекомендуют использовать D24 для скорости (не D16 и не 32-битные форматы)<br />
И при работе с одним буфером глубины не использовать depth test разных направлений (greater/less), иначе ломается early z reject<br />
На AMD рекомендуют использовать D16 глубину для шадовмап.</p>
<p>У обоих вендоров discard/alpha test убивают ранний fine-grained (попиксельный) z test, но оставляют coarse grained<br />
У обоих вендоров depth output в пиксельном шейдере убивает и fine grained и coarse grained early z test<br />
Про консервативную глубину почему-то сказано не было.</p>
<p>Ну и наконец, при работе с MSAA в случае, если есть post-process pass который читает из одного семпла все время, рекомендуется сначала этот семпл зарезолвить в non-MSAA texture, а потом читать из нее &#8211; cache coherence лучше при нескольких выборках.<br />
У меня все про этот доклад.</p>
<p>А, там еще авторы пытались рассказывать про deferred contexts, но у них не очень хорошо получилось &#8211; лучше получилось у автора тематического доклада, про который я скажу.<br />
Было сказано еще что типично драйвер генерирует команды для GPU в отдельном потоке, и рендер тред с API вызовами выступает как producer команд, так что если у вас между API вызовами много своей какой-то работы типа стейт менеджмента или прочего рендер кода<br />
То драйверный тред слишком много ждет, что плохо &#8211; хорошо это когда вы генерируете работу для драйвера быстрее чем он ее может обрабатывать.<br />
Для @Simon &#8211; я тут специально все пишу в normal mode, если ты ответишь repost то наверное будет максимальный exposure</p>
<p>Так, здесь еще пропустил про апдейт текстур.<br />
Если у вас есть динамическая текстура, то:<br />
- При ее апдейте пытайтесь обновлять ее целиком или, в случае 3д текстуры, целый слайс. Иначе есть риск нарваться на не оптимальный codepath в драйвере.<br />
- Map на динамические текстуры в целом не рекомендуется, т.к. по контракту API вам выдадут указатель на линейную память (строчки друг за другом в памяти), а на самом деле с высокой вероятностью текстура в памяти лежит в другом формате, тайликами &#8211; поэтому драйверу придется ее конвертировать после Unmap (и при Map если не discard/write-only&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gamedeff.com/?feed=rss2&#038;p=616</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>@sim0nsays: GDC Report &#8211; Practical Implementation of Light Scattering &#8211; Egor Yusov (Intel)</title>
		<link>http://blog.gamedeff.com/?p=678</link>
		<comments>http://blog.gamedeff.com/?p=678#comments</comments>
		<pubDate>Mon, 17 Jun 2013 08:01:21 +0000</pubDate>
		<dc:creator><![CDATA[CEMEH]]></dc:creator>
				<category><![CDATA[#gamedeff]]></category>
		<category><![CDATA[sim0nsays]]></category>

		<guid isPermaLink="false">http://blog.gamedeff.com/?p=678</guid>
		<description><![CDATA[И вот последний доклад с GDC &#8211; о том, как можно делать красивые light shafts. Чтобы сразу показать картинки, главный линк &#8211; http://software.intel.com/en-us/blogs/2013/03/18/gtd-light-scattering-sample-updated. В целом, мне кажется, про доклад можно почитать ради идей и оптимизаций в процессе, а не ради финального результата. Результат все же тяжеловесный и важности эффекта для большинства игр не соответствует. Но, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>И вот последний доклад с GDC &#8211; о том, как можно делать красивые light shafts.<br />
Чтобы сразу показать картинки, главный линк &#8211; <a href="http://software.intel.com/en-us/blogs/2013/03/18/gtd-light-scattering-sample-updated">http://software.intel.com/en-us/blogs/2013/03/18/gtd-light-scattering-sample-updated</a>.</p>
<p>В целом, мне кажется, про доклад можно почитать ради идей и оптимизаций в процессе, а не ради финального результата. Результат все же тяжеловесный и важности эффекта для большинства игр не соответствует. Но, конечно, игры важные нужны, игры важные важны, может у кого-то это ключевой эффект.</p>
<p>А вот для вдохновения и забавных техник ознакомиться вполне полезно. Epipolar space вообще колбаса &#8211; как обычно оказывается, что есть куча интересного неиспользуемого матаппарата.</p>
<p><span id="more-678"></span><br />
People in this conversation:<br />
<strong>Simon Kozlov</strong> <a target='_blank' href='http://closedcircles.com/add?circle=3&#038;userids=0'>Add</a><br />
Engineer at ROBLOX (<a class='cclink' href="http://www.roblox.com" target="_blank">www.roblox.com</a>), previously at Microsoft. And ClosedCircles was my idea.<br />
<strong>Boris Batkin</strong> <a target='_blank' href='http://closedcircles.com/add?circle=3&#038;userids=1'>Add</a><br />
i press buttons for living. u can call me god<br />
<strong>Artem Brizitskiy (art321)</strong> <a target='_blank' href='http://closedcircles.com/add?circle=3&#038;userids=318'>Add</a><br />
хуятор в uber команде Naughty Dog<br />
Santa Monica<br />
<strong>Roman Galashov (RomBinDaHouse)</strong> <a target='_blank' href='http://closedcircles.com/add?circle=3&#038;userids=712'>Add</a><br />
Il-2 Sturmovik: Birds of Prey (Art Director);<br />
Skyforge (TA)<br />
<strong>Yury Degtyarev</strong> <a target='_blank' href='http://closedcircles.com/add?circle=3&#038;userids=775'>Add</a><br />
Graphics programmer at Transas New Technologies</p>
<p style='margin-left:0em'><strong>Simon Kozlov: </strong><br />
Кстати, пока не забыл. Напоследок я ходил на GDC на доклад некого Егора Юсова из Интела про light scattering<br />
<a class='cclink' href='http://software.intel.com/en-us/blogs/2013/03/18/gtd-light-scattering-sample-updated' target="_blank">http://software.intel.com/en-us/blogs/2013/03/18/gtd-light-scattering-sample-updated</a><br />
Вот тут есть скриншоты<br />
Такая забористая полуакадемическая трава, я прямо представил себе себя 7 лет назад на Графиконе<br />
Впрочем, мои облачка были зубодробительно простыми &#8220;палка-палка-веревка&#8221;, а тут академия без хороших артистов</p>
<p>Я попробую воспроизвести часть рассуждений и оптимизаций<br />
(кстати, очень хорошая презентация, там хоть и дохера интегралов и прочего матана, очень классно и последовательно появлялись формулы и шаги в рассуждениях &#8211; буду у докладчика учиться)<br />
У него где-то слайды кстати должны были быть&#8230;</p>
<p>Ну в общем, он начинает с рассмотрения интеграла для light scattering<br />
Там, понятно, есть вклад от отраженного света объекта + вклад от всех частичек на луче до объекта<br />
Каждая частичка отражает часть света источника в направлении камеры<br />
От плотности частиц, распределения отраженного света и расстояния до частиц (потому что свет рассеивается) складывается финальный цвет<br />
Одни частички &#8211; Rayleigh, другие частички &#8211; Mie<br />
Этот интеграл решается в аналитической форме для направленного источника и не считается для точечного</p>
<p>Его новшество начинается с того, что он хочет учитывать затенение<br />
Типа, вот у нас есть shadow map, давайте учитывать рассеяние только на тех частичках, которые не в тени<br />
Давайте вот для каждого луча из камеры найдем незатененные depth ranges<br />
И посчитаем вклад интеграла только в этих ranges<br />
По-прежнему, для направленного источника есть аналитическая формула, для точечного &#8211; он придумал предрассчитать 2D LUT, чтобы можно было зная начало и конец вычесть-умножить и получить вклад</p>
<p>Дальше идут оптимизации. Если тупо посчитать такой raycast через shadow map для каждого пикселя &#8211; получается 91 msec на последней NV карточке в типичном разрешении<br />
Первая мысль &#8211; давайте считать не для каждого пикселя, а только для некоторых, а остальное интерполировать<br />
Какие пиксели важные? Давайте трансформируем все в забавное &#8220;epipolar&#8221; пространство, где лучи от солнца становятся параллельными<br />
Мол, наблюдение такое, что вдоль этих лучей освещение меняется плавно<br />
Поэтому интерполировать лучше в нем<br />
И вот возьмем там сэмплы вдоль лучей от солнца + где есть depth discontinuites<br />
Т.е. проанализуем depth buffer и в местах, где он сильно  отличается добавим сэмплов<br />
Считаем для этих пикселей честный трейс через shadow map<br />
А остальное интерполируем</p>
<p>Вторая ключевая оптимизация, типа &#8211; этот самый трейс через shadow map, т.е. нахождение отрезков где луч &#8220;не в тени&#8221;<br />
Используют технику для height map min/max mipmaps<br />
Мол, если есть мипмапы, можно искать промежутки быстрее (я могу подробнее, если интересно)<br />
Ну и остальное мелкая техника</p>
<p>В общем, основные идеи &#8211; интерполировать в специальном пространстве, пользуясь тем, что лучи исходят от источника, добавлять depth discontinuities как сэмплы и для трейса лучика через shadow map использовать height map min/max mips<br />
Говорит, получается 2 мсек на топовой NV карте, 8 msec на последнем поколении Интела<br />
Но в общем какие-то идеи в сильно упрощенном виде можно и использовать, если хочется очень крутых light shafts
</p>
<p style='margin-left:1em'><strong>art321: </strong>егора я знаю. я с ним работал. у чувака есть еще мега текстуринг с теселяцией и изменяющимся ландшафтом и все это работает на интегрированной графике. я постараюсь его на кружечки пригласить. чувак этот лайт шафт пишет оч долго мы сравнивали с нвидией у него было значительно быстрее. апдейт презентации не видел но вроде сценка в 2008 году была моя для этой штуки(ну надоже похвастаться)
</p>
<p style='margin-left:2em'><strong>Simon Kozlov: </strong>Да, ты там был в списке благодарностей в конце слайдов<br />
На первом месте!
</p>
<p style='margin-left:2em'><strong>art321: </strong>круто, не знал
</p>
<p style='margin-left:2em'><strong>Simon Kozlov: </strong>Я на всякий случай уточню, что &#8220;без хороших артистов&#8221; &#8211; я имел ввиду, что эффект не фейкается как всегда артом, а почти честно считается
</p>
<p style='margin-left:2em'><strong>art321: </strong>туту смысл был не сделать клево а сделать честно (нахрена -хз ) интел платит че&#8230;
</p>
<p style='margin-left:3em'><strong>Simon Kozlov: </strong>Да-да. Т.е. никакая игровая компания бы такого не делала
</p>
<p style='margin-left:3em'><strong>art321: </strong>ну и мегатекстуринг для интегрированной графики &#8211; тоже изврат )
</p>
<p style='margin-left:2em'><strong>RomBinDaHouse: </strong>ну как нахрена, скринспейс из-за фрустума не светит, а этот светит. С оптимизациями не такой уж дорогой, наверняка еще по подробности просчета масштабируется как-то. Ну и надо брать поиграться с этим, глядишь там еще какие сайд эффекты нахаляву нужные.
</p>
<p style='margin-left:1em'><strong>Yury Degtyarev: </strong>кто хочет ознакомиться с тесселяцией, есть его статья в GPU Pro 3<br />
ты тоже там в Acknowledgments :)
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>гляжу в презенташку и понимаю что кодить я такое не возьмусь в том виде, в каком да
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>О, а ты нашел линк на слайды?
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>только на демо покамест.<br />
там прям в шейдере картиночки пиксельартом<br />
даже прям интересно &#8211; в чём рисовалось. не поверю что руками
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>emacs поди!
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>интересно было-бы сравнить визуально и по производительности с тем, какое в GPU gems 3
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>А какое там?
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong><a class='cclink' href='http://http.developer.nvidia.com/GPUGems3/gpugems3_ch13.html' target="_blank">http://http.developer.nvidia.com/GPUGems3/gpugems3_ch13.html</a><br />
тупое как пробка
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Я пробежался и не очень понял идею<br />
Вот он там пишет классическую формулу из Hoffman and Preetham и говорит, надо учитывать для точки volumetric shadow factor<br />
Какая точка имеется ввиду? Каждый пиксель на экране?<br />
Вот луч улетел в бесконечность на far plane &#8211; какая это точка в world space?
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>если в бесконечность то вроде никакая<br />
так вроде все пиксели на экране
</p>
<p style='margin-left:2em'><strong>Simon Kozlov: </strong>Ну а должна быть<br />
Там же может тоже быть light shaft
</p>
<p style='margin-left:2em'><strong>Boris Batkin: </strong>значит я тоже что-то не понял<br />
но глядя на картинки не уверен что хочу понимать
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Ну короче, это такой хак &#8211; он трейсит луч в 2D к источнику и смотрит, сколько окклудеров он пересечет<br />
Если пересек что-нибудь &#8211; значит там shaft!<br />
Совершенно без всякой физики, молодца<br />
Впрочем, если ему надо на каждый пиксель трейсить &#8211; то можно подразогнать с теми вон интерполяционными идеями
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>в GPU-gems сделано так. трейсится в 2д от точки до источника. и суммируется. всё это медленно экспоненциально затухает<br />
вопрос<br />
чем оно отличается?
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Ну, многим. Повторюсь &#8211; вот луч улетел в far plane, от какой точки ты трейсишь до источника?
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>в 2д-то?
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Да
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>от каждой точки экрана до источника
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Ну и берешь черно-белый фактор?<br />
Это такой хак<br />
Очень практический, не имеющий отношения к тому, как свет распрострянется
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>в смысле чёрнобелый? я бы брал light * diffuse<br />
в дефферед<br />
прям как есть
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Ну это же может быть occluder, который вообще не на луче<br />
Здание впереди<br />
Оно же никак не может загородить твой воображаемый луч из точки в мире до источника<br />
У чувака происходит более-менее корректное вычисление света<br />
Он идет по лучу до каждой точки в shadow map space<br />
И смотрит по этому лучу, что затенено<br />
И там где незатенено &#8211; считает вклад от освещения в этом отрезке<br />
Понимаешь? Трейсит по лучу до точки, не от точки до источника в 2D
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>т-е берёт все точки shadowmap-а<br />
в 3д<br />
трейсит по лучу до источника 3д<br />
?
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Не трейсит до источника, вообще<br />
Берет луч от камеры до пикселя<br />
Растеризует этот луч в shadow map space<br />
И по этому лучу в shadow map &#8220;трейсит&#8221;
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>вот теперь понял
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>То есть, они считают совершенно разные суммы и факторы<br />
У чувака из Интела много корректнее<br />
Надо ли &#8211; скорее всего нет!<br />
Чтобы быстрее работает &#8211; тоже вопрос, кстати<br />
Потому что он этот трейс делает для маленького количества пикселей<br />
Сильно меньше, чем родное разрешение
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>ну их оба можно в неродном очевидно<br />
по одним и тем-же причинам
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Да, разумеется<br />
Но в статье из GPU Gems про эту оптимизацию не было<br />
Я почему и говорю, что некоторые идеи можно в каком-то виде использовать<br />
Он типа предложил пространство, в котором интерполируется сильно лучше, чем тупо downsample<br />
Такая нелинейная трансформация, хорошо коррелирующая с вкладом, который ты считаешь
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>подумал. разница будет в том, что если здесь источник не видно &#8211; то шафты всё равно будут<br />
а если там источник не видно &#8211; то и шафтов не видно
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Там &#8211; это в GPU Gems?<br />
Да будут наверно<br />
Хотя зависит как считают<br />
Если аккумулируют по 2d лучу &#8211; то не будет, да
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>там? там в 2д трассируют из точки экрана в точку где луч<br />
и суммируют
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Если вклад следующего сэмпла на основе предыдущего &#8211; от не будет<br />
А если каждый независимо &#8211; то будут какие-то, наверное<br />
Посмотрел на код, каждый независимо<br />
Будут какие-то шафты
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>ну там как только появляется &#8220;солнце&#8221; &#8211; яркий такой луч<br />
а если нет &#8211; то блееееееееееееклый
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>Ага<br />
Ну от коэффициентов затухания зависит<br />
Практический метод &#8211; надо настраивать слайдерами :)
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>блин. щас сяду вкодаю его тупо<br />
чтобы &#8220;заценить&#8221;<br />
у меня правда готовых сцен с &#8220;солнцем&#8221; нет<br />
но я это дело поборю
</p>
<p style='margin-left:1em'><strong>Simon Kozlov: </strong>У чувака из Интела в демке какая-то сцена
</p>
<p style='margin-left:1em'><strong>Boris Batkin: </strong>у него там .mdl и .mtl файлы<br />
надыть найти конвертор в колладу. подумав &#8211; не щас, через недельку<br />
мне как раз есть куда такой эффект сунуть<br />
мне идея трассировать по shadowmap понравилась<br />
в таком раскладе понятно, что делать с лучами &#8211; какие упёрлись в far plane<br />
их надо тупо обрезать по zfar последнего каскада<br />
если тени каскадные<br />
можно даже отдельно по каскадам рисовать. там-же интеграл<br />
получается вполне себе луч znear-zfar<br />
для каждого каскада<br />
не, вообще хорошая идея.<br />
надо будет её покурить
</p>
<p style='margin-left:0em'><strong>Yury Degtyarev: </strong>Например, для объёмных теней в частицах. Если делать просто попиксельный/повертексный shadow-лукап в шейдере частиц, то получится говно. Правда 2мс все равно многовато сейчас.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gamedeff.com/?feed=rss2&#038;p=678</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
