first part of the VRChat for gmeets writeup
Signed-off-by: Christine Dodrill <me@christine.website>
This commit is contained in:
parent
c6482fe2fc
commit
f09331323d
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"editor.wordWrap": "wordWrapColumn",
|
||||||
|
"editor.wordWrapColumn": 80,
|
||||||
|
"editor.wordBasedSuggestions": false,
|
||||||
|
"[markdown]":{
|
||||||
|
"editor.wordWrap": "wordWrapColumn",
|
||||||
|
"editor.wordWrapColumn": 80,
|
||||||
|
"vim.textwidth": 80,
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
---
|
||||||
|
title: "My Convoluted VRChat Google Meet Setup"
|
||||||
|
date: 2021-02-24
|
||||||
|
tags:
|
||||||
|
- oculusquest2
|
||||||
|
- vr
|
||||||
|
- vrchat
|
||||||
|
---
|
||||||
|
|
||||||
|
# My Convoluted VRChat Google Meet Setup
|
||||||
|
|
||||||
|
Recently the place I work for sent us all VR headsets. I decided to see what it
|
||||||
|
would take to use that headset to make my camera show a virtual avatar instead
|
||||||
|
of my meat body face. This is the story of my journey through chaining things
|
||||||
|
together to make work meetings a bit more fun by using a 3D avatar instead of
|
||||||
|
myself in some of them.
|
||||||
|
|
||||||
|
[This post uses SVG for diagrams to help explain what's going on here. You may
|
||||||
|
need to use a browser with SVG support in order to get the best experience with
|
||||||
|
this article. All the diagrams will be explained after the fact so that people
|
||||||
|
using screen readers are not left out.](conversation://Mara/hacker)
|
||||||
|
|
||||||
|
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Working at <a href="https://twitter.com/Tailscale?ref_src=twsrc%5Etfw">@Tailscale</a> is great. They sent us all an Oculus Quest 2! <a href="https://t.co/dDhbwO9cFd">pic.twitter.com/dDhbwO9cFd</a></p>— Cadey A. Ratio (@theprincessxena) <a href="https://twitter.com/theprincessxena/status/1362871906597224456?ref_src=twsrc%5Etfw">February 19, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
|
||||||
|
|
||||||
|
So, let's cover the basics from a high level. At a high level a webcam is just
|
||||||
|
a video source that may or may not have a microphone attached to it. So in
|
||||||
|
order to get my avatar to show up in a video call, I need some way to make some
|
||||||
|
window on my computer act as a webcam. This will make the overall dependency
|
||||||
|
list look like this (for those of you using screen readers I will describe
|
||||||
|
this diagram below):
|
||||||
|
|
||||||
|
![](/static/blog/vrchat/simple_graph.svg)
|
||||||
|
|
||||||
|
VRChat renders to the Desktop which is picked up by OBS which has the ability
|
||||||
|
to pretend to be a webcam, which is finally picked up by Google Meet.
|
||||||
|
|
||||||
|
If the VR headset that I got from work was a tethered to the PC kind of VR
|
||||||
|
headset like the Valve Index or HTC Vive, the next steps would involve full
|
||||||
|
body tracking or something so that I could have my movements in real life
|
||||||
|
transfer into movements that my avatar makes.
|
||||||
|
|
||||||
|
However, the VR headset we got sent was an Oculus Quest 2. This is a
|
||||||
|
_standalone_ VR headset that is basically an Android tablet that you strap
|
||||||
|
to your face. This makes things a bit more technically challenging because
|
||||||
|
now you need some way to get the video to the headset and the motion tracking
|
||||||
|
data from the headset and to the computer at 90 times per second. This requires
|
||||||
|
a bit more cleverness.
|
||||||
|
|
||||||
|
The Oculus desktop software ships with a feature called Oculus Link that allows
|
||||||
|
you to use a gaming PC to render the VR data to your headset by sending the
|
||||||
|
video streams over USB. I had to dig around for a compatible cable (It needs to
|
||||||
|
be a specific kind of USB-3 to USB-C-3 cable with at least 5 gigabits per
|
||||||
|
second of transfer capacity) since the ones that
|
||||||
|
[Oculus sells](https://www.oculus.com/accessories/oculus-link/) are both at
|
||||||
|
least CAD$110 and out of stock anywhere I can find them in Canada. The 0.75
|
||||||
|
meter long cable I had been using was good enough to get me through the first
|
||||||
|
couple days of experimenting with VR, but it was clear that a better solution
|
||||||
|
was needed.
|
||||||
|
|
||||||
|
I did some digging and found a bit of software called
|
||||||
|
[ALVR](https://github.com/alvr-org/alvr#readme) that claimed to let me do VR
|
||||||
|
from my computer wirelessly.
|
|
@ -0,0 +1,73 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||||
|
-->
|
||||||
|
<!-- Title: G Pages: 1 -->
|
||||||
|
<svg width="610pt" height="123pt"
|
||||||
|
viewBox="0.00 0.00 609.61 123.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 119)">
|
||||||
|
<title>G</title>
|
||||||
|
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-119 605.611,-119 605.611,4 -4,4"/>
|
||||||
|
<g id="clust1" class="cluster">
|
||||||
|
<title>cluster_1</title>
|
||||||
|
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="8,-8 8,-107 593.611,-107 593.611,-8 8,-8"/>
|
||||||
|
<text text-anchor="middle" x="300.8055" y="-90.4" font-family="Times,serif" font-size="14.00" fill="#000000">PC</text>
|
||||||
|
</g>
|
||||||
|
<!-- VRC -->
|
||||||
|
<g id="node1" class="node">
|
||||||
|
<title>VRC</title>
|
||||||
|
<ellipse fill="#ffffff" stroke="#ffffff" cx="58.6871" cy="-45" rx="42.8751" ry="18"/>
|
||||||
|
<text text-anchor="middle" x="58.6871" y="-40.8" font-family="Times,serif" font-size="14.00" fill="#000000">VRChat</text>
|
||||||
|
</g>
|
||||||
|
<!-- DESK -->
|
||||||
|
<g id="node5" class="node">
|
||||||
|
<title>DESK</title>
|
||||||
|
<ellipse fill="#ffffff" stroke="#ffffff" cx="180.5935" cy="-45" rx="43.4396" ry="18"/>
|
||||||
|
<text text-anchor="middle" x="180.5935" y="-40.8" font-family="Times,serif" font-size="14.00" fill="#000000">Desktop</text>
|
||||||
|
</g>
|
||||||
|
<!-- VRC->DESK -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>VRC->DESK</title>
|
||||||
|
<path fill="none" stroke="#000000" d="M101.6668,-45C109.8542,-45 118.5168,-45 126.9873,-45"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="127.1794,-48.5001 137.1794,-45 127.1793,-41.5001 127.1794,-48.5001"/>
|
||||||
|
</g>
|
||||||
|
<!-- OBS -->
|
||||||
|
<g id="node2" class="node">
|
||||||
|
<title>OBS</title>
|
||||||
|
<ellipse fill="#ffffff" stroke="#ffffff" cx="289.6291" cy="-45" rx="29.6339" ry="18"/>
|
||||||
|
<text text-anchor="middle" x="289.6291" y="-40.8" font-family="Times,serif" font-size="14.00" fill="#000000">OBS</text>
|
||||||
|
</g>
|
||||||
|
<!-- VIRC -->
|
||||||
|
<g id="node3" class="node">
|
||||||
|
<title>VIRC</title>
|
||||||
|
<ellipse fill="#ffffff" stroke="#ffffff" cx="412.0734" cy="-45" rx="56.7561" ry="18"/>
|
||||||
|
<text text-anchor="middle" x="412.0734" y="-40.8" font-family="Times,serif" font-size="14.00" fill="#000000">VirtualCam</text>
|
||||||
|
</g>
|
||||||
|
<!-- OBS->VIRC -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>OBS->VIRC</title>
|
||||||
|
<path fill="none" stroke="#000000" d="M319.5824,-45C327.4013,-45 336.1504,-45 345.0646,-45"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="345.1584,-48.5001 355.1584,-45 345.1584,-41.5001 345.1584,-48.5001"/>
|
||||||
|
</g>
|
||||||
|
<!-- GM -->
|
||||||
|
<g id="node4" class="node">
|
||||||
|
<title>GM</title>
|
||||||
|
<ellipse fill="#ffffff" stroke="#ffffff" cx="545.1562" cy="-45" rx="40.4098" ry="29.3315"/>
|
||||||
|
<text text-anchor="middle" x="545.1562" y="-49.2" font-family="Times,serif" font-size="14.00" fill="#000000">Google</text>
|
||||||
|
<text text-anchor="middle" x="545.1562" y="-32.4" font-family="Times,serif" font-size="14.00" fill="#000000">Meet</text>
|
||||||
|
</g>
|
||||||
|
<!-- VIRC->GM -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>VIRC->GM</title>
|
||||||
|
<path fill="none" stroke="#000000" d="M468.8985,-45C477.4369,-45 486.1935,-45 494.5894,-45"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="494.6128,-48.5001 504.6128,-45 494.6128,-41.5001 494.6128,-48.5001"/>
|
||||||
|
</g>
|
||||||
|
<!-- DESK->OBS -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>DESK->OBS</title>
|
||||||
|
<path fill="none" stroke="#000000" d="M224.0006,-45C232.4355,-45 241.241,-45 249.5623,-45"/>
|
||||||
|
<polygon fill="#000000" stroke="#000000" points="249.7795,-48.5001 259.7795,-45 249.7795,-41.5001 249.7795,-48.5001"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
Loading…
Reference in New Issue