<?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-6967593701414876303</id><updated>2012-01-17T22:22:21.970-08:00</updated><category term='the media'/><category term='education'/><category term='contests'/><category term='new unity version'/><category term='avert fate'/><category term='culture'/><category term='game projects'/><category term='videos'/><category term='megapixel'/><category term='music'/><category term='graveck'/><category term='racing project'/><category term='copyfight'/><category term='life'/><category term='starcraft'/><category term='shockwave'/><category term='game design'/><category term='belligerency'/><category term='lightmapping'/><category term='tutorials'/><category term='literary'/><category term='activism'/><category term='unity packages'/><category term='unite'/><category term='internet'/><category term='history'/><category term='shader adventures'/><category term='particle effects'/><category term='WIP'/><category term='webplayers'/><category term='copenhagen'/><category term='micro projects'/><title type='text'>Blog of Forest Johnson</title><subtitle type='html'>Realtime 3D development and recently some activism</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-4642160198671131634</id><published>2011-11-03T18:22:00.000-07:00</published><updated>2011-11-03T18:30:37.518-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='the media'/><category scheme='http://www.blogger.com/atom/ns#' term='copyfight'/><category scheme='http://www.blogger.com/atom/ns#' term='activism'/><title type='text'>If you vote against Protect-IP, we will vote for YOU</title><content type='html'>As more and more teenagers like myself reach voting age full of piss and vinegar, ready to cast our first votes, young voters are becoming increasingly well-steeped in digital culture, and more and more, the realities of our online lives will shape political opinion.&lt;br /&gt;&lt;br /&gt;I am an example of an artist from the digital generation. I was on the internet using my little hands to type words to people all around the globe before I really knew how to spell any of them. My parents homeschooled me, and I found the classroom of my dreams when I stepped through a digital portal to places like forums, irc channels, and wikis in the programming, digital graphics, and video game development worlds.&lt;br /&gt;&lt;br /&gt;I mingled with professionals in the field, got jobs, and participated in a community that, over the span of my education, became a multi billion dollar industry. I was photoshopping the watermarks off of google image search results before I even knew what copyright law was, and using whatever music I could find to accompany my visual productions because I knew that no one cared and everyone else was doing it too.&lt;br /&gt;&lt;br /&gt;As I grew older, the iphone and android were released along with additional advancements in web-based technology, and I watched as my online friends, with who I shared knowledge and digital resources daily, became superstars in a booming industry. I realized that the kind of hive-mind, greater-good sharing that had been a fact of life for me and my then-microcosmic community, that had been labeled copyright infringement, was really not a crime, and didn't have to be criminalized for media industry to succeed.&lt;br /&gt;&lt;br /&gt;In fact, I would say that if such laws had been enforced effectively, the mobile entertainment industry that I participated in the birth of might not be as successful and promising as it is today.&lt;br /&gt;&lt;br /&gt;Protect-IP is all about increasing copyright enforcement, and it directly or indirectly targets many of the venues in which new digital industries are growing every year.&lt;br /&gt;&lt;br /&gt;A vote for Protect-IP is a vote against small businesses, it is a vote to criminalize a generation, and a vote for the sole benefit of large media corporations that are past their prime and do not contribute anything to creative industry any more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-4642160198671131634?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/4642160198671131634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=4642160198671131634' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4642160198671131634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4642160198671131634'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2011/11/if-you-vote-against-protect-ip-we-will.html' title='If you vote against Protect-IP, we will vote for YOU'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-9010021010002852306</id><published>2011-10-07T21:08:00.000-07:00</published><updated>2011-10-07T21:11:39.887-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literary'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>more writing</title><content type='html'>Matt would later be told that this is what heroin feels like. To be swaddled like a baby, borne with love and acceptance through a world whose savage, lacerating thorns are distant and inconceivable in the numbing blackness. He was just a child at the time, too big for the booster seat, but not quite tall enough for the seatbelt. He was curled up, tucked in as if in between the cracks of the cushions, and although the cool air from the vents surrounded and assaulted with steady gusts, the chills he felt were mere touches, flowing like laughter through and around him. He was covered and protected  by a Planets and Rocketships blanket that had been bought for him by some unseen aunt.  Blue, orange, purple, the colors of the cartoon universe were illuminated before his eyes by each sweep of a highway light. Matt couldn't see anything over the dashboard except for the twin rows of stars marking the edge of the galactic highway he was flying down. Matt's father was explaining something about the retroreflectors: glass cubes, ninety degrees, headlights, return to sender. But Matt's ears were tuned only to the earnest humming of the wheels of his spacecraft. Having a tumor is no fun. That's what he had learned at the hospital. He used to be afraid of needles, but after being rolled through the  dim corridors and stuck at every turn, he had learned to close his eyes and float, numb. With each bump, the drop of drool waggled up and down at the place where his lips met, or slipped off into space, splattering itself on the cushion milliseconds later. He was oblivious to the whole process. They were nearing their destination, the highway had gotten wider and the lights came up to signify that they had reached the end, like at a play or a movie. Soon they would slow to orbital velocity for a cloverleaf loop around Exit 12, and familiar neon signs would float past; Guadalajara's, Valley Corner, Exxon. They would be home, rolling up the gravel driveway, greeted by rustling corn fields and a cacophony of dogs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-9010021010002852306?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/9010021010002852306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=9010021010002852306' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/9010021010002852306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/9010021010002852306'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2011/10/more-writing.html' title='more writing'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-3988369726245093918</id><published>2011-08-09T17:06:00.000-07:00</published><updated>2011-08-09T17:09:22.466-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literary'/><title type='text'>We get together to write stories</title><content type='html'>	Look at that kid. Kyle's his name? Heh. Fitting. He's just one tiny speck that'll probably just end up contributing to some embarrassing statistic later on in his life. If you took the roof off of this Wal-Mart, the one his mom took him to, and looked at it from above, you'd see how tiny of a speck he really is. And there are tons of Wal-Marts out there, each with it's own obnoxious little shit, just as inconsequential as he is.&lt;br /&gt;&lt;br /&gt;	It's a cool breeze at the race track. It's the morning. Before the big race, I rev my car and take off down the track. I'm blowing dust and exhaust on everyone as I pass by the side lines. Eat my dust! I'm free, racing down the track, tearing into the track! They're screaming my name!&lt;br /&gt;&lt;br /&gt;	Seconds earlier...&lt;br /&gt;&lt;br /&gt;	Hi Mel, how's Sophie doing? I was just wondering what brand of body wash my husband's using. No, I don't expect you to.. &lt;b&gt;Don't touch that. Don't touch that!&lt;/b&gt; But can you please go in the bathroom and look? See, I know he uses the Old Spice but there are like six bazzillion different kinds.. &lt;span style="font-weight:bold;"&gt;No, you can't have that. No, that's for girls.&lt;/span&gt; Glacial Falls? I don't see that here, what does it look like? Is that the natural one? I really think he should.. I know, he doesn't think there's anything too it, but I really think.. &lt;span style="font-weight:bold;"&gt;Kyle, stop!&lt;/span&gt;  Look, I'm sorry, he's.. &lt;span style="font-weight:bold;"&gt;Kyle, where are you going? K,&lt;/span&gt;  No, not.. &lt;span style="font-weight:bold;"&gt;KYLE STUART WILLIAMS!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;	Look, down the isle, on the other side of the store, in the clothing section, that one small, insignificant speck just disappeared under a rack of Levi's Jeans. She'll never find him.&lt;br /&gt;&lt;br /&gt;	She doesn't care about me. She won't come. I'm going to sit here for the rest of my life. No one will find me here. No one will ever care about me. When everyone leaves for the night, I'll sneak out and steal chicken strips from the deli. Every night I'll get three chicken strips. If I take too many, someone will notice. If I don't take enough, I'll starve. I probably should eat something else, too. You can't eat one thing for your whole life. I think peanut butter will work. Three chicken strips a day, and a spoon of peanut butter. I'll be fine. I don't need her any more. Think! I wonder what it's like at night, if there are ghosts walking the isles, pushing the carts around all night. I'll be like a ghost. The other ghosts will let me help them shop, and take care of me. Unlike her.&lt;br /&gt;&lt;br /&gt;	Ma'am, we know he hasn't left the store. We'd know if he left, because the entrances and exits are all under video surveillance. Ma'am, we've already checked the recordings twice, he walks in with you, and never leaves. Ma'am, we're doing all we can. Ma'am, you have to calm down. Ma'am, I know you've already been everywhere, but you're the one he will listen to, if he's hiding, you.. I know, Ma'am, but this happens a lot here, and we've never had a lost child that was not recovered.&lt;br /&gt;&lt;br /&gt;	Hey, lady, I know where your kid is. See that Levi's rack at the end of the aisle? He's hiding in there. I don't know what you did to him, but i've been watching that rack since he went in, and it quivered a bit after you went by there, but he hasn't budged. Just so you know. &lt;br /&gt;&lt;br /&gt;I guess that's when she jumped me, cause it's the last thing I remember before I woke up with stitches from the brick she must have been carrying in her purse. Apparently that kid wasn't so worthless after all. &lt;br /&gt;&lt;br /&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/6967593701414876303-3988369726245093918?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/3988369726245093918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=3988369726245093918' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3988369726245093918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3988369726245093918'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2011/08/we-get-together-to-write-stories.html' title='We get together to write stories'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-5059073816789933993</id><published>2011-06-27T19:42:00.000-07:00</published><updated>2011-06-27T19:45:58.317-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='belligerency'/><title type='text'>get ready to get fucked up</title><content type='html'>stalks, stalks, stalks stalks, stalks stalks, stalks, &lt;br /&gt;stalks stalks, stalks stalks, stalks, &lt;br /&gt;stalks stalks, stalksstalks  everybody!!&lt;br /&gt;&lt;br /&gt;if you aint gettin food get the fuk out fridge&lt;br /&gt;if you aint eaten salad get da fuk out da fridge&lt;br /&gt;if you aint here to party get the fuck out the fridge&lt;br /&gt;where my vegitarians let me see yo hands uuup&lt;br /&gt;&lt;br /&gt;collard greens&lt;br /&gt;spinach beets&lt;br /&gt;romaine lettuce&lt;br /&gt;cel'ry stalks&lt;br /&gt;head of cabbage&lt;br /&gt;pretty swiss chard&lt;br /&gt;fuck all that shit&lt;br /&gt;get me some kale&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-5059073816789933993?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/5059073816789933993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=5059073816789933993' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5059073816789933993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5059073816789933993'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2011/06/get-ready-to-get-fucked-up.html' title='get ready to get fucked up'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-6152157302416784744</id><published>2011-06-12T14:18:00.000-07:00</published><updated>2011-08-09T17:21:49.572-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='the media'/><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='literary'/><category scheme='http://www.blogger.com/atom/ns#' term='belligerency'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><title type='text'>epistemology</title><content type='html'>&lt;p class="Standard"&gt;what is knowledge?&lt;br /&gt;&lt;br /&gt;how do we know what we know?&lt;br /&gt;&lt;br /&gt;in our modern epistemological climate, information is presumed false until proven true&lt;br /&gt;&lt;br /&gt;proven, that is, by an authority&lt;br /&gt;&lt;br /&gt;when i wandered into creating a new wikipedia article, i was assaulted with questions:&lt;br /&gt;&lt;br /&gt;• is what you are writing about notable?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- has it been the subject of multiple non-trivial published works?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- has it won any well known, reputable awards?&lt;br /&gt;• do you have good sources?&lt;br /&gt;• does your article have a neutral tone?&lt;br /&gt;&lt;br /&gt;i felt like i had been teleported back to a college classroom&lt;br /&gt;&lt;br /&gt;needless to say i never wrote that wikipedia article&lt;br /&gt;&lt;br /&gt;academia and it's slightly friendlier online counterparts, wikipedia included, "prove" things by pointing to corroborating material published by well known and impartial organizations or authors&lt;br /&gt;&lt;br /&gt;this practice protects academic text from advertisers, heavily biased and ignorant authors, and non-academic outside influences&lt;br /&gt;&lt;br /&gt;i think it also protects epistemologically reprehensible myths from being challenged and prohibits new ideas from seeing the light of day&lt;br /&gt;&lt;/p&gt;&lt;p class="Standard"&gt;&lt;br /&gt;“epistemologically reprehensible”&lt;br /&gt;&lt;br /&gt;I say that an idea or belief should be considered "bad" when directly observable and conclusive evidence contradicts it&lt;br /&gt;&lt;br /&gt;not that all beliefs are legitimate until they are proven wrong, but simply, that beliefs and ideas and myths are on a different epistemological level than observations and measurements&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;observations and measurements should trump myths and should dominate the discourse, but unfortunately, the opposite is true in our society&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;i blame this mostly on human nature, but also partly on our current information paradigms.&lt;br /&gt;&lt;/p&gt;&lt;p class="Standard"&gt;&lt;br /&gt;“myth”&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;on 9/11, afghan terrorists highjacked some planes and flew them into some buildings&lt;/p&gt;&lt;p class="Standard"&gt;&lt;/p&gt;&lt;p class="Standard"&gt;jet fuel fires broke out in both world trade center towers, quickly reaching temperatures that could melt steel, and as the main structural columns weakened, both buildings fell down individually&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;building seven of the world trade center complex was struck by debris from the falling towers and fires broke out inside it as well, which led to its eventual collapse&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;“should “ / “human nature”&lt;br /&gt;&lt;br /&gt;humans do not do what they "should" do&lt;br /&gt;&lt;br /&gt;i should stop surfing the net and face whatever emotional turmoil has been winding me up today&lt;br /&gt;they should stop eating so much junk food&lt;br /&gt;he should really just go over and talk to her&lt;br /&gt;we should stop shopping at wal-mart and consuming so much&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;but its not gonna happen&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;we're too tied up by emotions to be rational&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;we're locked into step&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;we'll dance for our credit card bills, we'll eat shit, as much as we can grab, and we'll ignore eachother till we die&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;“observations”&lt;br /&gt;&lt;/p&gt;&lt;p class="Standard"&gt;both world trade centers and wtc7 fell too fast to have been toppled by a single structural failure - they were measured to have fallen at roughly free-fall speed - that is, the upper part of the building fell as fast as it would if it had been held up by a massive crane and then dropped through an empty sea level atmosphere.&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;other, older buildings constructed much more flimsily have survived hotter, larger, longer lived fires&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;this would be the first time in history that a steel framed building fell down from a fire&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;sulfur, an ingredient of the steel melting incendiary explosive thermate, was measured in extraordinary concentration at the site&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;molten steel was observed in abundance at the site, and measured at temperatures much higher than those at which jet fuel burns under ideal conditions &lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;small fragments of unburned explosive containing layered iron oxide, aluminum, and carbon were found at the site. their construction and properties matched published whitepapers generated by the research and development process of a new incendiary called nanothermite &lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;dust and debris was observed and recorded bursting out of the trade centers as they collapsed, well below the “collapse wave”&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;the collapse appeared to be too energetic in general to have been caused by the kinetic energy of the upper part of the building.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="Standard"&gt;“do you have good sources?”&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;what is a source? a source is a text created by someone unrelated to you that conveys an idea, belief, or myth somehow related to yours&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;a source can also be a measurement or an observation that you are using as evidence for your argument&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;too much of academic knowledge and well accepted knowledge has grown from sources which are primarily ideas, beliefs, and myths&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;when a text is judged by an authority, as in peer review or any other arena, its sources are checked&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;do they say what you said they say?&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;its myths, ideas, and beliefs are checked&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;do these ideas, myths, and beliefs make sense to me? are they acceptable by our society?&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;its measurements and observations are checked&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;are you using complicated statistics math to hoodwink us? did you conduct your study appropriately?&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;if it passes those criterion, it passes the test and gets published&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;but i argue that the most important question is never asked: did you include the relevant observations and measurements? what is the epistemology of your text? if you know something, then, how do you know it? because you saw it? or because you read about it in a book or a paper by a well respected author or organization? because it doesn't make sense to you and your peers any other way? because the alternative is too scary to think about?&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;i would refuse to publish anything of importance in an academic context that does not include as much observation and measurement as it does cultural, mythical, and textual references, even if the observations and measurements are nothing more than personal experiences and accounts relevant to the subject&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;im tired of myths&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;im tired of humanties courses&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;im tired of fox news &lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;im tired of CrimethInc and all the anarchists&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;im tired of the 9/11 commission report&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;im tired of mother jones&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;p class="Standard"&gt;sorry humanity, but you're full of shit&lt;/p&gt;&lt;p class="Standard"&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-6152157302416784744?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/6152157302416784744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=6152157302416784744' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6152157302416784744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6152157302416784744'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2011/06/epistemology.html' title='epistemology'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-7172530406077256182</id><published>2011-05-22T19:35:00.000-07:00</published><updated>2011-06-12T14:50:39.951-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='activism'/><category scheme='http://www.blogger.com/atom/ns#' term='belligerency'/><title type='text'>u lock justice</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-q8j6JpmOUm4/TdnIsqMcu5I/AAAAAAAAASs/ZdjuTXHcxjI/s1600/rambosplit.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 316px; height: 320px;" src="http://2.bp.blogspot.com/-q8j6JpmOUm4/TdnIsqMcu5I/AAAAAAAAASs/ZdjuTXHcxjI/s320/rambosplit.jpg" alt="" id="BLOGGER_PHOTO_ID_5609735480432966546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;for everytime i hear them say (u lock justice!)&lt;br /&gt;get the fuck out of the way (u lock justice!)&lt;br /&gt;i will defend my right of way (u lock justice!)&lt;br /&gt;that heap of steel i'm gonna slay (u lock justice!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-7172530406077256182?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/7172530406077256182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=7172530406077256182' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/7172530406077256182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/7172530406077256182'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2011/05/u-lock-justice.html' title='u lock justice'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-q8j6JpmOUm4/TdnIsqMcu5I/AAAAAAAAASs/ZdjuTXHcxjI/s72-c/rambosplit.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-216224272139850860</id><published>2011-02-07T12:33:00.000-08:00</published><updated>2011-08-09T17:18:42.604-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literary'/><category scheme='http://www.blogger.com/atom/ns#' term='activism'/><category scheme='http://www.blogger.com/atom/ns#' term='belligerency'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>More Bomb + Some Guante</title><content type='html'>This has officially deteriorated into the incoherent ramblings of a personal blog.&lt;br /&gt;&lt;br /&gt;Bomb the music industry - Old and Unprofessional&lt;br /&gt;&lt;br /&gt;I got seven gallons in my tank.&lt;br /&gt;That's enough to get me back to Queens so I can write this song.&lt;br /&gt;&lt;br /&gt;I got $300. I can pay rent this month.&lt;br /&gt;Oh my god! Oh my god! It's just enough.&lt;br /&gt;Oh my god! Oh my god! I'm all grown up.&lt;br /&gt;I'm Oh my Oh my godddd!&lt;br /&gt;&lt;br /&gt;Burritos, malt liquor, Katamari, broken tuner.&lt;br /&gt;Burritos, malt liquor, Katamari, broken tuner.&lt;br /&gt;Two days. Three bones times One Oh Oh.&lt;br /&gt;Oh Oh my&lt;br /&gt;Oh my godddd!&lt;br /&gt;&lt;br /&gt;HOORAY for the young professionals!&lt;br /&gt;We'll stay out of your way. We will give you the world.&lt;br /&gt;We will find an easy way to live life far away from you.&lt;br /&gt;Give head. Get ahead. Play dirty, not fair.&lt;br /&gt;Be a billionaire. Be a jillion... aire.&lt;br /&gt;But you'll all be same you'll all be same&lt;br /&gt;until you're old and unprofessional like meee.&lt;br /&gt;&lt;br /&gt;Oh my god! Oh my god!&lt;br /&gt;Oh my god! Oh my god!&lt;br /&gt;&lt;br /&gt;- Try having fun.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El Guante - Starfish&lt;br /&gt;&lt;br /&gt;i'm standing in a school or a submarine&lt;br /&gt;everything is grey and the walls could almost kiss one another&lt;br /&gt;children are avalanching around my legs flowing into one another&lt;br /&gt;thier faces erased by thier sheer numbers its too fucking dark&lt;br /&gt;here, i think,&lt;br /&gt;i might be drowning here and they all already ghosts though i'm the one without a heartbeat&lt;br /&gt;and my job these days is to turn the lights on and pretend to be brave&lt;br /&gt;&lt;br /&gt;The floor isn't there but it smells like unused paint brushes&lt;br /&gt;the air is still, hanging just over this river or this sewer pipe full of hands and shoes and teeth&lt;br /&gt;i see a teacher in a window a smiling face painted onto a crash test dummy&lt;br /&gt;i forget where i'm going these children will grow up to be scarecrows&lt;br /&gt;&lt;br /&gt;these children will snarl once at the world and they will be put down&lt;br /&gt;these children will grow into the poems written about them&lt;br /&gt;live in the spaces between the letters and shiver when the books open&lt;br /&gt;and my job these days is to melt the winter with a flashlight, see&lt;br /&gt;&lt;br /&gt;i work in afterschool program purgatory moving from school to school&lt;br /&gt;siphoning tears and collecting poems&lt;br /&gt;i keep the poems in a shiny leather briefcase i dump the tears out in the parking lot&lt;br /&gt;and my job these days is to identify bodies&lt;br /&gt;   my job these days is to be the disney world full body suit Sisyphus&lt;br /&gt;   my job these days is to dream of starfish&lt;br /&gt;&lt;br /&gt;tens of thousands gasping for breath on the beach being torn apart by the sea gulls&lt;br /&gt;i toss a few back into the ocean and people tell me that i'm making a difference&lt;br /&gt;but there is no honour in triage, only necessity and these children, well&lt;br /&gt;&lt;br /&gt;they don't need one plucky white woman to pry them open and extract their genius&lt;br /&gt;or one more straight A teach for america mirage tying to save them or&lt;br /&gt;        one more positive male role model teaching them how to write poetry&lt;br /&gt;and my job these days is to be one more positive male role model teaching them how to write poetry&lt;br /&gt;and it's killing me&lt;br /&gt;&lt;br /&gt;a teacher once told me&lt;br /&gt;that this is the curse of direct service&lt;br /&gt;we make a difference just not enough of one&lt;br /&gt;&lt;br /&gt;we are the bricks in the haunted house&lt;br /&gt;doing an admirable job keeping the ceiling from collapsing but unable to remove the evil from the air&lt;br /&gt;and my job these days is to be a hack exorcist&lt;br /&gt;   my job these days is to be a super hero in a coma&lt;br /&gt;        a strip mall santa claus&lt;br /&gt;   my job these days is to blindly feel my way through the jaded corners of these schools and not bleed too much&lt;br /&gt;and suddenly i remember where i'm going&lt;br /&gt;&lt;br /&gt;the guidance counselor&lt;br /&gt;who is concerned that one of my students might be unstable because she wrote a poem about death&lt;br /&gt;not knowing that death and suffering are pretty much all that thirteen year olds write about&lt;br /&gt;but on my way to the office, an impossibly small boy cannonballs through the crowd, punches me in the shoulder and says&lt;br /&gt;thank you&lt;br /&gt;&lt;br /&gt;fuck&lt;br /&gt;his name is brian, he says thank you, and he means it, and i'm stuck&lt;br /&gt;some where between you're welcome and i'm sorry&lt;br /&gt;i'm stuck staring at banners&lt;br /&gt;&lt;br /&gt;"attitude is everything"&lt;br /&gt;"no child left behind"&lt;br /&gt;"i love my school" i'm stuck&lt;br /&gt;&lt;br /&gt;and my job these days is not to make a difference, but to fight for a world in which I don't have to&lt;br /&gt;   my job these days is to try to find a way to be both brick and buildin'&lt;br /&gt;to teach starfish to fly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-216224272139850860?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/216224272139850860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=216224272139850860' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/216224272139850860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/216224272139850860'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2011/02/more-bomb-some-guante.html' title='More Bomb + Some Guante'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-2409145630526366732</id><published>2011-01-31T20:54:00.000-08:00</published><updated>2011-06-12T14:53:00.022-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='videos'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><title type='text'>How to scrape youtube videos (PHP example)</title><content type='html'>In this post I detail a method for downloading the FLV file associated with a youtube video. This is a basic guide and doesn't go into much detail about different quality or how to determine file size or stuff like that, how to do it entirely on the client side, and stuff like that. but I have implemented it and it works.&lt;br /&gt;&lt;br /&gt;Here are the steps in the process.&lt;br /&gt;&lt;br /&gt;1. Get the html of  youtube.com/watch?v=asdlhkhasd&lt;br /&gt;2. Run all the javascript on it to produce the final html that the browser uses&lt;br /&gt;3. find the element named "movie_player" and get the content of its flashVars attribute&lt;br /&gt;4. url un-encode that twice&lt;br /&gt;5. find the stuff between "fmt_stream_map=X|" and "|" where X is (as far as I have seen) 1 to 2 numeric digits.&lt;br /&gt;6. Thats the link to your .flv file&lt;br /&gt;&lt;br /&gt;Here's how I implemented it. This script assumes that you have a directory named files next to your php script which php can write to.&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid gray; padding: 5px;"&gt;&lt;br /&gt;&lt;a onclick="var c = document.getElementById('code1'); c.style.display = (c.style.display == 'none' ? 'block' : 'none');" href="http://www.blogger.com/post-edit.g?blogID=6967593701414876303&amp;amp;postID=2409145630526366732#"&gt; Show/Hide &lt;/a&gt;&lt;br /&gt;&lt;pre style="display: none;" id="code1"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;$httpHost = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost');&lt;br /&gt;$scriptUrl = 'http' . ((isset($_ENV['HTTPS']) &amp;amp;&amp;amp; $_ENV['HTTPS'] == 'on') || $_SERVER['SERVER_PORT'] == 443 ? 's' : '') . '://' . $httpHost . ($_SERVER['SERVER_PORT'] != 80 &amp;amp;&amp;amp; $_SERVER['SERVER_PORT'] != 443 ? ':' . $_SERVER['SERVER_PORT'] : '') . $_SERVER['PHP_SELF'];&lt;br /&gt;$scriptBase = substr($scriptUrl, 0, strrpos($scriptUrl, '/')+1);&lt;br /&gt;&lt;br /&gt;$inputWidth = "500px";&lt;br /&gt;&lt;br /&gt;if(isset($_GET['ajaxFileProg'])) {&lt;br /&gt;if(file_exists($_GET['ajaxFileProg'])) {&lt;br /&gt; echo filesize($_GET['ajaxFileProg']);&lt;br /&gt;} else {&lt;br /&gt; echo "0";&lt;br /&gt;}&lt;br /&gt;exit(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if(isset($_GET['refreshDownloadAndCache'])) {&lt;br /&gt;$srcFlv = urlencode($_GET['refreshDownloadAndCache']);&lt;br /&gt;$getFName = trim(urlencode(trim($_GET['filename'])));&lt;br /&gt;$getFName1 = $_GET['filename'];&lt;br /&gt;$getFName1 = str_replace("\n", "", $getFName1);&lt;br /&gt;$getFName = str_replace("\n", "", $getFName);&lt;br /&gt;echo &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;script&amp;gt;&lt;br /&gt;parent.document.getElementById("scrapingFrame").src="?downloadAndCache=$srcFlv&amp;amp;filename=$getFName";&lt;br /&gt;&amp;lt;/script&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;END;&lt;br /&gt;exit(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if(isset($_GET['downloadAndCache'])) {&lt;br /&gt;$srcFlv = $_GET['downloadAndCache'];&lt;br /&gt;$getFName = str_replace("\n", "", trim($_GET['filename']));&lt;br /&gt;$dest = "files/" . $getFName;&lt;br /&gt;$file = copy($srcFlv, $dest);&lt;br /&gt;$size = filesize($dest);&lt;br /&gt;echo &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;script&amp;gt;&lt;br /&gt;parent.document.getElementById("scrapingFrame").src="";&lt;br /&gt;parent.endScrapeDownloadMonitor("$getFName");&lt;br /&gt;&amp;lt;/script&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;bing!&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;END;&lt;br /&gt;exit(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if(isset($_GET['scrapeURL'])) {&lt;br /&gt;$url = $_GET['scrapeURL'];&lt;br /&gt;$res = file_get_contents($url);&lt;br /&gt;&lt;br /&gt;if(preg_match("/youtube.com/i", $url, $match)) {&lt;br /&gt; $res = preg_replace("/&amp;lt;img\\b[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;\\/img&amp;gt;/i", "", $res);&lt;br /&gt;&lt;br /&gt;$youtubeScrapeScript = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;window.onload = Start;&lt;br /&gt;&lt;br /&gt;var deltaTime = 0.5;&lt;br /&gt;var done = false;&lt;br /&gt;var moviePlayer;&lt;br /&gt;&lt;br /&gt;function Start () {&lt;br /&gt;UpdateLoop();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function UpdateLoop() {&lt;br /&gt;Update();&lt;br /&gt;// using setTimeout with a string will not work in greasemonkey environment.&lt;br /&gt;setTimeout("UpdateLoop", deltaTime * 1000);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function Update () {&lt;br /&gt;if(!done) {&lt;br /&gt; if(!moviePlayer) moviePlayer = document.getElementById("movie_player");&lt;br /&gt; if(moviePlayer) {&lt;br /&gt;  var vars = unescape(unescape(moviePlayer.getAttribute("flashVars")));&lt;br /&gt; &lt;br /&gt;  var regex = /fmt_stream_map=[0-9|]{1,3}(http[^\|]*)/i;&lt;br /&gt;  var mymatch = regex.exec(vars);&lt;br /&gt; &lt;br /&gt;  var regex1 = /&amp;amp;length_seconds=([0-9]{0,5})&amp;amp;/i;&lt;br /&gt;  var mymatch1 = regex1.exec(vars);&lt;br /&gt; &lt;br /&gt;  var filename1 = escape(trim(document.getElementById("eow-title").innerHTML) + ".flv");&lt;br /&gt; &lt;br /&gt;  parent.beginScrapeDownloadMonitor(escape("files/") + filename1, parseInt(mymatch1[1])*50000);&lt;br /&gt; &lt;br /&gt;  parent.document.getElementById("scrapingFrame").src = "?refreshDownloadAndCache=" + escape(mymatch[1])&lt;br /&gt;               + "&amp;amp;filename=" + filename1;&lt;br /&gt;  done = true;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;function trim(stringToTrim) {&lt;br /&gt;return stringToTrim.replace(/^\s+|\s+$/g,"");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt; $res = preg_replace("/&amp;lt;script&amp;gt;/i", $youtubeScrapeScript, $res, 1);&lt;br /&gt; echo $res;&lt;br /&gt; exit(0);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;echo &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;$title&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;a:link {color:#adc9b1}&lt;br /&gt;a:visited {color:#adc9b1}&lt;br /&gt;a:active {color:#adc9b1}&lt;br /&gt;a:hover {color:#adc9b1}&lt;br /&gt;body{margin:0px; background: #000000; color:#ffffff; font: 11px bitstream vera sans, helvetica, verdana}&lt;br /&gt;.inputClass { border: 1px solid #778a7c;background: #112126; color: #adc9b1; }&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;window.onload = Start;&lt;br /&gt;&lt;br /&gt;var deltaTime1 = 0.5;&lt;br /&gt;var nocache = 0;&lt;br /&gt;var xmlHttp;&lt;br /&gt;var result = "";&lt;br /&gt;var filename = "";&lt;br /&gt;var filesize = 0;&lt;br /&gt;var scrapeDownloadMonitor = false;&lt;br /&gt;&lt;br /&gt;function Start () {&lt;br /&gt;UpdateLoop();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function startScraping () {&lt;br /&gt;var scrapeURL = document.getElementById("scrapeURL").value;&lt;br /&gt;var filename1 = scrapeURL.substring(scrapeURL.lastIndexOf("/")+1, scrapeURL.length);&lt;br /&gt;var arg = scrapeURL.indexOf("youtube.com") != -1 ? "scrapeURL" : "filename="+filename1+"&amp;amp;refreshDownloadAndCache";&lt;br /&gt;document.getElementById("scrapingFrame").src="?"+arg+"=" + document.getElementById("scrapeURL").value;&lt;br /&gt;document.getElementById("line1").innerHTML = "&amp;lt;center&amp;gt;&amp;lt;img style=\" display:inline; font-weight:bold;\" border=\"0\" src=\"loader.gif\"&amp;gt;&amp;lt;/img&amp;gt;&amp;lt;div style=\"position:relative; display:inline; top:-4px;\"&amp;gt;     scraping...&amp;lt;/div&amp;gt;&amp;lt;/center&amp;gt;";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function beginScrapeDownloadMonitor (fname, fsize) {&lt;br /&gt;filename = fname;&lt;br /&gt;filesize = fsize;&lt;br /&gt;scrapeDownloadMonitor = true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function endScrapeDownloadMonitor (msg1) {&lt;br /&gt;scrapeDownloadMonitor = false;&lt;br /&gt;parent.document.getElementById("line1").innerHTML = "Download: &amp;lt;a href=\"$scriptBase/files/"+msg1+"\"&amp;gt;" + msg1 + "&amp;lt;/a&amp;gt;";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function UpdateLoop() {&lt;br /&gt; if(scrapeDownloadMonitor) Update();&lt;br /&gt; setTimeout(UpdateLoop, deltaTime1 * 1000);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function Update () {&lt;br /&gt;nocache += 1;&lt;br /&gt;//parent.document.getElementById("line1").innerHTML = "?ajaxFileProg=" + filename + "&amp;amp;nocache="+nocache;&lt;br /&gt;AjaxSend("?ajaxFileProg=" + filename + "&amp;amp;nocache="+nocache, "DownloadRecieveData");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function DownloadRecieveData () {&lt;br /&gt;if(result.length &amp;gt; 0) {&lt;br /&gt; var pixel = ((result/filesize)*100)+2;&lt;br /&gt; //if(pixel &amp;gt; 100) pixel = 100;"&lt;br /&gt; parent.document.getElementById("line1").innerHTML = "&amp;lt;img src=\"bar.png\" height=\"15px\"; width=\"" + parseInt(pixel) + "%\"&amp;gt;&amp;lt;/img&amp;gt;";// "result:" + result + "  filse: " + filesize + " pixel: " + pixel;//&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function AjaxSend(getFlags, callback)&lt;br /&gt;{&lt;br /&gt;var globalContext = (function(){return this;})();&lt;br /&gt;xmlHttp = null;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt; // Firefox, Opera 8.0+, Safari&lt;br /&gt; xmlHttp=new XMLHttpRequest();&lt;br /&gt;}&lt;br /&gt;catch (e)&lt;br /&gt;{&lt;br /&gt; // Internet Explorer&lt;br /&gt; try&lt;br /&gt; {&lt;br /&gt;  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");&lt;br /&gt; }&lt;br /&gt; catch (e)&lt;br /&gt; {&lt;br /&gt;  try&lt;br /&gt;  {&lt;br /&gt;   xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;  }&lt;br /&gt;  catch (e)&lt;br /&gt;  {&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;xmlHttp.onreadystatechange=function()&lt;br /&gt;{&lt;br /&gt; if(xmlHttp.readyState==4)&lt;br /&gt; {&lt;br /&gt;  result = xmlHttp.responseText;&lt;br /&gt;  globalContext[callback]();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;xmlHttp.open("GET",getFlags,true);&lt;br /&gt;xmlHttp.send(null);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;iframe id="scrapingFrame" style="float:right; display:none;"  src=""&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;&amp;lt;div class="inputClass" style="position:relative; top:10px; padding:3px; margin:3px; width: $inputWidth;" id="line1"&amp;gt;&lt;br /&gt;&amp;lt;b&amp;gt;URL: &amp;lt;/b&amp;gt;&amp;lt;input    style=display:inline; padding:2px; width:435px; class=inputClass type=text id=scrapeURL length=100 value="" /&amp;gt;&lt;br /&gt;  &amp;lt;input    style=display:inline; padding:2px; font-size: 1.2em; type=button value=Scrape onclick=startScraping() /&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;END;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-2409145630526366732?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/2409145630526366732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=2409145630526366732' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/2409145630526366732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/2409145630526366732'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2011/01/how-to-scrape-youtube-videos-php.html' title='How to scrape youtube videos (PHP example)'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-6791013129099968504</id><published>2011-01-02T21:31:00.000-08:00</published><updated>2011-06-12T14:55:21.025-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><title type='text'>what the fuck is this?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/TSFfjhWnk3I/AAAAAAAAASI/nQFSR_MnyAM/s1600/Untitled-13.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 174px;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/TSFfjhWnk3I/AAAAAAAAASI/nQFSR_MnyAM/s200/Untitled-13.jpg" alt="" id="BLOGGER_PHOTO_ID_5557828479005201266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;you will see soon enough&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-6791013129099968504?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/6791013129099968504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=6791013129099968504' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6791013129099968504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6791013129099968504'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2011/01/what-fuck-is-this.html' title='what the fuck is this?'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JaIOUFysR1w/TSFfjhWnk3I/AAAAAAAAASI/nQFSR_MnyAM/s72-c/Untitled-13.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-5194435919318955485</id><published>2010-12-09T17:09:00.000-08:00</published><updated>2010-12-09T17:25:41.698-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>what happens when you eat stuff, or, a tale of four carbohydrates</title><content type='html'>NOTE: this is my understanding of this guy's spiel: &lt;br /&gt;http://www.youtube.com/watch?v=dBnniua6-oM&lt;br /&gt;&lt;br /&gt;He's trying to demonstrate one thing, which is that fructose is bad for you. So obviously it is biased. He forgets to even mention that sucrose and fructose also generate glycogen, so I left that out too, but obviously, fructose isn't totally useless to our bodies, or we would be dead by now. &lt;br /&gt;&lt;br /&gt;Introduction to the characters&lt;br /&gt;&lt;br /&gt;Glucose:&lt;br /&gt;A hexagonally shaped sugar&lt;br /&gt;Akas: Blood Sugar, Dextrose&lt;br /&gt;&lt;br /&gt;Ethanol:&lt;br /&gt;A short hydrocarbon&lt;br /&gt;Akas: Drank, Grain Alcohol&lt;br /&gt;&lt;br /&gt;Sucrose:&lt;br /&gt;Glucose and Fructose bonded to eachother&lt;br /&gt;Akas: Table Sugar&lt;br /&gt;&lt;br /&gt;Fructose:&lt;br /&gt;A pentagonally shaped Sugar &lt;br /&gt;Akas: High Fructose Corn Syrup, or HFCS&lt;br /&gt;&lt;br /&gt;Someone ate a bread on bread sandwich, then drank a soda and a screwdriver. Here's what happened to them:&lt;br /&gt;&lt;br /&gt;Two slices of white bread:    120 calories of Glucose&lt;br /&gt;     -&gt; 80% of the glucose is absorbed on the way to the liver;&lt;br /&gt; on the way it triggers insulin and sends signals that satiate hunger&lt;br /&gt;     -&gt; almost all of the 20% that reaches the liver becomes Glycogen&lt;br /&gt;     -&gt; glycogen is what we use for energy, and it's hard to have too much of it&lt;br /&gt;     -&gt; The rest becomes LDL, also known as bad cholesterol, but it's a tiny amount.&lt;br /&gt;&lt;br /&gt;A shot of Vodka:   120 calories of Alcohol&lt;br /&gt;     -&gt; 20% of the alcohol is absorbed on the way to the liver;&lt;br /&gt; a tiny amount of that 20% is metabolized inside the brain and you get fucked up&lt;br /&gt;     -&gt; once inside the liver, that 80% of the ethanol you drank becomes Acetaldehyde, damaging the liver&lt;br /&gt;     -&gt; then it becomes Acetate, Citrate, Acyl-CoA and most of that is finally exported as fat / LDL&lt;br /&gt;        however some of those things stay in the liver and cause further problems&lt;br /&gt;&lt;br /&gt;A glass of Orange Juice:  120 calories of Sucrose&lt;br /&gt;     -&gt; the fructose and glucose separate in the stomach in 2 seconds,&lt;br /&gt; so half of it does exactly what glucose did, that is,&lt;br /&gt; 40% of the sucrose is used right away, and triggers some insulin&lt;br /&gt; and 10% hits the liver, becoming glycogen.&lt;br /&gt; &lt;br /&gt;     -&gt; the entire other half, the fructose, reaches the liver without being metabolized or triggering insulin&lt;br /&gt;     -&gt; three times as much sugar is being metabolized inside the liver, using up three times as many phosphates,&lt;br /&gt; and as a consequence, you get a lot more uric acid, which causes high blood pressure.&lt;br /&gt;     -&gt; all of the fructose eventually gets metabolized in the same way as alcohol, ending up as LDL / fat&lt;br /&gt;     -&gt; along the way it causes less insulin receptivity (bad thing) and leaves waste products&lt;br /&gt;&lt;br /&gt;A glass of Orange Soda:   120 calories of Fructose&lt;br /&gt;     -&gt; all 120 calories reach the liver without being metabolized or triggering insulin&lt;br /&gt;     -&gt; six times as much sugar is being metabolized inside the liver, using up six times as many phosphates,&lt;br /&gt; and as a consequence, you get a lot more uric acid, which causes high blood pressure.&lt;br /&gt;     -&gt; all of the fructose eventually gets metabolized in the same way as alcohol, ending up as LDL / fat&lt;br /&gt;     -&gt; along the way it causes less insulin receptivity (bad thing) and leaves waste products&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In other words, fructose being in everything (processed foods) really fucks with our bodies, and a diet of fruit isn't that great either. Sweet drinks make you fat just as much as or more than steaks and french fries do, and they fuck with your liver / metabolism just like alcohol.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-5194435919318955485?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/5194435919318955485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=5194435919318955485' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5194435919318955485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5194435919318955485'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2010/12/what-happens-when-you-eat-shit-or-tale.html' title='what happens when you eat stuff, or, a tale of four carbohydrates'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-2881951800001397218</id><published>2010-11-29T14:14:00.000-08:00</published><updated>2011-06-12T14:54:27.854-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='belligerency'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><title type='text'>why not make a blogpost about it</title><content type='html'>Headbone connects to the headphones&lt;br /&gt;Headphones connect to the iPhone&lt;br /&gt;iPhone connected to the internet&lt;br /&gt;Connected to the Google&lt;br /&gt;Connected to the government&lt;br /&gt;&lt;br /&gt;////////////////////////////&lt;br /&gt;&lt;br /&gt;We're growing up in middle of the digital ruckus.&lt;br /&gt;&lt;br /&gt;While we become workers you become golfers,&lt;br /&gt;The modern day coppers beating on us for the papers&lt;br /&gt;&lt;br /&gt;I just give a damn&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JaIOUFysR1w/TPRaYOtcbHI/AAAAAAAAARM/9mmmA5QhBZY/s1600/mia-maya-album-cover-art-499x499.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 320px;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/TPRaYOtcbHI/AAAAAAAAARM/9mmmA5QhBZY/s320/mia-maya-album-cover-art-499x499.jpg" alt="" id="BLOGGER_PHOTO_ID_5545156413511986290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"B.A.S.E." is an acronym that stands for four categories of fixed objects from which one can jump: buildings, antennae, spans (bridge), and earth (cliff).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/TPQqMb5dZ8I/AAAAAAAAARE/J5Gib7Mh39s/s1600/Untitled2.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 229px;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/TPQqMb5dZ8I/AAAAAAAAARE/J5Gib7Mh39s/s320/Untitled2.png" alt="" id="BLOGGER_PHOTO_ID_5545103434335479746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We Will Never Be Like Them Statement via my friend &lt;a href="http://teamawayteam.blogspot.com/"&gt;Christine Peterson&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51);"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;We  are primarily concerned with our relationship to the Everyday, meaning  the rituals and systems we are subjected to or create, both willingly  and unwillingly. Yet, even as we construct rituals for ourselves, we are  aware of our position as receivers of cultural constructs. We live in a  hierarchically organized patriarchy, we are conditioned consumers, and  we've lived the power dynamics at play when we got picked last in gym.  This is our way of dealing.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/TPQotJjiHwI/AAAAAAAAAQ8/kz5JN69CFKY/s1600/Untitled.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/TPQotJjiHwI/AAAAAAAAAQ8/kz5JN69CFKY/s320/Untitled.png" alt="" id="BLOGGER_PHOTO_ID_5545101797324103426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:: whether to respect popular demand and culture or to produce / do things  that no one really understands because you believe they are  intrinsically "better".&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-2881951800001397218?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/2881951800001397218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=2881951800001397218' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/2881951800001397218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/2881951800001397218'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2010/11/why-not-make-blogpost-about-it.html' title='why not make a blogpost about it'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JaIOUFysR1w/TPRaYOtcbHI/AAAAAAAAARM/9mmmA5QhBZY/s72-c/mia-maya-album-cover-art-499x499.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-5261244382506502588</id><published>2010-11-07T14:51:00.001-08:00</published><updated>2010-11-07T14:51:25.449-08:00</updated><title type='text'>From somewhere, a transmission...</title><content type='html'>&lt;p&gt;10/28/2010&lt;/p&gt;&lt;p&gt;Journal 9&lt;/p&gt;&lt;p&gt;So, I think it’s a miracle or  something…but I pretty much understand the whole atom structure thing  now.  I  mean, just the very basics, but it’s more than I’ve ever really   understood about it before, so I’m pretty okay with it. The atom   simulator just made everything so much clearer. I feel like ever science   class should use it, and then maybe I could have learned it the first   time. &lt;/p&gt;&lt;p&gt;Also,  the cloud chamber was pretty awesome. It kind of blew my  mind being  able to see the little trails from the radiation particles.  It also made  it a lot easier to visualize how radiation particles move.  I guess I  never really had a very good picture in my head of how it  worked, but I  sort of imagined it a little different, so it was really  helpful to  actually be able to see how it really works.&lt;/p&gt; &lt;p&gt;My  group partners and I enjoy the video games way too much. It’s  actually  kind of ingenious. It’s like when you give those educational  video games  to little kids and they don’t know they are learning. It’s  kind of  sneaky, but I like it. ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-5261244382506502588?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/5261244382506502588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=5261244382506502588' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5261244382506502588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5261244382506502588'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2010/11/from-somewhere-transmission.html' title='From somewhere, a transmission...'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-4551807103659921261</id><published>2010-10-18T17:38:00.001-07:00</published><updated>2011-06-12T14:54:55.056-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>DJ MIX NUMMER ZWEI</title><content type='html'>&lt;p&gt;Ok, so I redid the mix and let it play through. I messed up once, pretty badly, but managed to keep the beat going anyway. IMO its a legit mix, the tracks are definitely much better than my mixing skills, but it works.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Heres the download link:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;http://tinyurl.com/2fs93am&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Dougal &amp;amp; Gammer - Know The Score&lt;/p&gt; &lt;p&gt;Injured Rezz &amp;amp; Jose Hardcore - We Do Hardcore&lt;/p&gt; &lt;p&gt;Dougal &amp;amp; Gammer - Really Love You ft Mickey Skeedale&lt;/p&gt; &lt;p&gt;Phobic - Maybe&lt;/p&gt; &lt;p&gt;Cascada - Miracle&lt;/p&gt; &lt;p&gt;No Left Turn &amp;amp; Crackerjack - Listen Up (This track is AMAZING)&lt;/p&gt; &lt;p&gt;Bondy Feat. Marie Louise - Rise &amp;amp; Fall&lt;/p&gt;&lt;p&gt;Darwin ft Fraz - We're Getting Faster&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-4551807103659921261?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/4551807103659921261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=4551807103659921261' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4551807103659921261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4551807103659921261'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2010/10/dj-mix-nummer-zwei.html' title='DJ MIX NUMMER ZWEI'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-6042044242327249033</id><published>2010-10-17T13:15:00.000-07:00</published><updated>2011-06-12T14:54:44.374-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>forest the dj</title><content type='html'>&lt;p&gt;alright you motherfuckers, this is a ~ 30 min (should have been) mix with priated virtual dj and jank youtube rips / otherwise pirated hardcore tracks&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;I kept messing up so it skips a lot because I got tired of waiting for the tracks to end when I was recording it. So its just the parts where I am doing any mixing whatsoever, it skips over the actual good sounding parts of the tracks for the most part.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;I hope you like it&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.mediafire.com/?3d5qq7080y3unbb" rel="nofollow" target="_blank"&gt;http://www.mediafire.com/?3d5qq7080y3unbb&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;da tracklist:&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Dougal &amp;amp; Gammer - Know The Score&lt;/p&gt;&lt;p&gt;Injured Rezz &amp;amp; Jose Hardcore - We Do Hardcore&lt;/p&gt;&lt;p&gt;Dougal &amp;amp; Gammer - Really Love You ft Mickey Skeedale&lt;/p&gt;&lt;p&gt;Phobic - Maybe&lt;/p&gt;&lt;p&gt;Cascada - Miracle&lt;/p&gt;&lt;p&gt;No Left Turn &amp;amp; Crackerjack - Listen Up (This track is AMAZING)&lt;/p&gt;&lt;p&gt;Bondy Feat. Marie Louise - Rise &amp;amp; Fall&lt;/p&gt;&lt;p&gt;Rampant DJs ft JT - Alabama (Sy &amp;amp; Unknown remix)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-6042044242327249033?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/6042044242327249033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=6042044242327249033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6042044242327249033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6042044242327249033'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2010/10/forest-dj.html' title='forest the dj'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-6833574357880789395</id><published>2010-10-17T07:30:00.000-07:00</published><updated>2010-10-17T07:35:35.732-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>college</title><content type='html'>...thats why I haven't updated this blog in a really long time. I've pretty much stopped developing stuff on my own time for now.&lt;br /&gt;&lt;br /&gt;Someday I'll be back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-6833574357880789395?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/6833574357880789395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=6833574357880789395' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6833574357880789395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6833574357880789395'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2010/10/college.html' title='college'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-4310262999312992522</id><published>2010-06-04T17:17:00.000-07:00</published><updated>2010-06-04T17:19:15.554-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graveck'/><title type='text'>&gt;:)</title><content type='html'>hi guys&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-4310262999312992522?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/4310262999312992522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=4310262999312992522' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4310262999312992522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4310262999312992522'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2010/06/blog-post.html' title='&gt;:)'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-9195623174140251868</id><published>2010-01-03T15:47:00.000-08:00</published><updated>2010-10-17T07:38:41.338-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='micro projects'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>How to measure the size of an object using a camera</title><content type='html'>I needed to know the size of an object, but I couldn't climb up and measure it. After some thought I came up with an idea: Use a camera, clever math, and a game engine.&lt;br /&gt;&lt;br /&gt;The idea is to simulate both the real life camera and real life object in the game engine. With your photo as a background image and the camera in the correct position relative to the object, in real world units, you should be able to adjust the size of the object until it matches the size of the object in the picture, then read off it's scale. It's not super accurate, but it works.&lt;br /&gt;&lt;br /&gt;However, for this to work, you need to know the angle of your camera's view frustum at whatever zoom level you want. You will also need to know the distance from the camera to the object and the angle between "up" as far as the object is concerned and "up" as far as the camera is concerned, if you are measuring height.&lt;br /&gt;&lt;br /&gt;I am lucky because my dad hunts and consequentially has a range finder, which makes it absurdly easy to find out how far away an object is.&lt;br /&gt;&lt;br /&gt;Anyway, here is how to do it.&lt;br /&gt;&lt;br /&gt;FIRST: measure the view frustum angle&lt;br /&gt;&lt;br /&gt;My plan was to take a picture of something that I can measure and then make a version of that situation inside Unity. I used my doorway. I placed my camera a set distance away from the base of the doorway and took a picture, then measured the dimensions of the doorway and the distance to the camera.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JaIOUFysR1w/S0E2VPXyyVI/AAAAAAAAAP0/vPoBE71REFw/s1600-h/Doorway.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 320px;" src="http://2.bp.blogspot.com/_JaIOUFysR1w/S0E2VPXyyVI/AAAAAAAAAP0/vPoBE71REFw/s320/Doorway.jpg" alt="" id="BLOGGER_PHOTO_ID_5422675164862269778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then, I created a similar scene in unity with a camera at the same distance from a "doorway" (actually a cube) with the same dimensions. Then, I made sure I was using the same aspect ratio as my camera, placed the photo as a background image, and adjusted the view frustum until the cube fit perfectly over the doorway. It came out to 39 degrees.&lt;br /&gt;&lt;br /&gt;The next step is similar, but the process is done backwards. The object is photographed, the distance to the object measured, and then the scene is reconstructed inside unity with the photo as a background and a cube representing the object of interest.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JaIOUFysR1w/S0E8eLJTLTI/AAAAAAAAAP8/6UMLnB8CVck/s1600-h/cam2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/S0E8eLJTLTI/AAAAAAAAAP8/6UMLnB8CVck/s320/cam2.jpg" alt="" id="BLOGGER_PHOTO_ID_5422681915416325426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then, the scale of the cube is adjusted until it matches the photo, and the resulting scale is your measurement.&lt;br /&gt;&lt;br /&gt;Part 3: compensating for angle and also how to find distances without a rangefinder.&lt;br /&gt;&lt;br /&gt;I guess the simplest way to measure would be to practice measuring by counting strides and then approximate the height and use the pythagorean theorem with your measurements. You can also use a measuring tape from the base of the object to the camera and a precise angle measuring tool to figure out the height. You can then use the angle read out directly in unity on your simulated camera.&lt;br /&gt;&lt;br /&gt;My rangefinder has an angle mode where it reads off the horizontal distance from you to your target which is good for bowhunting from a tree stand but also helps me out. I can take an angle mode measurement and a direct measurement and then do some right triangle math to position everything correctly in Unity. Here is the script I attached to my camera:&lt;br /&gt;&lt;br /&gt;// in yards&lt;br /&gt;var noAngle = 0.00;&lt;br /&gt;var withAngle = 0.00;&lt;br /&gt;&lt;br /&gt;function OnDrawGizmos () {&lt;br /&gt;&lt;br /&gt;var adjacentOverHypotenuse = withAngle / noAngle;&lt;br /&gt;var angle = Mathf.Acos(adjacentOverHypotenuse);&lt;br /&gt;Debug.Log("Degrees: " + angle* Mathf.Rad2Deg);&lt;br /&gt;// 36 inches per yard&lt;br /&gt;var height = Mathf.Tan(angle) * withAngle * 36;&lt;br /&gt;transform.position = Vector3(0, -height, -withAngle * 36);&lt;br /&gt;transform.localEulerAngles.x = -angle * Mathf.Rad2Deg;&lt;br /&gt;// assuming the object is at (0,0,0)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;And the setup in unity: (Note: Layers are used here, the ortho cam and photo are just the background picture. All of the real world positioning has to do with the cube and perspective camera(&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JaIOUFysR1w/S0E_RPfGIjI/AAAAAAAAAQE/k_jkfr3zPqU/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 204px; height: 320px;" src="http://2.bp.blogspot.com/_JaIOUFysR1w/S0E_RPfGIjI/AAAAAAAAAQE/k_jkfr3zPqU/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5422684991778071090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I tested it on my house. That window is 77 inches tall and the camera method measured ~79 inches. That's a 2.5% innacuracy, which is close to the rangefinder's inaccuracy at that distance. (The rangefinder is + or - a half yard and the window was 17 yards away, so 3%).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-9195623174140251868?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/9195623174140251868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=9195623174140251868' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/9195623174140251868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/9195623174140251868'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2010/01/how-to-measure-size-of-object-using.html' title='How to measure the size of an object using a camera'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JaIOUFysR1w/S0E2VPXyyVI/AAAAAAAAAP0/vPoBE71REFw/s72-c/Doorway.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-5562907146224977495</id><published>2009-10-29T22:36:00.000-07:00</published><updated>2009-11-04T13:19:15.496-08:00</updated><title type='text'>Car Physics Example 2</title><content type='html'>I made this like 3 months ago, I guess some people want it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yogware.bluegillstudios.com/blogfiles/CarPakke2.zip"&gt;http://yogware.bluegillstudios.com/blogfiles/CarPakke2.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By the way there may be some bug in the build / web player, I have no idea what is up with that.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=Car2&amp;amp;version=2.x" marginheight="0" width="700" frameborder="0" height="300" scrolling="no"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;And here is a version of the Wheel.js script with comments.&lt;br /&gt;&lt;div style="border:1px solid gray; padding:5px;"&gt;&lt;br /&gt;&lt;a href="#" onclick="var c = document.getElementById('code1'); c.style.display = (c.style.display == 'none' ? 'block' : 'none');"&gt; Show/Hide &lt;/a&gt;&lt;br /&gt;&lt;pre style="display:none;" id ="code1"&gt;&lt;br /&gt;var mass = 1.00;&lt;br /&gt;var wheelRadius = 0.00;&lt;br /&gt;var suspensionRange = 0.00;&lt;br /&gt;var suspensionForce = 0.00;&lt;br /&gt;var suspensionDamp = 0.00;&lt;br /&gt;var compressionFrictionFactor = 0.00;&lt;br /&gt;&lt;br /&gt;var sidewaysFriction = 0.00;&lt;br /&gt;var sidewaysDamp = 0.00;&lt;br /&gt;var sidewaysSlipVelocity = 0.00;&lt;br /&gt;var sidewaysSlipForce = 0.00;&lt;br /&gt;var sidewaysSlipFriction = 0.00; &lt;br /&gt;var sidewaysStiffnessFactor = 0.00;&lt;br /&gt;&lt;br /&gt;var forwardFriction = 0.00;&lt;br /&gt;var forwardSlipVelocity = 0.00;&lt;br /&gt;var forwardSlipForce = 0.00;&lt;br /&gt;var forwardSlipFriction = 0.00;&lt;br /&gt;var forwardStiffnessFactor = 0.00; &lt;br /&gt;&lt;br /&gt;var frictionSmoothing = 1.00;&lt;br /&gt;&lt;br /&gt;private var hit : RaycastHit;&lt;br /&gt;&lt;br /&gt;private var parent : Rigidbody;&lt;br /&gt;parent = transform.root.rigidbody;&lt;br /&gt;&lt;br /&gt;private var graphic : Transform;&lt;br /&gt;graphic = transform.FindChild("Graphic");&lt;br /&gt;&lt;br /&gt;private var wheelCircumference = 0.00;&lt;br /&gt;wheelCircumference = wheelRadius * Mathf.PI * 2;&lt;br /&gt;&lt;br /&gt;private var usedSideFriction = 0.00;&lt;br /&gt;private var usedForwardFriction = 0.00;&lt;br /&gt;private var sideSlip = 0.00;&lt;br /&gt;private var forwardSlip = 0.00;&lt;br /&gt;&lt;br /&gt;var car : Car;&lt;br /&gt;var driven = false;&lt;br /&gt;&lt;br /&gt;var speed = 0.00;&lt;br /&gt;&lt;br /&gt;var brake = false;&lt;br /&gt;var skidbrake = false;&lt;br /&gt;&lt;br /&gt;function FixedUpdate ()&lt;br /&gt;{&lt;br /&gt; down = transform.TransformDirection(Vector3.down);&lt;br /&gt; // the object this script is attached to does not move. This ray is like imagining that the shock is compressed as much as possible, and then extends out as far as it can before it hits the ground. If it doesn't, then the wheel is fully extended.&lt;br /&gt; if(Physics.Raycast (transform.position, down, hit, suspensionRange + wheelRadius) &amp;&amp; hit.collider.transform.root != transform.root)&lt;br /&gt; {&lt;br /&gt;  // how fast is the wheel moving relative to the ground, without taking the wheel's rotation into account&lt;br /&gt;  velocityAtTouch = parent.GetPointVelocity(hit.point);&lt;br /&gt;  &lt;br /&gt;  // calculate the force of the shock as it pushes on the car and the earth due to compression. Since the earth does not move, this is an upward force on the car only&lt;br /&gt;  compression = hit.distance / (suspensionRange + wheelRadius);&lt;br /&gt;  compression = -compression + 1;&lt;br /&gt;  force = -down * compression * suspensionForce;&lt;br /&gt;  &lt;br /&gt;  // Here we set t equal to the speed at which the shock is contracting / expanding &lt;br /&gt;  t = transform.InverseTransformDirection(velocityAtTouch);&lt;br /&gt;  t.z = t.x = 0;&lt;br /&gt;  // this force simulates the force exerted by the friction in the suspension.&lt;br /&gt;  shockDrag = transform.TransformDirection(t) * -suspensionDamp;&lt;br /&gt;  &lt;br /&gt;  // the difference between the speed of the ground and the wheel taking rotation + the car's velocity into account. (in local space, that means, relative to the wheel. So if you were standing on the wheel surface, how fast would you percieve the ground moving? Either squashing you every time the wheel goes around (not skidding, absolute value close to zero) or scrapping you to bits (skidding, large absolute value) )&lt;br /&gt;  forwardDifference = transform.InverseTransformDirection(velocityAtTouch).z - speed;&lt;br /&gt;  &lt;br /&gt;  //Ok, this next part is not related to real physics an any way whatsoever. Ummm... Basically the friction that the wheel has with the ground changes (using a lerp function over time) depending on the current friction force. I guess this simulates how once a car starts skidding, the friction goes down so it skids more.&lt;br /&gt;  // __________________z-friction__________________&lt;br /&gt;  // move the current working friction value toward the minimum about porportional to the "skidding-ness" squared&lt;br /&gt;  newForwardFriction = Mathf.Lerp(forwardFriction, forwardSlipFriction, forwardSlip * forwardSlip);&lt;br /&gt;  // increase the current working friction value depending on how hard the shock is pressing the wheel against the ground&lt;br /&gt;  newForwardFriction = Mathf.Lerp(newForwardFriction, newForwardFriction * compression, compressionFrictionFactor);&lt;br /&gt;  // smooth the friction value&lt;br /&gt;  if(frictionSmoothing &gt; 0)&lt;br /&gt;   usedForwardFriction = Mathf.Lerp(usedForwardFriction, newForwardFriction, Time.fixedDeltaTime / frictionSmoothing);&lt;br /&gt;  else&lt;br /&gt;   usedForwardFriction = newForwardFriction;&lt;br /&gt;  // calculate one component of the friction force: the difference between the wheel surface velocity and ground surface velocity times friction (not based on real physics AFAIK)&lt;br /&gt;  forwardForce = transform.TransformDirection(Vector3(0, 0, -forwardDifference)) * usedForwardFriction;&lt;br /&gt;  &lt;br /&gt;  // calculate how much we be slippin  (if the force is high, the tire will give and slip on the road)&lt;br /&gt;  forwardSlip = Mathf.Lerp(forwardForce.magnitude / forwardSlipForce, forwardDifference / forwardSlipVelocity, forwardStiffnessFactor);&lt;br /&gt;  // ____________________________________&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  // this is much the same as the block above, but for the x-axis&lt;br /&gt;  // __________________x-friction__________________&lt;br /&gt;  sidewaysDifference = transform.InverseTransformDirection(velocityAtTouch).x;&lt;br /&gt;  newSideFriction = Mathf.Lerp(sidewaysFriction, sidewaysSlipFriction, sideSlip * sideSlip);&lt;br /&gt;  newSideFriction = Mathf.Lerp(newSideFriction, newSideFriction * compression, compressionFrictionFactor);&lt;br /&gt;  if(frictionSmoothing &gt; 0)&lt;br /&gt;   usedSideFriction = Mathf.Lerp(usedSideFriction, newSideFriction, Time.fixedDeltaTime / frictionSmoothing);&lt;br /&gt;  else&lt;br /&gt;   usedSideFriction = newSideFriction;&lt;br /&gt;  sideForce = transform.TransformDirection(Vector3(-sidewaysDifference, 0, 0)) * usedSideFriction;&lt;br /&gt;  sideSlip = Mathf.Lerp(sideForce.magnitude / sidewaysSlipForce, sidewaysDifference / sidewaysSlipVelocity, sidewaysStiffnessFactor);&lt;br /&gt;  // ____________________________________&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  // this thing is totally made up. It's as if god's hand nudges the car back on course whenever it is moving sideways, by a factor of sidewaysDamp&lt;br /&gt;  t = transform.InverseTransformDirection(velocityAtTouch);&lt;br /&gt;  t.z = t.y = 0;&lt;br /&gt;  sideDrag = transform.TransformDirection(t) * -sidewaysDamp;&lt;br /&gt;  &lt;br /&gt;  // By the some of all you combined, I become CAPTAIN FORCE&lt;br /&gt;  parent.AddForceAtPosition(force + shockDrag + forwardForce + sideForce + sideDrag, hit.point);&lt;br /&gt;  &lt;br /&gt;  // for every action there is an opposite reaction: the wheel adds a force on the ground, but the ground does not move, so that force is added to the car instead in the opposite direction (this lets the engine propel the thing forward). But!!! we also have to add a force on the engine, because otherwise we'd be adding force from nothing. The opposite reaction is this force on the motor. The motor is not a rigidbody, it is a made up thing in the Car.js script&lt;br /&gt;  if(driven)&lt;br /&gt;   car.AddForceOnMotor (forwardDifference * usedForwardFriction * Time.fixedDeltaTime);&lt;br /&gt;  else&lt;br /&gt;   // if this wheel isn't attached to the motor, just add the force to the wheel instead&lt;br /&gt;   speed += forwardDifference; &lt;br /&gt;&lt;br /&gt;  graphic.position = transform.position + (down * (hit.distance - wheelRadius));&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;  graphic.position = transform.position + (down * suspensionRange);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; graphic.transform.Rotate(360 * (speed / wheelCircumference) * Time.fixedDeltaTime, 0, 0); &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function OnDrawGizmos () {&lt;br /&gt; Gizmos.color = Color.yellow;&lt;br /&gt;    Gizmos.DrawRay (transform.position, transform.TransformDirection (Vector3.up) * -wheelRadius);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-5562907146224977495?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/5562907146224977495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=5562907146224977495' title='30 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5562907146224977495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5562907146224977495'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2009/10/car-physics-example-2.html' title='Car Physics Example 2'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>30</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-8850965529292974717</id><published>2009-09-14T19:40:00.000-07:00</published><updated>2010-01-03T17:21:45.159-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='megapixel'/><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><category scheme='http://www.blogger.com/atom/ns#' term='game projects'/><category scheme='http://www.blogger.com/atom/ns#' term='starcraft'/><title type='text'>A method for networking / state synchronization of several player directed psuedo-predictable entities in a game world</title><content type='html'>WE PRESENT A NOVEL METHOD!!!&lt;br /&gt;&lt;br /&gt;No, seriously though, I just had an idea.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt; LONG BACKSTORY / CULTURAL COMMENTARY: &lt;/h3&gt;So um. Over the past few months (In addition to getting a job and kind of going to college) I've been extremely absorbed by competitive Starcraft. "Oh, you mean that cool RTS game Blizzard made back in 1998?" you may ask, and you would be correct. As weird as it seems, many many people still play it. The main reason is that it got adopted as a sport in Korea, and is played professionally on stages in stadiums and malls, with live events broadcast on tv. Another notable thing is &lt;a href="http://iccup.com/"&gt;ICCup&lt;/a&gt; or the International Cyber Cup, which is a free Starcraft server where anyone can play on a modified game client and 3rd party server with great ladder, anti-hack and latency features. Without these things starcraft would be dead for certain, but it has persisted as a competitive e-sport for both pro players in Korea and amateurs everywhere else in the world. I was very impressed with the community that surrounds starcraft and how it is played.&lt;br /&gt;&lt;br /&gt;I've always appreciated multiplayer games with insanely skilled players, like Quake, Counter Strike, and such, especially those played professionally. The reason is that when a game becomes a sport, the community around it transforms radically. Gamers are stereotyped as assholes with no lives, and they are all too often to fit that stereotype to the letter. The anonymity of the internet further compounds the negative cultural stereotype to form an absolute pigsty of human interaction. Anyone who has ever played on xbox live with a headset or seen a relatively unestablished gaming forum knows this; it is sometimes scary and almost always disgusting how low the level of discourse is. However, when the focus is on the competitive aspects of a game, and becoming skilled is a legitimate pursuit that is challenging, rewarding and respected by others, gamers are brought up out of the gutter and made into stars, teams, friends, and their discourse rises with them.&lt;br /&gt;&lt;br /&gt;&lt;table style="border-top: 1px solid rgb(85, 85, 85); border-left: 1px solid rgb(85, 85, 85);" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-right: 1px solid rgb(85, 85, 85); border-bottom: 1px solid rgb(85, 85, 85); margin: 0px; padding: 6px;"&gt;&lt;img src="http://yogware.bluegillstudios.com/gamer1.jpg" width="250px/" /&gt;&lt;/td&gt;&lt;td style="border-right: 1px solid rgb(85, 85, 85); border-bottom: 1px solid rgb(85, 85, 85); margin: 0px; padding: 6px;"&gt;&lt;img src="http://yogware.bluegillstudios.com/gamer2.jpg" width="260px" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right: 1px solid rgb(85, 85, 85); border-bottom: 1px solid rgb(85, 85, 85); margin: 0px; padding: 6px;"&gt;Fig. 1. South Park's depiction of a harcore gamer.&lt;/td&gt;&lt;td style="border-right: 1px solid rgb(85, 85, 85); border-bottom: 1px solid rgb(85, 85, 85); margin: 0px; padding: 6px;"&gt;Fig. 2. Korean progamer LeeJaeDong after winning the OnGameNet Starleague.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Wait, wasn't I supposed to be talking about network code? My plan was to mention offhandedly that I also had been thinking about the culture of gaming a lot and I'd write a different blog about it, but I guess I wanted to write it NOW!!&lt;br /&gt;&lt;br /&gt;Anyways, after thinking long and hard about the gamer culture in Korea and in global communities like &lt;a href="http://iccup.com/"&gt;ICCup&lt;/a&gt; and &lt;a href="http://teamliquid.net/"&gt;teamliquid.net&lt;/a&gt;, I was really inspired to try to make a competitive game. No, not a competitive game, an ESPORT even! Games have always appealed to me that way, and I've always wanted to make a multiplayer game "someday"... So I've been working on a successor to Megapixel in the form of an RTS in my spare time, and thinking long and hard about how to network an RTS game successfully. Tonight I had an idea and couldn't shut up about it, so here we go.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt; ACTUAL NETWORKING THINGS: &lt;/h3&gt;Networking any game always presents countless challenges. Latency (i.e. the time it takes for a packet to travel from one computer to another) is the first and foremost problem that must be overcome in networking. The problem that latency presents is that it is physically impossible for both players' computers to hold identical representations of the game world at any time, simply because when one player issues input of any kind it will take anywhere from 50 milliseconds to 400 milliseconds for that input or any effects of it to reach the other player(s). In some games, such as first person shooters, synchronization is not very much of an issue. Many FPS games simply move the other player's representations on the client machine around according to the packets as they arrive, possibly with prediction of their current positions based on the velocities they had when the packet was sent, and player at the client computer is challenged to hit opponents with his weapon. When the client claims that he did hit an opponent, the server usually just relays that information to all other concerned clients. Of course, this leaves room for hacks wide open; I can engineer my client to report to the server that I shot everyone in the head at once whenever I click the mouse. Hacks like this can be dealt with either by changing the network model (the server makes all the decisions) or building careful sanity checks into the game code, but that is another story.&lt;br /&gt;&lt;br /&gt;The thing about networking RTS games is that they can have hundreds of individual units interacting in a very chaotic fashion, and any difference in involved client computers' representations of the game world will compound quickly as they interact, most likely resulting an an impossible conflict resolution process where both players will see units teleport, come back to life, and take unbelievable amounts of damage without dieing. The main reason for this is that pathfinding algorithms for groups of AI characters are emergent systems, that is, their behavior cannot be determined in any other way than playing out the simulation, and small changes in the input parameters will dramatically effect the outcome.&lt;br /&gt;&lt;br /&gt;RTS games go about solving the problem of different game representations in many different ways, and I have not studied them all thoroughly. One think I do know is that in my game, I want instant reaction time on all clients. In some games, such as age of empires 2 and warcraft 3, your units will only begin to move a short time after you click, which helps the two game worlds stay concurrent, as it simulates the time it takes for the packet to reach the other client(s). Although this may be beneficial for fairness in some cases and make networking easier to implement, in my experience it does not yield a very smooth and fun user experience. Likewise, starcraft (By default) will periodically freeze the game for a few milliseconds (or more) to synchronize the network states, and allows the user to adjust how much latency is compensated for by an artificial latency in unit commands and a slowdown of the whole game. The ICCup version of starcraft includes a hack that forces the game to never slow down or introduce an artificial latency with unit commmands, however this can cause the game state to become grossly desynchronized and introduce artifacts like teleporting units in some cases.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://yogware.bluegillstudios.com/sc.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;A MODEL FOR SYNCHRONIZED PATHFINDING IN LARGE SCALE GAME SITUATIONS:&lt;/h3&gt; My proposed solution to the pathfinding problem is to predestine the unit's fates, that is, calculate their paths ONCE such that they move toward their destination while avoiding all other units whose paths are already known, as well as static obstacles in the scene. Here is a step by step example of how this would work in a networked game.&lt;br /&gt;&lt;br /&gt;1. When the game starts, the client computers and server agree on where the initial units and structures of each player are, and attempt to match their clocks as well as they can. (I don't know if it is even possible to synchronize clocks within 100 milliseconds of eachother over a possibly varying latency that can be even greater than 100 milliseconds, but it seems like it must be possible somehow. Possibly with a 3rd computer acting as a dedicated timeserver or something.)&lt;br /&gt;&lt;br /&gt;2. When I give my units their first command, I send the IDs of the affected units, the time, and the destination. Since the state begins synchronized, both computers can use my hypothetical pathfinding algorithm to generate an identical animation for the unit. I am pretty sure that with the Unity engine, even across platforms and processor architectures, absolutely identical paths can be calculated in this way. Thus, even though all I sent over the network was the Unit IDs, time and destination, all interested clients generate the same temporally marked path and can sample from it arbitrarily. Real synchronization is achieved through the unit's relatively high independence; the motions of the player's hands are not connected to the units 1:1 (at least in "macromanagement" type situations where the players issue a command to their units and then ignore them while they execute the command to give attention to other situations on the map or game board), and so the units predictable behavior can be calculated the same way on all clients and synchronized.&lt;br /&gt;&lt;br /&gt;3. When later commands are given to units, the units will stop moving along their current "destiny" path and onto a new one determined by the command. Since all clients store the same path, when they are told to deviate specific units off that path onto a new one at at an exact point in time, they can simply look back on the current path to the time of the command and calculate new paths from there, preserving the state of synchronization.&lt;br /&gt;&lt;br /&gt;Of course, this all depends on a quite magical pathfinding function. Could such a thing be made? Could it be optimized to the point where it runs fluently on the majority of hardware? I don't know, but I'd like to try. It is harder than most pathfinding algorithms, because the full paths for all units in the selection must be calculated during the frame where the command is given.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;FURTHER MISC THOUGHTS:&lt;/h3&gt; The obvious problem with this model is that if you can see another player's units while he issues a command to them, with the most basic sampling methods for the generated paths, his units will appear to jump forward the distance that they traveled since he issued the command. Also, this method of networking gives no benefit, and, in fact, falls apart in "micromanagement" situations where one or both players are giving many commands per second to one unit or group of units, and both are carefully watching the outcome of the fight. In these situations a more FPS-like model would be favorable, and so for a fluid experience the game may require desynchronization and resynchronization of units based on how the players are controlling them.&lt;br /&gt;&lt;br /&gt;Since Megapixel has no shame about being a game and never pretends to be anything else, I am not afraid to features glitches most game developers would cringe at the sight of. We know that army men never glitch around and periodically intersect eachother, so most developers of army man games try to avoid it. (They never succeed entirely, however.) But who is to say that digital pixel beasts don't teleport sometimes? Impossible problems and situations in networking can be solved with a pretty animation, and I will have a much easier time implementing things.&lt;br /&gt;&lt;br /&gt;Another interesting thing about this method is that it makes replays extremely easy to implement, even rewindable replays. Only the commands need to be stored and the paths can be calculated by the replay viewer, then once the paths over a given time are stored in memory, everything in the game can be scrubbed back and forth smoothly; All that the code is doing is telling each unit to look like it did at time x, where x can be any time along the path.&lt;br /&gt;&lt;br /&gt;I was also imagining that replays of networked games would be automatically saved and stored on a server such that anyone can go to your profile page and look at all the matches you played, just like ICCup, except they can view the reply right in the web browser as well through the Unity Web Player.&lt;br /&gt;&lt;br /&gt;Lastly however.. With school and work and my unpredictable drive to actually code and create things, it is unlikely that I will implement any of this anytime soon. Oh, whats that? You want to see what I have so far anyway? Well, alright. The latest build can always be accessed (In &lt;a href="http://unity3d.com/unity-web-player-2.x"&gt;Unity Webplayer&lt;/a&gt; form) at &lt;a href="http://yogware.bluegillstudios.com/build/"&gt;http://yogware.bluegillstudios.com/build/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://yogware.bluegillstudios.com/mprts.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Right now, there is no network code, no pathfinding, only hexagonal terrain, pretty water, and shader-based fog of war w/ soft shadows, demonstrated by a lonely torch wandering Digital Lost Temple in a sinecosine circle for all eternity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-8850965529292974717?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/8850965529292974717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=8850965529292974717' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/8850965529292974717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/8850965529292974717'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2009/09/method-for-networking-state.html' title='A method for networking / state synchronization of several player directed psuedo-predictable entities in a game world'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-1034408504557593514</id><published>2009-09-10T21:29:00.001-07:00</published><updated>2009-09-10T21:33:09.361-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>at 10:30</title><content type='html'>I'm riding my bike back from work, and I'm coming up on a red light. I don't slow down. I can see the road I'm crossing for four blocks, and I see no headlights. I slide past the idling cars and across the road, and continue on to my house.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Later, I don't know whether to feel fear or disgust.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-1034408504557593514?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/1034408504557593514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=1034408504557593514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1034408504557593514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1034408504557593514'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2009/09/at-1030.html' title='at 10:30'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-1228075231495914494</id><published>2009-07-28T12:05:00.000-07:00</published><updated>2009-07-28T12:15:44.165-07:00</updated><title type='text'>linear algebra is magical</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-1228075231495914494?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/1228075231495914494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=1228075231495914494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1228075231495914494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1228075231495914494'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2009/07/linear-algebra-is-magical.html' title='linear algebra is magical'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-1504020552214705189</id><published>2009-07-13T09:41:00.000-07:00</published><updated>2009-07-22T00:01:16.689-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='megapixel'/><category scheme='http://www.blogger.com/atom/ns#' term='micro projects'/><category scheme='http://www.blogger.com/atom/ns#' term='game projects'/><category scheme='http://www.blogger.com/atom/ns#' term='WIP'/><title type='text'>programming again</title><content type='html'>&lt;div&gt;I got nostalgic about programming after watching a bunch of demos from &lt;a href="http://pouet.net"&gt;pouet.net&lt;/a&gt; and made this little hexagonal world... It builds a bunch of hexes and then adjusts their height according to a heightmap generated from the Mandelbrot set.  I'm especially happy about the lines.  Each one is a quad that the vertex shader extrudes about 1 pixel in screen space, and they have a gradient texture which makes them look antialiased. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JaIOUFysR1w/SltkCYth3HI/AAAAAAAAAPs/G80GhbEJHDg/s1600-h/Picture+4.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://4.bp.blogspot.com/_JaIOUFysR1w/SltkCYth3HI/AAAAAAAAAPs/G80GhbEJHDg/s400/Picture+4.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5357986173843266674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After I did this it started looking like a megapixel 2 level... I'm not sure if I wanna commit to working on that, but I think I'll keep playing with it and see where it goes&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-1504020552214705189?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/1504020552214705189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=1504020552214705189' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1504020552214705189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1504020552214705189'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2009/07/programming-again.html' title='programming again'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JaIOUFysR1w/SltkCYth3HI/AAAAAAAAAPs/G80GhbEJHDg/s72-c/Picture+4.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-880980070893793756</id><published>2008-12-18T21:31:00.001-08:00</published><updated>2008-12-18T21:31:27.512-08:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/SUsxquLFcYI/AAAAAAAAAPU/xlTqJvqnRBs/s1600-h/11th_grade.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 249px;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/SUsxquLFcYI/AAAAAAAAAPU/xlTqJvqnRBs/s400/11th_grade.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5281369598040830338" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-880980070893793756?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/880980070893793756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=880980070893793756' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/880980070893793756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/880980070893793756'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/12/blog-post.html' title=''/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JaIOUFysR1w/SUsxquLFcYI/AAAAAAAAAPU/xlTqJvqnRBs/s72-c/11th_grade.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-7766712036099115757</id><published>2008-10-19T01:05:00.000-07:00</published><updated>2008-11-13T23:11:09.593-08:00</updated><title type='text'>rant</title><content type='html'>Just think of all the work put into getting all those little chemicals into the a neat row inside the little vicodin tablets that are packaged in a neat row of little plastic trays and then placed in another neat little row in the store. Then think of all the energy expended to get the people their cars and to train them to park in a neat row outside the store and stand quietly in neat little lines inside the store.&lt;br /&gt;&lt;br /&gt;Throughout all of our society, huge amounts of energy are expended and so much stress is caused by our obsession with neatness and control. You can see it in action when a parent hurts their child's spirit in the name of safety, or cleanliness, or religion, or any other forced order.&lt;br /&gt;&lt;br /&gt;I don't respect that order, I think we are all cowering from the truth of life within our layers and layers of neat little rows. And in our denial we hurt eachother and completely ignore so many social opportunities, like a populous living, working and loving blind. These ordered systems invade our private lives, yet a shred of chaos still exists within them, which seems to be the only thing left that keeps us strong and gives us a challenge to live with that makes our powerful as we learn ways to deal with it, and makes our lives worth living.&lt;br /&gt;&lt;br /&gt;In short, chaos is a natural state whose unpredictable brutalities and softnesses shape human beings into tolerant, strong and able individuals. On the other hand order is chaos which has been manipulated and forced to fit a mold. Within such a system people become lost as if in a white expanse flat as glass, and have no landmarks to direct themselves, and no experience to draw from. Wherever any raise in terrain or color comes into this white expanse of our ordered world, we try as hard as we can to stamp it out. As a matter of fact we spend our whole lives and energies on that one activity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-7766712036099115757?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/7766712036099115757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=7766712036099115757' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/7766712036099115757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/7766712036099115757'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/10/i-posted-this-rant-on-facebook-in.html' title='rant'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-3062748838430496571</id><published>2008-09-27T21:48:00.001-07:00</published><updated>2008-09-27T21:48:37.888-07:00</updated><title type='text'>CrimethInc rocks</title><content type='html'>&lt;a href="http://www.crimethinc.com/"&gt;http://www.crimethinc.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-3062748838430496571?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/3062748838430496571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=3062748838430496571' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3062748838430496571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3062748838430496571'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/09/crimethinc-rocks.html' title='CrimethInc rocks'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-1233545103481751529</id><published>2008-09-04T13:27:00.001-07:00</published><updated>2008-09-04T14:29:46.586-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='activism'/><title type='text'>direct action in a broader context</title><content type='html'>If you talk to anarchists about protests, they might talk about direct action. By that they mean doing things in a group that directly affect the thing being protested. Some of these tactics include blockading roads either with human bodies or debris, boycotts, and even property destruction.&lt;br /&gt;&lt;br /&gt;I was around some direct action at the RNC protest.&lt;br /&gt;&lt;br /&gt;I think some things that those radicals do are counterproductive, like destroying property. But being near that kind of thought and action really made an impression on me. The contrast between american culture and the culture of direct action and direct democracy astounds me.&lt;br /&gt;&lt;br /&gt;It seems like everything that we do as american citizens is indirect.&lt;br /&gt;&lt;br /&gt;For example, our democracy is indirect. Instead of voting for what we want, we vote for some abstract representation of an ideology that is usually a lie in the form of a candidate or bill.&lt;br /&gt;&lt;br /&gt;We also learn indirectly. Instead of doing real learning in school, we do indirect learning. That is to say instead of learning how to do things like write, read, and do math and science, we learn how to do thematic schoolwork.&lt;br /&gt;&lt;br /&gt;I had more examples of this, but I just forgot them. Darn. Anyway, the point is, I would say that we have an entire indirect culture. &lt;br /&gt;&lt;br /&gt;Of course, what I am getting at is that I don't like that. I think that a good way to live for the benefit of society is to take direct action against indirect culture. By that I mean teach and learn directly in or outside of school, practice direct democracy in and outside of mainstream politics, etc.&lt;br /&gt;&lt;br /&gt;And with that, an image:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JaIOUFysR1w/SMBSpiLuoiI/AAAAAAAAALI/7ErLkv588ko/s1600-h/b.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/SMBSpiLuoiI/AAAAAAAAALI/7ErLkv588ko/s400/b.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5242280839763370530" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-1233545103481751529?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/1233545103481751529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=1233545103481751529' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1233545103481751529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1233545103481751529'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/09/direct-action-in-broader-context.html' title='direct action in a broader context'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JaIOUFysR1w/SMBSpiLuoiI/AAAAAAAAALI/7ErLkv588ko/s72-c/b.jpg' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-1358429858705193826</id><published>2008-09-03T19:44:00.000-07:00</published><updated>2008-09-27T14:20:21.095-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='activism'/><title type='text'>the no spin zone</title><content type='html'>&lt;a href="http://www.new.facebook.com/share_redirect.php?h=4e46cdb4514b4cf7974af5656a35685f&amp;amp;url=http%3A%2F%2Fwww.foxnews.com%2Fvideo%2Findex.html%3FplayerId%3Dvideolandingpage%26streamingFormat%3DFLASH%26referralObject%3D3067234%26referralPlaylistId%3D9ccf127ad00c53ab8708e18e946bf50e83958340%26maven_referrer%3Dfacebook&amp;amp;sid=24674416543"&gt;me and my friends on fox news&lt;/a&gt; at 3:25 - 3:22&lt;br /&gt;&lt;br /&gt;we are screaming "FUCK FOX NEWS FUCK FOX NEWS FUCK FOX NEWS" as loud as we can at the cameraman.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-1358429858705193826?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/1358429858705193826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=1358429858705193826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1358429858705193826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1358429858705193826'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/09/no-spin-zone.html' title='the no spin zone'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-4431779542895195712</id><published>2008-09-01T13:23:00.000-07:00</published><updated>2008-09-02T19:31:04.024-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activism'/><title type='text'>activism</title><content type='html'>Date: September 1st, 2008&lt;br /&gt;Location: St. Paul, Minnesota.&lt;div&gt;&lt;br /&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/SL31izqod7I/AAAAAAAAAK8/uelnOCrvSd0/s400/buh.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5241615519662503858" /&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-4431779542895195712?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/4431779542895195712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=4431779542895195712' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4431779542895195712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4431779542895195712'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/09/activism.html' title='activism'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JaIOUFysR1w/SL31izqod7I/AAAAAAAAAK8/uelnOCrvSd0/s72-c/buh.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-1768308324880788757</id><published>2008-08-20T11:35:00.000-07:00</published><updated>2008-08-20T11:41:17.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shader adventures'/><title type='text'>M-set in a shader</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JaIOUFysR1w/SKxkD-_KOpI/AAAAAAAAAKs/Jw7t9ktRu4E/s1600-h/Picture+10.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_JaIOUFysR1w/SKxkD-_KOpI/AAAAAAAAAKs/Jw7t9ktRu4E/s320/Picture+10.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5236670486335339154" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Shader&amp;nbsp;"Mandelbrot"&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Properties&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_X&amp;nbsp;("X",&amp;nbsp;Range(-2,2))&amp;nbsp;=&amp;nbsp;0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_Y&amp;nbsp;("Y",&amp;nbsp;Range(-2,2))&amp;nbsp;=&amp;nbsp;0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SubShader&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pass&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Fog&amp;nbsp;{&amp;nbsp;Mode&amp;nbsp;Off&amp;nbsp;}&lt;br /&gt;CGPROGRAM&lt;br /&gt;#pragma&amp;nbsp;target&amp;nbsp;3.0&lt;br /&gt;#pragma&amp;nbsp;vertex&amp;nbsp;vert&lt;br /&gt;#pragma&amp;nbsp;fragment&amp;nbsp;frag&lt;br /&gt;&lt;br /&gt;float&amp;nbsp;_X;&lt;br /&gt;float&amp;nbsp;_Y;&lt;br /&gt;&lt;br /&gt;struct&amp;nbsp;appdata&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4&amp;nbsp;vertex;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4&amp;nbsp;texcoord;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;struct&amp;nbsp;v2f&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4&amp;nbsp;pos&amp;nbsp;:&amp;nbsp;POSITION;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float2&amp;nbsp;uv&amp;nbsp;:&amp;nbsp;TEXCOORD0;&lt;br /&gt;};&lt;br /&gt;v2f&amp;nbsp;vert&amp;nbsp;(appdata&amp;nbsp;v)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v2f&amp;nbsp;o;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o.pos&amp;nbsp;=&amp;nbsp;mul(&amp;nbsp;glstate.matrix.mvp,&amp;nbsp;v.vertex&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o.uv&amp;nbsp;=&amp;nbsp;v.texcoord.xy;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;o;&lt;br /&gt;}&lt;br /&gt;half4&amp;nbsp;frag(&amp;nbsp;v2f&amp;nbsp;f&amp;nbsp;)&amp;nbsp;:&amp;nbsp;COLOR&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float2&amp;nbsp;z&amp;nbsp;=&amp;nbsp;(f.uv&amp;nbsp;-&amp;nbsp;half2(0.62,0.5))&amp;nbsp;*&amp;nbsp;4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float2&amp;nbsp;offset&amp;nbsp;=&amp;nbsp;z&amp;nbsp;+&amp;nbsp;half2(_X,_Y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float&amp;nbsp;threshold&amp;nbsp;=&amp;nbsp;2*2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;itr&amp;nbsp;=&amp;nbsp;40;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float&amp;nbsp;isOut&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&lt;&amp;nbsp;itr&amp;nbsp;&amp;&amp;&amp;nbsp;isOut&amp;nbsp;==&amp;nbsp;0;&amp;nbsp;i++)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;z&amp;nbsp;=&amp;nbsp;half2(z.x*z.x&amp;nbsp;-&amp;nbsp;z.y*z.y,&amp;nbsp;z.x*z.y*2)&amp;nbsp;+&amp;nbsp;offset;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;isOut&amp;nbsp;=&amp;nbsp;z.x*z.x+z.y*z.y&amp;nbsp;&gt;&amp;nbsp;threshold&amp;nbsp;?&amp;nbsp;i&amp;nbsp;:&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(isOut&amp;nbsp;==&amp;nbsp;0)&amp;nbsp;isOut&amp;nbsp;=&amp;nbsp;itr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;isOut&amp;nbsp;/&amp;nbsp;itr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//float4((z*0.1)+0.5,1,0)&lt;br /&gt;}&lt;br /&gt;ENDCG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FallBack&amp;nbsp;off&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-1768308324880788757?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/1768308324880788757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=1768308324880788757' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1768308324880788757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1768308324880788757'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/08/m-set-in-shader.html' title='M-set in a shader'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JaIOUFysR1w/SKxkD-_KOpI/AAAAAAAAAKs/Jw7t9ktRu4E/s72-c/Picture+10.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-731097656405965842</id><published>2008-07-28T16:55:00.000-07:00</published><updated>2009-07-21T23:58:31.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new unity version'/><category scheme='http://www.blogger.com/atom/ns#' term='shader adventures'/><category scheme='http://www.blogger.com/atom/ns#' term='micro projects'/><category scheme='http://www.blogger.com/atom/ns#' term='unity packages'/><title type='text'>GraphEditor beta</title><content type='html'>New in Unity 2.1 is an API for popping up a window that you can draw whatever you want in, and when I first got my hands on this I wanted to test it out. Well, I really dug it and after a while and I've come up with something I sort of had planned out in my head beforehand: A sort of customizable node based graph editor.&lt;br /&gt;&lt;br /&gt;Basically the idea is that there are Graph and GraphEditor classes  that by themselves don't do anything in particular, but by inheriting from Graph in a script you can create whatever functionality you want in using node based graphs. I have a ProceduralTexture script that does this with procedural textures, and I'm thinking I may make one for fullscreen image effects someday. But really you can do whatever you want with it, with some expansion of the Graph stuff I'm sure AI graphs would be possible.&lt;br /&gt;There are some nodes that are not unique to any type of graph (math operations, other structural things etc). All other nodes are usually part of a graph type.&lt;br /&gt;&lt;br /&gt;&lt;img style="float:center; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_JaIOUFysR1w/SI5eIcCIlmI/AAAAAAAAAKU/bbbDyW26LqA/s320/procgraph-1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5228219716480833122" /&gt;&lt;br /&gt;&lt;br /&gt;Nodes have a type, right now I have Number, Color, Vector, String and Texture types. Inputs to nodes can either be only one type, or accept several types through conversion. For example if you attach the number 1 to the export node, you get a white texture, while a 0 would give black and a 0.5 would give gray.&lt;br /&gt;&lt;br /&gt;Current functionality in list form:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;Create and edit Procedural Texture assets&lt;br /&gt;Manage node structures with a decent interface&lt;br /&gt;Use the editor to export textures&lt;br /&gt;Generating textures at runtime isn't implemented, but really its just one function call away&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The GUI and hotkeys are similar to the Unity editor, but I think I should mention the not so easy to catch ones.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;Menu&amp;gt;Assets&amp;gt;Create&amp;gt;Procedural Texture or Project Pane&amp;gt;Create&amp;gt;Procedural Texture&lt;br /&gt;Menu&amp;gt;Assets&amp;gt;Edit Graph or cmd - G&lt;br /&gt;click on a node to select it, and double click to mark it as the preview node.&lt;br /&gt;some connectors have a quick edit feature that allows for super quick tweaking. Right click drag on these!&lt;br /&gt;option-drag output connectors to bind them to several inputs&lt;br /&gt;note the options for certain nodes in the inspector&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Known issues:&lt;br /&gt;&lt;ul&gt;Most texture nodes require fragment programs.&lt;br /&gt;Pro only, because of heavy use of render textures.&lt;br /&gt;when there are several number fields onscreen at once, all of them get input from right click drag.&lt;br /&gt;the cell noise generator isn't done yet!&lt;br /&gt;maybe some GUI system errors will show up, but I think I got them all.&lt;br /&gt;you can't actually make very beautiful and complicated textures yet, as far as my experiments have gotten. The parameter and Graph nodes don't do anything yet! The plan for them is to make it so that a graph can be put inside a node in another graph.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/SI5eI_1dBsI/AAAAAAAAAKk/xLNyTlcaDZg/s320/proclights-1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5228219726091323074" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_JaIOUFysR1w/SI5eIuIXfHI/AAAAAAAAAKc/Tw4v-H6mJLM/s320/proccube-1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5228219721338813554" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file= Graph_beta.zip&amp;amp;type=zip" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-731097656405965842?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/731097656405965842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=731097656405965842' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/731097656405965842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/731097656405965842'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/07/grapheditor-beta.html' title='GraphEditor beta'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JaIOUFysR1w/SI5eIcCIlmI/AAAAAAAAAKU/bbbDyW26LqA/s72-c/procgraph-1.png' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-4282159867142303604</id><published>2008-07-08T01:03:00.000-07:00</published><updated>2008-07-23T13:12:29.368-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='micro projects'/><category scheme='http://www.blogger.com/atom/ns#' term='webplayers'/><title type='text'>Atomic Physics Simulator for Classroom Activity</title><content type='html'>Recently I've been finishing up a project that was long in the making: A physical simulation of atoms that allows for simulating collisions with a lot of types of particles at different energies, and understandable visual feedback after the collisions.&lt;br /&gt;&lt;br /&gt;The reasoning behind this is for it to take the place of a theoretical microscope that could produce images of these interactions on actual atoms (such a microscope doesn't exist). The students only interact with the simulator in an experimental way, in the same way they might interact  with a low friction fan cart track and motion detector.&lt;br /&gt;&lt;br /&gt;INSTRUCTIONS: By default the scanner tool is selected. Hit the button in the lower left to deactivate it and shoot particles. If you hover your mouse over an atom and press the Z key, you will zoom into the atom's nucleus. Press Z again to zoom out. Try different particles and energies.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=atomsim&amp;amp;version=2.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&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/6967593701414876303-4282159867142303604?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/4282159867142303604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=4282159867142303604' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4282159867142303604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4282159867142303604'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/07/atomic-physics-simulator-for-classroom.html' title='Atomic Physics Simulator for Classroom Activity'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-5048094098695927700</id><published>2008-05-04T22:03:00.000-07:00</published><updated>2008-05-04T22:11:14.386-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='webplayers'/><title type='text'>How I embed webplayers in this blog</title><content type='html'>I made a few PHP scripts that handle webplayers inside an iframe really well, which works good especially for blogs. Here is how simple I managed to make it per iteration:&lt;br /&gt;&lt;br /&gt;1. Create and upload the webplayer and an image to describe the webplayer's content (Screenshot) to a folder on your server with matching names, eg: Wambo.unity and Wambo.jpg&lt;br /&gt;2. Paste this code into something like a blog or html document:&lt;br /&gt;&lt;br /&gt;&amp;lt;iframe src="http://yourwebsite/yourwebplayers/button.php?file=Wambo&amp;version=2.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&amp;gt;&amp;lt;/iframe&amp;gt; &lt;br /&gt;&lt;br /&gt;Where version dictates whether it is a 1.x or 2.x webplayer.&lt;br /&gt;&lt;br /&gt;To set it up initially, you need to upload &lt;a href="http://yogware.bluegillstudios.com/Files/ThreeScripts.zip"&gt;these three php scripts&lt;/a&gt; to the same folder as you are uploading the web players.&lt;br /&gt;&lt;br /&gt;When I made that I wasn't thinking about making it really adaptable and for everyone, so the sizes are all hard coded and some options are missing... So I'll also attach this &lt;a href="http://yogware.bluegillstudios.com/Files/EasyUnity.zip"&gt;all purpose web player embed script that gives you full control&lt;/a&gt; as well (though it only runs when on a server as it is php).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-5048094098695927700?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/5048094098695927700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=5048094098695927700' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5048094098695927700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5048094098695927700'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/05/how-i-embed-webplayers-in-this-blog.html' title='How I embed webplayers in this blog'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-8998833126913224809</id><published>2008-05-03T21:15:00.000-07:00</published><updated>2008-12-09T19:08:36.892-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='the media'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><title type='text'>On violence in games</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JaIOUFysR1w/SB33X2w4pRI/AAAAAAAAAJc/4vl7NJO_Xfs/s1600-h/GTA4cover.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/SB33X2w4pRI/AAAAAAAAAJc/4vl7NJO_Xfs/s200/GTA4cover.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5196581534265025810" /&gt;&lt;/a&gt;&lt;br /&gt;I was reading up on the media response to the recent GTA IV release and thought some more about violence in games and violence in GTA as well. Now, this is pretty bad considering that I have never played any GTA game so I'll try to keep from saying it is one way or another as I don't really know.&lt;div&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;A couple years ago my thoughts on game violence were the same as most gamers and people in the media who don't oppose violent games: That it is separate from real life, not something to give to children, and doesn't affect people's actions. I was subject to other views as well like my father's: That violent imagery in any form should be more restricted, and even games that involve lots of death but have no imagery are to be considered violent and restricted. An example of this would be a turn based strategy game in which large armies kill over domination of territory but all the player sees are tokens, particle effects and minimally interactive avatars representing the armies.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Over time I have developed new views, especially after reading what &lt;a href="http://taleoftales.com/"&gt;Tale of Tales&lt;/a&gt; has to say and thinking about it. Basically I have decided that imagery and gameplay are separate and not to be confused. A classic example of this would be comparing Quake and Megapixel. They have very similar gameplay but completely different imagery. What is the difference between the games in terms of violence? What is the difference in between destroying virtual abstract shapes and tearing bloody parts off of virtual zombies with a machinegun? I think that basically they are the same&lt;span class="Apple-style-span" style="font-style: italic;"&gt; game, &lt;/span&gt;but quake has a bunch of gore imagery added on top. &lt;a href="http://taleoftales.com/"&gt;Tale of Tales&lt;/a&gt; explains that games are only as much as their underlying system, and nothing more which I think is similar to what I am saying.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;There are some games with violent imagery. What do I think of that? Well, I don't like it. When I played the demo for Prey I was disgusted by it, I didn't want to play it because it seemed so low and ugly. But do I think that it affects people psychologically? I don't know. It seems that its probably not a good idea to make kids look at pictures of people with their legs blown off, but such images don't seem to change people at all, especially in terms of making them more violent. It could even be argued that people should have some level of tolerance for blood so that if they have to help their friend out of the mountains who has a bloody bone jutting out of her broken leg, they won't freak out and be unable to help. But that argument can be reversed to say that people who see imagery of killing will be less reserved when they are in a position to kill someone for whatever reason. I am not really clear on the effect of violent imagery, but I don't like it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;So if video games at their core are nothing more than carefully crafted systems that are fun to interact with just like sports and board games, but with the occasional addition of disgusting imagery, they aren't that bad, right? Thats what I think, but I also think they could be bad if designed differently. Tale of Tales talks about making games that interact with the player on a more meaningful or emotional level, that is their dream and goal, and they are proving that such a thing is possible. An example of this that you can download right now for free is &lt;a href="http://tale-of-tales.com/blog/2008/03/21/we-made-a-new-game/"&gt;Tale of Tales' Graveyard demo&lt;/a&gt;. If you haven't already, I would give it a play and experience what it is like.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;So what if there was a duke nukem game that was set up to actually engage the player emotionally and mentally in the content of the action like how The Graveyard does? It is probably impossible, but it would stimulate emotions of hate and violence that would be real. I think the closest thing to this that exists in real life is the &lt;a href="http://en.wikipedia.org/wiki/Imageboard"&gt;*chans&lt;/a&gt;, which aren't really a game but work in similar ways. If such games existed, I think they would probably be really bad things.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I finally loop back to the beginning: Isn't GTA kind of like what I just described? A violent game that tries to be more than an abstract system by including deep detail and trying to personify all the characters so that the world is believable? I don't know really because I haven't played it, but it seems that way to me just from what I have heard about it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just another train of thought dump. Not guaranteed to be grammatical.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-8998833126913224809?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/8998833126913224809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=8998833126913224809' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/8998833126913224809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/8998833126913224809'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/05/on-violence-in-games.html' title='On violence in games'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JaIOUFysR1w/SB33X2w4pRI/AAAAAAAAAJc/4vl7NJO_Xfs/s72-c/GTA4cover.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-3063487724131779868</id><published>2008-04-01T20:27:00.000-07:00</published><updated>2008-04-05T12:48:02.541-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><title type='text'>Comedy</title><content type='html'>I thought this was pretty funny and thought I'd share. I'm a sucker for ridiculous internet comedy.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=qRuNxHqwazs"&gt;http://www.youtube.com/watch?v=qRuNxHqwazs&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-3063487724131779868?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/3063487724131779868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=3063487724131779868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3063487724131779868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3063487724131779868'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/04/comedy.html' title='Comedy'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-104145727449013165</id><published>2008-03-28T16:45:00.000-07:00</published><updated>2008-03-28T18:36:27.288-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><title type='text'>Game design as art</title><content type='html'>Recently someone &lt;a href="http://forum.unity3d.com/viewtopic.php?t=10277"&gt;posted on the unity forums&lt;/a&gt; about a small game that they just released. They were already developing games outside of Unity since a long time ago and had started a fairly large project that they eventually grew past, completed and self published a successful multiplayer game, and have a large horror project currently in development (not with Unity).&lt;br /&gt;&lt;br /&gt;The game they just released was a project for learning how to use Unity, their first unity project. All of this sounds pretty boring, like a standard story of a studio adapting Unity. What makes it special? Well, these guys showed me something completely new about game design, they are wildly different from everyone else. Their games have no score, no HUD, no projectiles, no obstacles, and no puzzles. They are crazy artists and they design games in which the *gameplay* is a work of art. They attempt to pull strings on the player and manipulate emotions with their games, like how a movie conveys emotion except in an interactive 3D medium. So how exactly do they do this? Well, I will use their recently released Unity game as an example. When you start it, you see an old lady standing in the entrance to a graveyard. You can control the old lady with the arrow keys, she walks very slowly. The camera is 3rd person and doesn't rotate, it only moves back and forth along the main graveyard path. This limits you so that you can only walk on that main path. As you walk forward, the lady will stumble and then start limping, using her cane to support her. It takes quite a while to reach the end of the path, even though it is just a few feet. When you reach the end, the lady sits down on a bench and a song plays in her head about all the people she knew who died, and a bunch of fancy overlays are rendered. It really is pretty effective and provokes emotions. So why do I care? Because it really surprised me how such a simple production could spin such a believable world that caught my attention and actually forced me to identify with a character. I don't think anyone has ever really identified with a character in a video game, that I know of. That is, until these guys came along. Their studio is called Tale of Tales, and here is a &lt;a href="http://www.taleoftales.com/"&gt;link&lt;/a&gt; to their blog.&lt;br /&gt;&lt;br /&gt;So the idea of gameplay creating emotions and game design as art is present in my mind. What does this mean? Well, I don't know. Tale of Tales claims that all board games, casual games and hardcore games are all the same, they are just an abstract gameplay system with a theme tacked on. I sort of like them saying that, because one of my main beefs about games is just that: A game is its gameplay system and often nothing more. Hence, Halo, Quake and Megapixel are very similar games because their gameplay system is similar. I like Quake and Gears of War less because their "theme" is very gross and bloody, but I don't agree with people like Jack Thompson who say that playing games with violent imagery will turn you into a serial killer. If there was a game with a gameplay system that actually included emotions of hate and violence I would agree with Jack Thompson that that game is bad and possibly should be restricted or banned. Luckily I think it is extremely unlikely that such a game will ever be made.&lt;br /&gt;&lt;br /&gt;Tale of Tales proclaims that "gaming" as we know it will die due to lack of interest because no new emotionless gameplay systems can be made, and no developers will step forward and introduce emotional gameplay systems. But I don't agree with them. The thing Tale of Tales isn't seeing and the reason I don't agree with them is the concept of “Pwnage”, being ridiculously good at games. Only geeks and "gamers" do it, but I see new ones being made every once in a while and I don't see them stopping. Things like &lt;a href="http://www.youtube.com/watch?v=k5Fd6fHNdsE"&gt;korean starcraft&lt;/a&gt;, &lt;a href="http://purepwnage.com/"&gt;pure pwnage&lt;/a&gt;, &lt;a href="http://flashflashrevolution.com/"&gt;ffr&lt;/a&gt; and other super-hardcore game communities will not stop. My reasoning is, being ridiculously good at working even simple gameplay systems is extremely fun, the same way climbing rocks or mountain biking is fun. I'm not really a hardcore gamer, but I've become quite good at some games like Dance Dance Revolution on either feet or fingers, Tetris, and twitch FPSes like Megapixel.&lt;br /&gt;&lt;br /&gt;But I still care quite a bit about gameplay that manipulates emotions, because it is an exiting new concept that possibly unlocks a plethora of brand new possible game designs and offers the possibility for a new era in game design that would massively expand the market.&lt;br /&gt;&lt;br /&gt;Another thing I thought about after seeing Tale of Tales was that a sort of game design dream I’ve had since about 2 years ago might actually be possible through emotion manipulating game play. Basically the game would be a tribute to the bone comic series by jeff smith and possibly some other good fantasy stories. I guess a genre description for it would be something like “Nonlinear Open World Story Driven Action / Adventure Game”, but that is where reality ends and the dream starts because Open World and Nonlinear don’t belong in the same sentence as Story Driven. The idea I had is to have almost all of the systems in the game be tweakable by a rules-based "god" AI that mimics what a storyteller does, and changes things to make the story more interesting.&lt;br /&gt;For example, the storyteller will manipulate the characters in such a way that they almost get killed a bunch of times but never actually do die, because something comes out of the blue and saves them. Here are a bunch of pages of Bone where this happens:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/24141987@N02/sets/72157604289095184/show/"&gt;Briar encounter&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/24141987@N02/sets/72157604293747567/show/"&gt;Crossing Tenen Gard&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Another example of this is how the magic in Bone and most other fantasy stories works: It is often not controlled by the magical person, but is instead triggered on random occasions as a shortcut to get out of a dangerous situation. So in my game instead of having magic points (or any GUI whatsoever), crazy stuff like this will happen:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/24141987@N02/sets/72157604293843321/show/"&gt;Confrontation of Pawan army&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Creating as rich of a game world as the world in the comic book is impossible, but I think that a dynamic story in a game is actually possible after seeing what Tale of Tales has done and what they are planning.&lt;br /&gt;&lt;br /&gt;Most likely I will never work on such a project, but its fun to think about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-104145727449013165?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/104145727449013165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=104145727449013165' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/104145727449013165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/104145727449013165'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/03/game-design-as-art_28.html' title='Game design as art'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-1659921284705557461</id><published>2008-03-27T19:52:00.000-07:00</published><updated>2008-12-09T19:08:38.022-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lightmapping'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><title type='text'>What I actually did</title><content type='html'>I'm realizing that this blog isn't actually that useful to someone who would like to get some useful information about what I'm doing and how, because mostly I just make quick posts showing off content and then put them up before I can add some information about what is actually going on.&lt;br /&gt;&lt;br /&gt;So this post is going to go over some of the content and talk about the development of it.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Lightmapper&lt;/h3&gt;The lightmapper I was working on primarily works by casting rays from the 3D position of each pixel in the texture toward the lightsource If the ray hits something before reaching the lightsource, the texture pixel is not lightened. If the ray makes it to the light, then the texture is lightened according to the lights settings and the dot product of the surface normal and the light direction. ("Surface normal" means the direction that points directly away from the surface that is casting a ray toward the light. Dot product is a type of vector multiplication and it is a way to get the angle in between two vectors. If the vectors point the same direction the dot product is one, if there is a 90° angle in between them then it is 0, and if they point in opposite directions it is -1). This is basically the same as how realtime lighting is calculated, except it has ray-based shadowing.&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_JaIOUFysR1w/R-xlhj9PX9I/AAAAAAAAAGU/bBYiPJVEWks/s320/lightmapping.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5182628898458787794" /&gt;&lt;br /&gt;&lt;br /&gt;It also has an ambient / bounce light pass where it casts a few rays in different directions from the same texel (texture pixel) position and checks the distance that the rays traveled before they hit something, and the color of the texture pixel that they hit. A indirect light color is calculated depending on the number of rays that hit close to where they started and the color of the texel that they hit.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JaIOUFysR1w/R-xsuD9PX_I/AAAAAAAAAGk/8Ue94dyKgis/s1600-h/lightmappingamb.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_JaIOUFysR1w/R-xsuD9PX_I/AAAAAAAAAGk/8Ue94dyKgis/s320/lightmappingamb.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5182636809788547058" /&gt;&lt;/a&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The two textures that I have are very rough at this stage, especially the indirect lighting which usually ends up noisy. So I blur each component a configureable amount before combining them. This gives it a nicer soft look and masks the fact that it is highly unrealistic.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The method that I use to convert from texture coordinates (pixel positions on the lightmap) to world coordinates (points in 3d space) is quite cool so I will explain it. What I do is transfer whatever position into barycentric coordinates within the relevant triangle, then convert back by plugging the barycentric coordinate into a weighted average of the vertices of the corresponding triangle in the other coordinate system. &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;To start out, what is a &lt;a href="http://mathworld.wolfram.com/BarycentricCoordinates.html"&gt;barycentric coordinate&lt;/a&gt;? It is a group of 3 numbers that represents a position within a triangle. The three numbers always add up to one, and each one corresponds to a vertex of a triangle. Here are some barycentric coordinates:&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JaIOUFysR1w/R-xxSj9PYAI/AAAAAAAAAGs/sESPH0dHxTU/s1600-h/bary1.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_JaIOUFysR1w/R-xxSj9PYAI/AAAAAAAAAGs/sESPH0dHxTU/s320/bary1.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5182641834900283394" /&gt;&lt;/a&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;As you can see the red dot (drawn approximately in those images) remains in the same place relative to each vertex of the triangle no matter the triangle's shape. This is what I want for a lightmapper because sometimes the texture coordinate triangles are different shapes than the 3D triangles. &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The next question is, how do I construct a barycentric coordinate? This is the trickiest part programatically, because it involves a lot of variables. The needed inputs are 4 positions, one for the point that is being transfered to a barycentric point (p) and 3 for the triangle vertices(a,b,c). The first thing to do is to calculate a bunch of distances. (ab, bc, ca, pa, pb, pc)&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JaIOUFysR1w/R-xzqD9PYBI/AAAAAAAAAG0/xjxEUz3P6pI/s1600-h/bary3.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_JaIOUFysR1w/R-xzqD9PYBI/AAAAAAAAAG0/xjxEUz3P6pI/s320/bary3.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5182644437650464786" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Then I use &lt;a href="http://mathworld.wolfram.com/HeronsFormula.html"&gt;Heron's Formula&lt;/a&gt; to calculate the area of the 4 triangles that are involved. (The whole triangle abc, and the sections pbc, pca, and pab).&lt;/div&gt;&lt;div&gt;Once I have the areas, It is simple to get the barycentric coordinate. Each component of the coordinate is simply the area of the section triangle opposite that component's vertex divided by the total area of the triangle.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/R-x3Oz9PYDI/AAAAAAAAAHE/uxOptfZVEwc/s1600-h/bary2.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/R-x3Oz9PYDI/AAAAAAAAAHE/uxOptfZVEwc/s320/bary2.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5182648367545540658" /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To transfer a barycentric coordinate back into a 2D or 3D point is easy. It is simply the sum of each vertex position multiplied by its corresponding barycentric coordinate component.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, all in all I am happy with the results my lightmapper gives. It is not ready for prime time or anything and never really will be, but it was fun to work on.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://yogware.bluegillstudios.com/lightmapping.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px;" src="http://yogware.bluegillstudios.com/lightmapping.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-1659921284705557461?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/1659921284705557461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=1659921284705557461' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1659921284705557461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1659921284705557461'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/03/what-i-actually-did.html' title='What I actually did'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JaIOUFysR1w/R-xlhj9PX9I/AAAAAAAAAGU/bBYiPJVEWks/s72-c/lightmapping.gif' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-1996433685020554013</id><published>2008-03-26T22:49:00.000-07:00</published><updated>2009-07-21T23:59:21.290-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new unity version'/><category scheme='http://www.blogger.com/atom/ns#' term='webplayers'/><category scheme='http://www.blogger.com/atom/ns#' term='contests'/><category scheme='http://www.blogger.com/atom/ns#' term='unity packages'/><category scheme='http://www.blogger.com/atom/ns#' term='game projects'/><title type='text'>Independence Day Soldier</title><content type='html'>Another relic I decided to bring out is Independence Day Soldier, my entry to the "Unity Explosivo" explosion contest that was about a year ago or something. Due to a player only bug I found at the last minute and wasn't able to fix in time, the competition version had bullet time cut out of it which made it a lot less fun, and I wasn't able to release the source because Unity 2.0 was not released yet and I was using the beta to develop my entry.&lt;br /&gt;&lt;br /&gt;Well now the strange player-only-particle-deltatiming-with-different-timescale bug is fixed and Unity 2.0 is out and has been for a long time, so before I forget I should bring this out for the world to see.&lt;br /&gt;&lt;br /&gt;The low resolution webplayer doesn't do it justice, so I will also offer standalone builds as well.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=IndependenceDaySoldier&amp;amp;version=2.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file= Independence_Day_Soldier_Mac.zip&amp;amp;type=mac" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt; &lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file= Independence_Day_Soldier_Win.zip&amp;amp;type=win" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Source project folder:&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file= IndependenceDaySoldierSource.zip&amp;amp;type=zip" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-1996433685020554013?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/1996433685020554013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=1996433685020554013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1996433685020554013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1996433685020554013'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/03/independence-day-soldier.html' title='Independence Day Soldier'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-5410087419357064943</id><published>2008-03-26T14:35:00.000-07:00</published><updated>2008-03-26T23:29:52.401-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webplayers'/><category scheme='http://www.blogger.com/atom/ns#' term='unity packages'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>A couple old example projects</title><content type='html'>One thing I missed when converting my website to this blog was a couple of example projects I made, one for car physics and the other for some fireworks. These are really really old, but some people might benefit from them so I'll put them up here because I haven't updated this in a while and I realized people might still want them.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt; Fireworks&lt;/h3&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=Fireworks&amp;amp;version=1.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;Source project folder:&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file=Fireworks.zip&amp;type=zip" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Car Physics&lt;/h3&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=CarPhysics&amp;amp;version=1.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;Source project folder:&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file= CarPhysics.zip&amp;type=zip" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-5410087419357064943?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/5410087419357064943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=5410087419357064943' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5410087419357064943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5410087419357064943'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/03/couple-old-example-projects.html' title='A couple old example projects'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-2266614336306711698</id><published>2008-03-03T19:54:00.000-08:00</published><updated>2008-03-27T21:55:38.556-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shader adventures'/><category scheme='http://www.blogger.com/atom/ns#' term='lightmapping'/><category scheme='http://www.blogger.com/atom/ns#' term='webplayers'/><category scheme='http://www.blogger.com/atom/ns#' term='unity packages'/><title type='text'>Whats cooking?</title><content type='html'>Look, Unity can look like project offset too with the fancy motion blur:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=MotionBlur&amp;amp;version=2.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;This is actually not really stable and so there isn't much point of offering a package of it, but here is &lt;a href="http://developer.nvidia.com/docs/IO/8230/GDC2003_OpenGLShaderTricks.pdf"&gt;the paper from nvidia that I based it on&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also, here is a lightmapper dredged up from some play-work I did earlier in Copenhagen with a little bit of sprucing up:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://yogware.bluegillstudios.com/lightmapping.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px;" src="http://yogware.bluegillstudios.com/lightmapping.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file=LightmapByRay.zip" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-2266614336306711698?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/2266614336306711698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=2266614336306711698' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/2266614336306711698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/2266614336306711698'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/03/whats-cooking.html' title='Whats cooking?'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-5429909258966876006</id><published>2008-02-25T21:11:00.000-08:00</published><updated>2008-03-02T11:50:01.851-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='micro projects'/><category scheme='http://www.blogger.com/atom/ns#' term='webplayers'/><category scheme='http://www.blogger.com/atom/ns#' term='unity packages'/><title type='text'>Real Time Raytracing  :P</title><content type='html'>I made this in about a half hour after reading a post on the forum with a non realtime version. I've of course been thinking about this for a long time but never did it. Works pretty well considering the circumstances. &lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=Ray&amp;amp;version=2.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file=Ray.zip" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-5429909258966876006?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/5429909258966876006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=5429909258966876006' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5429909258966876006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5429909258966876006'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/02/real-time-raytracing-p.html' title='Real Time Raytracing  :P'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-8928890238442674864</id><published>2008-02-25T16:33:00.000-08:00</published><updated>2008-02-25T16:46:40.761-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>I can draw??</title><content type='html'>Apparently its true. I'm going to public school now part time to see what that is like (I've never been in the public school system before, mostly I've just "learned" stuff on my own I guess) and I'm taking a drawing class.  Before I never thought I could draw and didn't really try, but as soon as I actually sat down and tried to do it, decent images appeared on my paper.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://yogware.bluegillstudios.com/drawings/Tree-Raw.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px;" src="http://yogware.bluegillstudios.com/drawings/Tree-Raw.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://yogware.bluegillstudios.com/drawings/3objects.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px;" src="http://yogware.bluegillstudios.com/drawings/3objects.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://yogware.bluegillstudios.com/drawings/a.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px;" src="http://yogware.bluegillstudios.com/drawings/a.jpg" border="0" alt="" /&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/6967593701414876303-8928890238442674864?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/8928890238442674864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=8928890238442674864' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/8928890238442674864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/8928890238442674864'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/02/i-can-draw.html' title='I can draw??'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-9455808649908891</id><published>2008-02-20T21:38:00.000-08:00</published><updated>2008-02-20T21:43:35.907-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='videos'/><category scheme='http://www.blogger.com/atom/ns#' term='webplayers'/><title type='text'>Dueling Video Players</title><content type='html'>So, what yields better results for streaming videos? The muiltimillionaire youtube flash player or a humble Unity web player streaming an OGG Theora video?&lt;br /&gt;&lt;br /&gt;Lets see :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yogware.bluegillstudios.com/VideoPlayer/VideoDuel.html"&gt;http://yogware.bluegillstudios.com/VideoPlayer/VideoDuel.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After clearing the cache I got the Unity video starting a half a second before the youtube one, with an obvious jump in quality. Unity FTW!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-9455808649908891?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/9455808649908891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=9455808649908891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/9455808649908891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/9455808649908891'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/02/dueling-video-players.html' title='Dueling Video Players'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-1927400617613958371</id><published>2008-02-15T16:05:00.000-08:00</published><updated>2008-02-15T16:06:53.127-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='videos'/><category scheme='http://www.blogger.com/atom/ns#' term='avert fate'/><title type='text'>avert fate video</title><content type='html'>&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YQMMoKAfXPs&amp;amp;rel=1"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/YQMMoKAfXPs&amp;amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-1927400617613958371?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/1927400617613958371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=1927400617613958371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1927400617613958371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1927400617613958371'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/02/avert-fate-video.html' title='avert fate video'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-3838834212573064239</id><published>2008-02-09T21:54:00.000-08:00</published><updated>2008-12-09T19:08:38.292-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>Why I am disenchanted with american culture</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/R66R2TnjG8I/AAAAAAAAAFs/jZLPAIfN9P8/s1600-h/culture+copy.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/R66R2TnjG8I/AAAAAAAAAFs/jZLPAIfN9P8/s320/culture+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5165226184805653442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A couple nights ago I went to a event held by the college here (Because my dad works there and he was going to meet there with the college environmental club, and thought I should come). It was a sort of a low profile party type thing in a large indoor track area. They had volleyball courts set up (with beach balls that didn't fly well at all), a small area where you could get fruit and chips type stuff, and some "DJ"s. As I walked around and observed this event, I realized that it seemed really sad in there, like everyone was depressed or something. I wasn't quite sure why I thought that because after a second look I decided it wasn't that the people were depressed, but something else seemed strange.&lt;br /&gt;&lt;br /&gt;The event organizers tried to do some mildly interesting things, like they set up 16 twister mats in a 4x4 grid and then tried to have a "large twister event". But that never happened, people ignored it and didn't even pay attention even after a small handful of people got on the mats and started playing. In general there were some almost cool things there, but nobody really wanted to be the first one to step out to participate.&lt;br /&gt;&lt;br /&gt;The "DJ"s played a bunch of really inane pop and stood around looking bored.&lt;br /&gt;&lt;br /&gt;There were a bunch of posters warning of the dangers of drugs and alcohol overdose hanging over a raffle table. No one even went near it.&lt;br /&gt;&lt;br /&gt;The environmental club sat around and chatted and occasionally tried to talk to people to spread their message but no one was willing to listen.&lt;br /&gt;&lt;br /&gt;Anyway, I kept going around and looking at all this stuff and being mildly upset by it somehow, though I couldn't put my finger on why. Then as I was riding home through the snow I realized why it seemed so sad or awkward: Because I was comparing it to a college event I went to in Copenhagen that had a similar premise: To keep students around and give them something to do. This event "public service 2007" was not exactly the same because it had a music venue theme and was spread across the whole campus, but I still want to compare the two events.&lt;br /&gt;&lt;br /&gt;At public service, everyone was drunk, everyone was talking to everyone else at the same time, and if they weren't going from place to place they were dancing to one of the varieties of loud electronic music that was playing. Also, I'm pretty darn sure everyone was having a great time. I know I was. I got really bad muscle cramps from dancing so intensely from so long. But at this college "luau" thing I went to recently, no one was even remotely interested in the event itself or its characteristics. They just sort of hung out and talked. I don't think they were really expecting anything interesting anyway, so they weren't disappointed. So why is a college event in this little podunk town so much less interesting, and why are the people so much less interested? Aside from the podunkyness of the town I decided it is a difference in culture.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos-a.ak.facebook.com/photos-ak-sf2p/v112/175/86/569238370/n569238370_165112_4715.jpg"&gt;&lt;img style="cursor: pointer; width: 320px;" src="http://photos-a.ak.facebook.com/photos-ak-sf2p/v112/175/86/569238370/n569238370_165112_4715.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What would happen if all these south dakotans were living in a big city like Copenhagen and they had a college event where some organizer thought it would be a good idea to set up a bunch of stages and have a bunch of semi popular bands play? Well, first off I don't think organizers would have the guts to do that because "it might not be popular with everyone, just the people who like the music" or "why don't we just have a cheesey luau party instead, it would be generally accepted by everyone and would be easier". But lets say they did and it happened. Would the people all be dancing? Would they be having a great time? It seems weird, but I don't think they would be. Seems like it would be the same as the luau event or similar, where no one is willing to be the first one to do something that might look a little bit silly.&lt;br /&gt;&lt;br /&gt;And what would happen if it were turned around the other way, with the danes living here and going to our luau event? If they were at the event, and I think they wouldn't be because it is just silly, they wouldn't be able to handle it. They would either leave and go to some bars or if they were violent and caricatured, forcefully bring a bunch of alcohol into the indoor track area, drink it, and then evict the so called DJs and start mixing any techno they could find into a loud and artistic beat to which they would dance for quite some time.&lt;br /&gt;&lt;br /&gt;So why are these Americans so relatively meek and unwilling to participate in something like public service? Why do the event organizers not try to do something intense? Why the silly scary looking anti drug posters that no one looks at, and raffle that no one enters? And why oh why do they not like electronic music? :P&lt;br /&gt;&lt;br /&gt;After I thought about it for a while I realized that this is just an example and the contrast can be seen almost everywhere.&lt;br /&gt;&lt;br /&gt;I would never have noticed these things before I went to Copenhagen, but now I wish my culture was more exiting and less conservative.&lt;br /&gt;&lt;br /&gt;In conclusion, I say that everyone needs to listen to this song: &lt;a href="http://yogware.bluegillstudios.com/fearless.mp3"&gt;http://yogware.bluegillstudios.com/fearless.mp3&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-3838834212573064239?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/3838834212573064239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=3838834212573064239' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3838834212573064239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3838834212573064239'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/02/why-i-am-disenchanted-with-american.html' title='Why I am disenchanted with american culture'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JaIOUFysR1w/R66R2TnjG8I/AAAAAAAAAFs/jZLPAIfN9P8/s72-c/culture+copy.jpg' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-8608753096032534699</id><published>2008-02-09T16:52:00.000-08:00</published><updated>2008-12-09T19:08:39.086-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='racing project'/><category scheme='http://www.blogger.com/atom/ns#' term='game projects'/><title type='text'>More racing game screenshots</title><content type='html'>I take the nearly invulnerable red plastic car for a ride...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JaIOUFysR1w/R65LQznjG5I/AAAAAAAAAFU/0kN57m5J-ic/s1600-h/Picture+10.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/R65LQznjG5I/AAAAAAAAAFU/0kN57m5J-ic/s320/Picture+10.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5165148574746614674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/R65LSTnjG6I/AAAAAAAAAFc/L_o1ud4cYPk/s1600-h/Picture+13.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/R65LSTnjG6I/AAAAAAAAAFc/L_o1ud4cYPk/s320/Picture+13.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5165148600516418466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/R65LUTnjG7I/AAAAAAAAAFk/4HLEbTTpNcI/s1600-h/Picture+15.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/R65LUTnjG7I/AAAAAAAAAFk/4HLEbTTpNcI/s320/Picture+15.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5165148634876156850" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-8608753096032534699?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/8608753096032534699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=8608753096032534699' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/8608753096032534699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/8608753096032534699'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/02/more-racing-game-screenshots.html' title='More racing game screenshots'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JaIOUFysR1w/R65LQznjG5I/AAAAAAAAAFU/0kN57m5J-ic/s72-c/Picture+10.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-6044715304876100840</id><published>2008-02-02T22:52:00.001-08:00</published><updated>2008-03-02T11:45:25.627-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shader adventures'/><category scheme='http://www.blogger.com/atom/ns#' term='micro projects'/><category scheme='http://www.blogger.com/atom/ns#' term='webplayers'/><category scheme='http://www.blogger.com/atom/ns#' term='unity packages'/><title type='text'>Real time screen space ambient occlusion</title><content type='html'>I saw this link on Aras' blog to a demoscene that features real time ambient occlusion and a paper about it.&lt;br /&gt;&lt;br /&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/9AX8gNyrSWc&amp;amp;rel=1"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/9AX8gNyrSWc&amp;amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;And the &lt;a href="http://rgba.scenesp.org/iq/computer/articles/ssao/ssao.htm"&gt;link&lt;/a&gt; to the paper.&lt;br /&gt;&lt;br /&gt;So, In my normal easily distracted style &lt;a href="http://forum.unity3d.com/viewtopic.php?p=64491"&gt;I got interested and went after it&lt;/a&gt;.  Its not quite done yet, but it is already showing promise. I got extra interested in this method because it operates on the level of the pixels flat on the screen and creates a very strong effect that catches the human eye and makes the image seem more "real". I've always wondered if rendering could be done with more focus to what is actually on the screen similar to how a painter creates a realistic image with oils and brushes, by many tricks pulled on the viewer's eyes to make things appear real and in perspective when they actually aren't at all. This effect seems like a step in the right direction for that type of rendering so I was instantly a fan of it. Also, I wouldn't be surprised if everyone else is a fan of it too in a couple months and it becomes the next hdr/glow.&lt;br /&gt;&lt;br /&gt;Feels pretty cool being "next gen",  :P&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=SSAO&amp;amp;version=2.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file=SSAO.zip" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-6044715304876100840?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/6044715304876100840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=6044715304876100840' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6044715304876100840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6044715304876100840'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/02/real-time-screen-space-ambient.html' title='Real time screen space ambient occlusion'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-825141622910280200</id><published>2008-01-05T22:28:00.000-08:00</published><updated>2008-12-09T19:08:39.465-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='micro projects'/><category scheme='http://www.blogger.com/atom/ns#' term='racing project'/><category scheme='http://www.blogger.com/atom/ns#' term='unity packages'/><title type='text'>Tree Generator</title><content type='html'>We wanted some new trees for the racing game we have in progress, so I started experimenting with creating a tree generator from scratch. I took a very simple and functional approach so I was able to get results fast. And after some tweaking, it is producing some pretty trees! Its even possible to get them into the terrain engine with a quick export/import.&lt;br /&gt;&lt;br /&gt;One of my main focuses with this tree generator is allowing low poly counts. The example tree shown in the screenshots is about 2400 triangles which is completely reasonable for a tree model of this size.&lt;br /&gt;&lt;br /&gt;From the included readme:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;...[the tree generator] is not stand alone and has no GUI. It requires Unity to work, and uses already existing GUI elements in Unity for user control. Trees are made by creating a hierarchy of objects in a scene with the Hierarchy pane, then tweaking the properties of each object in the hierarchy in the Inspector.&lt;br /&gt;&lt;br /&gt;The generator steps through the hierarchy, and creates a finite fractal tree with the splitting points defined by the hierarchy of objects...&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Here are some screenshots:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JaIOUFysR1w/R4B1wVxCoiI/AAAAAAAAAD4/XLroStUTels/s1600-h/Picture+3.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_JaIOUFysR1w/R4B1wVxCoiI/AAAAAAAAAD4/XLroStUTels/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5152247447048856098" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JaIOUFysR1w/R4CVDlxCokI/AAAAAAAAAEI/WNdjWhNyI04/s1600-h/Picture+3.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/R4CVDlxCokI/AAAAAAAAAEI/WNdjWhNyI04/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5152281862621798978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file=Tree_Generator.zip" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-825141622910280200?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/825141622910280200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=825141622910280200' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/825141622910280200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/825141622910280200'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2008/01/we-wanted-some-new-trees-for-racing.html' title='Tree Generator'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JaIOUFysR1w/R4B1wVxCoiI/AAAAAAAAAD4/XLroStUTels/s72-c/Picture+3.png' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-6641867790850354257</id><published>2007-12-29T19:09:00.000-08:00</published><updated>2008-12-09T19:08:41.061-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='racing project'/><category scheme='http://www.blogger.com/atom/ns#' term='avert fate'/><title type='text'>Misc Christmas pictures</title><content type='html'>&lt;span style="font-size:100%;"&gt;I haven't posted anything for a while, so I'll just put up some random pictures from the last few days while I was in Colorado visiting family for Christmas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Racing game level inspiration&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;We went skiing in the rocky mountains and on the way there I sort of had a cool vision for a racing game level in the snow. Here are some pictures I took that show what it was like:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JaIOUFysR1w/R3cS3ouTS-I/AAAAAAAAACw/kTgOGJvL738/s1600-h/IMG_0673.JPG"&gt;&lt;img style="cursor: pointer; width: 154px; height: 115px;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/R3cS3ouTS-I/AAAAAAAAACw/kTgOGJvL738/s320/IMG_0673.JPG" alt="" id="BLOGGER_PHOTO_ID_5149605445955177442" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/R3cS4IuTS_I/AAAAAAAAAC4/isfpIumVgpE/s1600-h/IMG_0676.JPG"&gt;&lt;img style="cursor: pointer; width: 153px; height: 114px;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/R3cS4IuTS_I/AAAAAAAAAC4/isfpIumVgpE/s320/IMG_0676.JPG" alt="" id="BLOGGER_PHOTO_ID_5149605454545112050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JaIOUFysR1w/R3cS4ouTTAI/AAAAAAAAADA/RD5nWAALTqU/s1600-h/IMG_0677.JPG"&gt;&lt;img style="cursor: pointer; width: 154px; height: 115px;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/R3cS4ouTTAI/AAAAAAAAADA/RD5nWAALTqU/s320/IMG_0677.JPG" alt="" id="BLOGGER_PHOTO_ID_5149605463135046658" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/R3cS5IuTTBI/AAAAAAAAADI/-w_gDv5mY-I/s1600-h/IMG_0723.JPG"&gt;&lt;img style="cursor: pointer; width: 152px; height: 114px;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/R3cS5IuTTBI/AAAAAAAAADI/-w_gDv5mY-I/s320/IMG_0723.JPG" alt="" id="BLOGGER_PHOTO_ID_5149605471724981266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Apple Store Visit&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;I'm testing out the youtube capabilities of the iPhones at the store, with cool results. The used video: &lt;a href="http://youtube.com/watch?v=_kfJERjxuLo"&gt;http://youtube.com/watch?v=_kfJERjxuLo&lt;/a&gt; Kudos to the guy who made that by the way, for being completely awesome :D&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JaIOUFysR1w/R3cXzouTTDI/AAAAAAAAADY/hzwURnXpmdw/s1600-h/iphone.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/R3cXzouTTDI/AAAAAAAAADY/hzwURnXpmdw/s320/iphone.jpg" alt="" id="BLOGGER_PHOTO_ID_5149610874793839666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Family Tech Support&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JaIOUFysR1w/R3cWVYuTTCI/AAAAAAAAADQ/pQ4NEl_kbWI/s1600-h/fts.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_JaIOUFysR1w/R3cWVYuTTCI/AAAAAAAAADQ/pQ4NEl_kbWI/s320/fts.jpg" alt="" id="BLOGGER_PHOTO_ID_5149609255591169058" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-6641867790850354257?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/6641867790850354257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=6641867790850354257' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6641867790850354257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/6641867790850354257'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/misc-christmas-pictures.html' title='Misc Christmas pictures'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JaIOUFysR1w/R3cS3ouTS-I/AAAAAAAAACw/kTgOGJvL738/s72-c/IMG_0673.JPG' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-3052964154014460978</id><published>2007-12-22T16:01:00.000-08:00</published><updated>2007-12-22T20:54:13.537-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='particle effects'/><category scheme='http://www.blogger.com/atom/ns#' term='unite'/><title type='text'>Unite presentation</title><content type='html'>While at Unite it was sort of decided that I should do some sort of presentation where I explained some cool stuff I'd done. Ethan who is a Maya master and is our environment artist for the racing game did a maya lightmaping tutorial for whoever was interested, just showing them on one of the hands on lab computers. I thought I would do something similar but too many people to stand behind one computer came over to watch  so we decided to do it on the big screen. I wasn't really ready for that but I gave it a go and it turned out fine.&lt;br /&gt;&lt;br /&gt;The resources page on the Unity website has launched, and it contains videos of all the presentations at Unite including mine. Here's the &lt;a href="http://unity3d.com/support/resources/unite-presentations/forest-talks-particles"&gt;link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://unity3d.com/support/resources/images/forest-talks-particles-logo-reflected.jpg"&gt;&lt;img style="cursor: pointer; width: 320px;" src="http://unity3d.com/support/resources/images/forest-talks-particles-logo-reflected.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-3052964154014460978?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/3052964154014460978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=3052964154014460978' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3052964154014460978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3052964154014460978'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/unite-presentation.html' title='Unite presentation'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-5717682620959181356</id><published>2007-12-19T13:05:00.000-08:00</published><updated>2009-12-15T19:55:24.634-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='micro projects'/><category scheme='http://www.blogger.com/atom/ns#' term='webplayers'/><category scheme='http://www.blogger.com/atom/ns#' term='unity packages'/><title type='text'>Messing around</title><content type='html'>Recently I've been taking a break from the racing game and off and on I did some micro projects that were interesting to me but hadn't had time to experiment with until now. Proof that I still have a hard time working on one project full on until its done. Anyway, here are the projects that a cool enough to be shown.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Volumetric Light / Audio visualizer / DWI file reader&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This started out with me wanting to experiment with a volumetric light shader after talking to Nicholas long ago. The premise for the shader is that you render the depth of the front and back faces of the object separately, then subtract the depth of the front faces from the depth of the back faces pixel wise to get the volume in each pixel. I figured out a way to do it without resorting to Render Textures that should be fairly fast, but needs a property that isn't exposed in ShaderLab yet. So for now I faked it by baking the depth into a texture and slapping that on a camera facing plane. For the most part, you won't notice.&lt;br /&gt;&lt;br /&gt;After I had  modeled a quicky lamp using the tripod from the fps tutorial for attaching my light cone to, I had this wacky idea to time the lights to some music by using DDR stepfiles. (.dwi format which is "Dance With Intensity", not "Driving While Intoxicated") I was also thinking about audio visualizers at the time, which is one thing I have sort of always been interested in.&lt;br /&gt;&lt;br /&gt;So I quickly slapped 4 rotating laser lamps into my test cave scene and got the work on playing back dwi files through the lights. The result shown here with DDR song ".59 (Tengoku)" is pretty impressive. Click on the screenshot to start a webplayer. (Be careful though, currently putting the browser window in the background or scrolling the browser window can cause the music and lights to become desynchronized)&lt;br /&gt;&lt;p&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=Lasers&amp;version=2.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;br&gt;&lt;br /&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/download.php?file=dwi_volumetric.zip" marginheight="0" frameborder="0" height="150" scrolling="no" width="150"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Simple IK / Procedural animation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I also wanted to try making an IK system, with the greater goal of procedurally animated robots (Which is related to an old game idea I've always had). I made my job with the IK system a lot easier by requiring that the appendage have two joints that share the same or a mirrored axis, so that I can simply extend the appendage fully in the direction of the target point, then bend it back incrementally until it reaches the target.&lt;br /&gt;&lt;br /&gt;I tried attaching a real physics joint rig that tries to follow the IK appendage and then driving the appendages attached to an object in a way that would suggest balancing, but mostly All I got was one or two very drunken stumbles. Next I tried the same but without joints and instead adding forces at the positions of the feet manually. That worked a little better, but still almost always failed within a few seconds. Finally I got something that resembles walking by faking the balance heavily and moving the legs just as a graphical effect. Here is the result of that:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=Walkers&amp;version=2.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-5717682620959181356?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/5717682620959181356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=5717682620959181356' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5717682620959181356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5717682620959181356'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/messing-around.html' title='Messing around'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-716055768652829977</id><published>2007-12-18T23:32:00.000-08:00</published><updated>2009-07-22T00:00:18.869-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copenhagen'/><category scheme='http://www.blogger.com/atom/ns#' term='racing project'/><title type='text'>Back from Copenhagen</title><content type='html'>I'm back from Copenhagen now, and still working on the webplayer based racing game with &lt;a href="http://unity3d.com/"&gt;Unity Technologies&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Its over the top arcade style like burnout and features large outdoor levels using the terrain engine. I'm not ready to show much of it yet, but here is a sneak peek screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/R2jLF4uTS9I/AAAAAAAAACo/ToUCb3US20w/s1600-h/Picture+1.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/R2jLF4uTS9I/AAAAAAAAACo/ToUCb3US20w/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5145585876257164242" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-716055768652829977?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/716055768652829977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=716055768652829977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/716055768652829977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/716055768652829977'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/back-from-copenhagen.html' title='Back from Copenhagen'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JaIOUFysR1w/R2jLF4uTS9I/AAAAAAAAACo/ToUCb3US20w/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-1407195090018971324</id><published>2007-12-18T23:23:00.000-08:00</published><updated>2009-07-21T23:59:35.580-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new unity version'/><category scheme='http://www.blogger.com/atom/ns#' term='copenhagen'/><category scheme='http://www.blogger.com/atom/ns#' term='unite'/><category scheme='http://www.blogger.com/atom/ns#' term='avert fate'/><title type='text'>Unity 2.0, Avert Fate, Unite, Awesome etc</title><content type='html'>Unity 2.0 has been released, introducing many new features including a great terrain engine, networking      support, direct x rendering and an awesome emmidiate mode GUI system. I'm not working on Unity but I am      writing games/demos with it, and am working / living (:P) in the same      office as the developers. If you are interested in game development and      haven't yet I highly recommend &lt;a href="http://www.unity3d.com/"&gt;checking it out&lt;/a&gt;.        &lt;p&gt;     Also, I traveled to San Francisco a week ago for the first "Unite" unity users conference.      It was a blast, meeting people I have known over the internet from all over, seeing cool unity stuff      people have in the pipe, and helping people with thier questions. I also got pushed by the team to do      a small presentation on particle effects and effects graphics in Unity in general. One thing lead to      another and I got up on stage and presented a few effects I have done, explaining how they were done      and the concept behind them. The project folder I used for the presentation and a video of the      presentation should be online with the rest of the conference coverage in a few weeks.     There are some &lt;a href="http://hs.facebook.com/album.php?aid=9776&amp;amp;l=27778&amp;amp;id=569238370"&gt;pictures&lt;/a&gt; on my facebook page.          &lt;/p&gt;        &lt;p&gt;     A project that I have been working on for almost a year now and has been on this site for a while,      Avert Fate, is now released as the flagship standalone demo for Unity 2.0.          Stop reading right now and download it, it should work (at minimum setttings) on any mid grade or above      machine thats less than 2 years old.    &lt;/p&gt;        &lt;p&gt;     &lt;a href="http://unity3d.com/gallery/live-demos/avert-fate"&gt; &gt;&gt;Clicky&lt;&lt; &lt;/a&gt;    &lt;/p&gt;        &lt;p&gt;     Also, I did some work on the online "Tropical Paradise" demo, including the shoreline waves,      heron, seaguls and streaming.    &lt;/p&gt;        &lt;p&gt;     &lt;a href="http://unity3d.com/gallery/live-demos/tropical-paradise"&gt;"Tropical Paradise"&lt;/a&gt;    &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-1407195090018971324?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/1407195090018971324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=1407195090018971324' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1407195090018971324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/1407195090018971324'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/unity-20-avert-fate-unite-awesome-etc.html' title='Unity 2.0, Avert Fate, Unite, Awesome etc'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-3707365793893604165</id><published>2007-12-18T23:20:00.000-08:00</published><updated>2009-07-22T00:00:06.253-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copenhagen'/><title type='text'>Internship</title><content type='html'>I'm here is Copenhagen now, working for &lt;a href="http://www.unity3d.com/"&gt;OTEE&lt;/a&gt; on a casual racing     game in the arcade style of the burnout series. Being in Copenhagen is quite different and exiting.      There are some pictures on my facebook page:      &lt;a href="http://hs.facebook.com/album.php?aid=4168&amp;amp;l=17802&amp;amp;id=569238370"&gt;1&lt;/a&gt;,      &lt;a href="http://hs.facebook.com/album.php?aid=4600&amp;amp;l=b9864&amp;amp;id=569238370"&gt;2&lt;/a&gt;,      &lt;a href="http://hs.facebook.com/album.php?aid=4601&amp;amp;l=74e03&amp;amp;id=569238370"&gt;3&lt;/a&gt;,      &lt;a href="http://hs.facebook.com/album.php?aid=5654&amp;amp;l=b40ac&amp;amp;id=569238370"&gt;4&lt;/a&gt;,      &lt;a href="http://hs.facebook.com/album.php?aid=7371&amp;amp;l=06e8e&amp;amp;id=569238370"&gt;5&lt;/a&gt;,      &lt;a href="http://hs.facebook.com/album.php?aid=8643&amp;amp;l=2af2c&amp;amp;id=569238370"&gt;6&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-3707365793893604165?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/3707365793893604165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=3707365793893604165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3707365793893604165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/3707365793893604165'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/internship.html' title='Internship'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-7214826250349038771</id><published>2007-12-18T23:13:00.000-08:00</published><updated>2008-12-09T19:08:42.257-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game projects'/><category scheme='http://www.blogger.com/atom/ns#' term='avert fate'/><title type='text'>avert fate</title><content type='html'>Avert fate is a beautiful and fun first person shooter Unity demo that was created by me and &lt;a href="http://conspirat.com/avertfate/"&gt;Raimund Shumacher&lt;/a&gt;. It was shown at GDC 07     as an example of what Unity is capable of, and is now the flagship Unity 2.0 stand alone demo.        A battle rages between the player and an unknown cyborg enemy while brilliant effetcs light up an eerie, desolate world. Avert Fate is a next gen demo, but has been greatly optimized and should run on mid range machines that are less than two years old. Please check it out.&lt;br /&gt;&lt;br /&gt;Visual effects, gameplay design and programming by Forest Johnson (me). Concept, level design and 3D art by &lt;a href="http://conspirat.com/avertfate/"&gt;Raimund Shumacher&lt;/a&gt;.     Sound Effects by &lt;a href="http://www.articulatesound.com/"&gt;Cavan Fyans&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Screenshots&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JaIOUFysR1w/R2jFaYuTS5I/AAAAAAAAACI/9Xk4npqP1Ds/s1600-h/af2.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_JaIOUFysR1w/R2jFaYuTS5I/AAAAAAAAACI/9Xk4npqP1Ds/s320/af2.jpg" alt="" id="BLOGGER_PHOTO_ID_5145579631374715794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JaIOUFysR1w/R2jFaouTS6I/AAAAAAAAACQ/EVlRYctlHUQ/s1600-h/af4.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_JaIOUFysR1w/R2jFaouTS6I/AAAAAAAAACQ/EVlRYctlHUQ/s320/af4.jpg" alt="" id="BLOGGER_PHOTO_ID_5145579635669683106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JaIOUFysR1w/R2jFaouTS7I/AAAAAAAAACY/GU5xhbru0mo/s1600-h/af7.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_JaIOUFysR1w/R2jFaouTS7I/AAAAAAAAACY/GU5xhbru0mo/s320/af7.jpg" alt="" id="BLOGGER_PHOTO_ID_5145579635669683122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/R2jFa4uTS8I/AAAAAAAAACg/jBCQ6XlUepA/s1600-h/af11.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/R2jFa4uTS8I/AAAAAAAAACg/jBCQ6XlUepA/s320/af11.jpg" alt="" id="BLOGGER_PHOTO_ID_5145579639964650434" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-7214826250349038771?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/7214826250349038771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=7214826250349038771' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/7214826250349038771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/7214826250349038771'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/avert-fate.html' title='avert fate'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JaIOUFysR1w/R2jFaYuTS5I/AAAAAAAAACI/9Xk4npqP1Ds/s72-c/af2.jpg' height='72' width='72'/><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-4177168584542011510</id><published>2007-12-18T21:04:00.000-08:00</published><updated>2008-12-09T19:08:42.429-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='particle effects'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorials'/><title type='text'>Particle Effects Tutorial</title><content type='html'>In this tutorial I will explain some methods for creating nice particles and a lot of things that are useful to know about the process. This will include extensive use of both Photoshop and Unity, so you will need both programs and at least some basic experience with them.&lt;br /&gt;&lt;br /&gt;Just to warn you I am using Photoshop 7 so there might be some minor inconsistencies with later versions.&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/target.gif" alt="what you can create" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;What you can create&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Particle Effects Tutorial Chapter 1: Simple Smoke&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Chapter 1 Step 1: Clouds is your friend&lt;/span&gt;&lt;br /&gt;Pretty much any particle you make will use the clouds or difference clouds filter at least once. Clouds will create a randomized fractal image based on the foreground and background colors. Create a new image that is 128 pixels by 128 pixels, make sure the foreground color is black and the background color is white, then do the filter Menu: Filters &gt; Render &gt; Clouds. You will get a randomized fractal image that looks somewhat like this:&lt;br /&gt;&lt;br /&gt;&lt;a style="font-style: italic;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/R2ivQ4uTS4I/AAAAAAAAACA/QVhVA_An3bU/s1600-h/whitetoclouds.gif"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/R2ivQ4uTS4I/AAAAAAAAACA/QVhVA_An3bU/s320/whitetoclouds.gif" alt="" id="BLOGGER_PHOTO_ID_5145555278910147458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Clouds&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We now have the color of the smoke laid out. However smoke is transparent so we need to build an alpha channel. The alpha channel defines the shape and transparency of the smoke. To start building the alpha channel, create a new layer for it, then add a gradient circle to this layer. To add a gradient circle, set the foreground color to white and the background color to black, select the gradient tool, set the gradient mode in the top bar to Radial Gradient and set the gradient to Foreground to Background in the gradient picker. Now click in the center of the image and drag to an edge, but let go a little bit before actually reaching the edge.&lt;br /&gt;&lt;br /&gt;&lt;img style="font-style: italic;" src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/gradientsettings.gif" alt="settings" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The gradient settings, and thefirst step for an alpha channel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Our alpha channel is pretty boring right now. It needs some shape. How we will add shape is by creating new clouds and blending them over the circle. However, the clouds that you get when generating them at 128x128 are too big compared to the size of the smoke to be details. So create a new image that is bigger, like 400 by 400 pixels and create clouds in it, then scale it back down to 128 by 128. Since this layer is only meant to create an interesting shape we will use contrast adjustments and blurring to get a nicer softer effect. Give it some more contrast with Menu: Image &gt;Adjustments &gt;Brightness and Contrast... Set the Contrast slider to 50, then hit (OK). Now blur it some with Menu: Filters &gt; Blur &gt; Gaussian Blur... Set the blur radius to somewhere around 8 pixels and hit (OK). Copy the pixels from that image and paste them into the other image that has the gradient circle. If the new layer created by pasting isn't on top of the stack of layers, move it up. Then set it's blend mode to Multiply. To do this, select the new layer and click on the drop down in the Layers tab that says "Normal" and choose Multiply from the menu.&lt;br /&gt;&lt;br /&gt;&lt;img style="font-style: italic;" src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/blurclouds.gif" alt="blurclouds" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The blurred clouds add shape&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we will add a little sharp detail to the smoke. Create a new layer and if it isn't on top move it up, then create clouds in it. Set it's blend mode like you did for the previous layer, but set it to Overlay this time. You can adjust how much this layer effects the image with Menu: Image &gt; Adjustments &gt; Brightness and Contrast... Drag the Contrast slider back and forth until you get something you like.&lt;br /&gt;&lt;br /&gt;&lt;img style="font-style: italic;" src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/smokealpha.gif" alt="blurclouds" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The alpha with sharp details&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have our alpha channel done now, and stored in separate layers so if we want to change it later we can. But we need it all on one layer for the actual new channel. So merge the top three layers down by selecting one of the top three, hiding the lower color layer by clicking on the eyeball icon that is next to it in the Layers tab and pressing [Command] + [Shift] + E or Menu: Layer &gt; Merge Visible. Once it is merged select all and copy, then go back to before you merged the layers by clicking on the entry before Merge Visible in the History tab and paste on a new layer. Now select the Channels tab by clicking on it (It should be next to the Layers tab.) Create a new channel by clicking on the new channel button at the bottom of the tab and paste your alpha channel into it. Click on the eyeball icon next to the top channel named RGB to show it, but make sure the alpha channel is still selected. Without clicking on anything else in the channels tab, go back to the layers tab and hide all of the layers except for the bottom one.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/createnewchannel.gif" alt="channel" /&gt;&lt;br /&gt;&lt;img style="font-style: italic;" src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/eye.gif" alt="eye" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The eyeball icon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You are now done! Save the file to a relevant place as a PSD, possibly&lt;br /&gt;your Unity project Assets folder.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/finsmoke.gif" alt="done" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Our finished smoke.  The red is the alpha channel&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Chapter 1 Step 2: Importing your file into Unity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Open Unity into your current project or create a new project for this tutorial. If your particle texture isn't already in your Assets folder, move it there. You should be able to find the texture in Unity's Project pane. Once you find it, select it and look at it's properties in the Inspector. Click on the "Show Alpha" checkbox to check if the alpha channel made it into Unity. If instead of your alpha channel you see a full white image, continue on and we will fix this problem. Otherwise jump to step 3 and we will create a simple smoke particle system.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/import.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The texture in Unity's Inspector&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The easiest way I have found to fix this mistake is just start all over in a new image. Open the image that isn't importing the alpha. If there are multiple layers for the particle color, merge all the color layers together with [Command] + [Shift] + E. Then copy all the pixels, create a new image and paste the pixels in with [Command] + V. Go back to the old image and open the channels tab, select the Alpha 1 channel and copy it. Go to the new image, open the channels tab, create a new channel and paste the alpha you copied into it. Now without deselecting your new channel click on the box where the eyeball should be on the top RGB channel to show it.&lt;br /&gt;&lt;br /&gt;Without touching anything else, save the file into your Assets folder with a new name.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Chapter 1 Step 3: Get your particle texture onto a particle system&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Create a new particle system, in the Menu: GameObject &gt; Create Other &gt; Particle System. Then drag your particle texture from the Project pane to the particle system in the Hierarchy pane or Scene View pane. This will automatically generate a material for the particle. Select the particle system and scroll down to the bottom of the inspector where the material is. In the material component select a shader from the shader menu: Particles &gt; Alpha Blended. Alpha blended is a great blend mode for smoke, water splashes, dust, debris, or anything that is dark in color or doesn't emit light.&lt;br /&gt;&lt;br /&gt;Now scroll up to the top of the Inspector where the Particle Emitter component is. Set the Min Size and Max Size values to 1. Now your particle system should look somewhat like this:&lt;br /&gt;&lt;br /&gt;&lt;img style="font-style: italic;" src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/material.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The particle material and the particle system with the  material applied&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can change the color and transparency of the smoke by fiddling with the Tint Color of the material. Light white steam or thick black toxic smoke, it is up to you.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Chapter 1 Step 4: Smoke gracefully rising into the air&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For our smoke to look like real smoke coming off a fire or something we should change several of the particle system variables. I will walk you through it, as I would do it, step by step.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The stuff needs to travel upwards. Set the Particle Emitter's World Velocity to (0, 1.5, 0).&lt;/li&gt;&lt;li&gt;It needs to expand as it moves upwards. Set the Particle Animator's Size Grow to 0.4.&lt;/li&gt;&lt;li&gt;It should live longer, and a large range in lifetimes often looks good. Set the Particle Emitter's Min Energy to 1 and Max Energy to 8.&lt;/li&gt;&lt;li&gt;The area in which the particles appear is too big. Set the Particle Emitter's Ellipsoid to (0.25, 0.25, 0.25).&lt;/li&gt;&lt;li&gt;The smoke travels too straight. It needs some random velocity. Set the Particle Emitter's RndVelocity to (0.3, 0.3, 0.3)&lt;/li&gt;&lt;li&gt;The particles are too big. Set the Particle Emitter's Min Size to 0.5 and Max Size to 0.6.The Particle Animator's default color animation fade is alright but we can have a better one.&lt;/li&gt;&lt;li&gt;Set Color Animation[1] to have full opacity, Color Animation[2] to have 75% opacity and Color Animation[3] to have 25% opacity.&lt;/li&gt;&lt;li&gt;It needs more particles. Set the Particle Emitter's Min Emission to 70 and Max Emission to 90.&lt;/li&gt;&lt;li&gt;You can play with the colors and settings any way you want. Try different tints on the material and Color Animation. I usually leave the particle mostly unsaturated except for the parts of the particle that should be a different color, have the general color of the particle stored in the material color and have time specific things like fades in the Color Animation.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Here is what I came up with:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/smokey.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;My smoke&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Make sure to store your effect safely in a prefab or save the scene.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Particle Effects Tutorial Chapter 2: Advanced smoke&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Chapter 2 Step 1: Fake lighting&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Right now our particle has no lighting. It is just one flat color. This is mostly ok, but it will look a little better with  some faked lighting baked into the colors.&lt;br /&gt;&lt;br /&gt;You can get pretty good results for lighting just by overlaying a gradient with white at the top and black at the bottom. To do this create a new layer for your gradient above the first layer but below the alpha channel layers. Set your foreground color to black and background color to white by pressing D or clicking on the default foreground and background colors icon next to the colors in the tool palette.&lt;br /&gt;&lt;br /&gt;Now select the gradient tool and set your gradient style to Linear Gradient and gradient to&lt;br /&gt;Foreground to Background. Click and drag the gradient from the bottom of the image to the top with your new blank layer selected. Then set the blending mode of your new layer to overlay.&lt;br /&gt;&lt;br /&gt;It should look something like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/grad_overlay.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Smoke with fake lighting&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Chapter 2 Step 2: Particle Animation (the Wave filter is also your friend)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Particle animation in Unity is achieved by creating a single image that holds all of the frames and letting the Particle Renderer move the particle's UVs around to match up with each "frame". Particle animation can really bring a particle system to life but requires a bigger image and a lot more time spent creating the particle. The best method I have found for animating particles is to use a careful routine with the Wave filter that lets you choose a target state to morph to and then move to that state slowly over a few frames. I will give you step by step instructions for this procedure as well as guide you through creating the animation.&lt;br /&gt;&lt;br /&gt;Your animation will need to be in a separate, larger file. Create a new image that is four times as wide and four times as tall as your current particle. This will hold 16 frames, which is generally enough for animated smoke. In my case that would be&lt;br /&gt;512 by 512 because my particle is 128 by 128.&lt;br /&gt;&lt;br /&gt;We will now start the animation procedure. Go back to your particle, select the lowest difference clouds layer and do the wave filter. Menu: Filter &gt; Distort &gt; Wave. There are a lot of settings to tweak here. Try different things until you get a distortion that you like. If you can, try to make it work with a Amplitude Min of one and a Amplitude Max of 16 (The number of frames. This makes animation easier). Then hit the Randomize button until you get a shape that you like. My settings are:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Type: Sine (always use Sine)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Number of generators: 15&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Wavelength min = 10, max = 50&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Amplitude min = 1, max = 16&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Undefined Areas: Wrap Around&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/wave.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Wave filter dialog&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The result of this filter with these settings will be our particle at the end of the animation.&lt;br /&gt;To increment our Wave for each frame we will start with Amplitude Max at 1 and then add one to it every time. Now hit the Ok button and then hit Command Z. (We could hit the Cancel button, but then our settings wouldn't be saved).&lt;br /&gt;&lt;br /&gt;Repeat these steps for each frame:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Select the original particle image and go back to the original time before any Wave filters happened in the History tab.&lt;/li&gt;&lt;li&gt;Apply the wave filter to both the difference clouds layer and the alpha channel layer (You should have both of these available as a single layer in your original particle image). Set the Amplitude Max to a value that is equal to the value of the original Amplitude Max you chose divided by the number of frames, times the current frame index.&lt;i&gt; (original Amplitude Max / number of frames) * current frame index&lt;/i&gt;. If you chose a number for your original Amplitude Max that is equal to the number of frames like I did, just add one to Amplitude Max every time. This will make your Amplitude Max the same as the frame index.&lt;/li&gt;&lt;li&gt;Copy both the difference clouds layer and alpha channel to new layers in the animation image and position them in the next available space. It goes from left to right in rows like English text. Here is a grid with all the frame indexes laid out:&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;01 02 03 04&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;05 06 07 08&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;09 10 11 12&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;13 14 15 16&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/anim.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;How the animation is built&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Repeat until you have filled the animation image with frames. It helps to make sure the layer order in your animation image stays organized so it easier to merge all of the alpha layers and color layers when you are done.&lt;br /&gt;&lt;br /&gt;Once you have finished, merge all of the difference clouds layers into one layer and merge all the alpha channel layers into one layer. Then copy the lighting gradient overlay from the old particle to the new animated one and copy it onto each square, and merge it into one layer and set it's blend mode to Overlay.&lt;br /&gt;&lt;br /&gt;Your alpha channel probably has some sharp edges in between frames. These will show up on the edges of your particles in Unity if you don't get rid of them. What I do about this is get a largish soft brush and paint straight lines in black along the edges of the image and the edges of the frames.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; Hold down the shift key while painting to paint in straight lines.&lt;br /&gt;&lt;br /&gt;Once you have fixed that, copy the contents of your alpha channel layer, then hide it. Then go to the channels tab, create a new channel and paste your alpha into it, show the rgb channel again and Save your image into the Assets folder.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Chapter 2 Step 3: Use your animated texture in Unity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Unity side of particle animation is easy. Select the particle material (either in the particle emitter or project pane) and drag the animated texture from the project pane into it's texture slot. Then just select your particle system, go to the Particle Renderer component in the inspector and set the "UV Animation" values.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/uvanimation.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The UV Animation variables&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For this case, X Tile = 4, Y Tile = 4, Cycles = 1. Set those and you are done!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; You will notice an improvement in rendering quality if you set the Particle Renderer's Stretch Particle variable to Sorted Billboard. This will slow down rendering a little bit but it is a small price to pay for the benefit. Especially on lit smoke particles. With additive and other blend modes it doesn't effect anything.&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;Particle Effects Tutorial Chapter 3: Fire&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Chapter 3 Step 1: Make a flame particle&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Making a flame particle is harder. It needs to have colors, an alpha channel, and convincing flamelike appearance .To start out, make a new file that is 128 by 128 pixels. Set the foreground and background colors to black and white, then do Clouds. We will want our clouds to have more contrast in a few steps, so do an auto levels with [Command] + [Shift] + L. Now our flame needs some color. Press [Command] + B to bring up the color balance window. Make sure the Preserve Luminosity is off, then select the Shadows radio button and drag the top slider all the way to the right (make it red), select the Midtones radio button and do the same, then select the Highlights radio button and drag the top slider over to the right, the bottom slider all the way to the left and the middle slider about halfway to the right. The result should look sort of like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/flame.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Proto flame&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we will give this fire some black borders and a highlight in the middle using the Lighting Effects filter.&lt;br /&gt;Menu:Filters&gt;Render&gt;Lighting Effects.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; Entering values into the numeric fields of this filter seems broken in my version of photoshop. Just drag the sliders until you are close to the target value. Also notice how the picture shows the light a considerable bit smaller than the image. This is important for the next few steps to work out right.&lt;br /&gt;&lt;br /&gt;&lt;img style="font-style: italic;" src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/light.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Lighting Effects preview&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can experiment and try to get it to look like what I have in the picture or use my settings. They are:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Drag the light handles around until your spotlight is a circle like in the picture.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Color: white&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Intensity: 32&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Focus: 5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Gloss: -100 (Matte)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Material doesn't appear to matter at all.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Exposure: 0 (Halfway point)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Ambience: 0 (Halfway point)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Texture channel: None&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you have your Lighting Effects done, make about three copies of the layer. Then apply the Wave function a few times to each one to give it some shape. Try to get interesting flame shapes. It takes some time to get used to using the wave filter to create a specific effect. Keep in mind that it usually takes about three wave filters before it looks good and flamelike. If you want you can use the settings I used and just press the randomize button until you get something you like. Here are my settings:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Number of Generators: 5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Wavelength: Min = 10, Max = 50&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Amplitude: Min = 5, Max = 25&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is an example of the progression of one of your three layers:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/fires.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Progression using Wave&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you are done with distorting the three images, get a soft brush about 50 pixel size and paint black on any part of the fire on each layer that sticks out to the edge, or any part you don't like. Create a new layer at the bottom of the stack and paintbucket it black, set the top three flame layers' blend modes to Screen, set their layer transparencies to about 60% and then merge all of the layers together. You probably want to smooth out the flames a bit. To do this, copy your one layer and then blur whichever layer is on the bottom by about 4 pixels with Menu: &gt; Filters &gt; Blur &gt; Gaussian Blur... Finally, set the top layer's blend mode to Screen and merge.&lt;br /&gt;&lt;br /&gt;Here is what mine looks like at this point:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/flame2.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The flame is getting better&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If we were to use this as it is as a particle in Unity it would look horrible. But before we adjust the colors and make an alpha channel, we need to animate it. This way we only have to animate one layer.&lt;br /&gt;&lt;br /&gt;Do the animation just like you did for the smoke, but with 8 frames. I recommend a configuration with two lines of four frames. That would make the new animation image 512 by 256 pixels. You might want to use two separate Wave fades to get a better looking animation with more action. To do this, just pretend that you are making two separate animations, except the starting image for the second is the last frame of the first and the first animation takes up the first line while the second takes up the bottom line. When making the transition from line one to line to two, instead of going back to before you did the wave filter in the history tab, do another wave where you press the Randomize button to set a new target. Then hit the (OK) button, undo and then go from Amplitude Max at one to whatever it is in your target again, putting frames in the lower row.&lt;br /&gt;&lt;br /&gt;Before you merge all of the layers, blur the later frames a bit. Starting at the last frame, blur with Menu: Filters &gt; Blur &gt; Gaussian Blur... set at 10 pixels. Then work back through the layers blurring them, but decrease the radius by two pixels each frame.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; This might cause ugly white borders near the blurred layers. To fix this, paintbucket the background layer black.&lt;br /&gt;&lt;br /&gt;&lt;img style="font-style: italic;" src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/fireanim1.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The flame animated&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you are done with the animation and have blurred the later frames and merged all of the frames into one layer, you can start working on the colors and alpha. But first, paint black on all the edges with a large soft brush to avoid sharp edges. To make the alpha channel layer, copy your layer and desaturate it with [Command] + [Shift] + D, then hide it. To make the color layer, first create a new layer below all the others and paintbucket it a dark red-orange color. The color I used is #702105. Set the original animated layer's blend mode to Screen.&lt;br /&gt;&lt;br /&gt;It is getting better but still needs adjustment. First, darken the layer by about 40% with Hue/Saturation/Brightness (Command U). Then, do a color balance like we did at first but less intense. Press [Command] + B to bring up the color balance window. Make sure the Preserve Luminosity checkbox is off, then select the Shadows radio button and drag the top slider to the right 75%, select the Midtones radio button and do the same, then select the Highlights radio button and drag the top slider to the right 75%, the bottom slider to the left 75% and the middle slider a little less than halfway to the right.&lt;br /&gt;&lt;br /&gt;Copy the contents of your alpha channel layer, then hide it. Then go to the channels tab, create a new channel and paste your alpha into it, show the rgb channel again and save your image into the Assets folder. You are done!&lt;br /&gt;&lt;br /&gt;&lt;img style="font-style: italic;" src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/flameanim2.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The flame color and alpha&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Chapter 3 Step 2: Flame emitter&lt;br /&gt;&lt;br /&gt;Once you have your flame particle finished you will want to test it out in Unity.&lt;br /&gt;Do it like before, create a new particle system and drag the texture onto it. You will want to set the material's shader to Particles&gt;Additive and the Particle Renderer's UV animation variables. I will let you do more of the tweaking this time, just give some guidelines. If you don't know where some variable is in the particle system or wonder what a variable does, look it up in Chapter 5.&lt;br /&gt;&lt;br /&gt;First, the particles have to be big enough for flames. Somewhere around 1.&lt;br /&gt;Fire has a shorter lifetime. Somewhere around 1 again.&lt;br /&gt;It should move upwards and have some random movement.&lt;br /&gt;It should shrink in size, but not too much. To make it shrink,&lt;br /&gt;set the Particle Animator's size grow value negative in between zero and negative one.&lt;br /&gt;The ellipsoid should be a lot smaller.&lt;br /&gt;&lt;br /&gt;As it fades out, try adding some red in the color animation. Also, it should fade in faster and fade out slower Make sure you have enough particles. Some variation in the min and max emission values is good for fire. More velocity and a lower damping value can help. Don't be afraid to try different things with the material color. I found that the fire was too bright normally.&lt;br /&gt;&lt;br /&gt;I recommend using a black background color for looking at fires. If you don't like how the fire looks against whatever it is going to be put against, try giving it two materials in the Particle Renderer. The first one (Background) should be alpha blended and darker with a little less opacity, and the second one is the normal Additive one. Both should use the same texture. If you are looking at your fire in the game view with the standard blue color you will really be able to notice the difference between plain additive and additive + blended.&lt;br /&gt;&lt;br /&gt;Here is mine:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/flameparticles.gif" alt="imports" /&gt;&lt;br /&gt;The flame particle system&lt;br /&gt;&lt;br /&gt;You don't have to try to emulate exactly that, but it shows one way to do it. Be original!&lt;br /&gt;&lt;br /&gt;Make sure to store your effect safely in a prefab or save the scene when you are done.&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;Particle Effects Tutorial Chapter 4: Mix it up&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Chapter 4 Step 1: Fire and smoke&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you want you could try combining your fire and smoke effects. Start by creating a new game object with Menu: GameObject &gt;Create Empty or [Command] + [Shift] + N. Name your new object "Fire Group". Now select both the fire emitter and smoke emitter and press Command D to duplicate them. Drag your duplicates on the "Fire Group" object in the hierarchy. This will make them children of it so that they are grouped with it. Now select both the fire and smoke children in turn and type zeros into their position values. This will make them centered on their parent. Now just position the smoke above the fire a bit and then tweak values on both particle systems until it looks good. Here are some adjustments that help:&lt;br /&gt;&lt;br /&gt;The ellipsoid on the smoke needs to be bigger.&lt;br /&gt;The smoke particles should start out bigger and grow in size less.&lt;br /&gt;The smoke should fade in slower, and have some orange color in the beginning.&lt;br /&gt;The fire particles should live longer.&lt;br /&gt;The smoke particles should have the same upwards velocity as the fire particles.&lt;br /&gt;&lt;br /&gt;Try things until it looks good.&lt;br /&gt;&lt;br /&gt;&lt;img style="font-style: italic;" src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/firesmoke.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Fire and smoke&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You may notice some flickering in between the fire and smoke. This is caused by close proximity of the two effects.&lt;br /&gt;&lt;br /&gt;Unity renders particle systems in a layer like manner. It decides which system is on a higher layer by comparing the distances to the camera from the center of each system's bounding box. What we want is the flames to always be on top. To archive this you can use a script that moves the system a little bit closer to the camera. Here is the script I use:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yogware.bluegillstudios.com/blogfiles/code/ParticleLayer.js"&gt;&lt;span style="font-weight: bold;"&gt;ParticleLayer.js&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To get the script into the project, click on the Create menu in the Project pane and select JavaScript from the menu. Name your script "ParticleLayer" and then open it and paste the code into it. Save it, return to Unity and wait for it to compile. (Shown by a little rotating thing in the lower right corner. With just this script it should be almost instant) Once it is done, drag the script from the Project pane to the Hierarchy and onto your fire particle emitter that is a child of "Fire Group". Then select the object you just dragged the script onto and set Layer Height to 0.5. This will make the fire always 0.5 meters closer to the camera then it normally would be.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Chapter 4 Step 2: A simple rocket&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lets try making a rocket with our fire and smoke. Create a new game object and name it "Rocket", then copy the fire and smoke into it as children like we did before. Now create a cube and scale it so that it is 0.6 meters long and generally rocket shaped. Drag it onto the "Rocket" object to make it a child and then make sure it is at the same position as it's parent. Move the child flames back to the back of the box and the child smoke about 3 meters behind the flames.&lt;br /&gt;&lt;br /&gt;Now as you can guess you need to change the particle systems. But first, lets watch the rocket move so we can see what is wrong with it. I have made a moving rocket script for you to use. Get the script into the project, wait for it to compile and drag the script from the Project pane onto the Rocket object in the Hierarchy. Select the Rocket and set its Speed variable to 60, then run the simulation. As you can see there is a problem with the particles.&lt;br /&gt;&lt;br /&gt;&lt;img style="font-style: italic;" src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/rocket2.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The particles are too far apart&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yogware.bluegillstudios.com/blogfiles/code/Rocket.js"&gt;&lt;span style="font-weight: bold;"&gt;Rocket.js&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; You don't need the dual material setup for the fire on a rocket. You should make a new material for the rocket that is additive with a lighter yellow color and just use that one.&lt;br /&gt;&lt;br /&gt;What we need to do is make more particles and make them very short lived.&lt;br /&gt;Getting rid of the large ellipsoids and world up velocity would help too.&lt;br /&gt;Just to give a sense of the scale here, I used 400 to 600 for the emission of the flames and  0.1 to 0.2 for the lifetime (called energy in the Particle Emitter). For the smoke, I use 300 for the emission and a lifetime of 0.1 to 5.&lt;br /&gt;Also, increase the original sizes by a lot and decrease the Size Grow.&lt;br /&gt;Try messing with random velocities, size grow and color fades on both emitters until you get something you like when you run the game.&lt;br /&gt;Another thing that adds a little spice is a backwards velocity and damping on the smoke to simulate it being thrown out of the rocket.&lt;br /&gt;&lt;br /&gt;Refer to Chapter 5 if you are confused about the functionality of any part of the particle system.&lt;br /&gt;&lt;br /&gt;Here is my rocket. There are many ways to make rockets and this is just one of them.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/rocket3.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;A much improved rocket&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Chapter 4 Step 3: A simple explosion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now our rocket needs an explosion. Create a new game object and name it "Explosion", then copy the fire and smoke from the Rocket into it as children. First, set One Shot to true on both emitters. Now they will emit all at once like you want for an explosion. What to do next is think about how explosions work. Since the rocket is impacting a surface and then exploding, the explosion will force hot gasses away from the surface. I have my rocket script set up to make the explosion's forward axis face away from the surface that the rocket hit, so that you can easily achieve the effect I just mentioned. Just add to the Z component of Local Velocity.&lt;br /&gt;&lt;br /&gt;Once you have done that, you should adjust how the particles look. Some starting points:&lt;br /&gt;&lt;br /&gt;Decrease the number of particles. Anywhere from 60 to 150 should be enough for each emitter.&lt;br /&gt;Increase the particle size by a lot.&lt;br /&gt;The flames need a longer lifetime, the smoke needs a slightly shorter lifetime&lt;br /&gt;Both systems need lots of random velocity and damping.&lt;br /&gt;Your flame system probably still has a Particle Layer component. Good! Since this is probably a bigger effect overall, increase the layer height.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/explosion1.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The explosion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You are probably getting used to manipulating particles at least a little bit by now, so I trust you to make it look cool without muchdirecting. Once you are done with that, you should get this script into your project and put it on your "Explosion" object.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-weight: bold;" href="http://yogware.bluegillstudios.com/blogfiles/code/Explosion.js"&gt;Explosion.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As soon as you have this script on the explosion you should be able to see it work right in action when you press play. Tweak it some more until you are satisfied. Refer to Chapter 5 if you are confused about the functionality of any part of the particle system.&lt;br /&gt;&lt;br /&gt;To make an explosion be created when the rocket hits something, create a new prefab with the Project pane Create menu, name it "Explosion" and drag the explosion object in the Hierarchy pane onto your new Prefab. Then select the rocket object in the scene and drag your explosion prefab onto it's Explosion variable. Finally, put a big cube in front of the rocket for it to run in to.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.yogware.bluegillstudios.com/site/tutorials/images/content/explosion2.gif" alt="imports" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Rocket hits the box&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Congratulations on completing this tutorial! Have fun making (and watching) your cool new fireworks!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Particle Effects Tutorial Chapter 5: Detailed info on every variable in the particle system&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For a reference I will go through every variable in the particle system from top to bottom and explain exactly what it does.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Particle Emitter Component:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="4" rules="all" width="400"&gt;&lt;tbody&gt;&lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Emit&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;On or off. Self described.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Min Size - Max Size&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;The size of new particles will be random in between these values. A lot of variation here like 0.1 and 10 probably won't look good.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Min Energy - Max Energy&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Incorrectly named, the lifetime of the particles. New particles will last a random amount of seconds in between these values. Don't be afraid to set Min Energy close to zero.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Min Emission - Max Emission&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size:85%;"&gt;How many particles are emitted every second if One Shot is false, or how many particles in a shot if One Shot is true.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;World Velocity&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;A Vector3 representing how much velocity to add to the particles as they they spawn, in worldspace. (0, 10, 0) will make the particles fly up at 10 meters per second.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Local Velocity&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;A Vector3 representing how much velocity to add to the particles as they they spawn, in local space. (0, 0, -10) will make the particles shoot out the rear of the particle system at 10 meters per second.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Rnd Velocity&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;A Vector3 representing how much randomization to add to the velocity of each particle. It is in local space. (2, 0, 0) will make the particles shoot out both sides of the particle system at in between 0 and 2 meters per second.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Emitter Velocity Scale&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;How much of the emitter's velocity to add to the particles. Negative will make them shoot backwards like the exhaust of a rocket and positive will make them inherit velocity from the particle system.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Tangent Velocity&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Tangent velocity only works for ellipsoid particle emitters. It's most useful when you want particles to move directly away from the centre of the emitter (Z greater than 0) or directly towards the centre (Z smaller than 0)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Simulate in World Space?&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;When you move the particle system do the particles move with it? Or do they stay in the same place in world space like a trail of smoke behind a moving object?&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;One Shot&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Emit all the particles at once or constantly? True for explosions, false for smoke trails. Usually if it is One Shot you want it to disappear after it is done. To do this put a script with particleEmitter.emit = false; Destroy(gameObject, particleEmitter.maxEnergy); on your emitter object.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Ellipsoid&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;The size of the circular area in which to emit particles. In local space.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Min Emitter Range&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Never emit particles closer than this to the center.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Particle Animator Component:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="4" rules="all" width="400"&gt; &lt;tbody&gt;&lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Does Animate Color?&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Color Animation lets you make the particles change color over their lifetime. This is almost always essential because of the need to fade out particles. Try different transparency curves and color changes with your particle systems to see what looks best. If for some reason you don't need this, turn it off and save CPU cycles. &lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt;  &lt;td&gt;&lt;span style="font-size:85%;"&gt;Color Animation[0 to 4]&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Colors for the color animation.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;World Rotation Axis&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;This vector3 axis controls the particle system rotation in worldspace. This is used for things like cyclones where you want the particles to spin around. This does not rotate the particles relative to the camera. Instead, it spins them around an axis. It depends on already existing velocity and can get out of control in an ugly way.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Local Rotation Axis &lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Same as above, just in local space.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Size Grow &lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;How much to grow the particles every second. It appears to be multiplicative. The longer-lived your particles are the smaller this should be. It can also make particles smaller over time when negative.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Rnd Force&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Random Force causes particles to jitter. It moves them back and forth sometimes and sometimes just in one direction more or less. This is a vector3 in world or local space depending on the Particle Emitter's Simulate in World Space? Variable.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Force&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Adds a force on all particles and will add to their velocity every second. Use this to simulate gravity or wind. This is a vector3 in world or local space depending on the Particle Emitter's Simulate in World Space? Variable.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Damping&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Multiply the particle's velocity by this every second. The lower, the more "drag" the particles have. If it is 1 there will be no effect on the particle's motion. Nice violent effects can be made by having a lot of initial velocity and also a lot of drag.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Autodestruct&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;If this is true and there are no particles in the system the Particle Animator component will destroy its parent Game Object. This will not make it disappear after all the particles run out from a one shot emission. It will simply fire all the particles again.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Particle Renderer Component:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" border="1" cellpadding="4" rules="all" width="400"&gt; &lt;tbody&gt;&lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Materials&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Almost always just one material here but many can be used. The higher the index the higher the layer. If you do use many materials make sure that you strike a good balance. I tested this out with a very dark particle on bottom and a bright additive on top to make a decent explosion effect. Not quite as good as multiple emitters but probably can save CPU cycles.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Camera Velocity Scale&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;If you use stretched particles they will stretch with camera motion this amount. I have never used this.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Stretch Particles&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Choose between Billboard (probably fastest, use for billboard style additive particles like flames or for particles you want to be faster), Sorted Billboard (Slower, use for smoke effects where depth matters), and Stretched (probably slowest, use for things like lasers, sparks, rain, etc anything with long particles).&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Length Scale&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Base length for stretched particles. Doesn't do anything if Stretch Particles isn't set to Stretched.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Velocity Scale&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;How much more to add to the length of stretched particles depending on their speed.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Max Particle Size&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;Don't ever let particles be drawn bigger than this. I think the default value 0.25 means "A quarter of the screen". This can cause ugliness when inside particle effects but saves a lot of performance at the same time. Generally just a safeguard against fill rate monster effects. You should never need this if you are careful.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr align="left"&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;UV Animation&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;span style="font-size:85%;"&gt;This is where you control particle animations. It contains three variables, X Tile, Y Tile and Cycles. If you have an animation with 16 tiles laid out on a 4 by 4 grid both X Tile and Y Tile should be 4. If you have an animation with 8 frames from left to right X Tile should be 8 and Y Tile should be 1. As far as I can tell Cycles is very broken and should always be one. If it worked you presumably could have a looping animation.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-4177168584542011510?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/4177168584542011510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=4177168584542011510' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4177168584542011510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4177168584542011510'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/particle-effects-tutorial.html' title='Particle Effects Tutorial'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JaIOUFysR1w/R2ivQ4uTS4I/AAAAAAAAACA/QVhVA_An3bU/s72-c/whitetoclouds.gif' height='72' width='72'/><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-4918303025344743444</id><published>2007-12-18T19:42:00.000-08:00</published><updated>2009-10-20T22:59:40.003-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='videos'/><category scheme='http://www.blogger.com/atom/ns#' term='megapixel'/><category scheme='http://www.blogger.com/atom/ns#' term='shockwave'/><category scheme='http://www.blogger.com/atom/ns#' term='contests'/><category scheme='http://www.blogger.com/atom/ns#' term='game projects'/><title type='text'>Megapixel - Award winning online game</title><content type='html'>MegaPixel is a fast paced first person action game in an interesting abstract setting. It features exciting and challenging gameplay inspired by great games like Halo, crazy-awesome abstract graphics made out of particles and 8 bit type sound effects. My vision was a game of pure intense action where reflexes are essential and the player is rewarded for making difficult shots, being patient in the heat of battle and using skill and strategy to destroy many enemies at once.&lt;br /&gt;&lt;br /&gt;MegaPixel won first place in the &lt;a href="http://www.idevgames.com/forum/showthread.php?t=13433"&gt;3DU Game Design Contest&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="subtitle"&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;The critics rave:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;        &lt;p&gt;     &lt;i&gt;"Great graphics style, interesting flocking enemy behaviors, variety in levels and weapons. Overall, a pretty complete entry."&lt;/i&gt;&lt;br /&gt;3DU Judge 4    &lt;/p&gt;        &lt;p&gt;     &lt;i&gt;"Unique graphic style and great sound."&lt;/i&gt;&lt;br /&gt;Carlos Camacho, iDev Games Editor, 3DU Judge    &lt;/p&gt;        &lt;p&gt;     &lt;i&gt;"This is the best indie game i've played this year!"&lt;/i&gt;&lt;br /&gt;3DU Judge 5    &lt;/p&gt;        &lt;p&gt;     &lt;i&gt;"speechless"&lt;/i&gt;&lt;br /&gt;3DU Judge 2    &lt;/p&gt;&lt;span style="font-size:130%;"&gt;Screenshots&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JaIOUFysR1w/R2icEouTS0I/AAAAAAAAABg/bTWgJMFUibg/s1600-h/1.png"&gt;&lt;img style="cursor: pointer; width: 174px; height: 133px;" src="http://4.bp.blogspot.com/_JaIOUFysR1w/R2icEouTS0I/AAAAAAAAABg/bTWgJMFUibg/s320/1.png" alt="" id="BLOGGER_PHOTO_ID_5145534177735822146" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JaIOUFysR1w/R2icE4uTS1I/AAAAAAAAABo/FqgUpy1gf1U/s1600-h/3.png"&gt;&lt;img style="cursor: pointer; width: 173px; height: 132px;" src="http://1.bp.blogspot.com/_JaIOUFysR1w/R2icE4uTS1I/AAAAAAAAABo/FqgUpy1gf1U/s320/3.png" alt="" id="BLOGGER_PHOTO_ID_5145534182030789458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JaIOUFysR1w/R2icFIuTS2I/AAAAAAAAABw/JrAf1dyIURI/s1600-h/7.png"&gt;&lt;img style="cursor: pointer; width: 173px; height: 132px;" src="http://2.bp.blogspot.com/_JaIOUFysR1w/R2icFIuTS2I/AAAAAAAAABw/JrAf1dyIURI/s320/7.png" alt="" id="BLOGGER_PHOTO_ID_5145534186325756770" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JaIOUFysR1w/R2icFIuTS3I/AAAAAAAAAB4/NIHMtlZUPCE/s1600-h/14.png"&gt;&lt;img style="cursor: pointer; width: 173px; height: 132px;" src="http://2.bp.blogspot.com/_JaIOUFysR1w/R2icFIuTS3I/AAAAAAAAAB4/NIHMtlZUPCE/s320/14.png" alt="" id="BLOGGER_PHOTO_ID_5145534186325756786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Gameplay Movie&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-890ec95d31c63e35" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v24.nonxt2.googlevideo.com/videoplayback?id%3D890ec95d31c63e35%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329906786%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D2ABF9DD82912D516600D633103233139D80D201.1A5FEA96780F32B289E1232E26668081E4061919%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D890ec95d31c63e35%26offsetms%3D5000%26itag%3Dw160%26sigh%3DIXXSbW0UwwPhgLJ-90xn8aLt06w&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v24.nonxt2.googlevideo.com/videoplayback?id%3D890ec95d31c63e35%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329906786%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D2ABF9DD82912D516600D633103233139D80D201.1A5FEA96780F32B289E1232E26668081E4061919%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D890ec95d31c63e35%26offsetms%3D5000%26itag%3Dw160%26sigh%3DIXXSbW0UwwPhgLJ-90xn8aLt06w&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Play it online&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can play MegaPixel at &lt;a href="http://www.shockwave.com/gamelanding/megapixel.jsp"&gt;Shockwave.com&lt;/a&gt; or &lt;a href="http://www.yogware.bluegillstudios.com/site/webplayers/megapixel/webplayer.html"&gt;My website&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yogware.bluegillstudios.com/site/webplayers/megapixel/webplayer.html"&gt;&lt;/a&gt;            &lt;p&gt;      You will need the Unity Web Player plugin to do this. If you don't have it you will be asked to install it.&lt;/p&gt;&lt;p&gt;Someone wanted a standalone, so I made this thing: &lt;a href="http://yogware.bluegillstudios.com/site/webplayers/megapixel/Megapixel%20Standalone%20Distro.zip"&gt;Megapixel Standalone Distro&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;Credits&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;     All game design, programming, art and sound effects by Forest Johnson.    &lt;/p&gt;    &lt;p&gt;     Music courtesy of:    &lt;/p&gt;             &lt;a href="http://www.pabloperezblog.blogspot.com/"&gt;Pablo Perez&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.skincontact.com/"&gt;Kevin Breidenbach - Fugue State&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.pextris.com/"&gt;Pextris&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.manolocamp.net/"&gt;Manuel Kempter&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-4918303025344743444?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=890ec95d31c63e35&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/4918303025344743444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=4918303025344743444' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4918303025344743444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/4918303025344743444'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/megapixel-award-winning-online-game.html' title='Megapixel - Award winning online game'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JaIOUFysR1w/R2icEouTS0I/AAAAAAAAABg/bTWgJMFUibg/s72-c/1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-5069542301993527656</id><published>2007-12-18T15:58:00.000-08:00</published><updated>2008-03-02T11:52:18.345-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webplayers'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>Old projects that are sort of cool</title><content type='html'>In the process of learning Unity I started a zillion projects but none of them ever got anywhere, save for a few. Here they are, resurrected for your enjoyment:&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 51, 102);"&gt;Racing game&lt;/span&gt;&lt;/span&gt;                &lt;p&gt;This was my first attempt at a racing game and really my first attempt at AI, complicated physics and real environment modeling. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=Racing&amp;version=1.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(0, 51, 102);"&gt;Spaceship shooter&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;This was my second try for a space game (the first version was basically the same, but with no textures and less interesting stuff) It features a more robust GUI system (my first), three playable ships and two levels. The physics are a little more realistic than some space games so it might take a bit of time to get used to. I never really fine tuned the gameplay in this one so it's a tad boring.&lt;/p&gt;&lt;p&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=Space&amp;version=1.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(0, 51, 102);"&gt;The Portal Project&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;After seeing the first footage from portal I took it upon myself to create a portal gun. I did in in a sort of hackish way that has some problems, but for the most part it actually worked.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;iframe src="http://yogware.bluegillstudios.com/blogfiles/button.php?file=Portal&amp;version=1.x" marginheight="0" frameborder="0" height="300" scrolling="no" width="400"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-5069542301993527656?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/5069542301993527656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=5069542301993527656' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5069542301993527656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/5069542301993527656'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/old-projects-that-are-sort-of-cool.html' title='Old projects that are sort of cool'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6967593701414876303.post-916512037113317352</id><published>2007-12-18T15:20:00.000-08:00</published><updated>2008-07-23T13:12:55.371-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>The relevant history of my game dev... Career?</title><content type='html'>I started being interested in game development after I first played some real games on the red G4 iMac, like Age of Empires II, Think Tanks and Marble Blast. I Started with Hyper Card and tried to make a top down adventure game with no graphics, then fairly quickly moved to a 2D RPG template program. I fought with it for a long time and made a lot of simple games with horrible photoshop painted graphics. Near the end I was really pushing what this RPG creator was meant to do, with stuff like a puzzle game similar to tic tac toe. Around that time I got into modding Think Tanks and Marble Blast, two old torque games. After that I decided it was time to learn a real programming language and try to find a 3D engine I could use. I searched for a while for ways to de-mystify 3D and programming in general, but never got anywhere with the tools and communities there were in the Mac realm.&lt;br /&gt;&lt;br /&gt;Then a friend who was also looking for a 3D engine came across Unity and pointed me to it. It seemed really cool so I downloaded the trial and after the 5 minutes it took to make a bunch of colored cubes interact physically with joints in a stand alone app, I was basically sold on it. Of course I had to learn a programming language, so went to the Unity forums, Documentation and later IRC channel for help with that looming task. Thanks to the community and some perseverance I got past the really rough stages and was able to script some very simple things and get game ideas off the ground. From there I started a plethora of cool projects that mostly never saw the light of day because by the time I got anything done in one project I would know more and with my knowledge I would feel confident in starting something more complex, therefore I was scrapping what I had and starting something new every month or so. A few projects I was working on in that stage got to a playable state, but thats for another post.&lt;br /&gt;&lt;br /&gt;I've been learning programming and 3D ever since, and have completed a couple cool projects as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6967593701414876303-916512037113317352?l=forestjohnson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forestjohnson.blogspot.com/feeds/916512037113317352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6967593701414876303&amp;postID=916512037113317352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/916512037113317352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6967593701414876303/posts/default/916512037113317352'/><link rel='alternate' type='text/html' href='http://forestjohnson.blogspot.com/2007/12/relevant-history-of-my-game-development.html' title='The relevant history of my game dev... Career?'/><author><name>Forest Johnson</name><uri>http://www.blogger.com/profile/09861818344475329500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_JaIOUFysR1w/TNikfarHKPI/AAAAAAAAAQU/ij96gshkD0w/S220/48985_569238370_6908_n.jpg'/></author><thr:total>0</thr:total></entry></feed>
