Passerby: What does this plugin do?
MahiroOyama: Before I introduce this plugin, I need to introduce the original ToySerialController. In short, ToySerialController can drive your real-life sex toy to move by capturing a reference pose from one object inside VaM penetrating another. But the original ToySerialController cannot drive a Dildo/CUA to move. I found a very elegant way to make the penetrated body part drive the penetrating object — and therefore drive your real-life masturbator.
Passerby: Why should the penetrated part drive the penetrating Dildo/CUA? Can't the two of them just move on their own?
MahiroOyama: In a few cases that already works — many scene authors have built nice male/female interaction scenes, or scenes that use a Dildo for masturbation, but the prerequisite is that the author has already animated the Dildo's motion relative to the person. Suppose you have a bunch of dance animations downloaded from the web, or multiple clips of single-person masturbation or sex scenes. You want your toy to follow these motions, but the people who made these animations never thought about the Dildo's motion. If we want our toy to track these beautiful motions, what should we do?
One approach would be to author Dildo animations so the Dildo always sits at a sensible position relative to the person. But that's not really viable — animation authoring is a lot of work. So instead, we want the penetrated object (e.g., a vagina) to drag the Dildo along with it.
Passerby: Sounds reasonable, but normally couldn't you just parent the Dildo to the hip or somewhere, then crank up the drag? Wouldn't that give you roughly the same result? Why bother with a whole plugin?
MahiroOyama: When I first started using ToySerialController I did exactly that, and after some time I found it gives terrible results. If you want to achieve this through Spring + Damper / Drag, and you tune the parameters low, the displacement between the Dildo/CUA and the penetrated body part becomes tiny — your real toy barely moves. But if you tune them high, then whenever the person makes a sudden large motion, your real toy will also jerk violently.
That's not what we want. Especially for MMD dances — a single dance can contain both very large movements and very subtle ones. Pure Spring / Damper / Drag can't handle both at the same time. And without that mechanism, it's very hard to make the Dildo/CUA both produce a reasonable relative offset from the penetrated object and stay close enough that it doesn't fly out of range. It's a really hard problem.
Passerby: Sounds complicated.
MahiroOyama: It is. But I designed a system that solves it. Let me start from the Spring analogy...
Passerby: Didn't you just say Spring / Damper / Drag doesn't work?
MahiroOyama: I said it doesn't work on its own. Imagine an idealized real-world setup: you have a long, thin rectangular box with a small ball inside. From the center of the ball, a bungee cord is attached, and the other end of the cord is fixed to the center of the box. When you shake the box along its long axis, the ball follows the shaking motion: it produces enough displacement inside the box but never escapes either end. (We're 6-dimensional in practice, but I'm only talking about 1 dimension to simplify.)
Now treat the ball as the Dildo/CUA, and the box as the penetrated object (e.g., a vagina). The ideal behavior is: the ball never leaves the box, and the ball still produces comfortable relative motion inside the box as the outside world moves the box around.
Passerby: But that's still a spring — what's the difference?
MahiroOyama: There is a difference. An ideal spring is linear, but a real-world spring stops being linear once you stretch past a certain length. Translate that to the game: in VaM, if you make a small ball, attach two springs to it, and put it inside a thin box with no collider, then no matter how you tune the parameters, either the ball doesn't move much inside the box, or it very easily shoots out of either end.
Passerby: Kind of getting it, kind of not.
MahiroOyama: The point is: a real-world spring has a maximum length, but VaM's does not. We added a mechanism called Speed Field to simulate that. In short: when the Dildo is about to drift too far from the target, and its velocity is carrying it even further away, the target will grab the Dildo and drag it along; once you head back toward the spring's center, we restore the velocity for you. Feel free to copy the code and ask an AI what it means.
The other parameters are simpler. RestPosition sets where the spring wants to retract to. Spring is the spring stiffness. Damper is the damping.
Passerby: What about Velocity Follow and Displacement Weighting on Position?
Velocity Follow can be thought of as how strongly the Dildo follows the target — but it can also be seen as a multiplier that attenuates the relative motion between the Dildo and the toy. At 100%, the Dildo completely locks to the penetrated target and the relative pose between the two stops changing. You can use it to scale down how much the penetrated part's motion affects the Dildo/CUA — if some users still find the displacement too violent, this is the mechanism to use.
For Displacement Weighting on Position: you fix a reference point, look at the displacement between the penetrated part and that reference, and apply a proportional offset to the spring's resting point. The reference point can be set freely by the user, with a sensible default if you don't touch it. With this feature, the same motion performed standing vs. crouching produces different results: while standing, the penetration depth is smaller; while crouching, it's larger. A threshold can be set to limit this.
Compare this to a plain spring setup: if the person performs the same motion standing and crouching, after the spring settles (which only takes a brief moment), there is no meaningful difference between the two — the spring doesn't know the person is crouching.
Passerby: Looks like this plugin has a "v1" or earlier version. What's the relationship between the two?
MahiroOyama: The first version went down the wrong design path. If you want to hide things, you can just disable collisions on the Dildo and set it transparent — that achieves the same result. You can also tune other physical properties of the Dildo, and it still doesn't conflict. Relying on referencing external objects is probably not a great approach in the first place.
Passerby: I think this is really interesting. It sounds useful — I'm going to download it.
MahiroOyama: Thanks for downloading, and welcome.
This fork is based on the original Toy Serial Controller by Yoooi0 and extends it with a Virtual Reference workflow that is better suited for dance-oriented motion control.
MahiroOyama: Before I introduce this plugin, I need to introduce the original ToySerialController. In short, ToySerialController can drive your real-life sex toy to move by capturing a reference pose from one object inside VaM penetrating another. But the original ToySerialController cannot drive a Dildo/CUA to move. I found a very elegant way to make the penetrated body part drive the penetrating object — and therefore drive your real-life masturbator.
Passerby: Why should the penetrated part drive the penetrating Dildo/CUA? Can't the two of them just move on their own?
MahiroOyama: In a few cases that already works — many scene authors have built nice male/female interaction scenes, or scenes that use a Dildo for masturbation, but the prerequisite is that the author has already animated the Dildo's motion relative to the person. Suppose you have a bunch of dance animations downloaded from the web, or multiple clips of single-person masturbation or sex scenes. You want your toy to follow these motions, but the people who made these animations never thought about the Dildo's motion. If we want our toy to track these beautiful motions, what should we do?
One approach would be to author Dildo animations so the Dildo always sits at a sensible position relative to the person. But that's not really viable — animation authoring is a lot of work. So instead, we want the penetrated object (e.g., a vagina) to drag the Dildo along with it.
Passerby: Sounds reasonable, but normally couldn't you just parent the Dildo to the hip or somewhere, then crank up the drag? Wouldn't that give you roughly the same result? Why bother with a whole plugin?
MahiroOyama: When I first started using ToySerialController I did exactly that, and after some time I found it gives terrible results. If you want to achieve this through Spring + Damper / Drag, and you tune the parameters low, the displacement between the Dildo/CUA and the penetrated body part becomes tiny — your real toy barely moves. But if you tune them high, then whenever the person makes a sudden large motion, your real toy will also jerk violently.
That's not what we want. Especially for MMD dances — a single dance can contain both very large movements and very subtle ones. Pure Spring / Damper / Drag can't handle both at the same time. And without that mechanism, it's very hard to make the Dildo/CUA both produce a reasonable relative offset from the penetrated object and stay close enough that it doesn't fly out of range. It's a really hard problem.
Passerby: Sounds complicated.
MahiroOyama: It is. But I designed a system that solves it. Let me start from the Spring analogy...
Passerby: Didn't you just say Spring / Damper / Drag doesn't work?
MahiroOyama: I said it doesn't work on its own. Imagine an idealized real-world setup: you have a long, thin rectangular box with a small ball inside. From the center of the ball, a bungee cord is attached, and the other end of the cord is fixed to the center of the box. When you shake the box along its long axis, the ball follows the shaking motion: it produces enough displacement inside the box but never escapes either end. (We're 6-dimensional in practice, but I'm only talking about 1 dimension to simplify.)
Now treat the ball as the Dildo/CUA, and the box as the penetrated object (e.g., a vagina). The ideal behavior is: the ball never leaves the box, and the ball still produces comfortable relative motion inside the box as the outside world moves the box around.
Passerby: But that's still a spring — what's the difference?
MahiroOyama: There is a difference. An ideal spring is linear, but a real-world spring stops being linear once you stretch past a certain length. Translate that to the game: in VaM, if you make a small ball, attach two springs to it, and put it inside a thin box with no collider, then no matter how you tune the parameters, either the ball doesn't move much inside the box, or it very easily shoots out of either end.
Passerby: Kind of getting it, kind of not.
MahiroOyama: The point is: a real-world spring has a maximum length, but VaM's does not. We added a mechanism called Speed Field to simulate that. In short: when the Dildo is about to drift too far from the target, and its velocity is carrying it even further away, the target will grab the Dildo and drag it along; once you head back toward the spring's center, we restore the velocity for you. Feel free to copy the code and ask an AI what it means.
The other parameters are simpler. RestPosition sets where the spring wants to retract to. Spring is the spring stiffness. Damper is the damping.
Passerby: What about Velocity Follow and Displacement Weighting on Position?
Velocity Follow can be thought of as how strongly the Dildo follows the target — but it can also be seen as a multiplier that attenuates the relative motion between the Dildo and the toy. At 100%, the Dildo completely locks to the penetrated target and the relative pose between the two stops changing. You can use it to scale down how much the penetrated part's motion affects the Dildo/CUA — if some users still find the displacement too violent, this is the mechanism to use.
For Displacement Weighting on Position: you fix a reference point, look at the displacement between the penetrated part and that reference, and apply a proportional offset to the spring's resting point. The reference point can be set freely by the user, with a sensible default if you don't touch it. With this feature, the same motion performed standing vs. crouching produces different results: while standing, the penetration depth is smaller; while crouching, it's larger. A threshold can be set to limit this.
Compare this to a plain spring setup: if the person performs the same motion standing and crouching, after the spring settles (which only takes a brief moment), there is no meaningful difference between the two — the spring doesn't know the person is crouching.
Passerby: Looks like this plugin has a "v1" or earlier version. What's the relationship between the two?
MahiroOyama: The first version went down the wrong design path. If you want to hide things, you can just disable collisions on the Dildo and set it transparent — that achieves the same result. You can also tune other physical properties of the Dildo, and it still doesn't conflict. Relying on referencing external objects is probably not a great approach in the first place.
Passerby: I think this is really interesting. It sounds useful — I'm going to download it.
MahiroOyama: Thanks for downloading, and welcome.
This fork is based on the original Toy Serial Controller by Yoooi0 and extends it with a Virtual Reference workflow that is better suited for dance-oriented motion control.