top of page
Writer's pictureKeana Almario

The Compromise between Vision and Optimization

The Unity Profiler, showing that we were running at 15 frames per second with 12 Booyos. Not good!

Recently, we found that the blobs – now named Booyos – I created in Unity were not as optimized as we had hoped. For this part of development, I focused on restructuring the Booyo, trying to remove as much excess detail as I could while still making them look like the blobby creatures we imagined.

 

The structure before

This is how the Booyo’s structure looked like, when they made our game run at 15 FPS.

Booyos are made of several small spheres, most of them blended together using the Raymarching Toolkit we’re using for this project.

Using this method, each Booyo would have 6 Raymarched objects. This is a huge problem, because the developers of the Raymarching Toolkit for Unity recommend having less than 10 Raymarched objects in a scene. This is how our 12 Booyos hit the game at 15 fps. I had to find a way to lessen the number of Raymarched objects, while still keeping these Booyos expressive and cute.

 

Maximizing expressiveness with minimal joints


The structure of Booyos is minimal. They consisted of:

  1. a body, which is just a sphere,

  2. two cheeks, which are smaller spheres that blend into the body,

  3. a ‘tail’, which is a smaller sphere that blend into the body and lags behind the it when the Booyo moves,

  4. two arms, which are small, elongated spheroids (with no elbows), that do NOT blend with the body,

  5. a face, which is a mesh we model separately in Maya. Booyos’ expressions will only switch between each other (i.e. there will be no tweening).

Because of these limitations, I was worried that I would not be able to make them look as expressive and adorable as we wanted. I decided to do quick animation tests to see how expressive these Booyos can be. While testing out animations, I had some rules set for myself:

  1. The Booyo could not change its position using Unity Animations. because we were handling movement using Unity Physics, I restricted myself from doing additional movement using Unity Animations. If I did, both movement methods would add up to each other and make the Booyo’s movement look unnatural and uneven.

  2. The Booyo needed to have an exaggerated squash and stretch. Even though the Booyo was technically just a simple sphere, I wanted people to think it was a jelly-like creature. Therefore I needed to show the player that Booyos were very malleable and soft. This also works well with the way Leap Motion handles the grabbing of objects: the Leap Motion hands go *through* objects, and there’s nothing really stopping it from phasing through them. With this and the exaggerated squash-and-stretch Booyo animations, we can reinforce the feeling of the Booyo’s soft and squishy features.

  3. The Booyo had to have a relatively strong(?) follow-through and a slow recovery. Booyos are floating creatures. I wanted to make sure that their actions made it feel like they were light and floaty creatures, and that it would take a little bit of time for them to stop and recover from a big animation they just did.

Using these rules and limitations I set for myself, I made a test animation of a happy Booyo.


So far, the test was a success. Now I had to optimize the structure a little more, then test to see if the animation was still successful.

 

Compromise & optimize


As we showed before, the structure comprised of a body, 2 cheeks, 2 arms, a tail, and a face:

This is how the Booyo’s structure looked like, when they made our game run at 15 FPS.

I decided to make some sacrifices.


First, I removed the cheeks. They were integral to breaking the Booyo’s unnerving, perfect circle body, but removing them would cut our Raymarched object count by 1/3. It was a good deal.


Next, I turned the arms into meshes. They were previously Raymarched spheres with very minimal blending on them. I figured that since they would be seen from afar, the difference in material would not be obvious to the player.


Lastly, I turned the tail into a general body modifier. Instead of keeping it far behind the body (so that it doesn’t mess with the Booyo’s face), I put the tail’s anchor a little nearer to the body’s center. I also changed the direction of the tail’s movement.

This is the video from my previous post. Before, the tail would only move back and forth. Now, I changed it so that the tail would be able to move in all directions:

By making it go in any direction, there was much more flexibility with the Booyo’s perceived shape. The cheeks were important because they broke the perfect-circle shape of the Booyo. However, by making the tail a dynamic shape deformer that reacted to player’s actions, we could make these Booyos look more organic AND make them look a little distinct from each other, like the kodama spirits from the film Princess Mononoke:

Kodama from Princess Mononoke

 

Going forward…


After deciding on the consistency and springiness we want for the blob, I want to test out basic animations with the blob’s arms. Since it doesn’t have segments in its tiny limbs (i.e. no elbows), I want to see the extent of its expressiveness. I also want to work with our programmers to further optimize the Booyo, so that hopefully we can keep our game as close to the ideal 90 fps as possible.

Comments


bottom of page