Friday, November 27, 2009

Blue Hour (IV)

I'm thinking about Edward.  I don't like his job.  I wonder if he studies calligraphy on weekends.  Calligraphy is fun.  If you know calligraphy, you can put pretty notes in the banana packages.  Oh yes, the banana packages in the luggage.  I need to find the luggage.  Then I will have bananas.  Yes, then I will finally have bananas.

Blue Hour (III)

They have no bananas? They have no bananas! No bananas today, but maybe bananas tomorrow. I'm going to drive to the airport. I'm going to pick up my luggage at the airport. My luggage at the airport has a bag of bananas in it. Edward sent them. Edward is a podiatrist in georgia. His hair is the color of strained peaches.

[repost from facebook]

Blue Hour (II)

Yes, they have no bananas, they have no bananas today.

[contributed by THCIA]

Blue Hour (I)

i walked to the store. i opened the door. i pushed it open. i looked at the security guard. his name is john. he plays dam jhat on thursdays. i picked up a basket. they didn't have carts. i need bananas. do they have bananas? i don't think they have bananas. oh what are those yellow things. i need bananas. i think those are bananas. let's buy some bananas.

[repost from facebook]

Friday, October 16, 2009

holland is a rhythmic hammer park (V)

tired of sex (weezer)
entertain me (blur)
the rhythm of the heat (peter gabriel)
love etc. (pet shop boys)
symphony for saddam's significant other (pig)
midlife crisis (faith no more)
the future (leonard cohen)
colette shows him le ropes (michael giacchino)

Wednesday, October 14, 2009

spheres rotate in SU(2) with tap water bottles filled with elm leaves (IV)

risen (kmfdm)
solid waste (meat beat manifesto)
scream (michael and janet jackson)
hallelujah (rammstein)
diy (kmfdm)
happiness in slavery (nine inch nails)
young cassius (meat beat manifesto)
cake and happy stuff (marilyn manson)
discipline (nine inch nails)

Sunday, October 11, 2009

roger is red and blue, respectively (II)

song 2 (blur)
thaeter (marilyn manson)
the rain within her hands (bella morte)
starz (smashing pumpkins)
revolution action (atari teenage riot)
the horrible people (marilyn manson)
today (smashing pumpkins)
get your gunn (marilyn manson)
reality (david bowie)
down to earth (peter gabriel)
i'm only happy when it rains (garbage)

Saturday, October 10, 2009

under the moon (I)

zero (smashing pumpkins)
cruci-fiction in space (marilyn manson)
marilyn, my bitterness (crüxshadows)
prologue (bear mccreary)
light (trent reznor kmfdm remix)
bloodsports (skold vs. kmfdm)
hau ruck (kmfdm)
the show must go on (moulin rouge)
eifersucht (rammstein)
crazy on you (heart)

Monday, September 07, 2009

Three Films and Passive Attention Spans.

I have not been watching many films at all this year.  Here's what I've seen, up to this weekend:

Star Trek
The SIGGRAPH Evening Theater
Mary Poppins
The Day the Earth Stood Still
The Black Hole

It's now September.

The first question is why so few?  I have a very low passive attention span this year.  I'm liking passive things in small doses.  In contrast, I saw many tv episodes early in the year, although that has fallen completely away in the last few months.  Why the low passive attention span?

My active attention span is way up.  I'm writing a lot and coding a lot to finish a certain degree by next spring.  I'm also working on a number of personal projects (such as that in the last post).  So I have a very high active attention span right now.  Every time I approach something passively, I start to get ideas for my own projects and just want to break out and go work on my own things.  Even Mary Poppins was watched over the course of three days.

The next question is where's all the new great stuff that I really want to see?  Up (which I have been rightfully chastised for missing on a number of occasions)?  Slumdog Millionaire?  No Country for Old Men?  The Curious Case of Benjamin Button?  Etc.  The first reason they're missing is the theater.  It takes a long time, is socially isolationist, and costs a lot.  I like to watch things from midnight to 2 in the morning on days when I have absolutely nothing else to do.  The second reason is the fluff factor.  I've also read about 2 novels a week for the last few months.  And they're all fluff novels.  Some were good, some were atrocious, but they were all light reading.  A break from the mental intensity of making things.  Good films don't always have that fluff factor.  Great films really make you think.  Something tells me I'm going to be doing a lot of catching up when I have time to think about a year from now, after this degree thing is (hopefully) done.

This weekend I was rather sick.  I watched three films:
Harry Potter and the Order of the Phoenix

All were great fun.  Only the first had a real emotional arc to it, which caught me by surprise (I was not a big fan of Fahrenheit 911 as a film, which has nothing to do with its political message, but that's another story).  But the last 45 minutes really take you for a ride and tell a story that you want to see through to the end.  Knowing is scifi fluff.  I like scifi fluff when I don't feel like thinking.  See the list above.  It's fun to watch.  Knowing had some amazingly well put-together disaster sequences.  And I cared about most of the characters, except for one glaring exception.  But a better ending would have removed the last two sequences.  They're pretty, but weaken the emotion of the ending.  Harry Potter has the problem the previous Harry Potter had, but no so dramatically--it feels like spliced together episodes.  Some great acting and production design, and some really bad acting that was quite fun.  But pieces and parts don't fit together.  And they never even name one of the major villains.  Definitely a piece of something rather than a thing in itself.  I still like the third film the most (Alfonso Cuarón) for it's quirkiness and self-contained-ness.

Saturday, September 05, 2009

Popcorn for Trolls

"Three billygoats want to cross the bridge to join their billygoat friends, who are having a popcorn party. But first, they have to get past the ugly trolls, who guard the bridge. Everybody knows that. But what people don’t know is that trolls have feelings. Why can’t they have popcorn too?"

Every summer, Chris L's partner, Jody T, runs a drama workshop for kids where they make art, put on plays, and as I understand it, do lots of creative things for a couple weeks. Another friend, Mark H, helps her run the workshop, and last year he started a trend of making a video based on what the kids do. Chris and I help by making animation, mostly using the kids drawings, because, well, it's a lot of fun. We just finished this year's video, which is both a short film and music video set to a cover of the Gershon Kingsley song "Popcorn." Chris did the troll-under-the-bridge scenes, and I made all the popcorn and balloon effects and did some music remixing.

Tuesday, June 30, 2009


kevin quain suggests sorting your itunes playlist by title and filtering by the word "don't" to find out everything that itunes doesn't want you to do. here's what it told me:

don't blow your top.
don't come around here no more
don't download this song
don't download this song
don't give up
don't look back
don't lose my number
don't push.

i must have downloaded the third song a couple times.

Saturday, June 20, 2009

the last post is an outlier. i have thought often about deleting it and have avoiding writing anything here as i've contemplated whether or not to do so. i don't think i will.

it's a time of deep work, making a number of things.

Friday, June 05, 2009

out, brief spot.

Patrick's ex-girlfriend confronted him again tonight, after the police have REPEATEDLY told her not to contact him. He really, REALLY hates to bring his personal life up on his blog, but he feels the the social pressure that will result is worth it. DO NOT CONTACT ME AGAIN.

Thursday, May 28, 2009

solar hot water

My landlord woke me so his contractor could inspect the blocked up fireplace on my floor. He's having a solar hot water system put in.

What amuses me is that the contractor was doing his best to convince me that it was good for the environment, without having asked what I thought.

This has me wondering how many people believe that solar heat is not good for the environment.

Saturday, May 23, 2009

why am i here?

Blogs and Facebook and Twitter. They're interesting. I put a lot of one-way stuff on them. People reply to facebook the most, twitter next, and here rarely. Accessibility? Or having it put in front of you more for the other two places than for here, where you most likely explicitly check. It affects how you use them. This, and another work-centric blog, have become more self reflective, but in a deliberately filtered way. They are thoughts that might be interesting to someone else, but are more relevant to me. The act of publishing them coerces me into being more organized than I would be in my journal. Half the reason to write is to deliberately reflect; the other half is the act of writing. It keeps your chops up, as they say, whoever they are. Facebook and Twitter writings are more specifically for the entertainment of others. Perhaps it's good not many have found their way here, as it would change the nature of the text.

In all cases, you're hearing from a deliberately managed character, of course.

Friday, May 22, 2009

why are you here?

Uncommunication is a wonderful thing. So much can be said while so much is not being said. And so much can be said by not saying what is unsaid while something else is being said.

Saturday, March 28, 2009


Battlestar Galactica ended the way I always wanted to see a show end. But we rarely shows end this way. It took it's time. It had all the action and excitement. But then the writers gave a resolution to all the characters that still needed one. We find out where they are going, if not knowing their later stories.

The shot of Ron Moore reading National Geographic was self-referentially priceless.

Wednesday, March 18, 2009

candleholder cake

just a quick note of thanks to folks by the names of mark, chris, and maya for the discovery of candleholder cakes!

Friday, February 27, 2009

improv coding with an audience

occasionally, i have had to write code with an audience. i have long since known that it is not a strong part of my skill set to do this by improv. betty edwards, in her book, "drawing on the right side of the brain," argues for the philosophy of right-brained vs. left brained thinking. in computer science terms, left brained thinking is your sequential, logical side, which steps through things one piece at a time. right-brained thinking is your parallel processing side, which processes everything at once and just "sees" things. when i am writing a paper, i am using my left brain, since i am trying to logically anticipate the reader's response to each sentence i write. I want to write a sentence that makes them think about things the way i want them to so that what i am saying is clear. when i am drawing, i am using my right brain. there is almost no conscious thought. i play with what i see and just run with what's intuitive to make a picture. i have no idea what time has passed or what music i am listening to, if any.

when i first learned to code, i thought with my left brain. i thought through things one line at a time and made sure each line worked to say whatever it needed to say so that the computer could compile it into voltage differences that allow it to go do something useful with itself, if we hook up our circuits right. i eventually started to think of code with my right brain, however. i think of it now as a concise mathematical statement that needs to work on its own as a whole. each line is not separate; they intertwine together to make things say what they need to say as a concise entity.

when i talk to an audience, i am analytically watching their faces and listening to their tone of voice to see how they respond, and i adapt my level of detail and redundancy of statement based on their reactions. it's very left brained.

i am very bad at improvising code in front of a class. so i write my lecture notes, as everyone does. and then i rewrite them as i think about what questions students might ask. and i plan a couple lectures ahead to let things "gel" in the back of my mind, so that i have a better idea of how well they will work before presenting them. of course, smart students ask me questions that catch me off guard, which might head down the road of a different explanation but i steer things back to where i was going, regardless. not out of a sense of correctness, but because i know full well that if i head down another path, the right-brained/left-brained battle will stalemate and either my communication will break down or my solution will be wrong, or more likely, both will suffer. richard williams, in his book, "the animator's survival kit," shows a newby animator (the author) asking an experienced animator (milt kahl) if he listens to classical music while he works. turn the page. milt expands in size tenfold, and says "of all the sssstupid #@$#$@$#$ questions iiiiiiiv'e ever heard!!!! iiiiiiiiiiii never heard such a f$%$%#$%$#%$ stupid question! i'm not smart enough to think of more than one thing at a time!!!" that's me writing code from scratch. that's also me communicating to an audience. and animating too. they don't mix and match at all well.

as to the music question, i sometimes have it on, but i usually have no idea what's playing; it's completely blanked out of my thinking. the only time i found music to be specifically useful was when animating some fire in one of these movie films that comes out every now and then. i had my fire animation, some reference footage, and the adjacent fire shots playing on screen together, with nin's "burn" on repeat. it worked, helping to get the feel of fire out of jos's discretization of the navier stokes equations. the emotional feel of the music and shot were different, but the emotional feel of the music and fire motion were the same. that's rarely the case.

i recently had the opportunity to improv code with an audience. i was way way off my game. i learned a lot from it though, in terms my personal limits. sometimes i really am only smart enough to do one thing at a time.

Friday, January 30, 2009

Rasterization vs. Ray Tracing and the Size of your Data

We all learn about rasterization and ray tracing in introductory computer graphics classes if we are computer graphicists. But, at a fundamental level, what it the difference? Teaching computer graphics has made me think about these things again. As an exercise, challenge yourself to write pseudocode for each algorithm in exactly 4 lines. Then keep reading.

I asked a number of graphics PhD students to do this tonight, and they dove straight into details about projecting triangles and computing viewing transformations, etc. But there is a fundamental difference at a much higher level that interacts with the way we make data to affect the computational complexity of these algorithms. My 4-liner versions of the algorithms look like this:

for each shape:
for each pixel:
if the shape is visible in the pixel:
compute the color and draw it in the pixel

Ray tracing:
for each pixel:
for each shape:
if the shape is visible in the pixel:
compute the color and draw it in the pixel

These look almost exactly the same. We're really just swapping the order in which we iterate over data. But renderers, in practice, have to process a _lot_ of data. Way more than we can hold in memory, in the case of film quality scenes. And performance is tied to data locality, since data locality lets us avoid having to move stuff in and out of memory a lot, which makes things really slow. That constant on the memory transfer is big.

In either algorithm, we have to make an image, so we bite the bullet there and keep the image data around. It's also of fixed size and usually fits in memory, so it's not much of an issue. Shape data grows without bound, however. My experience in film production tells me to be careless about the size of your shape data until it becomes a real problem for other people, because artist time is really really really expensive and processor time is just expensive (until you hit your memory limit, where it becomes a constant multiplier on the next artist down the pipeline). So we push the size of shape data over the limit of what fits in memory on a regular basis.

Rasterizers deal with this by only processing each shape once, throwing the current shape data away at the end of the inner loop and ignoring global appearance interdependencies. Shapes are expensive to read in (we're accessing disks here), but it's O(n) in terms of how many times we read in shape data.

Ray tracers usually have to read all the shape data multiple times, since a lot of it has to get tossed out of memory _for each pixel_, since many shapes will often push memory limit bounds all on their own. And then ray tracers figure they've taken the performance hit already, so why not try to solve some of the global appearance interdependencies while we're at it. And now we have brute force solutions to the rendering equation, if we have good BRDFs. O(n^recursion depth), if my big oh is right (my math is bad on Fridays). Yikes. So we do things like bounding recursion and probabilistically killing recursive calls to keep this under control. Even if we completely ignore global appearance interdependencies, we have O(kn), where k is our number of pixels.

And when n is big, as it is for high-quality algorithms, that can mean days or weeks instead of minutes.

Thursday, January 29, 2009

Are points and vectors (and normals) different?

I'm teaching a computer graphics course right now. This is an expanded version of an answer to a question posed by both a student and a very smart ta:

Are points and vectors different? We teach coordinate free geometry in our graphics course, so we say yes. The idea doesn't always sit well with people with a strong math background, as opposed to a geometry background.

It really depends on your point of view of the world. In graphics, we need to be careful about how we transform things, to make sure we transform them correctly.

From the mathematical vector space point of view, all points can be represented as vectors, with the implicit assumption that they have an origin at zero. So yes, points are vectors contained in a mathematical vector space.

When we transform geometry, we need to make a distinction between locations in space (points) and directional offsets with magnitude in space ("vectors"). It sort of overloads the terminology a bit, but the direction with magnitude does not change as we translate around, while the location does--this is why we make the distinction. This is all part of the coordinate free geometry point of view. It says that we establish points and vectors as separate entities and make them behave differently with transformations. Then, define the basic operations between them to keep the difference straight. So a location plus an offset in some direction with some magnitude gives you a new location. Normal vectors give you yet a third way of transforming things.

When you write code, you have two choices: make the distinction or don't. If you don't make the distinction, you have one 3-component data type usually called a "vector." And then, whenever you transform stuff, you have to make sure you transform it the correct way, so your code has to keep track what geometric thing you have stored in that vector. So you have to do some kind of type checking and make sure you get it right whenever you write new code that deals with transformations. Something like

if v is a vector:
v' = transformAsVector(v)
else if v is a point
v' = transformAsPoint(v)
else if v is a normal
v' = transformAsNormal(v)

Keeping track of what v is gets way more tedious when you are adding point-vectors to vector-vectors, and so on.

If you make different data types for points, vectors, and normals, you can write one transform operation that does this checking internally or through c++ operator overloading, and you never have to think about it again in your code. And if you implement operations like p+v = p correctly, you don't have to keep track of what geometric thing you have. Geometric algorithms do a lot of point-vector algebra, and keeping track of what's what inside your geometric code is tedious and bug-prone. And you get one line of code to transform something:
v' = transform(v)

We teach the CFG point of view because you need to know the difference to do geometry correctly, it can make your geometric derivations easier to think through, and it can make your code significantly shorter, easier to read, and a lot less bug-prone.

There's also another level to CFG that recommends encoding the space of the coordinates with the point and compensating for spatial difference inside, for example, the point + vector operation. This is rarely implemented (I have only seen it done in the paper below), since most geometric algorithms deal with all their data already in the same space.

In my code, I break one CFG rule. I allow point + point addition. Adding two locations is geometrically meaningless. I have some data filtering code that I want to be type-independent. The filtering, when you think about it, is really doing barycentric combinations of points. But then we're back to the question of "should the filtering code do type checking to call a barycentric combination operation when it encounters points instead of scalars or vectors?" Then the code gets hard to read, and it requires me so hunt down whatever I named the barycentric combination operation when I wrote it two years ago. So points can be added to points, and we still get to write a simple smoothing filter as:
s[i] = 0.5 * s[i] + 0.25 * s[i -1] + 0.25 s[i + 1]
(s is a point sample).

About CFG: A Coordinate Free Geometry ADT. Stephen Mann, Nathan Litke, Tony DeRose. 1997

Friday, January 02, 2009

consumer 3d

I have been pleasantly griping to a number of people lately about the lack of 3d animation software that is approachable to non-professionals. What's interesting is the variety of responses I get back. Academic researchers always point to their favorite paper that has a sketch based interface, but these usually only solve part of the problem (by nature, as they are research projects). Engineers working on 3d software seem to be of two generations: the older group thinks people who want to use it will learn it and that's that. The younger group of engineers knows better, since they had to learn what the older group built, and they know it is not at all easy to learn. Surprisingly, animators seem to argue against the need for it, supporting the notion that you need professional training to be an animator.

Think of apple's ilife software. Pretty much anyone can make something cool with it without any training and without the manual. If you want to go professional, you can buy final cut pro or logic or aperture or whatever the fancy version of photoshop is called. But it won't make you a professional. You still need training to learn the professional skills. Why not for 3d animation? As it stands, you need training just to learn how to look around.

It's a tough problem to make something like this since you have to safeguard people from making bad animation, but the variety of opinions on the idea is interesting. These aren't all-encompassing claims about the groups of people mentioned and certainly do not apply to everyone, but they are trends.