Recently I've been working on a personal project -- a cat character creator that allows the user to customize their own virtual cat! This is the first step in a larger cat simulator project I'd like to do using UE4. I am a big fan of cats in real life, so it's a joy to experiment with.
So far I've sculpted a default cat head to test the different features I'm looking forward to creating.
I've created cat eyes enabled with pupil dilation/contraction. This is done using a flow map to warp the UVs of the pupil to either expand or contract.
The goal is to be able to have a virtual toy and hide it behind something, and see the cat AI respond immediately by having its eyes dilate to full roundness with an urgent interest.
The fur in the images is done using a shell method, which (so far) has proved to be the most effective for both performance and with consideration to future needs for rigging and animation. The shell meshes are the same as the original base mesh of the cat's face, pushed out along its surface normals using World Position Offset in its shader. These shells are stacked on themselves to create the appearance of depth. The alpha mask/opacity mask used in the material on each shell is just a cross section of all the strands of fur (which essentially looks like a bunch of dots.)
A progression of cat fur lengths, from Sphinx to Persian (though without some weight and directionality to the fur at the longest length, it appears as if the Persian's fur has exploded.)
Fur length is determined by a 0-1 black and white texture that I've painted on the model to match cat fur length patterns. This is used as an alpha/mask to modulate the World Position Offset for the shells. In areas where it is closer to 0, the fur length will be shorter (use the min offset for the shells.) In areas where it is closer to 1, the fur length will be longer (use the max offset for the shells.)
Some tests I'll be doing soon:
- Fur directionality - The fur is currently following a linear path out along the surface normal of the mesh. If I were to create a flow map to nudge the fur strands in a certain direction progressively from the bottom to the top shell, it might provide the look of directionality. There's also the possibility I could create a flow map in real time by using Canvas Render Target 2Ds. This could allow the user to pet the cat and brush its fur in different directions.
- Fur color - I could provide preset patterns for fur based on breed. These patterns could be procedurally customizable to an extent, to provide for some of the variety you'd see between different cats of the same breed. I think though, it would be more awesome to be able to custom paint your cat, to allow endless possibilities. I'd like to experiment with a feature using Canvas Render Target 2Ds to allow the user to take a brush and paint patterns and colors on their cat.
- Customizable eye patterns and colors - There are an invariable amount of different eye patterns. Using a Substance in engine could provide for a lot of variety, or alternatively different presets with customizability by exposed material parameters, similar to the fur.
- Wet nose and rough tongue - Because what would a cat be without a cold, cold, wet nose and a sandpaper tongue?
- More progress soon to come! Feel free to ask any questions or share any ideas you might have with me.