Jump to content

Problem with Belly Collisions (SE)


Recommended Posts

Posted

Hello, friends.

 

So, after many years of playing on LE, I decided to switch to SE to modernize myself and take advantage of more supported mods.  However, I've come across a problem that has made my transition to SE a little discouraging.  I went from using CosioHD to COCO CBBE SE, and belly collisions appear to not happen with SexLab animations.  No more bulging or movement.

 

I searched the forum but didn't really find anything close to my issue.  If I missed it, I apologize for the duplicate topic.  In short:

  1. Is there a way to modify CBPC/SMP to mimic previous bulging from "large" penetrations?
  2. Is my current body replacer (COCO CBBE) not good for belly collisions/bulging?
  3. Or am I stupid and jacked up installation somewhere?
Posted

Decide which route you want to go:

  • SMP with it's true collisions and bulging. In my experience this is harder to manage for a "fun" effect. Can be twitchy and glitchy.
  • CBPC with it's simulated bulging. Easier to manage, simpler implementation, can sometimes be a bit twitchy.
Posted
10 hours ago, ?????? 1627 said:

In SKSE Plugins, you have the folder HDTSkinnedMesheConfig ? 

 

Yes, I have that folder installed but haven't touched it.

 

9 hours ago, traison said:

Decide which route you want to go:

  • SMP with it's true collisions and bulging. In my experience this is harder to manage for a "fun" effect. Can be twitchy and glitchy.
  • CBPC with it's simulated bulging. Easier to manage, simpler implementation, can sometimes be a bit twitchy.

 

So if I go CBPC route, do I simply have to keep messing with config files until I get the desired effect?

Posted
28 minutes ago, Little Moon said:

So if I go CBPC route, do I simply have to keep messing with config files until I get the desired effect?

 

That's not specific to CBPC, expect that with SMP as well. This is modding, another word for hacking, not the Microsoft store. ?

Posted
6 hours ago, Little Moon said:

Yes, I have that folder installed but haven't touched it.

Pass me your BaseShape.xml site in that folder ? It could also have another name, or, you could have a folder named COCO , with the file you have in it

 

Spoiler

Immagine.jpg.2043537558069e0c9931ab420f6036ba.jpg

 

Posted
6 hours ago, ?????? 1627 said:

Pass me your BaseShape.xml site in that folder ? It could also have another name, or, you could have a folder named COCO , with the file you have in it

 

  Reveal hidden contents

Immagine.jpg.2043537558069e0c9931ab420f6036ba.jpg

 

 

Sure.  I appreciate the help, by the way.

BaseShape is file within HDTSkinnedMesheConfig.  BaseShape A was within the COCO subfolder.

BaseShape.xml BaseShapeA.xml

Posted

Thank you so much!  I'll give it a try.

 

I'm looking at the snippets you provided.  If you don't mind me asking, what was edited in the file?  I can't tell what values were adjusted, other than NPC Belly.  I'd like to learn for future reference.

Posted

WinMerge, shows you the differences between 2 files in a convenient way.

 

Disclaimer: I've not updated this app in probably 10 years. It may not be the same anymore. As with anything downloaded from the internet: be careful.

Posted
4 hours ago, Little Moon said:

I'm looking at the snippets you provided.  If you don't mind me asking, what was edited in the file?

I used Notepad++ to edit . To understand what I have touched, open both the original and the modified file with the aforementioned programme 

first modification . removal of blocks <!-->

Second modification, I reduced the values to the constants of   bodyA="NPC Belly" bodyB="Belly"

Third modification,  I reduced the values to the constants of  bodyA="NPC L Pussy02" bodyB="NPC L Pussy01  and  bodyA="NPC R Pussy02" bodyB="NPC R Pussy01

 

Before :

 

Spoiler

<!-- <bone name="Belly"> -->
        <!-- <mass>0</mass> -->
        <!-- <inertia x="0" y="0" z="0"/> -->
        <!-- <centerOfMassTransform> -->
            <!-- <basis x="0" y="0" z="0" w="1"/> -->
            <!-- <origin x="0" y="0" z="0"/> -->
        <!-- </centerOfMassTransform> -->
        <!-- <linearDamping>1</linearDamping> -->
        <!-- <angularDamping>1</angularDamping> -->
        <!-- <gravity-factor>0</gravity-factor> -->
        <!-- <friction>0</friction> -->
        <!-- <rollingFriction>0</rollingFriction> -->
        <!-- <restitution>0</restitution> -->
    <!-- </bone> -->
    
    <!-- <bone name="NPC Belly"> -->
        <!-- <mass>1</mass> -->
        <!-- <inertia x="3" y="3" z="3"/> -->
        <!-- <centerOfMassTransform> -->
            <!-- <basis x="0" y="0" z="0" w="1"/> -->
            <!-- <origin x="0" y="0" z="-1"/> -->
        <!-- </centerOfMassTransform> -->
        <!-- <linearDamping>0.7</linearDamping> -->
        <!-- <angularDamping>0.6</angularDamping> -->
        <!-- <gravity-factor>0.6</gravity-factor> -->
        <!-- <friction>0.5</friction> -->
        <!-- <rollingFriction>0</rollingFriction> -->
        <!-- <restitution>0.1</restitution> -->
    <!-- </bone> -->
    
    <!-- <generic-constraint bodyA="NPC Belly" bodyB="Belly"> -->
        <!-- <frameInB> -->
            <!-- <basis x="0" y="0" z="0" w="1"/> -->
            <!-- <origin x="0" y="0" z="0"/> -->
        <!-- </frameInB> -->
        <!-- <useLinearReferenceFrameA>false</useLinearReferenceFrameA> -->
        <!-- <linearLowerLimit x="-0.7" y="-3" z="-4"/> -->
        <!-- <linearUpperLimit x="0.7" y="2" z="4"/> -->
        <!-- <angularLowerLimit x="-0.01" y="-0.01" z="-0.01"/> -->
        <!-- <angularUpperLimit x="0.01" y="0.01" z="0.01"/> -->
        <!-- <linearStiffness x="270" y="230" z="350"/> -->
        <!-- <angularStiffness x="77" y="66" z="55"/> -->
        <!-- <linearDamping x="0" y="1" z="3"/> -->
        <!-- <angularDamping x="0" y="0" z="0"/> -->
        <!-- <linearEquilibrium x="0" y="1" z="0"/> -->
        <!-- <angularEquilibrium x="0" y="0" z="0"/> -->
        <!-- <linearBounce x="0" y="0" z="0"/> -->
        <!-- <angularBounce x="0" y="0" z="0"/> -->
    <!-- </generic-constraint> -->

    

 

After . After removing the blocks, with Notepad++ , you will see the file as in the screen presented above

 

Spoiler

    <bone name="Belly">
        <mass>0</mass>
        <inertia x="0" y="0" z="0"/>
        <centerOfMassTransform>
            <basis x="0" y="0" z="0" w="1"/>
            <origin x="0" y="0" z="0"/>
        </centerOfMassTransform>
        <linearDamping>0</linearDamping>
        <angularDamping>0</angularDamping>
        <gravity-factor>0</gravity-factor>
        <friction>0</friction>
        <rollingFriction>0</rollingFriction>
        <restitution>0</restitution>
    </bone>
    
    <bone name="NPC Belly">
        <mass>5</mass>
        <inertia x="5" y="5" z="5"/>
        <centerOfMassTransform>
            <basis x="0" y="0" z="0" w="1"/>
            <origin x="0" y="0" z="-1"/>
        </centerOfMassTransform>
        <linearDamping>0</linearDamping>
        <angularDamping>0</angularDamping>
        <gravity-factor>0</gravity-factor>
        <friction>0</friction>
        <rollingFriction>0</rollingFriction>
        <restitution>0</restitution>
    </bone>
    
    <generic-constraint bodyA="NPC Belly" bodyB="Belly">
        <frameInB>
            <basis x="0" y="0" z="0" w="1"/>
            <origin x="0" y="0" z="0"/>
        </frameInB>
        <useLinearReferenceFrameA>false</useLinearReferenceFrameA>
        <linearLowerLimit x="-0.1" y="-2" z="-3"/>
        <linearUpperLimit x="0.1" y="2" z="3"/>
        <angularLowerLimit x="0" y="-0.02" z="0"/>
        <angularUpperLimit x="0" y="0.02" z="0"/>
        <linearStiffness x="25" y="50" z="25"/>
        <angularStiffness x="3" y="3" z="3"/>
        <linearDamping x="2" y="2" z="2"/>
        <angularDamping x="2" y="2" z="2"/>
        <linearEquilibrium x="0" y="0" z="0"/>
        <angularEquilibrium x="0" y="0" z="0"/>
        <linearBounce x="0" y="0" z="0"/>
        <angularBounce x="0" y="0" z="0"/>
    </generic-constraint>  
    

 

 

If you want activate constants, you must first lock the bones , 

 

e.g. : You want to activate NPC L Thight and NPC R Tight , 

1) At the beginning of the file, you will find a list of bones 

 

Spoiler

Immagine.jpg.08d183a42947901e2a38758e803dfccb.jpg

 

Insert syntax <!--  --> at the beginning and end of the bones you want to use

 

Spoiler

Immagine.jpg.21ac994836a0e2e8161a9f288de5b61f.jpg

 

2) Scroll through the XML until you find the bones to activate and remove all Syntax

 

Spoiler

        <!-- <bone name="NPC L Thigh [LThg]"> -->
        <!-- <mass>0</mass> -->
        <!-- <inertia x="0" y="0" z="0"/> -->
        <!-- <centerOfMassTransform> -->
        <!-- <basis x="0" y="0" z="0" w="1"/> -->
        <!-- <origin x="0" y="0" z="0"/> -->
        <!-- </centerOfMassTransform> -->
        <!-- <linearDamping>0</linearDamping> -->
        <!-- <angularDamping>0</angularDamping> -->
        <!-- <friction>0</friction> -->
        <!-- <rollingFriction>0</rollingFriction> -->
        <!-- <restitution>0</restitution> -->
        <!-- </bone> -->

 

        <!-- <bone name="NPC L FrontThigh"> -->
        <!-- <mass>1</mass> -->
        <!-- <inertia x="2" y="2" z="2"/> -->
        <!-- <centerOfMassTransform> -->
            <!-- <basis x="2" y="0" z="0" w="1"/> -->
            <!-- <origin x="0" y="0" z="1"/> -->
        <!-- </centerOfMassTransform> -->
        <!-- <linearDamping>0.7</linearDamping> -->
        <!-- <angularDamping>0.9</angularDamping> -->
        <!-- <gravity-factor>0.7</gravity-factor> -->
        <!-- <friction>0.4</friction> -->
        <!-- <rollingFriction>0</rollingFriction> -->
        <!-- <restitution>0.4</restitution> -->
        <!-- </bone> -->

 

        <!-- <bone name="NPC R Thigh [RThg]"> -->
        <!-- <mass>0</mass> -->
        <!-- <inertia x="0" y="0" z="0"/> -->
        <!-- <centerOfMassTransform> -->
        <!-- <basis x="0" y="0" z="0" w="1"/> -->
        <!-- <origin x="0" y="0" z="0"/> -->
        <!-- </centerOfMassTransform> -->
        <!-- <linearDamping>0</linearDamping> -->
        <!-- <angularDamping>0</angularDamping> -->
        <!-- <friction>0</friction> -->
        <!-- <rollingFriction>0</rollingFriction> -->
        <!-- <restitution>0</restitution> -->
        <!-- </bone> -->

 

        <!-- <bone name="NPC R FrontThigh"> -->
        <!-- <mass>1</mass> -->
        <!-- <inertia x="2" y="2" z="2"/> -->
        <!-- <centerOfMassTransform> -->
            <!-- <basis x="2" y="0" z="0" w="1"/> -->
            <!-- <origin x="0" y="0" z="1"/> -->
        <!-- </centerOfMassTransform> -->
        <!-- <linearDamping>0.7</linearDamping> -->
        <!-- <angularDamping>0.9</angularDamping> -->
        <!-- <gravity-factor>0.7</gravity-factor> -->
        <!-- <friction>0.4</friction> -->
        <!-- <rollingFriction>0</rollingFriction> -->
        <!-- <restitution>0.4</restitution> -->
        <!-- </bone> -->

        <!-- <generic-constraint bodyA="NPC L FrontThigh" bodyB="NPC L Thigh [LThg]"> -->
        <!-- <frameInB> -->
        <!-- <basis x="0" y="0" z="0" w="1"/> -->
        <!-- <origin x="0" y="0" z="0"/> -->
        <!-- </frameInB> -->
        <!-- <useLinearReferenceFrameA>false</useLinearReferenceFrameA> -->
        <!-- <linearLowerLimit x="-2" y="-0.1" z="-2"/> -->
        <!-- <linearUpperLimit x="2" y="1" z="2"/> -->
        <!-- <angularLowerLimit x="-0" y="-0" z="-0.0"/> -->
        <!-- <angularUpperLimit x="0" y="0" z="0.0"/> -->
        <!-- <linearStiffness x="260" y="250" z="400"/> -->
        <!-- <angularStiffness x="0" y="0" z="0"/> -->
        <!-- <linearDamping x="1" y="2" z="1"/> -->
        <!-- <angularDamping x="0" y="0" z="0"/> -->
        <!-- <linearEquilibrium x="0.1" y="0.1" z="0.1"/> -->
        <!-- <angularEquilibrium x="0" y="0" z="0"/> -->
        <!-- <linearBounce x="0" y="0" z="0"/> -->
        <!-- <angularBounce x="0" y="0" z="0"/> -->
    <!-- </generic-constraint> -->

 

        <!-- <generic-constraint bodyA="NPC R FrontThigh" bodyB="NPC R Thigh [RThg]"> -->
        <!-- <frameInB> -->
        <!-- <basis x="0" y="0" z="0" w="1"/> -->
        <!-- <origin x="0" y="0" z="0"/> -->
        <!-- </frameInB> -->
        <!-- <useLinearReferenceFrameA>false</useLinearReferenceFrameA> -->
        <!-- <linearLowerLimit x="-2" y="-0.1" z="-2"/> -->
        <!-- <linearUpperLimit x="2" y="1" z="2"/> -->
        <!-- <angularLowerLimit x="-0" y="-0" z="-0.0"/> -->
        <!-- <angularUpperLimit x="0" y="0" z="0.0"/> -->
        <!-- <linearStiffness x="260" y="250" z="400"/> -->
        <!-- <angularStiffness x="0" y="0" z="0"/> -->
        <!-- <linearDamping x="1" y="2" z="1"/> -->
        <!-- <angularDamping x="0" y="0" z="0"/> -->
        <!-- <linearEquilibrium x="0.1" y="0.1" z="0.1"/> -->
        <!-- <angularEquilibrium x="0" y="0" z="0"/> -->
        <!-- <linearBounce x="0" y="0" z="0"/> -->
        <!-- <angularBounce x="0" y="0" z="0"/> -->
    <!-- </generic-constraint> -->
    
    
    

        <!-- <bone name="NPC L RearThigh"> -->
        <!-- <mass>1</mass> -->
        <!-- <inertia x="2" y="2" z="2"/> -->
        <!-- <centerOfMassTransform> -->
            <!-- <basis x="2" y="0" z="0" w="1"/> -->
            <!-- <origin x="0" y="0" z="1"/> -->
        <!-- </centerOfMassTransform> -->
        <!-- <linearDamping>0.7</linearDamping> -->
        <!-- <angularDamping>0.9</angularDamping> -->
        <!-- <gravity-factor>0.7</gravity-factor> -->
        <!-- <friction>0.4</friction> -->
        <!-- <rollingFriction>0</rollingFriction> -->
        <!-- <restitution>0.4</restitution> -->
        <!-- </bone> -->

        

        <!-- <bone name="NPC R RearThigh"> -->
        <!-- <mass>1</mass> -->
        <!-- <inertia x="2" y="2" z="2"/> -->
        <!-- <centerOfMassTransform> -->
            <!-- <basis x="2" y="0" z="0" w="1"/> -->
            <!-- <origin x="0" y="0" z="1"/> -->
        <!-- </centerOfMassTransform> -->
        <!-- <linearDamping>0.7</linearDamping> -->
        <!-- <angularDamping>0.9</angularDamping> -->
        <!-- <gravity-factor>0.7</gravity-factor> -->
        <!-- <friction>0.4</friction> -->
        <!-- <rollingFriction>0</rollingFriction> -->
        <!-- <restitution>0.4</restitution> -->
        <!-- </bone> -->

        <!-- <generic-constraint bodyA="NPC L RearThigh" bodyB="NPC L Thigh [LThg]"> -->
        <!-- <frameInB> -->
        <!-- <basis x="0" y="0" z="0" w="1"/> -->
        <!-- <origin x="0" y="0" z="0"/> -->
        <!-- </frameInB> -->
        <!-- <useLinearReferenceFrameA>false</useLinearReferenceFrameA> -->
        <!-- <linearLowerLimit x="-2" y="-0.1" z="-3"/> -->
        <!-- <linearUpperLimit x="2" y="1" z="3"/> -->
        <!-- <angularLowerLimit x="-0" y="-0" z="-0.0"/> -->
        <!-- <angularUpperLimit x="0" y="0" z="0.0"/> -->
        <!-- <linearStiffness x="60" y="250" z="400"/> -->
        <!-- <angularStiffness x="0" y="0" z="0"/> -->
        <!-- <linearDamping x="2" y="2" z="4"/> -->
        <!-- <angularDamping x="0" y="0" z="0"/> -->
        <!-- <linearEquilibrium x="0.1" y="0.1" z="0.1"/> -->
        <!-- <angularEquilibrium x="0" y="0" z="0"/> -->
        <!-- <linearBounce x="0" y="0" z="0"/> -->
        <!-- <angularBounce x="0" y="0" z="0"/> -->
    <!-- </generic-constraint> -->


        <!-- <generic-constraint bodyA="NPC R RearThigh" bodyB="NPC R Thigh [RThg]"> -->
        <!-- <frameInB> -->
        <!-- <basis x="0" y="0" z="0" w="1"/> -->
        <!-- <origin x="0" y="0" z="0"/> -->
        <!-- </frameInB> -->
        <!-- <useLinearReferenceFrameA>false</useLinearReferenceFrameA> -->
        <!-- <linearLowerLimit x="-2" y="-0.1" z="-3"/> -->
        <!-- <linearUpperLimit x="2" y="1" z="3"/> -->
        <!-- <angularLowerLimit x="-0" y="-0" z="-0.0"/> -->
        <!-- <angularUpperLimit x="0" y="0" z="0.0"/> -->
        <!-- <linearStiffness x="60" y="250" z="400"/> -->
        <!-- <angularStiffness x="0" y="0" z="0"/> -->
        <!-- <linearDamping x="2" y="2" z="4"/> -->
        <!-- <angularDamping x="0" y="0" z="0"/> -->
        <!-- <linearEquilibrium x="0.1" y="0.1" z="0.1"/> -->
        <!-- <angularEquilibrium x="0" y="0" z="0"/> -->
        <!-- <linearBounce x="0" y="0" z="0"/> -->
        <!-- <angularBounce x="0" y="0" z="0"/> -->
    <!-- </generic-constraint> -->

 

At the end, you will have to read something like this

 

Spoiler

Immagine.jpg.c1cb7e2e9893fc1e73b871d05fdea9a2.jpg

 

 

When you have identified the various constants, simply remove all  the <!--  -- > syntaxes.

If , shaking is generated on the body, just reduce the values of the constants  , 

e.g <linearStiffness x="60" y="250" z="400"/> change the values, removing the digits

string will become  <linearStiffness x="6" y="25" z="40"/> 

 

As an aid, you can check the log hdtSkinnedMeshPhysics you will find in Skyrim data\SKSE\Plugins

 

If , you read this you can ignore it, or, by reading the number of the given string, open the XML and enter the syntax <!--   -->

 

Spoiler

Immagine.jpg.5f00c27445673fd02f0b1eb32b4e7193.jpg

 

Spoiler

Immagine.jpg.3794b8ac82420affbf5c6be0783b608c.jpg

 

 

Keep in mind that each time the game is started, the log will reset itself and the errors will be deleted . 

Posted
8 hours ago, Little Moon said:

I'm assuming you had to learn this on your own as well.  Any specific reference material or tutorials?

 

There is no documentation in English that I know of. No reliable ones anyways. It took me maybe a week back in the day to map out SMP and create documentation for it. Testing each value one by one and making notes. Later (in the days of SE) when the source code became public I was able to map out some of the questionmarks that remained.

 

There is also no versioning in SMP that I know of. Meaning you might have 2 different SMP dlls that function slightly (or sometimes drasticly) different, but there is no obvious way to tell the difference by just looking at the file. This is why when I started my document, I created a versioning system: LE1, LE2, LE3, SE1, SE2, SE3, SE4 (where SE4 was a revision I made myself). These version numbers I linked to MD5 checksums of the dll, meaning by calculating that number of any given SMP dll I can tell which version it is, or if it's a new dll. You will probably only have to concern yourself with one version for now, but I'd still recommend that if you do document your findings you consider what your documentation will look like when you find a new version of SMP.

 

And no I will not publish this documentation, because it's not directly based on facts but rather personal observations. Observations that weren't scientifically tested. While the document could be useful, it could also create a lot of confusion. You can however ask me specific questions and I'll try to answer them.

Posted

Thanks, you two.  I really appreciate it.

 

I ended up dropping COCO CBBE in the end and switched to BHUNP.  I'm sure I'll have some issues with it too.  We'll see when I get there.

Posted
8 hours ago, Little Moon said:

I ended up dropping COCO CBBE in the end and switched to BHUNP

The problem is not with the body type but with the files in use 

Posted (edited)

The easiest way to get belly bulge for me is use CBBE 3BA. Choose the option CBPC for belly and SMP for everything during installation. And that is it. 

Edited by assassin394
Posted

So, now I'm testing BHUNP in-game with collisions.  Similarly, everything appears to work great except for the belly during certain sex animations.  It doesn't appear to bulge or move.  Following the examples and tips above, I am looking at the xml files now.  I have tweaked the inis for CBPC already.

 

Spoiler

image.png.bf1f777e32d1b48a9e642e07df60ed3f.png

 

If I'm wanting to belly to move with every thrust to simulate bulging penetration, is the linear and angular damping, or is it the friction settings?

Posted
1 hour ago, Little Moon said:

is the linear and angular damping, or is it the friction settings?

 

Neither, try stiffness instead.

Posted
4 hours ago, Little Moon said:

If I'm wanting to belly to move with every thrust to simulate bulging penetration, is the linear and angular damping, or is it the friction settings?

 

Spoiler

Immagine.jpg.f1e8745bd4ae6ec71f072200b96cc272.jpg

 

  • 2 weeks later...
Posted

So, I'm back...  Yeah.  I also feel really stupid and likely that I wasted time for you guys.

 

In short: I realized I was a dumbass and confusing HDT and CBPC.

 

In my case, I have to tweak the CBPC config files for belly and/or each individual actor's/critter's ini file to tweak bulge/collision.  Now I just have to figure out what setting specifically do it.  Troll settings, for example:

 

Spoiler

1.png.15f0806c749f65ba2d051a59e7e0f1be.png     2.png.d7f515ad6ca97176354ef8a0f34ba9aa.png

 

Fortunately, there is a way (apparently) to update settings live in-game w/o having to restart the game each time.

  • 1 month later...
Posted
On 2/16/2023 at 9:44 AM, Little Moon said:

So, I'm back...  Yeah.  I also feel really stupid and likely that I wasted time for you guys.

 

In short: I realized I was a dumbass and confusing HDT and CBPC.

 

 

So are you using CBPC instead of SMP? In CBPC, belly collision works fine for me but doesn't work at all in SMP mode.

Posted (edited)

The CBPC preset files for creatures that come with ABC have a major flaw in them in that, they have non-functional values strewn all over the place. For starters, the BellyBulge values do nothing in the troll's files. The only ones that do are the ones defined in the file that applies to your character. That file may for instance start like this:

[Options]
Conditions = IsFemale()

 

Edit: As for reloading configs during runtime, type: cbpc reload

 

Edit again: As with SMP, I've also created documentation for CBPC but also again it is based on my own findings and I'm not going to release it because someone will get butthurt if there's a mistake in it. Ask me specific questions and I'll try to fill the gaps.

Edited by traison

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...