Character Customizer Tool
I developed this Character Customizer tool as a part of the Spatialized Performance And Ceremonial Event Simulations research at the University of Pennsylvania. This tool allows anthropologists and computer graphics engineers to customize indigenous models with various skin tones, levels of aging, hair style and color, clothing fabric, and props. It provides novel insight into the overall physical appearance of those who populated Pachacamac, an archaeological site in Peru. It also allows engineers to specify variations within the crowd when running ceremonial simulations.
Rigging and Animating
Before I developed the tool itself, I prepared the female model by rigging and animating it. Since I knew the models would be populating a crowd, I wanted to optimize the the animation by binding the clothing to the figure's skeleton rather than running a cloth simulation. I used skin weight painting to achieve smooth deformations.
In order to generalize the tool to accommodate many different types of models, such as male, female, and child, I created a blueprint class, BP_Model such that each new model will be a child of the BP_Model class. Each of the children classes are populated by different skeletal meshes and animation sequences.
To implement prop and hair style customization, I attached a skeletal mesh socket to the head and hand joints and bound the meshes to those sockets. The skeletal mesh sockets can be shared across the various models which will allow models to share the same hair styles and prop choices.
I allowed the user to customize the clothing fabric and the skin tone by using dynamic material instances. In Unreal, dynamic material instances can change the appearance of a material at runtime without requiring expensive recompilation. The instance is created within the construction script of the blueprint the mesh belongs to. The instance and its functions, such as Set Texture Parameter and Set Vector Parameter, can be referenced elsewhere.
Setting up the User Interface
I organized the feature choices by creating my own type, which held all of the necessary data to customize materials and props, and storing them in arrays. The buttons in the "Features" menu trigger the arrays for that feature to display on the screen through native Blueprint widget functions. I also created different types of buttons depending on whether a button changes a material color or switches a prop, since the two require very different functionality.