Commission #32: Kelly Handjob in the Ocean [Animation] (Patreon)
Content
Alright, I didn't intend for the actual handjob to be so difficult to see, but hopefully my decision to animate this one makes up for that.
And not just any typical animation, but one with a bit more going on than I usually do. Let's break it down.
Ocean
First, the Ocean Modifier. A super nifty tool in Blender that transforms a mesh into an ocean. You can tweak all manner of settings to determine the shape and motion of the waves.
Right out the box, this modifier looks great. But there were a few tricks I had to look up to make it work for this gif.
Seamless Loop
Getting the ocean to animate in a seamless loop is a little annoying. The modifier has a "time" value you can increase or decrease, which animates it, but this value doesn't necessarily circle back on itself ever. You can animate up and then back down, but that looks pretty bad.
Instead, you must layer two ocean modifiers together.
Kind of impossible to show this in one screenshot, but basically I'm animating two values on each ocean modifier. One is that "time" value, and the other is the strength. Basically, the two ocean modifiers "crossfade" their influence over the look of the thing, and by the end of the loop, a modifier that was going from "10 seconds to 20 seconds" is replaced with one going from "20 seconds to 30 seconds," except by the time we reach 30 seconds, we've crossfaded back down to 10 seconds. In this way, we have a seamless loop that looks natural.
The concept is simple. The execution is confusing as fuck, and I kept having to double-check what I was doing.
Shaders and Foam
The modifier can automatically work out where seafoam should form, but the process for showing that in your shader is a bit convoluted. I have my standard toon shader that I use for nearly everything, but I made this one partially transparent (for obvious reasons).
Originally I just had it partially transparent the whole time, but at one point I decided to animate a faint sort of "pulse" of transparency and opacity, which I liked as a way to convey the hidden nature of the handjob.
Unfortunately, layering in that second ocean modifier for the seamless loop meant that the seafoam calculations get thrown off, and suffice to say the foam would NOT loop seamlessly. I'm sure there's some way to make it work, but I decided to just fade out the foam on my shader at the start and end of the loop, which I think looks fine. There isn't even that much seafoam to begin with, though I could have increased it.
Sprawling Ocean
You may notice that the shot kind of has a "foreground ocean" and a "background ocean." This might not have been the perfect way to do this, but making a giant, sprawling ocean is a pain in the ass, especially if you don't want the tiling to be obvious. I wanted a foreground ocean so I'd have something quick and efficient to work with while building the animation. The background ocean was far too resource-intensive to work with in real time.
This is what the scene looks like:
That plane in the background is purely so that I could add some "horizon line mist" to the sky, because I was studying horizon lines and realized it looks really weird when you don't have a sort of faint fog behind an ocean.
It also had to be composited separately, because the outline rendering took absolutely forever each frame as it tried to account for the ocean. This was the initial reason I had a foreground ocean.
I excluded both oceans from the outline rendering. The foreground one looked mostly fine, but the background one looked fucking wretched (just a mess of scribbled outlines), and it was better to keep them consistent.
There's another reason I wanted to have a small foreground ocean to work with that would be resource-efficient, and that's...
Kelly's boobs bobbing
In the animation, Kelly's boobs are bobbing up and down with the motion of the waves. It's not perfect by any means, but I'm largely pleased with it and I had fun figuring this out:
So, here we have an empty. An "empty" is a type of object that doesn't get rendered. It's basically nothing more than a set of coordinates. But that's useful for certain operations. On the right, I've circled a Shrinkwrap constraint that I gave to the empty, which essentially tells it to glue itself to a point on the ocean's surface.
Then, I gave a second constraint to the primary bone that controls Kelly's breasts:
Basically, I'm telling the bone that controls her boobs to follow the Z (height) position of the empty as it moves up and down with that one specific point on the ocean. Checking "offset" allowed me to control the positioning of the bone relative to the empty, so it's more just the motion that her boobs are copying, and not the literal exact position.
And in this way, the boobs basically bob up and down with the water. I would have loved to add a little dampening to the motion to make it feel smoother, but I had spent a while figuring this out and couldn't find an easy way...so I moved on. If I wanted to take the time, I'm sure I could bake the motion into keyframes and then dampen the Z motion somehow that way, but fuck that.
Stella's armature does not have a bone that controls her breasts (her model was from an older generation that I never took the time to update). So I didn't really bother in her case.
Animating the people
The characters themselves are rather stiff, but I wasn't about to go crazy. I just wanted a nice, simple enough loop where each person has a little motion so they don't look like rigid statues (there's a massive difference between a TINY bit of motion and absolutely zero, which is why we have idle animations). I did have some fun making Flin blink and shift his eyes around.
Also, seamless loops get a lot worse when you make an interesting action stand out too much that wouldn't be repeated. Like if Eric gave Flin a high-five, it'd be so weird for them to keep high-fiving every 5 seconds. I think a simpler approach was best here.
I did animate Flin's swimming trunks to morph with Kelly's hand motions under the water. Figured that really gets to the meat of what the commission was supposed to be about, haha.
It would have been nice to maybe get Flin's body to react a little more, like hunching over a bit or something, but that would have added a lot of complexity to what was otherwise a pretty straightforward scene.
I like it overall, and I think I'll actually include this entire little loop in the game. It's only about 12 MB of space when you break it into frames.
---
Anyway, there you go, hope you like it! I'll have a status report on all the other shit I got done this month soon. ~🎶💕