$collisionjoints: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(→‎Options: Added confirm notice for the All item... I've found the $masscenter causing a compile error when using $collisionjoints)
No edit summary
Line 1: Line 1:
{{toc-right}}
{{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.
The [[QC command]] '''<code>$collisionjoints</code>''' is used to define a [[collision mesh]] made up of multiple independent parts, either for a [[ragdoll]] or for [[$sequence|an animated object]]. If your model has no moving parts that need to collide, use <code>[[$collisionmodel]]</code> instead.


Jointed collision models are most often used for ragdolls, but also work for [[$sequence|animated]] movement.
A ragdoll can have up to 25 separate parts (i.e. 25 bones can be simulated). The limit for an animated model is unknown.


{{tip|Use <code>vcollide_wireframe 1</code> to view collision meshes in-game.}}
{{tip|Use <code>vcollide_wireframe 1</code> to view collision meshes in-game.}}
{{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|lod mesh]]es. See [[collision mesh]].}}
{{note|{{confirm|There can be up to 25 collision joints in a ragdoll.}}}}


== Syntax ==
== Syntax ==

Revision as of 03:02, 23 May 2011

The QC command $collisionjoints is used to define a collision mesh made up of multiple independent parts, either for a ragdoll or for an animated object. If your model has no moving parts that need to collide, use $collisionmodel instead.

A ragdoll can have up to 25 separate parts (i.e. 25 bones can be simulated). The limit for an animated model is unknown.

Tip.pngTip:Use vcollide_wireframe 1 to view collision meshes in-game.

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.
Confirm:Is $masscenter allowed?
$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