dorpomi.bsky.social @dorpomi.bsky.social · 04/10/2026bsky.app/profile/dorp... Some time ago I found a way to increase the actual stream pixel density, not the foveated area size or SteamVR rendering resolution (while keeping the stream the same res). This made the sharpness as good as VD can get and I've been happy ever since 040
dorpomi.bsky.social @dorpomi.bsky.social · 04/10/2026I don't think 4:4:4 is really used anywhere in the wild cause of the lack of consistent HW support, so unfortunately no getting rid of color issues related to that. Here's info from a direct dump of the stream to QPro. 210
dorpomi.bsky.social @dorpomi.bsky.social · 02/10/2026And, finally, a DIY cable to have a complete "set" of some sorts for this modular earbuds system xD 020
dorpomi.bsky.social @dorpomi.bsky.social · 15/09/2026Yeah, porting for devs is easy cause Frame can run APKs, so all they have to do is strip out Meta stuff, add DFR, and tweak perf. Most of them would likely be done like that, the only Linux ARM app I've found so far is the HL:A port. But it's also exciting cause you can run those APKs on Quests! 010
dorpomi.bsky.social @dorpomi.bsky.social · 14/09/2026Eleven Table Tennis and Walkabout Minigolf are another candidates for this experiment :D Though WM is quite large and has data outside the APK in an "obb" folder, but I think you can just put in a correct location on Quest storage in it will work 101
dorpomi.bsky.social @dorpomi.bsky.social · 14/09/2026Tried downloading the Steam Frame APK of Ancient Dungeon and it works great on my Quest! Multiplayer and saves won't work as expected, cause there's no Steamworks implementation (so far). It's amazing now that standalone versions of games are no longer restricted to Meta store 120
dorpomi.bsky.social @dorpomi.bsky.social · 02/09/2026More laser shenanigans! This time with baked dynamic environment lighting, VRCLVs, lasers done completely on GPU. Took some fiddling to make the laser rays additive and still show up in the depth buffer for proper SSR. Motion blur makes it look like Unreal Engine footage xD 050
dorpomi.bsky.social @dorpomi.bsky.social · 26/08/2026That reasoning doesn't make any sense, how does that even happen... 010
dorpomi.bsky.social @dorpomi.bsky.social · 19/07/2026I think it's this one youtu.be/qjFZ6ggEkJc But it's been two years since and afaik there were some improvements to udon networking, so some things possibly not fully relevantyoutu.beFurality Umbra - Udon Development: From First Steps to OptimizationYouTube video by Furality 120
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026I'm quite happy with the results so far, and have more ideas to improve usability and make this setup more universal. Perhaps I'll try to turn it into an asset in the future. But I'm not sure about it being completely plug-and-play. There are caveats I don't see going away yet. 000
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026The next few updates were: increasing RT resolution to 8K, using a 6x6 grid for a total of 36 cameras, and moving all metadata into the alpha channel. For metadata, I interleave data for each camera within its respective cell, and treat the outer border of the pic as a global metadata place. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026The workaround: just upscaling the image 2x in the decoder tool before writing it to the file. I suspect Brush does bilinear scaling in non-linear encoding, which just gives wrong results. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026Another issue probably specific to Brush: I assume it renders the scene at the same 768x432 res during the training process, and therefore it doesn't check how the splat looks at higher res. This resulted in artifacts visible only in high-res viewports. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026And by "confusion" I mean that the algorithm creating the splat will start coming up with cursed-looking workarounds to try and make the splat work, instead of focusing on improving the actual details in the scene. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026Immediately, this exposed another issue: objects & avatars that are missing from the depth map will be "smeared" on the surfaces behind, from each camera perspective. Mirrors also show up as simple flat surfaces in the depth map, which introduces "confusion" for the splat. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026I use only a fraction of depth values, as during experimentation I discovered that less is better for the initial point cloud, and throwing a ton of points just overwhelms Brush. Depth samples are projected from the camera's perspective and use its respective RGB color. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026It might seem that the world would not be visible in the pic if one disabled the world layer, but this toggle doesn't affect the camera components on the avatar, only the VRC cam. The final shader overrides RGBA values with the ones from RT, and the world is visible in the RT. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026The final shader outputs the RT to the VRC camera, while also interleaving metadata on top of it (32-bit float perfectly fits into a 2x2 pixel block). A quirk of VRC: the world layer must be disabled in the cam, otherwise the alpha channel is not written to PNGs. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026What ended up being saved in the RT, though, were alpha values. So I have a shader that runs inside each splat camera and grabs the depth values while they're still available. Depth values are packed into 2x2 blocks, which halve the depth map resolution and provide 32-bit precision. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026So I decided to tackle the missing point cloud and hopefully improve the results (I did) by saving the depth into the alpha channel. Getting the depth map was a bit tricky, as I assumed it would be properly stored in the RT if I configured the RT to have a depth buffer. But it wasn't... 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026After observing the training process, it looked like Brush struggled due to the lack of a good starting point cloud. The training started with just a noisy volume and tried to reconstruct the scene from there. But it's VRC, it's rendered in 3D, so I can use the depth map to address that! 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026The resolution of a single frame in a 5x5 4K grid is only 768x432. Paired with anti-aliasing off, the splats had visible "pixelated edges" mimicking the pics because of that. Most of the frames don't have BW pixels in them, but the lower ones have 2-3 rows, still not ideal. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026And then a shader outputs RT to the VRC cam with metadata overlayed on top. I realized post processing, motion blur, bloom (can be forced off by user) all affect metadata pixels. Unfortunately this makes some worlds unsplattable... The quality of the splats was also not the best. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026After fixing all the bugs, I ended up using a 4K RT with 25 cameras set up aimed at taking group pictures. A script, using Modular Avatar, automates this by looping through each cam during avatar build and assigning output rect on the RT. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026Next target: capture a "snapshot" in time. Basically, splatting something in motion. Capturing a bunch of pics manually won't work any more, so I started implementing a solution like in the quoted post A bunch of cameras rendering into one RenderTexture with similar B&W metadata 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026But the B&W pixel solution it not perfect as it still affects the RGB data, and even packing 3 bytes into a single pixel will still affect the color data a tiny bit. And the avatar must be in the VRC camera frustum for the shader to work. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026A decoder tool goes through those pics, decodes the values, and generates a COLMAP dataset that I load into Brush to do splat training. So this only works for static scenes, but it allows taking as many pics as you want, and the coverage can be huge with tons of details. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026First of all, I had to take the obvious advantage of splatting inside a rendered game: having direct access to perfect camera data (position, rotation, FoV). I wrote a shader that overlays B&W pixels on top of the pic and encodes the data. 110
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026And one more! Below you can find my journey and explanations on how it's done. 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026Another post cause bsky doesn't allow putting more than one video in a post... 100
dorpomi.bsky.social @dorpomi.bsky.social · 10/07/2026Back in April this post inspired me to start experimenting with splatting in VRC, so I wanna share what I've been occasionally working on since.🧵 In my experiments I mostly focused on getting high fidelity results and seeing if I could streamline the process. fxtwitter.com/VoxelKei/sta... 151
dorpomi.bsky.social @dorpomi.bsky.social · 05/07/2026Oh man, thanks for recommending! Just finished watching the last episode and wow, what an ending. That was absolutely not what I expected, but such a great way to finish the story! 010
dorpomi.bsky.social @dorpomi.bsky.social · 01/07/2026I tracked it down to some custom code that switches the low frequency clock of NRF to the external oscillator, but don't understand enough why would it happen, or honestly don't want to dive into it now that it's working and reliable. It was incredibly frustrating. 010
dorpomi.bsky.social @dorpomi.bsky.social · 01/07/2026This much improved connection quality (though still not perfect) and resolved a very annoying bug I had with the official firmware: The trackers would either inconsistently fail to boot when pressing reset, so I have to reset them 10-20 times, or fail to wake up after inactivity. 100
dorpomi.bsky.social @dorpomi.bsky.social · 01/07/2026A few days ago I did the antenna mod (31.2mm wire) for all of my 11 Smol Slimes, as well as found actively developed firmware fork by Jitingcat, and TDMA fixes on top of that by promyxe. 100
dorpomi.bsky.social @dorpomi.bsky.social · 18/06/2026Finally implemented another idea I wanted to do for a while: soldering 3.5mm headphone jack to the PSVR2 audio cable instead of their earbuds. Works great and reduces the friction when switching between the headsets! I love how those IEMs sound. 010
dorpomi.bsky.social @dorpomi.bsky.social · 17/06/2026I let the developers know about what I found (and they already responded shortly before they'll be looking into it), so hopefully this helps them. The solution is to just use e.g. a quad to draw the background. Wonder if it's really possible to get AMD attention to get this fixed. 010
dorpomi.bsky.social @dorpomi.bsky.social · 17/06/2026I found the GameOverUI class and a call in there that sets the background color. Editing the assembly is quite easy, so I just changed the dark-red 0.25 value to 0.0 and saved the changes to DLL. Launched the game, the issue is gone! 100
dorpomi.bsky.social @dorpomi.bsky.social · 17/06/2026Since the clear color is the only difference and the Gemini suggestion about DCC bug makes sense, it was the next logical step to change the clear color to pure black and see what happens. dnSpy is a great piece of software to edit compiled C# and worked perfectly with the game. 100
dorpomi.bsky.social @dorpomi.bsky.social · 17/06/2026The explanation about AMD Delta Color Compression seems plausible considering this piece of advice from AMD themselves (gpuopen.com/learn/dcc-ov...). They are clearly not a fan of values other than 0.0 or 1.0 for clear color, so perhaps this codepath in VR rendering was not tested. 100
dorpomi.bsky.social @dorpomi.bsky.social · 17/06/2026The only difference was the color in the ClearRenderTargetView call. In the endgame screen it's dark red, and in the main menu it's pure black. So I wrote down all the evidence, and also the fact that the artifacts are grouped as 8x8 pixel blocks, to Gemini to see what it says: 100
dorpomi.bsky.social @dorpomi.bsky.social · 17/06/2026Looking at the capture, the issue appeared right after the MSAA buffer is resolved, and everything before that seems fine. I compared the clear and resolve calls with a capture of the main menu screen which has very similar UI floating in the void, but no such problems are there. 100
dorpomi.bsky.social @dorpomi.bsky.social · 17/06/2026There is a Steam discussions bug report about it with a few users chiming in, but devs can't reproduce as it seems to be AMD-specific bug. So I decided to look into it. Using RenderDoc to capture a frame of VR game is thankfully as straightforward as a flat screen game. 100
dorpomi.bsky.social @dorpomi.bsky.social · 17/06/2026Ancient Dungeon VR is quite a fun game I play occasionally with my friends, but lately I've been experiencing a bug in the endgame screen, where the background in that scene is not properly cleared and generates very bright smears behind objects, only in right eye in VR. 110
dorpomi.bsky.social @dorpomi.bsky.social · 28/04/2026After cleaning it up best I could and resoldering the wire, the connection was perfectly stable. So I found some B-7000 glue I have and glued the earbud back together. No idea how long it will work with all of that corrosion happening, but hey at least we're back in action :D 010
dorpomi.bsky.social @dorpomi.bsky.social · 28/04/2026Opening it up was quite easy as the glue was rather weak, and I was presented with a lot of corrosion. But the core problem was that the black connector part had a bit of wiggle room and could rotate a few degrees back and forth, which caused stress on the center wire. 100
dorpomi.bsky.social @dorpomi.bsky.social · 28/04/2026So I was disappointed it was over for those headphones and started looking into alternatives, but really didn't want to bother choosing something else and then making another custom cable for use with QPro. So I finally decided to give repair a try and see if it could be salvaged. 100
dorpomi.bsky.social @dorpomi.bsky.social · 28/04/2026Something like 2 weeks ago the left earbud of my IE100 Pro IEMs, that I extensively use for all stuff VR, started having connection issues. Simple troubleshooting by changing the cable showed it was the connector in the earbud itself that was causing issues. 100
dorpomi.bsky.social @dorpomi.bsky.social · 01/04/2026Basically it increased the actual density of the foveated area. To compensate for the smaller area, "Foveated Encoded Video Size" option inside SteamVR needs to be manually increased a bit. To keep the game resolution the same, I put render resolution to 100% (automatic is 150%). 030