Sunday, September 19, 2004

Walkthrough in Croquet

One of the things I have been thinking about is how I might develop a true 3D design tool inside of Croquet. When I wrote Virtus Walkthrough, I had a rather constrained set of capabilities dictated by the 2D user interface paradigm introduced by the Mac and by MacPaint and MacDraw. The goal became that of figuring out how to extend the existing interface to include a realtime 3D space. This was accomplished by having the tools and the design view be all in 2D, which looked very much like MacDraw, and adding a 3D first person view inside of another window. The user would design the space in the 2D view, and explore it in the 3D view. This wasn't bad, but it meant that you always had to jump back and forth between 2D and 3D, which was a pain.

Here is a picture of it:



We started adding some direct manipulation in the 3D world in later versions of the system, in fact, when we developed OpenSpace, the intended successor of WalkThrough, we left out the 2D manipulation and design entireley. This also proved to be suboptimal. When I first described the idea of removing the 2D view entirely, a friend of mine working at Disney Imagineering said that would be a huge mistake. The 2D view acted as a map that we quite easy to understand and work with. This proved to be the case with OpenSpace. Using it as simply a layout animation tool was great for small non-environment based projects, but it didn't really lend itself to world building. Of course, it really didn't have any design tools either, so this might not have been an issue. But with Croquet - everything is 3D. I think that the key idea here is not to abandon the 2D, but figure out a nice way to interleave it with the 3D. That is, the 2D becomes a true working surface that can be viewed either flat or in context with the extruded 3D data set. The first efforts on this were the Wicket demo I built:



I like this a lot, but the big problem is that I don't really have a tool palette to work with here. This is a more subtle problem than you might think, as the palette needs to live somewhere, without cluttering the collaborative design of the model. Further, everything in Croquet is an independent object. This means that any tool developed needs to communicate with the model via it's messages. But I need to be able to extend the capabilities of the tools independently of the capabilities of the model that I am working on. This problem leads to some pretty crufty approaches in the code. I have not seen anything that works the way I would want.

No comments: