<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8935780327334775165</id><updated>2012-01-28T05:04:02.156+08:00</updated><category term='Nostalgia'/><category term='C#'/><category term='Random'/><category term='Python'/><category term='Snippet'/><category term='Unity3D'/><category term='Games'/><category term='Audio'/><category term='Javascript'/><category term='Mecha'/><category term='Spacecraft'/><category term='Perth'/><title type='text'>Entity Crisis</title><subtitle type='html'>The blog of Simon Wittber.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default?start-index=101&amp;max-results=100'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>445</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2048201853717177275</id><published>2012-01-26T06:06:00.000+08:00</published><updated>2012-01-26T06:06:48.728+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Perth'/><title type='text'>No GGJ For Me.</title><content type='html'>I'm flying from London to Singapore over the 2012 GGJ weekend. Sad to miss this one, but I'm looking forward to seeing what my fellow &lt;a href="http://letsmakegames.org/"&gt;Perth peeps&lt;/a&gt; get done!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2048201853717177275?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2048201853717177275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2048201853717177275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2048201853717177275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2048201853717177275'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2012/01/no-ggj-for-me.html' title='No GGJ For Me.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2127336691646364870</id><published>2012-01-13T02:47:00.001+08:00</published><updated>2012-01-23T18:41:42.112+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Best app @ BETT show in London?</title><content type='html'>IMHO, it's &lt;a target="_blank" href="http://skoolbo.com"&gt;Skoolbo&lt;/a&gt;. Skoolbo is developed using &lt;a target="_blank" href="http://unity3d.com"&gt;Unity3D&lt;/a&gt;. Oh, and I run the company that built it! So I guess I am a little biased. :-)&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2127336691646364870?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2127336691646364870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2127336691646364870' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2127336691646364870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2127336691646364870'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2012/01/best-app-bett-show-in-london.html' title='Best app @ BETT show in London?'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8073979463471811349</id><published>2012-01-11T14:27:00.001+08:00</published><updated>2012-01-11T14:27:37.037+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>We're building a library!</title><content type='html'>Would you like to help build a library for a school in Thailand?&lt;br /&gt;&lt;br /&gt;It is easy to help out, all you need is to send a FB like, and you're sending a brick for the library!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://skoolbo.com/?p=2855"&gt;Skoolbo is funding (and even helping with the brick laying!) the project.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Skoolbo is a project I've been working for almost two years. The backend is a beautiful piece of Python, and the front end is a similar quality piece of Unity3d, which will be released Real Soon Now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8073979463471811349?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8073979463471811349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8073979463471811349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8073979463471811349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8073979463471811349'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2012/01/were-building-library.html' title='We&apos;re building a library!'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-3366038066533049869</id><published>2011-12-12T13:17:00.001+08:00</published><updated>2011-12-12T13:20:30.053+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Convert CSV to TSV</title><content type='html'>&lt;pre&gt;&lt;br /&gt;import csv&lt;br /&gt;open("output.tsv", "w").write("\n".join("\t".join(e.strip() for e in i) for i in csv.reader(open("input.csv"))))&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-3366038066533049869?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/3366038066533049869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=3366038066533049869' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3366038066533049869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3366038066533049869'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/12/convert-csv-to-tsv.html' title='Convert CSV to TSV'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-5250468089734234645</id><published>2011-11-30T09:58:00.001+08:00</published><updated>2012-01-23T18:41:13.938+08:00</updated><title type='text'>Unity3D available on Linux!</title><content type='html'>&lt;p&gt;While exploring the build API for Unity3D today, I came across this... &lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-3XRejRlGdHw/TtWNrYSkIvI/AAAAAAAAAq0/m1uFK5Hbnlw/s1600/Screen%2Bshot%2B2011-11-30%2Bat%2B9.55.23%2BAM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="64" width="400" src="http://1.bp.blogspot.com/-3XRejRlGdHw/TtWNrYSkIvI/AAAAAAAAAq0/m1uFK5Hbnlw/s400/Screen%2Bshot%2B2011-11-30%2Bat%2B9.55.23%2BAM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Yup, that's a BuildTarget enum for Linux! I haven't tried it yet, so it may throw an exception if I try to use it... but I'm guessing this means official Linux support is imminent? &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-5250468089734234645?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/5250468089734234645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=5250468089734234645' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5250468089734234645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5250468089734234645'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/11/unity3d-available-on-linux.html' title='Unity3D available on Linux!'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-3XRejRlGdHw/TtWNrYSkIvI/AAAAAAAAAq0/m1uFK5Hbnlw/s72-c/Screen%2Bshot%2B2011-11-30%2Bat%2B9.55.23%2BAM.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-3105923229605810074</id><published>2011-11-22T22:16:00.001+08:00</published><updated>2011-11-23T09:21:41.527+08:00</updated><title type='text'>Unity3D GC Spikes</title><content type='html'>If you've been working with Unity3D for a while, you've probably noticed when the garbage collector kicks in, your frame rate suffers, very badly.I've spent some considerable time trying to eliminate these hiccups from my AI code, with no success. I ended up reducing the problem to a simple project which loads and runs 1000 coroutines forever, which do nothing except yield 0. This is the result in my profiler.&lt;br/&gt;&lt;br/&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-qB6B4HCUqhA/TsuvTMq1_jI/AAAAAAAAAqo/h-7aCZbzHIA/s1600/Screen%2BShot%2B2011-11-22%2Bat%2B10.13.07%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="250" width="400" src="http://3.bp.blogspot.com/-qB6B4HCUqhA/TsuvTMq1_jI/AAAAAAAAAqo/h-7aCZbzHIA/s400/Screen%2BShot%2B2011-11-22%2Bat%2B10.13.07%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;Those nasty spikes are where the GC kicks in and performance plummets. It's particularly nasty on iOS. The question is, how to fix? I have no idea. This project only runs coroutines which do nothing. No allocations, instantiations or anything else. Yet, the GC still kicks in very frequently. Too frequently. If _anyone_ has a solution for this, I'd love to hear it. I'm worried the problem is too fundamental to Unity3D to fix in any way...Try for yourself if you like. &lt;a href="http://codexastra.com/data/uploads/temp/spiker.unitypackage"&gt;spiker.unitypackage&lt;/a&gt;&lt;b&gt;Update:&lt;/b&gt; After running this same test and profiling the iOS and Desktop builds, the GC spikes disappear completely. The less I have learnt, is don't rely on profiling in the Editor!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-3105923229605810074?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/3105923229605810074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=3105923229605810074' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3105923229605810074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3105923229605810074'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/11/unity3d-gc-spikes.html' title='Unity3D GC Spikes'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-qB6B4HCUqhA/TsuvTMq1_jI/AAAAAAAAAqo/h-7aCZbzHIA/s72-c/Screen%2BShot%2B2011-11-22%2Bat%2B10.13.07%2BPM.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8791037148638407658</id><published>2011-11-22T15:15:00.001+08:00</published><updated>2011-11-22T15:17:00.044+08:00</updated><title type='text'>Star Hammering in Two Days</title><content type='html'>In two days, I get to buy &lt;a href="http://www.starhammer.com/"&gt;this game&lt;/a&gt;. I've been waiting quite some time to play this. You should buy it too, then we can all beg the developer for a MMO expansion together! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8791037148638407658?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8791037148638407658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8791037148638407658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8791037148638407658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8791037148638407658'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/11/star-hammering-in-two-days.html' title='Star Hammering in Two Days'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-4222734554083897968</id><published>2011-10-26T22:09:00.001+08:00</published><updated>2011-10-26T22:09:55.547+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>A Particle Sun</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-jT8LEtwgSmI/TqgUYjJk8wI/AAAAAAAAAqQ/yaoBjxTyEe4/s1600/Screen%2BShot%2B2011-10-26%2Bat%2B10.05.14%2BPM.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="300" width="400" src="http://1.bp.blogspot.com/-jT8LEtwgSmI/TqgUYjJk8wI/AAAAAAAAAqQ/yaoBjxTyEe4/s400/Screen%2BShot%2B2011-10-26%2Bat%2B10.05.14%2BPM.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-4222734554083897968?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/4222734554083897968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=4222734554083897968' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4222734554083897968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4222734554083897968'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/10/particle-sun.html' title='A Particle Sun'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-jT8LEtwgSmI/TqgUYjJk8wI/AAAAAAAAAqQ/yaoBjxTyEe4/s72-c/Screen%2BShot%2B2011-10-26%2Bat%2B10.05.14%2BPM.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-3272524389504596896</id><published>2011-10-26T05:30:00.000+08:00</published><updated>2011-10-26T09:46:27.222+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>1000 Space Ships...</title><content type='html'>What do 1000 AI controlled spaceships look like? This!&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-4Cuw8yHUmFg/TqZ6TQCcprI/AAAAAAAAApc/60v77-f_qqw/s1600/Screen%2BShot%2B2011-10-25%2Bat%2B4.49.20%2BPM%2B%25282%2529.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="300" width="400" src="http://2.bp.blogspot.com/-4Cuw8yHUmFg/TqZ6TQCcprI/AAAAAAAAApc/60v77-f_qqw/s400/Screen%2BShot%2B2011-10-25%2Bat%2B4.49.20%2BPM%2B%25282%2529.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Ws9DNZgylwI/TqZ6dL6F2WI/AAAAAAAAApo/dMLNLv0XO54/s1600/Screen%2BShot%2B2011-10-25%2Bat%2B4.49.08%2BPM%2B%25282%2529.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="300" width="400" src="http://2.bp.blogspot.com/-Ws9DNZgylwI/TqZ6dL6F2WI/AAAAAAAAApo/dMLNLv0XO54/s400/Screen%2BShot%2B2011-10-25%2Bat%2B4.49.08%2BPM%2B%25282%2529.png" /&gt;&lt;/a&gt;&lt;/div&gt;These ships are using physics to propel themselves around, with an AI controlling each one. The &lt;a href="http://u3d.as/content/different-methods/react/1D5"&gt;AI Tool is React&lt;/a&gt;, and it works on iOS too! This shot is taken on an iPad 2, with a mere 100 ships in flight!&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-0AemUpnjkPQ/TqZ8byvxPEI/AAAAAAAAAp0/_of7A7Jiwmk/s1600/Screenshot%2B2011.10.25%2B17.04.22.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="300" width="400" src="http://1.bp.blogspot.com/-0AemUpnjkPQ/TqZ8byvxPEI/AAAAAAAAAp0/_of7A7Jiwmk/s400/Screenshot%2B2011.10.25%2B17.04.22.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-3272524389504596896?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/3272524389504596896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=3272524389504596896' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3272524389504596896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3272524389504596896'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/10/1000-space-ships.html' title='1000 Space Ships...'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-4Cuw8yHUmFg/TqZ6TQCcprI/AAAAAAAAApc/60v77-f_qqw/s72-c/Screen%2BShot%2B2011-10-25%2Bat%2B4.49.20%2BPM%2B%25282%2529.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1623587842506632869</id><published>2011-10-11T18:48:00.001+08:00</published><updated>2011-10-11T18:48:50.746+08:00</updated><title type='text'>LibNoise in Unity3D.</title><content type='html'>&lt;br /&gt;&lt;a href="http://code.google.com/p/libnoise-unity/"&gt;The native C# Port for Unity3D is here.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1623587842506632869?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1623587842506632869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1623587842506632869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1623587842506632869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1623587842506632869'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/10/libnoise-for-unity3d.html' title='LibNoise in Unity3D.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-3139962712771174153</id><published>2011-08-29T12:05:00.000+08:00</published><updated>2011-08-29T12:05:17.043+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mecha'/><title type='text'>Monday Mech</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-oqqeGxPrrAw/TlsP8ATKBvI/AAAAAAAAAow/Ng-1TPmdWuE/s1600/Screen+Shot+2011-08-29+at+12.04.24+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" src="http://2.bp.blogspot.com/-oqqeGxPrrAw/TlsP8ATKBvI/AAAAAAAAAow/Ng-1TPmdWuE/s320/Screen+Shot+2011-08-29+at+12.04.24+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-3139962712771174153?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/3139962712771174153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=3139962712771174153' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3139962712771174153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3139962712771174153'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/08/monday-mech.html' title='Monday Mech'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-oqqeGxPrrAw/TlsP8ATKBvI/AAAAAAAAAow/Ng-1TPmdWuE/s72-c/Screen+Shot+2011-08-29+at+12.04.24+PM.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-3200105239391323892</id><published>2011-08-28T23:54:00.002+08:00</published><updated>2011-08-28T23:54:45.757+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mecha'/><title type='text'>Sunday Mech</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-a-SpUhC19ds/TlpkvLOxNPI/AAAAAAAAAos/4gF2YRKPyLw/s1600/Screen+Shot+2011-08-28+at+11.52.49+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/-a-SpUhC19ds/TlpkvLOxNPI/AAAAAAAAAos/4gF2YRKPyLw/s320/Screen+Shot+2011-08-28+at+11.52.49+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-3200105239391323892?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/3200105239391323892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=3200105239391323892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3200105239391323892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3200105239391323892'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/08/sunday-mech.html' title='Sunday Mech'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-a-SpUhC19ds/TlpkvLOxNPI/AAAAAAAAAos/4gF2YRKPyLw/s72-c/Screen+Shot+2011-08-28+at+11.52.49+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1191456726346028946</id><published>2011-08-27T22:51:00.000+08:00</published><updated>2011-08-27T22:51:53.623+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mecha'/><title type='text'>Another Mech Before I Sleep...</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;Last one, I promise. For today at least! :-)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-npIJ0i45M1I/TlkELvvhsAI/AAAAAAAAAoo/uUqG7YaJww4/s1600/Screen+Shot+2011-08-27+at+10.49.22+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-npIJ0i45M1I/TlkELvvhsAI/AAAAAAAAAoo/uUqG7YaJww4/s320/Screen+Shot+2011-08-27+at+10.49.22+PM.png" width="305" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1191456726346028946?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1191456726346028946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1191456726346028946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1191456726346028946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1191456726346028946'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/08/another-mech-before-i-sleep.html' title='Another Mech Before I Sleep...'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-npIJ0i45M1I/TlkELvvhsAI/AAAAAAAAAoo/uUqG7YaJww4/s72-c/Screen+Shot+2011-08-27+at+10.49.22+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7316990840633785931</id><published>2011-08-27T17:00:00.000+08:00</published><updated>2011-08-27T17:00:21.831+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mecha'/><title type='text'>An afternoon designing mecha...</title><content type='html'>Is an afternoon well spent!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-b33JuMVMKAI/TliyHMi6sAI/AAAAAAAAAok/El97Col97FY/s1600/Screen+Shot+2011-08-27+at+4.59.06+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-b33JuMVMKAI/TliyHMi6sAI/AAAAAAAAAok/El97Col97FY/s320/Screen+Shot+2011-08-27+at+4.59.06+PM.png" width="310" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7316990840633785931?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7316990840633785931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7316990840633785931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7316990840633785931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7316990840633785931'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/08/afternoon-designing-mecha.html' title='An afternoon designing mecha...'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-b33JuMVMKAI/TliyHMi6sAI/AAAAAAAAAok/El97Col97FY/s72-c/Screen+Shot+2011-08-27+at+4.59.06+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1237975896645640588</id><published>2011-08-27T16:58:00.000+08:00</published><updated>2011-08-27T16:58:12.506+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mecha'/><title type='text'>And Another Mech!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-DnB5AM8xPU0/TlixmueJ39I/AAAAAAAAAog/Yz02GaI6nBs/s1600/Screen+Shot+2011-08-27+at+4.57.00+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="283" src="http://1.bp.blogspot.com/-DnB5AM8xPU0/TlixmueJ39I/AAAAAAAAAog/Yz02GaI6nBs/s320/Screen+Shot+2011-08-27+at+4.57.00+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1237975896645640588?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1237975896645640588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1237975896645640588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1237975896645640588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1237975896645640588'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/08/and-another-mech.html' title='And Another Mech!'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-DnB5AM8xPU0/TlixmueJ39I/AAAAAAAAAog/Yz02GaI6nBs/s72-c/Screen+Shot+2011-08-27+at+4.57.00+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2037659149441315311</id><published>2011-08-27T16:55:00.000+08:00</published><updated>2011-08-27T16:55:37.432+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mecha'/><title type='text'>Another Mech.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;I took more care with this one, to make sure that the joints are articulated.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1Qgu5Jf1fZY/Tliw0sNnf1I/AAAAAAAAAoc/GQ7YRe4bQv4/s1600/Screen+Shot+2011-08-27+at+4.52.55+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="276" src="http://2.bp.blogspot.com/-1Qgu5Jf1fZY/Tliw0sNnf1I/AAAAAAAAAoc/GQ7YRe4bQv4/s320/Screen+Shot+2011-08-27+at+4.52.55+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2037659149441315311?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2037659149441315311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2037659149441315311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2037659149441315311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2037659149441315311'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/08/another-mech.html' title='Another Mech.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-1Qgu5Jf1fZY/Tliw0sNnf1I/AAAAAAAAAoc/GQ7YRe4bQv4/s72-c/Screen+Shot+2011-08-27+at+4.52.55+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-9215325558085150848</id><published>2011-08-26T18:03:00.000+08:00</published><updated>2011-08-26T18:03:24.795+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mecha'/><title type='text'>My First Mech.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-zx4ca1Zc3GI/TldvY8RlZ1I/AAAAAAAAAoY/--_ASH_UFEc/s1600/Screen%2BShot%2B2011-08-26%2Bat%2B2.55.17%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="400" width="395" src="http://2.bp.blogspot.com/-zx4ca1Zc3GI/TldvY8RlZ1I/AAAAAAAAAoY/--_ASH_UFEc/s400/Screen%2BShot%2B2011-08-26%2Bat%2B2.55.17%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-9215325558085150848?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/9215325558085150848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=9215325558085150848' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/9215325558085150848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/9215325558085150848'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/08/my-first-mech.html' title='My First Mech.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-zx4ca1Zc3GI/TldvY8RlZ1I/AAAAAAAAAoY/--_ASH_UFEc/s72-c/Screen%2BShot%2B2011-08-26%2Bat%2B2.55.17%2BPM.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2792257506442692777</id><published>2011-08-25T12:24:00.008+08:00</published><updated>2011-08-25T12:44:39.381+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Heap Queue in C#</title><content type='html'>A minimal re-implementation of the Python heapq module.&lt;br /&gt;&lt;br /&gt;&lt;pre style='color:#000000;background:#ffffff;'&gt;public class HeapQ&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;T&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; where T &lt;span style='color:#800080; '&gt;:&lt;/span&gt; IComparable&lt;br /&gt;&lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;    List&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;T&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; items&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    public HeapQ &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        items &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new List&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;T&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    public bool Empty &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        get &lt;span style='color:#800080; '&gt;{&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;return&lt;/span&gt; items&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Count &lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt; &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    public T First &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        get &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#800000; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;items&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Count &lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#800000; font-weight:bold; '&gt;return&lt;/span&gt; items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#800000; font-weight:bold; '&gt;return&lt;/span&gt; items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;items&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Count &lt;span style='color:#808030; '&gt;-&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    public &lt;span style='color:#800000; font-weight:bold; '&gt;void&lt;/span&gt; Push &lt;span style='color:#808030; '&gt;(&lt;/span&gt;T item&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        items&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Add &lt;span style='color:#808030; '&gt;(&lt;/span&gt;item&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        SiftDown &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt; items&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Count &lt;span style='color:#808030; '&gt;-&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    public T Pop &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        T item&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var last &lt;span style='color:#808030; '&gt;=&lt;/span&gt; items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;items&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Count &lt;span style='color:#808030; '&gt;-&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        items&lt;span style='color:#808030; '&gt;.&lt;/span&gt;RemoveAt &lt;span style='color:#808030; '&gt;(&lt;/span&gt;items&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Count &lt;span style='color:#808030; '&gt;-&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;items&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Count &lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            item &lt;span style='color:#808030; '&gt;=&lt;/span&gt; items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; last&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            SiftUp &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            item &lt;span style='color:#808030; '&gt;=&lt;/span&gt; last&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;return&lt;/span&gt; item&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#800000; font-weight:bold; '&gt;void&lt;/span&gt; SiftDown &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;int&lt;/span&gt; startpos&lt;span style='color:#808030; '&gt;,&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;int&lt;/span&gt; pos&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        var newitem &lt;span style='color:#808030; '&gt;=&lt;/span&gt; items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;pos&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;while&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;pos &lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; startpos&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            var parentpos &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;pos &lt;span style='color:#808030; '&gt;-&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            var parent &lt;span style='color:#808030; '&gt;=&lt;/span&gt; items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;parentpos&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#800000; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;parent&lt;span style='color:#808030; '&gt;.&lt;/span&gt;CompareTo &lt;span style='color:#808030; '&gt;(&lt;/span&gt;newitem&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#800000; font-weight:bold; '&gt;break&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;pos&lt;span style='color:#808030; '&gt;]&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; parent&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            pos &lt;span style='color:#808030; '&gt;=&lt;/span&gt; parentpos&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;pos&lt;span style='color:#808030; '&gt;]&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; newitem&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#800000; font-weight:bold; '&gt;void&lt;/span&gt; SiftUp &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;int&lt;/span&gt; pos&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        var endpos &lt;span style='color:#808030; '&gt;=&lt;/span&gt; items&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Count&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var startpos &lt;span style='color:#808030; '&gt;=&lt;/span&gt; pos&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var newitem &lt;span style='color:#808030; '&gt;=&lt;/span&gt; items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;pos&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var childpos &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt; &lt;span style='color:#808030; '&gt;*&lt;/span&gt; pos &lt;span style='color:#808030; '&gt;+&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;while&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;childpos &lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt; endpos&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            var rightpos &lt;span style='color:#808030; '&gt;=&lt;/span&gt; childpos &lt;span style='color:#808030; '&gt;+&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#800000; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;rightpos &lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt; endpos &lt;span style='color:#808030; '&gt;&amp;amp;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&amp;amp;&lt;/span&gt; items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;rightpos&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#808030; '&gt;.&lt;/span&gt;CompareTo &lt;span style='color:#808030; '&gt;(&lt;/span&gt;items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;childpos&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;                childpos &lt;span style='color:#808030; '&gt;=&lt;/span&gt; rightpos&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;pos&lt;span style='color:#808030; '&gt;]&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;childpos&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            pos &lt;span style='color:#808030; '&gt;=&lt;/span&gt; childpos&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            childpos &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt; &lt;span style='color:#808030; '&gt;*&lt;/span&gt; pos &lt;span style='color:#808030; '&gt;+&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        items&lt;span style='color:#808030; '&gt;[&lt;/span&gt;pos&lt;span style='color:#808030; '&gt;]&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; newitem&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        SiftDown &lt;span style='color:#808030; '&gt;(&lt;/span&gt;startpos&lt;span style='color:#808030; '&gt;,&lt;/span&gt; pos&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2792257506442692777?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2792257506442692777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2792257506442692777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2792257506442692777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2792257506442692777'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/08/heap-queue-in-c.html' title='Heap Queue in C#'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-5280603799096825073</id><published>2011-08-05T11:37:00.002+08:00</published><updated>2011-08-05T11:45:02.507+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>Thing's I like about Mac.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-ozwqNOGOEGI/TjtlkOozAYI/AAAAAAAAAoQ/RS_g1GuQAkE/s1600/Screen%2BShot%2B2011-08-05%2Bat%2B11.36.20%2BAM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 264px; height: 376px;" src="http://1.bp.blogspot.com/-ozwqNOGOEGI/TjtlkOozAYI/AAAAAAAAAoQ/RS_g1GuQAkE/s400/Screen%2BShot%2B2011-08-05%2Bat%2B11.36.20%2BAM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5637211031663214978" /&gt;&lt;/a&gt;&lt;br /&gt;This is the default icon for a Windows computer in OSX Finder. If you can't see the joke... look closely!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-5280603799096825073?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/5280603799096825073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=5280603799096825073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5280603799096825073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5280603799096825073'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/08/things-i-like-about-mac.html' title='Thing&apos;s I like about Mac.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ozwqNOGOEGI/TjtlkOozAYI/AAAAAAAAAoQ/RS_g1GuQAkE/s72-c/Screen%2BShot%2B2011-08-05%2Bat%2B11.36.20%2BAM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2237830980836375463</id><published>2011-08-05T10:54:00.003+08:00</published><updated>2011-08-05T11:20:51.883+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Unity3D 3.4 Enhancements</title><content type='html'>I enjoy modifying cars, so that they exceed their stock limitations. When you've fixed all the easy stuff on a vehicle, you move onto the fine tuning, which might only yield you one or two percent performance increase per modification. The latest version of Unity contains some very fine fixes, which are starting to make it run like a well tuned rapid development machine!&lt;br /&gt;&lt;br /&gt;C# Script files now get the correct name when you first add them to the project.  The ritual of "Create Script, Open, Rename, Drop onto Game Object" is gone forever! Now you only need to create the script, and Unity gives the class the right name automagically.&lt;br /&gt;&lt;br /&gt;The second great fix is that you can now create a prefab simply by dragging an object from your scene hierarchy straight into the project view. No more tedious Create Prefab, Drop object Onto Prefab, Rename Prefab. It is just... drag... and drop!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2237830980836375463?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2237830980836375463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2237830980836375463' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2237830980836375463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2237830980836375463'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/08/unity3d-34-enhancements.html' title='Unity3D 3.4 Enhancements'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-4756039151463425893</id><published>2011-07-28T09:43:00.001+08:00</published><updated>2011-07-28T09:45:59.247+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Unity3D Locomotion Update</title><content type='html'>I didn't see this mentioned anywhere, but it appears that the &lt;a href="http://unity3d.com/support/resources/unity-extensions/locomotion-ik.html"&gt;Unity3D Locomotion System&lt;/a&gt; has had an update. It's great to see this project is not being neglected!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-4756039151463425893?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/4756039151463425893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=4756039151463425893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4756039151463425893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4756039151463425893'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/07/unity3d-locomotion-update.html' title='Unity3D Locomotion Update'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8815974103698921300</id><published>2011-07-27T14:00:00.003+08:00</published><updated>2011-07-27T14:04:21.463+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Thoughts on Unity3D -&gt; Allegorithmic Integration</title><content type='html'>Unity3D 3.4 includes new integration with Allegorithmic and their Substance engine.&lt;br /&gt;&lt;br /&gt;What does this give you? Simply, you have a new material type which you can import and use in Unity. If you want to create these materials yourself, you'll need to purchase other tools to do that for you, Unity doesn't do that.&lt;br /&gt;&lt;br /&gt;You can also purchase a bunch of materials from the Unity Asset Store. But don't be fooled by the screenshots, you won't get nice bumpy objects just by slapping a Substance onto them. To make that a reality, Unity3D will need to support displacement shaders. Until then substances are really just highly configurable textures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8815974103698921300?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8815974103698921300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8815974103698921300' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8815974103698921300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8815974103698921300'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/07/thoughts-on-unity3d-allegorithmic.html' title='Thoughts on Unity3D -&gt; Allegorithmic Integration'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8400527863270208974</id><published>2011-07-26T23:12:00.002+08:00</published><updated>2011-07-26T23:13:03.233+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Unity3D 3.4 is out!</title><content type='html'>Unity3D 3.4 is out! &lt;a href="http://unity3d.com/unity/whats-new/unity-3.4"&gt;Woah, awesome features!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8400527863270208974?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8400527863270208974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8400527863270208974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8400527863270208974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8400527863270208974'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/07/unity3d-34-is-out.html' title='Unity3D 3.4 is out!'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2010995111971803729</id><published>2011-07-25T20:48:00.003+08:00</published><updated>2011-07-25T20:52:20.882+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Unity3D Screen Grabs</title><content type='html'>Some recent work with Unity3D surface shaders.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-ZLzVi1QcByw/Ti1miTKvO1I/AAAAAAAAAmc/xaCMdJhuHf4/s1600/Screen%2BShot%2B2011-07-25%2Bat%2B7.27.57%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 305px;" src="http://4.bp.blogspot.com/-ZLzVi1QcByw/Ti1miTKvO1I/AAAAAAAAAmc/xaCMdJhuHf4/s400/Screen%2BShot%2B2011-07-25%2Bat%2B7.27.57%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5633271448357256018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-WlZlzIg_TnI/Ti1mh2hjymI/AAAAAAAAAmU/hITkPEmJIlo/s1600/Screen%2Bshot%2B2011-07-21%2Bat%2B3.21.16%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 311px;" src="http://2.bp.blogspot.com/-WlZlzIg_TnI/Ti1mh2hjymI/AAAAAAAAAmU/hITkPEmJIlo/s400/Screen%2Bshot%2B2011-07-21%2Bat%2B3.21.16%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5633271440668346978" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2010995111971803729?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2010995111971803729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2010995111971803729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2010995111971803729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2010995111971803729'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/07/unity3d-screen-grabs.html' title='Unity3D Screen Grabs'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ZLzVi1QcByw/Ti1miTKvO1I/AAAAAAAAAmc/xaCMdJhuHf4/s72-c/Screen%2BShot%2B2011-07-25%2Bat%2B7.27.57%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-5556001492449948166</id><published>2011-07-04T16:01:00.002+08:00</published><updated>2011-07-04T16:04:02.917+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Spatial Hash in Javascript, for 2D.</title><content type='html'>&lt;pre&gt;var SpatialHash = function(cellSize) {&lt;br /&gt; this.idx = {};&lt;br /&gt; this.cellSize = cellSize;&lt;br /&gt;}  &lt;br /&gt; &lt;br /&gt;SpatialHash.prototype.insert = function(x, y, obj) {&lt;br /&gt; var cell = [];&lt;br /&gt; var keys = this.keys(x,y);&lt;br /&gt; for(var i in keys) {&lt;br /&gt;  var key = keys[i];&lt;br /&gt;  if(key in this.idx) {&lt;br /&gt;   cell = this.idx[key];&lt;br /&gt;  } else {&lt;br /&gt;   this.idx[key] = cell;   &lt;br /&gt;  }&lt;br /&gt;  if(cell.indexOf(obj) == -1)&lt;br /&gt;   cell.push(obj);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;SpatialHash.prototype.query = function(x, y) {&lt;br /&gt; var key = this.key(x, y);&lt;br /&gt; if(this.idx[key] != undefined)&lt;br /&gt;  return this.idx[key];&lt;br /&gt; return [];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;SpatialHash.prototype.keys = function (x, y)  {&lt;br /&gt; var o = this.cellSize / 2;&lt;br /&gt; return [this.key(x-o, y+0), &lt;br /&gt;   this.key(x-0, y+0),&lt;br /&gt;   this.key(x+o, y+0),&lt;br /&gt;   this.key(x-o, y+o),&lt;br /&gt;   this.key(x-0, y+o),&lt;br /&gt;   this.key(x+o, y+o),&lt;br /&gt;   this.key(x-o, y-o),&lt;br /&gt;   this.key(x-0, y-o),&lt;br /&gt;   this.key(x+o, y-o)];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;SpatialHash.prototype.key = function(x, y) {&lt;br /&gt; var cellSize = this.cellSize;&lt;br /&gt; x = Math.floor(x/cellSize)*cellSize;&lt;br /&gt; y = Math.floor(y/cellSize)*cellSize;&lt;br /&gt; return x.toString() + ":" + y.toString();&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-5556001492449948166?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/5556001492449948166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=5556001492449948166' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5556001492449948166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5556001492449948166'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/07/spatial-hash-in-javascript-for-2d.html' title='Spatial Hash in Javascript, for 2D.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1075344755516297928</id><published>2011-06-24T11:58:00.002+08:00</published><updated>2011-06-24T12:06:24.142+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>Racing Games on the iPad</title><content type='html'>I've just played Sega All Stars Racing on my iPad.&lt;br /&gt;&lt;br /&gt;Great fun, but it uses tilt controls to control the steering of the vehicle. This works great, until I've been playing for 3 minutes and my shoulders start to ache. &lt;br /&gt;&lt;br /&gt;People that are building racing games for iDevices obviously have not payed any attention to the lessons learned from &lt;a href"http://www.catb.org/jargon/html/G/gorilla-arm.html"&gt;Gorilla Arm Syndrome&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1075344755516297928?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1075344755516297928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1075344755516297928' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1075344755516297928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1075344755516297928'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/06/racing-games-on-ipad.html' title='Racing Games on the iPad'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7370181946590045315</id><published>2011-06-18T16:39:00.002+08:00</published><updated>2011-06-18T16:41:36.496+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>I tried Battlestar Galactica Online..</title><content type='html'>... they sent me my password in clear text.&lt;br /&gt;&lt;br /&gt;Instant, mega-fail. Now I need to change all my game related passwords. &lt;br /&gt;&lt;br /&gt;Thanks for that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7370181946590045315?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7370181946590045315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7370181946590045315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7370181946590045315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7370181946590045315'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/06/i-tried-battlestar-galactica-online.html' title='I tried Battlestar Galactica Online..'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-4748716717989831850</id><published>2011-06-14T13:49:00.004+08:00</published><updated>2011-06-14T14:05:09.289+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>EVE Online, initial perspective.</title><content type='html'>First of all, I'm starting to enjoy the learning curve. Bute there are a few things that are annoying.&lt;br /&gt;&lt;br /&gt;1. Clipping through planets.&lt;br /&gt;2. Clipping through stars.&lt;br /&gt;3. Clipping through wrecks.&lt;br /&gt;4. Clipping through stations.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Amazing that this happens in such a... er... 'AAA' title?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-4748716717989831850?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/4748716717989831850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=4748716717989831850' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4748716717989831850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4748716717989831850'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/06/eve-online-initial-perspective.html' title='EVE Online, initial perspective.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-620025190082619488</id><published>2011-06-10T16:44:00.002+08:00</published><updated>2011-06-10T16:46:33.950+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Glowy Things.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-5W6MPz4YwXI/TfHZq1OZeDI/AAAAAAAAAl0/Phtg7_Ig8gw/s1600/Screen%2Bshot%2B2011-06-10%2Bat%2B4.40.31%2BPM%2B%25282%2529.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://4.bp.blogspot.com/-5W6MPz4YwXI/TfHZq1OZeDI/AAAAAAAAAl0/Phtg7_Ig8gw/s400/Screen%2Bshot%2B2011-06-10%2Bat%2B4.40.31%2BPM%2B%25282%2529.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5616509540172920882" /&gt;&lt;/a&gt;&lt;br /&gt;From our "coming soon" game...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-620025190082619488?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/620025190082619488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=620025190082619488' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/620025190082619488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/620025190082619488'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/06/glowy-things.html' title='Glowy Things.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-5W6MPz4YwXI/TfHZq1OZeDI/AAAAAAAAAl0/Phtg7_Ig8gw/s72-c/Screen%2Bshot%2B2011-06-10%2Bat%2B4.40.31%2BPM%2B%25282%2529.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-416912550855346255</id><published>2011-06-10T11:39:00.004+08:00</published><updated>2011-06-10T16:47:19.082+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>Beautiful Planets.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-nTYjNLBk7BI/TfGSMYfOUpI/AAAAAAAAAls/ydLEiPJd5U0/s1600/Screen%2Bshot%2B2011-06-10%2Bat%2B11.26.16%2BAM%2B%25282%2529.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://3.bp.blogspot.com/-nTYjNLBk7BI/TfGSMYfOUpI/AAAAAAAAAls/ydLEiPJd5U0/s400/Screen%2Bshot%2B2011-06-10%2Bat%2B11.26.16%2BAM%2B%25282%2529.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5616430951737217682" /&gt;&lt;/a&gt;&lt;br /&gt;This planet has city lights, an atmosphere layer and polar regions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-416912550855346255?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/416912550855346255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=416912550855346255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/416912550855346255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/416912550855346255'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/06/beautiful-planets.html' title='Beautiful Planets.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-nTYjNLBk7BI/TfGSMYfOUpI/AAAAAAAAAls/ydLEiPJd5U0/s72-c/Screen%2Bshot%2B2011-06-10%2Bat%2B11.26.16%2BAM%2B%25282%2529.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1803497864735387374</id><published>2011-06-03T09:22:00.001+08:00</published><updated>2011-06-03T09:24:05.983+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>Facebook.</title><content type='html'>&lt;center&gt;&lt;iframe width="320" height="200" src="http://www.youtube.com/embed/8UouP8cRYZ8" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1803497864735387374?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1803497864735387374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1803497864735387374' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1803497864735387374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1803497864735387374'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/06/facebook.html' title='Facebook.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/8UouP8cRYZ8/default.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8109421129018218044</id><published>2011-05-28T09:48:00.003+08:00</published><updated>2011-05-28T09:50:42.182+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>Simple SVG.</title><content type='html'>So simple, it is silly. &lt;a href="https://github.com/simonwittber/SillySVG"&gt;SillySVG&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var svg = new SVG();&lt;br /&gt;svg.circle().attr({r:20,stroke:"black",fill:"none"}).transform.translate(100,100);&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8109421129018218044?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8109421129018218044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8109421129018218044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8109421129018218044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8109421129018218044'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/05/simple-svg.html' title='Simple SVG.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2661894506680762808</id><published>2011-05-22T09:54:00.002+08:00</published><updated>2011-05-22T10:06:26.582+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Fun and Games in Boston</title><content type='html'>After three days of heavy fog, two days of bleary jet lag and one day of the lurgy, the sun came out today. So far I've met with quite a few interesting characters. &lt;a href="http://owlchemylabs.com/"&gt;Alex Schwartz&lt;/a&gt; of "Smuggle^H^H^H^H^H^Hnuggle Truck" fame, Ned Batchelder (an altogether nice chap) and today I had the good fortune to have lunch with Glyph Lefkowitz and Jp Calderone who assured me that Apple is not the Evil Empire we might think it is, and that PyPy is the future, as long as we can get build times down.&lt;br /&gt;&lt;br /&gt;I'll be home in three days, and I'm super-keen to get back into some coding, and maybe have a crack at breathing life into some of my old projects. Oh, and start compiling PyPy trunk. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2661894506680762808?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2661894506680762808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2661894506680762808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2661894506680762808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2661894506680762808'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/05/fun-and-games-in-boston.html' title='Fun and Games in Boston'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-434057800307349166</id><published>2011-05-12T15:49:00.001+08:00</published><updated>2011-05-18T23:26:59.868+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Python Hackers in Boston</title><content type='html'>I'm in Boston MA next week, looking to hire some awesome Python hackers to help open a new game development studio. We use Python for our game server, and Unity3D/C# for the game client. It is an amazing project with an existing international team based in Perth, Western Australia.&lt;br /&gt;&lt;br /&gt;If you're interested, in Boston and want to chat, drop me an email at simonwittber@differentmethods.com and we can arrange a time and place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-434057800307349166?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/434057800307349166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=434057800307349166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/434057800307349166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/434057800307349166'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/05/python-hackers-in-boston.html' title='Python Hackers in Boston'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2901512423564434867</id><published>2011-05-11T13:09:00.002+08:00</published><updated>2011-05-11T13:09:52.236+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>Schweet In Game Render</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-of2tenmQgJQ/TcoaC8WAOQI/AAAAAAAAAlg/Pxg6P9Ig5b4/s1600/Grab%2B6485x4720%2BWednesday%2BMay%2B11%2B2011%2B12_53_49.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 291px;" src="http://4.bp.blogspot.com/-of2tenmQgJQ/TcoaC8WAOQI/AAAAAAAAAlg/Pxg6P9Ig5b4/s400/Grab%2B6485x4720%2BWednesday%2BMay%2B11%2B2011%2B12_53_49.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5605321324076480770" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2901512423564434867?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2901512423564434867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2901512423564434867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2901512423564434867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2901512423564434867'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/05/schweet-in-game-render.html' title='Schweet In Game Render'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-of2tenmQgJQ/TcoaC8WAOQI/AAAAAAAAAlg/Pxg6P9Ig5b4/s72-c/Grab%2B6485x4720%2BWednesday%2BMay%2B11%2B2011%2B12_53_49.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1371628176486370165</id><published>2011-05-11T10:40:00.001+08:00</published><updated>2011-05-11T10:42:01.514+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Python in Unity3D</title><content type='html'>&lt;a href="http://u3d.as/content/noam-gat/python-interpreter/1Qb"&gt;This is amazing&lt;/a&gt;. My two favourite technologies working together.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1371628176486370165?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1371628176486370165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1371628176486370165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1371628176486370165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1371628176486370165'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/05/python-in-unity3d.html' title='Python in Unity3D'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-9092371300618290154</id><published>2011-05-09T21:09:00.006+08:00</published><updated>2011-05-09T22:49:10.650+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Adding Methods without Inheritance</title><content type='html'>Did you know that C# will let you add methods to objects, without needing to write new sub-classes? I didn't until today. The following snippet adds a new method to generic list instances, called Shuffle, which randomises the items in the list.&lt;br /&gt;&lt;pre&gt;static class ExtensionMethods {&lt;br /&gt; &lt;br /&gt; public static void Shuffle&lt;T&gt;(this IList&lt;T&gt; list)  &lt;br /&gt; {  &lt;br /&gt;     var rand = new System.Random();&lt;br /&gt;     int n = list.Count;  &lt;br /&gt;     while (n &gt; 1) {  &lt;br /&gt;         n--;  &lt;br /&gt;         int k = rand.Next(n + 1);  &lt;br /&gt;         T value = list[k];  &lt;br /&gt;         list[k] = list[n];  &lt;br /&gt;         list[n] = value;  &lt;br /&gt;     }  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Is this possible in Python? I think it is, but i need to experiment with some code first... stay tuned.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Of course you can do this in Python, but it won't work on built in types.&lt;br /&gt;&lt;pre&gt;&gt;&gt;&gt; import random&lt;br /&gt;&gt;&gt;&gt; &lt;br /&gt;&gt;&gt;&gt; x = range(10)&lt;br /&gt;&gt;&gt;&gt; def shuffle(self):&lt;br /&gt;...  random.shuffle(self)&lt;br /&gt;... &lt;br /&gt;&gt;&gt;&gt; list.shuffle = shuffle&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;stdin&gt;", line 1, in &lt;module&gt;&lt;br /&gt;TypeError: can't set attributes of built-in/extension type 'list'&lt;br /&gt;&gt;&gt;&gt; class List(list): pass&lt;br /&gt;... &lt;br /&gt;&gt;&gt;&gt; n = List(x)&lt;br /&gt;&gt;&gt;&gt; List.shuffle = shuffle&lt;br /&gt;&gt;&gt;&gt; n.shuffle()&lt;br /&gt;&gt;&gt;&gt; n&lt;br /&gt;[5, 3, 7, 4, 2, 9, 1, 6, 0, 8]&lt;br /&gt;&gt;&gt;&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-9092371300618290154?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/9092371300618290154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=9092371300618290154' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/9092371300618290154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/9092371300618290154'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/05/adding-methods-without-inheritance.html' title='Adding Methods without Inheritance'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7338215088266665762</id><published>2011-05-05T14:21:00.003+08:00</published><updated>2011-05-05T14:27:03.779+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Model-Off, Next Week.</title><content type='html'>Next week in the Different Methods office, we're having a model-off.&lt;br /&gt;&lt;br /&gt;What is a model-off? Well, we all love our respective modelling software. Except Lisa, I think she just tolerates Cheetah 3D :-). Anyhow, we're going to all tackle the same model, and see who produces the best quality model, balanced with the time spent to build it. No texturing required, just polygons!&lt;br /&gt;&lt;br /&gt;Simon - Wings3D&lt;br /&gt;Stephen - Maya&lt;br /&gt;Nicholas - 3D Studio&lt;br /&gt;Lisa - Cheetah3D&lt;br /&gt;&lt;br /&gt;Which package will reign supreme? Stay tuned for the results! We'll probably release a Unity web player showing the results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7338215088266665762?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7338215088266665762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7338215088266665762' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7338215088266665762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7338215088266665762'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/05/model-off-next-week.html' title='Model-Off, Next Week.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-4397113342947271420</id><published>2011-05-04T11:02:00.002+08:00</published><updated>2011-05-04T11:03:01.705+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>...!!?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-vvcwgy0ZsIo/TcDB1Qy2N9I/AAAAAAAAAlY/4EiZxzznwkA/s1600/IMAG0001.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 265px;" src="http://2.bp.blogspot.com/-vvcwgy0ZsIo/TcDB1Qy2N9I/AAAAAAAAAlY/4EiZxzznwkA/s400/IMAG0001.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5602691057234360274" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-4397113342947271420?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/4397113342947271420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=4397113342947271420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4397113342947271420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4397113342947271420'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/05/blog-post.html' title='...!!?'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-vvcwgy0ZsIo/TcDB1Qy2N9I/AAAAAAAAAlY/4EiZxzznwkA/s72-c/IMAG0001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-5483002716233409979</id><published>2011-04-29T22:59:00.004+08:00</published><updated>2011-04-29T23:04:20.778+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Markov Name Generator</title><content type='html'>I use something like this to generate names for stars and planets in my procedural universe game thingo.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;import random&lt;br /&gt;&lt;br /&gt;class Markov(object):&lt;br /&gt;    def __init__(self, samples, order, minLength):&lt;br /&gt;        self.order = order&lt;br /&gt;        self.minLength = minLength&lt;br /&gt;        self.chains = {}&lt;br /&gt;        self.used = []&lt;br /&gt;        self.samples = [i.strip().upper() for i in samples if len(i) &gt; order]&lt;br /&gt;        for word in self.samples:&lt;br /&gt;            for letter in xrange(len(word)-order):&lt;br /&gt;                token = word[letter:letter+order]&lt;br /&gt;                entries = self.chains.setdefault(token, list())&lt;br /&gt;                entries.append(word[letter + order])&lt;br /&gt;&lt;br /&gt;    def next(self):&lt;br /&gt;        s = ""; &lt;br /&gt;        while True:&lt;br /&gt;            n = random.choice(self.samples)&lt;br /&gt;            i = random.randint(0, len(n) - self.order)&lt;br /&gt;            s = n[i:i+self.order]&lt;br /&gt;            while len(s) &lt; len(n):&lt;br /&gt;                i = random.randint(0, len(s) - self.order)&lt;br /&gt;                token = s[i:i+self.order]&lt;br /&gt;                if token not in self.chains:&lt;br /&gt;                    break &lt;br /&gt;                s += random.choice(self.chains[token])&lt;br /&gt;            s = s[0] + s[1:].lower()&lt;br /&gt;            if not (s in self.samples or s in self.used or len(s) &lt; self.minLength):&lt;br /&gt;                break&lt;br /&gt;        self.used.append(s);&lt;br /&gt;        return s;&lt;br /&gt;&lt;br /&gt;    def reset(self):&lt;br /&gt;        self.used.Clear()&lt;/pre&gt;&lt;br /&gt;You  can seed it with any data you like to generate any sort of name. Eg:&lt;br /&gt;&lt;pre&gt;starnames = """&lt;br /&gt;Achernar Alpha Eridani \&lt;br /&gt;Achird Eta Cassiopeiae \&lt;br /&gt;Acrab Beta Scorpii \&lt;br /&gt;Acrux Alpha Crucis \&lt;br /&gt;Acubens Alpha Cancri \&lt;br /&gt;Adhafera Zeta Leonis \&lt;br /&gt;Adhara Epsilon Canis Majoris \&lt;br /&gt;Ain Epsilon Tauri \&lt;br /&gt;Aladfar Eta Lyrae \&lt;br /&gt;Alamak Gamma Andromedae \&lt;br /&gt;Alathfar Mu Lyrae \&lt;br /&gt;Alaraph Beta Virginis \&lt;br /&gt;Albaldah Pi Sagittarii \&lt;br /&gt;""".split(" ")&lt;br /&gt;&lt;br /&gt;m = Markov(starnames, 2, 6)&lt;br /&gt;for i in xrange(10):&lt;br /&gt;    print m.next()&lt;/pre&gt;&lt;br /&gt;Gives this output:&lt;br /&gt;&lt;pre&gt;Siolphh&lt;br /&gt;Hafere&lt;br /&gt;Ammaam&lt;br /&gt;Ammaka&lt;br /&gt;Ittatartar&lt;br /&gt;Chieri&lt;br /&gt;Scooor&lt;br /&gt;Araineaa&lt;br /&gt;Feriisda&lt;br /&gt;Achuih&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-5483002716233409979?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/5483002716233409979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=5483002716233409979' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5483002716233409979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5483002716233409979'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/markov-name-generator.html' title='Markov Name Generator'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-3834835146606870339</id><published>2011-04-29T12:01:00.003+08:00</published><updated>2011-04-29T12:04:47.062+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>New Procedural Planet Generator Released.</title><content type='html'>The procedural planet package has been updated to version 1.4, and you can &lt;a href="http://www.differentmethods.com/packages/ProceduralPlanet.html"&gt;see the new demo here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It features better city light control, better water control, a sun shader, many more planet texture ramps and a nice skybox cubemap.&lt;br /&gt;&lt;br /&gt;The package is still pending release on the Unity Asset store, and should be available in a few days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-3834835146606870339?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/3834835146606870339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=3834835146606870339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3834835146606870339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3834835146606870339'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/new-procedural-planet-generator.html' title='New Procedural Planet Generator Released.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7091239134884144569</id><published>2011-04-27T14:53:00.002+08:00</published><updated>2011-04-27T14:54:48.735+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>7 Bit Integer compression, in Python.</title><content type='html'>&lt;pre&gt;def decode7bit(bytes):&lt;br /&gt;    bytes = list(bytes)&lt;br /&gt;    value = 0&lt;br /&gt;    shift = 0&lt;br /&gt;    while True:&lt;br /&gt;        byteval = ord(bytes.pop(0))&lt;br /&gt;        if(byteval &amp; 128) == 0: break&lt;br /&gt;        value |= ((byteval &amp; 0x7F) &lt;&lt; shift)&lt;br /&gt;        shift += 7&lt;br /&gt;    return (value | (byteval &lt;&lt; shift))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def encode7bit(value):&lt;br /&gt;    temp = value&lt;br /&gt;    bytes = ""&lt;br /&gt;    while temp &gt;= 128:&lt;br /&gt;        bytes += chr(0x000000FF &amp; (temp | 0x80))&lt;br /&gt;        temp &gt;&gt;= 7&lt;br /&gt;    bytes += chr(temp)&lt;br /&gt;    return bytes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;x = encode7bit(345)&lt;br /&gt;print decode7bit(x)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7091239134884144569?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7091239134884144569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7091239134884144569' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7091239134884144569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7091239134884144569'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/7-bit-integer-compression-in-python.html' title='7 Bit Integer compression, in Python.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1111242154257946396</id><published>2011-04-27T00:22:00.005+08:00</published><updated>2011-04-27T00:27:32.435+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Public and Private in Python?</title><content type='html'>I've just finished refactoring an awful C# class. I had been delaying the job for a while because I didn't want to do it.&lt;br /&gt;&lt;br /&gt;Then, while staring at the code, I realised I could simply delete all the private methods and fields, leaving the public interface intact, and then re-implement the class in a much cleaner way. Great idea! I finished the job in a few hours, with a brand new class that doesn't give me a headache.&lt;br /&gt;&lt;br /&gt;This is the first time I've actually seen a real value in having private and public scope for methods and variables. It makes refactoring much safer and easier! So... why don't we have them in Python?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1111242154257946396?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1111242154257946396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1111242154257946396' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1111242154257946396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1111242154257946396'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/public-and-private-in-python.html' title='Public and Private in Python?'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7264208672328190951</id><published>2011-04-23T08:47:00.003+08:00</published><updated>2011-04-23T09:00:10.314+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Encryption between Python and C#</title><content type='html'>I do a lot of work in restricted environments, where I still need to secure internet traffic. I chose to use the RC4 algorithm because it is simple to implement and relatively fast. It is actually easy enough that a simple programmer like myself could write matching Python and C# implementations! &lt;br /&gt;&lt;br /&gt;RC4 is also a stream cipher, which means you don't need to worry about breaking your cleartext into blocks, padding them out... and other related pain.&lt;br /&gt;&lt;br /&gt;If you do use RC4, you should be &lt;a href="http://en.wikipedia.org/wiki/RC4"&gt;aware that it has some vulnerabilities&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Python:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;def RC4(data, key):&lt;br /&gt;    x = 0 &lt;br /&gt;    s = range(256)&lt;br /&gt;    for i in range(256):&lt;br /&gt;        x = (x + s[i] + ord(key[i % len(key)])) % 256 &lt;br /&gt;        s[i], s[x] = s[x], s[i]&lt;br /&gt;    x = y = 0 &lt;br /&gt;    out = ""&lt;br /&gt;    for c in data:&lt;br /&gt;        x = (x + 1) % 256 &lt;br /&gt;        y = (y + s[x]) % 256 &lt;br /&gt;        s[x], s[y] = s[y], s[x]&lt;br /&gt;        out += chr(ord(c) ^ s[(s[x] + s[y]) % 256])&lt;br /&gt;    return out&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;C#:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;using System;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class RC4&lt;br /&gt;{   &lt;br /&gt;    static public void Cipher (ref byte[] bytes, string skey)&lt;br /&gt;    {   &lt;br /&gt;        var key = System.Text.ASCIIEncoding.ASCII.GetBytes(skey);&lt;br /&gt;        byte[] s = new byte[256];&lt;br /&gt;        byte[] k = new byte[256];&lt;br /&gt;        byte temp;&lt;br /&gt;        int i, j;&lt;br /&gt;&lt;br /&gt;        for (i = 0; i &lt; 256; i++) {&lt;br /&gt;            s[i] = (byte)i;&lt;br /&gt;            k[i] = key[i % key.GetLength (0)];&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        j = 0;&lt;br /&gt;        for (i = 0; i &lt; 256; i++) {&lt;br /&gt;            j = (j + s[i] + k[i]) % 256;&lt;br /&gt;            temp = s[i];&lt;br /&gt;            s[i] = s[j];&lt;br /&gt;            s[j] = temp;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        i = j = 0;&lt;br /&gt;        for (int x = 0; x &lt; bytes.GetLength (0); x++) {&lt;br /&gt;            i = (i + 1) % 256;&lt;br /&gt;            j = (j + s[i]) % 256;&lt;br /&gt;            temp = s[i];&lt;br /&gt;            s[i] = s[j];&lt;br /&gt;            s[j] = temp;&lt;br /&gt;            int t = (s[i] + s[j]) % 256;&lt;br /&gt;            bytes[x] ^= s[t];&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7264208672328190951?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7264208672328190951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7264208672328190951' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7264208672328190951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7264208672328190951'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/encryption-between-python-and-c.html' title='Encryption between Python and C#'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1741530090265845082</id><published>2011-04-21T11:17:00.002+08:00</published><updated>2011-04-21T11:20:57.937+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>Russians.</title><content type='html'>My favourite quote from a user bio on &lt;a href="http://www.freelancer.com/"&gt;freelancer.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;It is sayd: "if problem is easy then your local programmers can solve it; if problem is difficult then you should hire programmers from India; but if your problem is impossible to solve you must hire Russian." &lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1741530090265845082?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1741530090265845082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1741530090265845082' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1741530090265845082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1741530090265845082'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/russians.html' title='Russians.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-6125575899855000421</id><published>2011-04-17T15:39:00.003+08:00</published><updated>2011-04-17T15:46:43.794+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Sweet Python Syntax</title><content type='html'>I've been writing Python code for quite a while, yet sometimes I still get surprised by some neat undiscovered feature. This is what I found today. The neat part is where the tuple is unpacked inplace in the for statement.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;things = {}&lt;br /&gt;things[1] = (2,3)&lt;br /&gt;things[2] = (4,5)&lt;br /&gt;&lt;br /&gt;for id, (A, B) in things.items():&lt;br /&gt;    print id, A, B&lt;/pre&gt;&lt;br /&gt;I could be wrong, but I vaguely recall trying this once, and it not working. Now it does!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-6125575899855000421?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/6125575899855000421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=6125575899855000421' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6125575899855000421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6125575899855000421'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/sweet-python-syntax.html' title='Sweet Python Syntax'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-6903379980937779240</id><published>2011-04-15T10:22:00.001+08:00</published><updated>2011-04-15T10:24:59.156+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>If you hadn't already guessed...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-on0jUvbpFu8/TaesNXKGj-I/AAAAAAAAAlM/kSpLmoNT6UM/s1600/Screen%2Bshot%2B2011-04-13%2Bat%2B7.59.59%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 212px;" src="http://1.bp.blogspot.com/-on0jUvbpFu8/TaesNXKGj-I/AAAAAAAAAlM/kSpLmoNT6UM/s400/Screen%2Bshot%2B2011-04-13%2Bat%2B7.59.59%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5595630407585796066" /&gt;&lt;/a&gt;&lt;br /&gt;... I really like spacecraft. :-) Another shot of our game models, rendered in-engine (Unity3D).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-6903379980937779240?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/6903379980937779240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=6903379980937779240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6903379980937779240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6903379980937779240'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/if-you-hadnt-already-guessed.html' title='If you hadn&apos;t already guessed...'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-on0jUvbpFu8/TaesNXKGj-I/AAAAAAAAAlM/kSpLmoNT6UM/s72-c/Screen%2Bshot%2B2011-04-13%2Bat%2B7.59.59%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7221228964260334463</id><published>2011-04-12T13:37:00.006+08:00</published><updated>2011-04-12T19:02:29.098+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Weather Geeks...</title><content type='html'>Can you tell me if the &lt;a href="http://www.longrangeweather.com/global_temperatures.htm"&gt;chart on this page&lt;/a&gt; is correct? If so, how to they get the data for the more ancient measurements? I'd like to use this data in a Python script I'm tinkering with...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt;Evidence in the comments suggest this site is not trustworthy. There is better information linked in the comments, &lt;a href="https://secure.wikimedia.org/wikipedia/en/wiki/File:Satellite_Temperatures.png"&gt;including this interesting graph&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7221228964260334463?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7221228964260334463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7221228964260334463' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7221228964260334463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7221228964260334463'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/weather-geeks.html' title='Weather Geeks...'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-9106404485621518570</id><published>2011-04-11T21:33:00.004+08:00</published><updated>2011-04-12T08:00:39.922+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>AI for Unity3D</title><content type='html'>I'm about to release a tool called React. It implements behaviour trees for Unity3D.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=WZXZeohZyc4"&gt;Here is the obligatory screencast&lt;/a&gt;. I hope this is as easy to use as I think it is! It makes the designer specify what actions and conditions are available on the game object, before the programmer implements them. &lt;br /&gt;&lt;br /&gt;The first step is to create a React Graph using the React Editor. The graph consists of selectors, sequences, actions, conditions and many other different node types. This graph is serialized into an asset so that it can be used by multiple game objects.&lt;br /&gt; &lt;br /&gt;The second step is generating the C# script. This is as simple as clicking the generate button. The generated file contains stubs for the actions and conditions used in the behaviour tree. The body of these stubs is then filled in with appropriate code, and voila, you have an intelligent object.&lt;br /&gt;&lt;br /&gt;It should be fully baked any day now, stay tuned!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; &lt;a href="http://u3d.as/content/different-methods/react/1D5"&gt;Now available on the asset store.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-9106404485621518570?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/9106404485621518570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=9106404485621518570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/9106404485621518570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/9106404485621518570'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/ai-for-unity3d.html' title='AI for Unity3D'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-468387668758488462</id><published>2011-04-08T11:19:00.003+08:00</published><updated>2011-04-08T13:10:32.874+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Pyramid vs NodeJS vs Gevent</title><content type='html'>Summary: NodeJS wins.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test Program&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;ab -n 10000 -c 5 http://localhost/&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Gevent Code&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;from gevent import wsgi&lt;br /&gt;&lt;br /&gt;class WebServer(object): &lt;br /&gt;    def application(self, environ, start_response):&lt;br /&gt;        start_response("200 OK", []) &lt;br /&gt;        return ["Hello world!"]&lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;    app = WebServer()&lt;br /&gt;    wsgi.WSGIServer(('', 8888), app.application, backlog=1024).serve_forever()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pyramid Code&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;from pyramid.config import Configurator&lt;br /&gt;from pyramid.response import Response&lt;br /&gt;from paste.httpserver import serve&lt;br /&gt;&lt;br /&gt;def hello_world(request):&lt;br /&gt;    return Response('Hello world!')&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    config = Configurator()&lt;br /&gt;    config.add_view(hello_world)&lt;br /&gt;    app = config.make_wsgi_app()&lt;br /&gt;    serve(app, host='0.0.0.0')&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;NodeJS Code&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;var http = require('http');&lt;br /&gt;http.createServer(function (req, res) {&lt;br /&gt;  res.writeHead(200, {'Content-Type': 'text/plain'});&lt;br /&gt;  res.end('Hello World\n');&lt;br /&gt;}).listen(8124, "127.0.0.1");&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Gevent Results&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;Time taken for tests:   3.255 seconds&lt;br /&gt;Complete requests:      10000&lt;br /&gt;Failed requests:        0&lt;br /&gt;Write errors:           0&lt;br /&gt;Requests per second:    3072.53&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pyramid Results&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;Concurrency Level:      5&lt;br /&gt;Time taken for tests:   14.650 seconds&lt;br /&gt;Complete requests:      10000&lt;br /&gt;Failed requests:        0&lt;br /&gt;Write errors:           0&lt;br /&gt;Requests per second:    682.57&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;NodeJS Results&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;Concurrency Level:      5&lt;br /&gt;Time taken for tests:   2.953 seconds&lt;br /&gt;Complete requests:      10000&lt;br /&gt;Failed requests:        0&lt;br /&gt;Write errors:           0&lt;br /&gt;Requests per second:    3386.80&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-468387668758488462?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/468387668758488462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=468387668758488462' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/468387668758488462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/468387668758488462'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/pyramid-vs-nodejs_08.html' title='Pyramid vs NodeJS vs Gevent'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8367604450765873383</id><published>2011-04-05T15:28:00.004+08:00</published><updated>2011-04-05T16:35:21.577+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>You know you've made something good...</title><content type='html'>...&lt;a href="http://forum.cgpersia.com/f20/spacebox-unity3d-29361/"&gt;when dudes want to pirate your gear&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8367604450765873383?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8367604450765873383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8367604450765873383' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8367604450765873383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8367604450765873383'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/you-know-youve-made-something-good.html' title='You know you&apos;ve made something good...'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1502248017906301832</id><published>2011-04-05T15:22:00.003+08:00</published><updated>2011-04-05T15:30:29.548+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>The perks of working on games...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-A0_UQ4aV9ps/TZrDdtVSErI/AAAAAAAAAkk/nz2tguuHG1c/s1600/Screen%2Bshot%2B2011-04-05%2Bat%2B3.14.08%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 197px;" src="http://1.bp.blogspot.com/-A0_UQ4aV9ps/TZrDdtVSErI/AAAAAAAAAkk/nz2tguuHG1c/s400/Screen%2Bshot%2B2011-04-05%2Bat%2B3.14.08%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5591996802486375090" /&gt;&lt;/a&gt;&lt;br /&gt;You get to make really cool stuff.&lt;br /&gt;&lt;br /&gt;These models were built by Nic, our new hire. The shader on the ships is a custom specular / bumped / reflective / illuminated beast, and the skybox is generated by our &lt;a href="http://u3d.as/content/different-methods/spacebox-/1vh"&gt;Spacebox&lt;/a&gt; tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1502248017906301832?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1502248017906301832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1502248017906301832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1502248017906301832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1502248017906301832'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/perks-of-working-on-games.html' title='The perks of working on games...'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-A0_UQ4aV9ps/TZrDdtVSErI/AAAAAAAAAkk/nz2tguuHG1c/s72-c/Screen%2Bshot%2B2011-04-05%2Bat%2B3.14.08%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8347887241822069809</id><published>2011-04-01T15:46:00.002+08:00</published><updated>2011-04-01T15:47:32.789+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>...??!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-QI_cZ6kKbnc/TZWDAy9KouI/AAAAAAAAAkc/TfosJX3EmJk/s1600/IMG_1659.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 316px; height: 400px;" src="http://1.bp.blogspot.com/-QI_cZ6kKbnc/TZWDAy9KouI/AAAAAAAAAkc/TfosJX3EmJk/s400/IMG_1659.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5590518562151899874" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8347887241822069809?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8347887241822069809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8347887241822069809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8347887241822069809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8347887241822069809'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/04/blog-post.html' title='...??!!'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-QI_cZ6kKbnc/TZWDAy9KouI/AAAAAAAAAkc/TfosJX3EmJk/s72-c/IMG_1659.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2547542985185871127</id><published>2011-03-30T09:56:00.002+08:00</published><updated>2011-03-30T09:58:41.213+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Google Analytics and Unity3D</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-MKX3WaEOlaE/TZKOSbDAorI/AAAAAAAAAkU/_MAvnIa4yCo/s1600/AnalyticsIcon.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 128px; height: 128px;" src="http://2.bp.blogspot.com/-MKX3WaEOlaE/TZKOSbDAorI/AAAAAAAAAkU/_MAvnIa4yCo/s200/AnalyticsIcon.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5589686534669378226" /&gt;&lt;/a&gt;&lt;br /&gt;We've just released an extension which enables your Unity3D game to post data off to Google Analytics.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://u3d.as/content/different-methods/analytics/1CA"&gt;It's called Analytics&lt;/a&gt;, funnily enough.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2547542985185871127?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2547542985185871127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2547542985185871127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2547542985185871127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2547542985185871127'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/03/google-analytics-and-unity3d.html' title='Google Analytics and Unity3D'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-MKX3WaEOlaE/TZKOSbDAorI/AAAAAAAAAkU/_MAvnIa4yCo/s72-c/AnalyticsIcon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1084370746802849912</id><published>2011-03-25T20:06:00.003+08:00</published><updated>2011-03-26T17:08:48.385+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Unity3D and Linux.</title><content type='html'>It can be done, didn't you know? In fact, the smart folks at UT &lt;a href="http://blogs.unity3d.com/2011/03/24/ninjacamp-iii-foxes-and-penguins-unite/"&gt;have already done it&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I hope this makes the leap from prototype to production.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1084370746802849912?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1084370746802849912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1084370746802849912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1084370746802849912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1084370746802849912'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/03/unity3d-and-linux.html' title='Unity3D and Linux.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8565744628807136744</id><published>2011-03-22T11:29:00.005+08:00</published><updated>2011-03-22T11:35:43.827+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>You cannot trust HTTP.</title><content type='html'>Our current project uses HTTP to communicate with the game server. Part of our code requires some custom metadata to be sent with the HTTP headers down to the client.&lt;br /&gt;&lt;br /&gt;Did you know you cannot rely on custom headers being delivered to your HTTP client? I didn't. It turns out some firewalls will only allow a whitelisted set of headers through to their clients, which I imagine will break many different web applications. To get around this, we've had to munge the metadata into the HTTP body, and pass things around with  query strings, turning something that was looking rather elegant, into a total abuse of HTTP.&lt;br /&gt;&lt;br /&gt;Sad face.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8565744628807136744?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8565744628807136744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8565744628807136744' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8565744628807136744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8565744628807136744'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/03/you-cannot-trust-http.html' title='You cannot trust HTTP.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-991368571914772188</id><published>2011-03-10T14:47:00.001+08:00</published><updated>2011-03-10T18:19:57.691+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>The Dark Side.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-PwCRsiID7MY/TXh0HeEoCgI/AAAAAAAAAj4/n1OrkxNAD-8/s1600/Screen%2Bshot%2B2011-03-10%2Bat%2B2.26.45%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="http://4.bp.blogspot.com/-PwCRsiID7MY/TXh0HeEoCgI/AAAAAAAAAj4/n1OrkxNAD-8/s400/Screen%2Bshot%2B2011-03-10%2Bat%2B2.26.45%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5582339409806100994" /&gt;&lt;/a&gt;Oooh look at all those lights! (You may have to zoom in to see what I'm talking about! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-991368571914772188?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/991368571914772188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=991368571914772188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/991368571914772188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/991368571914772188'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/03/dark-side.html' title='The Dark Side.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-PwCRsiID7MY/TXh0HeEoCgI/AAAAAAAAAj4/n1OrkxNAD-8/s72-c/Screen%2Bshot%2B2011-03-10%2Bat%2B2.26.45%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8939737002738335108</id><published>2011-03-09T19:00:00.005+08:00</published><updated>2011-03-10T18:19:57.692+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>Planet Atmospherics.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-0okBRhEdMrg/TXdeBaF5ajI/AAAAAAAAAjw/6DclvWJdboQ/s1600/Screen%2Bshot%2B2011-03-09%2Bat%2B7.00.23%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="http://4.bp.blogspot.com/-0okBRhEdMrg/TXdeBaF5ajI/AAAAAAAAAjw/6DclvWJdboQ/s400/Screen%2Bshot%2B2011-03-09%2Bat%2B7.00.23%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5582033641425955378" /&gt;&lt;/a&gt;&lt;br /&gt;My planets can now have &lt;a href="http://www.differentmethods.com/packages/ProceduralPlanet.html"&gt;procedural animated atmospheres&lt;/a&gt;.  This is not simple UV animation. The clouds form, twirl and evaporate over the planet surface! This will be available as a &lt;a href="http://u3d.as/content/different-methods/procedural-planet/1B5"&gt;free update on the Unity asset store&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8939737002738335108?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8939737002738335108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8939737002738335108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8939737002738335108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8939737002738335108'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/03/planet-atmospherics.html' title='Planet Atmospherics.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-0okBRhEdMrg/TXdeBaF5ajI/AAAAAAAAAjw/6DclvWJdboQ/s72-c/Screen%2Bshot%2B2011-03-09%2Bat%2B7.00.23%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7436325115595573427</id><published>2011-03-08T23:13:00.003+08:00</published><updated>2011-03-10T18:19:57.693+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>Procedural Texturing of Planets.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-kDvfyEIGpHQ/TXZH0vs7_pI/AAAAAAAAAjo/dW1jMcosal4/s1600/Screen%2Bshot%2B2011-03-08%2Bat%2B11.13.04%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 250px;" src="http://2.bp.blogspot.com/-kDvfyEIGpHQ/TXZH0vs7_pI/AAAAAAAAAjo/dW1jMcosal4/s400/Screen%2Bshot%2B2011-03-08%2Bat%2B11.13.04%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5581727759656025746" /&gt;&lt;/a&gt;&lt;br /&gt;Unity3D doesn't support volume textures. This makes procedural texturing of models using object or world space (instead of UV coords) very hard.&lt;br /&gt;&lt;br /&gt;After much banging of head on keyboard, I think I've succeeded in using a 2D noise texture to fake 3D noise, and create a reasonable looking planet texture. Next step, atmosphere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7436325115595573427?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7436325115595573427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7436325115595573427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7436325115595573427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7436325115595573427'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/03/procedural-texturing-of-planets.html' title='Procedural Texturing of Planets.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-kDvfyEIGpHQ/TXZH0vs7_pI/AAAAAAAAAjo/dW1jMcosal4/s72-c/Screen%2Bshot%2B2011-03-08%2Bat%2B11.13.04%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-3162673606754711300</id><published>2011-03-04T12:51:00.002+08:00</published><updated>2011-03-04T12:53:57.780+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Unity3D will run in the Flash Player.</title><content type='html'>&lt;a href="http://blogs.unity3d.com/2011/02/27/unity-flash-3d-on-the-web/"&gt;What the title says.&lt;/a&gt; This is a rather epic advance for Unity. Yes, the previous statement is an understatment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-3162673606754711300?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/3162673606754711300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=3162673606754711300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3162673606754711300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3162673606754711300'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/03/unity3d-will-run-in-flash-player.html' title='Unity3D will run in the Flash Player.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-3032626900101954356</id><published>2011-03-04T12:25:00.003+08:00</published><updated>2011-03-04T12:30:44.419+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Connect Unity3D to Google Spreadsheets.</title><content type='html'>I've just uploaded a package to the Unity Asset store, which allows you to easily source and cache data, in a secure manner, from a Google Spreadsheet!.&lt;br /&gt;&lt;br /&gt;It is called &lt;a href="http://u3d.as/content/different-methods/global-data/1Aw"&gt;GlobalData&lt;/a&gt;, and allows you to have truly global data across your game instances. You could use it to provide item stats, character stats or any kind of tabular data to your game, and you can even modify your core data after the game has been released.&lt;br /&gt;&lt;br /&gt;It caches data locally, so your players won't require a constant internet connection to play.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-3032626900101954356?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/3032626900101954356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=3032626900101954356' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3032626900101954356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3032626900101954356'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/03/connect-unity3d-to-google-spreadsheets.html' title='Connect Unity3D to Google Spreadsheets.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2878117936736223520</id><published>2011-03-03T10:35:00.002+08:00</published><updated>2011-03-03T10:38:06.174+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>SSL and Unity3D</title><content type='html'>I've just committed code to support &lt;a href="http://entitycrisis.blogspot.com/p/unityweb-www-alternative.html"&gt;HTTPS with UnityWeb&lt;/a&gt;, as well as a disk cache system. Hooray.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2878117936736223520?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2878117936736223520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2878117936736223520' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2878117936736223520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2878117936736223520'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/03/ssl-and-unity3d.html' title='SSL and Unity3D'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1386010742486129380</id><published>2011-03-01T14:11:00.004+08:00</published><updated>2011-03-01T14:19:24.820+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>Apple Extortion</title><content type='html'>A Macbook Pro in the US will cost me $3899 USD.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-J5HKZjtBAQw/TWyOJQskkiI/AAAAAAAAAjQ/UWNLyFe_CBo/s1600/mac_us.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 223px; height: 219px;" src="http://4.bp.blogspot.com/-J5HKZjtBAQw/TWyOJQskkiI/AAAAAAAAAjQ/UWNLyFe_CBo/s400/mac_us.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5578990328157082146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A Macbook Pro in Australia will cost me $4709 AUD.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-eWm2DmLEN5s/TWyOJouPfNI/AAAAAAAAAjY/rzuY1kT3nuA/s1600/mac_aus.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 188px; height: 214px;" src="http://4.bp.blogspot.com/-eWm2DmLEN5s/TWyOJouPfNI/AAAAAAAAAjY/rzuY1kT3nuA/s400/mac_aus.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5578990334606539986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;How many AUD will $3900 USD buy me?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-lS6Xxl25GtY/TWyOJ6l_FiI/AAAAAAAAAjg/XybljnBsKXk/s1600/mac_convers.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 103px;" src="http://1.bp.blogspot.com/-lS6Xxl25GtY/TWyOJ6l_FiI/AAAAAAAAAjg/XybljnBsKXk/s400/mac_convers.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5578990339403748898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;$3835 Australian Dollars. I get to pay $1k more just because I live in Australia. This is just wrong, especially when you consider we are so much closer to China, where all Apple stuff is built.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1386010742486129380?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1386010742486129380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1386010742486129380' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1386010742486129380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1386010742486129380'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/03/apple-extortion.html' title='Apple Extortion'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-J5HKZjtBAQw/TWyOJQskkiI/AAAAAAAAAjQ/UWNLyFe_CBo/s72-c/mac_us.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-4631072264661174697</id><published>2011-02-23T09:17:00.006+08:00</published><updated>2011-02-24T11:30:26.368+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Asset Store Update</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-aQ_Xsy-dn1g/TWRhgjq0AmI/AAAAAAAAAjI/cqYcPLiuSv0/s1600/city.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 138px;" src="http://1.bp.blogspot.com/-aQ_Xsy-dn1g/TWRhgjq0AmI/AAAAAAAAAjI/cqYcPLiuSv0/s200/city.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5576689450550035042" /&gt;&lt;/a&gt;We've got two new releases on the Unity Asset Store.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://u3d.as/content/different-methods/future-city-pack/1zY"&gt;Future City Pack&lt;/a&gt; by our new hire (awesome stuff) and &lt;a href="http://u3d.as/content/different-methods/bundle-loader/1zV"&gt;BundleLoader&lt;/a&gt;, a script to take the pain out of downloading and caching asset bundles. BundleLoader is free, because it saves so much pain, it can only make the world a happier place. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-4631072264661174697?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/4631072264661174697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=4631072264661174697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4631072264661174697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4631072264661174697'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/asset-store-update.html' title='Asset Store Update'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-aQ_Xsy-dn1g/TWRhgjq0AmI/AAAAAAAAAjI/cqYcPLiuSv0/s72-c/city.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-5913427314805996046</id><published>2011-02-19T10:46:00.002+08:00</published><updated>2011-02-19T10:48:46.333+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Unity3D supports Sony Xperia Play</title><content type='html'>Yes it is true, &lt;a href="http://www.gamasutra.com/view/news/33078/Interview_Unity_CEO_David_Helgason_Explains_Xperia_Union_More.php"&gt;Unity3D will support the Xperia Play&lt;/a&gt;. I know this will make many developers quite happy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-5913427314805996046?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/5913427314805996046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=5913427314805996046' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5913427314805996046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5913427314805996046'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/unity3d-supports-sony-xperia-play.html' title='Unity3D supports Sony Xperia Play'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-6438826717983591758</id><published>2011-02-13T14:26:00.003+08:00</published><updated>2011-03-10T18:19:57.694+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>Planet Shader V3.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-U3rWX7Z6Ow8/TVd5yYrS2JI/AAAAAAAAAig/DSXv-JrVzbM/s1600/Screen%2Bshot%2B2011-02-13%2Bat%2B1.13.25%2BAM.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 305px;" src="http://1.bp.blogspot.com/-U3rWX7Z6Ow8/TVd5yYrS2JI/AAAAAAAAAig/DSXv-JrVzbM/s400/Screen%2Bshot%2B2011-02-13%2Bat%2B1.13.25%2BAM.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5573056970418739346" /&gt;&lt;/a&gt;&lt;br /&gt;This shader is much better than my previous efforts.&lt;br /&gt;&lt;br /&gt;It has specular mapping, bump mapping and a fake atmospheric scattering effect, based on rim lighting. To get the partial crescent glow, I calculate the rim lighting based on the view direction plus a small component of the light direction. All in a single pass!&lt;br /&gt;&lt;br /&gt;This shader will be available in the Unity Asset Store in &lt;a href="http://u3d.as/content/different-methods-pty-ltd/spacebox-/1vh"&gt;version 1.5 of my Spacebox Extension&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-6438826717983591758?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/6438826717983591758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=6438826717983591758' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6438826717983591758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6438826717983591758'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/planet-shader-v3.html' title='Planet Shader V3.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-U3rWX7Z6Ow8/TVd5yYrS2JI/AAAAAAAAAig/DSXv-JrVzbM/s72-c/Screen%2Bshot%2B2011-02-13%2Bat%2B1.13.25%2BAM.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-753693472180765566</id><published>2011-02-12T13:03:00.005+08:00</published><updated>2011-03-10T18:19:57.695+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>Spacebox Released!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-oEGxdSf9ffc/TVYVxcIxpuI/AAAAAAAAAho/-lTU6A_4C6I/s1600/sb.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 255px;" src="http://3.bp.blogspot.com/-oEGxdSf9ffc/TVYVxcIxpuI/AAAAAAAAAho/-lTU6A_4C6I/s400/sb.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5572665528028341986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://u3d.as/content/different-methods-pty-ltd/spacebox-/1vh"&gt;Spacebox&lt;/a&gt; is a procedural content generator for space environments. The good news is, it is now available on the Unity Asset Store!&lt;br /&gt;&lt;br /&gt;You can try out out a demo on the web &lt;a href="http://www.differentmethods.com/packages/SpaceBox.html"&gt;over here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Spacebox generates seamless cube maps which you can use as a Skybox material in Unity3D. You can customise any number of star and nebulae layers with different textures and colours to produce a unique space environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-753693472180765566?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/753693472180765566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=753693472180765566' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/753693472180765566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/753693472180765566'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/spacebox-released.html' title='Spacebox Released!'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-oEGxdSf9ffc/TVYVxcIxpuI/AAAAAAAAAho/-lTU6A_4C6I/s72-c/sb.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-243101676001882455</id><published>2011-02-10T14:17:00.002+08:00</published><updated>2011-02-10T14:19:59.699+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Camera.layerCullDistances Tip.</title><content type='html'>This is a Unity3D tip.&lt;br /&gt;&lt;br /&gt;The Camera.layerCullDistances variable is an array of floats that allow you to have a custom farClipDistance per layer.&lt;br /&gt;&lt;br /&gt;Something that is not mentioned in the docs, however, is that the culling distance cannot be greater than your Camera.farClipPlane value. If it is, it will be clamped down to this value.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-243101676001882455?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/243101676001882455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=243101676001882455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/243101676001882455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/243101676001882455'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/cameralayerculldistances-tip.html' title='Camera.layerCullDistances Tip.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2971928121773460317</id><published>2011-02-08T12:06:00.004+08:00</published><updated>2011-02-08T12:13:04.093+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Ripple Shader</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1srVB7Ihd-8/TVDBy6zU2bI/AAAAAAAAAhg/eAnFG1feino/s1600/Screen%2Bshot%2B2011-02-08%2Bat%2B12.05.36%2BPM.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 261px;" src="http://2.bp.blogspot.com/_1srVB7Ihd-8/TVDBy6zU2bI/AAAAAAAAAhg/eAnFG1feino/s400/Screen%2Bshot%2B2011-02-08%2Bat%2B12.05.36%2BPM.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5571165819579455922" /&gt;&lt;/a&gt;&lt;br /&gt;Thank to &lt;a href="http://adrianboeing.blogspot.com/2011/02/ripple-effect-in-webgl.html"&gt;Adrian Boeing&lt;/a&gt; I was inspired this morning to hack together a ripple shader for Unity3D. Thanks for the math Adrian. You can see the animated effect &lt;a href="http://www.differentmethods.com/packages/Ripple.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre style='color:#000000;background:#ffffff;'&gt;Shader &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;DM/Ripple Shader&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;    Properties &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        _Color &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Color&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt; Color&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;        _MainTex &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Texture&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt; &lt;span style='color:#ffffff; background:#dd0000; font-weight:bold; font-style:italic; '&gt;2D&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;white&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        _Scale &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Scale&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt; Range&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#008000; '&gt;0.5&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt;&lt;span style='color:#008000; '&gt;500.0&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008000; '&gt;3.0&lt;/span&gt;&lt;br /&gt;        _Speed &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Speed&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt; Range&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;-&lt;/span&gt;&lt;span style='color:#008c00; '&gt;50&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt;&lt;span style='color:#008000; '&gt;50.0&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008000; '&gt;1.0&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;    SubShader &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        Tags &lt;span style='color:#800080; '&gt;{&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;RenderType&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Opaque&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt; &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        LOD &lt;span style='color:#008c00; '&gt;200&lt;/span&gt;&lt;br /&gt;        Cull Off&lt;br /&gt;        CGPROGRAM&lt;br /&gt;&lt;span style='color:#004a43; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;#&lt;/span&gt;&lt;span style='color:#004a43; font-weight:bold; '&gt;pragma &lt;/span&gt;&lt;span style='color:#bb7977; font-weight:bold; '&gt;surface surf Lambert&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#004a43; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;#&lt;/span&gt;&lt;span style='color:#004a43; '&gt;include &lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#40015a; '&gt;UnityCG.cginc&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        half4 _Color&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        half _Scale&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        half _Speed&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        sampler2D _MainTex&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;struct&lt;/span&gt; Input &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            float2 uv_MainTex&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;void&lt;/span&gt; surf &lt;span style='color:#808030; '&gt;(&lt;/span&gt;Input IN&lt;span style='color:#808030; '&gt;,&lt;/span&gt; inout SurfaceOutput o&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            half2 uv &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;IN&lt;span style='color:#808030; '&gt;.&lt;/span&gt;uv_MainTex &lt;span style='color:#808030; '&gt;-&lt;/span&gt; &lt;span style='color:#008000; '&gt;0.5&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;*&lt;/span&gt; _Scale&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            half r &lt;span style='color:#808030; '&gt;=&lt;/span&gt; sqrt &lt;span style='color:#808030; '&gt;(&lt;/span&gt;uv&lt;span style='color:#808030; '&gt;.&lt;/span&gt;x&lt;span style='color:#808030; '&gt;*&lt;/span&gt;uv&lt;span style='color:#808030; '&gt;.&lt;/span&gt;x &lt;span style='color:#808030; '&gt;+&lt;/span&gt; uv&lt;span style='color:#808030; '&gt;.&lt;/span&gt;y&lt;span style='color:#808030; '&gt;*&lt;/span&gt;uv&lt;span style='color:#808030; '&gt;.&lt;/span&gt;y&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            half z &lt;span style='color:#808030; '&gt;=&lt;/span&gt; sin &lt;span style='color:#808030; '&gt;(&lt;/span&gt;r&lt;span style='color:#808030; '&gt;+&lt;/span&gt;_Time&lt;span style='color:#808030; '&gt;[&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#808030; '&gt;*&lt;/span&gt;_Speed&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;/&lt;/span&gt; r&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            o&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Albedo &lt;span style='color:#808030; '&gt;=&lt;/span&gt; _Color&lt;span style='color:#808030; '&gt;.&lt;/span&gt;rgb &lt;span style='color:#808030; '&gt;*&lt;/span&gt; tex2D &lt;span style='color:#808030; '&gt;(&lt;/span&gt;_MainTex&lt;span style='color:#808030; '&gt;,&lt;/span&gt; IN&lt;span style='color:#808030; '&gt;.&lt;/span&gt;uv_MainTex&lt;span style='color:#808030; '&gt;+&lt;/span&gt;z&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;.&lt;/span&gt;rgb&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            o&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Alpha &lt;span style='color:#808030; '&gt;=&lt;/span&gt; _Color&lt;span style='color:#808030; '&gt;.&lt;/span&gt;a&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            o&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Normal &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;z&lt;span style='color:#808030; '&gt;,&lt;/span&gt; z&lt;span style='color:#808030; '&gt;,&lt;/span&gt; z&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        ENDCG&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt; &lt;br /&gt;    FallBack &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Diffuse&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2971928121773460317?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2971928121773460317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2971928121773460317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2971928121773460317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2971928121773460317'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/ripple-shader.html' title='Ripple Shader'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1srVB7Ihd-8/TVDBy6zU2bI/AAAAAAAAAhg/eAnFG1feino/s72-c/Screen%2Bshot%2B2011-02-08%2Bat%2B12.05.36%2BPM.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-3749693635296841570</id><published>2011-02-08T09:37:00.002+08:00</published><updated>2011-02-08T09:46:07.675+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Uniform Points On a Sphere</title><content type='html'>As promised, here is my code for creating a uniform set of points on a sphere.&lt;br /&gt;&lt;pre style='color:#000000;background:#ffffff;'&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; UnityEngine&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; System&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Collections&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Generic&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;public class PointsOnSphere &lt;span style='color:#800080; '&gt;:&lt;/span&gt; MonoBehaviour &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;    public GameObject prefab&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    public &lt;span style='color:#800000; font-weight:bold; '&gt;int&lt;/span&gt; count &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;10&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    public &lt;span style='color:#800000; font-weight:bold; '&gt;float&lt;/span&gt; size &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;20&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style='color:#808030; '&gt;[&lt;/span&gt;ContextMenu&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Create Points&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800000; font-weight:bold; '&gt;void&lt;/span&gt; Create &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        var points &lt;span style='color:#808030; '&gt;=&lt;/span&gt; UniformPointsOnSphere&lt;span style='color:#808030; '&gt;(&lt;/span&gt;count&lt;span style='color:#808030; '&gt;,&lt;/span&gt; size&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;for&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;var i&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt; i&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;count&lt;span style='color:#800080; '&gt;;&lt;/span&gt; i&lt;span style='color:#808030; '&gt;+&lt;/span&gt;&lt;span style='color:#808030; '&gt;+&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            var g &lt;span style='color:#808030; '&gt;=&lt;/span&gt; Instantiate&lt;span style='color:#808030; '&gt;(&lt;/span&gt;prefab&lt;span style='color:#808030; '&gt;,&lt;/span&gt; transform&lt;span style='color:#808030; '&gt;.&lt;/span&gt;position&lt;span style='color:#808030; '&gt;+&lt;/span&gt;points&lt;span style='color:#808030; '&gt;[&lt;/span&gt;i&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt; Quaternion&lt;span style='color:#808030; '&gt;.&lt;/span&gt;identity&lt;span style='color:#808030; '&gt;)&lt;/span&gt; as GameObject&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            g&lt;span style='color:#808030; '&gt;.&lt;/span&gt;transform&lt;span style='color:#808030; '&gt;.&lt;/span&gt;parent &lt;span style='color:#808030; '&gt;=&lt;/span&gt; transform&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    Vector3&lt;span style='color:#808030; '&gt;[&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt; UniformPointsOnSphere&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;float&lt;/span&gt; N&lt;span style='color:#808030; '&gt;,&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;float&lt;/span&gt; scale&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        var points &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new List&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;Vector3&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var i &lt;span style='color:#808030; '&gt;=&lt;/span&gt; Mathf&lt;span style='color:#808030; '&gt;.&lt;/span&gt;PI &lt;span style='color:#808030; '&gt;*&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;3&lt;/span&gt; &lt;span style='color:#808030; '&gt;-&lt;/span&gt; Mathf&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Sqrt&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;5&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var o &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt; &lt;span style='color:#808030; '&gt;/&lt;/span&gt; N&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;for&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;var k&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt; k&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;N&lt;span style='color:#800080; '&gt;;&lt;/span&gt; k&lt;span style='color:#808030; '&gt;+&lt;/span&gt;&lt;span style='color:#808030; '&gt;+&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            var y &lt;span style='color:#808030; '&gt;=&lt;/span&gt; k &lt;span style='color:#808030; '&gt;*&lt;/span&gt; o &lt;span style='color:#808030; '&gt;-&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt; &lt;span style='color:#808030; '&gt;+&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;o &lt;span style='color:#808030; '&gt;/&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            var r &lt;span style='color:#808030; '&gt;=&lt;/span&gt; Mathf&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Sqrt&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt; &lt;span style='color:#808030; '&gt;-&lt;/span&gt; y&lt;span style='color:#808030; '&gt;*&lt;/span&gt;y&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            var phi &lt;span style='color:#808030; '&gt;=&lt;/span&gt; k &lt;span style='color:#808030; '&gt;*&lt;/span&gt; i&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            points&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Add&lt;span style='color:#808030; '&gt;(&lt;/span&gt;new Vector3&lt;span style='color:#808030; '&gt;(&lt;/span&gt;Mathf&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Cos&lt;span style='color:#808030; '&gt;(&lt;/span&gt;phi&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;*&lt;/span&gt;r&lt;span style='color:#808030; '&gt;,&lt;/span&gt; y&lt;span style='color:#808030; '&gt;,&lt;/span&gt; Mathf&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Sin&lt;span style='color:#808030; '&gt;(&lt;/span&gt;phi&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;*&lt;/span&gt;r&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;*&lt;/span&gt; scale&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;return&lt;/span&gt; points&lt;span style='color:#808030; '&gt;.&lt;/span&gt;ToArray&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-3749693635296841570?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/3749693635296841570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=3749693635296841570' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3749693635296841570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3749693635296841570'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/uniform-points-on-sphere.html' title='Uniform Points On a Sphere'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-6741152893995308677</id><published>2011-02-07T14:45:00.007+08:00</published><updated>2011-02-07T20:27:05.231+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Per Vertex Ambient Occlusion</title><content type='html'>If you want to bake ambient occlusion into your mesh, here is one way to do it.&lt;br /&gt;&lt;br /&gt;This script modifies models on import if it has a filename that ends with "-AO". You can adjust the samples parameter to change the quality / time ratio. I find 1000 samples takes a few seconds, but still provides a good quality.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1srVB7Ihd-8/TU-VQWMkMPI/AAAAAAAAAhI/fRw1t-7r8Dk/s1600/vertexAI.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 218px;" src="http://3.bp.blogspot.com/_1srVB7Ihd-8/TU-VQWMkMPI/AAAAAAAAAhI/fRw1t-7r8Dk/s400/vertexAI.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5570835372149321970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre style='color:#000000;background:#ffffff;'&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; UnityEngine&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; UnityEditor&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; System&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Collections&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; System&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Collections&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Generic&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;class AddVertexAO &lt;span style='color:#800080; '&gt;:&lt;/span&gt; AssetPostprocessor&lt;br /&gt;&lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800000; font-weight:bold; '&gt;int&lt;/span&gt; samples &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1000&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#800000; font-weight:bold; '&gt;void&lt;/span&gt; OnPostprocessModel &lt;span style='color:#808030; '&gt;(&lt;/span&gt;GameObject go&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;go&lt;span style='color:#808030; '&gt;.&lt;/span&gt;name&lt;span style='color:#808030; '&gt;.&lt;/span&gt;EndsWith &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;-AO&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            AddAO &lt;span style='color:#808030; '&gt;(&lt;/span&gt;go&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#800000; font-weight:bold; '&gt;void&lt;/span&gt; AddAO &lt;span style='color:#808030; '&gt;(&lt;/span&gt;GameObject go&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        var mf &lt;span style='color:#808030; '&gt;=&lt;/span&gt; go&lt;span style='color:#808030; '&gt;.&lt;/span&gt;GetComponent&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;MeshFilter&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        mf&lt;span style='color:#808030; '&gt;.&lt;/span&gt;sharedMesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Optimize &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var co &lt;span style='color:#808030; '&gt;=&lt;/span&gt; go&lt;span style='color:#808030; '&gt;.&lt;/span&gt;GetComponent&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;MeshCollider&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var destoryCollider &lt;span style='color:#808030; '&gt;=&lt;/span&gt; co &lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt; null&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;co &lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt; null&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;            go&lt;span style='color:#808030; '&gt;.&lt;/span&gt;AddComponent&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;MeshCollider&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        var mesh &lt;span style='color:#808030; '&gt;=&lt;/span&gt; mf&lt;span style='color:#808030; '&gt;.&lt;/span&gt;sharedMesh&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var normals &lt;span style='color:#808030; '&gt;=&lt;/span&gt; mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;normals&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var vertices &lt;span style='color:#808030; '&gt;=&lt;/span&gt; mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;vertices&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;br /&gt;        var rotations &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new Vector3&lt;span style='color:#808030; '&gt;[&lt;/span&gt;samples&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        var radius &lt;span style='color:#808030; '&gt;=&lt;/span&gt; Mathf&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Max&lt;span style='color:#808030; '&gt;(&lt;/span&gt;mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;bounds&lt;span style='color:#808030; '&gt;.&lt;/span&gt;size&lt;span style='color:#808030; '&gt;.&lt;/span&gt;x&lt;span style='color:#808030; '&gt;,&lt;/span&gt; mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;bounds&lt;span style='color:#808030; '&gt;.&lt;/span&gt;size&lt;span style='color:#808030; '&gt;.&lt;/span&gt;y&lt;span style='color:#808030; '&gt;,&lt;/span&gt; mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;bounds&lt;span style='color:#808030; '&gt;.&lt;/span&gt;size&lt;span style='color:#808030; '&gt;.&lt;/span&gt;z&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;for&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;var i &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt; i &lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt; samples&lt;span style='color:#800080; '&gt;;&lt;/span&gt; i&lt;span style='color:#808030; '&gt;+&lt;/span&gt;&lt;span style='color:#808030; '&gt;+&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            rotations&lt;span style='color:#808030; '&gt;[&lt;/span&gt;i&lt;span style='color:#808030; '&gt;]&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; go&lt;span style='color:#808030; '&gt;.&lt;/span&gt;transform&lt;span style='color:#808030; '&gt;.&lt;/span&gt;position &lt;span style='color:#808030; '&gt;+&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;Random&lt;span style='color:#808030; '&gt;.&lt;/span&gt;onUnitSphere&lt;span style='color:#808030; '&gt;*&lt;/span&gt;radius&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        var nVertices &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new List&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;Vector3&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var nColors &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new List&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;Color&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var nNormals &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new List&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;Vector3&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var nTriangles &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new List&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;int&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        var index &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        foreach &lt;span style='color:#808030; '&gt;(&lt;/span&gt;var i in mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;triangles&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            var n &lt;span style='color:#808030; '&gt;=&lt;/span&gt; normals&lt;span style='color:#808030; '&gt;[&lt;/span&gt;i&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            var v &lt;span style='color:#808030; '&gt;=&lt;/span&gt; vertices&lt;span style='color:#808030; '&gt;[&lt;/span&gt;i&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            var c &lt;span style='color:#808030; '&gt;=&lt;/span&gt; Color&lt;span style='color:#808030; '&gt;.&lt;/span&gt;white&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            var hits &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#ffffff; background:#dd0000; font-weight:bold; font-style:italic; '&gt;0f&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            foreach&lt;span style='color:#808030; '&gt;(&lt;/span&gt;var s in rotations&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#800000; font-weight:bold; '&gt;if&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;Physics&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Linecast&lt;span style='color:#808030; '&gt;(&lt;/span&gt;s&lt;span style='color:#808030; '&gt;,&lt;/span&gt; go&lt;span style='color:#808030; '&gt;.&lt;/span&gt;transform&lt;span style='color:#808030; '&gt;.&lt;/span&gt;position&lt;span style='color:#808030; '&gt;+&lt;/span&gt;v&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    hits &lt;span style='color:#808030; '&gt;+&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#ffffff; background:#dd0000; font-weight:bold; font-style:italic; '&gt;1f&lt;/span&gt;&lt;span style='color:#808030; '&gt;/&lt;/span&gt;samples&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#800080; '&gt;}&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    hits &lt;span style='color:#808030; '&gt;-&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#ffffff; background:#dd0000; font-weight:bold; font-style:italic; '&gt;1f&lt;/span&gt;&lt;span style='color:#808030; '&gt;/&lt;/span&gt;samples&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;            c &lt;span style='color:#808030; '&gt;*&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;-&lt;/span&gt;hits&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            nVertices&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Add&lt;span style='color:#808030; '&gt;(&lt;/span&gt;v&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            nNormals&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Add&lt;span style='color:#808030; '&gt;(&lt;/span&gt;n&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            nColors&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Add&lt;span style='color:#808030; '&gt;(&lt;/span&gt;c&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            nTriangles&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Add&lt;span style='color:#808030; '&gt;(&lt;/span&gt;index&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            index &lt;span style='color:#808030; '&gt;+&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;vertices &lt;span style='color:#808030; '&gt;=&lt;/span&gt; nVertices&lt;span style='color:#808030; '&gt;.&lt;/span&gt;ToArray&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;colors &lt;span style='color:#808030; '&gt;=&lt;/span&gt; nColors&lt;span style='color:#808030; '&gt;.&lt;/span&gt;ToArray&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;normals &lt;span style='color:#808030; '&gt;=&lt;/span&gt; nNormals&lt;span style='color:#808030; '&gt;.&lt;/span&gt;ToArray&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;triangles &lt;span style='color:#808030; '&gt;=&lt;/span&gt; nTriangles&lt;span style='color:#808030; '&gt;.&lt;/span&gt;ToArray&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        mesh&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Optimize&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;        &lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you want to use the baked ambient occlusion colours, you need to use a shader that blends these colours in with your material colours. This is a shader I use to visualize vertex colours only.&lt;br /&gt;&lt;br /&gt;&lt;pre style='color:#000000;background:#ffffff;'&gt;Shader &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;DM/Vertex Coloured&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;    Properties &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        _Color &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Main Color&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt; Color&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#008000; '&gt;0.5&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt;&lt;span style='color:#008000; '&gt;0.5&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt;&lt;span style='color:#008000; '&gt;0.5&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    SubShader &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        Tags &lt;span style='color:#800080; '&gt;{&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;RenderType&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Opaque&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt; &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        LOD &lt;span style='color:#008c00; '&gt;200&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;CGPROGRAM&lt;br /&gt;&lt;span style='color:#004a43; '&gt;#&lt;/span&gt;&lt;span style='color:#004a43; font-weight:bold; '&gt;pragma &lt;/span&gt;&lt;span style='color:#bb7977; font-weight:bold; '&gt;surface surf None&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;float4 _Color&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;struct&lt;/span&gt; Input &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;    float4 color &lt;span style='color:#800080; '&gt;:&lt;/span&gt; COLOR&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;half4 LightingNone &lt;span style='color:#808030; '&gt;(&lt;/span&gt;SurfaceOutput s&lt;span style='color:#808030; '&gt;,&lt;/span&gt; half3 lightDir&lt;span style='color:#808030; '&gt;,&lt;/span&gt; half atten&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;    half4 c&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    c&lt;span style='color:#808030; '&gt;.&lt;/span&gt;rgb &lt;span style='color:#808030; '&gt;=&lt;/span&gt; s&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Albedo&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    c&lt;span style='color:#808030; '&gt;.&lt;/span&gt;a &lt;span style='color:#808030; '&gt;=&lt;/span&gt; s&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Alpha&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800000; font-weight:bold; '&gt;return&lt;/span&gt; c&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;void&lt;/span&gt; surf &lt;span style='color:#808030; '&gt;(&lt;/span&gt;Input IN&lt;span style='color:#808030; '&gt;,&lt;/span&gt; inout SurfaceOutput o&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;    half4 c &lt;span style='color:#808030; '&gt;=&lt;/span&gt; _Color &lt;span style='color:#808030; '&gt;*&lt;/span&gt; IN&lt;span style='color:#808030; '&gt;.&lt;/span&gt;color&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    o&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Albedo &lt;span style='color:#808030; '&gt;=&lt;/span&gt; c&lt;span style='color:#808030; '&gt;.&lt;/span&gt;rgb&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    o&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Alpha &lt;span style='color:#808030; '&gt;=&lt;/span&gt; c&lt;span style='color:#808030; '&gt;.&lt;/span&gt;a&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;ENDCG&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;    Fallback &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Diffuse&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you combine this calculated colour, with existing vertex colours on your mesh, you can get quite nice results. The image below uses no lighting, no textures and is very cheap to render. It has 700 vertices.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1srVB7Ihd-8/TU-nzh6HmqI/AAAAAAAAAhQ/ibySuhVCniY/s1600/vertexcolourAO.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 351px;" src="http://3.bp.blogspot.com/_1srVB7Ihd-8/TU-nzh6HmqI/AAAAAAAAAhQ/ibySuhVCniY/s400/vertexcolourAO.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5570855767797897890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you can afford the extra vertices, you can get even better results. The below screenshot shows the same model with 3000 vertices.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1srVB7Ihd-8/TU-pf3Q5Q_I/AAAAAAAAAhY/f8YVyRWr47c/s1600/vertexcolourAIHIRES.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 351px;" src="http://2.bp.blogspot.com/_1srVB7Ihd-8/TU-pf3Q5Q_I/AAAAAAAAAhY/f8YVyRWr47c/s400/vertexcolourAIHIRES.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5570857628956443634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There is a problem with the ambient occlusion calculation. I simply use random points on a sphere when creating the samples. This is not ideal, as the set of points are not uniformly distributed on the sphere. This is fairly easy to do, and I'll show how to do this in a later post. Stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-6741152893995308677?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/6741152893995308677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=6741152893995308677' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6741152893995308677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6741152893995308677'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/per-vertex-ambient-occlusion.html' title='Per Vertex Ambient Occlusion'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1srVB7Ihd-8/TU-VQWMkMPI/AAAAAAAAAhI/fRw1t-7r8Dk/s72-c/vertexAI.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2996862042672294793</id><published>2011-02-04T13:54:00.002+08:00</published><updated>2011-02-04T13:56:56.325+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>Tip when using self lit materials.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1srVB7Ihd-8/TUuUz_AxD2I/AAAAAAAAAgo/scovJ6A2J7Q/s1600/Screen%2Bshot%2B2011-02-04%2Bat%2B1.53.18%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 310px;" src="http://2.bp.blogspot.com/_1srVB7Ihd-8/TUuUz_AxD2I/AAAAAAAAAgo/scovJ6A2J7Q/s400/Screen%2Bshot%2B2011-02-04%2Bat%2B1.53.18%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5569708984982638434" /&gt;&lt;/a&gt;&lt;br /&gt;Turn fog off for self lit shaders. In Unity3D, it is as simple as adding:&lt;pre&gt;Fog { Mode Off }&lt;/pre&gt;to your SubShader tags. It will make your glowing windows stay glowing, even when viewed from a great distance!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2996862042672294793?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2996862042672294793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2996862042672294793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2996862042672294793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2996862042672294793'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/blog-post.html' title='Tip when using self lit materials.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1srVB7Ihd-8/TUuUz_AxD2I/AAAAAAAAAgo/scovJ6A2J7Q/s72-c/Screen%2Bshot%2B2011-02-04%2Bat%2B1.53.18%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-5991462666837909802</id><published>2011-02-03T16:23:00.002+08:00</published><updated>2011-02-03T16:32:29.610+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>Who is up for some Space Mining?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1srVB7Ihd-8/TUpoC6Pr-RI/AAAAAAAAAgg/r2Maf-85iDI/s1600/Screen%2Bshot%2B2011-02-03%2Bat%2B4.28.37%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 312px;" src="http://3.bp.blogspot.com/_1srVB7Ihd-8/TUpoC6Pr-RI/AAAAAAAAAgg/r2Maf-85iDI/s400/Screen%2Bshot%2B2011-02-03%2Bat%2B4.28.37%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5569378288401119506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1srVB7Ihd-8/TUpmGuNgwJI/AAAAAAAAAgY/22UFoKwcueg/s1600/Screen%2Bshot%2B2011-02-03%2Bat%2B4.21.07%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 206px;" src="http://3.bp.blogspot.com/_1srVB7Ihd-8/TUpmGuNgwJI/AAAAAAAAAgY/22UFoKwcueg/s400/Screen%2Bshot%2B2011-02-03%2Bat%2B4.21.07%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5569376154866991250" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-5991462666837909802?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/5991462666837909802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=5991462666837909802' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5991462666837909802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5991462666837909802'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/who-is-up-for-some-space-mining.html' title='Who is up for some Space Mining?'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1srVB7Ihd-8/TUpoC6Pr-RI/AAAAAAAAAgg/r2Maf-85iDI/s72-c/Screen%2Bshot%2B2011-02-03%2Bat%2B4.28.37%2BPM.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2014185651314527155</id><published>2011-02-01T12:44:00.003+08:00</published><updated>2011-02-01T13:06:01.446+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>A 3D Skybox</title><content type='html'>A 3D skybox sits between your game world and the 2D skybox texture commonly used as a background for your scene.&lt;br /&gt;&lt;br /&gt;Why do you need it?&lt;br /&gt;&lt;br /&gt;It allows you to have 3D scenery in your background, which the player cannot interact with, yet is still effected by lighting, can use shaders and provide a much higher level of detail than the 2D skybox. This is how I do it in Unity3D.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using UnityEngine;&lt;br /&gt;using System.Collections;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Skybox3D : MonoBehaviour {&lt;br /&gt; &lt;br /&gt; public float levelScale = 32;&lt;br /&gt; &lt;br /&gt; Camera skyCam;&lt;br /&gt; &lt;br /&gt; void Start () {&lt;br /&gt;  var min = Vector3.zero;&lt;br /&gt;  var max = Vector3.zero;&lt;br /&gt;  &lt;br /&gt;  foreach(Transform i in transform) {&lt;br /&gt;   i.gameObject.layer = gameObject.layer;&lt;br /&gt;   if(i.renderer == null) continue;&lt;br /&gt;   var bmax = i.renderer.bounds.max;&lt;br /&gt;   var bmin = i.renderer.bounds.min;&lt;br /&gt;   min.x = Mathf.Min(min.x, bmin.x);&lt;br /&gt;   min.y = Mathf.Min(min.y, bmin.y);&lt;br /&gt;   min.z = Mathf.Min(min.z, bmin.z);&lt;br /&gt;   max.x = Mathf.Max(max.x, bmax.x);&lt;br /&gt;   max.y = Mathf.Max(max.y, bmax.y);&lt;br /&gt;   max.z = Mathf.Max(max.z, bmax.z);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  float absMax;&lt;br /&gt;  if(min.sqrMagnitude &gt; max.sqrMagnitude) &lt;br /&gt;   absMax = min.magnitude * levelScale * 1.5f;&lt;br /&gt;  else&lt;br /&gt;   absMax = max.magnitude * levelScale * 1.5f;&lt;br /&gt;    &lt;br /&gt;  transform.localScale = Vector3.one * levelScale;&lt;br /&gt;  skyCam = new GameObject("Sky Camera", typeof(Camera)).camera;&lt;br /&gt;  skyCam.transform.parent = Camera.main.transform;&lt;br /&gt;  skyCam.nearClipPlane = absMax / 3;&lt;br /&gt;  skyCam.farClipPlane = absMax;&lt;br /&gt;  skyCam.cullingMask = 1 &lt;&lt; gameObject.layer;&lt;br /&gt;  skyCam.depth = Camera.main.depth - 1;&lt;br /&gt;  Camera.main.cullingMask ^= 1 &lt;&lt; gameObject.layer;&lt;br /&gt;  if(Camera.main.clearFlags != CameraClearFlags.Depth) {&lt;br /&gt;   Debug.LogWarning("The main camera must have clear flags set to depth only."); &lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;/pre&gt;I build my 3D skybox as a child of an empty game object which has the above component attached. I build my skybox at a 1/32 scale, and in the component, I set the level scale to 32. This means that when I hit the play button, the 3D skybox is scaled up and moved out the extremities of my game level.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2014185651314527155?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2014185651314527155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2014185651314527155' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2014185651314527155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2014185651314527155'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/02/3d-skybox.html' title='A 3D Skybox'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-101300316355408678</id><published>2011-01-31T17:14:00.005+08:00</published><updated>2011-01-31T17:17:39.149+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>Spaceship + Spacebox = Awesome</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1srVB7Ihd-8/TUZ92xHsKXI/AAAAAAAAAgM/eGP1cs4J1co/s1600/Screen%2Bshot%2B2011-01-31%2Bat%2B5.13.59%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 294px;" src="http://4.bp.blogspot.com/_1srVB7Ihd-8/TUZ92xHsKXI/AAAAAAAAAgM/eGP1cs4J1co/s400/Screen%2Bshot%2B2011-01-31%2Bat%2B5.13.59%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5568276369142196594" /&gt;&lt;/a&gt;&lt;br /&gt;A screenshot of my spacebox generator, a Toon freighter model and a Crease fullscreen shader, which adds the outline to the silhouette of the ship.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-101300316355408678?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/101300316355408678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=101300316355408678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/101300316355408678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/101300316355408678'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/spaceship-spacebox-awesome.html' title='Spaceship + Spacebox = Awesome'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1srVB7Ihd-8/TUZ92xHsKXI/AAAAAAAAAgM/eGP1cs4J1co/s72-c/Screen%2Bshot%2B2011-01-31%2Bat%2B5.13.59%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-6814299298834634159</id><published>2011-01-31T14:31:00.004+08:00</published><updated>2011-01-31T14:46:34.888+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>UnityWeb - Why does it exist?</title><content type='html'>The latest version of &lt;a href="http://code.google.com/p/unityweb/"&gt;UnityWeb&lt;/a&gt; now works with iOS, Mac, PC, and WebPlayer builds of Unity3D games.&lt;br /&gt;&lt;br /&gt;If you haven't done a lot of work with HTTP, you are probably wondering, "Why is UnityWeb needed?".&lt;br /&gt;&lt;br /&gt;Here is a contrived, yet realistic scenario which demonstrates something you can do with UnityWeb, but is impossible with the WWW class.&lt;br /&gt;&lt;br /&gt;Posit: Your game needs to download an avatar image for each player and use it as a texture. A player can update their avatar image, so you must periodically check to see if the image has changed.&lt;br /&gt;&lt;br /&gt;Using the Unity3D WWW class, you might do something like this:&lt;br /&gt;&lt;pre&gt;for each member&lt;br /&gt;    download avatar image &lt;br /&gt;    update avatar texture&lt;/pre&gt;&lt;br /&gt;If you have 50 avatars in one game, you will download 50 different images. Every 10 minutes or so, you re-download the images.&lt;br /&gt;&lt;br /&gt;Using UnityWeb, you can do something better.&lt;br /&gt;&lt;pre&gt;for each member&lt;br /&gt;    download avatar image&lt;br /&gt;    if image has changed, update avatar texture&lt;/pre&gt;UnityWeb will only redownload a URL if it has changed since you last downloaded it. UnityWeb uses the magic of &lt;a href="http://en.wikipedia.org/wiki/HTTP_ETag"&gt;Etags&lt;/a&gt; to make this work. To make this type of caching happen, you simply add:&lt;pre&gt;request.useCache = true;&lt;/pre&gt;This results in faster response times, less web traffic, and you could poll much quicker than every 10 minutes, as only changes will be downloaded.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-6814299298834634159?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/6814299298834634159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=6814299298834634159' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6814299298834634159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6814299298834634159'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/unityweb-why-does-it-exist.html' title='UnityWeb - Why does it exist?'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2273087416705741887</id><published>2011-01-30T17:02:00.003+08:00</published><updated>2011-01-30T17:05:50.514+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perth'/><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>My last Game Jam...</title><content type='html'>The Global Game Jam event in Perth is about to finish, and at least for the foreseeable future, I believe it will be my last.&lt;br /&gt;&lt;br /&gt;If I remember correctly, I think I've run about 8 GameJam events over the last three years. It is time for me to do something else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2273087416705741887?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2273087416705741887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2273087416705741887' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2273087416705741887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2273087416705741887'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/my-last-game-jam.html' title='My last Game Jam...'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-6284384842912707506</id><published>2011-01-30T15:31:00.002+08:00</published><updated>2011-01-30T17:43:24.768+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Perlin Game Sound Track.</title><content type='html'>&lt;a href="http://www.differentmethods.com/packages/AmbientSoundTrack.html"&gt;A procedural ambient soundtrack&lt;/a&gt; for my space game. Generated using a Perlin driven sequencer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-6284384842912707506?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/6284384842912707506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=6284384842912707506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6284384842912707506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6284384842912707506'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/perlin-game-sound-track.html' title='Perlin Game Sound Track.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8014940795018125476</id><published>2011-01-30T11:54:00.003+08:00</published><updated>2011-01-30T11:55:44.135+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>You can never have too much lens flare.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1srVB7Ihd-8/TUThNm4aPiI/AAAAAAAAAgE/Zeem7AMzuqU/s1600/Screen%2Bshot%2B2011-01-30%2Bat%2B11.53.40%2BAM%2B%25282%2529.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 239px;" src="http://3.bp.blogspot.com/_1srVB7Ihd-8/TUThNm4aPiI/AAAAAAAAAgE/Zeem7AMzuqU/s400/Screen%2Bshot%2B2011-01-30%2Bat%2B11.53.40%2BAM%2B%25282%2529.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5567822663228472866" /&gt;&lt;/a&gt;&lt;br /&gt;I am sure it is the most underused effect in the industry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8014940795018125476?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8014940795018125476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8014940795018125476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8014940795018125476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8014940795018125476'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/you-can-never-have-too-much-lens-flare.html' title='You can never have too much lens flare.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1srVB7Ihd-8/TUThNm4aPiI/AAAAAAAAAgE/Zeem7AMzuqU/s72-c/Screen%2Bshot%2B2011-01-30%2Bat%2B11.53.40%2BAM%2B%25282%2529.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2718415040616655910</id><published>2011-01-29T20:53:00.003+08:00</published><updated>2011-01-29T20:58:38.081+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Procedural Space Skybox for Unity3D.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1srVB7Ihd-8/TUQOSeBVXMI/AAAAAAAAAf8/xGFHlGGaHcY/s1600/spacebox.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 318px;" src="http://1.bp.blogspot.com/_1srVB7Ihd-8/TUQOSeBVXMI/AAAAAAAAAf8/xGFHlGGaHcY/s400/spacebox.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5567590749795867842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Space is awesome. Especially when it is generated using Perlin noise, and some cool shaders. &lt;a href="http://www.differentmethods.com/packages/SpaceBox.html"&gt;You can try it out over here.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2718415040616655910?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2718415040616655910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2718415040616655910' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2718415040616655910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2718415040616655910'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/procedural-space-skybox-for-unity3d.html' title='Procedural Space Skybox for Unity3D.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1srVB7Ihd-8/TUQOSeBVXMI/AAAAAAAAAf8/xGFHlGGaHcY/s72-c/spacebox.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-6528823020422678587</id><published>2011-01-28T10:48:00.003+08:00</published><updated>2011-01-28T11:11:35.310+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>The Unity3D Animation Window</title><content type='html'>Some Tips we've learned the hard way.&lt;br /&gt;&lt;br /&gt;1. You can hover over the time axis and use the scroll wheel to scale time, and fit your entire curve in one window.&lt;br /&gt;&lt;br /&gt;2. Using the scroll wheel anywhere else will scale time AND space in a uniform manner.&lt;br /&gt;&lt;br /&gt;3. The bottom left drop box in the animation window will let you display animated values only, which helps when searching for a curve.&lt;br /&gt;&lt;br /&gt;4. You don't edit an animation by selecting it as an asset, you need to select the game object it is attached to in order to edit it.&lt;br /&gt;&lt;br /&gt;5. In the top right, next to name of the game object you are editing, you can see a drop down which lets you pick which animation to work on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-6528823020422678587?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/6528823020422678587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=6528823020422678587' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6528823020422678587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6528823020422678587'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/unity3d-animation-window.html' title='The Unity3D Animation Window'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7570727685569169410</id><published>2011-01-26T15:27:00.006+08:00</published><updated>2011-01-26T15:58:09.957+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>UnityWeb 0.1</title><content type='html'>&lt;a href="http://code.google.com/p/unityweb/"&gt;The Unity3D WWW alternative&lt;/a&gt; is now half baked and ready for preliminary tasting.&lt;br /&gt;&lt;br /&gt;I've just added support for HTTP redirects, and some safer exception handling. Oh, it supports chunked transfer encoding too!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; ARRGH seems like more work is needed for it can be used in a WebPlayer. It works with iOS however. :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7570727685569169410?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7570727685569169410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7570727685569169410' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7570727685569169410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7570727685569169410'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/unityweb-01.html' title='UnityWeb 0.1'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-514950704794819763</id><published>2011-01-26T09:44:00.002+08:00</published><updated>2011-01-26T09:51:20.991+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Audio'/><title type='text'>Music Post #1</title><content type='html'>I've been creating music since I discovered &lt;a href="http://en.wikipedia.org/wiki/Scream_Tracker"&gt;Scream Tracker 3&lt;/a&gt; in 1995. I moved to &lt;a href="http://en.wikipedia.org/wiki/Impulse_Tracker"&gt;Impulse Tracker&lt;/a&gt; soon after, finally ending up with &lt;a href="http://en.wikipedia.org/wiki/Jeskola_Buzz"&gt;Buzz Tracker&lt;/a&gt; on Windows.&lt;br /&gt;&lt;br /&gt;After a long hiatus, I'm now back producing purely with the iPad, and it's amazing selection of audio software, which &lt;a href="http://www.sonomawireworks.com/iphone/audiocopy/"&gt;can inter-operate quite well&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This track came together in the early hours of this morning. It is pretty raw, and produced in a live situation. No postprocessing or arranging, it is all done on the fly.&lt;br /&gt;&lt;br /&gt;&lt;object height="81" width="100%"&gt; &lt;param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F9606576%3Fsecret_token%3Ds-DAfnG&amp;amp;show_comments=true&amp;amp;auto_play=false&amp;amp;color=ff7700"&gt;&lt;/param&gt; &lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt; &lt;embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F9606576%3Fsecret_token%3Ds-DAfnG&amp;amp;show_comments=true&amp;amp;auto_play=false&amp;amp;color=ff7700" type="application/x-shockwave-flash" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;   &lt;span&gt;&lt;a href="http://soundcloud.com/replicator/late-night-oddity/s-DAfnG"&gt;Late night oddity&lt;/a&gt; by &lt;a href="http://soundcloud.com/replicator"&gt;replicator&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-514950704794819763?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/514950704794819763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=514950704794819763' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/514950704794819763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/514950704794819763'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/music-post-1.html' title='Music Post #1'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7323467998047509808</id><published>2011-01-25T11:08:00.002+08:00</published><updated>2011-01-25T11:11:59.767+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Error Reporting from your Unity3D game.</title><content type='html'>This is something I use to capture errors and log-information from games that are out in the wild, and report them back home to my server.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using UnityEngine;&lt;br /&gt;using System.Collections;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class ErrorReporter : MonoBehaviour&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; string debugText = "";&lt;br /&gt; string postURL = "";&lt;br /&gt;&lt;br /&gt; void Awake ()&lt;br /&gt; {&lt;br /&gt;  Application.RegisterLogCallback (new Application.LogCallback (CaptureLog));&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; IEnumerator SendDebugToServer ()&lt;br /&gt; {&lt;br /&gt;  WWW www = new WWW (postURL, System.Text.ASCIIEncoding.ASCII.GetBytes (debugText));&lt;br /&gt;  yield return www;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; void CaptureLog (string condition, string stacktrace, LogType type)&lt;br /&gt; {&lt;br /&gt;  string sep = "------------------------------------------------------------------------------\r\n";&lt;br /&gt;  debugText = sep + type.ToString () + " " + Time.realtimeSinceStartup.ToString () + "\r\n" + condition + "\r\n" + stacktrace + debugText;&lt;br /&gt;  if (type == LogType.Exception) {&lt;br /&gt;   StartCoroutine (SendDebugToServer ());&lt;br /&gt;   if (!Application.isEditor) {&lt;br /&gt;    SomethingReallyBadHappened ();&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; void SomethingReallyBadHappened ()&lt;br /&gt; {&lt;br /&gt;  //NB: Try and recover or fail gracefully here.&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;On the server side, you could use a very simple piece of PHP to receive the request and write it to a file.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$data = file_get_contents('php://input');&lt;br /&gt;$file = "reports/report_" . time() . ".txt"; &lt;br /&gt;&lt;br /&gt;$fp = fopen($file, "w") or die("Couldn't open $file for writing!");&lt;br /&gt;fwrite($fp, $data) or die("Couldn't write values to file!"); &lt;br /&gt;&lt;br /&gt;fclose($fp); &lt;br /&gt;echo "Saved to $file successfully!";&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7323467998047509808?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7323467998047509808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7323467998047509808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7323467998047509808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7323467998047509808'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/error-reporting-from-your-unity3d-game.html' title='Error Reporting from your Unity3D game.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8563108618252788337</id><published>2011-01-25T10:45:00.003+08:00</published><updated>2011-01-25T10:48:19.660+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Free Unity3D Pie Menu System!</title><content type='html'>I accidentally released my &lt;a href="http://www.differentmethods.com/packages/PieMenu.html"&gt;Pie Menu System&lt;/a&gt; for free on the awesome Unity asset store!&lt;br /&gt;&lt;br /&gt;Oops.&lt;br /&gt;&lt;br /&gt;Pie Menu's are awesome for adding context sensitive actions to your game world, and this particular package really shows the beautiful architecture behind Unity, and why it is great for developers. I've resubmitted the package with a token price... but in the meantime you can get it for FREE! :-) If you use it, let me know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8563108618252788337?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8563108618252788337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8563108618252788337' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8563108618252788337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8563108618252788337'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/free-unity3d-pie-menu-system.html' title='Free Unity3D Pie Menu System!'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-6321998629249597989</id><published>2011-01-21T16:14:00.001+08:00</published><updated>2011-01-21T16:18:45.763+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>How to have an awesome office.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1srVB7Ihd-8/TTlBGkZ8HJI/AAAAAAAAAf0/sDnCOZHbtns/s1600/21012011014.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_1srVB7Ihd-8/TTlBGkZ8HJI/AAAAAAAAAf0/sDnCOZHbtns/s400/21012011014.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5564550395700452498" /&gt;&lt;/a&gt;&lt;br /&gt;Install a TRON poster. (The other posters are just placeholders for more TRON posters when we get them.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-6321998629249597989?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/6321998629249597989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=6321998629249597989' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6321998629249597989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/6321998629249597989'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/how-to-have-awesome-office.html' title='How to have an awesome office.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1srVB7Ihd-8/TTlBGkZ8HJI/AAAAAAAAAf0/sDnCOZHbtns/s72-c/21012011014.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1010517566832070516</id><published>2011-01-21T13:26:00.002+08:00</published><updated>2011-01-21T13:30:00.819+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Unity3D Coroutines.</title><content type='html'>One of the great things about Unity3D, is the ability to turn the component Start method into a coroutine, simply by changing the return type of Start() to an IEnumerator.&lt;br /&gt;&lt;br /&gt;In the example below, the Start method is changed into a coroutine which turns on it's particle emitter, waits for T seconds, then turns it off. Without coroutines, this would be much messier.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using UnityEngine;&lt;br /&gt;using System.Collections;&lt;br /&gt;&lt;br /&gt;public class ParticleBurst : MonoBehaviour {&lt;br /&gt; public float T = 1;&lt;br /&gt; &lt;br /&gt; IEnumerator Start() {&lt;br /&gt;  particleEmitter.emit = true;&lt;br /&gt;  yield return new WaitForSeconds(T);&lt;br /&gt;  particleEmitter.emit = false;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1010517566832070516?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1010517566832070516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1010517566832070516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1010517566832070516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1010517566832070516'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/unity3d-coroutines.html' title='Unity3D Coroutines.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-4416026215360008171</id><published>2011-01-21T10:11:00.003+08:00</published><updated>2011-01-21T10:15:24.981+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>The Unity3D Asset Pipeline.</title><content type='html'>One of the great things about Unity3D, is the programmable content pipeline. I wrote this script so that when I add a texture named "x_SPECULAR.png" to my project, it looks for a texture named "x_DIFFUSE.png", and then copies the specular texture into the alpha channel of the diffuse texture (so that it can be used in a Unity3D specular shader). This automates what would usually be a tedious Photoshop task.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using UnityEngine;&lt;br /&gt;using UnityEditor;&lt;br /&gt;using System.Collections;&lt;br /&gt;&lt;br /&gt;class ModifyTextures : AssetPostprocessor&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; void OnPostprocessTexture (Texture2D texture)&lt;br /&gt; {&lt;br /&gt;  if (assetPath.Contains ("_SPECULAR")) {&lt;br /&gt;   var diffusePath = assetPath.Replace ("_SPECULAR", "_DIFFUSE");&lt;br /&gt;   var bytes = System.IO.File.ReadAllBytes (diffusePath);&lt;br /&gt;   var diffuse = new Texture2D (texture.width, texture.height);&lt;br /&gt;   diffuse.LoadImage (bytes);&lt;br /&gt;   var colors = diffuse.GetPixels ();&lt;br /&gt;   var specular = texture.GetPixels ();&lt;br /&gt;   if (colors.Length == specular.Length) {&lt;br /&gt;    Debug.LogWarning (assetPath + ": Adding specular values to diffuse map alpha.");&lt;br /&gt;    for (var i = 0; i &lt; colors.Length; i++) {&lt;br /&gt;     colors[i].a = (specular[i].r + specular[i].g + specular[i].b) / 3;&lt;br /&gt;    }&lt;br /&gt;    diffuse.SetPixels (colors);&lt;br /&gt;    diffuse.Apply ();&lt;br /&gt;    System.IO.File.WriteAllBytes (diffusePath, diffuse.EncodeToPNG ());&lt;br /&gt;    AssetDatabase.ImportAsset (diffusePath);&lt;br /&gt;    AssetDatabase.DeleteAsset(assetPath);&lt;br /&gt;   } else {&lt;br /&gt;    Debug.LogWarning (assetPath + ": specular size must match diffuse size.");&lt;br /&gt;   }&lt;br /&gt;   return;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-4416026215360008171?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/4416026215360008171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=4416026215360008171' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4416026215360008171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4416026215360008171'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/unity3d-asset-pipeline.html' title='The Unity3D Asset Pipeline.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7689977150177668512</id><published>2011-01-18T14:35:00.004+08:00</published><updated>2011-01-18T14:44:05.044+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>More Unity3D WWW BADNESS!</title><content type='html'>Dear Unity Technologies,&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;yield return www;&lt;br /&gt;try {&lt;br /&gt;    var bundle = www.assetBundle;&lt;br /&gt;} catch {&lt;br /&gt;    //surely if the bundle load fails, I can catch an exception here?&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;No, you can't. Bundle load fail = silent failure, unless you want to PARSE THE ERROR LOG!&lt;br /&gt;&lt;br /&gt;Another reason to dump the WWW class and let us do it properly. Please, can give us &lt;a href="http://feedback.unity3d.com/forums/15792-unity/suggestions/253113-asset-bundle-load-via-byte-array?ref=title"&gt;the ability to load assets from byte streams&lt;/a&gt;, and avoid this WWW crock?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7689977150177668512?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7689977150177668512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7689977150177668512' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7689977150177668512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7689977150177668512'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/more-unity3d-www-badness.html' title='More Unity3D WWW BADNESS!'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-4514064454311466118</id><published>2011-01-15T22:50:00.003+08:00</published><updated>2011-01-15T22:52:19.408+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>Planet Shader #2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1srVB7Ihd-8/TTG0VA_mxaI/AAAAAAAAAfs/jAhknkHunbE/s1600/planet2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 354px;" src="http://2.bp.blogspot.com/_1srVB7Ihd-8/TTG0VA_mxaI/AAAAAAAAAfs/jAhknkHunbE/s400/planet2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5562425287916307874" /&gt;&lt;/a&gt;&lt;br /&gt;Possibly slightly more correct lighting. The rim light is now only applied in the direction of the sun, rather than being purely based on view position.&lt;br /&gt;&lt;pre&gt;Shader "Planet" {&lt;br /&gt; Properties {&lt;br /&gt;  _MainTex ("Diffuse(RGB) Spec(A)", 2D) = "white" {}&lt;br /&gt;  _BumpMap ("Bumpmap", 2D) = "bump" {}&lt;br /&gt;  _RimColor ("Rim Color", Color) = (0.26,0.19,0.16,0.0)&lt;br /&gt;  _RimPower ("Rim Power", Range(0,8.0)) = 3.0&lt;br /&gt;  _SpecColor ("Specular Color", Color) = (0.5,0.5,0.5,1)&lt;br /&gt;  _Shininess ("Shininess", Range (0.01, 1)) = 0.078125&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; SubShader {&lt;br /&gt;   Tags { "RenderType" = "Opaque" }&lt;br /&gt;   &lt;br /&gt;   CGPROGRAM&lt;br /&gt;   #pragma surface surf Planet&lt;br /&gt;   &lt;br /&gt;   float _Shininess;&lt;br /&gt;   sampler2D _MainTex;&lt;br /&gt;   sampler2D _BumpMap;&lt;br /&gt;   float4 _RimColor;&lt;br /&gt;   float _RimPower;&lt;br /&gt;   &lt;br /&gt;   half4 LightingPlanet (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) {&lt;br /&gt;    half3 h = normalize (lightDir + viewDir);&lt;br /&gt;    half diff = max (0, dot (s.Normal, lightDir));&lt;br /&gt;    float nh = max (0, dot (s.Normal, h));&lt;br /&gt;    float spec = pow (nh, 48.0);&lt;br /&gt;    half rim = ((1 - (dot (normalize(viewDir), (s.Normal)))) + ((dot (normalize(lightDir), (s.Normal)))));&lt;br /&gt;    half4 c;&lt;br /&gt;    c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec * s.Alpha * _Shininess * _SpecColor) * (atten * 2);&lt;br /&gt;    c.rgb = c.rgb  * (pow (rim, _RimPower) * _RimColor.rgb);&lt;br /&gt;    return c;&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   struct Input {&lt;br /&gt;    float2 uv_MainTex;&lt;br /&gt;    float2 uv_BumpMap;&lt;br /&gt;    float3 viewDir;&lt;br /&gt;    float3 worldRefl; INTERNAL_DATA&lt;br /&gt;   };&lt;br /&gt;   &lt;br /&gt;   void surf (Input IN, inout SurfaceOutput o) {&lt;br /&gt;    o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;&lt;br /&gt;    o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));&lt;br /&gt;    o.Alpha = tex2D (_MainTex, IN.uv_MainTex).a;&lt;br /&gt;   }&lt;br /&gt;   ENDCG&lt;br /&gt; &lt;br /&gt; } &lt;br /&gt; Fallback "Diffuse"&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-4514064454311466118?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/4514064454311466118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=4514064454311466118' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4514064454311466118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4514064454311466118'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/planet-shader-2.html' title='Planet Shader #2'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1srVB7Ihd-8/TTG0VA_mxaI/AAAAAAAAAfs/jAhknkHunbE/s72-c/planet2.jpg' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8291623471983950188</id><published>2011-01-13T15:40:00.003+08:00</published><updated>2011-01-21T11:22:54.152+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Unity3D 3.0 Planet Shader</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1srVB7Ihd-8/TS6sod0MzeI/AAAAAAAAAfk/HZ-IWFb_Soo/s1600/earthshader.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 328px;" src="http://2.bp.blogspot.com/_1srVB7Ihd-8/TS6sod0MzeI/AAAAAAAAAfk/HZ-IWFb_Soo/s400/earthshader.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5561572401047457250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; &lt;a href="http://entitycrisis.blogspot.com/2011/01/planet-shader-2.html"&gt;This is another planet shader, with more physical fidelity.&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;Shader "Planet" {&lt;br /&gt;    Properties {&lt;br /&gt;      _MainTex ("Diffuse(RGB) Spec(A)", 2D) = "white" {}&lt;br /&gt;      _BumpMap ("Bumpmap", 2D) = "bump" {}&lt;br /&gt;      _RimColor ("Rim Color", Color) = (0.26,0.19,0.16,0.0)&lt;br /&gt;      _RimPower ("Rim Power", Range(0.5,8.0)) = 3.0&lt;br /&gt;      _SpecColor ("Specular Color", Color) = (0.5,0.5,0.5,1)&lt;br /&gt;   _Shininess ("Shininess", Range (0.01, 1)) = 0.078125 &lt;br /&gt;    }&lt;br /&gt;    SubShader {&lt;br /&gt;      Tags { "RenderType" = "Opaque" }&lt;br /&gt;      CGPROGRAM&lt;br /&gt;      &lt;br /&gt;       #pragma surface surf SimpleSpecular&lt;br /&gt;   float _Shininess;&lt;br /&gt;   &lt;br /&gt;      half4 LightingSimpleSpecular (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) {&lt;br /&gt;          half3 h = normalize (lightDir + viewDir);&lt;br /&gt;          half diff = max (0, dot (s.Normal, lightDir));&lt;br /&gt;          float nh = max (0, dot (s.Normal, h));&lt;br /&gt;          float spec = pow (nh, 48.0);&lt;br /&gt;          half4 c;&lt;br /&gt;          c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec * s.Alpha * _Shininess * _SpecColor) * (atten * 2);&lt;br /&gt;          c.a = s.Alpha;&lt;br /&gt;          return c;&lt;br /&gt;      }&lt;br /&gt;            &lt;br /&gt;      struct Input {&lt;br /&gt;          float2 uv_MainTex;&lt;br /&gt;          float2 uv_BumpMap;&lt;br /&gt;          float3 viewDir;&lt;br /&gt;      };&lt;br /&gt;      sampler2D _MainTex;&lt;br /&gt;      sampler2D _BumpMap;&lt;br /&gt;      float4 _RimColor;&lt;br /&gt;      float _RimPower;&lt;br /&gt;      &lt;br /&gt;      void surf (Input IN, inout SurfaceOutput o) {&lt;br /&gt;          o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;&lt;br /&gt;          o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));&lt;br /&gt;          half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));&lt;br /&gt;          o.Emission = _RimColor.rgb * pow (rim, _RimPower);&lt;br /&gt;          o.Alpha = tex2D (_MainTex, IN.uv_MainTex).a;&lt;br /&gt;      }&lt;br /&gt;      ENDCG&lt;br /&gt;    } &lt;br /&gt;    Fallback "Diffuse"&lt;br /&gt;  }&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8291623471983950188?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8291623471983950188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8291623471983950188' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8291623471983950188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8291623471983950188'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/unity3d-30-planet-shader.html' title='Unity3D 3.0 Planet Shader'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1srVB7Ihd-8/TS6sod0MzeI/AAAAAAAAAfk/HZ-IWFb_Soo/s72-c/earthshader.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-5819564839142915522</id><published>2011-01-12T21:33:00.004+08:00</published><updated>2011-01-12T21:37:24.303+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Unity3D WWW Replacement.</title><content type='html'>Due to my rage at the &lt;a href="http://entitycrisis.blogspot.com/2011/01/unity3d-rant-about-www.html"&gt;stupid WWW class in Unity3D&lt;/a&gt;, I have started coding a replacement. This is needed, because &lt;a href="http://forum.unity3d.com/threads/73654-Why-is-System.Net.WebRequest-unsupported-in-iOS?p=471594#post471594"&gt;Unity3D on iOS or Web devices will not use System.Net.WebRequest due to security concerns&lt;/a&gt;. RAAARGH!&lt;br /&gt;&lt;br /&gt;This is a WIP &lt;a href="http://code.google.com/p/unityweb/source/checkout"&gt;Unity3D WWW Replacement&lt;/a&gt; class, which works like a real HTTP class should. It is not entirely usable, however it will evolve and get better. At least it has been started.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-5819564839142915522?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/5819564839142915522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=5819564839142915522' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5819564839142915522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/5819564839142915522'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/unity3d-www-replacement.html' title='Unity3D WWW Replacement.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7294931605041654902</id><published>2011-01-12T16:57:00.002+08:00</published><updated>2011-01-12T17:01:48.457+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Store objects in PlayerPrefs.</title><content type='html'>Usage:&lt;br /&gt;&lt;pre style='color:#000000;background:#ffffff;'&gt;var myObject &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new MyClass&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;Prefs&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Save&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;MyClass&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;my object&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt; myObject&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;var anotherObject &lt;span style='color:#808030; '&gt;=&lt;/span&gt; Prefs&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Load&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;MyClass&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;my object&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;or something like that...&lt;br /&gt;&lt;br /&gt;&lt;pre style='color:#000000;background:#ffffff;'&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; UnityEngine&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; System&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Collections&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; System&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Xml&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Serialization&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; System&lt;span style='color:#808030; '&gt;.&lt;/span&gt;IO&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Prefs&lt;br /&gt;&lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    public &lt;span style='color:#800000; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;void&lt;/span&gt; Save&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;T&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;string name&lt;span style='color:#808030; '&gt;,&lt;/span&gt; T instance&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        XmlSerializer serializer &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new XmlSerializer &lt;span style='color:#808030; '&gt;(&lt;/span&gt;typeof&lt;span style='color:#808030; '&gt;(&lt;/span&gt;T&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;var ms &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new MemoryStream &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            serializer&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Serialize &lt;span style='color:#808030; '&gt;(&lt;/span&gt;ms&lt;span style='color:#808030; '&gt;,&lt;/span&gt; instance&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;            PlayerPrefs&lt;span style='color:#808030; '&gt;.&lt;/span&gt;SetString &lt;span style='color:#808030; '&gt;(&lt;/span&gt;name&lt;span style='color:#808030; '&gt;,&lt;/span&gt; System&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Text&lt;span style='color:#808030; '&gt;.&lt;/span&gt;ASCIIEncoding&lt;span style='color:#808030; '&gt;.&lt;/span&gt;ASCII&lt;span style='color:#808030; '&gt;.&lt;/span&gt;GetString &lt;span style='color:#808030; '&gt;(&lt;/span&gt;ms&lt;span style='color:#808030; '&gt;.&lt;/span&gt;ToArray &lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    public &lt;span style='color:#800000; font-weight:bold; '&gt;static&lt;/span&gt; T Load&lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt;T&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;string name&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;if&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;!&lt;/span&gt;PlayerPrefs&lt;span style='color:#808030; '&gt;.&lt;/span&gt;HasKey&lt;span style='color:#808030; '&gt;(&lt;/span&gt;name&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;return&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;default&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;T&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        XmlSerializer serializer &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new XmlSerializer &lt;span style='color:#808030; '&gt;(&lt;/span&gt;typeof&lt;span style='color:#808030; '&gt;(&lt;/span&gt;T&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        T instance&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;using&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;var ms &lt;span style='color:#808030; '&gt;=&lt;/span&gt; new MemoryStream &lt;span style='color:#808030; '&gt;(&lt;/span&gt;System&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Text&lt;span style='color:#808030; '&gt;.&lt;/span&gt;ASCIIEncoding&lt;span style='color:#808030; '&gt;.&lt;/span&gt;ASCII&lt;span style='color:#808030; '&gt;.&lt;/span&gt;GetBytes &lt;span style='color:#808030; '&gt;(&lt;/span&gt;PlayerPrefs&lt;span style='color:#808030; '&gt;.&lt;/span&gt;GetString &lt;span style='color:#808030; '&gt;(&lt;/span&gt;name&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;br /&gt;            instance &lt;span style='color:#808030; '&gt;=&lt;/span&gt; &lt;span style='color:#808030; '&gt;(&lt;/span&gt;T&lt;span style='color:#808030; '&gt;)&lt;/span&gt;serializer&lt;span style='color:#808030; '&gt;.&lt;/span&gt;Deserialize &lt;span style='color:#808030; '&gt;(&lt;/span&gt;ms&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#800000; font-weight:bold; '&gt;return&lt;/span&gt; instance&lt;span style='color:#800080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7294931605041654902?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7294931605041654902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7294931605041654902' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7294931605041654902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7294931605041654902'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/store-objects-in-playerprefs.html' title='Store objects in PlayerPrefs.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-2816852364163130093</id><published>2011-01-11T10:20:00.003+08:00</published><updated>2011-01-11T10:23:05.647+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippet'/><title type='text'>Asynchronous Unity3D Components.</title><content type='html'>If you're using async callbacks in .Net, you need a safe way to get those callbacks to modify things inside your Unity engine.&lt;br /&gt;&lt;br /&gt;Inherit from this class, then use ScheduleCallback to schedule an anonymous function which will run in the main Unity thread. Problem solved!&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using UnityEngine;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class AsyncComponent : MonoBehaviour&lt;br /&gt;{&lt;br /&gt; public delegate void Anonymous ();&lt;br /&gt; List&lt;Anonymous&gt; callbacks = new List&lt;Anonymous&gt; ();&lt;br /&gt;&lt;br /&gt; public virtual void Update ()&lt;br /&gt; {&lt;br /&gt;  Anonymous[] c;&lt;br /&gt;  lock(this) {&lt;br /&gt;   c = callbacks.ToArray();&lt;br /&gt;   callbacks.Clear();  &lt;br /&gt;  }&lt;br /&gt;  foreach(var i in c) i();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public void ScheduleCallback(Anonymous fn) {&lt;br /&gt;  lock(this) {&lt;br /&gt;   callbacks.Add(fn);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-2816852364163130093?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/2816852364163130093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=2816852364163130093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2816852364163130093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/2816852364163130093'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/asynchronous-unity3d-components.html' title='Asynchronous Unity3D Components.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-7228644461802511691</id><published>2011-01-06T21:44:00.011+08:00</published><updated>2011-01-12T21:38:18.881+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><title type='text'>Unity3D - WWW support is broken.</title><content type='html'>Every now and then, I come across something so abysmally stupid that I... I just have to whinge about it to the planet.&lt;br /&gt;&lt;br /&gt;Dear Unity Technologies,&lt;br /&gt;&lt;br /&gt;The WWW class in Unity3D is rubbish. It is missing a critical feature, that is, the ability to add or modify headers on an outgoing GET web request. Without this feature, any non-trivial usage of HTTP is IMPOSSIBLE. Try it, and you get this:&lt;pre&gt;Error when creating request. GET request with custom headers is not supported.&lt;/pre&gt;It would have taken longer to write the code to raise this exception than to actually code the functionality, so WHY IS IT MISSING!?!?! And it's been like this for A LONG TIME SO FIX IT ALREADY!&lt;br /&gt;&lt;br /&gt;please.&lt;br /&gt;&lt;br /&gt;/rant.&lt;br /&gt;&lt;br /&gt;PS: While you're adding the above code, please expose the HTTP STATUS CODE so that I can actually do REAL HTTP WORK, like for instance. distinguish between a 200 response and a 404 response? THAT WOULD BE VERY HANDY!!@#!@#!&lt;br /&gt;&lt;br /&gt;PPS: BTW, there is no need to do a DNS query every time a web request is made. It makes things run like treacle up a hill. You can cache things like that. Honestly, did an intern/monkey write this?&lt;br /&gt;&lt;br /&gt;PPPS: If you fancy, please, send me the relevant code and I'll do the job.&lt;br /&gt;&lt;br /&gt;PPPPS: You took too long. &lt;a href="http://code.google.com/p/unityweb/source/checkout"&gt;http://code.google.com/p/unityweb/source/checkout&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-7228644461802511691?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/7228644461802511691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=7228644461802511691' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7228644461802511691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/7228644461802511691'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/unity3d-rant-about-www.html' title='Unity3D - WWW support is broken.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-4437264027183434838</id><published>2011-01-04T09:57:00.003+08:00</published><updated>2011-01-04T10:00:04.828+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>Pony Expired.</title><content type='html'>I arrived back in the office this morning. Someone killed our pony.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1srVB7Ihd-8/TSJ-vQDWKgI/AAAAAAAAAfY/y3iwKByt0yo/s1600/23122010081.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_1srVB7Ihd-8/TSJ-vQDWKgI/AAAAAAAAAfY/y3iwKByt0yo/s400/23122010081.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5558144240356567554" /&gt;&lt;/a&gt;&lt;br /&gt;RIP Pink Pony. You will be avenged!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-4437264027183434838?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/4437264027183434838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=4437264027183434838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4437264027183434838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/4437264027183434838'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2011/01/pony-expired.html' title='Pony Expired.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1srVB7Ihd-8/TSJ-vQDWKgI/AAAAAAAAAfY/y3iwKByt0yo/s72-c/23122010081.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8576545635958057602</id><published>2010-12-22T10:31:00.004+08:00</published><updated>2010-12-22T10:39:09.990+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nostalgia'/><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Perth'/><title type='text'>Starfire!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1srVB7Ihd-8/TRFkg_zSuuI/AAAAAAAAAfM/Hpw3EORE-tI/s1600/starfire1.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_1srVB7Ihd-8/TRFkg_zSuuI/AAAAAAAAAfM/Hpw3EORE-tI/s200/starfire1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5553330333569694434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dosgamesarchive.com/download/starfire/"&gt;I just played Paul Turbett's first PC game&lt;/a&gt;, via DOSBox. Pure Awesome. Paul is now &lt;a href="http://blacklabgames.com.au/"&gt;Black Lab Games&lt;/a&gt;, and on the side we work together on other secret projects.&lt;br /&gt;&lt;br /&gt;When I was much younger, I remember applying for a job at Silver Lightning Software (Paul's company at the time). Hah, I wonder if he still has my resume, or if it went straight into the bin! Funny how, almost two decades later, we end up working together.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8576545635958057602?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8576545635958057602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8576545635958057602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8576545635958057602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8576545635958057602'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2010/12/starfire.html' title='Starfire!'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1srVB7Ihd-8/TRFkg_zSuuI/AAAAAAAAAfM/Hpw3EORE-tI/s72-c/starfire1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-3625205623754928730</id><published>2010-12-21T13:50:00.007+08:00</published><updated>2010-12-21T13:55:16.615+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Spacecraft'/><title type='text'>More Ships.</title><content type='html'>These ships are all rendered within Unity3D using a toon style shader. No textures are used, just flat colours.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1srVB7Ihd-8/TRBAzxlTgbI/AAAAAAAAAfE/M1oP_sMTXPo/s1600/ship6.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 299px;" src="http://1.bp.blogspot.com/_1srVB7Ihd-8/TRBAzxlTgbI/AAAAAAAAAfE/M1oP_sMTXPo/s400/ship6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5553009598775132594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1srVB7Ihd-8/TRBAvDdwiQI/AAAAAAAAAe8/xC-ur3J3cy0/s1600/ship5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 301px;" src="http://3.bp.blogspot.com/_1srVB7Ihd-8/TRBAvDdwiQI/AAAAAAAAAe8/xC-ur3J3cy0/s400/ship5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5553009517675972866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1srVB7Ihd-8/TRBAqKFN-mI/AAAAAAAAAe0/fiwnuTo3Yeg/s1600/ship4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;" src="http://4.bp.blogspot.com/_1srVB7Ihd-8/TRBAqKFN-mI/AAAAAAAAAe0/fiwnuTo3Yeg/s400/ship4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5553009433552747106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1srVB7Ihd-8/TRBAkVCY5eI/AAAAAAAAAes/pvWNR8NUQIc/s1600/ship3.1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_1srVB7Ihd-8/TRBAkVCY5eI/AAAAAAAAAes/pvWNR8NUQIc/s400/ship3.1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5553009333414454754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1srVB7Ihd-8/TRBAehxFa5I/AAAAAAAAAek/6lTsOU2A3tE/s1600/ship2.1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 298px;" src="http://2.bp.blogspot.com/_1srVB7Ihd-8/TRBAehxFa5I/AAAAAAAAAek/6lTsOU2A3tE/s400/ship2.1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5553009233752320914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1srVB7Ihd-8/TRBAZF-RIBI/AAAAAAAAAec/kS1pv4uMBvA/s1600/ship1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 301px;" src="http://4.bp.blogspot.com/_1srVB7Ihd-8/TRBAZF-RIBI/AAAAAAAAAec/kS1pv4uMBvA/s400/ship1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5553009140392075282" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-3625205623754928730?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/3625205623754928730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=3625205623754928730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3625205623754928730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/3625205623754928730'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2010/12/more-ships.html' title='More Ships.'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1srVB7Ihd-8/TRBAzxlTgbI/AAAAAAAAAfE/M1oP_sMTXPo/s72-c/ship6.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-1439270932640264054</id><published>2010-12-20T21:33:00.004+08:00</published><updated>2010-12-20T21:36:09.742+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Awesome Cloud Game Library...</title><content type='html'>&lt;a href="http://www.pysoy.org/"&gt;Built primarily for cloud games, PySoy offers an intuitive API for managing object behavior in 3D space.&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&amp;lt;chortle&amp;gt; I'm pretty sure this sentence (from the main PySoy page) is a joke. Of course it is. Isn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-1439270932640264054?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/1439270932640264054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=1439270932640264054' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1439270932640264054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/1439270932640264054'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2010/12/awesome-cloud-game-library.html' title='Awesome Cloud Game Library...'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8935780327334775165.post-8125778387615492717</id><published>2010-12-17T14:55:00.000+08:00</published><updated>2010-12-17T14:56:26.181+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random'/><title type='text'>...?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1srVB7Ihd-8/TQsJhdDsLcI/AAAAAAAAAeM/eoj4Kp7kqZI/s1600/17122010009.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_1srVB7Ihd-8/TQsJhdDsLcI/AAAAAAAAAeM/eoj4Kp7kqZI/s400/17122010009.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5551541436004707778" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8935780327334775165-8125778387615492717?l=entitycrisis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://entitycrisis.blogspot.com/feeds/8125778387615492717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8935780327334775165&amp;postID=8125778387615492717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8125778387615492717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8935780327334775165/posts/default/8125778387615492717'/><link rel='alternate' type='text/html' href='http://entitycrisis.blogspot.com/2010/12/blog-post.html' title='...?'/><author><name>Simon Wittber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1srVB7Ihd-8/S5YByvT__KI/AAAAAAAAAUg/aGZuzfG9fFg/s1600-R/5e4f935c3adde78c9fa1c290295774cf.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1srVB7Ihd-8/TQsJhdDsLcI/AAAAAAAAAeM/eoj4Kp7kqZI/s72-c/17122010009.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
