<?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>Matt Ebb &#187; Code</title>
	<atom:link href="http://mattebb.com/weblog/category/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://mattebb.com</link>
	<description>cg / vfx</description>
	<lastBuildDate>Sat, 04 Feb 2012 16:31:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Blender sensor sizes</title>
		<link>http://mattebb.com/weblog/blender-sensor-sizes/</link>
		<comments>http://mattebb.com/weblog/blender-sensor-sizes/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 06:26:09 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/?p=429</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Today I finally got around to fixing Blender&#8217;s weird camera to more closely resemble real-world counterparts. Previously Blender&#8217;s camera was hardcoded to use a sensor aperture width of 32mm, which doesn&#8217;t reflect any commonly available real-world camera sensor/film size. In turn, this meant the focal length (mm) for the lens didn&#8217;t resemble any real-world lenses whatsoever. It was pretty misleading when trying to intuitively choose lenses based on photographic experience, and also makes it a lot harder to match live-action footage.</p>
<p>I&#8217;ve made a patch to allow specifying a sensor size, along with a handful of common presets &#8211; easy to add some more. This first version isn&#8217;t 100% correct in that it doesn&#8217;t modify the FOV due to focus (in reality, the extension of the lens elements due to focusing slightly alters the FOV), but this can be added pretty easily as an option later. It&#8217;s also deriving the apparent FOV purely based on the horizontal aperture width, options for vertical/diagonal may be possible to add later, but would need to check how the renderer works with varying frame resolution aspect ratios.</p>
<p>I thought it would be fun to do some real-world tests, so I quickly set up a very rough set in my backyard to see if a virtual set in Blender would match up. The setup and measurements were very very dodgy and I didn&#8217;t expect it to match perfectly. I shot with two cameras &#8211; first was Kat&#8217;s 5D Mk II with a 12-24mm on 24mm and a 24-70mm on 70mm. To compound the un-scientific sketchiness of the test even further I tried again with my 6&#215;6 Mamiya C330f TLR with 65mm and 80mm lenses, using a compact digital camera shooting the ground glass focusing screen (yes, too cheap to spend film on this). Given all this, I was pretty surprised to see that with a bit of tweaking it looks like it&#8217;s doing the right thing.</p>
<p>Anyway, the patch is up on the <a href="https://projects.blender.org/tracker/index.php?func=detail&amp;aid=24427&amp;group_id=9&amp;atid=127">blender patch tracker</a>, would be good to get some testing first before trying to commit, especially since I&#8217;m not sure how it should interact with the game engine either.</p>
<p><a href="http://mke3.net/blender/devel/2.5/lens_tests.jpg"><img class="alignnone" src="http://mke3.net/blender/devel/2.5/lens_tests_s.jpg" alt="" width="500" height="234" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/blender-sensor-sizes/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Moving on</title>
		<link>http://mattebb.com/weblog/moving-on/</link>
		<comments>http://mattebb.com/weblog/moving-on/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 03:33:57 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/?p=351</guid>
		<description><![CDATA[As of last week, I&#8217;ve decided it&#8217;s time to finish up with my full time Blender development contract and move on to new things. It&#8217;s been 8 months now since I started with this, pretty close to the first 9 month target/budget, so it&#8217;s not too unexpected. I&#8217;m happy to have done my part in [...]]]></description>
			<content:encoded><![CDATA[<p>As of last week, I&#8217;ve decided it&#8217;s time to finish up with my full time Blender development contract and move on to new things. It&#8217;s been 8 months now since I started with this, pretty close to the first 9 month target/budget, so it&#8217;s not too unexpected. I&#8217;m happy to have done my part in bringing Blender 2.5 closer up to production ready status over the last several months, and this decision doesn&#8217;t necessarily mean I&#8217;ll cease contributing, but it will be the end of it for now in this professional capacity. It&#8217;s been an interesting time, I&#8217;ve had some new experiences, but it&#8217;s not what I really want to be doing with myself in the long term &#8211; I&#8217;m itching to get back into more regular creative production work!</p>
<p>I think what I&#8217;ve learned from this is that while some people are happy programming for programming&#8217;s sake, It&#8217;s really most interesting for me when it&#8217;s directly in service of some artistic goal or creative problem to solve. While I&#8217;ve done the work to the best of my professional ability, the last several months of report management and bug fixing (I estimate about ~350 fixed since the start) has been a bit motivationally draining, so it&#8217;s a good time for change.</p>
<p>So, what next? I&#8217;m looking forward to getting stuck into more freelance work again<br />
(<a href="// matt at mke3 dot net" rel="nofollow" onclick="this.href='mailto:' + 'matt' + '&#x40;' + 'mke3.net'">hire me</a>! ;) as well as developing some new skills in other areas and working on some personal projects. Hopefully more interesting times ahead!</p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/moving-on/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>3Delight (renderman) in Blender</title>
		<link>http://mattebb.com/weblog/3delight-renderman-in-blender/</link>
		<comments>http://mattebb.com/weblog/3delight-renderman-in-blender/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 00:43:35 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/?p=309</guid>
		<description><![CDATA[For a little while now I&#8217;ve been working in my own time on a renderman connection for Blender 2.5. The new render API, while not fully complete and stable, makes it much easier to connect Blender&#8217;s scene data to external renderers, via python. I&#8217;m aware that other people are interested in this topic too, but [...]]]></description>
			<content:encoded><![CDATA[<p>For a little while now I&#8217;ve been working in my own time on a renderman connection for Blender 2.5. The new render API, while not fully complete and stable, makes it much easier to connect Blender&#8217;s scene data to external renderers, via python.</p>
<p>I&#8217;m aware that other people are interested in this topic too, but so far I&#8217;ve been doing this for my own use &#8211; to get more familiar and experienced with renderman in practice (by diving deeper in head first), and to develop something I&#8217;d like to use myself as a lighting/shading artist. I&#8217;m also concentrating on the <a href="http://www.3delight.com/">3Delight</a> renderer at the moment, since it interests me most and provides a free single license.</p>
<p>It&#8217;s still quite a work-in-progress, and by no means provides exhaustive support at this point. I&#8217;m tackling this from a pragmatic angle, with the priority of implementing things I want to use myself first and making that easy to use rather than trying to supporting the entire rispec from the start. I&#8217;ll probably release the code very soon, but I would like to clean it up a little bit first.</p>
<p>Here&#8217;s a test I rendered out last night, with a model by my mate Tristan Lock:<br />
<object width="500" height="250"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12173108&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=cf0000&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12173108&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=cf0000&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="250"></embed></object></p>
<p>Anyway, currently it supports: polygon mesh, subdivision surfaces, uv coordinates, depth of field blur, motion blur, surface/displacement/lightsource shaders with parameters available in blender material properties, simple conversion from blender&#8217;s lamps to renderman lightsources, shadow maps, raytraced shadows, built-in indirect lighting and environment lighting using 3Delight&#8217;s &#8216;indirectlight&#8217; and &#8216;envlight2&#8242; shaders, and shader editing and compilation from the blender text editor.</p>
<p><a href="http://mke3.net/projects/3Delight_blender/screens/3delight_blender_01.png"><img src="http://mke3.net/projects/3Delight_blender/screens/3delight_blender_01_s.jpg" alt="screenshot 01" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/3delight-renderman-in-blender/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>blender development</title>
		<link>http://mattebb.com/weblog/blender-development/</link>
		<comments>http://mattebb.com/weblog/blender-development/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 00:36:29 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blender User Interface]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/blender-development/</guid>
		<description><![CDATA[As some of you may have seen, yesterday during the 2009 Blender conference keynote, Ton Roosendaal announced the addition of another full time blender developer: me! Thanks to the support of a very generous anonymous sponsor, I should be able to survive working from home on Blender development for the next few months. This came [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>
As some of you may have <a href="http://www.blendernation.com/new-full-time-blender-developer-matt-ebb">seen</a>, yesterday during the 2009 Blender conference keynote, Ton Roosendaal announced the addition of another full time blender developer: me! Thanks to the support of a very generous anonymous sponsor, I should be able to survive working from home on Blender development for the next few months.</p>
<p>This came about over the last week or two, so it&#8217;s still new for me as well. As far as I&#8217;m currently aware, the brief for this project is &#8216;Get Blender 2.5 ready&#8217;. So rather than some of the other things I&#8217;ve been working on in my own time such as volume rendering, at least in the near term, this project will involve a fair bit of ui work, fixes, tweaks, cleaning up, attacking the 2.5 todo list, documentation &#8211; attacking the main things needed to get the 2.5/2.6 work polished to a professional level.
</p>
</div>
<div class="c2">
<p>
I also hope to be able to provide support to other developers who are working on other tools, to help polish things for 2.5 where they may not have time to do so themselves. This also includes Brecht and Campbell at the Blender Institute who are busy with Durian &#8211; I suspect I&#8217;ll be taking on some of their grunt work, so they can concentrate on what&#8217;s needed for their production. Hopefully this can alleviate some of the &#8216;blender open project syndrome&#8217;, where features are added quickly to fill a specific need for the team, but aren&#8217;t entirely well integrated or fleshed out enough to be fully useful for blender users in general.</p>
<p>So that&#8217;s the plan as it stands for now. Depending on how soon these tasks can be done, perhaps there will be time for some other things such as working on python integration related work, render api, or also something I think is desperately needed &#8211; design and coding work for a re-written shading/material system. But time will tell!
</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/blender-development/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>volume shading updates</title>
		<link>http://mattebb.com/weblog/volume-shading-updates/</link>
		<comments>http://mattebb.com/weblog/volume-shading-updates/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 11:08:23 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Miscellaneous Debris]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/volume-shading-updates/</guid>
		<description><![CDATA[It&#8217;s been a little while since I merged the volume rendering work into Blender 2.5 but I&#8217;ve been steadily poking away at it since. Today I committed some lighting features, support for volumes receiving external shadows (raytraced, and quick but more limited shadow mapped) and a new shadow only mode that&#8217;s a bit faster than [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a little while since I merged the volume rendering work into Blender 2.5 but I&#8217;ve been steadily poking away at it since. Today I committed some lighting features, support for volumes receiving external shadows (raytraced, and quick but more limited shadow mapped) and a new shadow only mode that&#8217;s a bit faster than self-shading, good for less dense volumes like fog or wispy smoke:</p>
<p><object width="455" height="261"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=6901636&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=6901636&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="455" height="261"></embed></object></p>
<p>I&#8217;ve also had some behind-the-scenes help in the form of code review and some new features from Alfredo de Greef, which has been great, and last week I bit the bullet and redid part of the shading code. It was previously using a custom method left over from initial experiments that wasn&#8217;t entirely physically correct &#8211; the shader didn&#8217;t conserve energy. In the real world, if more light is scattered out of the volume, towards your eye, there will be less left to keep penetrating through the remainder of the volume, but the previous method didn&#8217;t account for this.</p>
<p>In reality this also applies on a wavelength-dependent basis too, if the media is such that the red light is scattered out of the volume (from an initial white light shining on it), all that&#8217;s left to continue through the rest of the volume is the inverse of that (roughly cyan). I got to work changing this in the code, but after a long time testing realised it was getting very difficult to control. Most of the time, if you&#8217;re making a coloured volume (like the excellent coloured smoke in the <i><a href="http://www.apple.com/trailers/sony_pictures/cloudywithachanceofmeatballs/">Cloudy</a></i> trailer), you want to be able to just set a colour and be done with it. Doing it by tweaking wavelength dependent absorption and scattering was getting to be a real pain, so I ended up chopping and changing things around.</p>
<p>Now there&#8217;s a single physically based &#8216;scattering&#8217; parameter, controlling the amount of light that&#8217;s scattered out of the volume (leaving less to continue through), as well as a &#8216;transmission colour&#8217; that defines the result colour in the rest of the volume, after out-scattering and absorption. With these settings, by default, the shader works physically correctly. For ease of control though, I also added a &#8216;reflection&#8217; colour and strength which basically acts as an RGB gain, tinting the out-scattered light. It&#8217;s more of a non-physical tweak, but it does make life a fair bit easier. I&#8217;ve documented these settings with example renders on the <a href="http://wiki.blender.org/index.php/User:Broken/VolumeRendering">blender wiki</a>.</p>
<p>I&#8217;m pretty happy with how it&#8217;s working now: physically correct by default, but with the option of changing it for artistic control, and philosophically I think that&#8217;s how it should be. One of the many things I dislike about Blender&#8217;s current shading system is that it generally starts out incorrect, and you have to really understand what&#8217;s going on, and work quite hard in order to make it do the right thing (energy conservation, obeying physical laws, etc.). Not only is this a real pain since you have to go through the same chores every time just to get a decent looking material, but for many people who don&#8217;t have a good understanding of how rendering/shading works (or should work!) they&#8217;re left with sub-par results since they don&#8217;t know what magic buttons to press. You should have to work to break it, not to get just a base level of correctness. In further work I do on shading/rendering, that&#8217;s going to be a large motivation, to get things working physically plausible by default, but with the ability to break the rules if the situation requires it.</p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/volume-shading-updates/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>using image slice voxels</title>
		<link>http://mattebb.com/weblog/using-image-slice-voxels/</link>
		<comments>http://mattebb.com/weblog/using-image-slice-voxels/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 02:42:13 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/using-image-slice-voxels/</guid>
		<description><![CDATA[Here&#8217;s a quick screencast showing how to use the voxel data texture to load and render image slices as 3D volumes. It may be a little unclear in this small window, but you can click through to Vimeo to see the HD/fullscreen version. This is using the sim_physics branch in blender SVN, you may be [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a quick screencast showing how to use the voxel data texture to load and render image slices as 3D volumes. It may be a little unclear in this small window, but you can click through to Vimeo to see the HD/fullscreen version. This is using the sim_physics branch in blender SVN, you may be able to find builds for your system on <a href="http://www.graphicall.org">graphicall.org</a>.</p>
<p><object width="455" height="256"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5290063&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5290063&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="455" height="256"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/using-image-slice-voxels/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>medical voxel data</title>
		<link>http://mattebb.com/weblog/medical-voxel-data/</link>
		<comments>http://mattebb.com/weblog/medical-voxel-data/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 06:50:13 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/medical-voxel-data/</guid>
		<description><![CDATA[Today I committed some new additions to the blender sim_physics branch, making it easier to load up different types of voxel data sets for volume rendering within Blender. The most significant addition is a new &#8216;Image Sequence&#8217; file format choice in the voxel data texture, which makes it easy to load up image slice sequences [...]]]></description>
			<content:encoded><![CDATA[<p>
Today I <a href="http://lists.blender.org/pipermail/bf-blender-cvs/2009-June/020219.html">committed</a> some new additions to the blender sim_physics branch, making it easier to load up different types of voxel data sets for volume rendering within Blender. The most significant addition is a new &#8216;Image Sequence&#8217; file format choice in the voxel data texture, which makes it easy to load up image slice sequences as the Z axis of a 3d voxel grid.
</p>
<p><img src="http://mke3.net/blender/devel/rendering/volumetrics/skull_layers_s.jpg" /></p>
<p>
There are some other new features and optimisations mentioned in the <a href="http://lists.blender.org/pipermail/bf-blender-cvs/2009-June/020219.html">commit log</a> too. I really hope this helps people involved in medical visualisation/research, if only by providing them a free method for making animations with case data. If you are in the field, I&#8217;d love to hear from you.</p>
<p>Some test renders:</p>
<p><object width="455" height="455"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5319541&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5319541&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="455" height="455"></embed></object></p>
<p><object width="455" height="262"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3772546&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=3772546&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="455" height="262"></embed></object></p>
<p><object width="455" height="256"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5242989&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5242989&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="455" height="256"></embed></object></p>
<p><object width="455" height="256"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5243228&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5243228&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="455" height="256"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/medical-voxel-data/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>voxels -&gt; vertices</title>
		<link>http://mattebb.com/weblog/voxels-vertices/</link>
		<comments>http://mattebb.com/weblog/voxels-vertices/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 22:05:37 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/voxels-vertices/</guid>
		<description><![CDATA[Made a simple little script last night for testing voxel data loading &#8211; it creates vertices of a mesh based on voxel data, if the voxel&#8217;s value is above a threshold. The file&#8217;s here if you&#8217;re interested. The datasets this works with are available]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>
Made a simple little script last night for testing voxel data loading &#8211; it creates vertices of a mesh based on voxel data, if the voxel&#8217;s value is above a threshold. The file&#8217;s <a href="http://mke3.net/projects/bpython/voxels_to_verts.blend">here</a> if you&#8217;re interested. The datasets this works with are available <a href=http://www.gris.uni-tuebingen.de/edu/areas/scivis/volren/datasets/datasets.html">here</a>.
</p>
</div>
<div class="c2">
<p>
 I&#8217;m working on adding support for these, and also image sequences ( 3D voxel resolution = image X * image Y * number of frames), in Blender&#8217;s voxeldata texture, which should be interesting for people wanting to load up medical data. A preview animation is on <a href="http://vimeo.com/3772546">vimeo</a>.</p>
</div>
<p><br style="clear: both" /></p>
<p><a href="http://mke3.net/projects/bpython/voxels_to_verts.blend"><img src="http://mke3.net/_gfx/etc/voxels_verts.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/voxels-vertices/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Radiohead / point density</title>
		<link>http://mattebb.com/weblog/radiohead-point-density/</link>
		<comments>http://mattebb.com/weblog/radiohead-point-density/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 01:00:05 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Art & Design]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/radiohead-point-density/</guid>
		<description><![CDATA[I&#8217;d heard before about Radiohead&#8217;s House of Cards video, made entirely from 3D laser scan data. Yesterday I found out that some of the point cloud data files were made available to download from Google under a creative commons license. So I did a little test reading it into Blender with a quickie Python script, [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>
I&#8217;d heard before about Radiohead&#8217;s <a href="http://code.google.com/creative/radiohead/">House of Cards</a> video, made entirely from 3D laser scan data. Yesterday I found out that some of the point cloud data files were made available to <a href="http://code.google.com/p/radiohead/">download from Google</a> under a creative commons license.
</p>
</div>
<div class="c2">
<p>
So I did a little test reading it into Blender with a quickie Python script, and rendered it as a volume, using the &#8216;point density&#8217; texture, in the sim_physics branch. You can <a href="http://mke3.net/projects/tests/hoc_pointcloud.blend"><br />
download the .blend file</a> including the script.
</p>
</div>
<p><br style="clear: both" /></p>
<div style="margin-left: auto; margin-right: auto;">
<object width="455" height="256"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2785353&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=2785353&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="455" height="256"></embed></object>
</div>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/radiohead-point-density/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>volume rendering updates</title>
		<link>http://mattebb.com/weblog/volume-updates/</link>
		<comments>http://mattebb.com/weblog/volume-updates/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 10:24:16 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Art & Design]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/volume-updates/</guid>
		<description><![CDATA[Luckily, I&#8217;ve been able to work full time for a while on the volume rendering code, as part of budgeted R&#038;D time at work. Since Monday I&#8217;ve made a lot of progress, and have been committing code to the &#8216;sim_physics&#8216; SVN branch, maintained by Daniel Genrich. I&#8217;m actually quite surprised at how quickly I&#8217;ve managed [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>
Luckily, I&#8217;ve been able to work full time for a while on the volume rendering code, as part of budgeted R&#038;D time at work. Since Monday I&#8217;ve made a lot of progress, and have been committing code to the &#8216;<a href="http://projects.blender.org/plugins/scmsvn/viewcvs.php/branches/sim_physics/?root=bf-blender">sim_physics</a>&#8216; SVN branch, maintained by <a href="http://www.wxtools.com/wp/">Daniel Genrich</a>.
</p>
</div>
<div class="c2">
<p>
I&#8217;m actually quite surprised at how quickly I&#8217;ve managed to come this far, I guess I can attribute it partially to the clear design of <a href="http://www.pbrt.org">pbrt</a>, which I&#8217;ve used as reference for the fundamental structure. So far, I&#8217;m getting close to having it at a reasonably well integrated state with the rest of the renderer. Perhaps tomorrow it&#8217;ll be at a state where particles could be rendered by just instancing spheres at each point.</p>
</div>
<p><br style="clear: both" /></p>
<p>Some of the changes so far include:</p>
<ul>
<li>Fixed the shading bug I mentioned earlier, due to a limitation in the raytrace engine (<a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_shaded_old.png">before</a>, <a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_shaded_correct.png">after</a>). Now shading works quite nicely.</li>
<li>Added colour emission &#8211; as well as the overall &#8216;Emit:&#8217; slider to control<br />
overall emission strength, there&#8217;s also a colour swatch for the volume to emit<br />
that colour. This can also be textured, using &#8216;Emit Col&#8217; in the map to panel.</li>
<li>Cleaned up and clarified volume texture mapping, fixing the offsets and scaling, and adding &#8216;Local&#8217; (similar to Orco) mapping, alongside Object and Global coordinates</li>
<li>Added colour absorption &#8211; rather than a single absorption value to control how much light is absorbed as it travels through a volume, there&#8217;s now an additional absorption colour. This is used to absorb different R/G/B components of light at different amounts. For example, if a white light shines on a volume which absorbs green and blue<br />
components, the volume will appear red. This colour can also be textured.</li>
<li>Refactored the previous volume texturing code to be more efficient</li>
<li>Worked on integrating volume materials into the rest of the renderer. Now other objects (and sky) correctly render if they&#8217;re partially inside or behind a volume. Previously all other objects were ignored, and volumes just rendered on black. The colour of surfaces inside or behind the volume gets correctly attenuated by the density of the volume in between &#8211; i.e. thicker volumes will block the light coming from behind.</li>
<li>Enabled rendering with the camera inside the volume.</li>
</ul>
<table>
<tr>
<td style="vertical-align: top;">
<a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_shaded_correct.png"><img src="http://mke3.net/_gfx/etc/vol_shaded_correct_s.jpg" /></a><br />
 <span class="caption">Correct shading and absorption</span>
</td>
<td style="vertical-align: top;">
<a href="http://mke3.net/blender/devel/rendering/volumetrics/shaded_2lamps.png"><img src="http://mke3.net/_gfx/etc/vol_shaded_2lamps_s.jpg" /></a><br />
 <span class="caption">Shading with two lamps</span>
</td>
<td style="vertical-align: top;">
<a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_shaded_clouds.mov"><img src="http://mke3.net/_gfx/etc/vol_shaded_clouds_s.jpg" /></a><br />
 <span class="caption">Shading within clouds density texture</span>
</td>
</tr>
<tr>
<td style="vertical-align: top;">
<a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_col_emit.mov"><img src="http://mke3.net/_gfx/etc/vol_col_emit_s.jpg" /></a><br />
 <span class="caption">Textured (with colour ramp) emission colour</span>
</td>
<td style="vertical-align: top;">
<a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_col_absorption.jpg"><img src="http://mke3.net/_gfx/etc/vol_col_absorption_s.jpg" /></a><br />
 <span class="caption">Example of various absorption colours</span>
</td>
<td style="vertical-align: top;">
<a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_absorb_textured.png"><img src="http://mke3.net/_gfx/etc/vol_absorb_textured_s.jpg" /></a><br />
 <span class="caption">Textured absorption colour</span>
</td>
</tr>
<tr>
<td style="vertical-align: top;">
<a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_inside_behind.png"><img src="http://mke3.net/_gfx/etc/vol_inside_behind_s.jpg" /></a><br />
 <span class="caption">Objects and sky inside and behind volume</span>
</td>
<td style="vertical-align: top;">
<a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_shaded_suzanne.png"><img src="http://mke3.net/_gfx/etc/vol_shaded_suzanne_s.jpg" /></a><br />
 <span class="caption">Shaded concave volume</span>
</td>
<td style="vertical-align: top;">
<a href="http://mke3.net/blender/devel/rendering/volumetrics/clouds_sky.mov"><img src="http://mke3.net/_gfx/etc/vol_clouds_inside_s.jpg" /></a><br />
 <span class="caption">Camera passing through a volume</span>
</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/volume-updates/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
<enclosure url="http://mke3.net/blender/devel/rendering/volumetrics/vol_shaded_clouds.mov" length="57225" type="video/quicktime" />
<enclosure url="http://mke3.net/blender/devel/rendering/volumetrics/vol_col_emit.mov" length="120279" type="video/quicktime" />
<enclosure url="http://mke3.net/blender/devel/rendering/volumetrics/clouds_sky.mov" length="121129" type="video/quicktime" />
		</item>
		<item>
		<title>Volume Rendering</title>
		<link>http://mattebb.com/weblog/volume-rendering/</link>
		<comments>http://mattebb.com/weblog/volume-rendering/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 00:47:14 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Art & Design]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/volume-rendering/</guid>
		<description><![CDATA[Some of you may be aware of the great work done so far by Raúl Fernández Hernández (&#8220;farsthary&#8220;) concerning volume rendering in Blender. For those not in the know, rendering volumes of participating media as opposed to solid surfaces, has many uses such as realistically rendering smoke, fire, clouds or fog, or even with more [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>
Some of you may be aware of the great work done so far by Raúl Fernández Hernández (&#8220;<a href="http://farsthary.wordpress.com/">farsthary</a>&#8220;) concerning volume rendering in Blender. For those not in the know, rendering volumes of participating media as opposed to solid surfaces, has many uses such as realistically rendering smoke, fire, clouds or fog, or even with more complicated techniques, rendering <a href="http://en.wikipedia.org/wiki/Volume_rendering">volume density data</a> such as MRI scans for medical visualisation.
</p>
</div>
<div class="c2">
<p>
Raúl completed a fair bit already, implementing this in Blender. Living in Cuba, where he doesn&#8217;t enjoy the same kind of connectivity as in many other parts of the world, it&#8217;s been difficult for him to participate in development and share his work. A few weeks ago, he emailed me asking for help with his code, and with maintaining it publicly. I promised I&#8217;d at least have a look at the first patch he was able to release and see what I thought.</p>
</div>
<p><br style="clear: both" /></p>
<p>
In some spare time, I had a go at taking apart his patch. Unfortunately, it became clear that it wasn&#8217;t suitable for immediate inclusion. It was Raúl&#8217;s first time coding in Blender (or perhaps in 3D) and due to this, wasn&#8217;t aware of some of the techniques available to make his life easier, or of how to integrate the code as cleanly as it could or should be. On top of this, working alone without being able to easily communicate with other developers, he&#8217;d been working hard on adding more and more features and options on top of a structure which I think could be done differently and a lot cleaner at a fundamental level. This led to some quite complicated code, and a tricky UI for artists to interact with.</p>
<p>I proposed to Raúl that I start again from scratch, simpler and more cleanly integrated and then merge in what I could later down the track, step by step, to which he was very enthusiastic. He excitedly agreed with my invitation to work closely on integrating things like the simulation work he&#8217;s been doing, once a new structure is well defined. Recently in a few days off from work I sat down and started fresh, based on the approach in <a href="http://pbrt.org/">Physically Based Rendering</a>.</p>
<table>
<tr>
<td><a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_directlighting01.jpg"><img src="http://mke3.net/_gfx/etc/vol_directlighting01_s.jpg" /></a><br />
 <span class="caption">Spot light in constant density volume</span>
</td>
<td><a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_directlighting03.jpg"><img src="http://mke3.net/_gfx/etc/vol_directlighting03_s.jpg" /></a><br />
 <span class="caption">3 point lights in constant density volume</span>
</td>
<td><a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_direct_textured04.jpg"><img src="http://mke3.net/_gfx/etc/vol_direct_textured04_s.jpg" /></a><br />
 <span class="caption">Textured spot light in constant density volume</span>
</td>
</tr>
</table>
<p></p>
<p>So far I&#8217;ve got it working reasonably well with about 90% new code. Unlike before, it&#8217;s following a physically based approach, with a region of constant or variable density, calculating light emission, absorption, and single scattering from lamps. My aim is to get a simple, easier to use version ready, optimised for practical rendering tasks like smoke, fire or clouds. Once this is working perfectly, integrated cleanly and completely, and working in Blender SVN, further down the track we can think about adding some of the less common capabilities like isosurfaces or volume data sets.</p>
<table>
<tr>
<td><a href="http://mke3.net/blender/devel/rendering/volumetrics/tex_03_emissiononly.mov"><img src="http://mke3.net/_gfx/etc/vol_cloud_textured_01_s.jpg" /></a><br />
 <span class="caption">Cloud texture controlling density, lighting from volume emission only</span>
</td>
<td><a href="http://mke3.net/blender/devel/rendering/volumetrics/vol_tex_shaded_3lights.png"><img src="http://mke3.net/_gfx/etc/vol_cloud_textured_02_s.jpg" /></a><br />
 <span class="caption">Cloud texture controlling density, 3 lights with single scattering</span>
</td>
<td><a href="http://mke3.net/blender/devel/rendering/volumetrics/tex_shaded_01.mov"><img src="http://mke3.net/_gfx/etc/vol_blend_textured_01_s.jpg" /></a><br />
 <span class="caption">Spherical blend textures controlling density, directional light with single scattering</span>
</td>
</tr>
</table>
<p></p>
<p>There&#8217;s still a lot to do &#8211; there&#8217;s one remaining bug with single scattering I must try and track down, and then there&#8217;s a lot of integration work to do, calculating alpha, rendering volumes in front of solid surfaces etc. Before too long I&#8217;ll commit this to the newly created &#8216;sim/physics&#8217; SVN branch and work on it in there. I don&#8217;t know how long it will be before Raúl is able to start working on this again too, since he&#8217;s under some <a href="http://farsthary.wordpress.com/2008/09/03/cronicles-from-the-hurricane/">horrible circumstances</a> after hurricane Gustav ravaged Cuba. At least in the near term, I&#8217;ll be able to continue poking away at this in SVN.</p>
<p>Some things on my want-to-do list include:</p>
<ul>
<li>Plenty of optimisations</li>
<li>Adaptive sampling &#8211; step size and/or early termination</li>
<li>Alternative anisotropic phase (scattering) functions such as Mie or Henyey-Greenstein</li>
<li>Wavelength (R/G/B) dependent absorption, so light gets tinted as it travels through a medium</li>
<li>An optimised bounding box or sphere &#8216;volume region&#8217; primitive, which could be much faster than raytracing meshes as is done now</li>
<li>Multiple layers deep ray intersections, to enable concave meshes or volume meshes in front of volume meshes</li>
<li>Rendering Blender&#8217;s particle systems, either by creating spherical &#8216;puffs&#8217; at each particle as Afterburner or PyroCluster do, or perhaps by estimating particle density with a kd-tree or such</li>
</ul>
<p>I hope to be able to provide some more updates on this before too long!</p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/volume-rendering/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
<enclosure url="http://mke3.net/blender/devel/rendering/volumetrics/tex_03_emissiononly.mov" length="219664" type="video/quicktime" />
<enclosure url="http://mke3.net/blender/devel/rendering/volumetrics/tex_shaded_01.mov" length="66254" type="video/quicktime" />
		</item>
		<item>
		<title>Linear Workflow</title>
		<link>http://mattebb.com/weblog/linear-workflow/</link>
		<comments>http://mattebb.com/weblog/linear-workflow/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 02:10:40 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Art & Design]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Miscellaneous Debris]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/linear-workflow/</guid>
		<description><![CDATA[I recently posted on blenderartists.org in response to some questions and misunderstanding about gamma correction and &#8216;linear workflow&#8217; in 3D rendering. I thought I&#8217;d re-post it here, since there are a lot of misconceptions about this topic around. Much of the value of a linear workflow comes with rendering colour textures. But as the name [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>I recently <a href="http://blenderartists.org/forum/showthread.php?t=133170&#038;page=15">posted on blenderartists.org</a> in response to some questions and misunderstanding about gamma correction and &#8216;linear workflow&#8217; in 3D rendering.
</p>
</div>
<div class="c2">
<p>
I thought I&#8217;d re-post it here, since there are a lot of misconceptions about this topic around.
</p>
</div>
<p><br style="clear: both" /></p>
<p>Much of the value of a linear workflow comes with rendering colour textures. But as the name suggests, it&#8217;s a workflow, that has to be kept in mind throughout the entire process.</p>
<p>The issue is that when you make a texture, either painting it in Photoshop to look good on your screen, or as a JPEG from a camera, that image is made to look good <i>under gamma corrected conditions, usually gamma 2.2</i>. So as you paint that texture, you&#8217;re looking at it on a monitor that&#8217;s already gamma 2.2, which is not linear. This is all well and good, displays are already gamma corrected to better fit the range of human vision.</p>
<p>The problem starts though, when you use those colour maps as textures in a renderer. When you&#8217;re doing lighting calculations in a renderer, those take place in a linear colour space. i.e &#8211; add 2x as much light, and it gets 2x brighter. The problem is that your colour textures aren&#8217;t like that if they&#8217;re at gamma 2.2. What&#8217;s double in numerical pixel values in gamma 2.2 is not necessarily twice brighter perceptually. So this breaks the idea of taking brightness information from a colour texture and using it in lighting/shading calculations, especially if you&#8217;re doing multiple light bounces off textured surfaces.</p>
<p>So what a linear workflow means, is that you take those colour textures, and convert them back to linear space before rendering, then you gamma correct/tonemap the final result back to gamma space (for viewing on a monitor). Now the lighting calculations work accurately, however it does change things &#8211; because the textures get darkened in the midtones the image can look darker, so you need to change the lighting setup, etc. etc. Hence, workflow &#8211; it&#8217;s something you need to have on all throughout the process, not just applying gamma at the end.</p>
<p><img src="http://mke3.net/blender/devel/rendering/linear02.png" style="float: right; margin-left: 20px;" />I wrote some code a little while ago that did it all automatically in the shading process, applying inverse gamma correction for colour textures before rendering, then corrected back to gamma 2.2 afterwards. After adjusting lights from old scenes to have the same appearance, it gave some nice results. It seemed to bring out a lot more detail in the textures, which got washed out before (left is normal, right is with linear workflow). It&#8217;s not finished though, it also needs to adjust the lights in the preview render, and inverse gamma correct colour swatches too so the flat colours you pick in the UI are also linear.</p>
<p>Further references:</p>
<ul>
<li><a href="http://www.gijsdezwart.nl/tutorials.php">http://www.gijsdezwart.nl/tutorials.php</a></li>
<li><a href="http://www.xsi-blog.com/archives/133">http://www.xsi-blog.com/archives/133</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/linear-workflow/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Noise constraint</title>
		<link>http://mattebb.com/weblog/post-w-table/</link>
		<comments>http://mattebb.com/weblog/post-w-table/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 22:29:29 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/post-w-table/</guid>
		<description><![CDATA[Since there&#8217;s no analogue built in to Blender at the present, during our last animation project, I knocked together a very simple PyConstraint: Noise. It&#8217;s made to fulfill similar tasks as the Noise controller in 3DS Max, giving random (yet deterministic) animation to an object. We used it for things like like applying it to [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>Since there&#8217;s no analogue built in to Blender at the present, during our last animation project, I knocked together a very simple PyConstraint: Noise. It&#8217;s made to fulfill similar tasks as the Noise controller in 3DS Max, giving random (yet deterministic) animation to an object. We used it for things like like applying it to a lamp for randomised shadow flicker from a candle flame, or on a large scale, subtle swaying movements of a ship on the ocean.
</p>
</div>
<div class="c2">
<p>
There&#8217;s a thread with instructions on <a href="http://blenderartists.org/forum/showthread.php?t=126223">blenderartists.org</a>, and the goodies themselves here:</p>
<ul>
<li><a href="http://mke3.net/projects/bpython/constraint_noise.mov">Demo movie</a></li>
<li><a href="http://mke3.net/projects/bpython/constraint_noise.blend">Demo .blend file</a></li>
<li><a href="http://mke3.net/projects/bpython/Constraint_Noise-1.0.py">The script itself</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/post-w-table/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
<enclosure url="http://mke3.net/projects/bpython/constraint_noise.mov" length="139757" type="video/quicktime" />
		</item>
		<item>
		<title>Another delayed update</title>
		<link>http://mattebb.com/weblog/another-update/</link>
		<comments>http://mattebb.com/weblog/another-update/#comments</comments>
		<pubDate>Thu, 22 May 2008 23:47:22 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Miscellaneous Debris]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/another-update/</guid>
		<description><![CDATA[Things have been busy lately. There have been plenty of &#8216;real life&#8217; things to take my attention from this site &#8211; some of them fun, like moving into a new place with Kat, some of them not very fun at all like having the place broken into and robbed a month later. Work&#8217;s been spread [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>
Things have been busy lately. There have been plenty of &#8216;real life&#8217; things to take my attention from this site &#8211; some of them fun, like moving into a new place with Kat, some of them not very fun at all like having the place broken into and robbed a month later.</p>
<p>Work&#8217;s been spread on thick. Last weekend, we reached the finish line of a project we&#8217;ve had on over the last 2-3 months, a 2 1/2 minute short film that we&#8217;ve been creating for a production studio in the US. The work has been very fun and artistically interesting, the clients have been great, and we&#8217;ve all learnt a lot in the process. The only down side for me personally has been the amount of overtime I&#8217;ve put in to try to keep it looking nice, after shouldering most of the responsibility for the texturing, shading, lighting, comping, some of which has been kinda <a href="http://mke3.net/rt/nodes_s35.png">complicated</a>. I really can&#8217;t complain at all though, it&#8217;s definitely my favourite kind of work. The public release should be quite soon, so keep an eye out!</p>
</div>
<div class="c2">
<p>
As part of the project, alongside the many hours of artistic work, we&#8217;ve also done some development work. A few of the shots required an ocean environment, and since the existing methods of displacing clouds textures weren&#8217;t really adequate, we contracted <a href="http://www.blender.ir/">Hamed Zaghaghi</a> to develop ocean simulation tools in Blender. He&#8217;s done an excellent job, integrating a new &#8216;ocean&#8217; procedural texture, which can be used not only as a displacement height map, but also with various shading modes for layers such as foam masks. We plan to get a patch out early net week.</p>
<p>Another sequence of shots involved an old, thick lighthouse lens. In many of the reference photos we looked at, they showed quite strong chromatic dispersion, so as a side project I started to work on raytraced dispersion rendering in Blender&#8217;s internal renderer. After getting a bit stuck mid-way, I had a look through <a href="http://www.yafray.org">yafray</a>&#8216;s source code, and found some spectrum code that was just what I needed, and it integrated nicely. Thankyou yafray, and thankyou open source! I&#8217;ll try and get a patch for this together soon enough, too.</p>
</p>
</div>
<p><br style="clear: both" /></p>
<table>
<tr>
<td><a href="http://www.promotionstudios.com/files/ocean/ocean7.mov"><img src="http://mke3.net/_gfx/etc/ocean_s.jpg" alt="Ocean sim" /></a></td>
<td><a href="http://mke3.net/blender/devel/raytracing/dispersion06.jpg"><img src="http://mke3.net/_gfx/etc/dispersion_s.jpg" alt="Raytraced dispersion" /></a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/another-update/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
<enclosure url="http://www.promotionstudios.com/files/ocean/ocean7.mov" length="230296" type="video/quicktime" />
		</item>
		<item>
		<title>some new rendering things</title>
		<link>http://mattebb.com/weblog/some-new-rendering-things/</link>
		<comments>http://mattebb.com/weblog/some-new-rendering-things/#comments</comments>
		<pubDate>Wed, 21 Nov 2007 13:00:42 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/some-new-rendering-things/</guid>
		<description><![CDATA[Had some r&#038;d time lately, at work and at home. Here&#8217;s what I&#8217;m up to: I&#8217;d like to get the node system hooked up to raytracing, allowing one to do advanced shading techniques but without being forced to do it with the dodgy &#8216;mixing materials&#8217; method. As a starting point, I&#8217;ve made a reflection node [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>Had some r&#038;d time lately, at work and at home. Here&#8217;s what I&#8217;m up to:</p>
<p>I&#8217;d like to get the node system hooked up to raytracing, allowing one to do advanced shading techniques but without being forced to do it with the dodgy &#8216;mixing materials&#8217; method. As a starting point, I&#8217;ve made a reflection node &#8211; the bonus is that the node system makes it a lot easier to texturise inputs. Thanks to some hints from Alfredo de Greef, I&#8217;ve added an additional input to rotate the anisotropic direction (with black being 0&deg; and white being 360&deg;). This can give some nice effects:</p>
<ul>
<li><a href="http://mke3.net/blender/devel/nodes/refl_radial-h264.mov">Radial blend texture</a> (<a href="http://mke3.net/blender/devel/nodes/refl_radial-nodes.png">node setup</a>)</li>
<li><a href="http://mke3.net/blender/devel/nodes/refl_spun-h264.mov">Spun-brushed steel</a> (node setup same as above but using <a href="http://mke3.net/blender/devel/nodes/manyspin.png">this texture</a> instead)</li>
<li><a href="http://mke3.net/blender/devel/nodes/reflnode_carbonfibre-h264.mov">Carbon fibre</a> (<a href="http://mke3.net/blender/devel/nodes/refl_carbonfibre-nodes.png">node setup</a>)</li>
<li><a href="http://mke3.net/blender/devel/nodes/refl_sphere_weird-h264.mov">Weird sphere</a> (using a clouds texture for aniso rotation)</li>
</ul>
<p>I&#8217;d also like to include a refract node, an AO node, and/or also a general purpose raytrace node that takes a •vector and •solid angle as input, and gives as output: •whether it intersected something (average of samples in solid angle) •distance to intersection, •shaded colour of intersected face, etc.</p>
</div>
<div class="c2">
<p>
At the studio we might possibly be doing a project that would involve vfx/image based lighting. It&#8217;s Christmas soon and there are plenty of shiny balls around, so I got a nice one and we&#8217;ve started making some <a href="http://mke3.net/blender/etc/stairs_sm.hdr" title="yes that's me behind the camera">HDRI</a> <a href="http://mke3.net/blender/etc/stairs_angmap.jpg">light probes</a>. Blender&#8217;s brute force method of doing image based lighting by evenly sampling the hemisphere in AO <a href="http://mke3.net/blender/etc/stairs_test.png">gives</a> <a href="http://mke3.net/rt/roof_plant_test.png">reasonable</a> <a href="http://mke3.net/rt/studio_test.jpg">results</a>, but it&#8217;s too slow for animation.</p>
<p>I&#8217;ve been looking into a technique originally devised for realtime graphics, based on the paper <a href="http://www1.cs.columbia.edu/~ravir/papers/envmap/">An Efficient Representation for Irradiance Environment Maps</a>. It works by storing the irradiance in the map in spherical harmonics coefficients and only supports lambert diffuse shading, but it&#8217;s extremely fast, and can give quite nice results especially combined with it in an AO source, or even just humble buffer shadows. I&#8217;ve done some tests so far with Paul Debevec&#8217;s <a href="http://www.debevec.org/Probes/">free light probes</a></p>
<ul>
<li><a href="http://mke3.net/blender/devel/rendering/diffuse_sh/dsh_beach.png">Beach</a></li>
<li><a href="http://mke3.net/blender/devel/rendering/diffuse_sh/dsh_campus.png">Campus</a></li>
<li><a href="http://mke3.net/blender/devel/rendering/diffuse_sh/dsh_grace.png">Grace Cathedral</a></li>
<li><a href="http://mke3.net/blender/devel/rendering/diffuse_sh/dsh_stairs.png">and the stairwell at work ;)</a></li>
<p>Rather than shoehorning it into AO, I&#8217;ve so far got a separate Image Based Lighting panel with this in it, and perhaps some other kinds of importance sampling methods later on.</p>
</div>
<p><br style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/some-new-rendering-things/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
<enclosure url="http://mke3.net/blender/devel/nodes/refl_radial-h264.mov" length="261056" type="video/quicktime" />
<enclosure url="http://mke3.net/blender/devel/nodes/refl_spun-h264.mov" length="166981" type="video/quicktime" />
<enclosure url="http://mke3.net/blender/devel/nodes/reflnode_carbonfibre-h264.mov" length="28312" type="video/quicktime" />
<enclosure url="http://mke3.net/blender/devel/nodes/refl_sphere_weird-h264.mov" length="775936" type="video/quicktime" />
		</item>
		<item>
		<title>gathering dust</title>
		<link>http://mattebb.com/weblog/gathering-dust/</link>
		<comments>http://mattebb.com/weblog/gathering-dust/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 14:13:30 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Art & Design]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Miscellaneous Debris]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/gathering-dust/</guid>
		<description><![CDATA[Three months since the last post here, I think that deserves either an award or a slap on the wrist. Things have been busy, and I&#8217;m sorry to say I&#8217;ve been much more inclined to spend my free time in other ways than writing here. Work has been through alternating bursts of slow r&#038;d time [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>Three months since the last post here, I think that deserves either an award or a slap on the wrist. Things have been busy, and I&#8217;m sorry to say I&#8217;ve been much more inclined to spend my free time in other ways than writing here.</p>
<p>Work has been through alternating bursts of slow r&#038;d time and busy projects, the latter being where I find myself at the moment. We&#8217;re using Blender more and more, currently we&#8217;re doing an immensely complex animation of around 12,000 frames, without much time to do it in. It&#8217;s the first project of this scale that we&#8217;ve done in Blender as a team, and although it&#8217;s a lot to manage and keep track of, it&#8217;s been pretty good.
</p>
</div>
<div class="c2">
<p>Blender&#8217;s linked library / group / scene / action system has been great, and much easier than they were doing previously for similar projects in Max. I&#8217;m keeping a master scene file that contains everything, however most of the models/rigs in there are coming in from linked groups in external files, that any of the others can add to and update. Not only does this keep things easy to modify and ripple through, but it allows us to distribute the workload well between all of us by segmenting the files finely. I&#8217;m afraid I can&#8217;t give much more detailed info at this moment, perhaps some time in the future.</p>
</p>
</div>
<p><br style="clear: both" /></p>
<p>The work I was doing on glossy reflections/refractions was finished a while ago, the end product being much more robust and advanced than in that last post, and also including all sorts of extra nice things like using QMC sampling for ray shadows and ambient occlusion. These changes are now officially in Blender&#8217;s SVN repository and will be in the next major release, however I&#8217;ve already been making use of it extensively. This not overly interesting <a href="http://australiancreative.com.au/index.cfm?section=gallery_display&#038;galleryid=203&#038;offset=1">illustration I did for a magazine cover</a> made it into the Australian Creative magazine gallery and  uses a lot of anisotropic blurry reflection.</p>
<p>I made some nice docs online here: <a href="http://www.blender.org/development/current-projects/changes-since-244/glossy-reflectionrefraction/">Glossy Reflection/Refraction</a> / <a href="http://www.blender.org/development/current-projects/changes-since-244/raytraced-soft-shadows/">Raytraced Soft Shadows</a> / <a href="http://www.blender.org/development/current-projects/changes-since-244/qmc-sampling/">QMC Sampling</a>. Thanks again to Brecht van Lommel and Alfredo de Greef who both gave me some great guidance and help along the way, and I look forward to doing more work in this area in the future. A few other changes I&#8217;ve made recently have been <a href="http://lists.blender.org/pipermail/bf-blender-cvs/2007-September/011282.html">extra lamp falloff options, including custom curve</a>, <a href="http://lists.blender.org/pipermail/bf-blender-cvs/2007-August/010999.html">enabling different curve tilt interpolation types</a>, and I&#8217;ve also <a href="http://lists.blender.org/pipermail/bf-blender-cvs/2007-July/010400.html">committed a bunch of ex-tuhopuu UI related work</a> to the &#8216;imagebrowser&#8217; branch, to work on separately in there until I can find the time to finish it up and bring to the main Blender SVN trunk.</p>
<p>But life goes on&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/gathering-dust/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gloss</title>
		<link>http://mattebb.com/weblog/gloss/</link>
		<comments>http://mattebb.com/weblog/gloss/#comments</comments>
		<pubDate>Tue, 12 Jun 2007 13:29:30 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Art & Design]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/gloss/</guid>
		<description><![CDATA[Previously, I&#8217;ve grumpily complained that there aren&#8217;t enough people interested in working on Blender&#8217;s internal renderer, and so it was only fair that I put my money where my mouth is. I mentioned I&#8217;d been doing some coding recently, and this is one of the products of that time: blurry/glossy reflections and refractions in Blender&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>
Previously, I&#8217;ve grumpily complained that there aren&#8217;t enough people interested in working on Blender&#8217;s internal renderer, and so it was only fair that I put my money where my mouth is. I mentioned I&#8217;d been doing some coding recently, and this is one of the products of that time: blurry/glossy reflections and refractions in Blender&#8217;s internal raytracer. It works similarly in concept to yafray&#8217;s &#8216;conetrace&#8217;, sampling a cone of rays around the current pixel to get an averaged, blurry result. The sampling is using a quasi-monte carlo Halton sequence, which Brecht van Lommel previously converted into C code in an old experiment of his, and which he gave me a lot of valuable help with &#8211; thanks a bunch, Brecht!
</p>
</div>
<div class="c2">
<p>This has been quite an interesting (though sometimes frustrating) learning experience for me, diving into a new area of Blender&#8217;s source code for me, and learning about many concepts I was previously unfamiliar with. What I&#8217;ve got so far probably isn&#8217;t perfect, but I&#8217;m very happy with the progress made so far. I&#8217;ll post again soon about some of the process and things I&#8217;ve learned so far, hopefully in a way that people not used to reading technical SIGGRAPH papers will get some value from. But for now, here are some pretty pictures, and a <a href="https://projects.blender.org/tracker/index.php?func=detail&#038;aid=6830&#038;group_id=9&#038;atid=127">patch</a>! There&#8217;s also a bit of discussion in this <a href="http://blenderartists.org/forum/showthread.php?t=98100">thread on blenderartists.org</a>, too.</p>
</div>
<p><br style="clear: both" /></p>
<table>
<tr>
<td><a href="/blender/devel/raytracing/goldsuzgloss.jpg"><img src="/blender/devel/raytracing/goldsuzgloss_s.jpg" alt="Blurry reflections" /></a></td>
<td><a href="/blender/devel/raytracing/glasssuz.jpg"><img src="/blender/devel/raytracing/glasssuz_s.jpg" alt="Blurry refractions" /></a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/gloss/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Exporting Blender&#8217;s 3D Curves</title>
		<link>http://mattebb.com/weblog/exporting-blenders-3d-curves/</link>
		<comments>http://mattebb.com/weblog/exporting-blenders-3d-curves/#comments</comments>
		<pubDate>Sun, 22 Apr 2007 09:55:59 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/exporting-blenders-3d-curves/</guid>
		<description><![CDATA[Over the last few weeks at the studio I&#8217;ve been working in Blender alongside 3DS Max and I&#8217;ve needed to export 3D bézier curve (spline) data between the two apps. There were a few occasions, such as exporting a logo that I&#8217;d cleaned up in Blender from a 2D SVG, and also some 3D animation [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>
Over the last few weeks at the studio I&#8217;ve been working in Blender alongside 3DS Max and I&#8217;ve needed to export 3D bézier curve (spline) data between the two apps. There were a few occasions, such as exporting a logo that I&#8217;d cleaned up in Blender from a 2D SVG, and also some 3D animation paths that I&#8217;d been working on. While there are a lot of options for exporting other data such as meshes, there&#8217;s very little around to facilitate transferring 3D curves between packages.
</p>
</div>
<div class="c2">
<p>Wavefront OBJ is supposed to support curves as part of the spec, but functionality is extremely limited, and it&#8217;s so rarely used that I can&#8217;t find any apps or plugins that actually bother to support this area of the spec. I read somewhere that Autodesk&#8217;s flagship format FBX is supposed to include curve data, but in my tests, neither Max or Maya would export curves to FBX anyway, so it looked like they just didn&#8217;t bother support it. This makes it a no-go regardless of whether the up-and-coming <a href="http://blenderartists.org/forum/showthread.php?t=92082">FBX exporter for Blender</a> supports it or not.
</p>
</div>
<p><br style="clear: both" /></p>
<p>
So with no ready made options, I tried an idea &#8211; I read up on MaxScript and made a Python script for Blender that takes the curve data and and uses it to generate a MaxScript, that when run inside 3DS Max will generate the same curve using the MaxScript API. There are a few advantages to this, there&#8217;s a very fine level of control and you can easily export every feature that&#8217;s supported by both Blender and Max, without worrying if an intermediary format supports those specific features too. However there are drawbacks &#8211; it&#8217;s a pain to use since you have to open up and run a MaxScript each time, rather than just importing a file. I&#8217;d rather support an existing standard format, so it&#8217;s more widely useful for other people than just me.
</p>
<p>
I&#8217;d been using the <a href="http://www.feelingsoftware.com/content/view/65/79/lang,en/">ColladaMax</a> plugin (based on the open source <a href="http://www.feelingsoftware.com/content/view/62/76/lang,en/">FCollada</a> library) previously to transfer meshes and cameras between Max and Blender, and after doing some more research it turns out that the <a href="http://www.collada.org/">COLLADA</a> format supports 3D béziers, as does ColladaMax. Neither of Blender&#8217;s two COLLADA exporters do though, and they seemed too complex for me to add curve support to them, so I grabbed the spec and threw together my own simple exporter for curves only. One very annoying issue is that the ColladaMax plugin (and I presume the FCollada library) expects the data formatted in a way that&#8217;s <a href="http://www.feelingsoftware.com/component/option,com_smf/Itemid,86/topic,316.msg1041">incompatible with the spec</a>. Since my goal here is practicality rather than technical purity, this means that rather than it being a generalised COLLADA format exporter, I have to tailor it to FCollada&#8217;s non-standard idiosyncracies. I hope the library is updated to conform to the standard in the future, but going by the devs&#8217; response on their forum it doesn&#8217;t look like that will happen any time soon. On the positive side, there&#8217;s a good chance that my exported COLLADA curves will work with the ColladaMaya plugin as well, opening up another application to work with. If anyone can test this and confirm or deny, that would be very interesting information.
</p>
<p>
Anyway, the script is available here: <a href="http://mke3.net/projects/bpython/export_curves_fcollada-1.1.py">export_curves_fcollada-1.1.py</a>. It&#8217;s my first exporter and I didn&#8217;t use any fancy XML libraries, so it may be rough (although it gets the job done fine). If any Python gurus have ideas on how to improve it, I&#8217;d appreciate some hints! I hope this post might help anyone in the same situation as me, in the ever-perilous business of interoperability.</p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/exporting-blenders-3d-curves/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Animated modifiers</title>
		<link>http://mattebb.com/weblog/animated-modifiers/</link>
		<comments>http://mattebb.com/weblog/animated-modifiers/#comments</comments>
		<pubDate>Thu, 12 Apr 2007 14:48:06 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/animated-modifiers/</guid>
		<description><![CDATA[Unfortunately, ever since their inception, modifiers in Blender haven&#8217;t let you animate their settings. This is a real pain, and a motivational hurdle against people making lots of nice new modifiers like &#8216;bend&#8217;, &#8216;twist&#8217;, &#8216;taper&#8217;, etc. I really hope this gets addressed soon, but until then, here&#8217;s an ugly workaround which will let you animate [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>
Unfortunately, ever since their inception, modifiers in Blender haven&#8217;t let you animate their settings. This is a real pain, and a motivational hurdle against people making lots of nice new modifiers like &#8216;bend&#8217;, &#8216;twist&#8217;, &#8216;taper&#8217;, etc. I really hope this gets addressed soon, but until then, here&#8217;s an ugly workaround which will let you animate modifiers using the bPython API.
</p>
</div>
<div class="c2">
<p>Basically, you need to create a dummy object that you will animate in a simple manner just so you have an editable Ipo animation curve. From there, use a scriptlink set to onFrameChange to read that Ipo and manually set the modifier paramater you&#8217;re interested in to the curve&#8217;s value at that point in time. You can download my <a href="/blender/etc/modifipo.blend.zip">demo .blend file</a> to see how this works (remember to enable script links in the scripts button tab), or check the demo video below to see an animated Decimate modifier.
</p>
</div>
<p><br style="clear: both" /><br />
<a href="/blender/etc/modif_ipo-h264.mov"><img src="/_gfx/etc/modif_ipo.jpg" alt="Animated Decimate modifier" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/animated-modifiers/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Simple parametric objects</title>
		<link>http://mattebb.com/weblog/simple-parametric-objects/</link>
		<comments>http://mattebb.com/weblog/simple-parametric-objects/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 14:03:01 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blender User Interface]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://mke3.net/weblog/simple-parametric-objects/</guid>
		<description><![CDATA[A while ago, I did some experiments that I didn&#8217;t really show anyone, a proof of concept for generating non-destructive primitive objects through the modifier stack. One of the things I liked in recent dabblings with 3DS Max is having flexibility and realtime feedback when editing primitive objects, and I thought I&#8217;d see if I [...]]]></description>
			<content:encoded><![CDATA[<div class="c1">
<p>
A while ago, I did some experiments that I didn&#8217;t really show anyone, a proof of concept for generating non-destructive primitive objects through the modifier stack. One of the things I liked in recent dabblings with 3DS Max is having flexibility and realtime feedback when editing primitive objects, and I thought I&#8217;d see if I could make it work in some way in Blender.
</p>
</div>
<div class="c2">
<p>The issue of being able to see and tweak the effects of what you&#8217;re doing is one of the things that frustrates me most in Blender and I had a bit of a <a href="http://video.google.com/videoplay?docid=-1021270522578100101&#038;hl=en">rant about it</a> at last year&#8217;s Blender Conference. The topic came up on the <a href="http://projects.blender.org/mailman/listinfo/bf-funboard">bf-funboard</a> list today, so I might as well share it here too:
</p>
</div>
<p><br style="clear: both" /> </p>
<p>It&#8217;s basically using a modifier at the bottom of the stack to create geometry, which you could then just apply to edit the mesh directly, though that&#8217;s not always necessary. This is a bit similar to how Max and Cinema 4D work. When you add an object, you can still manipulate dimensions, resolution, other parameters as a whole. Then if you want to edit it manually, you convert it to an editable mesh with a click.</p>
<table>
<tr>
<td><a href="/blender/etc/parametric_modifier-h264.mov"><img src="/_gfx/etc/param_mod_grid.png" alt="Grid" /></a></td>
<td><a href="/blender/etc/parametric_modifier02-h264.mov"><img src="/_gfx/etc/param_mod_star.png" alt="Star" /></a></td>
</tr>
</table>
<p></p>
<p>Above are some screencasts of what I did in Blender. Obviously it&#8217;s simple and rough, and if developed further, one could do things to clean it up like disable those generator modifiers from appearing in the menu, change the add object code to apply the generator modifiers automatically, prevent them from being moved up and down the stack, and perhaps add some code that upon pressing Tab, would give you the option to apply that modifier and just convert it to a mesh so you can edit it. In any case, this could serve as some kind of inspiration for something nice in the future&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://mattebb.com/weblog/simple-parametric-objects/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
	</channel>
</rss>

