Revision Difference
First_Person#551937
<cat>Model.Advanced</cat>
<title>First Person</title>
<warning>**First-person assets are being actively worked on, and are subject to change.**</warning>
The goal of the first person base is to help you and provide you with valuable tools and "starter kits", whether you are a beginner or an advanced user.
If you would like to make some animations for the first person arms, here is a community made control rig to get you started: https://github.com/Ali3nSystems/Ali3n-Control-Rigs-for-Facepunch-Assets
# First person arms
The main model can be found here: ***addons/citizen/models/first_person/first_person_arms.vmdl***
The "base" animgraph implements standard features for the "basic" use cases (see below), and provides you with the setup & parameters the adjustment layers stuff.
<warning>**Support for Animgraph groups and subgroups (which are groups-as-an-external-file) is being worked on. This base animgraph is planned to be an externally-referenceable file for you to use in your own animgraph.**</warning>
<note>The current arms are "male," but there will eventually be others (the two most likely ones being "female" and "citizen"). These will probably be implemented through bodygroups, and the change in proportions will be handled through a parameter that applies a delta layer. All animations are planned to be authored on the "male" skeleton, with the delta layer being in charge of the type change.</note>
<warning>While everything is being worked out, there is no standard 1st person Animator/Controller yet. You can look at Fists.cs of the official Sandbox gamemode in the meantime.</warning>
⤶
#Basic & advanced animation setups⤶
⤶
We can divide the use cases into two broad categories.⤶
⤶
## Basic⤶
⤶
The biggest criteria here is that your held object is going to be driven by one bone. If it has its own animations and/or bones, then they are not bonemerged and happen solely on their own—through, either through an autoplay layer or a sequence sync (a currently hypothetical feature)
⤶
These objects are to be bonemerged onto first_person_arms.vmdl, and you would be using existing sequences + adjustment layers to make them work well.
⤶
## Advanced⤶
⤶
*You want to work with complex objects that have more than one bone.
*You want to use your own animations and/or your own animgraph.
*You want modify the object/hold bones as you wish, and maybe even flip the effective hierarchy so that the held object always drives the arms through IK.
⤶
If any of these matches your use case, then what you should be doing is "forking" first_person_arms.vmdl; your new VMDL will store the following:⤶
⤶
* The original standard first person arms skeleton.⤶
* **NOT** the original arms mesh. first_person_arms.vmdl will be bonemerged into your VMDL at runtime.
* The original VMDL prefabs that provide the animations used by the base animgraph.⤶
⤶
#Standardized parameters⤶
⤶
These are features implemented solely through the "base" animgraph, the one that provides base features and standardized animation parameters. (Please refer to the above warning again.)⤶
⤶
#Animation setup⤶
⤶
This entire section needs to be rewritten, but here are the broad strokes for now:⤶
⤶
Only one "official weapon" is using first_person_arms.vmdl as-is: the fists.⤶
⤶
Weapons, held items, etc. should go live in their own VMDL, and copy the original skeleton over.
⤶
The copied skeleton of the arms should ideally be left as-is, no changes, but you are free to add new leaves to it. You have complete free rein over what you want to do under weapon_root & weapon_root_children.
⤶
Facepunch's "official weapons" are set up in such a way that the weapon root can be animated independently of anything else, and arms/hands are corrected back to match the original relative position (in weapon_root's space) through the use of IK. This lets us do a ton of cool additive layering, and offer a lot of template "shared animations" that let us test weapons quickly.⤶
⤶
You have complete freedom over the hierarchization of the skeleton. The only thing that really matters, in the end, is that the first_person_arms.vmdl bones stay in the same shape and proportions, but you could completely flip their hierarchy if you wanted to. You can link weapon_root under hand_R if you want to. The downside of doing so is that you'll break the common shared weightlists (they assume weapon_root being independent)
⤶
Facepunch's "official weapons" rely heavily on additive animation, which may seem a bit unintuitive at first. However, this comes with a ton of benefits with regards to compositing, and lets you reuse animations across different weapons super easily (hence the "shared" template animation set)
⤶
Remember that the hierarchization of your animation control rig and of the final output skeleton (what you export out of your 3D software) do not have to be the same.
⤶
⤶
#Standardized parameters⤶
⤶
These parameters should ideally be the same between all weapons. Unfortunately there is no way yet to have referenced & shared lists of prefabs and tags between different animgraphs and subgraphs, so as of the time of writing, this is a completely manual process that involves copying and pasting guts of the files manually.
## Parameters
`move_x/y/z`, `move_groundspeed`
...
`move_cycle_control`
...
`aim_pitch_inertia`, `aim_yaw_inertia`
Used to create drag and follow-through in the animation. This parameter uses the current angular velocity of the player's aim. **NOTE:** plans are being made to implement a different damping mode that would bounce and overshoot physically.
`aim_pitch` `aim_yaw`
Used for tweaking the weapon pose as you away from the center. *(This means only the pitch one is of any real use 99% of the time... unless you implemented a moving crosshair kind of thing.)*
`insert skeleton delta parameter here`
...
## Finger adjustments⤶
## Finger adjustments (from prefab)⤶
`FingerAdjustment_[A]_[B]`
Where A is the hand followed by the finger number (R2 is right index, L4 is left ring), and B is the type of adjustment: Bend, Curl, Roll, Spread. This is an arrangement that's very inspired by the CAT rig system in 3ds Max.
## Weapon adjustments
⤶
`HoldAdjustment_[A]_[B]_[C]`⤶
⤶
Where A is the hand (RH or LH), B is the type of adjustment (Pos or Rot), and C is the axis (X, Y, Z).⤶
⤶
These used to be a thing but now they aren't, they need to be replaced⤶
## Hand pose adjustments
Not implemented yet.
## Exporting parameter values
You have to copy these over by hand. We should include a way to export current parameter values (as previewed) to your clipboard, or even better, as the C# code so you can copy/paste easily to your first person code.
# Driving the camera
## Through animation
Use the camera bone.
(add code here)
## Through code
(add code here)