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.
21
·
tracked
Uploading Avatar may freeze when antivirus software holds handle for lastly uploaded .vrca files
When we uploaded multiple avatars in a row relatively quickly, we encountered an issue where the upload process would freeze without any error message shown on the console or in the log files. This issue comes from two main causes: Firstly, the VRChat SDK silently ignores exceptions that occur in VRC_SdkBuilder.RunExportAvatarBlueprint . The catch clauses has comment // Errors are handled by the error callback , but most of the exceptions do not initiate error callback, including this one. Secondly, the VRChat SDK does not handle the exception occurred when trying to delete the last uploaded .vrca file. Removing the last uploaded .vrca file is not a critical step in the upload process, so it should not cause upload to freeze. However, currently, if the deletion fails, the upload process will not continue, leading to a freeze. When we replaced catch clauses to catch (Exception e) { Debug.LogError(e); } , we were able to see the following error message in the console: System.IO.IOException: The process cannot access the file 'C:\Users\****\AppData\Local\Temp\****\****\637e8e6c-8eb6-4cd2-a651-241fb7aa6ed3.vrca' because it is being used by another process. at System.IO.FileSystem.DeleteFile (System.String fullPath) [0x0001a] in <27124aa0e30a41659b903b822b959bc7>:0 at System.IO.File.Delete (System.String path) [0x00014] in <27124aa0e30a41659b903b822b959bc7>:0 at VRC.SDK3.Builder.VRCAvatarBuilder.ExportCurrentAvatarResource (UnityEngine.Object avatarResource, System.Boolean testAsset, System.Boolean buildAssetBundle, System.String& avatarPrefabPath, System.Action`1[T] onProgress, System.Action`1[T] onContentProcessed) [0x003bc] in <81261fc1c1e94d15bda5671000ac0e16>:0 at VRC.SDK3.Builder.VRCAvatarBuilder.ExportAvatarBlueprint (UnityEngine.GameObject externalReference) [0x00021] in <81261fc1c1e94d15bda5671000ac0e16>:0 at VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder.Build (UnityEngine.GameObject target, System.Boolean testAvatar) [0x0040b] in .\Packages\com.vrchat.avatars\Editor\VRCSDK\SDK3A\VRCSdkControlPanelAvatarBuilder.cs:2600 UnityEngine.StackTraceUtility:ExtractStackTrace () UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[]) UnityEngine.Logger:Log (UnityEngine.LogType,object) UnityEngine.Debug:LogError (object) VRC.SDK3A.Editor.VRCSdkControlPanelAvatarBuilder/<Build>d__132:MoveNext () (at ./Packages/com.vrchat.avatars/Editor/VRCSDK/SDK3A/VRCSdkControlPanelAvatarBuilder.cs:2605) System.Runtime.CompilerServices.AsyncMethodBuilderCore/MoveNextRunner:InvokeMoveNext (object) System.Threading.ExecutionContext:RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Threading.ExecutionContext:Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool) System.Runtime.CompilerServices.AsyncMethodBuilderCore/MoveNextRunner:Run () System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation/<>c:<.cctor>b__7_0 (object) UnityEngine.UnitySynchronizationContext/WorkRequest:Invoke () UnityEngine.UnitySynchronizationContext:Exec () UnityEngine.UnitySynchronizationContext:ExecuteTasks () When we disabled the real-time protection of the antivirus software for the temporary folder, the upload process worked as expected without freezing. Therefore, we conclude that the issue is related to antivirus software holding a handle on the last uploaded .vrca file, which prevents it from being deleted.
1
·
Bug Report
·
tracked
[SDK][862] "Offline Test" option is broken with multiple clients
Please fix multi-client "Offline Testing" or provide a better way to test networking without a full world upload. The SDK provides two buttons for testing. One is for local testing and the other is for full uploads. Local testing, or "Offline Testing", still requires a network connection and also provides an option for the number of clients. While some things appear to work with only one client, when using more than one client, local testing breaks and behavior is unreliable. Since this is built right into the SDK, people believe that it is correct functionality and think that their world is broken, wasting many hours of debugging and more bad testing. Known issues: -Network IK only sends for master -OnPlayerJoined/OnPlayerLeft triggers do not fire -Sitting in stations force all clients to the same position -Object ownership does not act properly between clients -Sometimes only the master can execute ANY triggers -Some clients do not make it to the same instance -Some clients are kicked to home Previous canny relating to multi-client local testing was closed with the response that using the same account for the same instance is not supported. Users are required to log into different accounts. This is not a solution. The general user does not know they are required to have multiple accounts to test their own worlds properly. Multiple accounts can only enter the same world if the world has been fully uploaded. Some users also have a very slow or limited connection and uploading a full world is impractical. https://vrchat.canny.io/bug-reports/p/multi-client-bugs
9
·
tracked
Adding another network-related component causes an assign network IDs error
After a successful build, adding a network-related component to a GameObject with another network-related component causes an error relating to network IDs when the next build. Repro steps Create a new scene and put the VRCSceneDescriptor Add a network-related component to a GameObject Build the world Add another network-related component to the GameObject in step 2 Build the world You'll see the dialog (see the 1st attached image) Preprocess Callback Failed The VRCSDK build was aborted because the IVRCSDKPreprocessSceneCallback 'AssignSceneNetworkIDs' reported a failure. The network-related components here are VRCObjectSync , VRCPickup , UdonBehavior etc. That needs a network ID. VRCPlayerObject of the ongoing Persistence open beta also causes this issue. Note 1 The console shows the errors after closing the dialog (2nd attached image) Failed to assign network IDs, 1 errors encountered! Try using the Network ID Utility to resolve them. Note 2 If you press the "Build & Reload" button on step 5, you'll see the "Build Succeeded!" message in the SDK tab. But the build has not succeeded. NetworkIDs in VRCSceneDescriptor has not been appropriately updated (in particular, the Serialized Type Names of the GameObject). This (showing false "succeeded") seems to be another defect. Note 3 If you press "Build and Upload", you'll see the "This file was already uploaded" error popup. And the SDK also shows "This file was already uploaded" as details. This message is incorrect since the building file is incomplete. This also seems to be another defect. Version Worlds 3.7.2
1
·
Bug Report
·
tracked
Load More