Started off my attempts at particle optimization by reducing particle spawn rate from 4,000/s to 1,500/s and then slashing my max capacity by a similar ratio, down to 6,000 from 20,000. Then, since my shard meshes aren’t working all that well anyways and the triangle mesh doesn’t look particularly good, I reverted back to outputting the default particle quad instead. Whaddya know—as soon as I did that, my particles showed colors again, which should not be happening since customColors is disabled in my Scene Controller.

Forced to have colors against my will
Forced to have colors against my will

On the bright side, scene FPS is now wayyyy up again. 120 FPS consistently with VSync enabled, even in QHD.

I gave the colors bug to Claude and it didn’t fix it properly, so I decided to give Codex a try. Unlike Claude, it doesn’t explain what it’s doing when it asks for permission, and it also seems to ask for permission dozens of times even if I specify “Approve this Session”. Annoying.


I’ve spent way too long trying to fix the colors in my scene. Enough BS. I’ve gotten it mostly working, as the colors show properly now and can be toggled, but I’m having an issue where the dummies initialize with the default value for customColors because they initialize (with colors) before the runtime settings are set. I’ve done a good amount of work by hand so far today (with some Claude sprinkled in). Now, Codex, take me home—and don’t ask me to accept edits 50 times!


Codex fucked up slightly, but it got me home after all. I learned that I can use a [DefaultExecutionOrder] attribute to specify when I want a script to run before another one. Now my SceneController loads first, followed by InGameSettingsMenu, followed finally by my PlayerConstructor. This ensures SceneController.Awake/OnEnable run first (subscribes to events), InGameSettingsMenu.Start loads the profile and sets customColors, then PlayerConstructor.Start invokes Actions.OnDummyAdded, which triggers SceneController.InitializeNewDummy with the correct settings. This ordering also guarantees SceneController is already subscribed when InGameSettingsMenu fires property setters in Start.


I keep finding more bugs.

The path distorters need to disappear when only one hand is open.

Must. Stay. Focused 😬

Let’s test out this capture card and figure out a good workflow.


I’ve kept this photo in my archive forever because I can never remember how to setup the card without it.


Excited for NBA to start up again

Got the setup working well. I’m using OBS hotkeys to trigger/stop recordings. Now, I just need to grab my Logitech MX Mechanical keyboard from the office and set it up with my recording laptop so I’ll be able to use a keyboard with both laptops even while their lids are closed.


I made it so that the videos on this blog autoplay silently. Easy CSS fix, yet a huge UX improvement in my opinion.


I fixed the interpolation of the trail distorters between the hand and sphere. I was incorrectly using player.sphere.transform.forward, which didn’t point the sphere toward the hand.


Another test I almost forgot about was testing the build time on this laptop. Roughly 2 minutes. So we’re good on that front.


Tags: optimization unity vfx-graph debugging performance codex footage capture-card