Here we resume our efforts to bring our NPCs to life, beginning with bits and pieces of text from the IF version of Vespers and ending with a modeled, animated, and voice-acted 3D character. Last time I discussed the development of Constantin, the large hulking monk with a short temper. This time I relate the development of Lucca, who had some interesting and unique challenges of his own.
Here we resume our efforts to bring our NPCs to life, beginning with bits and pieces of text from the IF version of Vespers and ending with a modeled, animated, and voice-acted 3D character. Last time I discussed the development of Constantin, the large hulking monk with a short temper. This time I relate the development of Lucca, who had some interesting and unique challenges of his own.
Lucca was going to be a tough character to convincingly recreate. He's the youngest member of the monastery, a teenager who recently joined the order. He's very attached to Matteo, one of the monastery's father figures, and is generally an emotional character during the course of the game. Again, we didn't have a lot of text to go on initially aside from a short description:
The youngest of those who remain, Lucca joined the monastery only a few short months ago. The son of a count, he had never seen death before the arrival of the plague. It haunts him.
After some discussion between myself and Jason Devlin (the author), we decided we wanted Lucca to have pale skin (maybe slightly paler than the rest), blue eyes, and delicate facial features; probably quite frail overall with a slight build and thin face. We presented these ideas to N.R. Bharathae, our lead artist, who came up with his concept for Lucca.
Figure 1. Lucca (with Matteo) concept sketch.
This looked like a perfect starting point. Using this, N.R. designed Lucca's 3D model and then applied some of his slick textures. As with the others, we were going for a more realistic appearance for our characters. N.R. did a great job with him.
Figure 2. Lucca textures.
Figure 3. The Lucca model.
During this time, we continued in our task of finding and recording a voice actor for the part. Matching a voice for a young man would not be as difficult as for some other parts, but the real challenge was finding someone who could play the part convincingly, given that Lucca expresses a great deal of tearful emotion during the game. Fortunately, we were able to find Christopher LeCluyse.
Christopher is a veteran of the stage, both acting and singing. Not only that, he also has expertise in medieval literature, and was able to help out with some little-known facts and inconsistencies in our story. For instance, Christopher pointed out to us that, during the time period of our game (ca. 1300-1400), pews did not yet exist in churches -- only choir stalls. So we were able to make that adjustment in our storyline and setting.
Figure 4. Christopher and Lucca.
"Christopher LeCluyse (Lucca) brings to Vespers twenty years of professional vocal training and performance and a doctorate in medieval language and literature. He sings regularly with a variety of choral and early music groups and has appeared on recordings with Conspirare. Chris is also a professor of English and writing center director at Westminster College in Salt Lake City." -- C.L.
Finally, there's the work of our animators. Lucca presented a different kind of challenge than the previous characters, because we wanted to try something a little more complex with the way he idles. At the beginning of the game, Lucca is first seen running into Matteo's room in the dormitory, where he then scrabbles frantically at the ground, trying to unearth one of the stones in the floor:
Matteo's Room
This room is small: the same as all the others. A bed is pushed up against one wall, opposite the door to the north.
Lucca scrabbles frantically at the ground, his blood staining the stones.
>EXAMINE GROUND
Lucca scrabbles at the stone, trying desperately to unearth it from all sides.
>TALK TO LUCCA
"Why do you dig, Lucca?" you ask.
"Matteo is hiding something. I just know it's under here."
>AGAIN
"Why do you think that?" The blood pours from his fingers.
"I just know," he sobs. "He scrapes around here at night."
>AGAIN
"Leave me alone," he blubbers through the tear-laden mucus that streams from his nose.
>ASK LUCCA ABOUT MATTEO
"He knows something, but he won't tell me," he sobs more heavily for a moment. "He tells me nothing anymore."
My thought was to have Lucca idle using a cyclic sequence, showing him repeatedly scraping at the stone in the floor. But playing this sequence over and over again, without any alteration, would quickly get old and not look very professional. My thought was to try and break the monotony by including a few additional idle sequences played at random points during the cyclic sequence -- one trying to pull up the stone, one showing him rubbing his bloody hands, and another showing him wiping the tears from his eyes. That means four idle sequences -- one cyclic and three non-cyclic. All need to be designed using the root position as a launching point for any speech animations called from player interaction:
Figure 5. Modifications to the usual animation flow sequence to accomodate additional idle sequences.
What the hell does all that mean? Basically, only that each sequence -- whether it's an idle sequence or speech sequence -- has to start and finish in the root position to maintain consistency. The thing we need to keep in mind is that speech can be triggered during the cyclic idle sequence or during one of the other idle sequences and to account for that. Once a speech animation is finished, we always return to the cyclic idle sequence and start again. It can look a little robotic at times, but overall I think it works well.
Here is the text portion of the game given above, as we developed it in 3D with animation and sound. This is from an older video on Google.
Figure 6. Lucca in action.
So that's how we went through the process of developing Lucca from a text character in an interactive fiction game into a 3D animated and speaking NPC model -- a nice combination of writing, modeling, texturing, animating, and voice work. Next time I'll introduce Ignatius, one of the more mysterious and suspicious characters in the game.
One of the things I noticed when I posted the request for beta testers is that a number of interested people didn't quite have the system specs I believed were needed to run the game smoothly – namely, a dedicated graphics card with a decent amount of video RAM. Systems with integrated graphics chips, at least in my mind, have not traditionally handled fairly intensive 3D games very well, hence the decision to exclude those systems, at least at the start.
One of the things I noticed when I posted the request for beta testers is that a number of interested people didn't quite have the system specs I believed were needed to run the game smoothly – namely, a dedicated graphics card with a decent amount of video RAM. Systems with integrated graphics chips, at least in my mind, have not traditionally handled fairly intensive 3D games very well, hence the decision to exclude those systems, at least at the start.
That, and I didn't have access to a decent system with an integrated graphics chip to test the game. That has now changed.
I've been wanting to upgrade my little server box for a while now, and with Apple's recent tax-free sales event, I decided to make the leap and bought myself a tax-free Mac Mini. It's a bottom-of-the-line model, although the specs have reached the point where they begin to put my old G5 desktop to shame: 2.26GHz Intel Core 2 Duo with an NVIDIA GeForce 9400M graphics chip. It's a sweet little machine, with more than enough power for my server needs. Plus, it's just an amazing piece of technologic design. It's incredibly compact, and it is absolutely, positively silent. No fan noise, no hard drive clicking. I can hardly believe the thing is powered on. I love the little bugger.
But surely there's no way it could handle the hulking behemoth that is Vespers.
Naturally, this is the first thing I wanted to try once I got the sucker booted up and organized. Doubtless, once the opening sequence started, the frame rate would freeze up and I'd struggle just to quit the application.
Quite the contrary, actually. For the most part, the game seemed to run at least as smoothly – if not better – than my old desktop with the fancy schmancy dedicated ATI graphics card. Frame rates in many cases exceeded what I was getting on the older machine.
A few caveats: I was running the game at a very small screen resolution, and it did struggle off and on during the early stages of play. I'm not sure if that was related to loading the massive pile of textures into memory (which, on the Mini, the chip shares with the main memory) or just from ongoing background processes, but after a couple of minutes of play all the lag disappeared and it ran about as smoothly as I've seen it anywhere.
I'll have to do some retesting and profiling to see what's going on, but the results are pretty encouraging. Apparently, integrated graphics chips have come a long way since I last checked.
So if you're one of those who is still interested in testing, and you have a (relatively recent) system that uses an integrated graphics chip, let me know and we'll see how things go.
We continue on with our efforts to bring our NPCs to life, beginning with bits and pieces of text from the IF version of Vespers and ending with a modeled, animated, and voice-acted 3D character. Last time I discussed the development of Matteo, the oldest monk at the monastery; the second character we tackled was Constantin, who had some interesting and unique challenges of his own.
We continue on with our efforts to bring our NPCs to life, beginning with bits and pieces of text from the IF version of Vespers and ending with a modeled, animated, and voice-acted 3D character. Last time I discussed the development of Matteo, the oldest monk at the monastery; the second character we tackled was Constantin, who had some interesting and unique challenges of his own.
We started out with a very general picture of Constantin; he's middle-aged, a handyman around the monastery (he was a former blacksmith), and a notably large man with a short temper. Again, we didn't have a lot of text to go on initially aside from a short description (which was actually removed from the game prior to the final release):
An enormous, hulking man, Constantin is taking the lack of food worse than the rest of the brothers. The former blacksmith has taken to religious life quite well and has assumed the responsibilities of almoner and cellarer since those two brothers died.
After some discussion between myself and Jason Devlin (the author), we decided we wanted Constantin to look extremely large, but not quite like a giant; not fat, but certainly heavy and imposing. We presented these ideas to N.R. Bharathae, our lead artist, who came up with his concept for Matteo.
Constantin concept art.
Seemed just right to me. With this as his starting point, N.R. designed Constantin's 3D model and then applied some slick textures. As before, we were going for a more realistic appearance for our characters, and N.R. came through for us again.
Constantin textures.
Constantin starts out the game sitting on a chair in his room, skinning a hare with his knife. So to get him ready for the game, we had to outfit him with the appropriate objects.
The Constantin model.
While N.R. was working on this, we also had the task of finding and recording a voice actor for the part. Trying to match a voice to a character like Constantin was not easy; we needed an actor who could really fit the part of a large, short-tempered man with an appropriately deep voice. The man we found to play the part was Jason Nacey.
Jason didn't have any real experience with voice acting prior to this, but he had been exposed to it through the work of his father. It was actually his father who heard about our voice auditions, and who passed the information along to Jason. Although it seemed a little awkward at first, Jason ended up doing a great job, and I think his voice fits the part perfectly. Here's a shot of Jason alongside Constantin, followed by a short bio he wrote.
Jason and Constantin.
"I have always been fascinated by a voice actors' ability to create a story by the sound, inflection, and timber of their voice. I often spend time driving my wife and 5 kids around in our minivan. We ordered our latest van with a DVD player for the kids. Without the benefit of video on long drives, I am able to really tune into the actors voices, and in this way I really became a student of the professionals like Nathan Lane (Lion King), Jason Lee (The Incredibles) and John Ratzenberger (what hasn't he done?!) to name a few. I have thought for a long time that to be able to take on that challenge would be fun and exciting. It was from my father that I first heard about the auditions for the voice parts for Vespers. Having had no previous experience with any formal voice acting, I went to the audition with no thought of actually landing a part, but I was very excited to just try and maybe, afterwards, be able to get constructive criticism on how I could improve my abilities. I was extremely nervous for the audition, and almost called and canceled so that I would perhaps save myself serious embarrassment. I finally resolved that everyone there would be strangers, and if I was going to stink up the place - dammit - I was going to it LOUDLY! I was elated to find out that I was chosen for the part of Constantin. And I look forward to many more opportunities to have this much fun again." -- Jason Nacey
Finally, there's the work of our animators. We were still familiarizing ourselves with Torque's animation system while working on Constantin, so it took us some time to work out the kinks to produce what we wanted. Unlike Matteo, we wanted Constantin to play a looping idle animation; as mentioned above, when first encountered, Constantin is sitting in his room skinning a hare with his knife. So we needed a system where we could play this looping animation continuously, while also offering us the ability to choose one of two things for his speech animations: (a) interrupt the idle sequence to play a full body sequence in response, or (b) continue the looping idle sequence while playing a mouth/head animation on top of it.
To do this, we designed it so that some speech animations are full body animations (played with setActionThread), while others are blend animations (played with playThread). Then we set up our Sequence Manager to recognize which was which, and when it needed to to stop the idle animation before playing a speech animation.
As an example, here is a short portion taken from the text version of Vespers, with the player's commands in bold caps:
Constantin's Room
Constantin is one of the few brothers with anything in his room besides a bed. A few tools lay next to the door in the northwest; remnants of his life as a blacksmith. A smell lingers here: a sour smell.
Brother Constantin sits on the bed, a young hare dangling from his hand. His knife moves swiftly.
>TALK TO CONSTANTIN
"What do you have there, Constantin?" you ask, leaning forward.
"Something to eat," he grunts.
>AGAIN
"Is there no food left in the cellar?" He flinches slightly.
"No. There is nothing in the cellar."
>AGAIN
"Well, be sure to tell us when you are finished. We are all hungry."
"I will."
>ASK CONSTANTIN ABOUT CELLAR
"What?" he startles. "I'll get around to taking the lock off. There's no food left down there
anyway." His eyes darken as they meet yours. "There's no reason to go down there anymore."
And here is the same portion of the game, as we developed it in 3D with animation and sound:
Hopefully that gives you all some idea how we went through the process of developing Constantin from a character in an interactive fiction game into a 3D animated and speaking NPC model. The final result, I think, is a nice combination of writing, modeling, texturing, animating, and voice work, the combined work of a group of really dedicated and talented people. Next time I'll introduce Lucca, the youngest member of the monastery and a character with challenges of his own.
Vespers is an independent game currently under development by Orange River Studio. It is an adaptation of Jason Devlin's award-winning interactive fiction (IF) work of the same name. It is an experiment to discover what kind of horribly disfigured offspring might result from the mating of an IF engine with a 3D first-person graphics engine. For more details about the game, click here.