Darkwind Media Blog

Repository of thoughts and code from the Darkwind team

Archive for May, 2009

Arthas (of Warcraft fame) getting down in Luster

Arthas

We recently finished up our skeletal animation tech demo, and I wanted to go into some of the details behind it.  One of the first things you’ll probably notice is that it’s not simply showing off the skeletal animation capabilities of Luster.  We ended up also using normal maps, scrolling UV texture animation, several shadow techniques and Flash/Luster communication.   And all of this runs in a web browser (this particular demo requires Shader Model 3).

The main questions we get are “How did you get the Arthas model?” and “How did you animate him?”  To answer the first question, we’ll go back to the beginning of the project.   We had been thinking about possible Luster demos for a while.  We wanted something that would not only show off the features of Luster, but get people talking about it.  Around this time everyone in the office had renewed their World of Warcraft accounts for a bit so we could play during our spare time.  Matt came up with the idea to use World of Warcraft models in Luster somehow.  I immediately opened up the WoW Model Viewer to see if there were any model export options.

Not only were we able to export models (with textures and skeletons intact), but the WoW Model Viewer could automatically grab a character’s gear from the Armory and dress the model up appropriately.  One of our initial tests was the get a character from the Armory and try to get it into Luster.  To do this we exported from the WoW Model Viewer in the Milkshape3D format.  This export also provided us with the textures for the model we exported.  Once in Milkshape we exported the model to FBX, which allowed us to get the model into Maya.  Getting the model into Maya was important for two reasons: 1) We could go from Maya to the Ogre3D Mesh format which is supported by Luster and 2) I actually know how to use Maya.

Once we figured out the pipeline, we scoured the WoW Model Viewer for more characters and models to import.  The sample application in Luster grew from one random character to having several characters from the Armory, Arthas, Illidan, a huge protodrake, Sylvanas and a boss from Naxxramas.  We added some stationary and dynamic lights and per-pixel lighting (with normal maps), which made the models look great, but something was definitely missing.  The models were too static.  They had no sense of life to them, no purpose.  It was at this point that we tried to extract the animation data from the WoW Model Viewer, but it doesn’t support animation exporting.  We could export different poses, like a single frame of an animation, but not the whole animation.  We did find some tools to extract the .anim files from World of Warcraft’s .MPQ content files, but these were not useful to us in their raw form.

Pretty disheartened by the fact that we couldn’t extract any animation data, I went into Maya to play around with the models we had.  After realizing that the models already had skeletons and the vertex/joint bindings were intact, I started animating an arm here and a head there.  It dawned on me that I could probably create my own animation on one of the characters and incorporate that into the application, maybe as an Easter egg of some sort.  I decided to use Arthas for a few reasons.  First, he is from the latest expansion and therefore has much more detail than many of the older models.  Second, he has some animated textures (his eyes and sword for instance) which look great.  Third, he just looks badass.  After the Arthas animation was complete, we decided to focus soley on that particular model since the animation process worked so well.

The controls for the animation were created in Adobe Flash.  The resulting .SWF file was imported into Luster and incorporated into the project.  The Flash movie and Luster communicate back and forth.  When you click on the play button, Flash tells Luster to start the animation.  Luster then tells Flash to update the scrollbar as the animation plays.

The finishing touches were to add a gradient background and some shadows.  I did the main ground shadows using a regular shadow mapping technique.  The self-shadow implementation was done by Brian and used Variance Shadow Maps (VSMs) to produce soft shadows.  The normal maps on the model were generated from the original textures using the NVIDIA Normal Map Filter Photoshop plugin.

-Chris

1 comment

Virtual Theater Success

On May 2nd, during the ImagineRIT innovation festival, the vaudeville show for virtual theater was performed. We had 3 characters who could be dynamically assigned to two different real-time motion capture systems. The system then synchronized the production with >20 clients across the campus. The performance itself was controlled from the 3rd floor of the computing college in the Computer Science graphics lab. I acted as the “stage manager” with a special client that had access to activate staging cues for lighting, set changes, sound effects, etc. The director of the production was also in the graphics lab giving direction to the actors in the motion capture systems as well as myself for timing.

We are still compiling the different video feeds we had set up from that day. There was a video recorded from one of the labs that was linked into the performance. It was recorded by Andrew Brown, who wrote the plugin which output real-time motion capture data from AutoDesk’s MotionBuilder. Here’s the video from YouTube:

No comments

New Luster Version Released

A new version of Luster (0.18.8) has been released. This new version has a few minor enhancements and a couple critical bug fixes for the nature plugin (terrain). This is the version that will run the Soarcraft demo. This player version is still part of our guarded Beta. If you’d like to see the power of Luster you can either email us, or jump over to the Beta sign-up page. After you sign up, we’ll be getting back to you with a link to download Luster and a few demos to play around with.

We’ve been continuing our work on our major contracts, forming new relationships and pushing Luster for our final release. There are a lot of useful enhancements coming with version 0.19. Our Mac version has been coming along nicely as well. At the same time we haven’t been neglecting the need for good demos to show you the power of Luster. Here’s a sneak peak of a demo showing the ease of importing assets, controlling animations, advanced lighting, and our revolutionary integration with Flash. We were able to take one of the many open source tools available and extract a World of Warcraft character model to create a custom animation. The full thing will be posted in a few days, so check back soon.

Arthas Dances

No comments

Luster at Imagine RIT Innovation + Creativity Festival

Another recent project done in Luster was World of Soarcraft. No, I did not come up with the name. This came out of a partnership between Vuzix and the Rochester Institute of Technology. Our task was to come up with a demo incorporating Vuzix head-mounted displays and 3D game technology before the Imagine RIT Innovation + Creativity Festival happening on May 2nd. We had about one week. Naturally, I turned to Luster as our 3D platform. I wrote a plugin for interfacing with the Vuzix display, connected a Wii remote for control and designed a simple 3D landscape to fly around in.

Soarcraft 3D Demo 05
Soarcraft 3D Demo 02
Soarcraft 3D Demo 03
Soarcraft 3D Demo 04
Soarcraft 3D Demo 05

The system would be output both to a standard monitor and to the Vuzix display. This gave a more immersive feel to the demo. The best thing about the Vuzix displays are their built-in head tracking. Since they can track all 3 degrees of rotation they can be used to control what part of the 3D scene the user can see. As the user looks around, the scene changes to reflect the direction they are looking in the real world.

Vuzix VR920 Display

We aren’t yet sure if the project will continue into the summer. There is certainly a lot more than can be done with the system. Currently there is no gameplay. That would be an interesting component to add to the demo. Also, the flight is not terribly accurate (the physics of it) and so it would also be nice to make the flight mechanics a bit more realistic. As always, there will be updates when we know more.

No comments