$collisionmodel: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
mNo edit summary
(more options)
Line 7: Line 7:
{{tip|Set the Console Variable <code>vcollide_wireframe 1</code> to view collision meshes in-game.}}
{{tip|Set the Console Variable <code>vcollide_wireframe 1</code> to view collision meshes in-game.}}


== Usage ==
== Syntax ==


  [[$collisionmodel]] "<collision mesh SMD>.smd"
  [[$collisionmodel]] "<collision mesh SMD>.smd"
Line 14: Line 14:
  }
  }


==Options==
== Options ==


; <code>$mass <[[float]]|kilograms></code>
; <code>$mass <[[float]]|kilograms></code>
: Manually set the mass of the model.
: Manually set the mass of the model, in kilograms.
; <code>$automass </code>
 
: Tells StudioMDL to calculate the mass of the model (based on the volume of the collision SMD and the density/thickness of the material defined in its <!--[[$surfaceprop]] and/or--> [[Prop Data|prop_data]]).
;<code>$automass</code>
: Calculate the mass of the model based on the volume of the collision model and the material defined in its [[Prop Data|prop_data]].
 
; <code>$concave </code>
; <code>$concave </code>
: By default StudioMDL will generate a single [[Wikipedia:Convex|convex]] hull by bridging any [[Wikipedia:Concave|concavities]] in a collision SMD. You can create a [[Wikipedia:Concave|concave]] hull by including multiple, overlapping convex meshes in your SMD, and using the $concave command to tell StudioMDL to preserve concavities by using multiple convex pieces. The resulting hull structure is a bit like a ''Rigid'' [[$collisionjoints|ragdoll]].
: By default, the model compiler will generate a single [[Wikipedia:Convex|convex]] hull by bridging any [[Wikipedia:Concave|concavities]] in a collision SMD. You can create a [[Wikipedia:Concave|concave]] hull by including multiple, overlapping convex meshes in your SMD, and adding the <code>$concave</code> will preserve concavities by using multiple convex pieces. The resulting hull structure is a bit like a ''rigid'' [[$collisionjoints|ragdoll]].
 
;<code>$maxconvexpieces <[[int]]></code>
;<code>$maxconvexpieces <[[int]]></code>
:By default, StudioMDL limits a concave collision model to twenty convex pieces. This command can be used to override the limit - for instance if you are creating an unusually large model.
:By default, the model compiler limits a concave collision model to twenty convex pieces. This command can be used to override the limit - for instance if you are creating an unusually large model.
:{{note|Introduced with the Orange Box. In the Ep1 engine, run StudioMDL with <code>-fullcollide</code> when compiling instead.}}
{{note|Introduced with the Orange Box. In the Ep1 engine, run StudioMDL with <code>-fullcollide</code> when compiling instead.}}
 
; <code>$masscenter <[[vector]]|offset></code>
; <code>$masscenter <[[vector]]|offset></code>
: Override the center of mass, in local coords.  
: Override the center of mass, in local coords.
 
; <code>$inertia <[[float]]|scale></code>
; <code>$inertia <[[float]]|scale></code>
: Inertia scale.
: Inertia scale.
; <code>$damping <[[float]]|scale></code>
; <code>$damping <[[float]]|scale></code>
: Linear damping scale.  
: Linear damping scale.
 
; <code>$rotdamping <[[float]]|scale></code>
; <code>$rotdamping <[[float]]|scale></code>
: Rotational damping scale.
: Rotational damping scale.
; <code>$drag <[[float]]|scale></code>
; <code>$drag <[[float]]|scale></code>
: Scales air resistance.
: Scales air resistance.
;<code>$jointskip</code>
: Rarely used. Eliminates a joint in the collision model that you don't want to use. (i.e. if you were using a render model as a ragdoll, and it has bones you don't want)
;<code>$jointmerge</code>
: Merges the vertex assignments for two joints.
;<code>$rootbone</code>
: The parent-most bone that actually has collision geometry.
;<code>$jointconstrain</code>
: The limits of the joint's movement.
;<code>$jointinertia</code>
: Like <code>$inertia</code>, but per-bone.
;<code>$jointdamping</code>
: Like <code>$damping</code>, but per-bone.
;<code>$jointrotdamping</code>
: Like <code>$rotdamping</code>, but per-bone.
;<code>$jointmassbias</code>
: Mass is automatically distributed by volume, this lets you bias it per-bone.
;<code>$noselfcollisions</code>
: Turns off all collisions between bones in this model, usually for perf.
;<code>$jointcollide</code>
: If any <code>$jointcollide</code> pairs are specified, only those joints collide with each other.
;<code>$animatedfriction</code>
: Used to animate the amount of friction on joints over time.


== Example ==
== Example ==
Line 50: Line 91:
*[[$collisionjoints]]
*[[$collisionjoints]]


[[Category:QC Commands|C]]
[[Category:QC Commands|collisionmodel]]

Revision as of 15:04, 28 April 2008

The QC command $collisionmodel is used to embed a non-animated collision mesh in a model, for use in VPhysics calculations.

Note.pngNote:If your model has moving parts that may affect collisions, such as ragdoll limbs, use $collisionjoints instead.
Note.pngNote:Collision meshes should be extremely lo-poly in comparison to reference meshes, and even lod meshes. See collision mesh.
Tip.pngTip:Set the Console Variable vcollide_wireframe 1 to view collision meshes in-game.

Syntax

$collisionmodel "<collision mesh SMD>.smd"
{
    <options>
}

Options

$mass <float|kilograms>
Manually set the mass of the model, in kilograms.
$automass
Calculate the mass of the model based on the volume of the collision model and the material defined in its prop_data.
$concave
By default, the model compiler will generate a single convex hull by bridging any concavities in a collision SMD. You can create a concave hull by including multiple, overlapping convex meshes in your SMD, and adding the $concave will preserve concavities by using multiple convex pieces. The resulting hull structure is a bit like a rigid ragdoll.
$maxconvexpieces <int>
By default, the model compiler limits a concave collision model to twenty convex pieces. This command can be used to override the limit - for instance if you are creating an unusually large model.
Note.pngNote:Introduced with the Orange Box. In the Ep1 engine, run StudioMDL with -fullcollide when compiling instead.
$masscenter <vector|offset>
Override the center of mass, in local coords.
$inertia <float|scale>
Inertia scale.
$damping <float|scale>
Linear damping scale.
$rotdamping <float|scale>
Rotational damping scale.
$drag <float|scale>
Scales air resistance.
$jointskip
Rarely used. Eliminates a joint in the collision model that you don't want to use. (i.e. if you were using a render model as a ragdoll, and it has bones you don't want)
$jointmerge
Merges the vertex assignments for two joints.
$rootbone
The parent-most bone that actually has collision geometry.
$jointconstrain
The limits of the joint's movement.
$jointinertia
Like $inertia, but per-bone.
$jointdamping
Like $damping, but per-bone.
$jointrotdamping
Like $rotdamping, but per-bone.
$jointmassbias
Mass is automatically distributed by volume, this lets you bias it per-bone.
$noselfcollisions
Turns off all collisions between bones in this model, usually for perf.
$jointcollide
If any $jointcollide pairs are specified, only those joints collide with each other.
$animatedfriction
Used to animate the amount of friction on joints over time.

Example

$collisionmodel "tree_deciduous_01a_physbox.smd"
{
	$mass 350.0
	$concave
}

See also