Changes Overview
Major visual update, complete rewrite of most shaders:
Related changes:
- New universal cumstain compute shader: generates much better stain geometry (no more overlapped capsule-like particles), on multiple person skins and world colliders
- New fluid lighting model: no more fake lighting, uses VAM global diffuse and specular lighting as well as actual scene lights
- New fluid surface and volume material model
- New fluid post-processing shader: overall smoother and fluid-like look
- Improved shape of generated cumstains, with more natural look and more tweakable settings
- Material settings are configured separately from Spray/Stream/Cumstain settings and can be shared
- UI overhaul, moved many parameters around
- All presets recreated from scratch
Warning
New material settings are very different from previous versions. The new version of the plugin will load old presets and scene settings, and preserve some of them, but the visuals won't be the same or "correct". You will need to either tweak the materials, or if using relatively standard settings, load one of the remade presets and tweak that.
Please make sure to update all SexyFluids and DildoLanguage instances in the scene to the .f4 versions. Mixing .f2 and .f4 won't work too well.
Major bug fixes:
- Fixed handling of builtin VAM glow effect ; it will no longer add blurred version of all fluids, visible through any geometry
- Fixed VR visuals, v8 version of the fake lighting had very different looks in left/right eyes
This video show the new look. Many overlapping cumstains no longer appear as many individual lines, but smoothly blend together. All with correct lighting.
New lighting and material system
The new shaders will apply the scene's lighting correctly instead of mostly faking it:
The material model has been re-done from scratch as well. It combines surface diffuse lighting, surface specular reflections, refracted transmission through the fluid's volume and light scattering. It's designed to be fast to render and tweakable, but it's not really physically-based, many aspects are efficient approximations of what's actually happening.
- VAM's global lighting is fully supported:
- All intensity and exposure sliders affect the lighting
- Direction of specular reflection is correct, taking the cubemap's orientation into account, and their sharpness is affected by the material's shininess
- Global diffuse lighting (spherical harmonics magics) now works as well
- Scene's point, spot and directional lights are supported:
- Up to 8 lights from the scene will be used to apply specular, diffuse and volume lighting to the fluids
- If the scene has more lights, the most influential ones are chosen based on their on/off state, intensity, color and range
- Since all fluids are drawn in one pass, from all sources in the scene, this selection is universal for all fluids. So if you have many small lights in the scene, this might not work so great for you. If heavily requested, manual light selection might be added in the future for such scenes.
Material definitions are now separated from Spray/Stream/Cumstain settings. The UI was getting way too messy, and the separation allows the same materials to be re-used from different fluid components. Materials can now be copy-pasted - between material slots, between different fluid presets, or even between different fluids). It's also possible to load materials from a saved preset, while keeping all other fluid settings unchanged.
Surface Lighting
The good old Color and Specular Strength values still exist, but now affect purely the surface of the fluid. The color affects the diffuse lighting at the surface, and will be less influential if the fluid is more opaque. Even very thin and transmissive surfaces will have full specular reflections at the surface, material thickness will no longer scale the specularity ; but it's still affected by Fresnel.
The Reflectiveness slider is basically the Specular Strength, but applied only to the VAM's global lighting. While Specular Strength is used for point, spot and directional lights. Realistically, they should both be the same, but it might make sense to use different values to achieve more interesting looks in your scene.
Light Transmission and Material Thickness
In the previous versions, the Thickness slider was just a glorified alpha value. Now it's the most important value that influences many visual properties of the material. It's closer to the old version's Transmission slider, which is now gone, with the opposite meaning - less thick materials are more transmissive. The main difference is that while Transmission was a simple material property, the Thickness used for final shading scales with the fluid's volume correctly. So it's not just the slider that affects how transmissive a fluid will be, but also the volume of the fluid at each given shaded pixel (this is affected by the fluid particle Size, as well as simply the amount of fluid at given point).
In general, use Thickness values around 1 or a bit below for water-like materials. Thicker fluids usually look the best with Thickness around 30 to 70. With Thickness 200 and above, fluids will start looking opaque and solid (depending on the particle amount and size, i.e. the actual fluid volume, of course).
The resulting Thickness controls how the volume lighting is computed:
- New Subsurface Color property is used to define the tint of the light transmitted through the fluid
- More transmissive materials will transmit more color from the background scene through the fluid. The transmission is refracted, with color absorption controlled by the material's Thickness and Subsurface Color.
- Subsurface light scattering is also simulated. A light source does not affect just lighting at the surface, but it can also shine through the fluid's volume, with color absorption controlled by the thickness and subsurface color, just light color transmission does. The Scattering slider controls this behavior. Larger scattering values will generally scatter the light towards the camera more evenly regardless of the lighting angle, while lower values will mostly let the light shine directly through the volume. The effect is just an approximation and quite subtle. It's mostly visible on medium-thickness fluids, which are not obstructed by any surface right behind them ; so you will not really notice it on cumstains, the slime preset shows this the most.
- Fresnel still controls the ratio between transmissions and specular reflections. At higher Fresnel values, more light will be reflected than transmitted at glancing angles, and more will be transmitted when viewing the fluid straight on. At lower Fresnel values, the difference won't be so large.
In this video, the only lights are placed in front of the camera, pointing towards the camera. So the fluid is lit only from behind. It shows the difference in scattered lighting between a water-like fluid with low Thickness, and a thicker fluid with brown-ish subsurface color.
Other Material Properties
The remaining properties behave mostly the same way as before, with some smaller tweaks and additions:
- Refraction is now also affected by the fluid's volume (thickness)
- Shininess also affects how blurry the VAM's global lighting specular reflections will be. Just like the native VAM solid material shaders do
- Alpha is a new property which does what it says. It controls the blend of the fluid material with the background scene. Usually best left at 1. It might make visually sense to reduce it for Spray end-material.
Referencing Materials from Fluids
Up to six materials can be defined per preset, so you can have different starting and ending material for each of Spray, Stream and Cumstain, if needed. But usually 2-4 materials are enough. The materials are referenced from Spray, Stream and Cumstain, on their first tab, which includes:
The left factor defines which material mix should be used at the time the fluid is emitted, and the right value defines the mix to use just before the fluid expires and disappears. Value 0 means to use the first material, value 1 will use the second material. Values inbetween will use the corresponding mix of the two materials.
- The two materials to use
- Starting and Ending material mix factor.
The basic setup is to have the Starting Factor at 0, and the Ending Factor at 1, blending from the first material to the second material during the fluid's lifetime. This is usually used for the Stain fluid component. For Spray/Stream, the same materials can be sometimes reused, with different starting and ending mix factors. In other presets, Spray/Stream use their own two materials, but Spray uses different mixes ; usually more towards the end material, which tends to be more faded out.
New Stain Properties
These are all available on tab Stain 2 in the updated UI.
Stain Shape
Generated cumstains have more natural look, tweakable by these new properties:
The new cumstain geometry generator produces much smoother shapes, no longer consisting of overlapped capsules. However, for some stains, such as those from water, a bit more chaotic overlap might look better. For those cases (water, squirt, etc), enable the Draw as Overlapped Capsules toggle. It will still use the new unified shader, but stains will be generated as short overlapping segments instead of long smooth lines, with visuals being closer to the old version. This applies only to newly generated stains.
- The lower end of each cumstain can have nice droplet-like enlarged shape. Controlled by the Enlarge Bottom on Slope slider.
- Instead of having very smooth tube-like shape, each cumstain can have randomized shape/size. This is controlled by two new Segment Size Random sliders: the Strength slider controls how much the sizes of individual segments can be randomized, the Frequency slider controls how "noisy" the effect is (lower values will be smoother, large values will lead to segments right next to each other having completely different sizes)
- The overall length-wise narrowing has now more pleasing shape, still controlled by the Narrow Stain End To slider.
![]()
Comparison of old stain geometry consisting of overlapping capsules, with new geometry generator
![]()
New improved cumstain shape. Combination of drip-shape at the bottom, randomized segment sizes, overall better geometry and greatly improved post-processing, blending overlapping stains together in a more natural way
Stretching
A cumstain segment can be attached between two different body parts ; this could happen in previous versions too. New in this version is visual handling of such segments if they get stretched by the character's movements. The stain will narrow and fade as it gets stretched, and when it reaches the length configured by the Segment Length (max stretch) slider, the stain will completely disappear. It won't reappear even when the corresponding body parts get closer together afterwards.
The new generator handles all atoms covered by stains at the same time. Not only does it unify some of the code at technical level, but it also allows one stain to stretch between two different atoms. So you can have a cumstain joining butt and chair, or mouth and penis tip, if the cumstain manages to land and connect in such a way.
This video shows cumstains joining different body parts, moving and stretching as the hand moves.
UI changes and other new features
This sections lists other features and changes to the Fluid UI:
- As the Load gets lower when consumed by the Bursts, some properties can be proportianlly reduced:
- Burst Length - on the Orgasm tab (fluid bursts will be shorter near the end of the burst sequence)
- Burst Emission Velocity - on the Velocity tab (fluid will be emitted at lower velocity near the end of the burst sequence)
- Drip Emission Rate - on the Drip tab (drip emission slows down as the load decreases)
- Spray, Stream and Drip emission rates are now defined separately, instead of one common rate and ratio sliders.
- The Orgasm/Squirt/Milk tab now defines only the Burst duration parameters. Velocity and Particle Rate have been moved to their own tabs.
- New Emitter tab combines the emitter angles, offsets and rotations on one tab. Previously scattered in more places.
- The Forces tab should be organized in a more readable way.
- Spray, Stream and Cumstain tabs have been separated into pairs. Tab 1 defines the lifetime, material, size and height (for stains). Tab 2 defines the shape.
Implemented a workaround for Eosin's VRRenderer sometimes disabling depth-buffer capture on its camera for whatever reason. This resulted in the fluids being visible through other objects in the Renderer's output.
Quick hotfix. I forgot to initialize the trigger helper, so it was not possible to add actions to penetration triggers.
Also fixed potential exception thrown from penetration monitor on scene unload, which (when it randomly happened) required VAM hard reset to be able to load another scene.
Changes Overview
- Implemented penetration monitoring for penis, similar to DildoLanguage v12.f2.
- Exposed penetration state through storables and triggers.
- Basic behavior based on penetration - do not emit cum fluids while the penis is penetrating.
- Changed all emitters (penis, squirt, nipples) to be positioned relatively to the person's visual skin, instead of using rigidbodies or colliders. You might have to tweak positions of your colliders, especially nipples, where the base position is now much more precise.
- Emitted fluid particles can now have all collisions turned off until they travel certain distance away from the emitter. No more pesky collision with protruding nipple colliders. Squirt no longer has to emit from outside the vagina to prevent collisions.
- Updated all presets accordingly.
- Rendering of gizmos and debugging features has been rewritten to be more efficient, and use more consistent line-based visuals.
Skin Tracking
Internally, the largest change is the ability of the plugin to track exact positions of the character's visual geometry on the CPU. This includes poses and morphs (but not softbody physics).
This tech is used to:
- Track the visual shape of the penis, compute its intersection with vagina/anus/mouth orifices (aka penetration monitoring).
- Track preconfigured parts of the skin and position the fluid emitters relatively to them, no longer relying on rigidbodies or colliders.
Penetration Monitor
If you also use DildoLanguage, you might be already familiar with this feature, it's been added to DL in update v12. The plugin tracks the visual shape and position of the penis and computes its penetration with all person atom orifices ; the targets do not need to have SexyFluids enabled on them. The penetration parameters are exposed to scene creators as Storables and also as Triggers. You can check them on the new Penetration tab. The Info tab shows the names of the exported storables, as well as their current values:![]()
For information about setting up the triggers, please refer to DildoLanguage v12.f2 update notes .
- OrificeId: 0 = none, 1 = anus, 2 = vagina, 3 = mouth
- Depth is in centimeters
- Girth is also in centimeters. If the value looks too large, that's because it's the girth circumference, not radius or diameter.
- Speed in in centimeters per second.
- So is the Strength, although it's better to think of it as a unitless value. It's derived from weighted running average of recent positive (push) speeds. It does not take the girth into account.
- For penis tracking, there is no difference between atom/orifice and target atom/orifice, that's used by DildoLanguage where a dildo can have manual orifice target selected and be attracted to it. There are already enough addons that implement such feature for penis, so I decided to not include the DildoLanguage's manual target and smart forces here.
On the Debug tab, you can enable the visualization of the penetration or the orifices. The image on the right shows the penis shape visualization in green/blue, and the penetration girth visualization in white.
Internally, the penetration monitoring it not used for any big features yet. The Penis has a new Behavior tab, where you can configure it to not emit cum particles while penetrating. It usually does not look good, with the fluid particles just randomly finding their way through the penetrated atom's colliders. By default it's set to disable cum fluids when the penetration is 1cm or more. Set it to 0 to disable this feature.
![]()
But for now the monitoring is mostly aimed at scene creators. Use the values to drive morphs, expressions, sounds or anything else you want. The DildoLanguage v12 update has a video attached, showing a light driven by penetration depth value, and squirt triggered at certain depths.
Skin-based Emitters
All fluid emitters are now attached to the person's skin, rather than their rigidbodies or colliders. This makes their position much more precise, also they should stick to the skin, update with morphs, and not lag behind the person visual geometry's motion. While on the Burst Shape tab, the yellow outline shows the body polygons tracked to place the emitter.![]()
For example, the nipple emitters should now be always positioned correctly, no matter what morphs are used. Even on males ; or more importantly, legacy futas. Those have no nipple colliders, so the position was rather approximate before and needed manual tuning matching the used morphs.
This means the emitter positions are slightly different from the previous version. So if updating an existing scene, you might have to tweak the offsets or rotations in Burst Shape. There is a chance you had to fiddle with those to position the emitter where you wanted it to be, now it should not be as necessary.
A feature closely related to this is the Do not Collide Near Emitter advanced option. Because the emitters now stick to the skin, they might be obscured by VAM's colliders. This option runs initial few ticks of the simulation with collisions turned off, otherwise the fluids particles would collide immediately. In general, you should not have to pay attention to this, it's configured for all existing emitters in a way that should make sense.
![]()
The overview post has been updated to match features of v5.f2. Many tweaks all over the place, the more significant changes are:
- Added description of Burst Values Curves to the "how does it all work" part
- Separated Forces Settings from the Orgasm Settings, just like in the UI. And updated the information with the new forces features
Added slider to various forces that changes the behavior from applying the value as a force to directly rotating the emitter instead.
For example, for the penis orgasm and the Left-Right force, if set the Use Side Force to Rotate Emitter slider all the way to 1.0, instead of applying a sideways force to the penis' tip, the cum will just shoot sideways. Values between 0 and 1 will combine forces and emitter rotation at given ratio.
This can be useful if you want to randomize the "shooting direction". When using only forces, the first few particles will always shoot directly forwards since it takes a while for the force to actually move the tip.
As usual, updated all defaults and presets to use this effect to some degree, and to overall improve their look.
Here is a video demonstrating the forces settings, using AltFuta penis and the sideways forces as an example. But it also works in a similar fashion for the tip (upwards) forces, for both nipple forces, and for squirt pelvis force. Squirt sideways "force" always rotates the emitter directly. And the orgasm pelvis force is always used as a force.
Nasty hack to hopefully fix remaining Eosin's VRRenderer's issues:
Or short version:
- Because the VRRenderer plugin breaks fluid renderer's command buffers on its cameras every frame, the fluids plugin will now verify that its command buffers are activated where they should be, and go around and fix things if they are not.
- Hopefully this will always run after VRRenderer breaks stuff and before the camera is actually rendered.
- The Use Command Buffer Effects toggle is no longer necessary, since fluids will reinstall their buffers if they get deleted anyway. But it won't hurt to have it enabled - my plugin will also remove fluid command buffers installed by VRRenderer where they should not be.
- Did I mention I dislike how it mucks with command buffers on cameras? I probably did too many times already.
I am not too happy with this workaround. But other than modifying the VRRenderer directly I see no other options. Hopefully this hacky fix won't break something else.
- Correct fluid command buffers will run on VRRenderer cameras after this fix. Instead of none at all or the main camera's buffers.
Other fixes:
- Fixed squirt UI for AltFuta person atoms
- Fixed SexyFluids UI not refreshing correctly when switching person atom types with the plugin already installed.
Just a quick hotfix to v2.f2:
I really did not like how the slower initial particles changed the look. I might tweak the base nipple presets in a similar fashion in the future. Let me know if you dislike how the default looks.
- Changed the default Velocity Attack-Decay Ratio for the penis emitter from 0.1 to 0.0
- Updated bundled presets Cum Default and Cum High Load to use zero Attack Ratio
Force Updates
- Moved forces configuration to separate tab in the UI
- Changed Decay behavior for all relevant values (velocity, particle rate, forces):
- Before it was a simple max-to-min linear decay. The update changes it to a attack-decay curve. This can be used to produce smoother and more pleasing effects.
- The new Attack slider configures how fast the value transitions from zero to max. Then it decays to the Decay fraction.
- In case of velocity, the starting value is the Decay-To fraction rather than zero.
- Both parts of the attack-decay curve are non-linear.
- If you do not want use the attack part, set the Attack slider to zero.
- This can be seen in the sample Milk Long Burst preset, the velocity reaches the maximum value smoothly, and then decays to lower value.
- Added Left-to-Right sideways force settings for all emitters, with its own min/max random ranges:
- With this addition, fluids will no longer shoot in the same forwards direction, but smoothly and randomly swerve to a side.
- Set Left-Right Force minimum and maximum to zero to disable the effect.
- The emitter will start in the forward direction, then be pushed to reach the maximum sideways force at Side Force Attack-Decay Ratio time of the burst. Stay there for Hold. Then shift back to forward direction. As usual, these values are specified as fractions of the burst duration, rather than in seconds.
- If you want the forward direction to be simply randomized sideways, with no ease in-hold-ease out curve, set the Attack-Decay Ratio values to zero, and the Hold value to one.
- Enabled up/down and side-to-side forces for nipple emitters, so the boobs can now be pushed a bit when emitting fluids. By default with very small and gentle values.
- Updated all bundled presets to use the new features.
- PLEASE reload or update your nipple presets, since the previous ones had way too large forces saved in them (the emitter did not use the value in the previous version).
- Added new Milk Long Burst preset with more obvious particle velocity attack-decay curve.
Other Updates
- Enabled squirt emitter for AltFutas.
- Changed the look of the tabbed UI to distinguish tabs from normal buttons
Fixes
- Fixed cumstain broken behavior when attached to colliders that have very large or very low scale. This included some of the builtin toys, for example the buttplug.
- Fixed one-frame flash when the fluid compositor is added to the scene.
- Fixed most issues with high-resolution screenshot and video taking plugins. See below for additional info about Eosin's VRRenderer.
- The fluid renderer has some significant internal changes to fix the high-resolution screenshot/video plugin support, and the internal interface has been updated to a new version. If you use SexyFluids and DildoLanguage in your sccene, make sure to update both to the .f2 version.
VRRenderer Notes
Most bugs associated with the Eosin's plugin have been fixed, but the situation is still not ideal, and perhaps will never be.![]()
First, things still break if the scene has both the Eosin's VRRenderer plugin and VAM's WindowCamera enabled. Disable the WindowCamera's preview to fix this issue. I am not yet sure what is causing this.
Update: I just noticed that at least in my testing scene, the VRRenderer breaks when I enable the WindowCamera preview even without any of my fluid plugins being present. It looks like a VRRenderer bug that happens if the scene has WindowCamera preview enabled and any VAM reflective surfaces.
Second, the VRRenderer does really weird things with camera Command Buffers - by default, it just kills them all. And the fluid renderer runs all its effect as camera Command Buffers. To somewhat fix this, make sure the Use Command Buffer Effects toggle is turned on. Otherwise you won't see any of the fluids in VRRenderer's renders (only in reflective surfaces).
But it still won't be perfect. With the toggle being checked, the VRRenderer will still remove the Command Buffers created by my fluids, then copy over Command Buffers from the main camera. This is not ideal, since the fluid shaders use different settings depending on the render resolution. So when you use the VRRender for high-resolution renders, these will use slightly wrong fluid settings. They will still look mostly fine, so it can probably be ignored. And I can't fix it anyway, the only solution is adding an option to VRRenderer to simply do nothing with camera Command Buffers.