Jump to content

Prepacked HDT-SM - HDT Skinned Mesh Physics with Modding Guide


Recommended Posts

ouch...  So it could be that I'm using the wrong OpenCL?  That kinda sucks.  I know that my HD7990 might not be the newest, but for pure muscle it's great.  I'll look into getting OCL2.0 tommorow.

 

You need the new SMP as well.  Old SMP works with OpenCL1.2 and the new SMP works only with OpenCL2.0 or you will CTD.  Use the links from HydrogensaysHDT's 3DM page in my above post.

 

Heavy CPU load, chances are you are using old, now obsolete SMP prior to 5/22.

CTD, chances are you are using post 5/22 SMP with OpenCL1.2 instead of OpenCL2.0.

Link to comment

It's also worth noting, that naturally the more things are collision enabled with each other, the more calculating power is required. Like say, you enable every bone in the skeleton to be collision enabled with the boobs, and then that has to be calculated for all actors currently loaded, the CPU power required would be rather hefty, if it works at all. On my somewhat modest AMD FX 4130 Quad, even just hands, gloves and Schlong collision activated with breasts and vagina causes some noticable performance impact, even with the new HDTSM, compared to simply disabling all collision.

 

The best cost-benefit ratio I've personally found is to enable breast-hands, breast-gloves, breast-breast and buttcheek-buttcheek. Essentially what I'm trying to say here is that based on my experience with it thus far, that goes for HDTPE as well, collision should only be enabled where you really, really want it to happen. Although my machine is somewhat modest, so perhaps you need not worry about any of it if your hardware could do cancer research on the side while playing Skyrim and still be bored to tears :)

Link to comment

Oh I have absolutely NO worries when it comes to raw computing power.  Intel i7 3770K CPU O.C. @4.2 GHz, AMD Radeon HD 7990 GPU @ 1100 MHz & 6Gb Vram, 32Gb DDR3 @1600MHz, and twin 840 Pro SSD's in Raid-0.  I have all the muscle I need to run anything and everything in Skyrim.  The program and mods are my limiting factor.

 

Edit: I really don't want to have to download this Chinese program just to get the files...  baiduyuguanja.exe?  fuck...

Double Edit: Just went through getting the files from the baidu site.  Gonna try out the .DLL soon.

Tripple Edit: Fuck yeah seaking!  Got it working!  Thanks for the help guys!

Link to comment

I'm really glad that I've got this working now.  Thanks for all your help guys!  I do have one final question though.  Which XML do I modify to change the bounce on my character?  The butt is looking a bit floppy and twitching a lot.  I want to increase it's firmness, and maybe the breasts just a touch as well.  I just need to know which values to modify, and which XML's have the values I need to change.  I'm using Bodyslide2 with the CBBEHDT body type and some "quite full" adjustments with racemenu sliders.  I like 'em curvy.  :P

Link to comment

I'm really glad that I've got this working now.  Thanks for all your help guys!  I do have one final question though.  Which XML do I modify to change the bounce on my character?  The butt is looking a bit floppy and twitching a lot.  I want to increase it's firmness, and maybe the breasts just a touch as well.  I just need to know which values to modify, and which XML's have the values I need to change.  I'm using Bodyslide2 with the CBBEHDT body type and some "quite full" adjustments with racemenu sliders.  I like 'em curvy.  :P

 

If your using the .xml packaged by t3h0th3r then it should say baseshape.xml is the one for cbbe. If you use the default .xml's then cbbe-tbbp. If you have collision on body the .xml should have baseshape as the shape name where your collisions are setup which is what cbbe NiTriShape name should be in nifscope. If your body does not have that name in nifscope then you have to get the .xml with your shape name or make one. You can also just look in your defaultBBPs.xml for your bodies <map shape= which should be baseshape that is your .xml you need to change.

Link to comment

Well guys, for some reason I can't get the new Version running. I had an old version and decided to update it now. But no matter what I do, if I try to use the new dll it simply doesn't work. It doesn't crate a hdtSkinnedMeshPhysics.log, so it seems that isn't even trying to load at all. I also tried with different config files (my own as well as those provided in this thread), but still no difference. All works perfectly fine as long as I use the old dll.

 

Since I use Intel as well as nvidia I disabled opencl. Do I need to change some settings somewhere to make it work? Or do I need to put the dll into a different folder than it's used to be?

 

Just in case I'll drop my configs.xml in here as well, but I didn't touch it at all.

 

<?xml version="1.0" encoding="utf-8"?>

<configs>
    <opencl>
        <!--warning : not finish yet-->
        <!--warning : this can be slower because of the bad PCI-E transfer and bad schedule-->
        <enable>false</enable>
        <platformID>0</platformID>
        <numQueue>16</numQueue>
    </opencl>
    <solver>
        <numIterations>10</numIterations>
        <groupIterations>1</groupIterations>
        <groupEnableMLCP>true</groupEnableMLCP>
        <erp>0.2</erp>
        <min-fps>60</min-fps>
    </solver>
</configs>

Edit:

I've got another question. After toying around a bit more with it (still using the old version) I came to following conclusion:

If you want to apply it's physic to an armor/piece/whateva you have to options to do so:

 

1. you can add a NiStringExtraData directly into the nif (similiar to HDT PE) and point to a specific xml.

This way you can use all the bones used in the nif, but you can only use a single xml, using NiStringsExtraData for adding multiple xmls won't work at all. (Adding multiple NiStringExtraData Nodes doesn't seem to work either)

 

2. You can add physics by adding the shape name of at least one shape used in the nif into defaultBBPs.xml. All shapes will then use the same physics for specified bones in the loaded xmls and it seems that you can also use multiple xmls as long as you have multiple shapes in which you can trigger the loadings, but on the downside you have to add them manually into the xml if you download new armors as well as delete them again. And you cannot use bones, that aren't defined in your skeleton. Custom bones inside the nif won't be recognized unlike the first option. Also: If you have defined a specific xml via NiStringExtraData, this option won't work at all. (basicly you can choose only one option)

 

 

 

My idea is to add custom physics (i.e. skirt physics) into armor, while also using default physics for always-used parts like breasts. So basicly it will use the same breast physics for everything else by loading the same file, instead of having to define the same physics over and over again for every single armor while also having custom physics for skirts, or accessoires and stuff.

 

So finally my question: anyone got an idea how to do it?

Link to comment

-snip-

... Your idea is how things work in the first place. "Regular" .xml's for handling the body physics and such, and then any HDT outfits (by which i mean, stuff like skirts and the like, not just breasts and butt) have their own individual .xml's for those HDT bits as needed (sometimes sharing one if the shapes are similar). PE and SMP are highly modular.

Link to comment

 

... Your idea is how things work in the first place. "Regular" .xml's for handling the body physics and such, and then any HDT outfits (by which i mean, stuff like skirts and the like, not just breasts and butt) have their own individual .xml's for those HDT bits as needed (sometimes sharing one if the shapes are similar). PE and SMP are highly modular.

 

 

I may be ignorant (or simply blind), but I never saw any armor approaching it the way  I described above. As mentioned in my previous post, I don't know of any possibility to combine armor specific physics (i.e. a ribbon) that has it's own unique bones, not present in your standard skeleton that takes with pre-defined physics based for standart stuff like breast. All examples I have looked into didn't work that way either. Instead they always re-defined the same stuff in their unique xml instead of refering to the default xmls.

 

Same with HDT-PE, while I do know how to implement multiple xmls into one model, I ever only saw maybe 2 armors that were using the default xmls WITH unique xmls rather than just going for only the defaults or re-defining them in their unique ones.

 

So basicly all armors for both HDT Plugins I've found so far either used only the default xmls or implemented their unique xmls without using the defaults at all.

 

 

 

If I am just blind or oblivious to something, please go ahead and explain it to me. As far as I am concerned, both HDT PE as well as HDT SMP don't look too "highly modular" to me as you are describing it.

Link to comment

Well guys, for some reason I can't get the new Version running. I had an old version and decided to update it now. But no matter what I do, if I try to use the new dll it simply doesn't work. It doesn't crate a hdtSkinnedMeshPhysics.log, so it seems that isn't even trying to load at all. I also tried with different config files (my own as well as those provided in this thread), but still no difference. All works perfectly fine as long as I use the old dll.

 

Since I use Intel as well as nvidia I disabled opencl. Do I need to change some settings somewhere to make it work? Or do I need to put the dll into a different folder than it's used to be?

 

Just in case I'll drop my configs.xml in here as well, but I didn't touch it at all.

<?xml version="1.0" encoding="utf-8"?>

<configs>
    <opencl>
        <!--warning : not finish yet-->
        <!--warning : this can be slower because of the bad PCI-E transfer and bad schedule-->
        <enable>false</enable>
        <platformID>0</platformID>
        <numQueue>16</numQueue>
    </opencl>
    <solver>
        <numIterations>10</numIterations>
        <groupIterations>1</groupIterations>
        <groupEnableMLCP>true</groupEnableMLCP>
        <erp>0.2</erp>
        <min-fps>60</min-fps>
    </solver>
</configs>

Edit:

I've got another question. After toying around a bit more with it (still using the old version) I came to following conclusion:

If you want to apply it's physic to an armor/piece/whateva you have to options to do so:

 

1. you can add a NiStringExtraData directly into the nif (similiar to HDT PE) and point to a specific xml.

This way you can use all the bones used in the nif, but you can only use a single xml, using NiStringsExtraData for adding multiple xmls won't work at all. (Adding multiple NiStringExtraData Nodes doesn't seem to work either)

 

2. You can add physics by adding the shape name of at least one shape used in the nif into defaultBBPs.xml. All shapes will then use the same physics for specified bones in the loaded xmls and it seems that you can also use multiple xmls as long as you have multiple shapes in which you can trigger the loadings, but on the downside you have to add them manually into the xml if you download new armors as well as delete them again. And you cannot use bones, that aren't defined in your skeleton. Custom bones inside the nif won't be recognized unlike the first option. Also: If you have defined a specific xml via NiStringExtraData, this option won't work at all. (basicly you can choose only one option)

 

 

 

My idea is to add custom physics (i.e. skirt physics) into armor, while also using default physics for always-used parts like breasts. So basicly it will use the same breast physics for everything else by loading the same file, instead of having to define the same physics over and over again for every single armor while also having custom physics for skirts, or accessoires and stuff.

 

So finally my question: anyone got an idea how to do it?

 

Did you install the intel runtimes for opencl 2.0? The newest plugin did not work for me either same as you know errors or crashes but after I installed the runtimes for opencl 2.0 it started working. My 760's isn't supported for 2.0 either but the runtimes still worked to get things moving. I also don't use the disable config.xml and everything still works.

 

Also with HDT-SMP you don't have to link your .xml's in your .nif file just to your defaultBBP's.xml. So as long as your armors body's nitrishape is a universal name like baseshape. Which would be your default body physics. Then have second nitrishape for your skirt to whatever name you want like skirt or something. You will be able to have just that but when ppl start using different names for the body is when you need multiple xml just for body physics.

Link to comment

 

Well guys, for some reason I can't get the new Version running. I had an old version and decided to update it now. But no matter what I do, if I try to use the new dll it simply doesn't work. It doesn't crate a hdtSkinnedMeshPhysics.log, so it seems that isn't even trying to load at all. I also tried with different config files (my own as well as those provided in this thread), but still no difference. All works perfectly fine as long as I use the old dll.

 

Since I use Intel as well as nvidia I disabled opencl. Do I need to change some settings somewhere to make it work? Or do I need to put the dll into a different folder than it's used to be?

 

Just in case I'll drop my configs.xml in here as well, but I didn't touch it at all.

<?xml version="1.0" encoding="utf-8"?>

<configs>
    <opencl>
        <!--warning : not finish yet-->
        <!--warning : this can be slower because of the bad PCI-E transfer and bad schedule-->
        <enable>false</enable>
        <platformID>0</platformID>
        <numQueue>16</numQueue>
    </opencl>
    <solver>
        <numIterations>10</numIterations>
        <groupIterations>1</groupIterations>
        <groupEnableMLCP>true</groupEnableMLCP>
        <erp>0.2</erp>
        <min-fps>60</min-fps>
    </solver>
</configs>

Edit:

I've got another question. After toying around a bit more with it (still using the old version) I came to following conclusion:

If you want to apply it's physic to an armor/piece/whateva you have to options to do so:

 

1. you can add a NiStringExtraData directly into the nif (similiar to HDT PE) and point to a specific xml.

This way you can use all the bones used in the nif, but you can only use a single xml, using NiStringsExtraData for adding multiple xmls won't work at all. (Adding multiple NiStringExtraData Nodes doesn't seem to work either)

 

2. You can add physics by adding the shape name of at least one shape used in the nif into defaultBBPs.xml. All shapes will then use the same physics for specified bones in the loaded xmls and it seems that you can also use multiple xmls as long as you have multiple shapes in which you can trigger the loadings, but on the downside you have to add them manually into the xml if you download new armors as well as delete them again. And you cannot use bones, that aren't defined in your skeleton. Custom bones inside the nif won't be recognized unlike the first option. Also: If you have defined a specific xml via NiStringExtraData, this option won't work at all. (basicly you can choose only one option)

 

 

 

My idea is to add custom physics (i.e. skirt physics) into armor, while also using default physics for always-used parts like breasts. So basicly it will use the same breast physics for everything else by loading the same file, instead of having to define the same physics over and over again for every single armor while also having custom physics for skirts, or accessoires and stuff.

 

So finally my question: anyone got an idea how to do it?

 

Did you install the intel runtimes for opencl 2.0? The newest plugin did not work for me either same as you know errors or crashes but after I installed the runtimes for opencl 2.0 it started working. My 760's isn't supported for 2.0 either but the runtimes still worked to get things moving. I also don't use the disable config.xml and everything still works.

 

Also with HDT-SMP you don't have to link your .xml's in your .nif file just to your defaultBBP's.xml. So as long as your armors body's nitrishape is a universal name like baseshape. Which would be your default body physics. Then have second nitrishape for your skirt to whatever name you want like skirt or something. You will be able to have just that but when ppl start using different names for the body is when you need multiple xml just for body physics.

 

Well thanks, it does work for me now.

About HDT-SMP thought: It's still no solution to my problem. As mentioned in my first post, xml loaded throught defaultBPPs.xml will only work on your default skeleton, custom bones included into your custom armor don't work.

And on a side note: I don't think its realistic to have uniform NiTriShape names, so i wouldnt call having to add multiple Shape names and xmls into defaultBPPs.xml handy.

Link to comment

 

 

Well guys, for some reason I can't get the new Version running. I had an old version and decided to update it now. But no matter what I do, if I try to use the new dll it simply doesn't work. It doesn't crate a hdtSkinnedMeshPhysics.log, so it seems that isn't even trying to load at all. I also tried with different config files (my own as well as those provided in this thread), but still no difference. All works perfectly fine as long as I use the old dll.

 

Since I use Intel as well as nvidia I disabled opencl. Do I need to change some settings somewhere to make it work? Or do I need to put the dll into a different folder than it's used to be?

 

Just in case I'll drop my configs.xml in here as well, but I didn't touch it at all.

<?xml version="1.0" encoding="utf-8"?>

<configs>
    <opencl>
        <!--warning : not finish yet-->
        <!--warning : this can be slower because of the bad PCI-E transfer and bad schedule-->
        <enable>false</enable>
        <platformID>0</platformID>
        <numQueue>16</numQueue>
    </opencl>
    <solver>
        <numIterations>10</numIterations>
        <groupIterations>1</groupIterations>
        <groupEnableMLCP>true</groupEnableMLCP>
        <erp>0.2</erp>
        <min-fps>60</min-fps>
    </solver>
</configs>

Edit:

I've got another question. After toying around a bit more with it (still using the old version) I came to following conclusion:

If you want to apply it's physic to an armor/piece/whateva you have to options to do so:

 

1. you can add a NiStringExtraData directly into the nif (similiar to HDT PE) and point to a specific xml.

This way you can use all the bones used in the nif, but you can only use a single xml, using NiStringsExtraData for adding multiple xmls won't work at all. (Adding multiple NiStringExtraData Nodes doesn't seem to work either)

 

2. You can add physics by adding the shape name of at least one shape used in the nif into defaultBBPs.xml. All shapes will then use the same physics for specified bones in the loaded xmls and it seems that you can also use multiple xmls as long as you have multiple shapes in which you can trigger the loadings, but on the downside you have to add them manually into the xml if you download new armors as well as delete them again. And you cannot use bones, that aren't defined in your skeleton. Custom bones inside the nif won't be recognized unlike the first option. Also: If you have defined a specific xml via NiStringExtraData, this option won't work at all. (basicly you can choose only one option)

 

 

 

My idea is to add custom physics (i.e. skirt physics) into armor, while also using default physics for always-used parts like breasts. So basicly it will use the same breast physics for everything else by loading the same file, instead of having to define the same physics over and over again for every single armor while also having custom physics for skirts, or accessoires and stuff.

 

So finally my question: anyone got an idea how to do it?

 

Did you install the intel runtimes for opencl 2.0? The newest plugin did not work for me either same as you know errors or crashes but after I installed the runtimes for opencl 2.0 it started working. My 760's isn't supported for 2.0 either but the runtimes still worked to get things moving. I also don't use the disable config.xml and everything still works.

 

Also with HDT-SMP you don't have to link your .xml's in your .nif file just to your defaultBBP's.xml. So as long as your armors body's nitrishape is a universal name like baseshape. Which would be your default body physics. Then have second nitrishape for your skirt to whatever name you want like skirt or something. You will be able to have just that but when ppl start using different names for the body is when you need multiple xml just for body physics.

 

Well thanks, it does work for me now.

About HDT-SMP thought: It's still no solution to my problem. As mentioned in my first post, xml loaded throught defaultBPPs.xml will only work on your default skeleton, custom bones included into your custom armor don't work.

And on a side note: I don't think its realistic to have uniform NiTriShape names, so i wouldnt call having to add multiple Shape names and xmls into defaultBPPs.xml handy.

 

 

Idk about custom bones. I was just referring to not having to use multi xml for one thing like body physics on the armors. The defaultbbp's.xml for HDT-SMP is not used like HDT-PE was its just a reference to link all xml for the plugin. Aleast that is how I've see how it works anyway.

 

Link to comment

Jep, that's exactly what I managed to find out. If you don't link to a custom xml inside the nif, it will look up all NiTriShape names for matches inside defaultBPPs.xml and if they find a match, it loads its corresponding xml. this way you can load as many xmls as you have NiTriShapes inside your nif, but it will only work with bones defined in your skeleton.nif.

I tried to convert HDT Tails into HDT-SMP. The tails have bonsed named from "HDT TailBone01" - "HDT TailBone09" (sometimes more, sometimes less, but 9 seem to be most common). While the skeleton does have "HDT TailBone01", "HDT TailBone01.1", "HDT TailBone01.2", "HDT TailBone01.3" and starts again with "HDT TailBone02" up to "HDT TailBone05.4". That means that if I dont change the names of the bones inside the nif, it will only load load 5 out of 9 bones, and bone 6-9 won't have any physics.

On the other hand, if I load the same xml directly via pointing on it through my nif file, all 9 bones will work perfectly fine without renaming them. But I won't be able to load more than one single xml.

 

In case of tails it is no big problem, because they don't share any physics with any other models, only between themselves, so there would be no drawback if I just point to a custom nif for every nif file. But in cases of armors, where you might share the same breast, or any other physics, it will be quite a problem. Because you have to choose between custom physics unique to the model (like ribbons, longer skirts, etc) or uniform breast and butt physics for all armors.

And the fact that it is triggered via shape names might also be quite a hassle because you would need to enforce a standart naming system on all modders, which isn't realistic, combined with possible manual edits of defaultBPPs.xml

Link to comment

Jep, that's exactly what I managed to find out. If you don't link to a custom xml inside the nif, it will look up all NiTriShape names for matches inside defaultBPPs.xml and if they find a match, it loads its corresponding xml. this way you can load as many xmls as you have NiTriShapes inside your nif, but it will only work with bones defined in your skeleton.nif.

I tried to convert HDT Tails into HDT-SMP. The tails have bonsed named from "HDT TailBone01" - "HDT TailBone09" (sometimes more, sometimes less, but 9 seem to be most common). While the skeleton does have "HDT TailBone01", "HDT TailBone01.1", "HDT TailBone01.2", "HDT TailBone01.3" and starts again with "HDT TailBone02" up to "HDT TailBone05.4". That means that if I dont change the names of the bones inside the nif, it will only load load 5 out of 9 bones, and bone 6-9 won't have any physics.

On the other hand, if I load the same xml directly via pointing on it through my nif file, all 9 bones will work perfectly fine without renaming them. But I won't be able to load more than one single xml.

 

In case of tails it is no big problem, because they don't share any physics with any other models, only between themselves, so there would be no drawback if I just point to a custom nif for every nif file. But in cases of armors, where you might share the same breast, or any other physics, it will be quite a problem. Because you have to choose between custom physics unique to the model (like ribbons, longer skirts, etc) or uniform breast and butt physics for all armors.

And the fact that it is triggered via shape names might also be quite a hassle because you would need to enforce a standart naming system on all modders, which isn't realistic, combined with possible manual edits of defaultBPPs.xml

 

I was just looking at a outfit i got from 3dmgame that is hdt-smp and it looks like she has custom bone in her xml. They may not be idk but maybe if you link the bone like she does it in there maybe it will work. http://bbs.3dmgame.com/thread-4663510-1-3.html

 

So the xml setup my work for what your trying atleast I hope if not Idk.

 

 

<system xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="description.xsd">

  <per-triangle-shape name="VirtualGround">

    <margin>0.5</margin>

    <prenetration>10</prenetration>

    <priority>-2147483648</priority>

    <tag>ground</tag>

  </per-triangle-shape>

  <bone name="NPC L PreBreast">

  <mass>0.000000</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 PreBreast">

  <mass>0.000000</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 Breast">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="2" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<bone name="NPC R Breast">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="2" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<bone name="NPC L Breast01">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<bone name="NPC R Breast01">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<generic-constraint bodyA="NPC L Breast" bodyB="NPC L PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="0" y="-2" z="-10"/>

  <linearUpperLimit x="0" y="2" z="10"/>

  <angularLowerLimit x="0" y="-0.1" z="-0.5"/>

  <angularUpperLimit x="0" y="0.1" z="0.5"/>

  <linearStiffness x="0" y="0" z="246.74"/>

  <angularStiffness x="200" y="0" z="0"/>

  <linearDamping x="0" y="0" z="0.4674"/>

  <angularDamping x="0" y="0" z="0"/>

  <linearEquilibrium x="0" y="0" z="-4"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<generic-constraint bodyA="NPC R Breast" bodyB="NPC R PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="0" y="-2" z="-10"/>

  <linearUpperLimit x="0" y="2" z="10"/>

  <angularLowerLimit x="0" y="-0.1" z="-0.5"/>

  <angularUpperLimit x="0" y="0.1" z="0.5"/>

  <linearStiffness x="0" y="0" z="246.74"/>

  <angularStiffness x="200" y="0" z="0"/>

  <linearDamping x="0" y="0" z="0.4674"/>

  <angularDamping x="0" y="0" z="0"/>

  <linearEquilibrium x="0" y="0" z="-4"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<generic-constraint bodyA="NPC L Breast01" bodyB="NPC L PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="-10" y="-1" z="-5"/>

  <linearUpperLimit x="10" y="1" z="1"/>

  <angularLowerLimit x="0" y="0" z="-0.2"/>

  <angularUpperLimit x="0" y="0" z="0.2"/>

  <linearStiffness x="246.74" y="246.74" z="246.74"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="0.4674" y="2.4674" z="2.4674"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="-2"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<generic-constraint bodyA="NPC R Breast01" bodyB="NPC R PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="-10" y="-1" z="-5"/>

  <linearUpperLimit x="10" y="1" z="1"/>

  <angularLowerLimit x="0" y="0" z="-0.2"/>

  <angularUpperLimit x="0" y="0" z="0.2"/>

  <linearStiffness x="246.74" y="246.74" z="246.74"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="0.4674" y="2.4674" z="2.4674"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="-2"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<bone name="NPC L PreButt">

  <mass>0.000000</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 PreButt">

  <mass>0.000000</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 Butt">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

 

<bone name="NPC R Butt">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<generic-constraint bodyA="NPC L Butt" bodyB="NPC L PreButt">

  <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="-2" z="-2"/>

  <linearUpperLimit x="2" y="2" z="2"/>

  <angularLowerLimit x="0" y="0" z="0"/>

  <angularUpperLimit x="0" y="0" z="0"/>

  <linearStiffness x="438.649109" y="438.649109" z="438.649109"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="4.386491" y="4.386491" z="4.386491"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="3"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.7" y="0.7" z="0.7"/>

    <angularBounce x="0.7" y="0.7" z="0.7"/>

</generic-constraint>

<generic-constraint bodyA="NPC R Butt" bodyB="NPC R PreButt">

  <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="-2" z="-2"/>

  <linearUpperLimit x="2" y="2" z="2"/>

  <angularLowerLimit x="0" y="0" z="0"/>

  <angularUpperLimit x="0" y="0" z="0"/>

  <linearStiffness x="438.649109" y="438.649109" z="438.649109"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="4.386491" y="4.386491" z="4.386491"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="3"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.7" y="0.7" z="0.7"/>

    <angularBounce x="0.7" y="0.7" z="0.7"/>

</generic-constraint>

 

<per-triangle-shape name="UNP TM">

  <margin>0</margin>

  <priority>0</priority>

  <prenetration>1</prenetration>

  <tag>body</tag>

  <no-collide-with-tag>body</no-collide-with-tag>

  <no-collide-with-tag>ground</no-collide-with-tag>

  <weight-threshold bone="NPC L Breast">0.1</weight-threshold>

  <weight-threshold bone="NPC R Breast">0.1</weight-threshold>

  <weight-threshold bone="NPC L Breast01">0.1</weight-threshold>

  <weight-threshold bone="NPC R Breast01">0.1</weight-threshold>

</per-triangle-shape>

 

<bone-default>

  <margin-multiplier>0.1</margin-multiplier>

</bone-default>

 

<bone name="SR0"/>

<bone name="SL0"/>

<bone name="XFL0"/>

<bone name="XFR0"/>

<bone name="XBL0"/>

<bone name="XBR0"/>

 

<bone-default>

    <mass>0.1</mass>

    <inertia x="20" y="20" z="20"/>

    <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-default>

 

  <bone-default>

  <margin-multiplier>0.2</margin-multiplier>

</bone-default>

 

<bone name="SR1"/>

<bone name="SL1"/>

 

<bone-default>

    <mass>3</mass>

    <inertia x="20" y="20" z="20"/>

    <centerOfMassTransform>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </centerOfMassTransform>

    <linearDamping>0.5</linearDamping>

    <angularDamping>0.5</angularDamping>

    <friction>0</friction>

    <rollingFriction>0</rollingFriction>

    <restitution>0</restitution>

  </bone-default>

 

<bone name="XFL1"/>

<bone name="XFR1"/>

<bone name="XBL1"/>

<bone name="XBR1"/>

 

<bone-default>

  <margin-multiplier>1.0</margin-multiplier>

</bone-default>

 

<bone-default>

    <mass>3</mass>

    <inertia x="20" y="20" z="20"/>

    <centerOfMassTransform>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </centerOfMassTransform>

    <linearDamping>0.5</linearDamping>

    <angularDamping>0.5</angularDamping>

    <friction>0</friction>

    <rollingFriction>0</rollingFriction>

    <restitution>0</restitution>

  </bone-default>

 

<bone name="SR2"/>

<bone name="SL2"/>

 

<bone-default>

    <mass>3</mass>

    <inertia x="20" y="20" z="20"/>

    <centerOfMassTransform>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </centerOfMassTransform>

    <linearDamping>0.5</linearDamping>

    <angularDamping>0.5</angularDamping>

    <friction>0</friction>

    <rollingFriction>0</rollingFriction>

    <restitution>0</restitution>

  </bone-default>

 

<bone name="XFL2"/>

<bone name="XFR2"/>

<bone name="XBL2"/>

<bone name="XBR2"/>

 

<bone name="XFL3"/>

<bone name="XFR3"/>

<bone name="XBL3"/>

<bone name="XBR3"/>

 

<bone name="XFL4"/>

<bone name="XFR4"/>

<bone name="XBL4"/>

<bone name="XBR4"/>

 

<bone name="XFL5"/>

<bone name="XFR5"/>

<bone name="XBL5"/>

<bone name="XBR5"/>

 

<bone name="XFL6"/>

<bone name="XFR6"/>

<bone name="XBL6"/>

<bone name="XBR6"/>

 

<bone name="XFL7"/>

<bone name="XFR7"/>

<bone name="XBL7"/>

<bone name="XBR7"/>

 

<bone name="XFL8"/>

<bone name="XFR8"/>

<bone name="XBL8"/>

<bone name="XBR8"/>

 

<generic-constraint-default>

    <frameInB>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </frameInB>

    <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

    <linearLowerLimit x="0" y="0" z="0"/>

    <linearUpperLimit x="0" y="0" z="0"/>

    <angularLowerLimit x="-0.5" y="-0.09" z="-0.5"/>

    <angularUpperLimit x="0.5" y="0.5" z="0.09"/>

    <linearStiffness x="0" y="0" z="0"/>

    <angularStiffness x="0" y="0" z="0"/>

    <linearDamping x="0" y="0" z="0"/>

    <angularDamping x="0" y="0" z="0"/>

    <linearEquilibrium x="0" y="0" z="0"/>

    <angularEquilibrium x="0" y="0" z="0"/>

  </generic-constraint-default>

 

  <generic-constraint bodyA="SR1" bodyB="SR0"/>

 

  <generic-constraint bodyA="SL1" bodyB="SL0"/>

 

  <generic-constraint-default>

    <frameInB>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="-3" y="0" z="0"/>

    </frameInB>

    <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

    <linearLowerLimit x="0" y="0" z="0"/>

    <linearUpperLimit x="0" y="0" z="0"/>

    <angularLowerLimit x="-0.5" y="-0.5" z="-0.5"/>

    <angularUpperLimit x="0.5" y="0.5" z="0.5"/>

    <linearStiffness x="0" y="0" z="0"/>

    <angularStiffness x="0" y="0" z="0"/>

    <linearDamping x="0" y="0" z="0"/>

    <angularDamping x="0" y="0" z="0"/>

    <linearEquilibrium x="0" y="0" z="0"/>

    <angularEquilibrium x="0" y="0" z="0"/>

  </generic-constraint-default>

 

  <generic-constraint bodyA="SR2" bodyB="SR1"/>

 

  <generic-constraint bodyA="SL2" bodyB="SL1"/>

 

  <generic-constraint-default>

    <frameInB>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </frameInB>

    <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

    <linearLowerLimit x="0" y="0" z="0"/>

    <linearUpperLimit x="0" y="0" z="0"/>

    <angularLowerLimit x="-0.1" y="-0.5" z="-0.5"/>

    <angularUpperLimit x="0.1" y="0.5" z="0.5"/>

    <linearStiffness x="0" y="0" z="0"/>

    <angularStiffness x="0" y="0" z="0"/>

    <linearDamping x="0" y="0" z="0"/>

    <angularDamping x="0" y="0" z="0"/>

    <linearEquilibrium x="0" y="0" z="0"/>

    <angularEquilibrium x="0" y="0" z="0"/>

  </generic-constraint-default>

 

  <generic-constraint bodyA="XFL1" bodyB="XFL0"/>

  <generic-constraint bodyA="XFL2" bodyB="XFL1"/>

  <generic-constraint bodyA="XFL3" bodyB="XFL2"/>

  <generic-constraint bodyA="XFL4" bodyB="XFL3"/>

  <generic-constraint bodyA="XFL5" bodyB="XFL4"/>

  <generic-constraint bodyA="XFL6" bodyB="XFL5"/>

  <generic-constraint bodyA="XFL7" bodyB="XFL6"/>

  <generic-constraint bodyA="XFL8" bodyB="XFL7"/>

 

  <generic-constraint bodyA="XFR1" bodyB="XFR0"/>

  <generic-constraint bodyA="XFR2" bodyB="XFR1"/>

  <generic-constraint bodyA="XFR3" bodyB="XFR2"/>

  <generic-constraint bodyA="XFR4" bodyB="XFR3"/>

  <generic-constraint bodyA="XFR5" bodyB="XFR4"/>

  <generic-constraint bodyA="XFR6" bodyB="XFR5"/>

  <generic-constraint bodyA="XFR7" bodyB="XFR6"/>

  <generic-constraint bodyA="XFR8" bodyB="XFR7"/>

 

  <generic-constraint bodyA="XBL1" bodyB="XBL0"/>

  <generic-constraint bodyA="XBL2" bodyB="XBL1"/>

  <generic-constraint bodyA="XBL3" bodyB="XBL2"/>

  <generic-constraint bodyA="XBL4" bodyB="XBL3"/>

  <generic-constraint bodyA="XBL5" bodyB="XBL4"/>

  <generic-constraint bodyA="XBL6" bodyB="XBL5"/>

  <generic-constraint bodyA="XBL7" bodyB="XBL6"/>

  <generic-constraint bodyA="XBL8" bodyB="XBL7"/>

 

  <generic-constraint bodyA="XBR1" bodyB="XBR0"/>

  <generic-constraint bodyA="XBR2" bodyB="XBR1"/>

  <generic-constraint bodyA="XBR3" bodyB="XBR2"/>

  <generic-constraint bodyA="XBR4" bodyB="XBR3"/>

  <generic-constraint bodyA="XBR5" bodyB="XBR4"/>

  <generic-constraint bodyA="XBR6" bodyB="XBR5"/>

  <generic-constraint bodyA="XBR7" bodyB="XBR6"/>

  <generic-constraint bodyA="XBR8" bodyB="XBR7"/>

 

  <per-vertex-shape name="Foot:Body 1.002">

    <margin>0.1</margin>

    <priority>-1</priority>

    <tag>skirt</tag>

  <no-collide-with-tag>hand</no-collide-with-tag>

  <no-collide-with-tag>skirt</no-collide-with-tag>

  <no-collide-with-tag>hair</no-collide-with-tag>

    <no-collide-with-bone>NPC L Forearm [LLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC R Forearm [RLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist1 [LLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist1 [RLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist2 [LLt2]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist2 [RLt2]</no-collide-with-bone>

    <weight-threshold bone="NPC L Breast">1</weight-threshold>

    <weight-threshold bone="NPC R Breast">1</weight-threshold>

    <weight-threshold bone="NPC L Breast01">1</weight-threshold>

    <weight-threshold bone="NPC R Breast01">1</weight-threshold>

    <weight-threshold bone="NPC L Thigh [LThg]">1</weight-threshold>

    <weight-threshold bone="NPC R Thigh [RThg]">1</weight-threshold>

    <weight-threshold bone="NPC Spine [spn0]">1</weight-threshold>

    <weight-threshold bone="NPC Spine1 [spn1]">1</weight-threshold>

    <weight-threshold bone="NPC Spine2 [spn2]">1</weight-threshold>

    <weight-threshold bone="NPC Pelvis [Pelv]">1</weight-threshold>

    <weight-threshold bone="NPC L Clavicle [LClv]">1</weight-threshold>

    <weight-threshold bone="NPC R Clavicle [RClv]">1</weight-threshold>

    <weight-threshold bone="NPC L Butt">1</weight-threshold>

    <weight-threshold bone="NPC R Butt">1</weight-threshold>

    <weight-threshold bone="SL1">0.1</weight-threshold>

    <weight-threshold bone="SR1">0.1</weight-threshold>

  </per-vertex-shape>

 

  <per-vertex-shape name="Foot:Legs:3">

    <margin>1</margin>

    <priority>1</priority>

    <tag>skirt</tag>

  <no-collide-with-tag>hand</no-collide-with-tag>

  <no-collide-with-tag>skirt</no-collide-with-tag>

  <no-collide-with-tag>hair</no-collide-with-tag>

    <no-collide-with-bone>NPC L Forearm [LLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC R Forearm [RLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist1 [LLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist1 [RLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist2 [LLt2]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist2 [RLt2]</no-collide-with-bone>

    <weight-threshold bone="NPC L Breast">1</weight-threshold>

    <weight-threshold bone="NPC R Breast">1</weight-threshold>

    <weight-threshold bone="NPC L Breast01">1</weight-threshold>

    <weight-threshold bone="NPC R Breast01">1</weight-threshold>

    <weight-threshold bone="NPC L Thigh [LThg]">1</weight-threshold>

    <weight-threshold bone="NPC R Thigh [RThg]">1</weight-threshold>

    <weight-threshold bone="NPC Spine [spn0]">1</weight-threshold>

    <weight-threshold bone="NPC Spine1 [spn1]">1</weight-threshold>

    <weight-threshold bone="NPC Spine2 [spn2]">1</weight-threshold>

    <weight-threshold bone="NPC Pelvis [Pelv]">1</weight-threshold>

    <weight-threshold bone="NPC L Clavicle [LClv]">1</weight-threshold>

    <weight-threshold bone="NPC R Clavicle [RClv]">1</weight-threshold>

    <weight-threshold bone="NPC L Butt">1</weight-threshold>

    <weight-threshold bone="NPC R Butt">1</weight-threshold>

    <weight-threshold bone="XFL1">0.5</weight-threshold>

    <weight-threshold bone="XFR1">0.5</weight-threshold>

    <weight-threshold bone="XFL2">0.5</weight-threshold>

    <weight-threshold bone="XFR2">0.5</weight-threshold>

  </per-vertex-shape>

 

  <per-vertex-shape name="Foot:Legs:2.001">

    <margin>1</margin>

    <priority>1</priority>

    <tag>skirt</tag>

  <no-collide-with-tag>hand</no-collide-with-tag>

  <no-collide-with-tag>skirt</no-collide-with-tag>

  <no-collide-with-tag>hair</no-collide-with-tag>

    <no-collide-with-bone>NPC L Forearm [LLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC R Forearm [RLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist1 [LLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist1 [RLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist2 [LLt2]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist2 [RLt2]</no-collide-with-bone>

    <weight-threshold bone="NPC L Breast">1</weight-threshold>

    <weight-threshold bone="NPC R Breast">1</weight-threshold>

    <weight-threshold bone="NPC L Breast01">1</weight-threshold>

    <weight-threshold bone="NPC R Breast01">1</weight-threshold>

    <weight-threshold bone="NPC L Thigh [LThg]">1</weight-threshold>

    <weight-threshold bone="NPC R Thigh [RThg]">1</weight-threshold>

    <weight-threshold bone="NPC Spine [spn0]">1</weight-threshold>

    <weight-threshold bone="NPC Spine1 [spn1]">1</weight-threshold>

    <weight-threshold bone="NPC Spine2 [spn2]">1</weight-threshold>

    <weight-threshold bone="NPC Pelvis [Pelv]">1</weight-threshold>

    <weight-threshold bone="NPC L Clavicle [LClv]">1</weight-threshold>

    <weight-threshold bone="NPC R Clavicle [RClv]">1</weight-threshold>

    <weight-threshold bone="NPC L Butt">1</weight-threshold>

    <weight-threshold bone="NPC R Butt">1</weight-threshold>

  </per-vertex-shape>

</system>

 

 

Link to comment

 

Jep, that's exactly what I managed to find out. If you don't link to a custom xml inside the nif, it will look up all NiTriShape names for matches inside defaultBPPs.xml and if they find a match, it loads its corresponding xml. this way you can load as many xmls as you have NiTriShapes inside your nif, but it will only work with bones defined in your skeleton.nif.

I tried to convert HDT Tails into HDT-SMP. The tails have bonsed named from "HDT TailBone01" - "HDT TailBone09" (sometimes more, sometimes less, but 9 seem to be most common). While the skeleton does have "HDT TailBone01", "HDT TailBone01.1", "HDT TailBone01.2", "HDT TailBone01.3" and starts again with "HDT TailBone02" up to "HDT TailBone05.4". That means that if I dont change the names of the bones inside the nif, it will only load load 5 out of 9 bones, and bone 6-9 won't have any physics.

On the other hand, if I load the same xml directly via pointing on it through my nif file, all 9 bones will work perfectly fine without renaming them. But I won't be able to load more than one single xml.

 

In case of tails it is no big problem, because they don't share any physics with any other models, only between themselves, so there would be no drawback if I just point to a custom nif for every nif file. But in cases of armors, where you might share the same breast, or any other physics, it will be quite a problem. Because you have to choose between custom physics unique to the model (like ribbons, longer skirts, etc) or uniform breast and butt physics for all armors.

And the fact that it is triggered via shape names might also be quite a hassle because you would need to enforce a standart naming system on all modders, which isn't realistic, combined with possible manual edits of defaultBPPs.xml

 

I was just looking at a outfit i got from 3dmgame that is hdt-smp and it looks like she has custom bone in her xml. They may not be idk but maybe if you link the bone like she does it in there maybe it will work. http://bbs.3dmgame.com/thread-4663510-1-3.html

 

So the xml setup my work for what your trying atleast I hope if not Idk.

 

 

<system xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="description.xsd">

  <per-triangle-shape name="VirtualGround">

    <margin>0.5</margin>

    <prenetration>10</prenetration>

    <priority>-2147483648</priority>

    <tag>ground</tag>

  </per-triangle-shape>

  <bone name="NPC L PreBreast">

  <mass>0.000000</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 PreBreast">

  <mass>0.000000</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 Breast">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="2" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<bone name="NPC R Breast">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="2" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<bone name="NPC L Breast01">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<bone name="NPC R Breast01">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<generic-constraint bodyA="NPC L Breast" bodyB="NPC L PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="0" y="-2" z="-10"/>

  <linearUpperLimit x="0" y="2" z="10"/>

  <angularLowerLimit x="0" y="-0.1" z="-0.5"/>

  <angularUpperLimit x="0" y="0.1" z="0.5"/>

  <linearStiffness x="0" y="0" z="246.74"/>

  <angularStiffness x="200" y="0" z="0"/>

  <linearDamping x="0" y="0" z="0.4674"/>

  <angularDamping x="0" y="0" z="0"/>

  <linearEquilibrium x="0" y="0" z="-4"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<generic-constraint bodyA="NPC R Breast" bodyB="NPC R PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="0" y="-2" z="-10"/>

  <linearUpperLimit x="0" y="2" z="10"/>

  <angularLowerLimit x="0" y="-0.1" z="-0.5"/>

  <angularUpperLimit x="0" y="0.1" z="0.5"/>

  <linearStiffness x="0" y="0" z="246.74"/>

  <angularStiffness x="200" y="0" z="0"/>

  <linearDamping x="0" y="0" z="0.4674"/>

  <angularDamping x="0" y="0" z="0"/>

  <linearEquilibrium x="0" y="0" z="-4"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<generic-constraint bodyA="NPC L Breast01" bodyB="NPC L PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="-10" y="-1" z="-5"/>

  <linearUpperLimit x="10" y="1" z="1"/>

  <angularLowerLimit x="0" y="0" z="-0.2"/>

  <angularUpperLimit x="0" y="0" z="0.2"/>

  <linearStiffness x="246.74" y="246.74" z="246.74"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="0.4674" y="2.4674" z="2.4674"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="-2"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<generic-constraint bodyA="NPC R Breast01" bodyB="NPC R PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="-10" y="-1" z="-5"/>

  <linearUpperLimit x="10" y="1" z="1"/>

  <angularLowerLimit x="0" y="0" z="-0.2"/>

  <angularUpperLimit x="0" y="0" z="0.2"/>

  <linearStiffness x="246.74" y="246.74" z="246.74"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="0.4674" y="2.4674" z="2.4674"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="-2"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<bone name="NPC L PreButt">

  <mass>0.000000</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 PreButt">

  <mass>0.000000</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 Butt">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

 

<bone name="NPC R Butt">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<generic-constraint bodyA="NPC L Butt" bodyB="NPC L PreButt">

  <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="-2" z="-2"/>

  <linearUpperLimit x="2" y="2" z="2"/>

  <angularLowerLimit x="0" y="0" z="0"/>

  <angularUpperLimit x="0" y="0" z="0"/>

  <linearStiffness x="438.649109" y="438.649109" z="438.649109"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="4.386491" y="4.386491" z="4.386491"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="3"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.7" y="0.7" z="0.7"/>

    <angularBounce x="0.7" y="0.7" z="0.7"/>

</generic-constraint>

<generic-constraint bodyA="NPC R Butt" bodyB="NPC R PreButt">

  <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="-2" z="-2"/>

  <linearUpperLimit x="2" y="2" z="2"/>

  <angularLowerLimit x="0" y="0" z="0"/>

  <angularUpperLimit x="0" y="0" z="0"/>

  <linearStiffness x="438.649109" y="438.649109" z="438.649109"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="4.386491" y="4.386491" z="4.386491"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="3"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.7" y="0.7" z="0.7"/>

    <angularBounce x="0.7" y="0.7" z="0.7"/>

</generic-constraint>

 

<per-triangle-shape name="UNP TM">

  <margin>0</margin>

  <priority>0</priority>

  <prenetration>1</prenetration>

  <tag>body</tag>

  <no-collide-with-tag>body</no-collide-with-tag>

  <no-collide-with-tag>ground</no-collide-with-tag>

  <weight-threshold bone="NPC L Breast">0.1</weight-threshold>

  <weight-threshold bone="NPC R Breast">0.1</weight-threshold>

  <weight-threshold bone="NPC L Breast01">0.1</weight-threshold>

  <weight-threshold bone="NPC R Breast01">0.1</weight-threshold>

</per-triangle-shape>

 

<bone-default>

  <margin-multiplier>0.1</margin-multiplier>

</bone-default>

 

<bone name="SR0"/>

<bone name="SL0"/>

<bone name="XFL0"/>

<bone name="XFR0"/>

<bone name="XBL0"/>

<bone name="XBR0"/>

 

<bone-default>

    <mass>0.1</mass>

    <inertia x="20" y="20" z="20"/>

    <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-default>

 

  <bone-default>

  <margin-multiplier>0.2</margin-multiplier>

</bone-default>

 

<bone name="SR1"/>

<bone name="SL1"/>

 

<bone-default>

    <mass>3</mass>

    <inertia x="20" y="20" z="20"/>

    <centerOfMassTransform>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </centerOfMassTransform>

    <linearDamping>0.5</linearDamping>

    <angularDamping>0.5</angularDamping>

    <friction>0</friction>

    <rollingFriction>0</rollingFriction>

    <restitution>0</restitution>

  </bone-default>

 

<bone name="XFL1"/>

<bone name="XFR1"/>

<bone name="XBL1"/>

<bone name="XBR1"/>

 

<bone-default>

  <margin-multiplier>1.0</margin-multiplier>

</bone-default>

 

<bone-default>

    <mass>3</mass>

    <inertia x="20" y="20" z="20"/>

    <centerOfMassTransform>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </centerOfMassTransform>

    <linearDamping>0.5</linearDamping>

    <angularDamping>0.5</angularDamping>

    <friction>0</friction>

    <rollingFriction>0</rollingFriction>

    <restitution>0</restitution>

  </bone-default>

 

<bone name="SR2"/>

<bone name="SL2"/>

 

<bone-default>

    <mass>3</mass>

    <inertia x="20" y="20" z="20"/>

    <centerOfMassTransform>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </centerOfMassTransform>

    <linearDamping>0.5</linearDamping>

    <angularDamping>0.5</angularDamping>

    <friction>0</friction>

    <rollingFriction>0</rollingFriction>

    <restitution>0</restitution>

  </bone-default>

 

<bone name="XFL2"/>

<bone name="XFR2"/>

<bone name="XBL2"/>

<bone name="XBR2"/>

 

<bone name="XFL3"/>

<bone name="XFR3"/>

<bone name="XBL3"/>

<bone name="XBR3"/>

 

<bone name="XFL4"/>

<bone name="XFR4"/>

<bone name="XBL4"/>

<bone name="XBR4"/>

 

<bone name="XFL5"/>

<bone name="XFR5"/>

<bone name="XBL5"/>

<bone name="XBR5"/>

 

<bone name="XFL6"/>

<bone name="XFR6"/>

<bone name="XBL6"/>

<bone name="XBR6"/>

 

<bone name="XFL7"/>

<bone name="XFR7"/>

<bone name="XBL7"/>

<bone name="XBR7"/>

 

<bone name="XFL8"/>

<bone name="XFR8"/>

<bone name="XBL8"/>

<bone name="XBR8"/>

 

<generic-constraint-default>

    <frameInB>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </frameInB>

    <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

    <linearLowerLimit x="0" y="0" z="0"/>

    <linearUpperLimit x="0" y="0" z="0"/>

    <angularLowerLimit x="-0.5" y="-0.09" z="-0.5"/>

    <angularUpperLimit x="0.5" y="0.5" z="0.09"/>

    <linearStiffness x="0" y="0" z="0"/>

    <angularStiffness x="0" y="0" z="0"/>

    <linearDamping x="0" y="0" z="0"/>

    <angularDamping x="0" y="0" z="0"/>

    <linearEquilibrium x="0" y="0" z="0"/>

    <angularEquilibrium x="0" y="0" z="0"/>

  </generic-constraint-default>

 

  <generic-constraint bodyA="SR1" bodyB="SR0"/>

 

  <generic-constraint bodyA="SL1" bodyB="SL0"/>

 

  <generic-constraint-default>

    <frameInB>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="-3" y="0" z="0"/>

    </frameInB>

    <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

    <linearLowerLimit x="0" y="0" z="0"/>

    <linearUpperLimit x="0" y="0" z="0"/>

    <angularLowerLimit x="-0.5" y="-0.5" z="-0.5"/>

    <angularUpperLimit x="0.5" y="0.5" z="0.5"/>

    <linearStiffness x="0" y="0" z="0"/>

    <angularStiffness x="0" y="0" z="0"/>

    <linearDamping x="0" y="0" z="0"/>

    <angularDamping x="0" y="0" z="0"/>

    <linearEquilibrium x="0" y="0" z="0"/>

    <angularEquilibrium x="0" y="0" z="0"/>

  </generic-constraint-default>

 

  <generic-constraint bodyA="SR2" bodyB="SR1"/>

 

  <generic-constraint bodyA="SL2" bodyB="SL1"/>

 

  <generic-constraint-default>

    <frameInB>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </frameInB>

    <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

    <linearLowerLimit x="0" y="0" z="0"/>

    <linearUpperLimit x="0" y="0" z="0"/>

    <angularLowerLimit x="-0.1" y="-0.5" z="-0.5"/>

    <angularUpperLimit x="0.1" y="0.5" z="0.5"/>

    <linearStiffness x="0" y="0" z="0"/>

    <angularStiffness x="0" y="0" z="0"/>

    <linearDamping x="0" y="0" z="0"/>

    <angularDamping x="0" y="0" z="0"/>

    <linearEquilibrium x="0" y="0" z="0"/>

    <angularEquilibrium x="0" y="0" z="0"/>

  </generic-constraint-default>

 

  <generic-constraint bodyA="XFL1" bodyB="XFL0"/>

  <generic-constraint bodyA="XFL2" bodyB="XFL1"/>

  <generic-constraint bodyA="XFL3" bodyB="XFL2"/>

  <generic-constraint bodyA="XFL4" bodyB="XFL3"/>

  <generic-constraint bodyA="XFL5" bodyB="XFL4"/>

  <generic-constraint bodyA="XFL6" bodyB="XFL5"/>

  <generic-constraint bodyA="XFL7" bodyB="XFL6"/>

  <generic-constraint bodyA="XFL8" bodyB="XFL7"/>

 

  <generic-constraint bodyA="XFR1" bodyB="XFR0"/>

  <generic-constraint bodyA="XFR2" bodyB="XFR1"/>

  <generic-constraint bodyA="XFR3" bodyB="XFR2"/>

  <generic-constraint bodyA="XFR4" bodyB="XFR3"/>

  <generic-constraint bodyA="XFR5" bodyB="XFR4"/>

  <generic-constraint bodyA="XFR6" bodyB="XFR5"/>

  <generic-constraint bodyA="XFR7" bodyB="XFR6"/>

  <generic-constraint bodyA="XFR8" bodyB="XFR7"/>

 

  <generic-constraint bodyA="XBL1" bodyB="XBL0"/>

  <generic-constraint bodyA="XBL2" bodyB="XBL1"/>

  <generic-constraint bodyA="XBL3" bodyB="XBL2"/>

  <generic-constraint bodyA="XBL4" bodyB="XBL3"/>

  <generic-constraint bodyA="XBL5" bodyB="XBL4"/>

  <generic-constraint bodyA="XBL6" bodyB="XBL5"/>

  <generic-constraint bodyA="XBL7" bodyB="XBL6"/>

  <generic-constraint bodyA="XBL8" bodyB="XBL7"/>

 

  <generic-constraint bodyA="XBR1" bodyB="XBR0"/>

  <generic-constraint bodyA="XBR2" bodyB="XBR1"/>

  <generic-constraint bodyA="XBR3" bodyB="XBR2"/>

  <generic-constraint bodyA="XBR4" bodyB="XBR3"/>

  <generic-constraint bodyA="XBR5" bodyB="XBR4"/>

  <generic-constraint bodyA="XBR6" bodyB="XBR5"/>

  <generic-constraint bodyA="XBR7" bodyB="XBR6"/>

  <generic-constraint bodyA="XBR8" bodyB="XBR7"/>

 

  <per-vertex-shape name="Foot:Body 1.002">

    <margin>0.1</margin>

    <priority>-1</priority>

    <tag>skirt</tag>

  <no-collide-with-tag>hand</no-collide-with-tag>

  <no-collide-with-tag>skirt</no-collide-with-tag>

  <no-collide-with-tag>hair</no-collide-with-tag>

    <no-collide-with-bone>NPC L Forearm [LLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC R Forearm [RLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist1 [LLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist1 [RLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist2 [LLt2]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist2 [RLt2]</no-collide-with-bone>

    <weight-threshold bone="NPC L Breast">1</weight-threshold>

    <weight-threshold bone="NPC R Breast">1</weight-threshold>

    <weight-threshold bone="NPC L Breast01">1</weight-threshold>

    <weight-threshold bone="NPC R Breast01">1</weight-threshold>

    <weight-threshold bone="NPC L Thigh [LThg]">1</weight-threshold>

    <weight-threshold bone="NPC R Thigh [RThg]">1</weight-threshold>

    <weight-threshold bone="NPC Spine [spn0]">1</weight-threshold>

    <weight-threshold bone="NPC Spine1 [spn1]">1</weight-threshold>

    <weight-threshold bone="NPC Spine2 [spn2]">1</weight-threshold>

    <weight-threshold bone="NPC Pelvis [Pelv]">1</weight-threshold>

    <weight-threshold bone="NPC L Clavicle [LClv]">1</weight-threshold>

    <weight-threshold bone="NPC R Clavicle [RClv]">1</weight-threshold>

    <weight-threshold bone="NPC L Butt">1</weight-threshold>

    <weight-threshold bone="NPC R Butt">1</weight-threshold>

    <weight-threshold bone="SL1">0.1</weight-threshold>

    <weight-threshold bone="SR1">0.1</weight-threshold>

  </per-vertex-shape>

 

  <per-vertex-shape name="Foot:Legs:3">

    <margin>1</margin>

    <priority>1</priority>

    <tag>skirt</tag>

  <no-collide-with-tag>hand</no-collide-with-tag>

  <no-collide-with-tag>skirt</no-collide-with-tag>

  <no-collide-with-tag>hair</no-collide-with-tag>

    <no-collide-with-bone>NPC L Forearm [LLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC R Forearm [RLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist1 [LLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist1 [RLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist2 [LLt2]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist2 [RLt2]</no-collide-with-bone>

    <weight-threshold bone="NPC L Breast">1</weight-threshold>

    <weight-threshold bone="NPC R Breast">1</weight-threshold>

    <weight-threshold bone="NPC L Breast01">1</weight-threshold>

    <weight-threshold bone="NPC R Breast01">1</weight-threshold>

    <weight-threshold bone="NPC L Thigh [LThg]">1</weight-threshold>

    <weight-threshold bone="NPC R Thigh [RThg]">1</weight-threshold>

    <weight-threshold bone="NPC Spine [spn0]">1</weight-threshold>

    <weight-threshold bone="NPC Spine1 [spn1]">1</weight-threshold>

    <weight-threshold bone="NPC Spine2 [spn2]">1</weight-threshold>

    <weight-threshold bone="NPC Pelvis [Pelv]">1</weight-threshold>

    <weight-threshold bone="NPC L Clavicle [LClv]">1</weight-threshold>

    <weight-threshold bone="NPC R Clavicle [RClv]">1</weight-threshold>

    <weight-threshold bone="NPC L Butt">1</weight-threshold>

    <weight-threshold bone="NPC R Butt">1</weight-threshold>

    <weight-threshold bone="XFL1">0.5</weight-threshold>

    <weight-threshold bone="XFR1">0.5</weight-threshold>

    <weight-threshold bone="XFL2">0.5</weight-threshold>

    <weight-threshold bone="XFR2">0.5</weight-threshold>

  </per-vertex-shape>

 

  <per-vertex-shape name="Foot:Legs:2.001">

    <margin>1</margin>

    <priority>1</priority>

    <tag>skirt</tag>

  <no-collide-with-tag>hand</no-collide-with-tag>

  <no-collide-with-tag>skirt</no-collide-with-tag>

  <no-collide-with-tag>hair</no-collide-with-tag>

    <no-collide-with-bone>NPC L Forearm [LLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC R Forearm [RLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist1 [LLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist1 [RLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist2 [LLt2]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist2 [RLt2]</no-collide-with-bone>

    <weight-threshold bone="NPC L Breast">1</weight-threshold>

    <weight-threshold bone="NPC R Breast">1</weight-threshold>

    <weight-threshold bone="NPC L Breast01">1</weight-threshold>

    <weight-threshold bone="NPC R Breast01">1</weight-threshold>

    <weight-threshold bone="NPC L Thigh [LThg]">1</weight-threshold>

    <weight-threshold bone="NPC R Thigh [RThg]">1</weight-threshold>

    <weight-threshold bone="NPC Spine [spn0]">1</weight-threshold>

    <weight-threshold bone="NPC Spine1 [spn1]">1</weight-threshold>

    <weight-threshold bone="NPC Spine2 [spn2]">1</weight-threshold>

    <weight-threshold bone="NPC Pelvis [Pelv]">1</weight-threshold>

    <weight-threshold bone="NPC L Clavicle [LClv]">1</weight-threshold>

    <weight-threshold bone="NPC R Clavicle [RClv]">1</weight-threshold>

    <weight-threshold bone="NPC L Butt">1</weight-threshold>

    <weight-threshold bone="NPC R Butt">1</weight-threshold>

  </per-vertex-shape>

</system>

 

 

 

 

Well, I thought I made myself clear in my very first post, but I guess it wasn't that easy to understand.

I am really thankful for your help, but it still isn't what I desire. I will try to explain it from the very beginning again since it seems that you didn't fully understand my problem:

 

Currently, I know of 2 different ways to implement HDT-SMP physics into a body piece:

The first one is by triggering it via the right NiTriShape name to load the corresponding xml from defaultsBPPs.xml.

The second is the method you showed above, by linking to a xml directly inside the nif file.

Both options do have advantages and advantages, which I will describe below:

 

Loading stuff via defaultsBPPs.xml will only work if you got the proper NiTriShape names (which isn't a big problem, just a nuisance. The real problem is the fact that you won't be able to make use of custom bones defined inside the nif files. I described the problem one post earlier with the Tail. As long as you don't have the bone defined in your skeleton.nif, physic's won't work on this piece, even thought you had it defined inside the xml file as well as in the nif file. That limits the amout of customization you can do to the piece since you essentially won't be able to add unique physics like ties, chains and the like. On the other hand thought, you are able to load multiple xml files at the same time. You could load physics for breasts via default body shape, but add skirt physics via a second shape.

 

The second option works perfectly fine for custom bones. You can define everything that is presented in the nif file. Custom bones, breast physics etc all work perfectly fine, but you can only load one single xml file. That means as long as you link to a custom xml file via the nif file, you won't be able to add a second one, neither throgh defaultBPPs.xml, nor directly loading a second xml. Basicly that means that you have to redefine every physics for that piece of armor into it's custom xml file again, since it won't load your pre-defined xmls from defaultBPPs.xml. That leads to different physics for different armor pieces even if they use the same parts. An armor piece with custom physics will probably have different breast physics because it has to re-define them into its own xml, and changing your default xmls (those which are default in defaultBPPs.xml, those that work on your nude body) won't have any effect on those armor pieces.

 

And that's where my problem lies. I would like to make armor that uses default breast physics, shared among all of them, while also adding custom physics for skirts, ties, chains, etc. The armor you posted before does have it's unique physics, as well as it's own breast physics instead of using the default ones.

Link to comment

 

 

Jep, that's exactly what I managed to find out. If you don't link to a custom xml inside the nif, it will look up all NiTriShape names for matches inside defaultBPPs.xml and if they find a match, it loads its corresponding xml. this way you can load as many xmls as you have NiTriShapes inside your nif, but it will only work with bones defined in your skeleton.nif.

I tried to convert HDT Tails into HDT-SMP. The tails have bonsed named from "HDT TailBone01" - "HDT TailBone09" (sometimes more, sometimes less, but 9 seem to be most common). While the skeleton does have "HDT TailBone01", "HDT TailBone01.1", "HDT TailBone01.2", "HDT TailBone01.3" and starts again with "HDT TailBone02" up to "HDT TailBone05.4". That means that if I dont change the names of the bones inside the nif, it will only load load 5 out of 9 bones, and bone 6-9 won't have any physics.

On the other hand, if I load the same xml directly via pointing on it through my nif file, all 9 bones will work perfectly fine without renaming them. But I won't be able to load more than one single xml.

 

In case of tails it is no big problem, because they don't share any physics with any other models, only between themselves, so there would be no drawback if I just point to a custom nif for every nif file. But in cases of armors, where you might share the same breast, or any other physics, it will be quite a problem. Because you have to choose between custom physics unique to the model (like ribbons, longer skirts, etc) or uniform breast and butt physics for all armors.

And the fact that it is triggered via shape names might also be quite a hassle because you would need to enforce a standart naming system on all modders, which isn't realistic, combined with possible manual edits of defaultBPPs.xml

 

I was just looking at a outfit i got from 3dmgame that is hdt-smp and it looks like she has custom bone in her xml. They may not be idk but maybe if you link the bone like she does it in there maybe it will work. http://bbs.3dmgame.com/thread-4663510-1-3.html

 

So the xml setup my work for what your trying atleast I hope if not Idk.

 

 

<system xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="description.xsd">

  <per-triangle-shape name="VirtualGround">

    <margin>0.5</margin>

    <prenetration>10</prenetration>

    <priority>-2147483648</priority>

    <tag>ground</tag>

  </per-triangle-shape>

  <bone name="NPC L PreBreast">

  <mass>0.000000</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 PreBreast">

  <mass>0.000000</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 Breast">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="2" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<bone name="NPC R Breast">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="2" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<bone name="NPC L Breast01">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<bone name="NPC R Breast01">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<generic-constraint bodyA="NPC L Breast" bodyB="NPC L PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="0" y="-2" z="-10"/>

  <linearUpperLimit x="0" y="2" z="10"/>

  <angularLowerLimit x="0" y="-0.1" z="-0.5"/>

  <angularUpperLimit x="0" y="0.1" z="0.5"/>

  <linearStiffness x="0" y="0" z="246.74"/>

  <angularStiffness x="200" y="0" z="0"/>

  <linearDamping x="0" y="0" z="0.4674"/>

  <angularDamping x="0" y="0" z="0"/>

  <linearEquilibrium x="0" y="0" z="-4"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<generic-constraint bodyA="NPC R Breast" bodyB="NPC R PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="0" y="-2" z="-10"/>

  <linearUpperLimit x="0" y="2" z="10"/>

  <angularLowerLimit x="0" y="-0.1" z="-0.5"/>

  <angularUpperLimit x="0" y="0.1" z="0.5"/>

  <linearStiffness x="0" y="0" z="246.74"/>

  <angularStiffness x="200" y="0" z="0"/>

  <linearDamping x="0" y="0" z="0.4674"/>

  <angularDamping x="0" y="0" z="0"/>

  <linearEquilibrium x="0" y="0" z="-4"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<generic-constraint bodyA="NPC L Breast01" bodyB="NPC L PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="-10" y="-1" z="-5"/>

  <linearUpperLimit x="10" y="1" z="1"/>

  <angularLowerLimit x="0" y="0" z="-0.2"/>

  <angularUpperLimit x="0" y="0" z="0.2"/>

  <linearStiffness x="246.74" y="246.74" z="246.74"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="0.4674" y="2.4674" z="2.4674"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="-2"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<generic-constraint bodyA="NPC R Breast01" bodyB="NPC R PreBreast">

  <frameInB>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="0" z="0"/>

  </frameInB>

  <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

  <linearLowerLimit x="-10" y="-1" z="-5"/>

  <linearUpperLimit x="10" y="1" z="1"/>

  <angularLowerLimit x="0" y="0" z="-0.2"/>

  <angularUpperLimit x="0" y="0" z="0.2"/>

  <linearStiffness x="246.74" y="246.74" z="246.74"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="0.4674" y="2.4674" z="2.4674"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="-2"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.2" y="0.4" z="0.7"/>

    <angularBounce x="0" y="0" z="0"/>

</generic-constraint>

<bone name="NPC L PreButt">

  <mass>0.000000</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 PreButt">

  <mass>0.000000</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 Butt">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

 

<bone name="NPC R Butt">

  <mass>1.000000</mass>

  <inertia x="10" y="10" z="10"/>

  <centerOfMassTransform>

   <basis x="0" y="0" z="0" w="1"/>

   <origin x="0" y="-1" z="0"/>

  </centerOfMassTransform>

  <linearDamping>0</linearDamping>

  <angularDamping>0</angularDamping>

  <friction>0</friction>

  <rollingFriction>0</rollingFriction>

  <restitution>0</restitution>

</bone>

<generic-constraint bodyA="NPC L Butt" bodyB="NPC L PreButt">

  <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="-2" z="-2"/>

  <linearUpperLimit x="2" y="2" z="2"/>

  <angularLowerLimit x="0" y="0" z="0"/>

  <angularUpperLimit x="0" y="0" z="0"/>

  <linearStiffness x="438.649109" y="438.649109" z="438.649109"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="4.386491" y="4.386491" z="4.386491"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="3"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.7" y="0.7" z="0.7"/>

    <angularBounce x="0.7" y="0.7" z="0.7"/>

</generic-constraint>

<generic-constraint bodyA="NPC R Butt" bodyB="NPC R PreButt">

  <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="-2" z="-2"/>

  <linearUpperLimit x="2" y="2" z="2"/>

  <angularLowerLimit x="0" y="0" z="0"/>

  <angularUpperLimit x="0" y="0" z="0"/>

  <linearStiffness x="438.649109" y="438.649109" z="438.649109"/>

  <angularStiffness x="1096.62" y="1096.62" z="1096.62"/>

  <linearDamping x="4.386491" y="4.386491" z="4.386491"/>

  <angularDamping x="10.9662" y="10.9662" z="10.9662"/>

  <linearEquilibrium x="0" y="0" z="3"/>

  <angularEquilibrium x="0" y="0" z="0"/>

    <linearBounce x="0.7" y="0.7" z="0.7"/>

    <angularBounce x="0.7" y="0.7" z="0.7"/>

</generic-constraint>

 

<per-triangle-shape name="UNP TM">

  <margin>0</margin>

  <priority>0</priority>

  <prenetration>1</prenetration>

  <tag>body</tag>

  <no-collide-with-tag>body</no-collide-with-tag>

  <no-collide-with-tag>ground</no-collide-with-tag>

  <weight-threshold bone="NPC L Breast">0.1</weight-threshold>

  <weight-threshold bone="NPC R Breast">0.1</weight-threshold>

  <weight-threshold bone="NPC L Breast01">0.1</weight-threshold>

  <weight-threshold bone="NPC R Breast01">0.1</weight-threshold>

</per-triangle-shape>

 

<bone-default>

  <margin-multiplier>0.1</margin-multiplier>

</bone-default>

 

<bone name="SR0"/>

<bone name="SL0"/>

<bone name="XFL0"/>

<bone name="XFR0"/>

<bone name="XBL0"/>

<bone name="XBR0"/>

 

<bone-default>

    <mass>0.1</mass>

    <inertia x="20" y="20" z="20"/>

    <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-default>

 

  <bone-default>

  <margin-multiplier>0.2</margin-multiplier>

</bone-default>

 

<bone name="SR1"/>

<bone name="SL1"/>

 

<bone-default>

    <mass>3</mass>

    <inertia x="20" y="20" z="20"/>

    <centerOfMassTransform>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </centerOfMassTransform>

    <linearDamping>0.5</linearDamping>

    <angularDamping>0.5</angularDamping>

    <friction>0</friction>

    <rollingFriction>0</rollingFriction>

    <restitution>0</restitution>

  </bone-default>

 

<bone name="XFL1"/>

<bone name="XFR1"/>

<bone name="XBL1"/>

<bone name="XBR1"/>

 

<bone-default>

  <margin-multiplier>1.0</margin-multiplier>

</bone-default>

 

<bone-default>

    <mass>3</mass>

    <inertia x="20" y="20" z="20"/>

    <centerOfMassTransform>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </centerOfMassTransform>

    <linearDamping>0.5</linearDamping>

    <angularDamping>0.5</angularDamping>

    <friction>0</friction>

    <rollingFriction>0</rollingFriction>

    <restitution>0</restitution>

  </bone-default>

 

<bone name="SR2"/>

<bone name="SL2"/>

 

<bone-default>

    <mass>3</mass>

    <inertia x="20" y="20" z="20"/>

    <centerOfMassTransform>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </centerOfMassTransform>

    <linearDamping>0.5</linearDamping>

    <angularDamping>0.5</angularDamping>

    <friction>0</friction>

    <rollingFriction>0</rollingFriction>

    <restitution>0</restitution>

  </bone-default>

 

<bone name="XFL2"/>

<bone name="XFR2"/>

<bone name="XBL2"/>

<bone name="XBR2"/>

 

<bone name="XFL3"/>

<bone name="XFR3"/>

<bone name="XBL3"/>

<bone name="XBR3"/>

 

<bone name="XFL4"/>

<bone name="XFR4"/>

<bone name="XBL4"/>

<bone name="XBR4"/>

 

<bone name="XFL5"/>

<bone name="XFR5"/>

<bone name="XBL5"/>

<bone name="XBR5"/>

 

<bone name="XFL6"/>

<bone name="XFR6"/>

<bone name="XBL6"/>

<bone name="XBR6"/>

 

<bone name="XFL7"/>

<bone name="XFR7"/>

<bone name="XBL7"/>

<bone name="XBR7"/>

 

<bone name="XFL8"/>

<bone name="XFR8"/>

<bone name="XBL8"/>

<bone name="XBR8"/>

 

<generic-constraint-default>

    <frameInB>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </frameInB>

    <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

    <linearLowerLimit x="0" y="0" z="0"/>

    <linearUpperLimit x="0" y="0" z="0"/>

    <angularLowerLimit x="-0.5" y="-0.09" z="-0.5"/>

    <angularUpperLimit x="0.5" y="0.5" z="0.09"/>

    <linearStiffness x="0" y="0" z="0"/>

    <angularStiffness x="0" y="0" z="0"/>

    <linearDamping x="0" y="0" z="0"/>

    <angularDamping x="0" y="0" z="0"/>

    <linearEquilibrium x="0" y="0" z="0"/>

    <angularEquilibrium x="0" y="0" z="0"/>

  </generic-constraint-default>

 

  <generic-constraint bodyA="SR1" bodyB="SR0"/>

 

  <generic-constraint bodyA="SL1" bodyB="SL0"/>

 

  <generic-constraint-default>

    <frameInB>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="-3" y="0" z="0"/>

    </frameInB>

    <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

    <linearLowerLimit x="0" y="0" z="0"/>

    <linearUpperLimit x="0" y="0" z="0"/>

    <angularLowerLimit x="-0.5" y="-0.5" z="-0.5"/>

    <angularUpperLimit x="0.5" y="0.5" z="0.5"/>

    <linearStiffness x="0" y="0" z="0"/>

    <angularStiffness x="0" y="0" z="0"/>

    <linearDamping x="0" y="0" z="0"/>

    <angularDamping x="0" y="0" z="0"/>

    <linearEquilibrium x="0" y="0" z="0"/>

    <angularEquilibrium x="0" y="0" z="0"/>

  </generic-constraint-default>

 

  <generic-constraint bodyA="SR2" bodyB="SR1"/>

 

  <generic-constraint bodyA="SL2" bodyB="SL1"/>

 

  <generic-constraint-default>

    <frameInB>

      <basis x="0" y="0" z="0" w="1"/>

      <origin x="0" y="0" z="0"/>

    </frameInB>

    <useLinearReferenceFrameA>false</useLinearReferenceFrameA>

    <linearLowerLimit x="0" y="0" z="0"/>

    <linearUpperLimit x="0" y="0" z="0"/>

    <angularLowerLimit x="-0.1" y="-0.5" z="-0.5"/>

    <angularUpperLimit x="0.1" y="0.5" z="0.5"/>

    <linearStiffness x="0" y="0" z="0"/>

    <angularStiffness x="0" y="0" z="0"/>

    <linearDamping x="0" y="0" z="0"/>

    <angularDamping x="0" y="0" z="0"/>

    <linearEquilibrium x="0" y="0" z="0"/>

    <angularEquilibrium x="0" y="0" z="0"/>

  </generic-constraint-default>

 

  <generic-constraint bodyA="XFL1" bodyB="XFL0"/>

  <generic-constraint bodyA="XFL2" bodyB="XFL1"/>

  <generic-constraint bodyA="XFL3" bodyB="XFL2"/>

  <generic-constraint bodyA="XFL4" bodyB="XFL3"/>

  <generic-constraint bodyA="XFL5" bodyB="XFL4"/>

  <generic-constraint bodyA="XFL6" bodyB="XFL5"/>

  <generic-constraint bodyA="XFL7" bodyB="XFL6"/>

  <generic-constraint bodyA="XFL8" bodyB="XFL7"/>

 

  <generic-constraint bodyA="XFR1" bodyB="XFR0"/>

  <generic-constraint bodyA="XFR2" bodyB="XFR1"/>

  <generic-constraint bodyA="XFR3" bodyB="XFR2"/>

  <generic-constraint bodyA="XFR4" bodyB="XFR3"/>

  <generic-constraint bodyA="XFR5" bodyB="XFR4"/>

  <generic-constraint bodyA="XFR6" bodyB="XFR5"/>

  <generic-constraint bodyA="XFR7" bodyB="XFR6"/>

  <generic-constraint bodyA="XFR8" bodyB="XFR7"/>

 

  <generic-constraint bodyA="XBL1" bodyB="XBL0"/>

  <generic-constraint bodyA="XBL2" bodyB="XBL1"/>

  <generic-constraint bodyA="XBL3" bodyB="XBL2"/>

  <generic-constraint bodyA="XBL4" bodyB="XBL3"/>

  <generic-constraint bodyA="XBL5" bodyB="XBL4"/>

  <generic-constraint bodyA="XBL6" bodyB="XBL5"/>

  <generic-constraint bodyA="XBL7" bodyB="XBL6"/>

  <generic-constraint bodyA="XBL8" bodyB="XBL7"/>

 

  <generic-constraint bodyA="XBR1" bodyB="XBR0"/>

  <generic-constraint bodyA="XBR2" bodyB="XBR1"/>

  <generic-constraint bodyA="XBR3" bodyB="XBR2"/>

  <generic-constraint bodyA="XBR4" bodyB="XBR3"/>

  <generic-constraint bodyA="XBR5" bodyB="XBR4"/>

  <generic-constraint bodyA="XBR6" bodyB="XBR5"/>

  <generic-constraint bodyA="XBR7" bodyB="XBR6"/>

  <generic-constraint bodyA="XBR8" bodyB="XBR7"/>

 

  <per-vertex-shape name="Foot:Body 1.002">

    <margin>0.1</margin>

    <priority>-1</priority>

    <tag>skirt</tag>

  <no-collide-with-tag>hand</no-collide-with-tag>

  <no-collide-with-tag>skirt</no-collide-with-tag>

  <no-collide-with-tag>hair</no-collide-with-tag>

    <no-collide-with-bone>NPC L Forearm [LLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC R Forearm [RLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist1 [LLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist1 [RLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist2 [LLt2]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist2 [RLt2]</no-collide-with-bone>

    <weight-threshold bone="NPC L Breast">1</weight-threshold>

    <weight-threshold bone="NPC R Breast">1</weight-threshold>

    <weight-threshold bone="NPC L Breast01">1</weight-threshold>

    <weight-threshold bone="NPC R Breast01">1</weight-threshold>

    <weight-threshold bone="NPC L Thigh [LThg]">1</weight-threshold>

    <weight-threshold bone="NPC R Thigh [RThg]">1</weight-threshold>

    <weight-threshold bone="NPC Spine [spn0]">1</weight-threshold>

    <weight-threshold bone="NPC Spine1 [spn1]">1</weight-threshold>

    <weight-threshold bone="NPC Spine2 [spn2]">1</weight-threshold>

    <weight-threshold bone="NPC Pelvis [Pelv]">1</weight-threshold>

    <weight-threshold bone="NPC L Clavicle [LClv]">1</weight-threshold>

    <weight-threshold bone="NPC R Clavicle [RClv]">1</weight-threshold>

    <weight-threshold bone="NPC L Butt">1</weight-threshold>

    <weight-threshold bone="NPC R Butt">1</weight-threshold>

    <weight-threshold bone="SL1">0.1</weight-threshold>

    <weight-threshold bone="SR1">0.1</weight-threshold>

  </per-vertex-shape>

 

  <per-vertex-shape name="Foot:Legs:3">

    <margin>1</margin>

    <priority>1</priority>

    <tag>skirt</tag>

  <no-collide-with-tag>hand</no-collide-with-tag>

  <no-collide-with-tag>skirt</no-collide-with-tag>

  <no-collide-with-tag>hair</no-collide-with-tag>

    <no-collide-with-bone>NPC L Forearm [LLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC R Forearm [RLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist1 [LLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist1 [RLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist2 [LLt2]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist2 [RLt2]</no-collide-with-bone>

    <weight-threshold bone="NPC L Breast">1</weight-threshold>

    <weight-threshold bone="NPC R Breast">1</weight-threshold>

    <weight-threshold bone="NPC L Breast01">1</weight-threshold>

    <weight-threshold bone="NPC R Breast01">1</weight-threshold>

    <weight-threshold bone="NPC L Thigh [LThg]">1</weight-threshold>

    <weight-threshold bone="NPC R Thigh [RThg]">1</weight-threshold>

    <weight-threshold bone="NPC Spine [spn0]">1</weight-threshold>

    <weight-threshold bone="NPC Spine1 [spn1]">1</weight-threshold>

    <weight-threshold bone="NPC Spine2 [spn2]">1</weight-threshold>

    <weight-threshold bone="NPC Pelvis [Pelv]">1</weight-threshold>

    <weight-threshold bone="NPC L Clavicle [LClv]">1</weight-threshold>

    <weight-threshold bone="NPC R Clavicle [RClv]">1</weight-threshold>

    <weight-threshold bone="NPC L Butt">1</weight-threshold>

    <weight-threshold bone="NPC R Butt">1</weight-threshold>

    <weight-threshold bone="XFL1">0.5</weight-threshold>

    <weight-threshold bone="XFR1">0.5</weight-threshold>

    <weight-threshold bone="XFL2">0.5</weight-threshold>

    <weight-threshold bone="XFR2">0.5</weight-threshold>

  </per-vertex-shape>

 

  <per-vertex-shape name="Foot:Legs:2.001">

    <margin>1</margin>

    <priority>1</priority>

    <tag>skirt</tag>

  <no-collide-with-tag>hand</no-collide-with-tag>

  <no-collide-with-tag>skirt</no-collide-with-tag>

  <no-collide-with-tag>hair</no-collide-with-tag>

    <no-collide-with-bone>NPC L Forearm [LLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC R Forearm [RLar]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist1 [LLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist1 [RLt1]</no-collide-with-bone>

    <no-collide-with-bone>NPC L ForearmTwist2 [LLt2]</no-collide-with-bone>

    <no-collide-with-bone>NPC R ForearmTwist2 [RLt2]</no-collide-with-bone>

    <weight-threshold bone="NPC L Breast">1</weight-threshold>

    <weight-threshold bone="NPC R Breast">1</weight-threshold>

    <weight-threshold bone="NPC L Breast01">1</weight-threshold>

    <weight-threshold bone="NPC R Breast01">1</weight-threshold>

    <weight-threshold bone="NPC L Thigh [LThg]">1</weight-threshold>

    <weight-threshold bone="NPC R Thigh [RThg]">1</weight-threshold>

    <weight-threshold bone="NPC Spine [spn0]">1</weight-threshold>

    <weight-threshold bone="NPC Spine1 [spn1]">1</weight-threshold>

    <weight-threshold bone="NPC Spine2 [spn2]">1</weight-threshold>

    <weight-threshold bone="NPC Pelvis [Pelv]">1</weight-threshold>

    <weight-threshold bone="NPC L Clavicle [LClv]">1</weight-threshold>

    <weight-threshold bone="NPC R Clavicle [RClv]">1</weight-threshold>

    <weight-threshold bone="NPC L Butt">1</weight-threshold>

    <weight-threshold bone="NPC R Butt">1</weight-threshold>

  </per-vertex-shape>

</system>

 

 

 

 

Well, I thought I made myself clear in my very first post, but I guess it wasn't that easy to understand.

I am really thankful for your help, but it still isn't what I desire. I will try to explain it from the very beginning again since it seems that you didn't fully understand my problem:

 

Currently, I know of 2 different ways to implement HDT-SMP physics into a body piece:

The first one is by triggering it via the right NiTriShape name to load the corresponding xml from defaultsBPPs.xml.

The second is the method you showed above, by linking to a xml directly inside the nif file.

Both options do have advantages and advantages, which I will describe below:

 

Loading stuff via defaultsBPPs.xml will only work if you got the proper NiTriShape names (which isn't a big problem, just a nuisance. The real problem is the fact that you won't be able to make use of custom bones defined inside the nif files. I described the problem one post earlier with the Tail. As long as you don't have the bone defined in your skeleton.nif, physic's won't work on this piece, even thought you had it defined inside the xml file as well as in the nif file. That limits the amout of customization you can do to the piece since you essentially won't be able to add unique physics like ties, chains and the like. On the other hand thought, you are able to load multiple xml files at the same time. You could load physics for breasts via default body shape, but add skirt physics via a second shape.

 

The second option works perfectly fine for custom bones. You can define everything that is presented in the nif file. Custom bones, breast physics etc all work perfectly fine, but you can only load one single xml file. That means as long as you link to a custom xml file via the nif file, you won't be able to add a second one, neither throgh defaultBPPs.xml, nor directly loading a second xml. Basicly that means that you have to redefine every physics for that piece of armor into it's custom xml file again, since it won't load your pre-defined xmls from defaultBPPs.xml. That leads to different physics for different armor pieces even if they use the same parts. An armor piece with custom physics will probably have different breast physics because it has to re-define them into its own xml, and changing your default xmls (those which are default in defaultBPPs.xml, those that work on your nude body) won't have any effect on those armor pieces.

 

And that's where my problem lies. I would like to make armor that uses default breast physics, shared among all of them, while also adding custom physics for skirts, ties, chains, etc. The armor you posted before does have it's unique physics, as well as it's own breast physics instead of using the default ones.

 

 

What I didn't know is that it only looks for shape name in xml when linked in defaultbbp's.xml and not the bone names as well. I thought it would map bone name if told it to just like shape name. I was thinking if you set the bones up like in that .xml and remove the custom body physics and just use the part for bone and link <map bone name="bone1,bone2,ect" file="skse\plugins\hdtskinnedmeshconfigs\customarmor.xml to defualtbbp's,xml it might work but I see it's not that simple.

Link to comment

I only have one last question about the .XML's.  How do I make my characters parts stop dancing and twitching?  I've modified the Baseshape.xml and Baseshape003.xml and neither of them has had any effect on my character.  I'm running Bodyslide2 on the cbbe-hdt body type, and using in-game sliders to change the shape.  The main issue I'm having is that my characters "rear" simply will not hold still.  It's constantly twitching like crazy.

 

 

Edit: Well nvm...  I found out it was Baseshape.xml.  Messing with all the settings wasn't really working, until I tried the "Friction" settings.  I maxed them out and sure enough, my characters rear may as well be solid.  The xml settings don't really seem to do much though.  Messing with all the other settings really didn't get me anywhere at all.  Only the Friction settings really caused a noticable reaction.  Strange...

Link to comment

I only have one last question about the .XML's.  How do I make my characters parts stop dancing and twitching?  I've modified the Baseshape.xml and Baseshape003.xml and neither of them has had any effect on my character.  I'm running Bodyslide2 on the cbbe-hdt body type, and using in-game sliders to change the shape.  The main issue I'm having is that my characters "rear" simply will not hold still.  It's constantly twitching like crazy.

 

 

Edit: Well nvm...  I found out it was Baseshape.xml.  Messing with all the settings wasn't really working, until I tried the "Friction" settings.  I maxed them out and sure enough, my characters rear may as well be solid.  The xml settings don't really seem to do much though.  Messing with all the other settings really didn't get me anywhere at all.  Only the Friction settings really caused a noticable reaction.  Strange...

 

Actually every single setting in the xml is at least doing something. It's just a bit hard to figure it out. Otherwise, go for stiffness or dampening effects. It's been a while since I tried messing around with them, so I am not that sure about their specific purposes, but they both do reduce the bouncing in different ways.

Link to comment

Tried to decrease the everlasting basketball dribble akin to kyukatsuki's on many bodytypes for both breast and butt nodes by increasing breast friction from 0.0 to 0.3 and butt from 0.5 to 0.8. The result was almost unnoticeable on butt but the boobs became very viscous and moved in slow motion dribble instead of quickly stabilizing. Friction on boobs looks odd compared to the butt. Probably increasing stiffness and dampening might ease the problem as Knaeggchen said.

 

Next I'll see if increasing the butt weight threshold from 0.00 to 0.05 will decrease the jiggle.

 

P.S. What is the difference between friction and rolling friction? Is rolling friction limited to meshes colliding in a rolling motion?

 

Edit: Looks like I was using an old version of the bodyshape xml, bigger thresholds = less jitter.

 

Edit 2: Dampened jiggle and reached a workable stage with OK visuals, somewhat viscous boobs, butt still jitters with some objects/armours. Never got thighs to jiggle/collide though.

My modified xml: BaseShape.7z

Link to comment

 

 

Not my work at all, but this reveals a more complicated setup than the Files HydrogenSaysHDT posted, the chinese text may explain more but I found the other one before discovering that on the Baidu site, you need to download the individual files not the folders.

 

Folders and Files are designated thus.

 

HydrogenSaysHDT's Files and Folders for hdtSkinnedMeshPhysics

 

HDTSkinnedMeshPhysics.dll

HDTSkinnedMeshConfigs

cbbe-tbbp.xml
defaultBBPs.xml

 

The Full File Structure and I assume required files of the Prepacked Version.

 

SkSE

Plugins

HDTSkinnedMeshPhysics.dll
HDTSkyrimMemPatch.dll
HDTSkyrimMemPatch.ini

HDTSkinnedMeshConfigs

BaseShape003.xml
CalienteHandFemale1st.xml
cbbe-tbbp.xml
defaultBBPs.xml
HandFemale1stPerson.xml
hands_1.xml
Seven_Cleavage.xml
UNP TM.xml
UNP TopModel TBBP.xml
UNPB_TBBP_0.xml
UNPB_TBBP_1.xml

 

The two key points are the inclusion of these two files

HDTSkyrimMemPatch.dll
HDTSkyrimMemPatch.ini

These are also included on HydrogenSaysHDT's Download site, with Source code, but you have to click on the "Binarization" user name to get up to top folders level.

 

The other obvious change, apart from correct SkSE folder structure is, the inclusion of many more body types, than the original.

 

The download is in 4 parts

The above Packaged Mod
HDT-SMP.7z

Resources
HDT-SMP Resources.7z

Demo Mod
[HDT-SMP]Necrosarium Set Demo.zip

Plus the main page has a video tutorial
SMP Tutorial.flv

Video is in Chinese, but the process is shown clearly, so still useful to an extent. Until something better exists.

 

The Tutorial is right here on LoversLab but doesn't actually indicate all the added content, which is why I'm making this post.

HDT Skinned Mesh Physics Tutorial by ApoKrytia

Might be enough info to get you started, whether just using or mod making.

 

 

 

I am confused so where is the link to download this ?? Why not upload here or mega etc.. 

Link to comment

 

 

Not my work at all, but this reveals a more complicated setup than the Files HydrogenSaysHDT posted, the chinese text may explain more but I found the other one before discovering that on the Baidu site, you need to download the individual files not the folders.

 

Folders and Files are designated thus.

 

HydrogenSaysHDT's Files and Folders for hdtSkinnedMeshPhysics

 

HDTSkinnedMeshPhysics.dll

HDTSkinnedMeshConfigs

cbbe-tbbp.xml

defaultBBPs.xml

 

The Full File Structure and I assume required files of the Prepacked Version.

 

SkSE

Plugins

HDTSkinnedMeshPhysics.dll

HDTSkyrimMemPatch.dll

HDTSkyrimMemPatch.ini

HDTSkinnedMeshConfigs

BaseShape003.xml

CalienteHandFemale1st.xml

cbbe-tbbp.xml

defaultBBPs.xml

HandFemale1stPerson.xml

hands_1.xml

Seven_Cleavage.xml

UNP TM.xml

UNP TopModel TBBP.xml

UNPB_TBBP_0.xml

UNPB_TBBP_1.xml

 

The two key points are the inclusion of these two files

HDTSkyrimMemPatch.dll

HDTSkyrimMemPatch.ini

These are also included on HydrogenSaysHDT's Download site, with Source code, but you have to click on the "Binarization" user name to get up to top folders level.

 

The other obvious change, apart from correct SkSE folder structure is, the inclusion of many more body types, than the original.

 

The download is in 4 parts

The above Packaged Mod

HDT-SMP.7z

 

Resources

HDT-SMP Resources.7z

 

Demo Mod

[HDT-SMP]Necrosarium Set Demo.zip

 

Plus the main page has a video tutorial

SMP Tutorial.flv

 

Video is in Chinese, but the process is shown clearly, so still useful to an extent. Until something better exists.

 

The Tutorial is right here on LoversLab but doesn't actually indicate all the added content, which is why I'm making this post.

HDT Skinned Mesh Physics Tutorial by ApoKrytia

Might be enough info to get you started, whether just using or mod making.

 

 

 

I am confused so where is the link to download this ?? Why not upload here or mega etc.. 

 

The download is linked at the bottom of first post but that is the old version of the plugin don't know if they updated it. As it is I don't think Hydrogensayshdt has gave permission to link the plugin anywhere else because it not completed yet only for tester right now. The updated plugin can be found on this link http://bbs.3dmgame.com/thread-4497700-1-1.html

 

If your a nvidia user you will have to download the runtimes for intel's opencl 2.0 for the new plugin to work.

Link to comment

Just to clear things up:
 

HDT-SMP is NOT compatible with HDT-PE built armor, hair and such, correct?

 

I hate to ask, but I've read so much and it's just going in one hole and out the other at this point. 

 

 

Edit: So I tried it out, just dropping HDTSMP in, removing HDTPE and everything works. Armor, body shenanigans, all that jazz.

 

One thing I noticed is on broken armor that I'd messed up converting myself or overdid the sliders on is with HDTSMP it pushes skin/flesh through holes in the armor mesh, as HDTPE didn't seem to do that, like it was fluid and flowing through the mesh a little. Neat. Skin-tight fishnet anyone?

 

Also does something odd to ENB but I'll figure that shitfest out later.

 

Edit #2, Electric Bugaloo: Added collisions to the body mesh following a couple tutorials on here, any combination of settings just crashes. Default, drop in settings work without adding XML to body nif.

 

Still can't figure out the ENB+HDTSMP interaction. 

 

ENB effects off with HDT-SMP on:

 

 

P6oVxZO.jpg

 

 

 

 

ENB Effects on with HDT-SMP on:

 

 

 

arMqsuW.jpg

 

 

 

Edit #3 I like caffeine edition: 

 

Got body collisions and wobble working using:

 

\SKSE\Plugins\hdtSkinnedMeshConfigs\BaseShape003.xml in CBBE HDT NIF and the following in BaseShape003.xml

 

 

 

 
 
<per-triangle-shape name="BaseShape">
  <margin>0.1</margin>
  <priority>1</priority>
  <prenetration>0</prenetration>
  <tag>body</tag>
  <weight-threshold bone="NPC L Breast">0.1</weight-threshold>
  <weight-threshold bone="NPC R Breast">0.1</weight-threshold>
  <weight-threshold bone="NPC L Breast01">0.1</weight-threshold>
  <weight-threshold bone="NPC R Breast01">0.1</weight-threshold>
  <weight-threshold bone="NPC Belly">0.1</weight-threshold>
  <weight-threshold bone="NPC L Butt">0.1</weight-threshold>
  <weight-threshold bone="NPC R Butt">0.1</weight-threshold>
</per-triangle-shape>
 
<per-vertex-shape name="Hands">
  <margin>0.1</margin>
  <priority>4</priority>
  <prenetration>0</prenetration>
  <tag>hand</tag>
</per-vertex-shape>
 
 

 
Are there any more up to date versions of HDT-SMP? The breast and ass physics are nice, collision is amusing but I have way too many problems with it (and ENB) to give up HDT-PE.
Link to comment

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...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use