About
This project was created for the course Multimedia and Computer Animation in a team of two. The final report in Czech is available here. Our task was to create an animated face of a female character that spoke based on the user input. The spoken language was in our case the Czech language. Due to differences in the Czech and English language, the face looks unnatural when using the English language as you can see in the video above. I was tasked with creating the model, its rig and the final application and logic in Unreal Engine while my classmate was responsible for the animations, or, to be more precise, the poses.
The model was created from scratch in Blender along with its rig and the textures. The textures were created using the stencil feature of Blender by painting on the 3D model itself. Due to time constraints no bump/normal and specular maps were created.
The Rig
The rig consists of 63 bones. The mouth is especially dense since our main goal were speech animations. It was also important to rig the tongue since it is crucial in creating realistic visemes (poses that represent a phoneme - distinct groups of consonants and vowels). The weights of individual bones were drawn manually using a tablet and a lot of testing and posing. The whole armature is symmetric. There were also some constraints applied for easier use in Blender, especially for the tongue and jaw. Unfortunately, these constraints cannot be imported to Unreal Engine so they served their purpose during the creation of poses.
The Application
The application was created in Unreal Engine. It uses the built-in animation tools, especially the animation blueprint and its state machines. In another words, the transitions between visemes (poses) are coordinated by the state machine.
The user can input any text on the go and the face will respond to it or he/she can prepare texts by writing them in a text file named speeches.txt in the main project directory with a simple syntax (\ for next speech). The speeches are then parsed and read by the character when desired. Randomized speed of reading individual characters then adds to the realistic appearance of the animations by making the character look less robotic and the transitions less forced.
There are many options to tweak. The user can change the general speed of the speech or he/she can tweak individual delays when reading spaces, commas, etc..