blackstartx / vrc-gesture-manager Goto Github PK
View Code? Open in Web Editor NEWA tool that will help you preview and edit your VRChat avatar animation directly in Unity.
License: MIT License
A tool that will help you preview and edit your VRChat avatar animation directly in Unity.
License: MIT License
Not sure what im missing Packages\dev.vrlabs.av3manager\Editor\Elements\ClipsSwapAreaElement.cs(15,22): error CS0246: The type or namespace name 'ClipSwapItem' could not be found (are you missing a using directive or an assembly reference?)
Wrong behaviour for float/int -> bool mismatch
Right now it's >0, it should be !=0
We fixed this up in the emulator and on the https://notes.sleightly.dev/parameter-mismatching/, so I thought I'd make an issue here as well
here are the errors I receive maybe its something I'm doing wrong.
#1
Packages\vrchat.blackstartx.gesture-manager\Scripts\Editor\Modules\Vrc3\DummyModes\Vrc3DummyMode.cs(28,24): error CS0234: The type or namespace name 'ExtensionMethods' does not exist in the namespace 'VRC.Core'
#2
Packages\vrchat.blackstartx.gesture-manager\Scripts\Editor\Modules\Vrc3\ModuleVrc3.cs(993,29): error CS1061: 'VRCPhysBoneBase' does not contain a definition for 'param_IsPosed' and no accessible extension method 'param_IsPosed' accepting a first argument of type 'VRCPhysBoneBase' could be found
#3
Packages\vrchat.blackstartx.gesture-manager\Scripts\Editor\Modules\Vrc3\ModuleVrc3.cs(993,128): error CS0117: 'VRCPhysBoneBase' does not contain a definition for 'PARAM_ISPOSED'
#4
Packages\vrchat.blackstartx.gesture-manager\Scripts\Editor\Modules\Vrc3\ModuleVrc3.cs(995,29): error CS1061: 'VRCPhysBoneBase' does not contain a definition for 'param_Squish' and no accessible extension method 'param_Squish' accepting a first argument of type 'VRCPhysBoneBase' could be found
#5
Packages\vrchat.blackstartx.gesture-manager\Scripts\Editor\Modules\Vrc3\ModuleVrc3.cs(995,127): error CS0117: 'VRCPhysBoneBase' does not contain a definition for 'PARAM_SQUISH'
Thank you for your time
Gesture manager V: 3.6
Unity Version: 2019.4.31f1
VRCSDK: VRCSDK3-AVATAR-2022.05.31.23.28_Public (the 2022.06.03.00.04 produces the same results)
Whenever Gesture 3.6 is imported on any existing project, the script produces lingering issues in the unity console (see screenshots)
in my case i was able to generate this issue by importing gesture manager 3.6 on any of my existing avatar projects
Laydown.Animation-Action-v10.-.Multi.-.Nirvash
PoiyomiPro8.0.022
PoiyomiToon7.3.46 //unused, comes bundled together with pro
PumkinsAvatarTools_v1.0
VRCQuestTools-v1.6.2
QHierarchy 4.4
CS0117
CS1061
error too long, doesn't fit whole in the console
in-dept of one of the CS1061
all my avatar have a: gesture layer, action layer and a fx layer
all of them have the animator -> controller property assigned as at the fx layer (in ored to be able to edit animations)
nothing more that all my avatar have in common that could be relevant to this issue
Edit: 06/07/2022 at 1654621146 unix millis
it seems like i have miss-imported the SDK 2022.06.03.00.04 on testing before making this issue, using the new sdk solves this issue, however this means that Gesture Manager V 3.6 is not backwards compatible, to solve further confusion suggestion is to have a check for the this specific SDK 2022.06.03.00.04 or further and notify the user trough console or popup before initializing the main script
While working on an asset, I noticed that GM doesn't respond to parameter drivers driving parameters of the type trigger.
Those drivers are seemingly skipped. This works fine ingame, is just not emulated correctly.
The parameter driver drives a trigger that does its thing on a different Layer, both are on the "Action" playable layer, if that matters.
Repro:
hello, i tested gesture manager in unity 2022 and 2019
avatar is booth 3817645 as it is small size and easy
for unity 2022, i only imported
resolver tool 0.1.27
base 3.5.0
avatar 3.5.0
liltoon1.6.0
errors are all about unity
gesture emotions and expressions do not work
but in unity 2019, 3.8.8 works fine
please help fix it
This tool is good, thank you.
well, can I use this tool in T-pose (or standing-pose)?
I have my GestureLeft
& GestureRight
parameters as floats in my FX Controller and works in VRChat, does not work on unity. GestureManager still treats them as ints
somehow so my blendtrees don't work.
In this photo, you can see when avatar testing, blend shapes REALLY overshot when they should only be maxing out at 100, this is the behavior in-game.
This broken look was achieved by already having the blend shapes set to 100 by default, and rather than the emulator considering that, it will basically add to the fire when it doesn't need to.
Trying to compile a Unity 2022 Avatar Project with the gesture manager package active leads to multiple compiling errors.
Creator Companion: 2.3.1
Unity: 2022.3.22f1
Project: 2022 Avatar
VRChat Package Resolver Tool: 0.1.29
VRChat SDK - Base: 3.6.1
VRChat SDK - Avatars: 3.6.1
Gesture Manager: 3.9.1
Errors:
Packages\lyuma.av3emulator\Editor\GestureManagerBridge\GestureManagerAv3MenuEditor.cs(25,49): error CS0234: The type or namespace name 'Vrc3' does not exist in the namespace 'BlackStartX.GestureManager.Editor.Modules' (are you missing an assembly reference?) Packages\lyuma.av3emulator\Editor\GestureManagerBridge\GestureManagerAv3MenuEditor.cs(263,10): error CS0246: The type or namespace name 'RadialMenu' could not be found (are you missing a using directive or an assembly reference?) Packages\lyuma.av3emulator\Editor\GestureManagerBridge\GestureManagerAv3MenuEditor.cs(262,3): error CS0246: The type or namespace name 'RadialMenu' could not be found (are you missing a using directive or an assembly reference?) Packages\lyuma.av3emulator\Editor\GestureManagerBridge\GestureManagerAv3MenuEditor.cs(40,67): error CS0234: The type or namespace name 'Vrc3' does not exist in the namespace 'BlackStartX.GestureManager.Editor.Modules' (are you missing an assembly reference?) Packages\lyuma.av3emulator\Editor\GestureManagerBridge\GestureManagerAv3MenuEditor.cs(41,68): error CS0234: The type or namespace name 'Vrc3' does not exist in the namespace 'BlackStartX.GestureManager.Editor.Modules' (are you missing an assembly reference?) Packages\lyuma.av3emulator\Editor\GestureManagerBridge\GestureManagerAv3MenuEditor.cs(66,72): error CS0234: The type or namespace name 'Vrc3' does not exist in the namespace 'BlackStartX.GestureManager.Editor.Modules' (are you missing an assembly reference?) Packages\lyuma.av3emulator\Editor\GestureManagerBridge\GestureManagerAv3MenuEditor.cs(102,71): error CS0234: The type or namespace name 'Vrc3' does not exist in the namespace 'BlackStartX.GestureManager.Editor.Modules' (are you missing an assembly reference?) Packages\lyuma.av3emulator\Editor\GestureManagerBridge\GestureManagerAv3MenuEditor.cs(117,70): error CS0234: The type or namespace name 'Vrc3' does not exist in the namespace 'BlackStartX.GestureManager.Editor.Modules' (are you missing an assembly reference?) Packages\lyuma.av3emulator\Editor\GestureManagerBridge\GestureManagerAv3MenuEditor.cs(132,72): error CS0234: The type or namespace name 'Vrc3' does not exist in the namespace 'BlackStartX.GestureManager.Editor.Modules' (are you missing an assembly reference?)
There are many tools to modify avatar non-destructively on build time and many tools applies those tool on entering Play mode.
Those tools are applied during scene load (on Awake).
However, Gesture Manager initializes on OnEnable of Editor, which can be before Awake.
So, I want GestureManager to delay initialization of GM after Scene load.
For example, first OnInspectorGUI (or other IMGUI Callbacks) can be a place because it will be called after Scene load.
I want to use your awesome tool in a personal Unity app I am building for testing VRChat avatars. But I can't because almost all of the classes you wrote are in the Editor folder so aren't available in the built app.
Change classes that don't use the UnityEditor classes outside of the Editor folder so they can be used anywhere.
In my project I've already tried it for a bunch of classes and they all work as expected.
I haven't tested this in all honesty, but the VRChat docs seem to imply the settings on the vrc animator play audio are set upon component entry. You seem to set them only if new audio is being played, and also possibly on exit. I think you should move the audio settings code to the onenter block and not the playaudio block.
Though that's going off of the documentation, if you wanna be sure you should do some testing.
Hi BlackStartX,
I commented this on #17 , but I thought i'd move it to its own issue for easier tracking.
It's really nice to see animator performance gaining more attention, and your tool will certainly aid with that, so I'm really happy to see this implemented, however, please note that Animator.Update isn't the only place where animator performance increases.
In my testing I noticed that adding AnimatorControllerPlayable.PrepareFrame and Animators.Update give you quite accurate representations.
Above you can see the performance of a scene with 920 layers with 2 state toggles and nothing else, and you can see that AnimatorControllerPlayable.PrepareFrame also takes up quite some time, as an example. This would be missed by using just Animator.Update
Seems like the gesture manager only works once successfully.
After leaving playmode once and going back in I'm spammed with null reference exceptions.
MissingReferenceException: The object of type 'AnimationClip' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
UnityEngine.Object.get_name () (at <7d87237cea3743d093e22c5b98f74fba>:0)
GestureManager.Scripts.Editor.GestureManagerEditor.OnCheckBoxGuiHandAnimation (GestureManager.Scripts.Extra.ModuleBase module, System.Int32 i, System.Int32 position, System.Boolean overrider, System.Boolean& isOn) (at Assets/GestureManager/Scripts/Editor/GestureManagerEditor.cs:213)
GestureManager.Scripts.Editor.GestureManagerEditor.OnCheckBoxGuiHand (GestureManager.Scripts.Extra.ModuleBase module, GestureManager.Scripts.Extra.GestureHand hand, System.Int32 position, System.Boolean overrider) (at Assets/GestureManager/Scripts/Editor/GestureManagerEditor.cs:207)
GestureManager.Scripts.Editor.Modules.Vrc3.ModuleVrc3.EditorContentGesture (UnityEngine.UIElements.VisualElement element, GestureManager.Scripts.Editor.Modules.Vrc3.Vrc3WeightController weightController) (at Assets/GestureManager/Scripts/Editor/Modules/Vrc3/ModuleVrc3.cs:276)
GestureManager.Scripts.Editor.Modules.Vrc3.ModuleVrc3+<>c__DisplayClass44_0.<EditorContent>b__0 () (at Assets/GestureManager/Scripts/Editor/Modules/Vrc3/ModuleVrc3.cs:210)
GestureManager.Scripts.Core.Editor.GmgLayoutHelper.MyToolbar (System.Int32& toolbar, UnityEngine.GUIContent[] contents, System.ValueTuple`2[System.String,System.Action][] actions) (at Assets/GestureManager/Scripts/Core/Editor/GmgLayoutHelper.cs:40)
GestureManager.Scripts.Core.Editor.GmgLayoutHelper.MyToolbar (GestureManager.Scripts.Core.Editor.GmgLayoutHelper+Toolbar& toolbar, System.ValueTuple`2[System.String,System.Action][] field) (at Assets/GestureManager/Scripts/Core/Editor/GmgLayoutHelper.cs:35)
GestureManager.Scripts.Editor.Modules.Vrc3.ModuleVrc3.EditorContent (System.Object editor, UnityEngine.UIElements.VisualElement element) (at Assets/GestureManager/Scripts/Editor/Modules/Vrc3/ModuleVrc3.cs:208)
GestureManager.Scripts.Editor.GestureManagerEditor.ManagerGui () (at Assets/GestureManager/Scripts/Editor/GestureManagerEditor.cs:95)
UnityEngine.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt, UnityEngine.Matrix4x4 parentTransform, UnityEngine.Rect clippingRect, System.Boolean isComputingLayout, UnityEngine.Rect layoutSize, System.Action onGUIHandler, System.Boolean canAffectFocus) (at <b6a7e1825c0b45d3b0729282e86cc687>:0)
UnityEngine.UIElements.IMGUIContainer.HandleIMGUIEvent (UnityEngine.Event e, UnityEngine.Matrix4x4 worldTransform, UnityEngine.Rect clippingRect, System.Action onGUIHandler, System.Boolean canAffectFocus) (at <b6a7e1825c0b45d3b0729282e86cc687>:0)
UnityEngine.UIElements.IMGUIContainer.DoIMGUIRepaint () (at <b6a7e1825c0b45d3b0729282e86cc687>:0)
UnityEngine.UIElements.UIR.RenderChainCommand.ExecuteNonDrawMesh (UnityEngine.UIElements.UIR.DrawParams drawParams, System.Boolean straightY, System.Single pixelsPerPoint, System.Exception& immediateException) (at <b6a7e1825c0b45d3b0729282e86cc687>:0)
Rethrow as ImmediateModeException
UnityEngine.UIElements.UIR.RenderChain.Render (UnityEngine.Rect viewport, UnityEngine.Matrix4x4 projection, UnityEngine.UIElements.PanelClearFlags clearFlags) (at <b6a7e1825c0b45d3b0729282e86cc687>:0)
Looking into it, it seems that the ModuleVrc3Styles.Data.GestureClips array is full of null AnimationClips and the code is trying to grab the name of them.
Nothing unusual about my setup, I'd think. I only have 1 scene loaded with one avatar. Just looks like unity is destroying the animation clips.
Using VRCSDK3-AVATAR-2022.06.03.00.04 and Unity 2019.4.31f.
When using the isLocal parameter like VRCLens, i need a feature that can test the feature that is visible only to myself.
whenever i enable my camera with a render textrure (be it a normal one or only depth), all physbones cant be grabbed. they still behave like normal but grabbing seems to be dissabled.
I recently transferred my Unity file from version 2019 to version 2022, but now none of the toggles or expressions seem to work. I've updated the script and even reinstalled it, but still, nothing is working.
Remembering all "saved" parameters would really help speed up my avatar testing, so I wouldn't have to re-set all the options in the radial menu every time. This one might need to be an option you can enable/disable, for people who prefer the current behaviour of automatically resetting everything.
Tupper recommended using Gesture Manager as a tool to gauge how performant our avatar animators are. link
By referencing the Animator.Update time in the unity profiler we can get a performance stat for our animators. Even if it's not a perfect emulation of how the animator is at runtime in VRC, it's an alright ballpark number.
It'd be nice if there was a button within the tools section that initiates an animator test/benchmark. It could start the unity profiler, collect Animator.Update times, and display the current & average as it continues. A non-technical user would never open the profiler and examine their animator so if this was built right into the tool section of Gesture manager, it could open eyes for many as to why animator optimization is important.
Edit: Clarity
Hello!
It would be useful to have a menu for simulating face/eye tracking input from OSC, to test and see what about an avatar is working and not working. ATM, AV3emu has OSC implementation, which is great- but still kind of wonky to set up with real hardware.
This issue has been reported by MrDj200 in another thread and I moved it here for an official and dedicated one.
I need a receiver and sender at the same place to check if people are touching noses for example. I'm using a custom collision tag with
Allow Self
disabled, and it works in vrc, but in gesture manager, the receiver is being triggered by the sender on myself, which is not intended behavior.
Originally posted by @MrDj200 in #3 (comment) (Thanks again for sharing that out~)
I'll work on a fix for this problem and post an updated preview package here as soon as it's ready~ ^-^
Packages\vrchat.blackstartx.gesture-manager\Scripts\Editor\Modules\Vrc3\AvatarDynamics\AvatarDynamicReset.cs(44,30): error CS0246: The type or namespace name 'PhysBoneGrabHelper' could not be found (are you missing a using directive or an assembly reference?)
Built-in params, such as GestureLeft and GestureRight, should also work with parameter coercion. While it is unusual to do so, sometimes built-ins are used with the wrong type (int instead of bool, float instead of int, etc). In game and Av3emu handle this properly, but it seems the Gesture Manager does not. It at least does not coerce GestureLeft and GestureRight properly.
Screen.width
is being used instead of EditorGUIUtility.currentViewWidth
in ModuleVrc3
& Vrc3AvatarDebugWindow.cs
.Screen.width
is a value much higher than the actual size on screen, due to the scale factor being higher than a factor of 1.0.EditorGUIUtility.currentViewWidth
returns the current editor GUI width as rendered, rather than the raw, unscaled width.Every time I test my avatars I have to drag the weight sliders to 0 to get them to a "neutral" state. I think it would make more sense for 0 to be the default, just like all of the gestures are unchecked by default.
Edit: Alternatively, if you don't want to change the default, just having the selected weight save between tests would also solve my issue.
Recently the new VRCSDK update added the new state behavior VRCAnimatorPlayAudio
,
gesture manager doesn't do anything with this I'm pretty sure. Would be epic tho ๐
Create a new parameter in the fx controller, and give it a default value of 1, then start play mode. In 3.8.8, the parameter debugger properly shows the value is 1. In 3.8.9 and 3.9.0, it incorrectly says that the value is 0.
Dear BlackStartx,
Hello. While testing the animation using Gesture Manager, I found something strange.
After creating a new animation, setting the menu and FX, etc., I ran Toogle as a gesture manager, but the animations that worked normally before did not work.
In the debug window, it can be confirmed that the value is changed normally.
However, in VRChat in-game, all animations work normally.
Do you know anything about this phenomenon?
Best Regards,
Ryeoha Yoon.
Hey there!
As you have probably heard, VRC will enforce use of the Creator Companion starting next year.
It comes with the ability to create project templates that can automatically pull packages and insert them into new projects as well as automatically update packages.
Custom repositories and packages are supported as well, but in order to take advantage of most of the advanced automation features, packages need to be provided in the VPM format. Tooling and documentation on creating a VPM package is provided here:
https://github.com/vrchat-community/template-package
Since I consider Gesture Manager to be an essential tools for avatar creation and debugging, I would love for it to be available as a custom VPM repo to be able to keep it included in my projects and updated automatically.
Are there any plans on looking into that functionality?
Hi,
Using the new AvatarDynamics, you're able to grab PhysBones in the Game window in Play mode. You're also able to get Paramters depicting whether or not a physbone is being grabbed etc.
The parameter shows up in GestureManagers Debug menu, however sometimes when grabbing a PhysBone, it doesn't update the parameter. The same issue occurs with contacts.
Most of the time, the only way to get GestureManager to recognize them again, is to restart Unity.
I'm using the newest (at the point of writing this) VRCSDK
Unity 2019.4.31f1
and GestureManager 3.4
Edit:
When leaving PlayMode, there is the following Warning in the Console:
Assets/GestureManager/Scripts/Editor/Modules/Vrc3/ModuleVrc3.cs(109): PlayableGraph was not destroyed
In my scene I have four avatars (PC, PC fallback, Quest, Quest fallback), and I can't figure out the rhyme or reason to which one Gesture Manager decides to start up with when I activate it in play mode. I'd like to be able to select the one I'm actively working on from edit mode and have it stick. Is there any way to do this, or could that be added?
Assembly has duplicate references: vrchat.blackstartx.gesture-manager,VRC.SDK3A (Packages/vrchat.blackstartx.gesture-manager/Scripts/Editor/vrchat.blackstartx.gesture-manager.editor.asmdef)
can be happened when we installed Gesture Manager due to Unity 2019 bug.
We can workaround this issue by using name instead of GUID in asmdef.
As stated in title. The creator companion GUI only supports windows, however the VRC SDK, and Unity, support Linux and Mac, current instructions are incomplete and lack guidance for non-windows users
https://docs.unity3d.com/Packages/[email protected]/manual/StyledText.html
VRChats action menu fully supports rich text in an undocumented state if you use color codes such as below, you will beable to recolor the text without requiring the use of game modifications could you enable rich text for the menus because without it the names are excessively long, as compared to ingame when its properly applied as color
<color=green>
Or
<color=blue>
There is one Avatar that I am using that has a Contact Sender and Contact Receiver targeting the same Bone (particularly the Head). They use a custom Tag and they are both sized the exact same, basically touching each other.
If they are both touching each other at the same time, the Contact will continuously trigger endlessly despite it being set to "Allow Others" only. Keep in mind that "Allow Self" is completely disabled on the Receiver.
Of course, this behavior is not possible in VRChat. However, it seems to happen in the Emulator only. Is this a bug or an intentional function of Gesture Manager?
The idea behind this would be similar to how AV3 Emulators "remote clone" works, where you still have a local version and a remote sided clone to test FX's on both the client and remote. I understand that there is a "IsLocal" toggle but that does not do what I'd like it todo. And I understand "just use av3 emu" issue with that is the handful of issues that GM just doesn't have. Plus GM is just overall nicer and easier to use for debugging/testing
Just like clickable contacts, it would be great for a grabbable physbones system. It would be great for troubleshooting them being ungrabbable in game, and troubleshooting complex toggle systems making use of them.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.