-- Leo's gemini proxy

-- Connecting to gemini.thebackupbox.net:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

a metaverse noob checklist a hard way [this post is WIP still]


updates on the "create world" task


I guess I'll be documenting my progress towards completing these steps here.


These steps come from:

https://github.com/M3-org/git-gud


Step 1. Mindset

> Think like a mad hacker scientist. Psyops your own brain through fashion if you struggle with this, get a dress shirt and tie and nice jacket from a store or for your vtuber avatar (search booth.pm).

> Read Snow Crash


I've read it... Interesting history book... where the fuck did my copy of this wander off to?


Step 2. Start a Journal

> Get into the habit of making documentation along the way, it is the best way to scale one-self. You can use hackmd and track your progress as you learn for easy sharing - notes make it faster to receive help and can become useful community contributions too.


I kind of did this one out of order. I'm doing this now and I already have some of step 3 done. hackmd being optional is why I'm doing this here. I feel like if I did it on hackmd I'd be less likely to update it and it'd just be another account I never use and eventually have to delete.


Step 3. Make stuff


Make Avatar

I didn't want to use any third party service to make my avatar, so I started following the tutorials

such as these.

I originally started by eyeballing a bunch of rectangular prisms near enough to the bones they were meant for. I kind of like how that looked all janky and shit, but there's the other part of me that is bothered by it.

[TODO: find media relating to janky-boi and link to them here]

I went in and edited all of the positions and scales to be numbers with as few digits as possible. While doing this I also went in and renamed all of the flesh to something useful instead of a bunch of Cube.001 Cube.002... Found out I can't just name the flesh the same as the bone it is attached to, so I guess there isn't a separate namespace. Decided on bone.flesh was a good name. "Flesh" sounds like a kind of nice and unsettling word to find inside of a computer. tangent: reminds me of the declaration of the independence of cyberspace. so extra fun.

A Declaration of the Independence of Cyberspace by John Perry Barlow


After I had the bones and flesh all setup, I wanted to at least put a face texture on the avatar. This was a bit more annoying than I expected, but when I stopped trying to figure it out myself and actually read something it went a lot smoother. I should have been keeping better notes as I was going, because I'll have to re-find the tutorial I was using. There's probably a bunch of them that'll do the job though. I figured the face texture should be the exact same as the 2d avatar I've been using for a while now.

the location of whatever avatar I plan on using in VRM format.


[...] and then he said "convert it to a transparent spinning GIF, it should be easy." and everyone laughed.

I'd seen jin post some stuff about having converted models to spinning GIFs for sharing in places where 3d models weren't normal. Like, most places, and I thought that was a neat idea and wanted to make my own. The stuff jin used was a bit different than what I wanted, so ofc I felt I had to write my own, bug using model-viewer seemed like the best starting place. The google-ness of it doesn't make me happy, but meh. First step was to figure out how to get it to spin nice and evenly. Found an orbit example that I stole and tweaked. Setting the interpolation-decay attribute on the model-viewer tag to 0 made it so I could set an orbit and it'd instantly change to that, so then I could pick whatever exact views I wanted in the GIF by specifying an array of orbits and scraping the canvas.


The GIFencoder I went with seems to have been a port of an actionscript gif generator.

jsgif

Cloned jsgif to my public_html dir and started seeing if I could extract the image data from the model-viewer module. Found that there's a "shadowroot" or something inside of the model-viewer that contains a canvas that I could rip image data from. It was unfortunately not quite as straightforward as I'd hoped. The transparency didn't work right, and for some reason I still don't know, the quality and resolution of the rendered module would decrease as it spun around. My guess is something like, auto-scaling in the webgl2 for performance reasons. Based on an issue on the jsgif repo about the transparency, I was able to find that /someone/ had it working, and I just needed to figure out what they were doing. The links they provided to their examples were broken, but I dug into their github and found the source of the stuff that was supposed to be there and imitated the code they did to replace pixels with transparency set in the alpha channel to some color not already used to be used as the transparency color to pass to the GIFencoder. For some also unknown reason, the webgl2 pixel data from the canvas came out upside-down. I'm currently doing a hack that leaves me with almost the correct data, just left-right flipped.


the page I used to generate the APNG and GIFs

the APNG of my avatar (looks like the background color firefox uses for "transparent" is the same color as my avatar's body)

the GIF of my avatar


Create World

So ofc I have my own universe of vaporware, but I should probably use something someone else has made for this until my own shit is capable of doing a bit more. I started trying to get a janusvr room made at least. Started by trying to get it to run completely self-hosted. It kind of really didn't want to. Trying to make it use an arbitrary different websocket for the presence server has been a pain in the ass. Followed all the different stuff and changed config defaults and putting server= in various tags... anyway. still doesn't work right. it tries to connect to wss://wss://thebackupbox.net/ws/janus-presence:5566 and I cbf to fix that yet, but it was working at some point and I was writing the server-side part of it as a shell-script because.. shell-script is the best thing to write something that handles JSON, right? ... right? The backend of that is done using inetd -> tlswrap -> epochttpd -> websocket.cgi of which I wrote all except for the inetd... for now. Writing my own inetd might be fun. So, the janus-presence server-side is able to just read lines of json, and output lines of json, and I had it sending $(date) continously just to make sure it worked.

tlswrap.c

epochttpd

websocket.cgi.c

In the space of the vaporware, I've started figuring out again how to do the serverside stuff in a good way. Before I had problems where after someone disconnected server-side processes would stick around and use up resources. Recent changes to tlswrap and nontlswrap should cause those left-overs to be cleaned up.

my vaporware called hackvr if you want to look at it


Decentralized Hosting

Decentralized is nice, but I like self-hosting it all right now. I'll be looking into decentralizing more though.

[TODO: look at all the decentralization stuff and figure out what's best... maybe I can mix veilid into this. (they might puke over how crypto-related some of the metaverse stuff gets)]


Promotion

I'm still figuring out how exactly I want to capture video. Currently only have full-screen capture setup, and I'd like one screen, or one window.

[TODO: get some video of cool stuff.]

-- Response ended

-- Page fetched on Sat May 11 23:30:17 2024