Will we be able to save the Prints to our PC with this metadata?
that’s lovely cookie Christmas cat :3
Did anyone say New UDON Nodes?
What would you guys do with these new nodes?
DoesGroupAllowAPI was an afterthought, explained here:
it is some special function that checks if the group has checked the “Allow Worlds to See Detailed Info About This Group” option.
Bad actors could easily take advantage of being able to check if players are in a specific group, so group owners must opt in to allow worlds to check.
Note that this only applies to External groups, The option is ignored if the target group is the same as the group hosting the instance.
Being able to connect external groups could be useful for things like global staff and Patreon Supporters as it eliminates the need for maintaining a Pastebin or similar service.
And checking the group info of the group hosting an instace can be useful for automaticlly staffing people in a world, giving people with specific roles special permissions only when it is their own group instance.
InstanceInfo was an idea I had the other day, I made a canny about it. Then in the middle of writing it I had the bright idea of GroupsAPI for udon. I can’t edit the canny and i dont wanna make a new one right now so i will post the groupsAPI idea here as well as the original canny:
Heres a crude mockup of a simple permission system for a Bar World:
UDON Graph (I suck at udon graph sorry if it looks terrible):
UDONSharp:
The actual groupAPI:
The actual InstanceInfo:
And finally my little script for my bar world:
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
using ITE = InstanceTypeEnum;
public class Mockups : UdonSharpBehaviour
{
//Instance Info & Group API Stuff
const string MyGroupID = "grp_c2c81f0b-42ad-4a19-8f0e-536752b1524d"; //Patreons and Global Staff have specific roles in this group
public string GroupName;
public string GroupID;
public ITE IType;
//Variables for Mockup Script
[UdonSynced]
private byte _SyncedData;
public byte SyncedData
{ get { return _SyncedData; } set { _SyncedData = value; } } //pretend there is logic here for packing & unpacking the next booleans for less network overhead.
public bool IsPatreon, IsGlobalStaff, IsLocalStaff, IsLocalBartender;
/*IsPatreon Is Self Expl. IsGlobalStaff is true if the localplayer is an Admin in "MyGroupID", IsLocalStaff is true if the LocalPlayer is Admin in the
Current Group that is Hosting the instance. And Finally, IsLocalBartender is true when the LocalPlayer has the "Bartender" Role in the Current Group.*/
void Start()
{
if (InstanceInfo.IsGroupInstance) //first we check if the current Instance is a Group Instance, In this example case it Is (yes)
{
GroupID = InstanceInfo.GroupID; GroupName = InstanceInfo.GroupName; IType = InstanceInfo.InstanceType;
//Assuming this instance is a Group Public...
Debug.Log($"This is a Group {(IType == ITE.GroupPublic ? " Public" : IType == ITE.GroupPlus ? "+" : "")} Instance"); //This is a Group Public Instance
//This is just a fancy way of doing multiple if statements on one line. /\
Debug.Log($"Owned By '{GroupName}' ({GroupID})"); //Owned by 'Some Random Bar Group' (grp_6a5329fb-877c-4f4f-8ca8-9fd5b75ac0dc)
if (GroupsAPI.IsUserInGroup(Networking.LocalPlayer, GroupID)) //now we will check the instance group
{
//LocalPlayer Is In The Group "Some Random Bar Group"
if (GroupsAPI.IsUserAdminInGroup(Networking.LocalPlayer, GroupID) || GroupsAPI.DoesUserHaveRoleInGroup(Networking.LocalPlayer, GroupID, "Manager"))
{ //User is Admin/Manager in the group, so we set the LocalStaff boolean.
IsPatreon = IsGlobalStaff = IsLocalStaff = IsLocalBartender = false; //reset all booleans to false
IsLocalStaff = true;
RequestSerialization();
}
else if (GroupsAPI.DoesUserHaveRoleInGroup(Networking.LocalPlayer, GroupID, "Bartender"))
{ //User has the role "Bartender" in "Some Random Bar Group"
IsPatreon = IsGlobalStaff = IsLocalStaff = IsLocalBartender = false; //reset all booleans to false
IsLocalBartender = true;
RequestSerialization();
}
}
}
//now we check My Personal Group to check for patreon supporters and global staff.
if (GroupsAPI.IsUserInGroup(Networking.LocalPlayer, MyGroupID))
{
//LocalPlayer Is In My Group
if (GroupsAPI.IsUserAdminInGroup(Networking.LocalPlayer, MyGroupID) || GroupsAPI.DoesUserHaveRoleInGroup(Networking.LocalPlayer, MyGroupID, "Manager"))
{ //User is Admin in the group/Has Manager Role, so we set the GlobalStaff and Patreon booleans
IsPatreon = IsGlobalStaff = IsLocalStaff = IsLocalBartender = false; //reset all booleans to false
IsGlobalStaff = true;
IsPatreon = true;
RequestSerialization();
return;
}
if (GroupsAPI.DoesUserHaveRoleInGroup(Networking.LocalPlayer, MyGroupID, "PatreonSupporter"))
{
IsPatreon = IsGlobalStaff = IsLocalStaff = IsLocalBartender = false; //reset all booleans to false
IsPatreon = true;
RequestSerialization();
return;
}
}
}
public void LocalPlayerRolesChanged() //pretend this is an override
{
}
public void OnInstanceClosed() //pretend this is an override
{
//do stuff when instance closes
}
}
Let me know what you guys think.
None of the nodes or code actually do anything, they are simply mockups that I created for better examples
Also I’m not a VRChat Dev, This is just a feature request and I want other’s opinions on it
Prints look great for content sharing
I have 2 questions for devs today
- can there be a benchmark tool for VRchat in the near future?
Context: VRC is the most played VR game but players blame the game instead of UGC and their own hardware. Having a standalone benchmark tool that performs a flight-through a preset world can start having players themselves understand “Hey it isnt VRChat, It’s the world, Other players avatars, or my pc is a potato”
It can return a score based on CPU and GPU performance like other games do so players understand their hardwares limits
- Would you consider a PSVR2 port now that circumstances benefit you?
PSVR2 is needing a vr social place and isnt doing optimal. VRChat can twist PlayStation’s arm and get them to loosen requirements (its very possible now that roblox opened the flood gates for UGC on Ps5). Imposters are already an okay crutch for showing avatars cross-platform. Just getting worlds compatible for PS5 (the most popular console in the world) would be worth the investment and a great way to gain users and subscriptions since a majority of them can’t build their own avatars
Will we be able to upload previous photos to make into Prints? Would be nice to pull out some of my favorite group photos to share
Very cool! Now…
Can we get saved calibrations on game closed?
Users like me that use SlimeVR do not need to recalibrate using the in game T-Pose calibration. It would beee niiiceeeee
I like the idea of prints, I’ve been waiting for a way to share pictures inside the game for a long time.
But there should be an ability to use any local photo as a print, not just the gallery picture or the photo that was immediately taken.
Same with collecting prints - I don’t want to save them into the “gallery” (with its artificial 20/64 limitations), I just want to save them into my local photo folder (maybe into a “downloads” subfolder) - where I can easily find them on my PC.
tbh I’ve always found the “gallery” kinda obsolete, because I already have my “gallery” inside my Documents/Pictures/VRChat folder - so I’ve never understood why VRChat needs to have a second “gallery” only to make pictures usable as a source for emojis/icons/stickers or prints. The current camera mode UI forces me to choose how am I going to use the picture while I’m taking it - which is unnecessary IMO, I should be able to make that choice later.
With the new prints, and existing sharing pedastle feature for gallery photos, it would be nice if the camera had an option to save a high resolution photo to my local drive and a normal photo to the gallery at the same time. Would be great for taking group photos at events.
Really sad seeing prints being locked behind VRC+… more than any feature I’ve said the same about before, except maybe groups but you said that’s gonna be open to everyone, this is going too far. This is a proper new feature and this is exactly what I was afraid of was going to happen. Just gonna have to live with the fear of what else nice and useful features I wont be able to use in VRC… VRC+ should extend features, like giving your more prints or something. This is as if we just got the ability to favorite or clone avatars or something but it’s locked behind a paywall.
Awesome feature and better than not having it at all though. And would be so amazing if you could upload pictures to show, that is one thing we gotta get one day. No more opening Discord to show it.
And VRC+ is so expensive, even with better finincials I wouldn’t be able to justify it. It’s almost a 6th of my whole internet bill. And now VRC has been broken for me for weeks and if I had VRC+ I’d be paying for nothing, also would give me stress about getting on or cancel it whenever I’d feel I needed a break. Wish I could support VRC that I love so much. Just too much.
I’m surprised Mipmap Streaming being in Beta wasn’t posted here. Seems like an important performance improvement to have tested! Looking forward to it regardless though
I’m hoping that’ll be a thing one day. In the meantime, VRCX does this if you have it running when taking photos in VRChat.
Still no info about the iOS Version of VRChat?
Super excited about prints! But the 1080p resolution is a huge limitation imo. With that, I can’t even use them as wallpapers :(
Please allow us to either:
- Take the photo at a high res (8k) and have it saved to our disk in that resolution, then share a low res picture or
- just share the picture in high res so it’s saved to the other persons PC in that, and then have a low res version of it in the gallery.
Apart from the resolution I love this idea! It has just happened too often that I or others had to re take pictures because the VRC camera defaulted back to 1080p.
In the latest Openbeat, a whitelist of unsafe URL restrictions has been added to public rooms. When I tried to add a whitelist, I found that there were 10 restrictions on the whitelist, which was too few, because the domain name after 302 redirection was also managed by the whitelist.And we haven’t seen any more news about the URL function that can be built in mid-March
The official stickers always warm my heart, spot on and adorable as usual
Until now mipmap streaming is still not implemented, and the officials are going further and further down the road of some weird little features…
And some of the world’s Udon network sync bugs are getting bigger and bigger…
Because VRChat doesn’t want people going ham on uploading tons of images they need to pay hosting for, the second gallery is best thought of as just cloud storage but limited by amount of images instead of MB.
So the “artificial 20/64” limit is there for a good reason, I do think it is low, but I am not going to complain, VRChat shouldn’t be wasting money.
What do you mean, the closed beta has been going on for a bit, I guess we don’t know when it will exit closed beta, but anyone can in theory get access to it (assuming others get kicked out for inactivity).
Seems like a worthwhile update, but I don’t see any changes… Maybe it’s because there are too many openbeta bugs at the moment…
A lot of avatars become Fallback avatars and a lot of avatars with uncompressed sizes are pending, and there are some strange things…