<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>vapor3D - Open Source 3D Game Toolset</title>
	
	<link>http://www.vapor3d.org</link>
	<description>vapor is an engine and editor to make 3D games.</description>
	<lastBuildDate>Wed, 31 Aug 2011 21:12:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/vapor3d" /><feedburner:info uri="vapor3d" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Editor Preferences</title>
		<link>http://feedproxy.google.com/~r/vapor3d/~3/qDdZvCSlZKY/editor-preferences</link>
		<comments>http://www.vapor3d.org/editor-preferences#comments</comments>
		<pubDate>Wed, 31 Aug 2011 21:12:05 +0000</pubDate>
		<dc:creator>triton</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.vapor3d.org/?p=281</guid>
		<description><![CDATA[One thing that I think is pretty important in software is for it to be extensible and customizable, so each user can tailor it to his specific needs. So with that in mind I have added a new preferences system to the editor, where each user can change the behaviour of the application. Key Bindings [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">One thing that I think is pretty important in software is for it to be extensible and customizable, so each user can tailor it to his specific needs. So with that in mind I have added a new preferences system to the editor, where each user can change the behaviour of the application.</p>
<h3>Key Bindings</h3>
<div><span style="color: #0000ee;"><img class="size-medium wp-image-282 aligncenter" style="border-style: initial; border-color: initial;" title="Screenshot-2011-08-31_21.55.18" src="http://www.vapor3d.org/wp/wp-content/uploads/2011/08/Screenshot-2011-08-31_21.55.18-282x300.png" alt="" width="282" height="300" /></span></p>
<p style="text-align: justify;">The first preferencesI added was key bindings customization. Everyone likes to do their work faster, and shortcuts help to achieve that by not having to reach time and time again for the tools you need from some cluttered menus. This is also something everyone is vocal about, everyone has their own preferences on what keys each actions should be bound to. With this system, everyone can change the bindings to their own liking, and there is also support for key profiles. This can be used to ease transition for people that are used to key bindings from other tools, like Unity, Maya or Max.</p>
<h3>Plugins</h3>
<p><a href="http://www.vapor3d.org/wp/wp-content/uploads/2011/08/Screenshot-2011-08-31_22.05.04.png" rel="lightbox[281]"><img class="aligncenter size-medium wp-image-289" title="Screenshot-2011-08-31_22.05.04" src="http://www.vapor3d.org/wp/wp-content/uploads/2011/08/Screenshot-2011-08-31_22.05.04-282x300.png" alt="" width="282" height="300" /></a></p>
<p>Another thing that I added was support for managing plugins. If you don&#8217;t know me, I think plugins are a pretty big deal in software, they not only make your software more extensible, but they also allow for easier management of the code base and complexity. In my editor architecture, all core functionality is implemented via plugins. Of course a couple plugins depend on each other, but that is fine, as long as they communicate via well-defined interfaces. This is pretty similiar to the component-based approach way of thinking, that is getting pretty popular for scene management.</p>
<p>Right now it allows you to enable and disable plugins, install and uninstall them, as well as checking for updates. I am still not completely happy with the GUI layout, but for now it does its job.</p>
<p>I&#8217;ve also started adding more preferences, but they&#8217;re still a work in progress and will be shown later.</p>
</div>
<img src="http://feeds.feedburner.com/~r/vapor3d/~4/qDdZvCSlZKY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vapor3d.org/editor-preferences/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.vapor3d.org/editor-preferences</feedburner:origLink></item>
		<item>
		<title>Happy new year. Long live vapor3D.</title>
		<link>http://feedproxy.google.com/~r/vapor3d/~3/Zkc-tXPwNMo/happy-new-year-long-live-vapor3d</link>
		<comments>http://www.vapor3d.org/happy-new-year-long-live-vapor3d#comments</comments>
		<pubDate>Sat, 15 Jan 2011 02:52:08 +0000</pubDate>
		<dc:creator>triton</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.vapor3d.org/?p=255</guid>
		<description><![CDATA[Hi again. I know I&#8217;ve been really silent these last few months, but that doesn&#8217;t mean progress on this project has stopped. Quite the opposite, actually. If you have been checking the Subversion logs, you might know that a lot has been done in that time. Many bugs were fixed, and a lot of code has [...]]]></description>
			<content:encoded><![CDATA[<p>Hi again. I know I&#8217;ve been really silent these last few months, but that doesn&#8217;t mean progress on this project has stopped. Quite the opposite, actually. If you have been checking the Subversion logs, you might know that a lot has been done in that time. Many bugs were fixed, and a lot of code has changed, so I will recap the features that have landed in the latest development version.</p>
<h3>Resource Browser</h3>
<p>Previously to this feature, if you wanted to add a model in the scene, you had to add a new entity, add a new Model component, and choose the mesh resource file. This still works, but is quite slow and has no preview. So I worked on a resource browser that will render all the meshes it finds the resource locations to a thumbnail. Then you can add it to the scene with a simple drag and drop to where you want it placed. The thumbnails are cached and an hash of the original file is also saved, so they can be regenerated only if the mesh changes.</p>
<p style="text-align: center;"><a href="http://www.vapor3d.org/wp/wp-content/uploads/2011/01/SS-2010-10-21_01.13.42.png" rel="lightbox[255]"><img class="aligncenter size-large wp-image-256" title="Resource Browser" src="http://www.vapor3d.org/wp/wp-content/uploads/2011/01/SS-2010-10-21_01.13.42-1024x428.png" alt="" width="491" height="206" /></a></p>
<h3></h3>
<h3>Particles</h3>
<p>A particle system was introduced in the engine. They are used to simulate effects like fire, rain, snow, smoke and also used in games to model combat effects. Our system is quite basic at the moment, using OpenGL point sprites to render the particles. It&#8217;s all on the CPU for now, though a GPU shader-based version might be added in the future. Further developments will be done to make this system more flexible, to allow more types of effects.</p>
<p style="text-align: center;"><a href="http://www.vapor3d.org/wp/wp-content/uploads/2011/01/SS-2011-01-14_19.05.36.png" rel="lightbox[255]"><img class="aligncenter size-full wp-image-276" title="SS-2011-01-14_19.05.36" src="http://www.vapor3d.org/wp/wp-content/uploads/2011/01/SS-2011-01-14_19.05.36.png" alt="" width="448" height="280" /></a></p>
<h3 style="text-align: left;"></h3>
<h3 style="text-align: left;">Lua Scripting</h3>
<p>The editor is based on a scripting workflow paradigm, very much like the popular Unity3D engine. You work on your visual of the game in the editor, while adding behaviour with Lua scripts. So it&#8217;s no surprise that Lua has been already integrated with the engine. Scripts work like regular resources, so they get things like automatic reloads in case you change the code while working.</p>
<p>I started the binding process with Luabind, which is a template-heavy library that helps to bind C++ to Lua. It worked fine, but I didn&#8217;t like the increase in compile times and code size. Also the bindings had to be mantained manually in the source code. So I switched to SWIG, a tool that you run on your code, and automatically generates bindings. I&#8217;m still not satisfied with some of the way it binds some constructs but in general it&#8217;s stable and is working fine.</p>
<p>Here&#8217;s an example of a simple script:</p>
<address>
<pre><span style="font-style: normal;">
<div class="codecolorer-container lua default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="lua codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">function</span> onUpdate<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
    <span style="color: #b1b100;">local</span> pos <span style="color: #66cc66;">=</span> transform:getPosition<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
    pos.y <span style="color: #66cc66;">=</span> pos.y + <span style="color: #cc66cc;">0.1</span><br />
    transform:setPosition<span style="color: #66cc66;">&#40;</span>pos<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #b1b100;">end</span></div></div>

</span></pre>
<p><span style="font-style: normal;"> </span></p>
<h3><span style="font-style: normal;">Sound</span></h3>
<p>The audio subsytem was actually worked on last year, but it was never integrated in the scene. It uses OpenAL, a free SDK that allows playback of 2D and 3D audio. It&#8217;s available on all popular platforms, like PC, Linux, Mac OS X, iPhone. I refactored the audio subsystem code to be up standards with the rest of the engine.</p>
<p>To playback sound you just need to add a Listener, which is usually attached to the main camera, and one source for each thing that emits sound. The engine will automatically manage all the buffers and playback the sources. The sounds can be in OGG, but a WAV loader will be added later, since it&#8217;s faster to decode than OGG, which can be useful for short sounds.</p>
<p>Streaming is still not available, but I will work on it. It&#8217;s very useful for background music, because you don&#8217;t need to keep all the audio loaded in memory at all times. It will progressively decode the sound as needed.</p>
</address>
<h3></h3>
<h3>Fixed Pipeline</h3>
<p>Since the start of vapor3D, I had the goal of using only shaders. Well, in the real world this doesn&#8217;t cut it. Some friends of mine with an old graphics card wanted to try the editor, but since I was relying on OpenGL 2.0 only features, and their graphics card only had OpenGL 1.5, they couldn&#8217;t run it. So I added support for a fixed pipeline path. It was actually easier than I thought, but since the engine and renderer itself are nicely modularized, it was made in a couple of hours.</p>
<p>Of course in this path some features might not work, and you might have degraded graphics quality, but it&#8217;s better to run with slightly worse graphics than not run at all. I think this will be important for vapor3D, especially since I want to do casual games later with it. The last statistics I looked at regarding this, showed that Intel graphics card are still very popular, and some models don&#8217;t have shader support.</p>
<p>Mobile platforms like the iPhone and Android also have a lot of devices that only support OpenGL ES 1.0/1.1 (no shaders) so this will be pretty good to later port the engine to those devices.</p>
<h3></h3>
<h3>Build System and Dependencies</h3>
<p>In the past, we have been using Visual C++ 2008, which needed to be upgraded to the Service Pack 1. We also needed Boost because we were using some new C++ stuff that wasn&#8217;t available.</p>
<p>Now the default IDE and compiler is based on the Visual C++ 2010 platform. All the dependencies were recompiled with this new compiler. Boost was removed, and due to that, some of the code that depended on it (threads, events) had to be replaced. The code is now simpler and with reduced size, since Boost is a little heavy on templates.</p>
<p>I also took quite some time to make the engine more modular, reducing the headers that have to be included in many files. This should result in a faster build in all platforms. Some measures to combat symbol bloat were also implemented.</p>
<img src="http://feeds.feedburner.com/~r/vapor3d/~4/Zkc-tXPwNMo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vapor3d.org/happy-new-year-long-live-vapor3d/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.vapor3d.org/happy-new-year-long-live-vapor3d</feedburner:origLink></item>
		<item>
		<title>Skeletal Mesh Animation</title>
		<link>http://feedproxy.google.com/~r/vapor3d/~3/wMxhUjVuA_c/skeletal-mesh-animation</link>
		<comments>http://www.vapor3d.org/skeletal-mesh-animation#comments</comments>
		<pubDate>Sat, 28 Aug 2010 22:43:28 +0000</pubDate>
		<dc:creator>triton</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.vapor3d.org/?p=241</guid>
		<description><![CDATA[Like the title says, this time I bring you some cool footage of the new and hot skeletal mesh animation support in the engine. All the animation skinning is done on the GPU via shaders, so it&#8217;s quite fast. www.youtube.com/watch?v=KUzN8DGfKHo Right now only Milkshape3D animated meshes are supported, but it&#8217;s abstracted in the engine, so [...]]]></description>
			<content:encoded><![CDATA[<p>Like the title says, this time I bring you some cool footage of the new and hot skeletal mesh animation support in the engine. All the animation skinning is done on the GPU via shaders, so it&#8217;s quite fast.</p>
<p><a href="http://www.youtube.com/watch?v=KUzN8DGfKHo"><span class="youtube">
<object type="application/x-shockwave-flash" width="425" height="373" data="http://www.youtube.com/v/KUzN8DGfKHo?color1=3a3a3a&amp;color2=999999&amp;border=1&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1">
<param name="movie" value="http://www.youtube.com/v/KUzN8DGfKHo?color1=3a3a3a&amp;color2=999999&amp;border=1&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1" />
<param name="allowFullScreen" value="true" />
<param name="wmode" value="transparent" />
</object>
</span><p><a href="http://www.youtube.com/watch?v=KUzN8DGfKHo">www.youtube.com/watch?v=KUzN8DGfKHo</a></p></a></p>
<p>Right now only  Milkshape3D animated meshes are supported, but it&#8217;s  abstracted in the  engine, so there&#8217;s nothing preventing, say, an FBX mesh  importer to be made  in the future.</p>
<p>Even though I&#8217;m satisfied at the moment with the animation system, it&#8217;s still quite basic. It&#8217;s missing nice features like animation blending and attachment points, but they shall be added once needed.</p>
<p>Hope you enjoyed. Thanks to Relfos for having lots of patience and helping me fix some issues.</p>
<img src="http://feeds.feedburner.com/~r/vapor3d/~4/wMxhUjVuA_c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vapor3d.org/skeletal-mesh-animation/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.vapor3d.org/skeletal-mesh-animation</feedburner:origLink></item>
		<item>
		<title>Repository Statistics</title>
		<link>http://feedproxy.google.com/~r/vapor3d/~3/tWT1y41BT1o/repository-statistics</link>
		<comments>http://www.vapor3d.org/repository-statistics#comments</comments>
		<pubDate>Fri, 13 Aug 2010 23:55:18 +0000</pubDate>
		<dc:creator>triton</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.vapor3d.org/?p=233</guid>
		<description><![CDATA[I was having a talk with a friend about project health, and suggested using the logs from Subversion, a source code version control tool,  as a crude indicator of project activity. I got curious and found some tools that can plot some nice graphs for us. I tried StatSVN which was very simple to set [...]]]></description>
			<content:encoded><![CDATA[<p>I was having a talk with a friend about project health, and suggested using the logs from <a href="http://subversion.apache.org/">Subversion</a>, a source code version control tool,  as a crude indicator of project activity.</p>
<p>I got curious and found some tools that can plot some nice graphs for us. I tried <a href="http://www.statsvn.org/">StatSVN</a> which was very simple to set up. Just get the log file from the repository and feed it to the plot tool. Let it run, and it will calculate lots of useful information from all the metadata stored in the Subversion log.</p>
<p>Here are some interesting graphs that it generated:</p>
<p><a href="http://www.vapor3d.org/wp/wp-content/uploads/2010/08/vapor-lines-of-code1.png" rel="lightbox[233]"><img class="aligncenter size-full wp-image-236" title="Lines of code" src="http://www.vapor3d.org/wp/wp-content/uploads/2010/08/vapor-lines-of-code1.png" alt="Lines of code" width="560" height="350" /></a></p>
<p>This graph plots lines of code vs. time. I think it shows a very healty activity around the project. A slow start, where I mostly thought about design and researched new techniques, followed by some good ol&#8217; coding.</p>
<p><a href="http://www.vapor3d.org/wp/wp-content/uploads/2010/08/vapor-file-count.png" rel="lightbox[233]"><img class="aligncenter size-full wp-image-237" title="File count" src="http://www.vapor3d.org/wp/wp-content/uploads/2010/08/vapor-file-count.png" alt="File count" width="560" height="350" /></a>This one plots file count vs. time. I actually had no idea that there were some many files but I&#8217;m not surprised. I create new files for every new separate concept introduced in the engine, so it makes sense there are so many files.</p>
<p>Now let&#8217;s hope that in some months from now, I can generate the plots again and reach the same conclutions.</p>
<img src="http://feeds.feedburner.com/~r/vapor3d/~4/tWT1y41BT1o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vapor3d.org/repository-statistics/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.vapor3d.org/repository-statistics</feedburner:origLink></item>
		<item>
		<title>Editor plugins, Picking, Frustums and Shading</title>
		<link>http://feedproxy.google.com/~r/vapor3d/~3/22ji-Ul2NEE/editor-plugins-picking-frustums-and-shading</link>
		<comments>http://www.vapor3d.org/editor-plugins-picking-frustums-and-shading#comments</comments>
		<pubDate>Fri, 06 Aug 2010 12:39:05 +0000</pubDate>
		<dc:creator>triton</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.vapor3d.org/?p=220</guid>
		<description><![CDATA[Hi there! I&#8217;ve been working a lot more on this project, now that I am on holidays. I did a lot of refactoring work, while fixing some rough spots on the API. I started by implementing plugin support on the editor. I came up with a quite simple plugin API and event system which I [...]]]></description>
			<content:encoded><![CDATA[<p>Hi there! I&#8217;ve been working a lot more on this project, now that I am on holidays. I did a lot of refactoring work, while fixing some rough spots on the API.</p>
<p>I started by implementing plugin support on the editor. I came up with a quite simple plugin API and event system which I used to reimplement all of the core tools. It took a few days  to do it properly, but it was well worth it. Now each tool is completely decoupled from each other and they communicate via events. This  allows plugins to be enabled and disabled at  runtime via a simple plugin manager (with few mouse clicks).</p>
<p style="text-align: center;"><a href="http://www.vapor3d.org/wp/wp-content/uploads/2010/08/11mclle.png" rel="lightbox[220]"></a><a href="http://www.vapor3d.org/wp/wp-content/uploads/2010/08/11mclle.png" rel="lightbox[220]"><img class="aligncenter size-medium wp-image-221" title="Plugin Manager" src="http://www.vapor3d.org/wp/wp-content/uploads/2010/08/11mclle-300x154.png" alt="" width="300" height="154" /></a></p>
<p style="text-align: left;">After the editor was stable again  and all tools were ported to plugins, I wanted to improve them. I only had transformation tools (gizmos) for positioning, so I added support for scaling and rotation.</p>
<p style="text-align: left;">White I was at it, I fixed a long-standing feature that I couldn&#8217;t get working before: object picking. This allows you to select the objects with the mouse. Most people use the <em>gluUnproject</em> function call provided by the GLU (OpenGL Utility library) but it&#8217;s been deprecated, so I had to implement it myself the hard way. It&#8217;s working now and it&#8217;s very accurate.</p>
<p style="text-align: left;">As you can see on the previous editor screenshot, I&#8217;m also adding a brush system to the terrain editing tools. To make this really neat, I will need to project the brush in the terrain, a technique known as <em>projective texturing</em>. I could hack it fast and make it work just for the terrain, but I like to do things properly, so I added a Projector component that will be more flexible and allows decals and simple shadows.</p>
<p style="text-align: left;">The projector is still not working, because I needed to add frustum support in the engine first. I had to research how to extract the frustum planes from the projection matrix, which turns out to be very simple. Thanks to Gil Gribb and Klaus Hartmann for their paper: <a href="http://www.cs.otago.ac.nz/postgrads/alexis/planeExtraction.pdf"><em>Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix</em></a>. This frustum support will be extended to perform hierarchical frustum culling which should provide a nice speed up for complex scenes.</p>
<p style="text-align: left;">To finish, today I&#8217;ve fixed a small problem in the mesh loader that wasn&#8217;t providing the correct vertex normals and played a bit with the shading. I&#8217;m using a simple <a href="http://developer.valvesoftware.com/wiki/Half_Lambert">Half-Lambert</a> model with constant ambient factor. This can be improved later by sampling the ambient factor from a cubemap. This is known as <a href="http://blog.wolfire.com/2010/03/Image-based-ambient-lighting">image-based ambient lighting</a> and will make things look better.</p>
<p style="text-align: left;"><a href="http://www.vapor3d.org/wp/wp-content/uploads/2010/08/ss20100806130216.png" rel="lightbox[220]"></a><a href="http://www.vapor3d.org/wp/wp-content/uploads/2010/08/ss20100806130216.png" rel="lightbox[220]"><img class="aligncenter size-medium wp-image-224" title="Shading" src="http://www.vapor3d.org/wp/wp-content/uploads/2010/08/ss20100806130216-300x200.png" alt="" width="300" height="200" /></a></p>
<p style="text-align: left;">
<img src="http://feeds.feedburner.com/~r/vapor3d/~4/22ji-Ul2NEE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vapor3d.org/editor-plugins-picking-frustums-and-shading/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.vapor3d.org/editor-plugins-picking-frustums-and-shading</feedburner:origLink></item>
		<item>
		<title>Procedural Clouds</title>
		<link>http://feedproxy.google.com/~r/vapor3d/~3/SVOttSwBq3w/procedural-clouds</link>
		<comments>http://www.vapor3d.org/procedural-clouds#comments</comments>
		<pubDate>Fri, 16 Jul 2010 22:16:50 +0000</pubDate>
		<dc:creator>triton</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.vapor3d.org/?p=214</guid>
		<description><![CDATA[Hey there. I&#8217;ve finally finished my exams and started working more on the engine. These last days I&#8217;ve been working on adding some clouds to the sky. I wanted the clouds to be animated and also to allow for more or less coverage of the sky. To get these features I thought about using procedurally [...]]]></description>
			<content:encoded><![CDATA[<p>Hey there. I&#8217;ve finally finished my exams and started working more on the engine. These last days I&#8217;ve been working on adding some clouds to the sky. I wanted the clouds to be animated and also to allow for more or less coverage of the sky. To get these features I thought about using procedurally generated content. They allow you to change the mood of a game by just tweaking some parameters. The basic building block of procedural content is noise. Not true random noise, but what is known as coherent noise.</p>
<div id="attachment_215" class="wp-caption alignright" style="width: 160px"><a href="http://www.vapor3d.org/wp/wp-content/uploads/2010/07/PerlinNoise2d.png" rel="lightbox[214]"><img class="size-thumbnail wp-image-215 " title="Coherent noise" src="http://www.vapor3d.org/wp/wp-content/uploads/2010/07/PerlinNoise2d-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Coherent noise</p></div>
<p>This type of noise is generated by interpolating between random values. The most known type of coherent noise is Perlin noise. It was created by Ken Perlin in 1985 and is used in all sorts of things in the special effects movie industry. By manipulating this noise we can generate clouds, water, fire, grass, planets, well, pretty much everything.</p>
<p>So the first step was creating a Noise class in the engine. After this was done I added support for animated clouds in the sky system component. I didn&#8217;t tweak it yet, but I&#8217;m already quite pleased with the results.</p>
<p><a href="http://www.youtube.com/watch?v=j1aAAuK80do"><span class="youtube">
<object type="application/x-shockwave-flash" width="425" height="373" data="http://www.youtube.com/v/j1aAAuK80do?color1=3a3a3a&amp;color2=999999&amp;border=1&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1">
<param name="movie" value="http://www.youtube.com/v/j1aAAuK80do?color1=3a3a3a&amp;color2=999999&amp;border=1&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1" />
<param name="allowFullScreen" value="true" />
<param name="wmode" value="transparent" />
</object>
</span><p><a href="http://www.youtube.com/watch?v=j1aAAuK80do">www.youtube.com/watch?v=j1aAAuK80do</a></p></a></p>
<p>There are still some seams in the sky, probably due to badly generated sphere texture coordinates. If someone knows how to do spherical mapping properly, I&#8217;d love if you could give me some tips on how to get it perfect. In the future I&#8217;ll work on some animated water, but it&#8217;s going to be a lot of work to do it properly, since I want to base it on splines, instead of the usual &#8220;water planes&#8221;. That will be more flexible and allow curved rivers and also waterfalls. Take care.</p>
<img src="http://feeds.feedburner.com/~r/vapor3d/~4/SVOttSwBq3w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vapor3d.org/procedural-clouds/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.vapor3d.org/procedural-clouds</feedburner:origLink></item>
		<item>
		<title>Better terrain lighting and basic paging</title>
		<link>http://feedproxy.google.com/~r/vapor3d/~3/rx14woC_HjY/better-terrain-lighting-and-basic-paging</link>
		<comments>http://www.vapor3d.org/better-terrain-lighting-and-basic-paging#comments</comments>
		<pubDate>Fri, 18 Jun 2010 13:52:49 +0000</pubDate>
		<dc:creator>triton</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.vapor3d.org/?p=210</guid>
		<description><![CDATA[Even though the site hasn&#8217;t been updated as frequently as I wish, I&#8217;ve been working hard on the engine. There is too much stuff to mention, but the main visible changes have been better lighting due to the averaging of normals in the terrain generated by an heightmap. Previously the engine didn&#8217;t average the normals [...]]]></description>
			<content:encoded><![CDATA[<p>Even though the site hasn&#8217;t been updated as frequently as I wish, I&#8217;ve been working hard on the engine. There is too much stuff to mention, but the main visible changes have been better lighting due to the averaging of normals in the terrain generated by an heightmap. Previously the engine didn&#8217;t average the normals by taking into account all the neighbor faces of each vertex. But now we do, so the lighting quality of the terrains improved a lot.</p>
<p><a href="http://www.vapor3d.org/wp/wp-content/uploads/2010/06/106avky.png" rel="lightbox[210]"><img class="aligncenter size-medium wp-image-211" title="Averaged terrain normals" src="http://www.vapor3d.org/wp/wp-content/uploads/2010/06/106avky-300x236.png" alt="" width="300" height="236" /></a></p>
<p>Although you can&#8217;t see from a static screenshot, bagic paging support has been added. So as you walk in the world, each new page of terrain will be loaded on-demand, giving endless possibilities on building awesome and big worlds. I&#8217;ll try to make a video showing this later. I&#8217;ve been working on lots of other stuff on the engine, and seand is also working on an awesome GUI system, so expect more news soon.</p>
<img src="http://feeds.feedburner.com/~r/vapor3d/~4/rx14woC_HjY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vapor3d.org/better-terrain-lighting-and-basic-paging/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.vapor3d.org/better-terrain-lighting-and-basic-paging</feedburner:origLink></item>
		<item>
		<title>Terrain Editing and Undo/Redo support</title>
		<link>http://feedproxy.google.com/~r/vapor3d/~3/LqffI9gGP0M/terrain-editing-and-undoredo-support</link>
		<comments>http://www.vapor3d.org/terrain-editing-and-undoredo-support#comments</comments>
		<pubDate>Tue, 16 Mar 2010 22:06:36 +0000</pubDate>
		<dc:creator>triton</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.vapor3d.org/?p=202</guid>
		<description><![CDATA[www.youtube.com/watch?v=QlMXjeycVXM The editor now allows for some simple terrain editing like raising and lowering. Other tools like smoothing and painting are in the works. And also support for arbitrary brushes (like Photoshop brushes) which should give artists more creative freedom to use shapes to edit and paint the terrain. Undo and redo support has also [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.youtube.com/watch?v=QlMXjeycVXM"><span class="youtube">
<object type="application/x-shockwave-flash" width="425" height="373" data="http://www.youtube.com/v/QlMXjeycVXM?color1=3a3a3a&amp;color2=999999&amp;border=1&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1">
<param name="movie" value="http://www.youtube.com/v/QlMXjeycVXM?color1=3a3a3a&amp;color2=999999&amp;border=1&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1" />
<param name="allowFullScreen" value="true" />
<param name="wmode" value="transparent" />
</object>
</span><p><a href="http://www.youtube.com/watch?v=QlMXjeycVXM">www.youtube.com/watch?v=QlMXjeycVXM</a></p></a></p>
<p>The editor now allows for some simple terrain editing like raising and lowering. Other tools like smoothing and painting are in the works. And also support for arbitrary brushes (like Photoshop brushes) which should give artists more creative freedom to use shapes to edit and paint the terrain. Undo and redo support has also been added so you can go wild and go back to a safe version of your work. <img src='http://www.vapor3d.org/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>About the undo/redo system, it saves the state of the terrain (only the heights are needed!) before and after your editing operation, so it can do undo and redo. First I tried to only save the operation used (Raising, Lowering) and then algorithmically apply the inverse operation, but not much time later I thought saving the state would be better. Operations like terrain smoothing don&#8217;t have an inverse operation, so I had to support state saving anyway.</p>
<img src="http://feeds.feedburner.com/~r/vapor3d/~4/LqffI9gGP0M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vapor3d.org/terrain-editing-and-undoredo-support/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.vapor3d.org/terrain-editing-and-undoredo-support</feedburner:origLink></item>
		<item>
		<title>February / Mid-March Development Recap</title>
		<link>http://feedproxy.google.com/~r/vapor3d/~3/0pqiKFlySzw/february-mid-march-development-recap</link>
		<comments>http://www.vapor3d.org/february-mid-march-development-recap#comments</comments>
		<pubDate>Thu, 11 Mar 2010 13:27:30 +0000</pubDate>
		<dc:creator>triton</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.vapor3d.org/?p=200</guid>
		<description><![CDATA[Development has been going quite strong over the latest week. If you follow the SVN change logs, you might already know this, but I&#8217;ll make a simple recap of what I&#8217;ve been working on. At the end of February, I started fleshing out FBO support. Framebuffer objects (FBOs), are render targets that you ask the engine to [...]]]></description>
			<content:encoded><![CDATA[<p>Development has been going quite strong over the latest week. If you follow the SVN change logs, you might already know this, but I&#8217;ll make a simple recap of what I&#8217;ve been working on.</p>
<p>At the end of February, I started fleshing out FBO support. Framebuffer objects (FBOs), are render targets that you ask the engine to render content into. There are 2 types of framebuffer render targets you can attach:</p>
<ul>
<li>textures &#8211; also known as render-to-texture or RTT,</li>
<li>render buffers, commonly called offscreen rendering.</li>
</ul>
<p>FBOs are mainly used to implement screen effects. We will also use them to implement shadow mapping later on.</p>
<p>Then I worked a lot on refactoring the editor code. It didn&#8217;t have a clear architecture. When I first started the editor, I didn&#8217;t have a clear goal of how I wanted it to work, so I just keep adding code to it, refactoring aggressively as I went. While it was not that messy, clearly when I started adding more functionality I saw a different approach regarding the architecture was needed.</p>
<p>Now the architecture is based on &#8220;plugins&#8221; (which at the moment aren&#8217;t loaded at runtime, but it&#8217;s a possibility). There is an interface that provides functionality to what I call &#8220;editor modes&#8221;, and they can react to events, which are implemented with C++ <a href="http://en.wikipedia.org/wiki/Delegate_(.NET)">delegates</a>.</p>
<p>After this work was done, I had to move all the existing editor functionality into this style. While at it, I also fixed a few bugs regarding active modes. Now every editor mode only reacts when it is selected in the toolbar. I also started thinking about undo/redo support and added some code and data structures, but I have yet to finish this work.</p>
<p>Now that this refactoring was done, I wanted to add some new functionality. So I worked on essential manipulation of 3D objects. This is what&#8217;s normally called a &#8220;gizmo&#8221; or &#8220;manipulator&#8221;.</p>
<p><img class="aligncenter" title="Translation Gizmo" src="http://i42.tinypic.com/jhzij6.png" alt="Translation Gizmo" width="750" height="500" /></p>
<p>You might notice those strange red lines in the above screenshot. They were added to aid in debugging picking code, which had a few mistakes. I fixed it and it now seems to work great.</p>
<p>Recently, I&#8217;ve been working on adding terrain editing support to the editor. Simple raising of the terrain is already working quite well. To implement I needed to add Bounding Sphere support in the engine, which I use to test if the vertices of the terrain are within the range of the intersection point given by ray picking the terrain location you clicked. It seems to work great, but I still want to work on it. There a couple other terrain editing modes I want to add, like lowering, smoothing, leveling, painting, etc.</p>
<p>Yesterday I also researched about Mono and Lua binding generators. I&#8217;m still unsure whether Mono or Lua are better choices for vapor, so let me know if you have any opinion about this. I also came across <a href="http://code.google.com/p/firebreath/">FireBreath</a>, which is a cross-platform browser plugin framework, so it&#8217;s quite possible some day vapor will run on web browsers.</p>
<p>Hope you like it. We&#8217;re still looking for a developer to help us develop the engine. Let us know if you&#8217;re interested!</p>
<img src="http://feeds.feedburner.com/~r/vapor3d/~4/0pqiKFlySzw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vapor3d.org/february-mid-march-development-recap/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.vapor3d.org/february-mid-march-development-recap</feedburner:origLink></item>
		<item>
		<title>Scene serialization</title>
		<link>http://feedproxy.google.com/~r/vapor3d/~3/s2KWYXjV24E/serialization</link>
		<comments>http://www.vapor3d.org/serialization#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:14:41 +0000</pubDate>
		<dc:creator>triton</dc:creator>
				<category><![CDATA[Engine]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[serialization]]></category>

		<guid isPermaLink="false">http://www.vapor3d.org/?p=176</guid>
		<description><![CDATA[Serialization is used to save the contents of a running program to a safe storage medium, like your hard drive. When you edit the contents of a scene in the editor, we need to be able to save it to a file, so you can load your level later on. We are trying to design [...]]]></description>
			<content:encoded><![CDATA[<p>Serialization is used to save the contents of a running program to a safe storage medium, like your hard drive. When you edit the contents of a scene in the editor, we need to be able to save it to a file, so you can load your level later on. We are trying to design vapor so you can achieve this with the lowest effort possible.</p>
<p>As you probably know, vapor is a scene based engine with a component interface. This makes it very easy to serialize each component independently. It should even be possible to share components for some memory savings, though we&#8217;ll leave that for later, when that optimization is really needed &#8211; premature optimization often leads to trouble.</p>
<p>There are two main ways to format your data when you serialize it, you can either do it in binary or in plain text form. Binary takes up less space and is usually faster to load, while text formats are easier to modify (you can even use plain Notepad) but end up taking more space, though with some simple compression that can be worked around.</p>
<p>Most people choose <a href="http://en.wikipedia.org/wiki/XML">XML</a> for this task, which is a standard, structured plain text format. There are lots of XML libraries for C++ which make your task considerably easier (implementing a good and fast XML parser isn&#8217;t trivial). The main drawbacks with XML is that it is very verbose, thus takes a lot of disk space needlessly. We ended up using <a href="http://en.wikipedia.org/wiki/Json">JSON</a> instead, a simple and readable file format, which also has gained a lot of support mostly in the web development community, since JavaScript can read it natively.</p>
<p>I found a nice library called <a href="http://jsoncpp.sourceforge.net/">json-cpp</a> and in a couple minutes had a simple example working. I liked it&#8217;s simple approach and integrated it into vapor. The serialization work will take some more days to finish since there a couple components that need to be integrated. Also for this process to have any use, we also need to implement deserialization, which is, you guessed it, reading the written JSON file and assembling it back into a scene.</p>
<p>Let&#8217;s see an example of a very simple scene serialized:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #3366CC;">&quot;name&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Scene&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp;<span style="color: #3366CC;">&quot;nodes&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">&quot;FBOquad&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;components&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">&quot;Transform&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;position&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.0</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;rotation&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.0</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;scale&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span> <span style="color: #CC0000;">1.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1.0</span> <span style="color: #009900;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">&quot;MainCamera&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;components&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">&quot;FirstPersonCamera&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;far&quot;</span> <span style="color: #339933;">:</span> <span style="color: #CC0000;">5000.0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;forward&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.0</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;fov&quot;</span> <span style="color: #339933;">:</span> <span style="color: #CC0000;">45.0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;lookAt&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.0</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;lookSensivity&quot;</span> <span style="color: #339933;">:</span> <span style="color: #CC0000;">20.0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;moveSensivity&quot;</span> <span style="color: #339933;">:</span> <span style="color: #CC0000;">100.0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;near&quot;</span> <span style="color: #339933;">:</span> <span style="color: #CC0000;">1.0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;projection&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Perspective&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">&quot;Transform&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;position&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">20.0</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">65.0</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;rotation&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.0</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #3366CC;">&quot;scale&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span> <span style="color: #CC0000;">1.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1.0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1.0</span> <span style="color: #009900;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>This support will be integrated into the editor and then we&#8217;ll be able to finally save and load scenes graphically. One more baby step towards world domination!</p>
<img src="http://feeds.feedburner.com/~r/vapor3d/~4/s2KWYXjV24E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.vapor3d.org/serialization/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.vapor3d.org/serialization</feedburner:origLink></item>
	</channel>
</rss>

