SDK Bug & Feature Requests

Please check out the following rules and use the provided template when posting a bug report! Off-topic posts will be deleted.http://bit.ly/vrchat-bug-reports
Proposal for fixing Audio Filters (eg low-pass) support for AVPro
I believe it is time to get a solution to the most plaguing issue (in my opinion) of AVPro: Audio Filters I do not think this is a "can't fix" situation. In this proposal I will go over the problem, considerations that have been discussed historically, and the solution I believe is feasible to implement with working sample code. ### Previous Cannys 1) https://feedback.vrchat.com/open-beta/p/986-avpro-player-ignores-lowpass-reverb-and-other-filters 2) https://feedback.vrchat.com/sdk-bug-reports/p/avpro-video-player-audio-filter-issue 3) https://feedback.vrchat.com/sdk-bug-reports/p/sound-effects-are-not-applied-to-audiosource-using-avpro-that-comes-with-sdk3 4) https://feedback.vrchat.com/feature-requests/p/usharpvideo-stream-audio-does-not-support-filters ### Crux of the issue As previously discussed in above canny #1, the current way of handling the AVPro speaker component (type named AudioOutput ) is that the component is implicitly created via AddComponent on the same game object. This has the critical drawback of being unable to respect any audio filters due to the DSP filter chain being _component order dependent_. The second half of this issue is that Unity has no runtime native way to change the ordering of components without fully reconstructing the references. This causes very obvious issues in regards to dependent scene references. (TCL's comment in canny #1 clarifies this as well) ### What has been considered Detecting and destroying/rebuilding known filter components after the implicit component is added. This is bad because all scene references to those components would be lost (eg: UI Events or public Udon variables). To avoid the lost components issue, a full scene search would be required in order to update the references which is costly and fragile. Placeholder components (shims) for each filter type that gets implicitly created after the implicit AudioOutput This is bad because it does not allow users to reference the actual filter components in the inspector (namely an issue for UI Events) Allow adding the AudioOutput script manually in scene and have the speaker search for it before trying to implicitly add the component. This is bad because it requires that the user import the AVProTrial package to be able to use built-in unity audio filters. This needs to be compatible with situations where the user does not wish to import that package so the dependency is decoupled from the feature itself. ### Proposed Solution A shim script that inherits from the AudioOutput class combined with a compiler flag for detecting if AVPro is present, and if not, then have a stub type of the _same namespace and type name_ which is _ONLY_ present in the sdk. Then update the VRCAVProVideoSpeaker to check for the existence of the shim component before creating an implicit AudioOutput, using it instead if found on the game object. This ensures that when the main shim script is loaded in editor, it is already a valid AudioOutput component and the component order is correctly retained so the Audio Filters will work correctly. In the SDK, the script type will check for the existence of AVPro through a version define, and if NOT present, will enable the AudioOutput stub class of the same namespace. An example of what it might be like: https://gist.github.com/techanon/41efc336604e148dde55862bff1778d9 I've tested this specific example in editor and it works there. Can't test in-client obviously.
8
Index Controller default open hands and some gestures still really weird
Hello VRChat Team, I am writing to request an adjustment to the default open hand position for the Valve Index controllers. It seems that compared to the previous version, the hand positions for different avatars are now inconsistent. While some avatars display fingers in a natural position, others exhibit significant distortion, with fingers appearing crooked even when the bones themselves are aligned correctly. I have spent considerable time attempting to correct this issue manually. Despite adjusting the bones through the SDK configuration options, I have been unable to achieve a satisfactory result. The first five photos attached illustrate the issue. When making a pointing gesture, some fingers tend to curve upward instead of remaining straight, resulting in an unnatural appearance. The tips of the fingers often curve as if they are broken. Additionally, there is noticeable inconsistency in the finger positions when the hands are open, with fingers becoming oddly crooked to the left or right depending on the avatar. The resting position when the hands are lowered is quite impressive, and I find it a great feature. It would be beneficial to maintain this alongside other button detections, such as finger sliding on the Valve Index control trackpad. I believe a review of this issue is warranted. Previously, we had a straight hand position pattern that was effective and allowed for natural spacing adjustments using the SDK's Configure option. Thank you for considering this request. Best regards,
0
VRCPlayAudio Component Cannot Clear an Audio Source - Causes Sdk to Lock Up Validating Avatar
This is part bug report and part feature request. The VRCPlayAudio component has been a very liberating addition to the SDK. Effectively functioning like a soundbank. A very niche issue I have come across when developing a semi-auto gun for an avatar of mine - is that the audio source has to be empty by default, with the AudioClip Being set to None (Audio Clip) , and the gameobject always toggled on. VRCPlayAudio will populate the AudioClip with a sound when it passes a state in the animator. However, when the animator exits a state, VRCPlayAudio doesn't have the ability to CLEAR the Audio Source. A problem this creates is the sound is then permanently stuck in the Audio Source until replaced by another, meaning every time I toggle my object on and off (one that required playonawake to work), it will play the sound. Example video: https://files.catbox.moe/poedto.mp4 In this video, the Audio Source Shoot_TimeCrisis_Wind starts out blank. When the M1911 Game object is toggled on and off, it doesn't play any sound. Shooting the gun will populate the Audio Source with a gunshot sound. Now, toggling the M1911 on and off will play the gunshot sound every time because the audio source isn't being cleared. In the animator however, you can make a VRCPlayAudio component just be blank. , and point to your audio source. This will clear your audio source correctly in editor, and functions how it should. With the audio source clear, it toggling on and off my M1911 does not play a gunshot sound unintentionally. Example video of how clearing audio source should work: https://files.catbox.moe/vrspbn.mp4 ... However, a major problem in doing this, is now that there is an empty VRCPlayAudio Component in your animator. The SDK will now get completely stuck in an infinite loop attempting to scan the files present in the avatar, and preventing upload. Example of the SDK getting stuck on Validating: https://files.catbox.moe/ohn1o4.mp4 Ideally, a solution to this would just come in the form of adding a dropdown to VRCPlayaudio that specifically clears an audio source, or dedicated component that handles this function exclusively. An alternative solution I came up with is having a null.mp3 file insert into the audio source instead. Whilst this does work, this is however still an audio clip being played. Contributing to the voice limit even if briefly - so it isnt an elegant one.
2
·

tracked

Changing JsonConvert.DefaultSettings breaks SDK uploads
On SDK 3.6.1, when a script changes JsonConvert.DefaultSettings , specifically by adding JsonSerializerSettings.TypeNameHandling = TypeNameHandling.Auto , SDK uploads fail as a list is serialized for tags and is expected to be parsed as an array. The SDK should explicitly pass JsonSerializerSettings to json (de)serialization methods to address this. Stack trace: [Always] tags must be an array˸ {"$type"˸"System․Collections․Generic․List`1[[System․String‚ mscorlib]]‚ mscorlib"‚"$values"˸[""]}‚ tags must be a string˸ '[object Object]' UnityEngine.Debug:LogError (object,UnityEngine.Object) VRC.Core.Logger:LogError (string,VRC.Core.DebugLevel,UnityEngine.Object) VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder/<UploadError>d__115:MoveNext () (at ./Packages/com.vrchat.avatars/Editor/VRCSDK/SDK3A/VRCSdkControlPanelAvatarBuilder.cs:2281) System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Start<VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder/<UploadError>d__115> (VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder/<UploadError>d__115&) VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder:UploadError (object,string) VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder/<HandleUploadError>d__165:MoveNext () (at ./Packages/com.vrchat.avatars/Editor/VRCSDK/SDK3A/VRCSdkControlPanelAvatarBuilder.cs:2481) System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<System.Exception>:Start<VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder/<HandleUploadError>d__165> (VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder/<HandleUploadError>d__165&) VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder:HandleUploadError (System.Exception) VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder/<BuildAndUpload>d__163:MoveNext () (at ./Packages/com.vrchat.avatars/Editor/VRCSDK/SDK3A/VRCSdkControlPanelAvatarBuilder.cs:2458) System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<VRC.SDKBase.Editor.Api.VRCAvatar>:SetException (System.Exception) VRC.SDKBase.Editor.Api.VRCApi/<CreateNewAvatar>d__35:MoveNext () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/API/VRCApi.cs:707) System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<VRC.SDKBase.Editor.Api.VRCAvatar>:SetException (System.Exception) VRC.SDKBase.Editor.Api.VRCApi/<Post>d__18`2<System.Collections.Generic.Dictionary`2<string, object>, VRC.SDKBase.Editor.Api.VRCAvatar>:MoveNext () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/API/VRCApi.cs:385) System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<VRC.SDKBase.Editor.Api.VRCAvatar>:SetException (System.Exception) VRC.SDKBase.Editor.Api.VRCApi/<MakeRequest>d__16`2<System.Collections.Generic.Dictionary`2<string, object>, VRC.SDKBase.Editor.Api.VRCAvatar>:MoveNext () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/API/VRCApi.cs:341) System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<System.ValueTuple`2<VRC.SDKBase.Editor.Api.VRCAvatar, System.Net.Http.HttpResponseMessage>>:SetException (System.Exception) VRC.SDKBase.Editor.Api.VRCApi/<MakeRequestWithResponse>d__15`2<System.Collections.Generic.Dictionary`2<string, object>, VRC.SDKBase.Editor.Api.VRCAvatar>:MoveNext () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/API/VRCApi.cs:332) System.Runtime.CompilerServices.AsyncTaskMethodBuilder:SetResult () VRC.SDKBase.Editor.Api.VRCTools/<IncreaseSendBuffer>d__4:MoveNext () (at ./Packages/com.vrchat.base/Editor/VRCSDK/Dependencies/VRChat/API/VRCTools.cs:159) UnityEngine.UnitySynchronizationContext:ExecuteTasks ()
0
Load More