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.
		
	
m (Confirmed something for a note)  | 
				 (Undo revision 486670 by Equalizer5118 (talk)) Tag: Undo  | 
				||
| (4 intermediate revisions by 4 users not shown) | |||
| 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   | {{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 27: | 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   | :: 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>  | ;<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]]  | ||
Latest revision as of 17:02, 3 August 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 
tagsshould be the "entry tag". Mostly always set toapex 
[exittag <string|tag>]- Which of the tags specified in 
tagsshould 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 
tagsshould the loop start. [confirm] 
endloop <string|tag>- Which of the tags specified in 
tagsshould the loop end. [confirm] 
exittag <string|tag>- Which of the tags specified in 
tagsshould 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 accentorloopframe. 
eye_height <float|height>- [Todo]