It’s no secret that I have been fairly impressed with Unity3D. I find it extremely liberating in comparison to Second Life’s (and any other MMO) pre-packaged notion of what online 3D environments should be. I had to give a talk yesterday, so I used that talk as an excuse to taking my knowledge of Unity3D to the next level. I decided to make my presentation in Unity3D, and have the audience be part of the presentation at some point — similar to what we see in SL/OpenSim, but with the experience on the Web browser and under my complete control. Go here to see the result. Let me explain what you see there.
The whole thing starts with what looks like a vanilla 2D, yet-another-PPT-on-the-web, kind of feel. I added a few buttons to control the slide show (I love the GUI programming options!). Go ahead, “load” the presentation, and play with the buttons on the right. Also don’t miss left-click+dragging the mouse for a cool fire trail effect.
On the left there are two additional buttons: the “World” button on top, and the “Roam” button on the bottom. The “World” button takes you to another scene that feels like a traditional virtual world — landscape, trees, ocean, fire, ambient sounds, etc. You can move around with the arrow keys, page up/down, mouse scroll, and pan using left-click+drag. If you wait long enough (about 5 minutes) you’ll actually see the weather changing into fog, and then back to sunny. There’s also a few Orbs floating and producing sounds; you can click them to get information about some of my papers (ok, lame, but it was the first thing that came to mind to exercise a bunch of things at the same time: OnMouseDown action, local resources, and moving labels
Note that the World is not synchronized with anyone else who visits, so you won’t see any avatars in there. That world is a scratchpad for me to experiment with the single-user-to-system interaction capabilities in Unity3D. When you’re in the world, you need to find your way back to the presentation! (hint: find the object that’s clearly out of context) So go ahead and find your way back.
The “Roam” button reveals the true nature of the 2D presentation. It’s actually a 3D scene. It just so happens that, by default, I have a fixed camera, and no movement control. Only when you “roam” can you perceive the 3D space. Yes, it’s MY scene, and I can control the entire user interaction however I want! YEY!
Once you’re in roam mode, you can move around in the same way as in the World. But the other little thing I did is that this roam mode enables the visualization of visitor presence. Each visitor in roam mode is represented as a yellow ball head. There are no names or identifiable labels; just yellow ball heads, possibly moving around. Yes, it’s avatars controlled by other people, and you’re seeing them! But that’s pretty much the only thing you can do — see them. There’s no chat (yet). Some yellow ball heads you see may be corpses of past visitors who didn’t “Fix” their view before they left — I don’t have automatic garbage collection yet.
The presentation itself has a few slides explaining what I did in order to synchronize presence and location, if you’re interested in knowing that. It’s a hack — a couple of 20-line python scripts called under timers on the client side. Ugly. It’s just a proof-of-concept for me to start looking into the networking capabilities of Unity3D. I feel like a kid in yet another candy store…!
How is this different from building in SL/OpenSim? Well, everything you experience was scripted by me, down to the camera and movement control, the fire trail effect and the GUI elements. In the World, I used a skybox developed by someone else that adds moving clouds. For the most part, I was able to figure everything out with the right keywords on Google. Not surprisingly, the part that I had most trouble with was… creating the yellow ball head itself I still don’t know enough about 3D modeling and texturing, so something as simple as this yellow ball head doesn’t come easy to me. I used Wings3D, and after a few fails, I finally was able to create the UV map for the smiley face that I then textured in GIMP. Complicated stuff!
So, yes, the options are almost endless, but that means that whoever builds these scenes needs to learn how to exercise those options. On my part, I very much enjoyed learning all of this. Unity3D is doing a lot of things “right”. Indeed, authoring tools will be the key to the massification of 3D; their conceptual models and scripting APIs need to be simple enough for lots of people to be able to use them (like SL/OpenSim), but still powerful enough to express everything one might want to express in 3D. I have my fingers crossed that we will start seeing open source projects doing the things that Unity3D does, especially making the scene creation be powerful and easy.