Creating Faceposer gestures: Difference between revisions
Jump to navigation
Jump to search

Note:These are for a sequence's keyvalues, not the model's $KeyValues.
Note:Time tag names are not tied to anything at all, meaning you could name them anything you want. The tags listed are just those found in Valve's gestures.
Kestrelguy (talk | contribs) m (added language bar.) |
Le Glaconus (talk | contribs) (formatting, clarification) |
||
Line 1: | Line 1: | ||
{{ | {{languageBar}} | ||
{{faceposer|4|nt=0}} can use any sequence in a model as a gesture, but timing tags (Apex, Accent, Loop and End), thumbnail frames, classification as a posture, etc. must be specified through a sequence's own [[$sequence#Miscellaneous|keyvalues]]. This page is for creating new gestures or postures designed to be used in {{faceposer|1|nt=0}}. If you want to know how to place an existing gesture into a choreography scene, see [[Choreography_creation/Creating_Events/Skeletal_animation|Creating skeletal animation events]]. | |||
{{note|These are for a ''sequence's'' keyvalues, not the model's {{ent|$keyvalues|alt=$KeyValues}}.}} | {{note|These are for a ''[[$sequence|sequence]]'s'' keyvalues, not the model's {{ent|$keyvalues|alt=$KeyValues}}.}} | ||
== Example == | == Example == | ||
An example of a gesture with Faceposer options. This was found in <code>models/male_gestures.mdl</code>. The rest of the sequence has been removed for easier reading. | An example of a gesture with Faceposer options. This was found in <code>models/male_gestures.mdl</code>. The rest of the sequence has been removed for easier reading. | ||
< | <source lang=c> | ||
$sequence "b_head_back" { | $sequence "b_head_back" { | ||
... | ... | ||
Line 26: | Line 26: | ||
} | } | ||
} | } | ||
</ | </source> | ||
== Options == | == Options == | ||
;<code>type <choices></code> | ;<code>type <choices></code> | ||
: | : What {{faceposer|2|nt=0}} should classify this animation as. | ||
:; <code>gesture</code> | :; <code>gesture</code> | ||
:: Classifies the animation as a gesture, putting it in the "Gestures" category and behaving like a gesture during playback. | :: Classifies the animation as a gesture, putting it in the "Gestures" category and behaving like a gesture during playback. | ||
:; <code>posture</code> | :; <code>posture</code> | ||
:: Classifies the animation as a posture, putting it in the "Postures" category and behaving like a posture during playback. | :: Classifies the animation as a posture, putting it in the "Postures" category and behaving like a posture during playback. | ||
{{note|Time tag names are not tied to anything at all, meaning you could name them anything you want. The tags listed are just those found in Valve's gestures.}} | {{note|Time tag names are not tied to anything at all, meaning you could name them anything you want. The tags listed are just those found in Valve's gestures.}} | ||
;<code>tags { | ;<code>tags { <stuff> }</code> | ||
: | : Timing tags and which frame they are located at. All tags should be subkeys. | ||
:; <code>apex <frame></code> | :; <code>apex <[[int]]|frame></code> | ||
:; <code>accent <frame></code> | :; <code>accent/extreme <[[int]]|frame></code> : Not used by postures. | ||
:; <code>loop <frame></code> | :; <code>loop <[[int]]|frame></code> | ||
:; <code>end <frame></code> | :; <code>end <[[int]]|frame></code> | ||
;<code>entrytag <[[string]]|tag></code> | |||
: Which of the tags specified in <code>tags</code> should be the "entry tag". Mostly always set to <code>apex</code> | |||
;<code>[exittag <[[string]]|tag>]</code> | |||
: Which of the tags specified in <code>tags</code> should be the "exit tag". | |||
;<code>endmatch <[[string]]|tag></code> | |||
: Only for postures. | |||
Loops are handled differently : | |||
;<code>tags { <stuff> }</code> | |||
: Timing tags and which frame they are located at. All tags should be subkeys. | |||
:; <code>in <[[int]]|frame></code> | |||
:; <code>loop <[[int]]|frame></code> | |||
:; <code>end <[[int]]|frame></code> | |||
:; <code>out <[[int]]|frame></code> | |||
;<code> | ;<code>startloop <[[string]]|tag></code> | ||
: | : Which of the tags specified in <code>tags</code> should the loop start. {{confirm}} | ||
;<code> | ;<code>endloop <[[string]]|tag></code> | ||
: | : Which of the tags specified in <code>tags</code> should the loop end. {{confirm}} | ||
;<code> | ;<code>exittag <[[string]]|tag></code> | ||
: | : Which of the tags specified in <code>tags</code> should be the "exit tag". | ||
;<code>thumbnail_frame <frame></code> | ;<code>thumbnail_frame <[[int]]|frame></code> | ||
: | : Which frame of the animation should appear in {{faceposer|2|nt=0}}'s animation browser. It is best to set it to the <code>accent</code> or <code>loop</code> frame. | ||
;<code>eye_height <float></code> | ;<code>eye_height <[[float]]|height></code> | ||
: {{todo}} | : {{todo}} | ||
[[Category:QC Keyvalues]] | [[Category:QC Keyvalues]] |
Revision as of 08:38, 24 May 2025


Faceposer can use any sequence in a model as a gesture, but timing tags (Apex, Accent, Loop and End), thumbnail frames, classification as a posture, etc. must be specified through a sequence's own keyvalues. This page is for creating new gestures or postures designed to be used in Faceposer. If you want to know how to place an existing gesture into a choreography scene, see Creating skeletal animation events.

Example
An example of a gesture with Faceposer options. This was found in models/male_gestures.mdl
. The rest of the sequence has been removed for easier reading.
$sequence "b_head_back" {
...
keyvalues
{
faceposer
{
"type" "gesture"
"tags"
{
"apex" "10"
"extreme" "42"
"loop" "43"
"end" "44"
}
"entrytag" "apex"
"thumbnail_frame" "42"
}
}
}
Options
type <choices>
- What
Faceposer should classify this animation as.
gesture
- Classifies the animation as a gesture, putting it in the "Gestures" category and behaving like a gesture during playback.
posture
- Classifies the animation as a posture, putting it in the "Postures" category and behaving like a posture during playback.

tags { <stuff> }
- Timing tags and which frame they are located at. All tags should be subkeys.
entrytag <string|tag>
- Which of the tags specified in
tags
should be the "entry tag". Mostly always set toapex
[exittag <string|tag>]
- Which of the tags specified in
tags
should be the "exit tag".
endmatch <string|tag>
- Only for postures.
Loops are handled differently :
tags { <stuff> }
- Timing tags and which frame they are located at. All tags should be subkeys.
startloop <string|tag>
- Which of the tags specified in
tags
should the loop start. [confirm]
endloop <string|tag>
- Which of the tags specified in
tags
should the loop end. [confirm]
exittag <string|tag>
- Which of the tags specified in
tags
should be the "exit tag".
thumbnail_frame <int|frame>
- Which frame of the animation should appear in
Faceposer's animation browser. It is best to set it to the
accent
orloop
frame.
eye_height <float|height>
- [Todo]