WebVRchat

What could VRchat look like with a web client? In what ways can the web and the native program interact with eachother?

Originally published April 2019

tags: devlog janus vrchat

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

In August 2018 VRchat released an update introducing the Home, a default starting world with a beginner friendly tutorial on their website for people to customize and upload their Homes. Tip: check the comments for a timestamp list.

Homekit

Here is how the default Home looks like when you first open up VRchat.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’


Construction

Software used:

I first used the Unity Exporter tool to export the geometry from the Unity scene into a folder with JML describing all the positions.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

I've now learned of an alternative tool that can relatively achieve the same results. GLTF-Exporter is a Unity3D tool for exporting Unity3D objects to glTF 2.0 format, which blender can import.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Now that the scene was in Blender, custom textures were added by FirefoxG who gave it a southwest flair.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

I'm currently working on editing a video game trailer to the webvrchat project. This is a clip I shot from one of the scenes:


Merch Shop

The GM3 merch shop is connected to the entire virtual studio but was segmented off to limit the scope of this experiment. I wanted to work with another VRChat creator to collaborate on figuring out the pipeline better from Unity3D -> Blender -> WebVR.

To visit this world, go here: https://vrchat.net/home/launch?worldId=wrld_7621bb7e-883c-495b-9dc6-24d623c925a2

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

This world is more complicated than the homekit, and the Janus exporter did not really work as planned. Looking around for alternatives, we found some Unity glTF exporter plugins on github and tested a few:

The third option from Plattar worked, mostly. The plugin exported the geometry into a gltf file but the textures were messed up:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

This did not turn out to be much of a problem, the files were sufficient enough for my 3D modeling professional friend FirefoxG to retexture and make it even more beautiful than before:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

The walls needed decoration. An imgur album containing much of GM3's artwork was created first. Next, I wrote some JML for the glTF file to start decorating the map using the native janus client. Using drag n' drop from imgur into janus and keyboard shortcuts to move things around, this webvr ready scene was created in a day and ready to see in virtual reality.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Next I added some big speakers that 'bounce' to a beat, a video music visualizer, and strobelight into the scene. All that was missing were the avatars! I invited some friends to dance in VRChat with full body tracking and recorded their performance in front of green scren. They danced to original music produced by GM3 which brought the whole scene together.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’


UI / UX

This is what the UI menu looks like in VRchat when you press esc in desktop modeโ€ฆ

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

And here is a prototype world select developed for Janusweb without looking at VRchat as reference!

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’


Avatars

The sbs3d capture of this avatar was done inside of a virtual green screen studio in front of a mirror while OBS recorded from the headset display mirror.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Here's a preview of how that avatar appears in the world, try the demo below if you want to view with a HMD!

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Demo


Sprites

This system can potentially lead to a streamlined method of converting detailed avatars made in Unity into a spritesheet that can be useful for doom sprite avatars, a format that can be highly cross-compatible with different platforms.

Here's how something like this looks in-game VRChat:

The 'Avatar Exam Center' is a station built in The Sandbox that takes a picture of your avatar with 11 cameras and generates a doom sprite version spawned into the world.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Watch on Youtube: https://www.youtube.com/watch?v=6e-Hhz0vQe8

Question that I am wondering: If one were to T-pose in that avatar station, would it be possible to export a spritesheet that can streamline the workflow for creating one of these types of avatars?

Apparently, it's a lot of precise setup to get working well right now.


Depth Streaming

This avatar was recorded with Anicap. Anicap VR Animation studio lets you use your VR headset as a real motion capture system. It supports full body tracking so you can record your avatar, edit, and use it in VRchat.

Another method to stream with depth is via the Depthfield camera avatar which uses a shader for displaying VRchat in equirectangular projection with a depth map that you can use to stream or record.

Depthfield camera avatar found here

Here is what the camera sees when the user is switched into the avatar:

The DepthField world by VoxelKei also features a volumetric video player which can play any mp4 video depthfield camera recording so you can test out how your shots in realtime with others.

It'd be really cool to add these videos in other worlds using something like a crystal ball, like those found in Valve's "The Lab" experience. We could satellite broadcast immersive experiences this way.


WebVR depth streaming

If we could stream 360 depth from VRChat to the web browser it would radically improve accessibility and make some of the coolest WebXR content ever! Here are some open source projects I found that could be useful:

Update: IT WORKS!!

Playing back 360 + Depth video from VRChat using DepthField camera avatars by Voxelkei in the web browser with JanusWeb, a three.js / webgl framework for VR!

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More โ†’

Code: https://github.com/janusxr-examples/360-viewer/tree/master/5


Threejs Client

Using the metavly API Avaer is able to dynamically decode and render VRChat avatars and worlds in a threejs web client!

https://github.com/webaverse/vrc

First renders

Decode textures with https://github.com/BinomialLLC/crunch

First glimpse of loading Unity VRChat into WebXR

Unity javascript mesh parser: https://gist.github.com/maierfelix/1802f9523dee4090e16dc44a4ac70176