Matsu: Character Creations
In this post, I discuss the ideation, production, and implementation of the characters present in my game, Matsu. These characters include: Matsu, the foragers, and the nematodes. I created each character using different creative methods. I will discuss the description of each character, the production of each character, their mechanics and scripts, and their role inside the game.
To view the codes used on my characters, please visit my Github Matsu repository: https://github.com/kyliedcaraway/Matsu
Matsu is a Matsutake mushroom that is an integral component of this forest ecosystem. As the protagonist of Matsu, Matsu's goal is to heal dying trees from nematodes and ecological ruin, in order to keep this ecological niche intact. Matsu must avoid foragers and nematodes: foragers will take Matsu out of the forest for consumption, while nematodes will harm Matsu's ability to heal and live.
Although there are fungi systems that are interconnected throughout forests, I wanted to focus on ecological ruin, so I decided to make Matsu a movable mushroom that is individually responsible for healing damaged trees in this forest. This allowed Matsu to have a conflict with goals to strive towards, rather than an interconnected system that could automatically fix problems across time and space.
I also decided to create Matsu as a third-person controller that walks around. The third-person perspective allowed the player to see what they were playing: while a first-person perspective would put the player in the eyes of the mushroom, it can also create a feeling of smallness rather than a feeling of mushroom: I really wanted to highlight the mushroom as the protagonist. Therefore, I created a third person perspective. This promotes otherness and a feeling of smallness, while also creating boundaries around what this otherness entails exactly.
As a third person controller, I also took away some of the common movements associated with a third person controller, as well as a mushroom. Matsu cannot run, crouch, jump, or spore: while Matsutake mushrooms do spore, they are considered very difficult to grow. Likewise, I decided to balance the feeling of "otherness" with anthropocentrism: while I orginally desired to be devoid of anthropocentric themes, after reading Jane Bennett's Vibrant Matter, I realized that anthropocentric themes can, occasionally and in small doses, be conducive to teaching "otherness" and creating a comparison between humans and other beings. In this case, I believe that anthropocentric traits, such as human movement, can help create a connection and relation between humans and other species, signifying that they possess both similar and diverse traits that are both equally important in this larger ecosystem.
My first step in creating Matsu was partaking in research on the Matsutake mushroom: for this research, I focused primarily on Anna Tsing's book, "Mushroom at the End of the World: On the Possibility of Life in Capitalist Ruins" (2015). According to Tsing, Matsutake are extremely rare, aromatic mushrooms that are considered a delicacy. They are commonly found in forests in the Pacific Northwest, Northeast Asia, and northern Europe, alongside pine forests. These trees are left vulnerable from lack of nutrients, making them prime targets for invasive parasites, such as nematodes. Matsutake nurture these trees of human-disturbed forests by breaking down the nutrients in rocks and soil that seems infertile to trees. Tsing argues that matsutake symbolize "precarity". They signify “being vulnerable to others” and they place “unpredictable encounters at the center of things.”
My next step in creating Matsu was 3D model production. I knew that I wanted high detail and realism with Matsu, so I decided to bypass my own modeling skills and instead rely on photogrammetry: I therefore explored Quixel Megascans assets and downloaded some of their mushrooms. These photogrammetry assets are extremely high-poly (the mushroom I chose to use was __ polys) so I had to retopologize the piece by reducing polys, and adjusting the edges and verts in areas where polygon reduction went a little haywire.
After retopology, my next step for optimization included bringing the texture maps into photoshop. Here, I removed certain pieces that I felt were unnecessary in Unity: the roughness map, the cavity map, and the fuzz map. I also reduced the file size and painted over the texture maps, in order to achieve a less realistic style that would blend with fantasy and cartoon elements, as well as a change in the colour I was attempting to achieve.
After optimizing the mesh and textures, my next step was to create a rig for Matsu. I created a bipedal rig. This gives the illusion that Matsu is walking, although only with one stub. I also created a complex rig in the top portion of Matsu to insinuate emotions and health. I did not want to model a face for Matsu (as this felt too disparate from the realism I am trying to achieve) yet I did want to bring life to Matsu, so this felt like a nice compromise. After creating the rig (via bones in Maya) and binding the mesh skin and the rig, I created controllers. I learned from my prior courses in animation that it is always best practice to animate controllers, rather than the rig itself. Using controllers allows the animator to zero out transformations and rotations, and it is also easier to fix issues with the animation if the rig itself is not transformed.
Using the controllers to animate Matsu, I decided to create 3 states on one animation timeline at 30 FPS. I animated an idle state, a walking state, and a death state. After watching the third person survival shooter tutorial made by Unity, this seemed like the best method for creating states for my character. Using this method, I am able to select specific ranges of keyframes to define as different states, rather than importing three different animation timelines.
After the animation process was done, I imported my FBX model into Unity, but it did not appear to be animating. After multiple attempts, I reopened my maya file and baked the animations into the model. This means that each transformation is recorded into every single frame, rather than interpolations between frames. This solved my animation issue in Unity. I exported Matsu as an FBX that included baked animation, and he worked almost immediately. I then followed the steps in the Unity Survival Shooter Tutorial to create the various idle, run, and death states for Matsu.
I also explored various types of third person codes for Matsu's movements. My final code I used on Matsu can be found on the Github link provided above.
In Matsu, foragers are humans searching for matsutake mushrooms. As a high-price delicacy, finding Matustake mushrooms result in a profitable return. Many matsutake foragers are immigrants that rely on matsutake for wages to support their families. They too deal with precarity, as the demand for matsutake increases, while matsutake mushrooms remain rare.
In Matsu, the foragers are AI that are triggered if Matsu comes within a specific radius. I have 6 foragers in the game, each one in the vicinity of a damaged tree.
As I wanted to stay as close to environmental history as I could, I knew that humans would play an important role in Matsu. I could not create this ecosystem without showing the role humans play within it. At the same time, I wanted to steer clear of the possibility of the player adjusting their feeling of otherness to associate more with the human than the mushroom. Therefore, in order to focus on mushroom perspectives and feelings of otherness, yet still maintain important factual history within this story, I decided to include humans as AI others, and make them as simplified and lacking detail as possible, while still remaining within the realism aesthetic of the game.
In my ideation phase, I started with very rough concept art. As I wanted realism without detail, I decided to create silhouettes of foragers, with glowing eyes (these are reminiscent of Playdead's Limbo).
As I used this concept art for reference in Maya, my models did not denote the same type of realism as Matsu. They were too low poly and caricatures. After multiple attempts of modeling, I decided to instead use Adobe Fuse as a starting point to jump off from. This would allow me to focus time on the forager's materials and animations, rather than details that would not be seen within the game.
I began with the toon character in Adobe Fuse. Adobe Fuse is a great software that allows you to intuitively adjust different features of a character, as well as change their clothing and materials. My use of Adobe Fuse was focused primarily on the human's silhouette, as the finer details would not be seen through the silhouettes.
I also changed the materials as close as I could to a silhouette in Adobe Fuse: this did not work well, but was a good starting point for me to see the outline of the character. I later fixed the materials within Unity, where I created my own dark material for the skin, dark material for the hair, dark material for the clothing, and glowing material for the eyes. Once in Unity, I reattached these materials to the proper meshes.
After exporting the Adobe Fuse character, I noticed that Adobe also had a library of animations that could be implemented onto my Fuse character (called MIXAMO). While they are no longer developing this library, the animations can still be used on Adobe Fuse characters. These were a great time saver (although they don't always work perfectly: I have attempted these animations before with my own models, and they will not rig my models; they seem to only like Adobe Fuse models or the models they provide). After locating idle, walking, and fruit picking animations, I downloaded the Adobe Fuse forager model with the animations and brought it into Maya.
In Maya, I once again retopologized the character, and I both fixed and adjusted the animations. There were issues with the hand rigs, as well as the arms colliding through the model. After adjusting the animations and rigs, I was able to export this model and baked animations to a FBX to import into Unity. Unlike Matsu, I did not combine the animations onto one model in Maya: rather I brought in each animation and model separately, and followed the same tutorial as before (Unity Survival shooter tutorial) to make animation states on my AI. I also used this tutorial to create a Navigation Mesh for my foragers to know where they can walk. I had some issues creating the navmeshagent, but after tinkering with the dimensions, I was able to get the foragers to walk more successfully on the terrain ( rather than floating above or below it).
I then followed Brackey's AI Enemy RPG tutorial (https://www.youtube.com/watch?v=xppompv1DBg) to make an AI that would be triggered within a specific radius. I also attached a trigger to the bottom of my forager, so when they are close enough to Matsu, they play the "pick up" animation, along with the "game over" cut scene.
A nematode is a small worm. In Matsu, these nematodes are parasitic, as they destroy the already stressed forest by eating the trees and their fungal friends.
They surround decaying trees, and can damage Matsu's health if Matsu gets too close. I created the nematodes by modeling them from scratch in Maya. I started with a cylinder, and subdivided to pull the small pieces out to a rounded point. I also grabbed edge loops and scaled them down, to create the bulbous bits of the worm.
Next, I rigged the nematodes. At first I attempted to attach the joints to a wave modifier, but I had difficulty baking these animations into the mesh, so my final animation resulted in me manually moving each joint. I made the animation on a loop, so that the worms would always be moving and not snap back to the beginning position.
While my rig started from the middle of the mesh and worked out to the ends, if I had time to go back I would do this differently, so that the root joint would be at one end of the nematode. The root joint's location in the middle of the model caused me problems with the waypoint follow code, because the movement of the nematode was based on the root joint. This orientation cause the nematode to slide on its side between waypoints, rather than moving from one end of the worm. In order to fix this issue, I had to do a sloppy work around in Unity, where I made the Navmesh perpendicular to the nematode mesh.
In order to have the nematodes circle around specific trees, I created waypoints. I followed a section of Holistic 3D's course, Introduction to AI in Unity (on Udemy) to understand how to code these properly. Using spheres near the surface, I created a path that the nematodes follow. I also attached the look radius code I used on the foragers to several of my nematodes. I decreased the radius from the foragers, so that the nematodes will only attack if Matsu gets too close.
Lastly, I created a blue, emissive material for the nematodes, so they would glow around the trees and stand out. I started with an animal flesh texture from Quixel, but it was not creating the emission that I desired, so I used it as a base normal map yet changed the detail and color in photoshop, lastly adding a blue overlay and emission in Unity.
To view the waypoint follow code, please head to my Github link at the beginning of the blog post.
I hope this helps identify the various ways you can create different characters and creatures for your game! I learned so much through this process, and I am happy that I took a different path with each character, because I learned the pros and cons of each method, alongside various types of coding scenarios and solutions that I had never been introduced to before.
Moving forward, I would love to learn how to do my own photogrammetry, alongside exploring new methods for animating more abstract entities (such as fluids and procedural meshes) and how to translate these over to Unity.