Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Zeitheron committed Sep 28, 2023
0 parents commit 882af37
Show file tree
Hide file tree
Showing 140 changed files with 1,146 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
## Ignore Visual Studio temporary files, build results, and## files generated by popular Visual Studio add-ons.#### Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore# User-specific files*.rsuser*.suo*.user*.userosscache*.sln.docstates# User-specific files (MonoDevelop/Xamarin Studio)*.userprefs# Mono auto generated filesmono_crash.*# Build results[Dd]ebug/[Dd]ebugPublic/[Rr]elease/[Rr]eleases/x64/x86/[Ww][Ii][Nn]32/[Aa][Rr][Mm]/[Aa][Rr][Mm]64/bld/[Bb]in/[Oo]bj/[Oo]ut/[Ll]og/[Ll]ogs/# Visual Studio 2015/2017 cache/options directory.vs/# Uncomment if you have tasks that create the project's static files in wwwroot#wwwroot/# Visual Studio 2017 auto generated filesGenerated\ Files/# MSTest test Results[Tt]est[Rr]esult*/[Bb]uild[Ll]og.*# NUnit*.VisualState.xmlTestResult.xmlnunit-*.xml# Build Results of an ATL Project[Dd]ebugPS/[Rr]eleasePS/dlldata.c# Benchmark ResultsBenchmarkDotNet.Artifacts/# .NET Coreproject.lock.jsonproject.fragment.lock.jsonartifacts/# ASP.NET ScaffoldingScaffoldingReadMe.txt# StyleCopStyleCopReport.xml# Files built by Visual Studio*_i.c*_p.c*_h.h*.ilk*.meta*.obj*.iobj*.pch*.pdb*.ipdb*.pgc*.pgd*.rsp*.sbr*.tlb*.tli*.tlh*.tmp*.tmp_proj*_wpftmp.csproj*.log*.vspscc*.vssscc.builds*.pidb*.svclog*.scc# Chutzpah Test files_Chutzpah*# Visual C++ cache filesipch/*.aps*.ncb*.opendb*.opensdf*.sdf*.cachefile*.VC.db*.VC.VC.opendb# Visual Studio profiler*.psess*.vsp*.vspx*.sap# Visual Studio Trace Files*.e2e# TFS 2012 Local Workspace$tf/# Guidance Automation Toolkit*.gpState# ReSharper is a .NET coding add-in_ReSharper*/*.[Rr]e[Ss]harper*.DotSettings.user# TeamCity is a build add-in_TeamCity*# DotCover is a Code Coverage Tool*.dotCover# AxoCover is a Code Coverage Tool.axoCover/*!.axoCover/settings.json# Coverlet is a free, cross platform Code Coverage Toolcoverage*.jsoncoverage*.xmlcoverage*.info# Visual Studio code coverage results*.coverage*.coveragexml# NCrunch_NCrunch_*.*crunch*.local.xmlnCrunchTemp_*# MightyMoose*.mm.*AutoTest.Net/# Web workbench (sass).sass-cache/# Installshield output folder[Ee]xpress/# DocProject is a documentation generator add-inDocProject/buildhelp/DocProject/Help/*.HxTDocProject/Help/*.HxCDocProject/Help/*.hhcDocProject/Help/*.hhkDocProject/Help/*.hhpDocProject/Help/Html2DocProject/Help/html# Click-Once directorypublish/# Publish Web Output*.[Pp]ublish.xml*.azurePubxml# Note: Comment the next line if you want to checkin your web deploy settings,# but database connection strings (with potential passwords) will be unencrypted*.pubxml*.publishproj# Microsoft Azure Web App publish settings. Comment the next line if you want to# checkin your Azure Web App publish settings, but sensitive information contained# in these scripts will be unencryptedPublishScripts/# NuGet Packages*.nupkg# NuGet Symbol Packages*.snupkg# The packages folder can be ignored because of Package Restore**/[Pp]ackages/*# except build/, which is used as an MSBuild target.!**/[Pp]ackages/build/# Uncomment if necessary however generally it will be regenerated when needed#!**/[Pp]ackages/repositories.config# NuGet v3's project.json files produces more ignorable files*.nuget.props*.nuget.targets# Microsoft Azure Build Outputcsx/*.build.csdef# Microsoft Azure Emulatorecf/rcf/# Windows Store app package directories and filesAppPackages/BundleArtifacts/Package.StoreAssociation.xml_pkginfo.txt*.appx*.appxbundle*.appxupload# Visual Studio cache files# files ending in .cache can be ignored*.[Cc]ache# but keep track of directories ending in .cache!?*.[Cc]ache/# OthersClientBin/~$**~*.dbmdl*.dbproj.schemaview*.jfm*.pfx*.publishsettingsorleans.codegen.cs# Including strong name files can present a security risk# (https://github.com/github/gitignore/pull/2483#issue-259490424)#*.snk# Since there are multiple workflows, uncomment next line to ignore bower_components# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)#bower_components/# RIA/Silverlight projectsGenerated_Code/# Backup & report files from converting an old project file# to a newer Visual Studio version. Backup files are not needed,# because we have git ;-)_UpgradeReport_Files/Backup*/UpgradeLog*.XMLUpgradeLog*.htmServiceFabricBackup/*.rptproj.bak# SQL Server files*.mdf*.ldf*.ndf# Business Intelligence projects*.rdl.data*.bim.layout*.bim_*.settings*.rptproj.rsuser*- [Bb]ackup.rdl*- [Bb]ackup ([0-9]).rdl*- [Bb]ackup ([0-9][0-9]).rdl# Microsoft FakesFakesAssemblies/# GhostDoc plugin setting file*.GhostDoc.xml# Node.js Tools for Visual Studio.ntvs_analysis.datnode_modules/# Visual Studio 6 build log*.plg# Visual Studio 6 workspace options file*.opt# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)*.vbw# Visual Studio LightSwitch build output**/*.HTMLClient/GeneratedArtifacts**/*.DesktopClient/GeneratedArtifacts**/*.DesktopClient/ModelManifest.xml**/*.Server/GeneratedArtifacts**/*.Server/ModelManifest.xml_Pvt_Extensions# Paket dependency manager.paket/paket.exepaket-files/# FAKE - F# Make.fake/# CodeRush personal settings.cr/personal# Python Tools for Visual Studio (PTVS)__pycache__/*.pyc# Cake - Uncomment if you are using it# tools/**# !tools/packages.config# Tabs Studio*.tss# Telerik's JustMock configuration file*.jmconfig# BizTalk build output*.btp.cs*.btm.cs*.odx.cs*.xsd.cs# OpenCover UI analysis resultsOpenCover/# Azure Stream Analytics local run outputASALocalRun/# MSBuild Binary and Structured Log*.binlog# NVidia Nsight GPU debugger configuration file*.nvuser# MFractors (Xamarin productivity tool) working folder.mfractor/# Local History for Visual Studio.localhistory/# BeatPulse healthcheck temp databasehealthchecksdb# Backup folder for Package Reference Convert tool in Visual Studio 2017MigrationBackup/# Ionide (cross platform F# VS Code tools) working folder.ionide/# Fody - auto-generated XML schemaFodyWeavers.xsd
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added .vs/VDFaceTracking/v17/.suo
Binary file not shown.
88 changes: 88 additions & 0 deletions FBExpression.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
namespace VDFaceTracking
{
public static class FBExpression
{
public const int Brow_Lowerer_L = 0;
public const int Brow_Lowerer_R = 1;
public const int Cheek_Puff_L = 2;
public const int Cheek_Puff_R = 3;
public const int Cheek_Raiser_L = 4;
public const int Cheek_Raiser_R = 5;
public const int Cheek_Suck_L = 6;
public const int Cheek_Suck_R = 7;
public const int Chin_Raiser_B = 8;
public const int Chin_Raiser_T = 9;
public const int Dimpler_L = 10;
public const int Dimpler_R = 11;
public const int Eyes_Closed_L = 12;
public const int Eyes_Closed_R = 13;
public const int Eyes_Look_Down_L = 14;
public const int Eyes_Look_Down_R = 15;
public const int Eyes_Look_Left_L = 16;
public const int Eyes_Look_Left_R = 17;
public const int Eyes_Look_Right_L = 18;
public const int Eyes_Look_Right_R = 19;
public const int Eyes_Look_Up_L = 20;
public const int Eyes_Look_Up_R = 21;
public const int Inner_Brow_Raiser_L = 22;
public const int Inner_Brow_Raiser_R = 23;
public const int Jaw_Drop = 24;
public const int Jaw_Sideways_Left = 25;
public const int Jaw_Sideways_Right = 26;
public const int Jaw_Thrust = 27;
public const int Lid_Tightener_L = 28;
public const int Lid_Tightener_R = 29;
public const int Lip_Corner_Depressor_L = 30;
public const int Lip_Corner_Depressor_R = 31;
public const int Lip_Corner_Puller_L = 32;
public const int Lip_Corner_Puller_R = 33;
public const int Lip_Funneler_LB = 34;
public const int Lip_Funneler_LT = 35;
public const int Lip_Funneler_RB = 36;
public const int Lip_Funneler_RT = 37;
public const int Lip_Pressor_L = 38;
public const int Lip_Pressor_R = 39;
public const int Lip_Pucker_L = 40;
public const int Lip_Pucker_R = 41;
public const int Lip_Stretcher_L = 42;
public const int Lip_Stretcher_R = 43;
public const int Lip_Suck_LB = 44;
public const int Lip_Suck_LT = 45;
public const int Lip_Suck_RB = 46;
public const int Lip_Suck_RT = 47;
public const int Lip_Tightener_L = 48;
public const int Lip_Tightener_R = 49;
public const int Lips_Toward = 50;
public const int Lower_Lip_Depressor_L = 51;
public const int Lower_Lip_Depressor_R = 52;
public const int Mouth_Left = 53;
public const int Mouth_Right = 54;
public const int Nose_Wrinkler_L = 55;
public const int Nose_Wrinkler_R = 56;
public const int Outer_Brow_Raiser_L = 57;
public const int Outer_Brow_Raiser_R = 58;
public const int Upper_Lid_Raiser_L = 59;
public const int Upper_Lid_Raiser_R = 60;
public const int Upper_Lip_Raiser_L = 61;
public const int Upper_Lip_Raiser_R = 62;
public const int Max = 63;

// Above are the natural expressions tracked by the Quest Pro
// Below is the eye tracking information
public const int LeftRot_x = 64;
public const int LeftRot_y = 65;
public const int LeftRot_z = 66;
public const int LeftRot_w = 67;
public const int LeftPos_x = 68;
public const int LeftPos_y = 70; // Flipped, need to convert RHS to LHS
public const int LeftPos_z = 69;
// public const int 71 is unused
public const int RightRot_x = 72;
public const int RightRot_y = 73;
public const int RightRot_z = 74;
public const int RightRot_w = 75;
public const int RightPos_x = 76;
public const int RightPos_y = 78; // Flipped, need to convert RHS to LHS
public const int RightPos_z = 77;
}
}
13 changes: 13 additions & 0 deletions Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("VDFaceTracking")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("VDFaceTracking")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("39d944a3-538c-4a2d-8e53-8db606c64233")]
[assembly: AssemblyFileVersion("1.12.6")]
[assembly: AssemblyVersion("1.12.6.0")]
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# VDFaceTracking

This is a Resonite mod, which lets the game read facial expressions and eye gaze directly from VirtualDesktop (v1.29 or newer).

This was patched together from [dfgHiatus' QuestPro4Neos mod](https://github.com/dfgHiatus/QuestPro4Neos) and [VirtualDesktop](https://www.vrdesktop.net/) VRCFT module.

To install this mod go grab the release [over here](https://github.com/Zeitheron/VDFaceTracking/releases/latest) and put it into `Resonite\rml_mods\` folder.

You are going to need [Resonite Mod Loader](https://github.com/resonite-modding-group/ResoniteModLoader), read how to install it there.
108 changes: 108 additions & 0 deletions VDFaceTracking.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
using FrooxEngine;
using HarmonyLib;
using ResoniteModLoader;
using System;
using System.Threading;

namespace VDFaceTracking
{
public class VDFaceTracking : ResoniteMod
{
[AutoRegisterConfigKey]
private static readonly ModConfigurationKey<float> EyeOpennessExponent =
new("quest_pro_eye_open_exponent",
"Exponent to apply to eye openness. Can be updated at runtime. Useful for applying different curves for how open your eyes are.",
() => 1.0f);

[AutoRegisterConfigKey]
private static readonly ModConfigurationKey<float> EyeWideMultiplier =
new("quest_pro_eye_wide_multiplier",
"Multiplier to apply to eye wideness. Can be updated at runtime. Useful for multiplying the amount your eyes can widen by.",
() => 1.0f);

[AutoRegisterConfigKey]
private static readonly ModConfigurationKey<float> EyeMovementMultiplier =
new("quest_pro_eye_movement_multiplier",
"Multiplier to adjust the movement range of the user's eyes. Can be updated at runtime.", () => 1.0f);

[AutoRegisterConfigKey]
private static readonly ModConfigurationKey<float> EyeExpressionMultiplier =
new("quest_pro_eye_expression_multiplier",
"Multiplier to adjust the range of the user's eye expressions. Can be updated at runtime.", () => 1.0f);


private static ModConfiguration _config;

public override string Name => "VDFaceTracking";

public override string Author => "Zeith & dfgHiatus & Geenz & Earthmark";

public override string Version => "1.0.0";

public static VDProxy proxy;

public static float EyeOpenExponent = 1.0f;
public static float EyeWideMult = 1.0f;
public static float EyeMoveMult = 1.0f;
public static float EyeExpressionMult = 1.0f;

public override void OnEngineInit()
{
_config = GetConfiguration();
_config.OnThisConfigurationChanged += OnConfigurationChanged;

new Harmony("org.zeith.VDFaceTracking").PatchAll();
}

private void OnConfigurationChanged(ConfigurationChangedEvent @event)
{
if (@event.Key == EyeOpennessExponent)
{
if (@event.Config.TryGetValue(EyeOpennessExponent, out var openExp))
{
EyeOpenExponent = openExp;
}
}

if (@event.Key == EyeWideMultiplier)
{
if (@event.Config.TryGetValue(EyeWideMultiplier, out var wideMulti))
{
EyeWideMult = wideMulti;
}
}

if (@event.Key == EyeMovementMultiplier)
{
if (@event.Config.TryGetValue(EyeMovementMultiplier, out var moveMulti))
{
EyeMoveMult = moveMulti;
}
}

if (@event.Key == EyeExpressionMultiplier)
{
if (@event.Config.TryGetValue(EyeExpressionMultiplier, out var eyeExpressionMulti))
{
EyeExpressionMult = eyeExpressionMulti;
}
}
}

[HarmonyPatch(typeof(InputInterface), MethodType.Constructor)]
[HarmonyPatch(new Type[] { typeof(Engine) })]
public class InputInterfaceCtorPatch
{
public static void Postfix(InputInterface __instance)
{
proxy = new VDProxy();

if (!proxy.Initialize()) return;

__instance.RegisterInputDriver(proxy);

Engine.Current.OnShutdown += () => proxy.Teardown();
}
}
}
}
66 changes: 66 additions & 0 deletions VDFaceTracking.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>VDFaceTracking</RootNamespace>
<AssemblyName>VDFaceTracking</AssemblyName>
<LangVersion>latest</LangVersion>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
<ProjectGuid>{39D944A3-538C-4A2D-8E53-8DB606C64233}</ProjectGuid>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Compile Include="FBExpression.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="VDFaceTracking.cs" />
<Compile Include="VDProxy.cs" />
<Compile Include="VirtualDesktop\FaceTracking\Expressions.cs" />
<Compile Include="VirtualDesktop\FaceTracking\FaceState.cs" />
<Compile Include="VirtualDesktop\FaceTracking\Pose.cs" />
<Compile Include="VirtualDesktop\FaceTracking\Quaternion.cs" />
<Compile Include="VirtualDesktop\FaceTracking\Vector3.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>F:\SteamLibrary\steamapps\common\Resonite\rml_libs\0Harmony.dll</HintPath>
</Reference>
<Reference Include="Elements.Core">
<HintPath>F:\SteamLibrary\steamapps\common\Resonite\Resonite_Data\Managed\Elements.Core.dll</HintPath>
</Reference>
<Reference Include="FrooxEngine">
<HintPath>F:\SteamLibrary\steamapps\common\Resonite\Resonite_Data\Managed\FrooxEngine.dll</HintPath>
</Reference>
<Reference Include="ResoniteModLoader">
<HintPath>F:\SteamLibrary\steamapps\common\Resonite\Libraries\ResoniteModLoader.dll</HintPath>
</Reference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>copy "$(TargetDir)\$(TargetFileName)" "F:\SteamLibrary\steamapps\common\Resonite\rml_mods\"</PostBuildEvent>
</PropertyGroup>
</Project>
25 changes: 25 additions & 0 deletions VDFaceTracking.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32526.322
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VDFaceTracking", "VDFaceTracking.csproj", "{39d944a3-538c-4a2d-8e53-8db606c64233}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{39d944a3-538c-4a2d-8e53-8db606c64233}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{39d944a3-538c-4a2d-8e53-8db606c64233}.Debug|Any CPU.Build.0 = Debug|Any CPU
{39d944a3-538c-4a2d-8e53-8db606c64233}.Release|Any CPU.ActiveCfg = Release|Any CPU
{39d944a3-538c-4a2d-8e53-8db606c64233}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0322B2EF-7452-479D-BAE2-FCAB75033337}
EndGlobalSection
EndGlobal
Loading

0 comments on commit 882af37

Please sign in to comment.