I’ve just put up the final version of my position paper for the AAAI Symposium on Intelligent Narrative Technologies. It argues that popular narratives deal at least as much with the ways characters depart from ideal rationality as it deals with actual rational behavior, that we don’t have computational theories of those modes of behavior, and that we could learn a lot by trying to model them.
Archive for the 'virtual characters' Category
I was working yesterday on adding fighting behavior to my procedural character animation. In particular, I wanted the kids to be able to shove one another around. But due to a bug they kept approaching one another rather than stopping at “shoving distance.” So they grapple in what looks like a particularly comical make-out session. Possibly useful, but best saved for the parent characters…
Robot hackers have long realized that human observers tend to over-attribute intelligence, or at least intentionality, to robots, at least provided that they’re moving. (Dave) Miller’s law states that the perceived intelligence of a robot is directly proportional to its velocity (Dave didn’t name this Miller’s law, but he said it once at a workshop and I’m fond of quoting it).
The image above is a screenshot of what appears to be two child characters playing with one another while being watched by an adult. However, in actuality, what I’ve been implementing is attachment behavior, which is the response of children to stress by seeking out their caregiver (more on this another day). To implement that, I need to have something to stress the kids out. The right way to do it is to implement a real social engagement system with wariness and coy behaviors, play, turn-taking, etc. However, the first step in that is simply to make a second child and then hack the children’s appraisal systems to assign negative valence to strangers (i.e. to each other). All that does is make the kids watch one another and keep their distance from one another. For example, one won’t approach the ball if the other is too close to it. There’s no real sociality going on there.
The interesting thing is that it’s enough to make them look like they’re playing. They both run to the ball, but then when one gets to close to it, the other backs off. The first one will kick it until it happens to kick it toward the other one (which is pretty frequent since I haven’t implemented aiming). At that point, the first one stays away from the ball and the second one plays with it. This continues until they get far enough from the parent to engage the attachment system, at which point the attached child runs to the parent and hugs him/her, then runs back to play.
The point of this isn’t that this is a good simulation of anything, just that surprisingly simple behavior can appear engaging and intelligent, provided that whatever behavior you do have is relatively fluent.
One of the annoying problems with wanting to do AI for virtual characters is that those characters can’t really do much without bodies. But giving them bodies means wading into all that bothersome graphics and physics. If you’ve ever read a paper on hardcore physics simulation, it’s pretty daunting, especially when you think about trying to run it at frame rate.
Probably the single most useful paper I’ve read this summer has been Thomas Jakobsen’s 2001 GDC paper on Advanced Character Physics in the Hitman engine. Jakobsen talks about how to implement believable ragdoll physics by basically ignoring angular momentum and modeling rigid and articulated objects as particles (with only linear momentum) connected by rigid constraints. By using a combination of techniques – Verlet integration and constraint satisfaction by projection – you can make a system that’s easy to implement, runs quite fast, and looks pretty good. I was able to implement a basic engine in about 800 lines of C# code and an acceptable procedural animation system in another 600 lines or so (I’m particularly proud of the hugging behavior shown above). It took me about a week of hacking, which is pretty good given that it was only my third 3D graphics program. I highly recommend Jakobsen’s paper.