$collisionjoints: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
(corrections and cleaning)
Line 1: Line 1:
The [[QC command]] '''<code>$collisionjoints</code>''' is used to define a jointed collision model for a [[ragdoll]]. A jointed collision model is used by [[VPhysics]] to detect collisions and animate the model's Skeleton accordingly. The main parameter is the name of the SMD containing the  [[collision mesh]]. The [[Rigging]] parameters configure the way the skeletal joints respond to Vphysics forces.
{{toc-right}}
 
The [[QC command]] '''<code>$collisionjoints</code>''' is used to define a jointed collision model for a [[ragdoll]]. A jointed collision model is used by [[VPhysics]] to detect collisions and animate the model's Skeleton accordingly.


Jointed collision models are most often used for ragdolls, but also work for [[$sequence|animated]] movement.
Jointed collision models are most often used for ragdolls, but also work for [[$sequence|animated]] movement.
Line 7: Line 9:
{{tip|If your model has no moving parts that need to collide, use <code>[[$collisionmodel]]</code>.}}
{{tip|If your model has no moving parts that need to collide, use <code>[[$collisionmodel]]</code>.}}


{{note|Collision meshes should be extremely low-poly in comparison to [[reference mesh]]es, and even [[lod mesh]]es. See [[collision mesh]].}}
{{note|Collision meshes should be extremely low-poly in comparison to [[reference mesh]]es, and even [[$lod|lod mesh]]es. See [[collision mesh]].}}


{{note|The max physics joints for a ragdoll are 25}}
{{note|{{confirm|There can be up to 25 collision joints in a ragdoll.}}}}
:{{TODO|Confirm.}}


== Syntax ==
== Syntax ==
Line 21: Line 22:
== Options ==
== Options ==


;All <code>[[$collisionmodel]]</code> options, except <code>$concave</code>
; All <code>[[$collisionmodel]]</code> options, ''except <code>$concave</code>''
:This type of collision mesh is always concave...otherwise how could it be animated?
: Each individual bone's collision mesh is convex. Only concavity ''between'' bones is permitted.
;$rootbone <[[string]]|bone>
; $rootbone <[[string]]|bone>
:Overrides the SMD's root bone.
: Overrides the SMD's root bone.
:{{TODO|Purpose.}}
: {{TODO|Purpose.}}
;$jointskip <[[string]]|bone>
; $jointskip <[[string]]|bone>
: Eliminates a joint in the skeleton that you don't want to use in collisions.
: Eliminates a joint in the skeleton that you don't want to use in collisions.
; <code>$jointmerge <[[string]]|bone1> <[[string]]|bone2></code>
; <code>$jointmerge <[[string]]|bone1> <[[string]]|bone2></code>
: Merges the vertex assignments for two joints.  
: Merges the vertex assignments for two joints.  
; <code>[[$jointconstrain]] <[[string]]|bone> <axis> <allow_option> <min_angle> <max_angle> <friction></code>
; <code>[[$jointconstrain]] <[[string]]|bone> <axis> <allow_option> <min_angle> <max_angle> <friction></code>
: Limits of the a bone's movement relative to its parent bone. See [[$jointconstrain]] for a full description.
: Limits of the a bone's movement relative to its parent bone. See [[$jointconstrain]] for a full description.
Line 40: Line 41:
; <code>$jointmassbias <[[string]]|bone> <[[float]]|bias></code>
; <code>$jointmassbias <[[string]]|bone> <[[float]]|bias></code>
: Mass is automatically distributed by volume, this lets you bias it per-bone.
: Mass is automatically distributed by volume, this lets you bias it per-bone.
:{{TODO|Difference from a [[$weightlist]].}}
: {{TODO|Difference from a [[$weightlist]].}}
; <code>$noselfcollisions</code>
; <code>$noselfcollisions</code>
: Disables collisions between bones in the same collision model for performance.
: Disables collisions between bones in the same collision model for performance.
:{{warning|Results in arms clipping through torsos and other weirdness if used improperly!}}
: {{warning|Results in arms clipping through torsos and other weirdness if used improperly!}}
; <code>$jointcollide <[[string]]|bone1> <[[string]]|bone2></code>
; <code>$jointcollide <[[string]]|bone1> <[[string]]|bone2></code>
: If any <code>$jointcollide</code> pairs are specified, only those joints collide with each other.  
: If any <code>$jointcollide</code> pairs are specified, only those joints collide with each other.  
Line 50: Line 51:


== Example ==
== Example ==
[[$collisionjoints]] "bip01_phys.smd"
 
{
<source lang=php>
$mass 115.0
$collisionjoints "bip01_phys.smd"
$inertia 2.00
{
$damping 0.01
$mass 115.0
$rotdamping 0.40
$inertia 2.00
$rootbone "bip01_pelvis"
$damping 0.01
$jointmerge "bip01_pelvis" "bip01_spine"
$rotdamping 0.40
$rootbone "bip01_pelvis"
$jointmassbias "bip01_l_arm2" 2.00
$jointmerge "bip01_pelvis" "bip01_spine"
$jointconstrain "bip01_l_arm2" x limit 0.00 0.00 0.00
 
$jointconstrain "bip01_l_arm2" y limit 0.00 0.00 0.00
$jointmassbias "bip01_l_arm2" 2.00
$jointconstrain "bip01_l_arm2" z limit -120.00 4.00 0.20
$jointconstrain "bip01_l_arm2" x limit 0.00 0.00 0.00
$jointconstrain "bip01_l_arm2" y limit 0.00 0.00 0.00
$jointrotdamping "bip01_head" 5.00
$jointconstrain "bip01_l_arm2" z limit -120.00 4.00 0.20
$jointconstrain "bip01_head" x limit -20.00 20.00 0.00
 
$jointconstrain "bip01_head" y limit -25.00 25.00 0.04
$jointrotdamping "bip01_head" 5.00
$jointconstrain "bip01_head" z limit -13.00 30.00 0.04
$jointconstrain "bip01_head" x limit -20.00 20.00 0.00
}
$jointconstrain "bip01_head" y limit -25.00 25.00 0.04
$jointconstrain "bip01_head" z limit -13.00 30.00 0.04
}
</source>


== See also ==
== See also ==
*[[$weightlist]]
*[[$weightlist]]
*[[VPhysics]]
*[[VPhysics]]

Revision as of 13:55, 2 January 2011

The QC command $collisionjoints is used to define a jointed collision model for a ragdoll. A jointed collision model is used by VPhysics to detect collisions and animate the model's Skeleton accordingly.

Jointed collision models are most often used for ragdolls, but also work for animated movement.

Tip.pngTip:Use vcollide_wireframe 1 to view collision meshes in-game.
Tip.pngTip:If your model has no moving parts that need to collide, use $collisionmodel.
Note.pngNote:Collision meshes should be extremely low-poly in comparison to reference meshes, and even lod meshes. See collision mesh.
Note.pngNote:
Confirm:There can be up to 25 collision joints in a ragdoll.

Syntax

$collisionjoints <collision mesh SMD>
{
    <options>
}

Options

All $collisionmodel options, except $concave
Each individual bone's collision mesh is convex. Only concavity between bones is permitted.
$rootbone <string|bone>
Overrides the SMD's root bone.
Todo: Purpose.
$jointskip <string|bone>
Eliminates a joint in the skeleton that you don't want to use in collisions.
$jointmerge <string|bone1> <string|bone2>
Merges the vertex assignments for two joints.
$jointconstrain <string|bone> <axis> <allow_option> <min_angle> <max_angle> <friction>
Limits of the a bone's movement relative to its parent bone. See $jointconstrain for a full description.
$jointinertia <string|bone> <float|scale>
Per-bone $inertia.
$jointdamping <string|bone> <float|scale>
Per-bone $damping.
$jointrotdamping <string|bone> <float|scale>
Per-bone $rotdamping.
$jointmassbias <string|bone> <float|bias>
Mass is automatically distributed by volume, this lets you bias it per-bone.
Todo: Difference from a $weightlist.
$noselfcollisions
Disables collisions between bones in the same collision model for performance.
Warning.pngWarning:Results in arms clipping through torsos and other weirdness if used improperly!
$jointcollide <string|bone1> <string|bone2>
If any $jointcollide pairs are specified, only those joints collide with each other.
$animatedfriction <float|FrictionTimeIn> <float|FrictionTimeOut> <float|FrictionTimeHold> <float|MinAnimatedFriction> <float|MaxAnimatedFriction>
Used to animate the amount of friction on joints over time.

Example

$collisionjoints "bip01_phys.smd"
{
	$mass			115.0
	$inertia		2.00
	$damping		0.01
	$rotdamping		0.40
	$rootbone		"bip01_pelvis"
	$jointmerge		"bip01_pelvis"	"bip01_spine"

	$jointmassbias		"bip01_l_arm2"	2.00
	$jointconstrain		"bip01_l_arm2"	x limit	0.00 0.00 0.00
	$jointconstrain		"bip01_l_arm2"	y limit	0.00 0.00 0.00
	$jointconstrain		"bip01_l_arm2"	z limit	-120.00 4.00 0.20

	$jointrotdamping	"bip01_head"	5.00
	$jointconstrain		"bip01_head"	x limit	-20.00 20.00 0.00
	$jointconstrain		"bip01_head"	y limit	-25.00 25.00 0.04
	$jointconstrain		"bip01_head"	z limit	-13.00 30.00 0.04
}

See also