Graduate Course: Advanced Topics in Multimedia

Spring 2002
Ken Perlin


High level description of a large shared project for people to take on different pieces of:

Create a shared on-line world in which kids can build things. The worls should have interactive creatures that kids can grow and play with together. Design the world so that kids will need to learn how to program in order to make really cool things happen in this world.

The larger (not so secret) agenda of this project is to help figure out how our society can achieve near-universal literacy in programming, sooner rather than later, by getting kids used to "socially relevant programming." After all, society once thought near-universal written literacy to be impossible, even nuts. That was back when "literacy" involved a small elite memorizing texts in a sacred language. In that context, people couldn't see why you'd want everyone to read and write. We know better now. Getting little kids to see the potential social relevance of programming is a first step, kind of a "Cat in the Hat" level. We also need to eventually extend to the "The role of the Female Protagonist; Shakespeare versus Virginia Wolfe" level, but first things first.

The following are early tests for a character who will live in this world. Kids will be able to customize the world through magic code windows, give their characters personality and create adventures for them.

one polly two pollys

All the enabling technology for this world will be Java 1.1 compatible, so that the system will run on Web browsers currently in the home. All the source code will be exposed, down to the renderer, so that intrepid kids can dig deeper if they want to.

I've already written a basic modeling and rendering system, but there's plenty more to do, including subsystems to:

I'd also like us to develop novel and intuitive user interfaces for interacting with such worlds. One example of an approach to such an interface is given by my Eames Pad experiments. For example, it would be very interesting to implement a visual metaphor in which when you zoom into a character's mind, you see a miniature physical world in which the elements of the program running in that characters mind appear as miniature creatures moving about. This could be recursive. :-)


Right now (when you read this) email me the URL of where you'll be putting up your work. I'll set up a web page linking to everone's work.

For this assignment your job is to write a Java applet that describes or explains something of interest to you. It could be about a visual design idea, a new way to look at a poem, a mechanical invention, the real reason your girlfriend broke up with you, how to get to your favourite restaurant in the Village, a cooking recipe, or anything else in which you have a real interest.

Over the course of the next few days I'm going to be putting up various example applets here:
The extremely simple "interactive story with applet" that I showed in class.

Make sure to do "view source" on this page, so you can see how I let the user send info to the applet by clicking on places in the html text.
Simple examples of the use of my 3D rendering package.

Feel free to use any of these as a starting point for your own project. I find that the best way to learn a new programming environment is to find a program somebody else wrote, and then change it.

You are also responsible for making a small icon image (jpeg is good - you can do a screen-grab using ALT-PrintScreen and then edit by pasting into MS-Paint or similar program) for any applet you write. Your icon image should be 110×110 pixels in size, and it should give a good sense of the wonderful applet people will see when they click on the icon.

This assignment will be due on Monday, Feb 10.


The guest lecturer for this class will be Brad Paley. You can find out about his brilliant and amazing work at:


Here is the list of URLs for student assignments.

In class we discussed what it would take to create a simulation world for the Polly critters that would be fun and compelling, and would allow participants to make their own things happen. Our discussion touched on many topics, including artificial intelligence, state transition diagrams, localized sound, reasoning, visual design, character modeling design, making new animations, some sort of physics, putting intelligence into the space itself (ie: smart level design), persistence (including customized persistence for each participant).

We went over the fact that for all these issues, there needs to be an underlying semantics, in which things can be specified though some programming API. Any GUI would be built on top of such a programming layer, but a power user could also create things by making method calls to a Java library.

At some point I asked the simpler question: how would you design the capability to simply make a lineary movie with our Pollys? I wanted you to think about this kind of capability because the things it asks the Pollys to be able to do forms a nice subset of everything they would be able to do in a full simulation world. For example, in order to take direction, they need to know how to enter and exit rooms, hit their mark at the right time, do an action with different "attitude" (which could be implemented simply by blending animation cycles in differing amounts to show mood and speed variations).

I'd like you to do this assignment in two parts. The first part, which you should complete by this coming Monday, is to write a short, wordless playlet, a small dramatic story, that you think the Pollys might be able to play out if you could direct them as movie actors. It can be very simple - on the order of the "chicken crossing the road" scenario that we discussed in class. For this part of the assignment, you need to break things down into what each Polly does when - walking on to a spot, jumping three seconds later, then turning to the camers, etc. Come up with some form of description format in which to express your little playlet. It's ok for the description format to look like Java method calls, or some simple script language that could easily be parsed into method calls.

For the second part of the assignment, which will be due in two weeks from last Monday's class, I'd like you to choose part of a virtual world-building problem, and implement a tool that helps with that, It can be a path planning tool, an AI decision maker, a character or animation-cycle design tool, etc. If it's possible for you to do it in a Java applet (eg: you don't need some sort of special sound package) then please do it as a Java applet, so we can put the results up on the Web.


An outline of this evening's lecture is here.

Homework will be due March 10. I'd like you to do two things:

(i) try to implement some sort of very simple "creature based computer" in the spirit of the one that I showed you in class. Try to make it Turing-complete if you can (anything that implements NAND gate logic will do that), and try to make it an engaging experience for the user, with critters running around that have some sort of engaging quality.

Some issues to think about: How much computational power resides in the environment, and how much resides in each critter? What kind of state information should a critter carry, and how should this information be presented to the user? How does the user create things in this world?

(ii) Those of you who are working on tools to enable a shared world should start contacting each other, to see how to put your various pieces together. For example, one person might have implemented a shared blackboard protocol that somebody else can tie together with an "actor" layer you've implemented above my renderer. Somebody else might have a nice tool to add animations to Polly - how can this be combined with a persistent database of such animations? Feel free to email and meet amongst yourselves to work these things out.


We will have a guest lecture by Rebecca Ross.


After people showed their projects, we discussed the "continuous terrain" model of decision making in a story-world, and how we might apply that to the Polly characters.

For homework, I'd like to see you try to work on creating the n-dimensional space of properties that a Polly character should respond to, to implement such a model. Some examples of interesting dimensions are lethargic/energetic, isolationist/social, wall-hugging/wall-avoiding.

Perhaps there should be a general tendency to be attracted and/or repelled by various types of objects or properties in the scene. Some potential properties are color, shape, openness of the space, availability of food or water, and other pollys that are similar/different from self. You should think of others.

Some sort of user interface is needed for people to author behaviors in this model. You might want to work on creating such an interface. A really good goal would be to allow users to put a few simple shapes down into the scene to specify a behavioral terrain, with the result that the pollys do some interesting individual or group behavior.

Notice that when I designed the wall and other-polly avoidance software, I kept the interface very simple. I specified a wall simply as a connected set of line segments. The work of adding a "size" factor to the repulsion is done internally, depending upon the size of the polly itself.

In this lecture I also showed some of my work in adding texture to particle systems. For your reference, the 2D tests are in and the 3D tests are in


We're focusing on creating the rules for non-linear scripts that kids would build in the Polly Game.

Homework will be to develop simple interactive stories, proposed scripting syntax/semantics rules, and script examples, along the lines discussed in class.

Remember that you want story scripts to be more than linear - they need to be robust in the sense that if a kid goes on line with his/her character, and that character encounters unexpected things (eg: characters and objects created by other kids), then the character will continue to act in a reasonable and consistent way.

I realize this assignment calls for a lot of thinking "out of the box." Give it your best shot! The assignment is due this coming Monday, April 7, by the start of class time.


We go over your Polly script language approaches. Homework is to make these scripts actually executable by next Monday (Apr 14), so that you can get them to spin out narrative events, at least in text.


We go over your executable Polly script languages. Homework by next Monday (Apr 21) is to get the narrative events your scripts generate to work in your 3D world.


People have started to put together their language/scripting tools and their 3D worlds.

I started to introduce Amy Bruckman's Moose Crossing system. It's also useful to look at her Ph.D. Thesis about Moose Crossing. You've now all started working in teams to put your various tools together.


In addition to showing your penultimate project results, we also had a guest lecture from Gerry Seidman about his work on peer-to-peer based collaborative software. You've already received an email from Gerry, about how to obtain his software. If for some reason you haven't, please let me know.