Monday 17 September 2007

Make Human

In my searc for a new female character, I came across this -> MakeHuman.org

This is a 3D human which exists in C++. Will that then save me a task? Hmmm...

If it is flexible enough, it may just work. More research required. After lunch probably...

Emotions

During reading of a paper on semi-autonomous wolves (called AlphaWolf) I was inspired to think a little about the emotional aspect of the character. At present, my initial thoughts are to essentially have a chatbot with emotions sitting on top - the emotions being reactive to the situation.

Given that I have done some work with Prolog in my AI module last year, it seems to me that it would make sense to manage the emotional state of my character in this way. It might be easier to plug a Prolog "emotion engine" into a C++ program than program something nearly as effective in C++ itself.

The current emotional state at any moment will be given by the previous emotional state, response to certain words and perhaps response the person themselves. It seems that the best way to encode the emotions are in pairs, these are the pairs I've thought of so far (don't want too many as this will over complicate things):
  • happy/sad
  • angry/calm
  • love/hate
  • flirtatious/hostile

These emotions will also be related in certain ways. Again, the ones I have thought of so far are listed here:

  1. increased anger increases sadness (or decreases happiness)
  2. increased sadness doesn't affect anger
  3. increased happiness decreases anger
  4. the character can be calm (i.e. not angry) without being happy
  5. anger should wear off
  6. consistently happy character should lead to increased love
  7. consistently sad/angry character should lead to hate (anger should affect more than sadness)
  8. certain words should evoke love/hate response
  9. strong love/hate emotions should lead to increased emotional response elsewhere
  10. love above a certain level should activate flirtatiousness (?)
  11. hate above a certain level should activate hostility

With regards to response to words, the character should respond not only to words spoken to it, but to the words that the chatbot generate. I think at present that the words coming into the character should have twice the strength of words being spoken. I think it is also important that the character includes some learning ability, whereby it can add words to the love/hate lists.

I mentioned about response to the user. It would seem a good idea that the character remembers a user, even if all it does is remember the emotional state it was in when the user last finished. That way, it will appear to have emotional memory and it's response to a user will be affected by the way the user treats it.

Two last thoughts:
The "speech" of the character should also be affected by the emotional response. An angry person would not answer a question the same way as a flirtatious one.
Last but not least, I've just thought that I've been thinking about speech and emotions, but the character will exist in 3D, it will also need to have gestures! Yet another thing to think about!

We have a name!

I've been thinking, since I first started looking for characters to use in Maya, that this character is going to need a name. I couldn't really think of anything interesting, so I spoke with my fiancée who instantly insisted that the character should be a woman and that she should be called Imogen. Who am I to argue with that?

However, this does give me one slight problem. Generi, though not entirely sexually defined (because he is a blue alien) does have a slightly more masculine look to him (thus I've been calling it a "him"). So I'm now going to have to search out another character which will work within version 6 of Maya 3D.

Thursday 13 September 2007

Animating Generi

Well, I've spent a bit of the afternoon playing around on Maya 3D 6 and Generi looks like he may be just right. It's quite amazing what he is capable of doing, all possible movement (including some that humans can't do) and quite a range of facial expression - more importantly he comes complete with the ability to lip sync thanks to a range of lip movements. Just perfect!

All that remains now is trying to make him work. You see, the problem that I have discovered is that he's going to be difficult to control. From within Maya itself it's fairly easy to modify his pose an element at a time, with the intention of creating a frame by frame animation. However, I want my character to be live and autonomous. I am somehow going to have to embed the character I have into a program, and control him from that. Keeping him within the Maya "editing" space would just look too cluttered.

I may have to wait until I can speak to someone better at 3D animation before I do that. It just so happens that I have a module this coming term on Virtual Reality - hopefully this will lead to me to an expert in this field. It looks like my research will have to move onto the AI of the character.

Animation worries relieved!

The original blurb mentioned using a tool called Maya 3D to create the character itself. The only problem is that I have never done any 3D animation, and to create an entire person and then animate and control it was beginning to look like a daunting task.

I have now come across some pre-made characters on the internet, which will remove the need to create it out of my list of tasks - this therefore gives me more time to explore the "brains" behind the autonomous character and also the interface to control the animation!

It's worth mentioning that the project supervisor (one Simant Prakoonwit) made it clear to me that the animation wasn't the real purpose of the project and that any quality of animation would be acceptable. Therefore it seems unlikely that the use of a premade character will cause any problems.

Here are just a few of the sites I have found. It seems quite likely at first look that I may use a character called Generi (from the first site listed) as this is also released for non-profit use.

My Aim

In addition to the overall aim given in the project blurb (see my previous post) I felt that in the run up to starting my project it was important for me to be a little more specific and think about where I wanted the project to go, indeed I need to know my purpose so that I don't get side-tracked on the way.

So this is the aim that I came up with, this is what I personally want to investigate with my project:

Aim: To investigate and explore whether emotion and low level communication (i.e. body language) can help communication between computers and humans (particularly in that direction)

This aim may still be edited slightly in the next few weeks or months, but it basically shows where I want to go.

Third Year Project

Hi. Welcome to this blog.

The aim of this blog is for me to keep an easy record of the progress on my third year project. I'm a student at the University of Reading, studying for a batchelors degree in Artificial Intelligence and Cybernetics. For the third year, rather than a dissertation we are required to do a third year project.

The aim of this blog is to record my progress at various stages (which may be useful later when doing reports etc.) and also to give me a way to share some of what I find. Also, I guess it will give me a chance to think aloud about my project.

I suppose I should mention a little of the project too. The project, titled simply "Virtual Character" is a potentially rather large project through which I should choose my own path. The general idea is to create a virtual humanoid character (or "avatar") with the capacity to communicate with more than words alone.

This is the given blurb:
The aim of the project is to construct an intelligent 3D virtual character that has intelligent behaviour. The avatar should demonstrate personality, emotions and goals.... The characters can be used in many applications, e.g. computer games, films [or] communication interfaces.