World/Udon Bugs & Feature Requests

Post about current World or Udon bugs feature requests. One item per post!
Non-constructive and off-topic posts will be moved or deleted.
Add caching options for VRCImage/String/VideoDownloader components to skip request limits and lower network usage
Currently when a world loads, for example all VRCImageDownloader have to redownload their content, with a 5 second period between each. This both puts strain on hosts and also limits what we can do with worlds in a nice way since all non-bundled content has to be redownloaded every time. Not to mention it puts pressure on bandwidth for users. Ideally there should be a parameter on these functions to make a cached download request, at the very least for images/video, so it can be decided on a case-by-case basis (as this would of course not be desired for all cases where a URL is input by a user or is frequently changing on the source server.). If caching is enabled on the request and a local copy exists, you skip sending a request to the server and skip the 5-second cooldown on this downloader type, simply loading it from disk. This avoids the security concerns since no contact is made to the server. ----------------------------------------------------------- The cache could be stored as a sub-folder of a specific world, being shared across instances, which would make sense, and would make cleanup simple. But even more gains could be had from it being a global cache, so if I pasted the same URL in another world, it could instantly load it from my cache and any others who already have it cached, avoiding duplication of data. A simple dictionary file can be maintained and loaded on VRChat load to avoiding having to scan the cached files each time, as the amount of files could definitely grow pretty big. But a global cache like that isn't essential and would gladly give it up if it means implementing this request is more likely. Also, having an option to set the "TTL" (time to live) of the cached file would be a nice benefit too, though not an essential feature to have from the start. But would be pretty simple to add it as a saved property in the cache record data and compare it to the creation date and just do a redownload. (The local data should be encrypted using existing world encryption systems to prevent modifying the files and so there's no concern about illegal/awkward media ending up in a person's cache).
1
·
Feature Requests
Allow VRCImageDownloader to download and downscale images larger than 2048x2048px
Today, the most popular use case of the IVRCImageDownload is to share some picture with friends in VRChat. However, there is one big annoying behavior in IVRCImageDownload for this use case. That's 2048x2048 texture size limit. Therefore, I hope VRChat to have the feature that automatically scale the texture size down to 2048x2048. As described before, it's common to use IVRCImageDownload for sharing pictures with friends. There are several assets specifically designed for this use case such as Image Pad and ImageTablet . However, the 2048x2048 size limit is an annoying for this use case because today picture is likely to exceed this limit. For example, my iPhone 12 mini with default settings will take picture with 4032x3024 pixels and other modern smartphones also take high resolution image by default. In VRChat, I feel it’s common to choose take pictures in QHD, 4K, or 8K but none fits 2048x2048 limit. (FHD and HD fits 2048x2048 though we want to take high-quality pictures.) The texture downloaded with IVRCImageDownload become uncompressed RG, RGB or RGBA texture on the VRAM so It take huge VRAM. Therefore, I think it's reasonable to limit texture size on the VRAM. However, I think it's possible to resize texture down to 2048 off the main thread before loading to to the VRAM. That’s why I request VRChat to have the feature that automatically scale the texture size down to 2048x2048. 日本語要約 IVRCImageDownloadという Image Pad や ImageTablet のような画像を共有するためのアセットで使われている機能に対する要望です。 前述のタブレットではVRChatの制限により2048x2048より大きい画像を指定した場合にはエラーになりますが、エラーにする代わりに 2048x2048 以下に自動的にリサイズするオプションを追加してほしいという要求になります。 (技術的理由により2048x2048より大きい画像をそのまま表示するのは厳しいです) このオプションがあれば、Discordなどに上げた画像を共有するときにエラーが出て使えないという面倒事を減らせるようになります。
3
·
Feature Requests
·
tracked
Allow VRCURL URL / Dynamic URLs At Runtime, It's Time for a Change
With the Remote string loading and image loading, we should be able to dynamically construct endpoint url's to cater to different scenarios and offer more flexibility. I know other posts about this do exist, but I feel like VRChat won't really pay attention without there being more volume and input from the end users. Please upvote relevant requests and share your thoughts. I'm using this post to potentially share my feedback and idea, and offer a starting point for us to discuss on. I want to be able to kickoff my project in VRChat and the string loading with dynamic URL's will play a major role in making it a reality. I am assuming this was not possible because of "security" concerns, but let's face it that we offer users to block untrusted URL's as is and give them warnings. VRChat is not only a social platform, but a sandbox for creators in terms of avatar, world, and scripting content. I've developed essential tools on Garry's Mod and other sandbox games, and they had no problem letting scripts make API calls, despite the community having a dangerous and toxic userbase. This allowed me to let my clients configure "roles" and preferences from an external web portal. Are you afraid of data exfiltration? There are ways to do that already. Malicious URL calls? Anything on the internet can be malicious as is. We can't keep having this "Carebear" security mindset and keep it locked tight that severely limits our creativity, but look for accountability and flexibility. The security concern is admired, but now its necessary to send dynamic URL's for search queries when we deal with remote strings or images, otherwise we have no choice but to dump the entire dataset. I will just have to create hundreds of VRCURL's and just do a bunch of if/else's and download the entire "database" instead of feeding search queries to get specific datasets to save bandwidth and filter through the data set on the server side. Maybe to meet in the middle, we can be transparent of the requests to be made. Add a prompt to the end user stating that "This World is requesting permission to let your game send/receive content to and from http://xyz.com " and it would be whitelisted to that user individually. Any new URL's not on the list will prompt another permission request. It would Only apply to the domain name, and Subdomain only. Maybe prevent changing the domain/subdomain of the URL entirely. This can also allow the user to feel more confidence knowing that their "Untrusted URLs" is no longer a wildcard, but can consult a list to see which untrusted URL's they're permitting on their client. With your upcoming "Udon" menu implementation, it could be considered to have VRChat built-in user preferences specific to the worlds, and include the whitelist there of URLs the World has requested to communicate with.
3
·
Feature Requests
Expose UnityEngine.Keyframe properties and Keyframe[] Get/Set methods to Udon
https://docs.unity3d.com/2022.3/Documentation/ScriptReference/Keyframe.html Udon is extremely slow and many creators heavily rely on AnimationCurves to optimize their programs, allowing them to evaluate complex curves with very minimal performance impact instead of writing the mathematical equations manually, resulting in orders of magnitude more instructions in the UdonAssembly. AnimationCurve class has already been fully exposed to Udon (thank you!) and they can be constructed from a Keyframe array, but none of the Keyframe properties or the Keyframe[] Get/Set methods are exposed to Udon, something that is needed to actually manipulate the keyframes of an AnimationCurve . Allowing the modification of individual keyframes unlocks many use cases, such as adjusting a car engine's torque curve as a result of aftermarket modifications or adjusting input lookup tables to allow users to fine tune thumbstick input sensitivity to match their preferences, not only that, developing a complete director mode for worlds would become trivial, something that would allow users to create complex timelines for recording videos. There are some possible workarounds using AnimationCurve.AddKey(Single, Single) , but it is very inconvenient and severely limits more specific solutions where singular keyframes must be modified based on their original properties and we don't have a way of accessing the original time value of a keyframe before replacing it. I have attached images of several examples where AnimationCurves are being used and I would like to be able to modify the individual keyframes of.
0
·
Feature Requests
Load More