Stage 3D First Person Shooter Development Notes: Part 2
After reading Part 1 of this post, many of you may still have unanswered questions about our development process. While some others may say, "Hey jerk, you think I'm some kinda genius? You think I know what a Flash is? I just wanna get wasted with a buncha my friends and make stuff hurt when I shoot it." If the latter sentiment describes you, then please click here and enjoy.
Those of you who are still reading, let's get started.
Following up the first part of our "3D First Person Shooter Development Notes" series, this section covers modeling and animation rigging in 3DS Max, as well as exporting for Flash and some FX. Here you'll discover how exactly (or approximately) we were able to bring Ben Franklin and his undead adversaries to life for our Stage3D R&D project, Dead Coats.
The Right 3D Package
When we first conceived the notion of making a Stage3D first person shooter, we intended on utilizing familiar software packages and creation tools. This, sadly, was not meant to be. After fumbling with Cinema 4D, Maya, and SoftImage, not to mention a plethora of file formats (I'll mention them here: COLLADA, FBX, MD2/5 etc.) we eventually landed on 3D Studio Max as our software of choice. This decision was made primarily due to the ease of migration offered by the Flare3D exporter plug-in for 3D Studio Max.
Creation of the 3D models was a fairly straight forward process. For Dead Coats, we knew we were likely to have gobs of the undead onscreen at any given time, so keeping a low poly count for each object was in our best interest. Even with the GPU capabilities of Flash Player 11 and Stage 3D, some sacrifices in Dead Coat quantities had to be made for the sake of better performance.
Rigging Do's and Do Not's
Flare3D does a great job at understanding pretty much any rigging method you throw at it, but it's not without its exceptions. For the Zombies, we utilized 3D Studio’s easy to use Biped rigging system. There are plenty of great 3ds Biped tutorials on the internet that can help you get up to speed, I found this resource especially helpful.
For Mr. Franklin's arm and gun rig, we used a more customized solution consisting of attachment constraints and spline controllers to give us the necessary manipulation for walk and shoot animations. A few obstacles had to be overcome; for what ever reason, we were unable to properly utilize more sophisticated "LookAt Constraint" when exporting to Flare3D. Animation would disappear when brought into flash; this made everyone sad. It's best to keep the rig as simple and straight forward as possible. Link and attachment constraints offered the best solutions and minimized the heartache of re-rigging/reanimating assets; this made everyone less sad.
Animating the Models
Each Zombie has a set of 3-4 animated loops for any given action (walk, hit, attack, ect.) This required that the Zombie's animation started and ended on the same pose in order to avoid jerkiness when looping or transitioning to a different animation. With that in mind, defining a "default pose" for the undead was the first step in the creation of the animated moves. Every animation was made within a separate .3ds file, which made it extremely time consuming if a change to the "default pose" had to be made down the road.
Exporting the Models
Once all of our character animation was solid, it was time to combine everything into one master sequence for Flash. To export the animated models on a single timeline it is necessary to utilize 3D Studio Max's Motion Mixer. The first step was to export each animated move as a .bip file. If you're planning on trying this yourself it's probably a good idea to make a separate folder for the Biped animation as you would be swimming in .3ds/.bip files by this point. Next, I opened a non-animated version of the character rig and brought up the Motion Mixer window. Finally, I imported all the biped animation that I previously exported and arranged it in the timeline. If/when you do this you'll want to make note of the exact frame number for each animation; this will make the programmers life much easier and will bring a shimmer of hope to their otherwise dismal and depressing existence.
Once our character animation was in a single timeline, we were ready to export Using Flare3D's exporter. As a final step you would want to make sure "export animation" and "compress" are checked, and you're good to go. Ta dah!
Lightning and Blood-splatter or: How to Create the improbable
Because Flare3D (or at least the version we were using) doesn't natively support billboard sprites, we had to create a solution for the various effects needed. The crazy-awesome muzzle flashes and blood splatters were animated using Adobe After Effects and exported as PNG image sequences (with transparency).
In order for our method to work, the effects animation needed to stay fairly short, between 1-16 frames. Each frame had to be resized to 256 by 256 pixels and laid out on 4x4 grid in Photoshop. This brought the final PNG (with transparency) dimension to 1024 by 1024 pixels. Then we made custom code to process the sprite sheet and construct an animated material out of it. Then we attached the material to a dynamically created sprite billboard that we attached to a zombie when he was hit.
You've reached the end of this Blog Post and consequently the end of my 3D Studio Max knowledge. If you don't believe me, please feel free to leave a comment in the form of a question and I'll do my very best to help you out. With such a short and demanding timeline (3 weeks) my brain was able to learn just enough to keep my job and help produce the first of its kind, Flash 11 FPS Dead Coats.
Stay tuned for Part 3.