$bodygroup: Difference between revisions
No edit summary |
ReverendV92 (talk | contribs) (Edited page to include information about $lod usage.) |
||
Line 1: | Line 1: | ||
{{otherlang2 | {{otherlang2|ru=$bodygroup:ru}} | ||
|ru=$bodygroup:ru | |||
}} | |||
{{note| | '''$bodygroup''' is a [[QC command]] that defines a group of meshes that can be turned on or off, or changed entirely. Server code can change their state. | ||
{{note|Body groups '''cannot''' change [[skeleton|skeletons]] or [[collision model|collision models]].}} | |||
== Example == | == Example == | ||
This body group allows a weapon to have iron sights, laser sights, or no sights at all: | |||
<source lang=php> | <source lang=php> | ||
$bodygroup sights | $bodygroup sights | ||
{ | { | ||
studio | studio ironsights | ||
studio | studio laser_dot | ||
blank | blank | ||
} | } | ||
</source> | </source> | ||
This | This body group defines the entire chest region of the model, which spans multiple bones: | ||
<source lang=php> | <source lang=php> | ||
$bodygroup chest | $bodygroup chest | ||
{ | { | ||
studio | studio chest_with_no_armor | ||
studio | studio chest_with_light_armor | ||
studio | studio chest_with_heavy_armor | ||
studio | studio chest_with_super_armor | ||
} | } | ||
</source> | </source> | ||
{{note|Since body group polygons never share vertices with the base mesh in Source models, there need not be seams between properly-made components.}} | |||
== Bodygroups in Level of Detail Meshes == | |||
Using [[LOD|Level of Detail]] meshes - ''especially for high-poly geometry'' - is '''highly recommended'''. Body groups can be used in <code>[[$lod]]</code> strings in the same method as normal geometry meshes: | |||
<source lang=php> | |||
$lod 12 | |||
{ | |||
replacemodel chest_with_no_armor chest_with_no_armor_lod1 | |||
replacemodel chest_with_light_armor chest_with_light_armor_lod1 | |||
replacemodel chest_with_heavy_armor chest_with_heavy_armor_lod1 | |||
replacemodel chest_with_super_armor chest_with_super_armor_lod1 | |||
} | |||
$lod 18 | |||
{ | |||
replacemodel chest_with_no_armor chest_with_no_armor_lod2 | |||
replacemodel chest_with_light_armor chest_with_light_armor_lod2 | |||
replacemodel chest_with_heavy_armor chest_with_heavy_armor_lod2 | |||
replacemodel chest_with_super_armor chest_with_super_armor_lod2 | |||
} | |||
$shadowlod | |||
{ | |||
replacemodel chest_with_no_armor chest_with_no_armor_lod2 | |||
replacemodel chest_with_light_armor chest_with_light_armor_lod2 | |||
replacemodel chest_with_heavy_armor chest_with_heavy_armor_lod2 | |||
replacemodel chest_with_super_armor chest_with_super_armor_lod2 | |||
} | |||
</source> | |||
== Programming == | == Programming == |
Revision as of 03:11, 26 August 2019
$bodygroup is a QC command that defines a group of meshes that can be turned on or off, or changed entirely. Server code can change their state.

Example
This body group allows a weapon to have iron sights, laser sights, or no sights at all:
$bodygroup sights
{
studio ironsights
studio laser_dot
blank
}
This body group defines the entire chest region of the model, which spans multiple bones:
$bodygroup chest
{
studio chest_with_no_armor
studio chest_with_light_armor
studio chest_with_heavy_armor
studio chest_with_super_armor
}

Bodygroups in Level of Detail Meshes
Using Level of Detail meshes - especially for high-poly geometry - is highly recommended. Body groups can be used in $lod
strings in the same method as normal geometry meshes:
$lod 12
{
replacemodel chest_with_no_armor chest_with_no_armor_lod1
replacemodel chest_with_light_armor chest_with_light_armor_lod1
replacemodel chest_with_heavy_armor chest_with_heavy_armor_lod1
replacemodel chest_with_super_armor chest_with_super_armor_lod1
}
$lod 18
{
replacemodel chest_with_no_armor chest_with_no_armor_lod2
replacemodel chest_with_light_armor chest_with_light_armor_lod2
replacemodel chest_with_heavy_armor chest_with_heavy_armor_lod2
replacemodel chest_with_super_armor chest_with_super_armor_lod2
}
$shadowlod
{
replacemodel chest_with_no_armor chest_with_no_armor_lod2
replacemodel chest_with_light_armor chest_with_light_armor_lod2
replacemodel chest_with_heavy_armor chest_with_heavy_armor_lod2
replacemodel chest_with_super_armor chest_with_super_armor_lod2
}
Programming
To change a body group's state:
static int BodyGroup_Sights = FindBodygroupByName("sights"); // calculate this value once
SetBodygroup( BodyGroup_Sights , 1 ); // laser dot
By default, CBaseAnimating
supports 4,294,967,296 combinations (32 bits), and CBaseViewModel
supports 256 (8 bits). You can raise either of these by editing the relevant SendProp for m_nBody
.
To calculate how many combinations you need, multiply the size of all your bodygroups together. The examples on this page total 3 * 4 = 12...but add two more groups the same size and you're up at 144. The figure grows exponentially.