Skip to main content

Adding Hardware Profiles

This page is for contributors who want to add a new face-tracking device to the support table. When adding hardware, always keep a source URL that explains the support status or the reason for the judgment.

Files to update

PurposePath
Hardware IDRuntime/Data/FaceTrackingHardwareProfile.cs
Support profile JSONEditor/Data/HardwareSupport/Profiles/*.json
Expression listRuntime/Data/Expressions/UnifiedExpression.cs
TestsTests/Editor/HardwareSupportDataTests.cs

1. Add the hardware ID

Add a new value to FaceTrackingHardwareProfile. The values are bit flags, so use the next 1 << N after the current largest value.

NewHardware = 1 << 18,

None is reserved for the unselected state. Do not use it for a hardware definition.

2. Add the support profile JSON

Add a JSON file under Editor/Data/HardwareSupport/Profiles/. The profile value must exactly match the enum name in FaceTrackingHardwareProfile.

{
"profile": "NewHardware",
"displayName": "New Hardware",
"displayOrder": 18,
"sources": [
{
"title": "New Hardware tracking specification",
"url": "https://example.com/spec",
"note": "Source used to map device output to UnifiedExpression."
}
],
"full": [
"EyeLookOutRight",
"EyeLookInRight",
"EyeLookUpRight",
"EyeLookDownRight"
],
"converted": [
"EyeClosedRight"
],
"unknown": [
"TongueOut"
]
}
FieldRequiredDescription
profileRequiredThe enum name in FaceTrackingHardwareProfile.
displayNameRequiredThe hardware name shown in the Inspector.
displayOrderRequiredSort order in the Inspector. Use a value that does not conflict with existing profiles.
sourcesRequiredSource material for the support status. Add at least one source.
fullOptionalUnifiedExpression values that the hardware can output directly.
convertedOptionalUnifiedExpression values supported through conversion, emulation, merged left/right values, or module-side processing.
unknownOptionalUnifiedExpression values that cannot be confirmed from public information.

Expressions that are not listed in full, converted, or unknown are treated as unsupported.

3. Check expression names

Only values from UnifiedExpression can be used in the JSON file. Invalid names or None cause a load error.

If the device documentation uses its own expression names, map them to VRCFaceTracking Unified Expressions before adding them. You do not need to list the same expression more than once in a single hardware profile.

4. Update tests

After adding hardware, update the expected list in HardwareSupportDataTests.Profiles_LoadsJsonInDisplayOrder. Place the new profile according to displayOrder.

Then run Unity EditMode tests and confirm that:

  • The JSON profile loads correctly.
  • profile matches the enum value.
  • displayOrder values do not conflict.
  • All UnifiedExpression names in JSON exist.

Support status criteria

StatusCriteria
fullThe hardware or VRCFT module outputs the expression value directly.
convertedThe value is produced through estimation, shared left/right values, synthesized values, or module-side conversion.
unknownThe available information is not enough to determine support.
UnsupportedThe expression is not supported, or support cannot be confirmed.

When unsure, use unknown and explain the reason in sources.note.