<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.vrchat.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Usr+1cf78aeb-2dfd-495f-96e6-5eac45aa9c8b</id>
	<title>VRChat Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.vrchat.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Usr+1cf78aeb-2dfd-495f-96e6-5eac45aa9c8b"/>
	<link rel="alternate" type="text/html" href="https://wiki.vrchat.com/wiki/Special:Contributions/Usr_1cf78aeb-2dfd-495f-96e6-5eac45aa9c8b"/>
	<updated>2026-06-03T23:01:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://wiki.vrchat.com/index.php?title=Face_Tracking&amp;diff=71940</id>
		<title>Face Tracking</title>
		<link rel="alternate" type="text/html" href="https://wiki.vrchat.com/index.php?title=Face_Tracking&amp;diff=71940"/>
		<updated>2026-05-04T07:24:43Z</updated>

		<summary type="html">&lt;p&gt;Usr 1cf78aeb-2dfd-495f-96e6-5eac45aa9c8b: /* Headsets with face tracking support */ Bigscreen Beyond 2e has eye tracking only, no face tracking built in.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Face tracking&#039;&#039;&#039; refers to using hardware and software to capture a user&#039;s real-life facial expressions and map them onto their [[Avatars|avatar]] in real time. Face tracking makes avatars more expressive and lifelike by reflecting eye movement, mouth shapes, and other facial features, which enhances immersion and social interaction in VRChat.&lt;br /&gt;
&lt;br /&gt;
Face tracking typically combines &#039;&#039;&#039;eye tracking&#039;&#039;&#039; and &#039;&#039;&#039;mouth tracking&#039;&#039;&#039;. Some headsets support both; others support only one or neither, requiring external hardware or software.&lt;br /&gt;
&lt;br /&gt;
== How face tracking works ==&lt;br /&gt;
&lt;br /&gt;
=== Capturing facial data ===&lt;br /&gt;
A user&#039;s facial movements — eye blinks, eyebrow raises, mouth shapes, jaw motion — are captured by one or more input devices:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Webcams&#039;&#039;&#039; — VRChat&#039;s built-in [[Selfie Expression]] feature (available since 2024.4.2 on Android and 2025.1.3 on PC) uses a standard webcam to track facial expressions on desktop and mobile. Before Selfie Expression, users relied on third-party tools such as iFacialMocap (iPhone) or VSeeFace (PC).&lt;br /&gt;
* &#039;&#039;&#039;Depth cameras&#039;&#039;&#039; — Devices such as Intel RealSense cameras or the iPhone&#039;s Face ID sensor array provide depth data alongside facial capture.&lt;br /&gt;
* &#039;&#039;&#039;Dedicated trackers built into VR headsets&#039;&#039;&#039; — Headsets like the Meta Quest Pro, HTC Vive Facial Tracker, Varjo XR-4, Pimax Crystal (with optional module), and BigScreen Beyond 2 include inward-facing sensors designed for face and eye tracking.&lt;br /&gt;
&lt;br /&gt;
=== Sending data to VRChat ===&lt;br /&gt;
The captured facial data is converted into &#039;&#039;&#039;blendshape values&#039;&#039;&#039; (numerical controls for individual facial expression shapes) and sent to VRChat. There are two main paths:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Native support&#039;&#039;&#039; — Headsets with built-in face tracking (e.g., Quest Pro) send data directly to VRChat without additional software.&lt;br /&gt;
* &#039;&#039;&#039;[[Open Sound Control|OSC]]&#039;&#039;&#039; — External tracking software sends blendshape data to VRChat over OSC. The most widely used community tool for this is [[Community:VRCFT|VRChat Face Tracking (VRCFT)]], which acts as a bridge between tracking software and VRChat.&lt;br /&gt;
&lt;br /&gt;
=== Driving the avatar ===&lt;br /&gt;
For face tracking to appear on an avatar, the avatar must be configured with:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[Visemes]]&#039;&#039;&#039; — blendshapes used for lip syncing to voice.&lt;br /&gt;
* &#039;&#039;&#039;Expression blendshapes&#039;&#039;&#039; — shapes for emotions such as happy, sad, or surprised.&lt;br /&gt;
* &#039;&#039;&#039;Eye and head tracking support&#039;&#039;&#039; — eye-look settings configured in the [[VRChat SDK]].&lt;br /&gt;
&lt;br /&gt;
== How eye tracking works ==&lt;br /&gt;
Eye tracking is one of the two main components of face tracking. It captures the direction a user is looking and translates that into avatar eye movement. Professional-grade eye trackers can cost thousands of dollars, while DIY alternatives can be built for under $50.&lt;br /&gt;
&lt;br /&gt;
=== Near-eye tracking ===&lt;br /&gt;
Most VR eye trackers use &#039;&#039;&#039;near-eye tracking&#039;&#039;&#039;, where small cameras are mounted inside the headset pointing at each eye. These cameras typically use &#039;&#039;&#039;infrared light&#039;&#039;&#039; to get a clear, high-contrast image of the pupil regardless of ambient lighting.&lt;br /&gt;
&lt;br /&gt;
The goal is to go from a raw camera image of the eye to a &#039;&#039;&#039;3D gaze ray&#039;&#039;&#039; — a direction vector indicating where the user is looking. This ray can then drive avatar eye movement or be used for gaze-based interaction.&lt;br /&gt;
&lt;br /&gt;
=== Pupil detection ===&lt;br /&gt;
The first step is locating the pupil in the camera image:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Find the darkest region&#039;&#039;&#039; — The system samples pixels across the image to locate the darkest, most uniform patch, which corresponds to the pupil.&lt;br /&gt;
# &#039;&#039;&#039;Binary thresholding&#039;&#039;&#039; — Pixels darker than a threshold are marked as pupil; lighter pixels are marked as non-pupil. Because lighting and angle cause the pupil to appear non-uniform, a single threshold is often insufficient.&lt;br /&gt;
# &#039;&#039;&#039;Cascaded thresholding&#039;&#039;&#039; — Multiple threshold values (increasingly relaxed) are tested in parallel. The threshold that produces the most ellipse-like shape is selected as the best fit.&lt;br /&gt;
# &#039;&#039;&#039;Contour refinement&#039;&#039;&#039; — The raw contour points are filtered by checking whether each point is geometrically consistent with an elliptical shape (concave towards the pupil center). Points that curve outwards are discarded.&lt;br /&gt;
# &#039;&#039;&#039;Ellipse fitting&#039;&#039;&#039; — An ellipse-fitting algorithm is applied to the refined contour, producing the final &#039;&#039;&#039;pupil ellipse&#039;&#039;&#039; for that frame.&lt;br /&gt;
&lt;br /&gt;
=== From 2D observations to a 3D gaze ray ===&lt;br /&gt;
A single pupil ellipse is a 2D observation. To compute a 3D gaze direction, the tracker must build a model of the eye in three dimensions:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Estimate the 2D eye center&#039;&#039;&#039; — By collecting pupil ellipses across multiple frames at varying gaze angles, the system traces lines through each ellipse. Where three or more lines at different angles intersect, the 2D eye center is found. The tracker averages many such intersections for a stable estimate.&lt;br /&gt;
# &#039;&#039;&#039;Construct a 3D eye model&#039;&#039;&#039; — The eye is approximated as a sphere (roughly 24 mm in diameter for a typical human eye). The sphere is placed so that its projection aligns with the computed 2D eye center, and its depth is set to produce the best fit to the observed pupil ellipses.&lt;br /&gt;
# &#039;&#039;&#039;Compute the 3D pupil center&#039;&#039;&#039; — The current 2D pupil position is projected as a ray into 3D space. The point where this ray intersects the 3D eye sphere is the estimated 3D pupil center.&lt;br /&gt;
# &#039;&#039;&#039;Derive the gaze ray&#039;&#039;&#039; — The direction vector from the 3D eye center to the 3D pupil center becomes the &#039;&#039;&#039;gaze ray&#039;&#039;&#039;. This ray indicates where the user is looking and can be projected into the VR environment to drive avatar eye movement or interaction.&lt;br /&gt;
&lt;br /&gt;
== Headsets with face tracking support ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Headset&lt;br /&gt;
!Face tracking support&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Meta Quest Pro&#039;&#039;&#039;&lt;br /&gt;
|Built-in&lt;br /&gt;
|Face and eye tracking.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Apple Vision Pro&#039;&#039;&#039;&lt;br /&gt;
|Built-in (ARKit-based)&lt;br /&gt;
|Face and eye tracking.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;HTC Vive Pro Eye + Facial Tracker&#039;&#039;&#039;&lt;br /&gt;
|Built-in / Add-on&lt;br /&gt;
|Eye tracking is built in. A face tracking module is sold separately.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;HTC Vive Pro 2 + Facial Tracker&#039;&#039;&#039;&lt;br /&gt;
|Add-on&lt;br /&gt;
|Face tracking only (no eye tracking).&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;HTC Vive XR Elite + Full Face Tracker&#039;&#039;&#039;&lt;br /&gt;
|Built-in / Add-on&lt;br /&gt;
|Eye tracking is built in. A face tracking module is sold separately.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Pimax Crystal&#039;&#039;&#039;&lt;br /&gt;
|Built-in / Add-on&lt;br /&gt;
|Eye tracking is built in. A face tracking module is sold separately.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Varjo XR-4&#039;&#039;&#039;&lt;br /&gt;
|Built-in&lt;br /&gt;
|Face and eye tracking. Enterprise-focused and priced accordingly.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Bigscreen Beyond 2e&#039;&#039;&#039;&lt;br /&gt;
|Built-in&lt;br /&gt;
|Eye tracking only.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Features]]&lt;br /&gt;
[[Category:Avatars]]&lt;br /&gt;
[[Category:Needs images]]&lt;/div&gt;</summary>
		<author><name>Usr 1cf78aeb-2dfd-495f-96e6-5eac45aa9c8b</name></author>
	</entry>
</feed>