<?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>World of Towers</title>
	<atom:link href="http://blog.world-of-towers.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.world-of-towers.com</link>
	<description>the dev blog</description>
	<lastBuildDate>Wed, 16 May 2012 08:15:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Colored Plants Concept Art</title>
		<link>http://blog.world-of-towers.com/colored-plants-concept-art/</link>
		<comments>http://blog.world-of-towers.com/colored-plants-concept-art/#comments</comments>
		<pubDate>Wed, 16 May 2012 08:15:33 +0000</pubDate>
		<dc:creator>robse</dc:creator>
				<category><![CDATA[Concept]]></category>

		<guid isPermaLink="false">http://blog.world-of-towers.com/?p=173</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/05/Plant_1h_1i_1m_ColorRoughs_v1_small.jpg"><img class="alignnone size-full wp-image-174" title="Colored Plants Concept Art" src="http://blog.world-of-towers.com/wp-content/uploads/2012/05/Plant_1h_1i_1m_ColorRoughs_v1_small.jpg" alt="Colored Plants Concept Art" width="500" height="213" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world-of-towers.com/colored-plants-concept-art/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>new Screenshot</title>
		<link>http://blog.world-of-towers.com/new-screenshot/</link>
		<comments>http://blog.world-of-towers.com/new-screenshot/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 22:16:20 +0000</pubDate>
		<dc:creator>robse</dc:creator>
				<category><![CDATA[Concept]]></category>

		<guid isPermaLink="false">http://blog.world-of-towers.com/?p=155</guid>
		<description><![CDATA[This screenshot is showing the new creep integrated into the engine. Isn&#8217;t it beautiful and awkward at the same time?]]></description>
			<content:encoded><![CDATA[<p>This screenshot is showing the new creep integrated into the engine. Isn&#8217;t it beautiful and awkward at the same time?</p>
<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/04/IMG_0069.png"><img class="alignnone size-medium wp-image-156" title="Moras" src="http://blog.world-of-towers.com/wp-content/uploads/2012/04/IMG_0069-300x225.png" alt="" width="300" height="225" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world-of-towers.com/new-screenshot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creep Concept</title>
		<link>http://blog.world-of-towers.com/creep-concept/</link>
		<comments>http://blog.world-of-towers.com/creep-concept/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 13:29:12 +0000</pubDate>
		<dc:creator>robse</dc:creator>
				<category><![CDATA[Concept]]></category>
		<category><![CDATA[Creeps]]></category>

		<guid isPermaLink="false">http://blog.world-of-towers.com/?p=149</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/04/Creature_3i_ColorRough.png"><img class="alignnone size-medium wp-image-150" title="Creature_3i_ColorRough" src="http://blog.world-of-towers.com/wp-content/uploads/2012/04/Creature_3i_ColorRough-300x241.png" alt="" width="300" height="241" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world-of-towers.com/creep-concept/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Creep</title>
		<link>http://blog.world-of-towers.com/first-creep/</link>
		<comments>http://blog.world-of-towers.com/first-creep/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 16:17:43 +0000</pubDate>
		<dc:creator>robse</dc:creator>
				<category><![CDATA[Concept]]></category>
		<category><![CDATA[Creeps]]></category>

		<guid isPermaLink="false">http://blog.world-of-towers.com/?p=129</guid>
		<description><![CDATA[This is the first creep that is created for WOT.]]></description>
			<content:encoded><![CDATA[<p>This is the first creep that is created for WOT.</p>
<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/03/Creature_I_rough_v3.jpg"><img class="alignnone size-medium wp-image-131" title="Creature_I_rough_v3" src="http://blog.world-of-towers.com/wp-content/uploads/2012/03/Creature_I_rough_v3-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/03/Creature_I_modelRender_v1.jpg"><img class="alignnone size-medium wp-image-130" title="Creature_I_modelRender_v1" src="http://blog.world-of-towers.com/wp-content/uploads/2012/03/Creature_I_modelRender_v1-300x225.jpg" alt="" width="300" height="225" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world-of-towers.com/first-creep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creep Concept Sketches</title>
		<link>http://blog.world-of-towers.com/creep-concept-sketches/</link>
		<comments>http://blog.world-of-towers.com/creep-concept-sketches/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 17:49:56 +0000</pubDate>
		<dc:creator>robse</dc:creator>
				<category><![CDATA[Concept]]></category>
		<category><![CDATA[Creeps]]></category>

		<guid isPermaLink="false">http://blog.world-of-towers.com/?p=126</guid>
		<description><![CDATA[First sketches on upcoming creeps.]]></description>
			<content:encoded><![CDATA[<p>First sketches on upcoming creeps.</p>
<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/03/CreatureSketches_creeps.jpg"><img class="alignnone size-thumbnail wp-image-127" title="CreatureSketches_creeps" src="http://blog.world-of-towers.com/wp-content/uploads/2012/03/CreatureSketches_creeps-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/03/Concepts.jpg"><img class="alignnone size-thumbnail wp-image-137" title="Concepts" src="http://blog.world-of-towers.com/wp-content/uploads/2012/03/Concepts-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/03/MonsterConcepts.jpg"><img class="alignnone size-thumbnail wp-image-145" title="Concepts" src="http://blog.world-of-towers.com/wp-content/uploads/2012/03/MonsterConcepts-150x150.jpg" alt="" width="150" height="150" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world-of-towers.com/creep-concept-sketches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build Ship Concept Art</title>
		<link>http://blog.world-of-towers.com/build-ship-concept-art/</link>
		<comments>http://blog.world-of-towers.com/build-ship-concept-art/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 09:54:04 +0000</pubDate>
		<dc:creator>robse</dc:creator>
				<category><![CDATA[Concept]]></category>

		<guid isPermaLink="false">http://blog.world-of-towers.com/?p=115</guid>
		<description><![CDATA[Here are the best results of the build ship concept art contest. &#160;]]></description>
			<content:encoded><![CDATA[<p>Here are the best results of the build ship <a title="Call for Concept Art" href="http://blog.world-of-towers.com/call-for-concept-art/">concept art contest</a>.</p>
<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/WIP_space_ship_thumb900.jpg"><img class="alignnone size-medium wp-image-116" title="WIP_space_ship_thumb900" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/WIP_space_ship_thumb900-300x186.jpg" alt="" width="300" height="186" /></a></p>
<p><span id="more-115"></span></p>
<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/final_thumb900.jpg"><br />
<img class="alignnone size-medium wp-image-117" title="final_thumb900" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/final_thumb900-300x158.jpg" alt="" width="300" height="158" /><br />
</a><br />
<a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/test_thumb900.jpg"><img class="alignnone size-medium wp-image-118" title="test_thumb900" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/test_thumb900-300x168.jpg" alt="" width="300" height="168" /></a><br />
<a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/blue-copy_thumb900.jpg"><img class="alignnone size-medium wp-image-120" title="blue copy_thumb900" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/blue-copy_thumb900-300x167.jpg" alt="" width="300" height="167" /></a><br />
<a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Spaceship_image_thumb900.jpg"><img class="alignnone size-medium wp-image-119" title="Spaceship_image_thumb900" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Spaceship_image_thumb900-300x135.jpg" alt="" width="300" height="135" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world-of-towers.com/build-ship-concept-art/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Call for Concept Art</title>
		<link>http://blog.world-of-towers.com/call-for-concept-art/</link>
		<comments>http://blog.world-of-towers.com/call-for-concept-art/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 15:00:42 +0000</pubDate>
		<dc:creator>robse</dc:creator>
				<category><![CDATA[Concept]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Concept Art]]></category>

		<guid isPermaLink="false">http://blog.world-of-towers.com/?p=100</guid>
		<description><![CDATA[I just launched a contest for the concept art of the build ship. Check it out, you can win a prize! https://www.freelancer.com/contest/Concept-Art-for-existing-3D-space-ship-model-for-SciFi-Game-5062.html Download the 3D Model: BuildShip.obj]]></description>
			<content:encoded><![CDATA[<p>I just launched a contest for the concept art of the build ship. Check it out, you can win a prize! <a href="https://www.freelancer.com/contest/Concept-Art-for-existing-3D-space-ship-model-for-SciFi-Game-5062.html" rel="nofollow">https://www.freelancer.com/contest/Concept-Art-for-existing-3D-space-ship-model-for-SciFi-Game-5062.html</a></p>
<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/BuildShipRendering.png"><img class="alignnone size-thumbnail wp-image-102" title="BuildShipRendering" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/BuildShipRendering-150x150.png" alt="" width="150" height="150" /></a><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/BuildShipRendering2.png"><img class="alignnone size-thumbnail wp-image-101" title="BuildShipRendering2" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/BuildShipRendering2-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Download the 3D Model: <a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/BuildShip.obj">BuildShip.obj</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world-of-towers.com/call-for-concept-art/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Sandbox comes to life</title>
		<link>http://blog.world-of-towers.com/the-sandbox-comes-to-life/</link>
		<comments>http://blog.world-of-towers.com/the-sandbox-comes-to-life/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 16:15:46 +0000</pubDate>
		<dc:creator>robse</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.world-of-towers.com/?p=96</guid>
		<description><![CDATA[Finally, animations are coming to World of Towers. This is an important and huge step for the WOT project. At this time, I decided to implement simple animation support without the use of skeletal animation techniques. This saves me the need &#8230; <a href="http://blog.world-of-towers.com/the-sandbox-comes-to-life/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Bildschirmfoto-2012-02-19-um-16.47.04.png"><img class="alignright size-medium wp-image-97" title="Creep Animation in Blender" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Bildschirmfoto-2012-02-19-um-16.47.04-300x283.png" alt="" width="300" height="283" /></a>Finally, animations are coming to World of Towers. This is an important and huge step for the WOT project. At this time, I decided to implement simple animation support without the use of skeletal animation techniques. This saves me the need of implementing a vertex shader with skinning support and furthermore I don&#8217;t need to add a new model loader that supports armatures.</p>
<p><span id="more-96"></span></p>
<p>Currently the Nice3D engine does not support shader other than the one in GLKit. Sure, own shader handing is a must have for a modern 3d engine, but Nice3D is not there yet. The other side is a skinning shader alone would not make the creeps walk. It would need to be fed by bone transformations and vertex weights. To get these structures I would have to use an other model format than Wavefront OBJ. I have a COLLADA loader (which would do the trick) integrated into Nice3D already, but it outputs some strange results.</p>
<p>So, how is it actually done?</p>
<p>The animations are done via vertex and normal morphing between keyframes. All keyframes are stored in separate OBJ files. Only vertex positions and normals are exported to the keyframes. The walk cycle for instance is compound of three different keyframes. But still, smooth animation is possible. It is just the matter of interpolating vertex positions and normals between the keyframes. This is how animations were done in Quake II those days.</p>
<p>The technique has some downsides. You can get wobble effects if you rotate joints of your 3d character and are using too few keyframes. An other downside is the fact that storing the keyframe requires of course way more space than storing a skeletal pose. Finally I should not forget to mention, that you need to cache the interpolated animations on the iPad for performance reasons. This leads to more memory consumption and hence less free memory for other fancy things.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world-of-towers.com/the-sandbox-comes-to-life/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First OpenGL Profiling</title>
		<link>http://blog.world-of-towers.com/first-opengl-profiling/</link>
		<comments>http://blog.world-of-towers.com/first-opengl-profiling/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 18:27:00 +0000</pubDate>
		<dc:creator>robse</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[FPS]]></category>
		<category><![CDATA[GLKBaseEffect]]></category>
		<category><![CDATA[Instruments]]></category>

		<guid isPermaLink="false">http://blog.world-of-towers.com/?p=66</guid>
		<description><![CDATA[Since I have a 30 frames per second goal for the iPad 1 and I sometimes get only around 25 frames, I started the OpenGL profiler for the WOT project&#8230; The OpenGL profiler in XCode Instruments is quite a nice tool. &#8230; <a href="http://blog.world-of-towers.com/first-opengl-profiling/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Bildschirmfoto-2012-02-17-um-22.52.26.png"><img class="alignright size-medium wp-image-77" title="Instruments OpenGL" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Bildschirmfoto-2012-02-17-um-22.52.26-300x255.png" alt="" width="300" height="255" /></a>Since I have a 30 frames per second goal for the iPad 1 and I sometimes get only around 25 frames, I started the OpenGL profiler for the WOT project&#8230;</p>
<p><span id="more-66"></span></p>
<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Bildschirmfoto-2012-02-17-um-22.53.34.png"><img class="alignright size-medium wp-image-78" title="Categories" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Bildschirmfoto-2012-02-17-um-22.53.34-300x220.png" alt="" width="300" height="220" /></a>The OpenGL profiler in XCode Instruments is quite a nice tool. It records all OpenGL calls and sorts them for performance optimization possibilities. This is a very convenient way to find:</p>
<ul>
<li>redundant API calls</li>
<li>render calls where you should have used indexed rendering</li>
<li>render calls where you should have used interleaving</li>
<li>unnecessary state query calls</li>
</ul>
<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Bildschirmfoto-2012-02-17-um-22.54.12.png"><img class="alignright size-medium wp-image-79" title="glViewport" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Bildschirmfoto-2012-02-17-um-22.54.12-300x220.png" alt="" width="300" height="220" /></a>Instruments shows you what call is redundant and a stack trace to the  invocation in your code. At this point you should know, that redundant OpenGL calls can hurt performance and you should avoid unnecessary OpenGL state changes.</p>
<p>And here comes the scary thing! Almost all redundant OpenGL calls are not from my code but from GLKit. There is for instance every frame a call to glViewport(), even when it does not change. But that is not the serious performance killer. Every time you bind a shader via GLKBaseEffect you get a ton of redundant API calls to OpenGL.</p>
<p><a href="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Bildschirmfoto-2012-02-17-um-22.54.36.png"><img class="alignright size-medium wp-image-80" title="glActiveTexture call" src="http://blog.world-of-towers.com/wp-content/uploads/2012/02/Bildschirmfoto-2012-02-17-um-22.54.36-300x220.png" alt="" width="300" height="220" /></a>To name a few, there is every time a call to glActiveTexture(), glBindTexture(), glVertexAttrib4fv() and a lot of calls to glUniform4fv().</p>
<p>But this is not Apple&#8217;s fault. It is just the fact, that if you want to reduce redundant OpenGL calls, you have to track the OpenGL state and decide if your call would be unnecessary. GLKit is not a engine and therefore cannot track the OpenGL state.</p>
<p>The conclusion is simple. I have to build shader management into the Nice3D engine and kick GLKBaseEffect out. That way the engine gains control over the state changes involved in shader apply and can easily sort out redundant API calls. This would also solve a problem that I have in memory management (see <a title="First Memory Profiling" href="http://blog.world-of-towers.com/first-memory-profiling/">First Memory Profiling</a>).</p>
<p>Note to myself:<em> Nice3D shader management is desperately required. Not only for the above performance issues but also for skeletal animation and nice terrain rendering.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world-of-towers.com/first-opengl-profiling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Memory Profiling</title>
		<link>http://blog.world-of-towers.com/first-memory-profiling/</link>
		<comments>http://blog.world-of-towers.com/first-memory-profiling/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 00:59:36 +0000</pubDate>
		<dc:creator>robse</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[GLKBaseEffect]]></category>
		<category><![CDATA[profiling]]></category>

		<guid isPermaLink="false">http://blog.world-of-towers.com/?p=65</guid>
		<description><![CDATA[Since WOT should run on all iPad devices, I have decided to do some profiling on the iPad 1. I want to ensure it could keep up with the 30 frames per second goal. At this first profiling session I &#8230; <a href="http://blog.world-of-towers.com/first-memory-profiling/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Since WOT should run on all iPad devices, I have decided to do some profiling on the iPad 1. I want to ensure it could keep up with the 30 frames per second goal. At this first profiling session I quickly found two memory issues.<span id="more-65"></span></p>
<p>The first and simple one, was just the fact, that even though WOT is an ARC (automatic reference counting) project, you should still have some thoughts on autorelease pools in loops. This works now with the @autoreleasepool blocks.</p>
<p>The second memory issue was unexpected for me. The engine design was chosen the way that every mesh object contains its own GLKBaseEffect shader object. The GLKBaseEffect is the shader class from GLKit by the way. I thought that the GLKBaseEffect would surely somehow cache compiled shader and share them over all instances. But this seems not to be the case. Every time a mesh is cloned to create a new instance of a scene object, the shader in that mesh gets copied, too. But this is finally the reason for a huge memory increase. By huge I mean some value around 500 KB per shader object.</p>
<p>Sine every tower in the game contains at least one mesh and hence a GLKBaseEffect instance, you are not able to place more than 40 towers before you receive the first memory warning.</p>
<p>Long story short, the engine design has changed a bit to work around this memory issue. Every mesh now has to store textures and colors and some other material information, but not the GLKBaseEffect itself. The shader object is now part of the renderer state and exists only once, like a singleton. Before the renderer draws a mesh, it has to apply textures and material information to the shared shader.</p>
<p>In the near future, when I will implement a additional shader handling to the engine, I could move the shader back to the mesh. I think it is more elegant to have the shader assigned to the mesh. But I will have to cache shader programs over all shader object instances to avoid the memory effect from the GLKBaseEffect.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world-of-towers.com/first-memory-profiling/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
