Compiling TF2 Player Models With Proper Eyeball Calculations?

Okay I have been dabbling in the world of Source models for almost a year now, and I still have yet to figure out how to make eyeballs work, specifically with TF2 player models.
I have googled my ass off and have not found anything that helped me understand the process any better.

Can someone give me a written, unambiguous guide for getting player models’ eyes working in the same way Valve has it set up? I am aware of this page and it makes no sense to me whatsoever, especially since I have no experience with XSI. I would really like for someone to just lay down the process for me from the first step all the way to the last, with up to date techniques.

Example of what the hell I’m talking about:

How do align eyes? How do make squint as default?


eyeball righteye bip_head -1.289 79.839 -0.612 eyeball_r 1.400  4.000 models/player/sniper/eyeball_l 0.600
eyeball lefteye bip_head 1.289 79.839 -0.612 eyeball_l 1.400  -4.000 models/player/sniper/eyeball_l 0.600

This is what the decompiler gets from the stock Sniper model, SDK has the same. I haven’t moved the model or rotated it, nor have I messed with the facial mesh besides deleting the glasses. What is getting left out that is causing this?
If I ever were to move the model how would I replicate Valve’s eyes from scratch? Why is there no simple tutorial on how to do this ANYWHERE ON THE ENTIRE INTERNET? Help me modeling gods of Facepunch, you’re my only hope.

just “Valve”

Are all the original flexes usable on the recompile? Did you use “eyelid” to set up the eyelid sliders or just “flexcontroller”?

I have the flex controllers set as they came in the SDK and as the decompiler spat out. All the facial flexes work as they should except the eye tracking and that squint that the Sniper has as default. The CloseLid flexes work though.


flexcontroller right_CloseLid right_CloseLid "range" -1.000 1.000
flexcontroller left_CloseLid left_CloseLid "range" -1.000 1.000
flexcontroller multi_CloseLid multi_CloseLid "range" -1.000 1.000
flexcontroller blink blink "range" 0.000 1.000

I haven’t made any modifications to what has already been written in the QC simply because I do not know what to do.

Bump for help…

For some reason the decompiler almost always messes up flexes and eyes, what you want to do in your modelling programme is get new eye coordinates by creating a sphere and putting it over the eye mesh. You then get the XYZ coordinates of the sphere in each eye position and replace the values in the QC with them.

Yeah, okay I see how that works now. I did that and got similair results to what was already in the SDK. Eyes were still misaligned. Turned out the original coordinates were fine, I just had to define the up axis to use the old coordinates. Adding in $upaxis Y to my QC fixed the misalignment.

I still have to figure out how to get the eyes squinted by default though.