<?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>Ignacio Castaño</title>
	<atom:link href="http://www.ludicon.com/castano/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ludicon.com/castano/blog</link>
	<description>I&#039;d rather be a forest than a street.</description>
	<lastBuildDate>Thu, 19 Jan 2012 17:24:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Irradiance Caching &#8211; Part 1</title>
		<link>http://www.ludicon.com/castano/blog/2011/07/irradiance-caching-part-1/</link>
		<comments>http://www.ludicon.com/castano/blog/2011/07/irradiance-caching-part-1/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 08:41:19 +0000</pubDate>
		<dc:creator>Ignacio Castaño</dc:creator>
				<category><![CDATA[Graphics]]></category>

		<guid isPermaLink="false">http://www.ludicon.com/castano/blog/?p=551</guid>
		<description><![CDATA[I finally finished writing the next article about the lightmap rendering tech that I did for The Witness. This one is about irradiance caching, and in particular I describe how to estimate irradiance gradients when the irradiance is sampled using a hemicube distribution. I&#8217;m afraid the article is a bit too specialized and I suspect [...]]]></description>
			<content:encoded><![CDATA[<p>I finally finished writing the <a href="http://the-witness.net/news/2011/07/irradiance-caching-part-1/">next article about the lightmap rendering tech</a> that I did for The Witness. This one is about irradiance caching, and in particular I describe how to estimate irradiance gradients when the irradiance is sampled using a hemicube distribution. I&#8217;m afraid the article is a bit too specialized and I suspect it will only be useful to those that are trying to solve this particular problem, but I think it&#8217;s good to have this documented anyway.</p>
<p>This time around we are trying something new and we are cross-posting it on <a href="http://altdevblogaday.com/2011/07/14/irradiance-caching-part-1/">#AltDevBlogADay</a>. It seems to me that most of the subscribers to The Witness blog are non-programmers, so this way it may reach a wider audience. Hopefully this will also encourage me to post more regularly!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ludicon.com/castano/blog/2011/07/irradiance-caching-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We are hiring!</title>
		<link>http://www.ludicon.com/castano/blog/2011/04/we-are-hiring/</link>
		<comments>http://www.ludicon.com/castano/blog/2011/04/we-are-hiring/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 23:02:20 +0000</pubDate>
		<dc:creator>Ignacio Castaño</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[witness]]></category>

		<guid isPermaLink="false">http://www.ludicon.com/castano/blog/?p=492</guid>
		<description><![CDATA[If you are following The Witness blog you may have heard that we are looking for programmers, if not, go check it out. I&#8217;ve been working on The Witness for a bit more than a year. So, I thought it might be a good time to write a bit about my experience so far, in [...]]]></description>
			<content:encoded><![CDATA[<p>If you are following <a href="http://the-witness.net/news/">The Witness</a> blog you may have heard that we are looking for programmers, if not, <a href="http://the-witness.net/news/?p=815">go check it out</a>.</p>
<p><img src="http://www.ludicon.com/castano/blog/wp-content/uploads/2011/04/windmill.png" alt="" title="windmill" width="512" height="288" class="alignnone size-full wp-image-537" /><br />
I&#8217;ve been working on The Witness for a bit more than a year. So, I thought it might be a good time to write a bit about my experience so far, in the hope of attracting some talent to join us.</p>
<p><span id="more-492"></span></p>
<p>I have to admit that I had many doubts about coming to work at Thekla. I had a comfortable and stable job at NVIDIA, where I was held in high regard. The prospect of joining a small indie studio certainly seemed a lot more uncertain. However, Jon&#8217;s confidence in the game he was designing, and in his ability to support a small team during its development was very reassuring.</p>
<p>Work conditions at Thekla match or exceed those at my previous employments. Compensation is competitive and the work environment is extremely flexible. Jon has very high respect for our time and personal needs, I&#8217;m sure he would go an extra mile to make sure you are satisfied as well. There are also unusual perks that you would not get anywhere else in the industry.</p>
<p>Not only the benefits are great, but I in addition to that, I get to work on the stuff that I really enjoy. That&#8217;s not just the global illumination implementation that <a href="http://www.ludicon.com/castano/blog/2010/09/hemicube-rendering-and-integration/">I&#8217;ve been writing about</a>, but also many other interesting problems in my areas of interest (mesh cleanup, parameterization, optimization, simplification, exporters, image filtering, compression, etc). I get to design our whole production pipeline; how the game, the editor and the modeling tools integrate with each other. I architect and implement most of the engine; its rendering pipeline, the level of detail and streaming systems, the platform abstractions, etc.</p>
<p>I think that we currently have a good foundation. Our main focus has been on quick prototyping. As the codebase became more complex I&#8217;ve tried to get things better organized, while still retaining our quick iteration times. Our builds are blazing fast, and the loading times are still fairly quick. The code is also designed to make it easy to prototype new gameplay elements, and while the rendering code has become more rigid, it&#8217;s still pretty easy to experiment and add new visual effects.</p>
<p>There&#8217;s still plenty of work left to be done, which is why we need an extra hand. The game needs lots of polishing and some optimizations. There are still a few gameplay elements that need to be prototyped, and as we ramp up into production we will probably face unforeseen problems that will need to be addressed. We also plan to port the game to other platforms, some of which might require significant reengineering.</p>
<p>However, for me, this job is not only attractive just because I get to work on cool and challenging problems. The Witness is a game unlike any other. It&#8217;s a unique creative opportunity. It&#8217;s an opportunity to use my skills to make a difference. To make something unique and valuable. To influence people in positive and meaningful ways.</p>
<p>As you can tell, I&#8217;m very excited to be part of it. If you would too, or you just want to learn more, don&#8217;t hesitate to get in touch with us!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ludicon.com/castano/blog/2011/04/we-are-hiring/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Software Patents are Programmer&#8217;s Responsibility</title>
		<link>http://www.ludicon.com/castano/blog/2010/11/software-patents-are-programmers-responsibility/</link>
		<comments>http://www.ludicon.com/castano/blog/2010/11/software-patents-are-programmers-responsibility/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 08:56:43 +0000</pubDate>
		<dc:creator>Ignacio Castaño</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.ludicon.com/castano/blog/?p=409</guid>
		<description><![CDATA[The other day I read this in Dark Shikari&#8217;s blog (one of the developers of x264): Most importantly, stop harassing the guy whose name is on the patent (Lars): he’s just a programmer, not the management or lawyers responsible for filing the patent. This is stupid and unnecessary. I’ve removed the original post because of [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I read this <a href="http://x264dev.multimedia.cx/archives/589">in Dark Shikari&#8217;s blog</a> (one of the developers of x264):</p>
<blockquote><p>
Most importantly, stop harassing the guy whose name is on the patent (Lars): he’s just a programmer, not the management or lawyers responsible for filing the patent.  This is stupid and unnecessary.  I’ve removed the original post because of this; it can be found here for those who want to read it.
</p></blockquote>
<p>I don&#8217;t know much about this particular case, I don&#8217;t know whether Lars came up on his own with the algorithm that is being patented or not, and I&#8217;m not really qualified to discuss that.</p>
<p>But that&#8217;s not what I want to write about. What really struck me from this post is the idea that programmers are not to blame for filing software patents. I think that&#8217;s just wrong.</p>
<p>Lawyers alone cannot create patents, you also need inventors, and being just a programmer does not absolve you of your acts. Let me rephrase that: There would be no patents without inventors willing to file them.</p>
<p>Obviously, corporations provide incentives for employees to file patents, but in most cases it&#8217;s not the actual incentives what motivates people to patent their inventions. It&#8217;s the benefit of being a good corporate employee, not being considered a trouble maker, not loosing opportunities for promotion, not bringing negative attention to yourself, not going against the tide.<br />
<br/><br />
I firmly believe that patents discourage progress and impede the growth of public domain of knowledge. Today patents do not protect the inventor&#8217;s interests, but instead promote anti-competitive practices by corporations. Moreover, most software patents are vague, bogus, or trivial, they do not serve any social purpose other than expanding the patent portfolio of your corporate masters. </p>
<p>You may not agree with all that, but if you do, then don&#8217;t excuse yourself blaming the system.<br />
<br/><br />
During the 5 years that I worked at NVIDIA I constantly came up with algorithms and software ideas that could be patented. I implemented many of them, others I simply outlined.</p>
<p>So, I started a wiki page in which I documented these ideas. The goal was to prevent others from patenting them. I called them anti-patents. I usually came up with a new one every month, sometimes several.</p>
<p>This might seem exaggerated, but when you are designing new hardware features that no one has explored, it&#8217;s very easy to come up with new things to do with it that nobody has done before. I think this is true for almost any field when you are working on the bleeding edge.</p>
<p>Eventually I stopped maintaing the wiki, it was too much work to describe them in detail, and in many cases I considered them trivial. In spite of that I believe that most of them would have been pursued by NVIDIA if I had chosen to allow it.</p>
<p>Over time I ascended in the corporate hierarchy until I became part of a selected group in charge of the design of future GPUs. </p>
<p>I was working with people much more experienced and smarter than me. I didn&#8217;t want to get noticed for causing trouble, but for doing a good work. So, predictably my name ended up in several patent applications.</p>
<p>Today, I deeply regret that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ludicon.com/castano/blog/2010/11/software-patents-are-programmers-responsibility/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Matt&#8217;s Gregory ACC Tessellation Render</title>
		<link>http://www.ludicon.com/castano/blog/2010/10/matts-gregory-acc-tessellation-render/</link>
		<comments>http://www.ludicon.com/castano/blog/2010/10/matts-gregory-acc-tessellation-render/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 22:54:59 +0000</pubDate>
		<dc:creator>Ignacio Castaño</dc:creator>
				<category><![CDATA[Graphics]]></category>

		<guid isPermaLink="false">http://www.ludicon.com/castano/blog/?p=390</guid>
		<description><![CDATA[A while ago Matt Davidson contacted me to discuss a few issues with the Gregory ACC source code that we released. Turns out there were some issues in the code that determines whether two patches have the same neighbor configuration and therefore can share the stencils. The code that compares the configurations is not very [...]]]></description>
			<content:encoded><![CDATA[<p>A while ago Matt Davidson contacted me to discuss a few issues with the <a href="http://code.google.com/p/nvidia-mesh-tools/">Gregory ACC source code that we released</a>. Turns out there were some issues in the code that determines whether two patches have the same neighbor configuration and therefore can share the stencils. The code that compares the configurations is not very robust and sometimes reports that two patches have the same configuration, while in practice they do not. In retrospect, it would have been a better idea to simply compute the stencils independently and merge them afterwards.</p>
<p>In any case, he managed to work around the problem and posted a video showing the results:</p>
<p><object style="height: 312px; width: 512px"><param name="movie" value="http://www.youtube.com/v/arVSHS4wiuw?version=3"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/arVSHS4wiuw?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="512" height="312"></object></p>
<p>I&#8217;m glad that despite the bugs somebody is actually making use of that code and finding it useful! Cool work Matt!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ludicon.com/castano/blog/2010/10/matts-gregory-acc-tessellation-render/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hemicube Rendering and Integration</title>
		<link>http://www.ludicon.com/castano/blog/2010/09/hemicube-rendering-and-integration/</link>
		<comments>http://www.ludicon.com/castano/blog/2010/09/hemicube-rendering-and-integration/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 01:31:18 +0000</pubDate>
		<dc:creator>Ignacio Castaño</dc:creator>
				<category><![CDATA[Graphics]]></category>
		<category><![CDATA[witness]]></category>

		<guid isPermaLink="false">http://www.ludicon.com/castano/blog/?p=304</guid>
		<description><![CDATA[I just posted another article about the global illumination solution that I implemented for The Witness, the second one in the series: The Witness &#8211; Hemicube Rendering and Integration, September 29, 2010 The Witness &#8211; Texture Parameterization, March 30, 2010]]></description>
			<content:encoded><![CDATA[<p>I just posted another article about the global illumination solution that I implemented for <a href="http://the-witness.net/">The Witness</a>, the second one in the series:</p>
<ul>
<li><a href="http://the-witness.net/news/?p=244">The Witness &#8211; Hemicube Rendering and Integration</a>, September 29, 2010</li>
<li><a href="http://the-witness.net/news/?p=120">The Witness &#8211; Texture Parameterization</a>, March 30, 2010</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ludicon.com/castano/blog/2010/09/hemicube-rendering-and-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Watertight Tessellation: precise and fma</title>
		<link>http://www.ludicon.com/castano/blog/2010/09/precise/</link>
		<comments>http://www.ludicon.com/castano/blog/2010/09/precise/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 07:48:39 +0000</pubDate>
		<dc:creator>Ignacio Castaño</dc:creator>
				<category><![CDATA[Graphics]]></category>

		<guid isPermaLink="false">http://www.ludicon.com/castano/blog/?p=275</guid>
		<description><![CDATA[One important feature of Direct3D 11 and OpenGL 4, which I have seen very little written about, is the addition of a new precise qualifier. It&#8217;s no surprise there&#8217;s some confusion about the purpose and motivation for this new keyword. The Direct3D documentation is vague about it: precise affects all results that contribute to the [...]]]></description>
			<content:encoded><![CDATA[<p>One important feature of Direct3D 11 and OpenGL 4, which I have seen very little written about, is the addition of a new <code>precise</code> qualifier. It&#8217;s no surprise there&#8217;s some confusion about the purpose and motivation for this new keyword. The <a href="http://msdn.microsoft.com/en-us/library/bb509706(VS.85).aspx">Direct3D documentation</a> is vague about it:</p>
<blockquote><p>
precise affects all results that contribute to the variable&#8217;s outcome by preventing the compiler from doing unsafe optimizations. For instance, to improve performance the compiler ingores the possibility of NaN and INF results for floating point variables from constant and stream inputs in order to do several optimizations. By using the precise keyword, these optimizations will be prohibited for all calculations affecting the result of the variable.
</p></blockquote>
<p>Besides the typos (ingores?), it&#8217;s not very clear what &#8220;unsafe optimizations&#8221; actually means, since only a single example is provided. On the other side, the <a href="http://www.opengl.org/registry/specs/ARB/gpu_shader5.txt">OpenGL specification</a> is a lot more &#8220;precise&#8221;:</p>
<blockquote><p>
The qualifier &#8220;precise&#8221; will ensure that operations contributing to a<br />
variable&#8217;s value are performed in the order and with the precision<br />
specified in the source code.  Order of evaluation is determined by<br />
operator precedence and parentheses, as described in Section 5.<br />
Expressions must be evaluated with a precision consistent with the<br />
operation; for example, multiplying two &#8220;float&#8221; values must produce a<br />
single value with &#8220;float&#8221; precision.  This effectively prohibits the<br />
arbitrary use of fused multiply-add operations if the intermediate<br />
multiply result is kept at a higher precision.
</p></blockquote>
<p>OpenGL makes it clear that precise causes operations to be performed in the exact order prescribed by the language rules. It also highlights that the precision of the operations must also be exactly as prescribed and not greater, which rules out the use of fused multiply-add if implemented according to the <a href="http://en.wikipedia.org/wiki/IEEE_754-2008">IEEE 754-2008</a> specification, to which most modern GPUs conform.</p>
<p><span id="more-275"></span>Today we take watertight rasterization for granted. This is something that most of us don&#8217;t even have to think about, since the fixed function hardware takes care of it automatically.</p>
<p>On the other side, when using tessellation, triangle vertices are generated by programable shaders that run independently for adjacent patches, which usually have arbitrary parametric orientations. Obtaining watertightness of tessellated patches requires a lot of care to guarantee that vertices shared between adjacent patches are evaluated consistently. As opposed to rasterization, in this case the responsibility to obtain watertightness lies in the hands of the programmer.</p>
<p>In my first experiments it became clear that this was not only hard to achieve, it was simply impossible. Fortunately, at NVIDIA I had access to the whole software stack, so by using a custom Cg compiler, running with developer drivers, and turning some knobs, I could prevent unwanted optimizations from happening and confirm that it was indeed possible to obtain watertight results. On the other hand, this solution was not very efficient, what we needed was to have fine grained control over the way the compiler turned our expressions into code; preventing optimizations only in the situations where it mattered.</p>
<p>Among all the solutions proposed, the addition of a precise qualifier and an fma (<b>f</b>used <b>m</b>ultiply-<b>a</b>dd) intrinsic is the solution that caught on.</p>
<p>To understand how the solution works, let&#8217;s look at some simple code that evaluates a cubic curve:</p>
<p><code>
<pre>
float3 cubic(float x, float3 p0, float3 p1, float3 p2, float3 p3) {
    float B0 = x * x * x;
    float B1 = (1-x) * x * x;
    float B2 = (1-x) * (1-x) * x;
    float B3 = (1-x) * (1-x) * (1-x);
    return p0 * B0 + p1 * B1 + p2 * B2 + p3 * B3;
}
</pre>
<p></code></p>
<p>In most situations that would work fine. However, when doing tessellation you need to be more careful. If you have two cubic surfaces adjacent to each other, but their parametric orientations do not agree, and we use that function to evaluate the surface on the boundary, then the resulting positions will also not agree.</p>
<p>That is because the following condition is not true:</p>
<p><code>
<pre>
cubic(x, a, b, c, d) == cubic(1-x, d, c, b, a);
</pre>
<p></code></p>
<p>That is, the evaluation of the curve is not symmetric. The result of evaluating the curve at <code>x</code> is not the same if you change the order of the control points and evaluate it at <code>1-x</code>.</p>
<p>It might seem counter-intuitive, but the way the compiler translates those expressions into a sequence of instructions does not guarantee symmetry. The computation itself must be expressed independent of parametric orientation.</p>
<p>Simply adding the precise qualifier to the result does not really solve our problems:</p>
<p><code>
<pre>
<b>precise</b> float3 cubic(float x, float3 p0, float3 p1, float3 p2, float3 p3) {
    float B0 = x     * x     * x;
    float B1 = (1-x) * x     * x;
    float B2 = (1-x) * (1-x) * x;
    float B3 = (1-x) * (1-x) * (1-x);
    return p0 * B0 + p1 * B1 + p2 * B2 + p3 * B3;
}
</pre>
<p></code></p>
<p>Note the order in which the operations are performed:</p>
<p><code>
<pre>
(((p0 * B0) + p1 * B1) + p2 * B2) + p3 * B3
</pre>
<p></code></p>
<p>Writing the expression with parenthesis to emphasize the evaluation order makes it clear that the expression does not have a symmetric structure, so it still doesn&#8217;t meet our requisite. What we should do then is to rewrite the expression as follows:</p>
<p><code>
<pre>
((p0 * B0) + p1 * B1) + ((p3 * B3) + p2 * B2)
</pre>
<p></code></p>
<p>It looks like now it should not matter in what direction the curve is evaluated, the result should be the same&#8230; but that&#8217;s not yet the case. If you look at the basis functions you will notice another problem:</p>
<p><code>
<pre>
    float B0 = x     * x     * x;
    float B1 = (1-x) * x     * x;
    float B2 = (1-x) * (1-x) * x;
    float B3 = (1-x) * (1-x) * (1-x);
</pre>
<p></code></p>
<p><code>B1</code> and <code>B2</code> are not symmetric either. In order to guarantee that <code>B1(x) == B2(1-x)</code>, they should be written as follows:</p>
<p><code>
<pre>
    float B0 = x     * x     * x;
    float B1 = <strong>x     * x     * (1-x)</strong>;
    float B2 = (1-x) * (1-x) * x;
    float B3 = (1-x) * (1-x) * (1-x);
</pre>
<p></code></p>
<p>That is getting closer to being correct, but there are still some problems. The precise qualifier only affects the expressions on the right hand side of the precise variable. That is, the above code is equivalent to:</p>
<p><code>
<pre>
float3 cubic(float x, float3 p0, float3 p1, float3 p2, float3 p3) {
    float B0 = x     * x     * x;
    float B1 = x     * x     * (1-x);
    float B2 = (1-x) * (1-x) * x;
    float B3 = (1-x) * (1-x) * (1-x);
    <b>precise</b> float3 p = ((p0 * B0) + p1 * B1) + ((p3 * B3) + p2 * B2);
    return p;
}
</pre>
<p></code></p>
<p>So, the compiler is free to mess with our carefully arranged expressions. Instead we should declare all of them as precise:</p>
<p><code>
<pre>
<b>precise</b> float3 cubic(float x, float3 p0, float3 p1, float3 p2, float3 p3) {
    <b>precise</b> float B0 = x     * x     * x;
    <b>precise</b> float B1 = x     * x     * (1-x);
    <b>precise</b> float B2 = (1-x) * (1-x) * x;
    <b>precise</b> float B3 = (1-x) * (1-x) * (1-x);
    return ((p0 * B0) + p1 * B1) + ((p3 * B3) + p2 * B2);
}
</pre>
<p></code></p>
<p>OK, this code is finally watertight! The only problem now is that the resulting code is much more expensive than our original implementation.</p>
<p>In both cases the evaluation of the Bezier basis requires about 7 scalar instructions. However, the evaluation of the curve used 12 instructions, while now it requires 21 instructions and one extra register. This is where we can use the fma intrinsic. We can use fma and still obtain symmetric results, but we have to tell the compiler explicitly when is it possible to do so. In this case, the resulting expression is as follows:</p>
<p><code>
<pre>
<b>fma</b>(p1, vec3(B1), (p0 * B0)) + <b>fma</b>(p2, vec3(B2), (p3 * B3))
</pre>
<p></code></p>
<p>This preserves the symmetry of the computation and only requires 15 instructions, much better!</p>
<p>In order to think more easily about the cost of the different implementations I use the following notation:</p>
<p><code>
<pre>
* --- &gt; --- &gt; --- &gt;  = 4*3 = 12

* -+- * -+- * -+- *  = 7*3 = 21

* --- &gt; -+- &lt; --- *  = 5*3 = 15
</pre>
<p></code></p>
<p>Here the stars (<code>*</code>) represent mul instructions, the crosses (<code>+</code>) represent add instructions, and the arrows (<code>&gt;&lt;</code>) represent fma instructions. The dashes (<code>-</code>) simply describe the dependencies between instructions and the order of evaluation in a loose way.</p>
<p>Take note, because in the next article I&#8217;ll be using this notation more extensively.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ludicon.com/castano/blog/2010/09/precise/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Back Online</title>
		<link>http://www.ludicon.com/castano/blog/2010/09/back-online/</link>
		<comments>http://www.ludicon.com/castano/blog/2010/09/back-online/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 07:01:47 +0000</pubDate>
		<dc:creator>Ignacio Castaño</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.ludicon.com.php5-14.dfw1-1.websitetestlink.com/castano/blog/?p=247</guid>
		<description><![CDATA[You may have noticed my blog has been down during the last few months. I had some trouble with the server and lost all my posts. Unfortunately I did not have backups so it took quite some effort to restore them. At least I&#8217;ve managed to recover most articles and some of the posts that [...]]]></description>
			<content:encoded><![CDATA[<p>You may have noticed my blog has been down during the last few months. I had some trouble with the server and lost all my posts. Unfortunately I did not have backups so it took quite some effort to restore them. At least I&#8217;ve managed to recover most articles and some of the posts that I wrote last year.</p>
<p>I really didn&#8217;t bother to restore the ones in which I only whine about my back pain; I&#8217;d rather not remember that part of my life. Some articles still have missing images, and I may update them progressively.</p>
<p>In the meantime I&#8217;ve written a couple of articles for <a href="http://the-witness.net/news/">The Witness blog</a> and in the future I&#8217;ll continue posting most of my technical articles there as well:</p>
<ul>
<li><a href="http://the-witness.net/news/?p=484">The Witness &#8211; Computing Alpha Mipmaps</a>, September 9, 2010</li>
<li><a href="http://the-witness.net/news/?p=120">The Witness &#8211; Texture Parameterization</a>, March 30, 2010</li>
</ul>
<p>Last spring was fantastic. I went hiking almost every single weekend and felt in better shape than ever. I&#8217;ve started writing some notes about my hikes in an attempt to plan them better; I don&#8217;t think this stuff is very useful to anyone but me, but here it is anyway:</p>
<p><a href="http://dl.dropbox.com/u/195124/hiking-notes.html">Nacho&#8217;s Hiking Notes</a></p>
<p>This summer I went to Spain and stayed there 5 weeks, much longer than usual. My grandmother died unexpectedly and it was good to be able to spend some more time with my family. When I got back I realized how lonely I am here in the US, how superficial are all my relationships.</p>
<p>I tried to stay in shape while abroad, but there&#8217;s nothing like the DAM workouts. I was flirting with lane 5 when I left and I&#8217;m now back to lane 3 again. The first two weeks have been excruciating, but I&#8217;m getting back into my routine and hopefully I&#8217;ll make my way up again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ludicon.com/castano/blog/2010/09/back-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Life</title>
		<link>http://www.ludicon.com/castano/blog/2010/05/life/</link>
		<comments>http://www.ludicon.com/castano/blog/2010/05/life/#comments</comments>
		<pubDate>Wed, 05 May 2010 07:51:34 +0000</pubDate>
		<dc:creator>Ignacio Castaño</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[witness]]></category>

		<guid isPermaLink="false">http://www.ludicon.com.php5-14.dfw1-1.websitetestlink.com/castano/blog/?p=68</guid>
		<description><![CDATA[A lot has been going on in the last few months. Mariana is 14 weeks pregnant, so we are expecting to have another kid by the beginning of November. She has just finished her studies and has found herself a job at EMQ/FamiliesFirst. She works counseling problematic children and loves it so far, but she [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/castano/4569162663/" ><img alt="" src="http://farm4.static.flickr.com/3419/4569162663_13d44df007_m.jpg" title="baby" class="alignright" width="240" height="180"></a>A lot has been going on in the last few months.</p>
<p>Mariana is 14 weeks pregnant, so we are expecting to have another kid by the beginning of November. She has just finished her studies and has found herself a job at <a href="http://www.emqff.org/">EMQ/FamiliesFirst</a>. She works counseling problematic children and loves it so far, but she has a terrible schedule, her shift is on weekend nights, so we don’t get to see each other much over the weekends.</p>
<p><a href="http://www.flickr.com/photos/castano/4569096595/"><img alt="" src="http://farm5.static.flickr.com/4022/4569096595_fde63cc984_m.jpg" title="worms" class="alignleft" width="240" height="180"></a></p>
<p>So, now Nachito and I have plenty of time to spend together. Spring is here and in Davis the weather is great during this time of the year, so we are spending most of our time outdoors. We have been working in our garden again, Nachito helps me spread compost and plant the starts, he loves playing with worms.</p>
<div><a href="http://www.flickr.com/photos/castano/4569086653/"><img alt="" src="http://farm5.static.flickr.com/4072/4569086653_f37974a743_m.jpg" title="rocks" class="alignright" width="180" height="240"></a></p>
<p>We have also been exploring the surrounding parks: Berryessa, Cold Canyon, Cache Creek, Capay Valley and various sections of the South Yuba river. The rivers in the foothills are still a bit too cold for swimming, but the creeks in the North Coast Range are just perfect on a hot day. Nachito loves climbing on rocks and he’s getting increasingly good at it.</p></div>
<p><a href="http://www.flickr.com/photos/castano/4569757982/" ><img alt="" src="http://farm5.static.flickr.com/4016/4569757982_9432d69141_m.jpg" title="nachito" class="alignleft" width="240" height="180"></a></p>
<p>
I keep swimming, not for rehabilitation anymore, but for recreation and fitness. I’m now in better shape than I’ve ever been and I feel pretty good about it. However, my back is not entirely healed yet; I cannot sit for long periods of time. I still feel a mild pain after driving long hours, biking on a rugged road or going to the movies. So, I keep working on stand-up desk. At this point it feels very natural, I don’t get tired as I used to anymore. Sitting on a chair feels too constraining, they remove too many degrees of freedom, it just feels wrong.</p>
<p><a href="http://the-witness.net">The Witness</a> is progressing well, although on my side things are going a bit slower than I hoped. I need to get my shit together and use my time more effectively. Part of the problem is that I have too many distractions at home, so I’ve finally rented an office and I’ll be moving in tomorrow. For the first time in my life I won’t have a computer at home, I’m going to stay like that for a while, but I’ve been thinking I should probably get a laptop.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ludicon.com/castano/blog/2010/05/life/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Witness</title>
		<link>http://www.ludicon.com/castano/blog/2010/03/the-witness/</link>
		<comments>http://www.ludicon.com/castano/blog/2010/03/the-witness/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 07:51:25 +0000</pubDate>
		<dc:creator>Ignacio Castaño</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.ludicon.com.php5-14.dfw1-1.websitetestlink.com/castano/blog/?p=66</guid>
		<description><![CDATA[Jon has recently started a development blog about The Witness, the game that we have been working on during the last few months. So far there are a few posts about the technology and the aesthetics of the game and I’ll soon write a bit more about the global illumination implementation in some more detail. [...]]]></description>
			<content:encoded><![CDATA[<p>Jon has recently started a <a href="http://the-witness.net/news/">development blog</a> about The Witness, the game that we have been working on during the last few months. So far there are a few posts about the technology and the aesthetics of the game and I’ll soon write a bit more about the global illumination implementation in some more detail. Keep an eye on it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ludicon.com/castano/blog/2010/03/the-witness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenNL 3.0</title>
		<link>http://www.ludicon.com/castano/blog/2010/02/opennl-3-0/</link>
		<comments>http://www.ludicon.com/castano/blog/2010/02/opennl-3-0/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 07:51:41 +0000</pubDate>
		<dc:creator>Ignacio Castaño</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.ludicon.com.php5-14.dfw1-1.websitetestlink.com/castano/blog/?p=70</guid>
		<description><![CDATA[GPGPU.org takes note that OpenNL 3.0 has just been released and that this new version comes with support for CUDA. That’s certainly interesting, but for me the biggest news is that the library is now under the BSD license and thus can be used in a wider range of projects. I guess it’s time to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://gpgpu.org/2010/02/14/opennl-cuda-sparse-linear-solvers">GPGPU.org</a> takes note that <a href="http://alice.loria.fr/index.php/software/4-library/23-opennl.html">OpenNL 3.0</a> has just been released and that this new version comes with support for CUDA. That’s certainly interesting, but for me the biggest news is that the library is now under the BSD license and thus can be used in a wider range of projects. I guess it’s time to drop my own <a href="http://code.google.com/p/nvidia-mesh-tools/source/browse/trunk/src/nvmath/Sparse.h">sparse matrix</a> <a href="http://code.google.com/p/nvidia-mesh-tools/source/browse/trunk/src/nvmath/Solver.h">solvers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ludicon.com/castano/blog/2010/02/opennl-3-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

