Becoming a Butterfly
Before we can do anything in VR, we need to create our monarch 3D model. To save time, rather than build the whole thing from scratch, I purchased a low-poly 3D model of a monarch butterfly that was rigged — meaning it had an armature, or bones we could use for animations. I then modified it using Blender to look and work the way I wanted.
For my purposes that meant:
- removing the head (this is where the VR camera will go),
- detaching the antennae and proboscis (the straw-like butterfly “tongue”) so we can control them independently in VR, and
- modifying the rig/armature and wings of the model to work well with VR hand controllers.
Removing the head is relatively straight-forward — we want this to be an empty space where we can put our VR camera in Unity so when a player puts the headset on, they are looking out from where the butterfly head would be. We detach the antennae and proboscis for similar reasons — we want these to move with the player’s actual head in Unity. So we make them into separate meshes in Blender, and we can then child them to the VR camera in Unity (so when the camera moves, they move with it, maintaining their local position relative to the camera). I also added a custom pivot point in Blender where the head should go, which we’ll need to move/rotate the avatar model in Unity.
The next part was a bit more complicated. I needed to modify the mesh so that the dimensions of the wings were more accurate; the wings themselves had thickness (they were flat planes to start), particularly around the tubular veins that run through the wings to provide support; and rebuild the rig/armature of the model so that the wing bones could be animated using inverse kinematics (see part III below) in Unity with the hand controllers as targets. I used scale images of adult monarchs to recreate the wings and trace the paths of the veins.
I then made the veins into 3D “tubes” that run throughout the wings, as they do for real butterflies to provide the wings with nutrients and stability. (Note: in the final model I did this only for the forewings to reduce the number of tris.)
I also spent quite a bit of time playing with the wing mesh to try to get regular edges running through and lining up between the fore- and hindwings. This is very important to get the wings to animate properly as they’ll only be able to “bend” along these edges. So if the edges/vertices are arranged more haphazardly the wings won’t appear to move correctly when they’re flapping.
Once the geometry was ready, I did a few quick mock-ups showing how I anticipated the VR avatar to fit together in Unity. As you can see in the images below, the butterfly avatar needs to be quite large to fit the height of the player (using floor-level tracking in Unity). Building it in this way means that the player’s head will be where the butterflies head would be and the player will perceive their actual feet to be at the same level as the butterfly’s feet in the virtual world, improving the level of immersion.
The player’s hand controllers will also be able to control the positions of the butterfly’s wings, so when the player stretches their arms straight out, the butterfly’s wings will likewise stretch straight out. Raising the right arm will cause the right wing to rise accordingly. The wings will simply follow the locations of the hands, with limitations added to each joint of the wing bones so that they cannot move or rotate in an unrealistic way.
Finally, I used Blender to unwrap the models, creating a UV map that I could use in Substance Painter to create the avatar materials: one for the body, and another one for the antennae and proboscis.