Long time away! Fortunately it was time well spent, because the project that occupied me for the last 3 months heavily utilized VFX graph. I learned how particle strips work and built some insane graph chains with 15+ custom attributes. I even figured out a decent workflow for incorporating agents into the VFX graph creation process—custom HLSL blocks! ChatGPT was doing such a great job with HLSL that I started to feed more and more of my VFX graph into its gray box, only for me to realize that VFX graph caps custom nodes at a maximum of 4 inputs. Booooooooo. Fortunately, 4 Vector4s is actually 16 inputs, so yeah, a whole lot can get accomplished by a single HLSL node. I even stumbled upon a repo that creates custom VFX blocks! It needs some updating, but the potential exists for some crazy VFX vibe coding.
This has all made me want to create a parser for .vfx files that converts them to mermaid graphs. I just started my first attempt at this, but admittedly, this side quest was prompted by me spinning up this blog again, and yet totally unrelated to the reason I started writing in here today. Did I mention I finally tried Adderall?
Truth be told, there are several exciting announcements I wanted to make in this post. First off—the Interactive Energy Ball will be featured in Love Burn next year! It looks like I’ll be situated on the beach, not too far from where I originally had it set up near Boba’s Best Beach Bar as part of Love Burn 2023.
So yeah, I’m stoked for that. The only thing better than featuring at a burn on the beach in Miami would be featuring at a burn on the beach in Costa Rica. And guess what?? I randomly met the creator of Envision Festival at a party during Art Basel. Some things are just meant to be, I guess.
He asked me to write him an email, so I recorded an art proposal video earlier this afternoon and sent it his way. I added logic to delay particle initialization until after my hands touched together, which allowed me to pull off this smooth-as-hell transition into casually spawning an energy ball as I was talking. I hope the folks over at Envision are impressed! This project belongs on the Costa Rican beach.
The last piece of exciting news is that I upgraded my gear! For that aforementioned project I was working on over the last few months, I asked my employer that part of my payment be in the form of a sick projector, and let’s just say I just got paid :D. To celebrate that upgrade, I made another one and finally pulled the trigger on a new camera purchase for this project! I settled on the Zed 2i, which should be a pretty legit upgrade over my Kinect V2.
I decided to move away from the whole embedded body tracking sensor thing because modern machine learning algorithms do such a great job at pose tracking using a simple camera color stream. My AI depth tracking tests (2025-05-15) proved to me that inferred depth tracking still has a long way to go before it’s feasible in realtime applications, so that’s why I stuck with a depth sensor in this upgrade. Now, unlike the Kinect which uses an infrared sensor to calculate depth, the Zed uses a stereo camera setup. This should make it more resilient in brightly lit environments and accurate at longer ranges, but accuracy at very close ranges (<1.5m) may suffer compared to infrared. Hopefully, the accuracy is still passable. I guess I’ll know soon enough.
Moving to the Zed 2i, which lacks native hand pose tracking, is going to require a large overhaul to the codebase. Therefore, I think it’s time I released some updated source code. Unfortunately, I just can’t get myself to release something until I feel like it’s perfect. Bear with me. I need to fix this crazy glitch that occurs when bringing an energy ball back onto the screen.
I think the most simple way to do this is to respawn the sphere at its original position between the hands when a player reopens their hands while their sphere is off-screen. Less simply, I could adjust the physics settings and tweak the VFX graph. I should probably do all of the above, but let’s start with option 1…tomorrow ;)