Jump to content

Recommended Posts

SenpoDressScreenShot4.thumb.jpg.c6bfad5953760bb11c50b33711628c26.jpg

SenpoDressScreenShot5.thumb.jpg.ea3207092c8261a0113bc83ac2f601e2.jpg

 

Description:

7b bombshell tbbp weight 1, no weight slider support.

To get them type "Help Senpo" in console, then use player.additem xxxxxxxx # commmand.

 

Requirements:

hdtSSEPhysics and hdtSSEFramework(always get the latest version,  might not work with previous versions.)

Racemenu SSE Alpha(nioverride is needed for highheel effect)

(read this for racemenu installation guide)

 

Thanks to

hydrogensayshdt for hdtSSEPhysics

ousnius  for SSE Nif Optimizer

 

PS:

If a shape have more than 60(not sure, no test, just a guess) vertex groups, some vertices will go to the infinite in game.

Use nifskope2 to set the bones number per skin partition to 60 won't help.

So i just need to separate the shape to several parts.

Hope this would help some people who want to convert smp outfits to sse.

SenpoDress3_A3_SE.7z

UUNP-HDT.xml

Link to comment

some tips to tweak breast bounce physics

 

Take uunp-hdt body for example. To setup bbp, we need to apply some physics motion to bone [NPC L/R Breast].

 

First, claim the parent bones([NPC L/R PreBreast]) that [NPC L/R Breast] should be linked to.

Use a <bone-default element> to change the default property of a <bone> element. Set mass to 0 to claim bones to be kinematic bones, thus those bones will act like normal bones, just follow the animation. If you don't specifically claim a certain property of a <bone>, it will just use the default value of the closest <bone-default> above.

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

<bone name="NPC L PreBreast"/>
<bone name="NPC R PreBreast"/>

Then, claim the property of the physics bones of which the motion will be calculated by hdtSSEPhysics in real time.

<mass> determine the gravity apply to the bone, <inertia> determine how much force should apply to the bone to get a certain acceleration. For example, set <mass>0.01/<inertia>(3,3,3) for cloth, and set <mass>1/<inertia>(5,5,5) for earrings.

<centerOfMassTransform>can change the position of the center of mass of a bone(ah, ma bloken englisu). <origin>(0,0,0) means exactly the same positon of the bone. In this case, we set <origin> to (0,2,0) to get a move along y axis(+y front, -y back, +x right, -x left, +z up, -z down). Why? Because [NPC L/R Breast] seems have a same position with [NPC L/R PreBreast]. So just pull the center of mass out a little bit. <basis> is a quaternion which define a rotation that basically we don't need. Anyway here is the format: (xsinθ/2, ysinθ/2, zsinθ/2, cosθ/2), (x,y,z) is the vector that <origin> rotate around, and θ is the degree rotate by. Thus, <basis> (0,0,0,1) represents no rotation.

Some propertys leave as default value that defined by the <bone-default> above.

<linearDamping>[0, 1], v'=v*(1-linearDamping). <angularDamping>[0, 1], r'=r*(1-angularDamping).

<restitution>default is 0, I guess it's something about the velocity restitution when a collsion happen. I always set it to 1 in cloth.

<margin-multiplier>default is 1, no need if there aren't collision, skip.

<bone-default>
	<mass>1.000000</mass>
	<inertia x="5" y="5" z="5"/>
	<centerOfMassTransform>
		<basis x="0" y="0" z="0" w="1"/>
		<origin x="0" y="2" z="0"/>
	</centerOfMassTransform>
</bone-default>
	
<bone name="NPC L Breast"/>
<bone name="NPC R Breast"/>

Finally, set up the constraints.

<frameInB> means bodyB is parent node. Yes you could also use <frameInA> to set bodyA as parent node, then just set <useLinearReferenceFrameA>to true. Otherwise, you'd better leave it as default value.

<linearLowerLimit> and <linearUpperLimit> determin the linear motion range, the coordinate is same with the "Absolute:Parent" coordinate in 3ds max. Usually, both set to (0.0,0) to lock the length betwean two bones in cloth. In this case, we set something around (-7,-7,-7) to (7,7,7), yes, more bounce. <angularLowerLimit> and <angularUpperLimit> are similar to the two above, but limit the rotation range, value is radian, don't need to set too wide, (-0.3,-0.3,-0.3) to (0.3,0.3,0.3) is ok.

<linearStiffness>/<angularStiffness>, spring stiffness, I'd like to set it around 2000.

<linearDamping>/<angularDamping>, value range not sure, 0.99 it's ok in this case.

<linearEquilibrium>define th balance point of spring motion. (-y front, +y back, -z up, +z down), just set y and z to negative numbers to get a good shape.

<linearBounce>/<angularBouce>, don't know what exactly they are.

<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="-7" y="-7" z="-7"/>
	<linearUpperLimit x="7" y="7" z="7"/>
	<angularLowerLimit x="-0.3" y="-0.3" z="-0.3"/>
	<angularUpperLimit x="0.3" y="0.3" z="0.3"/>
	<linearStiffness x="2000" y="2000" z="2000"/>
	<angularStiffness x="2000" y="2000" z="2000"/>
	<linearDamping x="0.99" y="0.99" z="0.99"/>
	<angularDamping x="0.99" y="0.99" z="0.99"/>
	<linearEquilibrium x="0" y="-1" 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-default>
	
	<generic-constraint bodyA="NPC L Breast" bodyB="NPC L PreBreast"/>
	<generic-constraint bodyA="NPC R Breast" bodyB="NPC R PreBreast"/>

That'a all. There is a demo file in the attachment file section above.

Link to comment

some tips about constraint

 

Use <constraint-group> to get a more precise constraint to avoid streching problem with a little bit performance loss. But same bone should not appear in different <constraint-group>.

	<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.3" y="-0" z="-0.3" />
		<angularUpperLimit x="0.3" y="0" z="0.3" />
		<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>
	
	<constraint-group>
		<generic-constraint bodyA="cOJzZQujuXiu12" bodyB="cOJzZQujuXiu11"/>
		<generic-constraint bodyA="cOJzZQujuXiu13" bodyB="cOJzZQujuXiu12"/>
	</constraint-group>
	
	<constraint-group>
		<generic-constraint bodyA="cOJzZQujuXiu32" bodyB="cOJzZQujuXiu31"/>
		<generic-constraint bodyA="cOJzZQujuXiu33" bodyB="cOJzZQujuXiu32"/>
	</constraint-group>

 

Link to comment

some tips about collision

 

You don't want to get your cpu overloaded, right? Just set up all the collision reasonably. To reduce the calculation of collision, try to:

  1. limit the usage of collision
  2. set the properies of collision appopriatly
  3. use a simple low-poly mesh as collision proxy of a complex high-poly mesh

 

<per-triangle-shape> use triangles of a mesh as collision shape. The more triangles used the more calculation, and the more likely your cpu is to get overloaded.

  • <shared>{private, internal, public}: Set the effect scope of a collision shape. "private" for only this xml (or nif), "internal" for this character, "public" for all characters. Default value is "public", should set to "internal" or "private" if you don't expect it to interact with other characters.
  • <margin> and <prenetration>: image.png.1443c71fd0655108dda180e9ec7ee0ba.png You can use cloth modifier of 3ds max as reference. Set <prenetration> appoprately to avoid getting cloth stuck in body. But don't set <prenetration> too large.
  • <tag> and <no-collide-with-tag>: use these to build up collision filter.
  • <disable-tag> and <disable-priority>: If a certain collision shape in this character have a tag which value is the same with the one in <disable-tag>, then this collision shape won't take effect. If they have the same <disable-tag>, then the one with largest <disable-priority> will take effect. If they also have the same <disable-priority>, then which one will take effect are uncertain.
  • <weight-threshold>: Only vertices have a weight larger than the threshold can create collision. Since bones weight won't be larger than 1, set it to 1 to avoid those vertices used to create collision. And there are up to 4 bones weight in a vertex,  so set it to 0.2(a little bit smaller than 0.25) to reduce duplicated collision and boost performance a little bit( or not).
	<per-triangle-shape name="Body">
		<shared>internal</shared>
		<margin>1</margin>
		<prenetration>4</prenetration>
		<tag>body</tag>
  		<tag>tag1</tag>
  		<tag>tag2</tag>
		<disable-tag>body</disable-tag>
		<disable-priority>100</disable-priority>
		<!-- <no-collide-with-tag>hair</no-collide-with-tag> -->
		<no-collide-with-tag>head</no-collide-with-tag>
		<no-collide-with-tag>hands</no-collide-with-tag>
		<no-collide-with-tag>body</no-collide-with-tag>
		<!-- <no-collide-with-tag>tail</no-collide-with-tag> -->
		<no-collide-with-tag>feet</no-collide-with-tag>
		<no-collide-with-tag>ground</no-collide-with-tag>
		<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 Forearm [LLar]">1</weight-threshold>
		<weight-threshold bone="NPC R Forearm [RLar]">1</weight-threshold>
		<weight-threshold bone="NPC L ForearmTwist1 [LLt1]">1</weight-threshold>
		<weight-threshold bone="NPC R ForearmTwist1 [RLt1]">1</weight-threshold>
		<weight-threshold bone="NPC L ForearmTwist2 [LLt2]">1</weight-threshold>
		<weight-threshold bone="NPC R ForearmTwist2 [RLt2]">1</weight-threshold>
		<weight-threshold bone="NPC L UpperArm [LUar]">1</weight-threshold>
		<weight-threshold bone="NPC R UpperArm [RUar]">1</weight-threshold>
		<weight-threshold bone="NPC L UpperarmTwist1 [LUt1]">1</weight-threshold>
		<weight-threshold bone="NPC R UpperarmTwist1 [RUt1]">1</weight-threshold>
		<weight-threshold bone="NPC L UpperarmTwist2 [LUt2]">1</weight-threshold>
		<weight-threshold bone="NPC R UpperarmTwist2 [RUt2]">1</weight-threshold>
		<weight-threshold bone="NPC L Breast">1</weight-threshold>
		<weight-threshold bone="NPC R Breast">1</weight-threshold>
		<!-- <weight-threshold bone="NPC Spine [Spn0]">0.2</weight-threshold> -->
		<!-- <weight-threshold bone="NPC Spine1 [Spn1]">0.2</weight-threshold> -->
		<!-- <weight-threshold bone="NPC Spine2 [Spn2]">0.2</weight-threshold> -->
		<!-- <weight-threshold bone="NPC Belly">0.2</weight-threshold> -->
		<!-- <weight-threshold bone="NPC Pelvis [Pelv]">0.2</weight-threshold> -->
		<!-- <weight-threshold bone="NPC L Pussy02">1</weight-threshold> -->
		<!-- <weight-threshold bone="NPC R Pussy02">1</weight-threshold> -->
		<!-- <weight-threshold bone="NPC R Butt">0.2</weight-threshold> -->
		<!-- <weight-threshold bone="NPC R Butt">0.2</weight-threshold> -->
		<!-- <weight-threshold bone="NPC L Thigh [LThg]">0.2</weight-threshold> -->
		<!-- <weight-threshold bone="NPC R Thigh [RThg]">0.2</weight-threshold> -->
		<!-- <weight-threshold bone="NPC L Calf [LClf]">0.2</weight-threshold> -->
		<!-- <weight-threshold bone="NPC R Calf [RClf]">0.2</weight-threshold> -->
	</per-triangle-shape>

 

<per-vertex-shape> create collsion balls at every vertices, similar to <per-triangle-shape> but have no <prenetration> property.

 

Collisions between <per-vertex-shape> and <per-vertex-shape> or between <per-vertex-shape> and <per-triangle-shape> are supported. But setting collision between two <per-triangle-shape> is not recommended.

Normally use <per-triangle-shape> on body to get a precise collision shape and use <per-vertex-shape> on cloth.

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