Zi
@majormcdoom.bsky.social
Indie VR dev / founder of @cozycubegames.bsky.social.
Making <<Penguin Festival>> in Godot. 🐧 Past: Owlchemy Labs. Proud husband and shiba dad.
- Español / 中文 / français OK
- 🚫 generative AI
- 🚫 genocide
- ✊ trans rights
Making <<Penguin Festival>> in Godot. 🐧 Past: Owlchemy Labs. Proud husband and shiba dad.
- Español / 中文 / français OK
- 🚫 generative AI
- 🚫 genocide
- ✊ trans rights
Godot auto-switches between 3D/2D views when you select nodes. This is great usually, but sometimes you need to see the 3D view while editing 2D properties, or vice versa. I made a little addon which lets me lock the auto-switch. Manual switching is still allowed.
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
November 8, 2025 at 4:25 AM
Godot auto-switches between 3D/2D views when you select nodes. This is great usually, but sometimes you need to see the 3D view while editing 2D properties, or vice versa. I made a little addon which lets me lock the auto-switch. Manual switching is still allowed.
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
I am drunk on power after realizing Godot lets you embed textures in RichTextLabels, and well... ViewportTextures are textures. 🤯
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
November 7, 2025 at 5:27 PM
I am drunk on power after realizing Godot lets you embed textures in RichTextLabels, and well... ViewportTextures are textures. 🤯
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
TIL you can embed inline textures into Godot's RichTextLabels. Which of course means I can bring those into 3D / VR easily with my addon. Will definitely be using them for tutorial dialogs and the like!
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
November 7, 2025 at 7:59 AM
TIL you can embed inline textures into Godot's RichTextLabels. Which of course means I can bring those into 3D / VR easily with my addon. Will definitely be using them for tutorial dialogs and the like!
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
Made some updates to my control proxies Godot addon, which lets you represent 2D Controls in 3D. Added some basic 3D anchoring features, and an examples scene. You can get it here: codeberg.org/MajorMcDoom/...
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
November 7, 2025 at 7:43 AM
Made some updates to my control proxies Godot addon, which lets you represent 2D Controls in 3D. Added some basic 3D anchoring features, and an examples scene. You can get it here: codeberg.org/MajorMcDoom/...
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
What you think you look like playing Beat Saber vs. what you actually look like playing Beat Saber (completely unrelated to anything I was doing today):
#VR
#VR
November 5, 2025 at 5:54 PM
What you think you look like playing Beat Saber vs. what you actually look like playing Beat Saber (completely unrelated to anything I was doing today):
#VR
#VR
Mostly harmless but very amusing bug in Godot 4.4. and 4.5: You can copy-paste wrong resource types into exported properties (mesh to material, script to texture, etc.)
This bug stumped me for a bit, since the thumbnail for materials and meshes can look the same!
#GodotEngine
This bug stumped me for a bit, since the thumbnail for materials and meshes can look the same!
#GodotEngine
November 3, 2025 at 6:52 PM
Mostly harmless but very amusing bug in Godot 4.4. and 4.5: You can copy-paste wrong resource types into exported properties (mesh to material, script to texture, etc.)
This bug stumped me for a bit, since the thumbnail for materials and meshes can look the same!
#GodotEngine
This bug stumped me for a bit, since the thumbnail for materials and meshes can look the same!
#GodotEngine
Found an old video from back when I was prototyping some superpowers for Cosmonious High. Here is the "telepathically control a swarm of space wasps" power, which sadly didn't make the cut.
November 2, 2025 at 9:56 PM
Found an old video from back when I was prototyping some superpowers for Cosmonious High. Here is the "telepathically control a swarm of space wasps" power, which sadly didn't make the cut.
Depends what you mean. There is a noise map being used in the shader, and it scrolls, so in that sense, yes. But if you mean a texture containing frames of an animated effect, then no. The noise map looks something like this:
October 29, 2025 at 4:56 PM
Depends what you mean. There is a noise map being used in the shader, and it scrolls, so in that sense, yes. But if you mean a texture containing frames of an animated effect, then no. The noise map looks something like this:
Sometimes you can tell you did a good job on a visual effect from the fact that you can hear it before adding sound. 👀🎧
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
October 28, 2025 at 9:32 PM
Sometimes you can tell you did a good job on a visual effect from the fact that you can hear it before adding sound. 👀🎧
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
Was doing a test of the penguin stepping code by applying a moving circular bias, and accidentally made tapdancing lololol look at 'em go!
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
October 27, 2025 at 11:35 PM
Was doing a test of the penguin stepping code by applying a moving circular bias, and accidentally made tapdancing lololol look at 'em go!
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
All gamedevs make bugs, but the bugs made by VR gamedev are objectively superior bugs. Sorry I don't make the rules.
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
October 27, 2025 at 8:28 PM
All gamedevs make bugs, but the bugs made by VR gamedev are objectively superior bugs. Sorry I don't make the rules.
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
Using the stable stream method to implement my arc teleportation interaction. Handles obstructions, and auto-snapping to player nav mesh. Super satisfying to play with, lol. Feels like putty!
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
October 23, 2025 at 6:59 PM
Using the stable stream method to implement my arc teleportation interaction. Handles obstructions, and auto-snapping to player nav mesh. Super satisfying to play with, lol. Feels like putty!
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
Easy repro: render half of a quad in a color in its intended linear representation, and the other half in its sRGB equivalent.
On Compatibility, the right side shows up correct, on Mobile/Forward, the left side shows up correct. You can use a color picker to verify, too.
On Compatibility, the right side shows up correct, on Mobile/Forward, the left side shows up correct. You can use a color picker to verify, too.
October 23, 2025 at 3:47 PM
Easy repro: render half of a quad in a color in its intended linear representation, and the other half in its sRGB equivalent.
On Compatibility, the right side shows up correct, on Mobile/Forward, the left side shows up correct. You can use a color picker to verify, too.
On Compatibility, the right side shows up correct, on Mobile/Forward, the left side shows up correct. You can use a color picker to verify, too.
I have no idea how to reconcile that code with this, but I forgot about the fact that this exists too:
docs.godotengine.org/en/stable/tu...
docs.godotengine.org/en/stable/tu...
October 23, 2025 at 3:03 PM
I have no idea how to reconcile that code with this, but I forgot about the fact that this exists too:
docs.godotengine.org/en/stable/tu...
docs.godotengine.org/en/stable/tu...
It's also better for effects where you want that slight physically-simulated feel so it doesn't feel too stiff, but it's not an actual fluid stream, so the stable geometry segmentation is more suitable.
October 22, 2025 at 7:05 PM
It's also better for effects where you want that slight physically-simulated feel so it doesn't feel too stiff, but it's not an actual fluid stream, so the stable geometry segmentation is more suitable.
In the past, I'd always visualized streams by simulating particles and connecting them. I realized I can instead place points at consistent times along projected trajectories from a history buffer of launch params. Probably not a novel idea, but it's neat!
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
October 22, 2025 at 7:05 PM
In the past, I'd always visualized streams by simulating particles and connecting them. I realized I can instead place points at consistent times along projected trajectories from a history buffer of launch params. Probably not a novel idea, but it's neat!
#GodotEngine #gamedev #indiedev
#GodotEngine #gamedev #indiedev
Yeah, I guess it depends what you consider "basic". Some might say darkening a color by 50% is basic, but it comes out looking so wildly different between renderers. See this example, where even though the uniform is consistent due to the conditional conversion, simple math screws it up. 😔
October 21, 2025 at 6:32 AM
Yeah, I guess it depends what you consider "basic". Some might say darkening a color by 50% is basic, but it comes out looking so wildly different between renderers. See this example, where even though the uniform is consistent due to the conditional conversion, simple math screws it up. 😔
Second: No, shader calculations are not always done in linear color space. It depends on the renderer. Specifically, Compatibility renderer does everything in sRGB, while Forward+ and Mobile use linear.
October 21, 2025 at 2:30 AM
Second: No, shader calculations are not always done in linear color space. It depends on the renderer. Specifically, Compatibility renderer does everything in sRGB, while Forward+ and Mobile use linear.
There is a hint flag you can use to get the best of both worlds, called color_conversion_disabled. But:
1) It is undocumented
2) It must be added *AFTER* source_color
4) It only appears in auto-complete suggestions if you type it *BEFORE* source_color
1) It is undocumented
2) It must be added *AFTER* source_color
4) It only appears in auto-complete suggestions if you type it *BEFORE* source_color
October 21, 2025 at 2:30 AM
There is a hint flag you can use to get the best of both worlds, called color_conversion_disabled. But:
1) It is undocumented
2) It must be added *AFTER* source_color
4) It only appears in auto-complete suggestions if you type it *BEFORE* source_color
1) It is undocumented
2) It must be added *AFTER* source_color
4) It only appears in auto-complete suggestions if you type it *BEFORE* source_color
Okay, here's a thread with more info about this...
First of all, yes, you *can* just remove source_color. But it just becomes a numerical vector in the inspector with no color picker. Quite literally, it is *no longer a color*, so of course, it doesn't get a color space conversion.
First of all, yes, you *can* just remove source_color. But it just becomes a numerical vector in the inspector with no color picker. Quite literally, it is *no longer a color*, so of course, it doesn't get a color space conversion.
October 21, 2025 at 2:30 AM
Okay, here's a thread with more info about this...
First of all, yes, you *can* just remove source_color. But it just becomes a numerical vector in the inspector with no color picker. Quite literally, it is *no longer a color*, so of course, it doesn't get a color space conversion.
First of all, yes, you *can* just remove source_color. But it just becomes a numerical vector in the inspector with no color picker. Quite literally, it is *no longer a color*, so of course, it doesn't get a color space conversion.
Another Godot gotcha: if you type out a color in a shader, it can be interpreted in different color spaces depending on where you put it, even if you write it exactly the same.
Below, you can see the difference between vec3(0.5) written as a uniform vs. vec3(0.5) written locally in the frag func.
Below, you can see the difference between vec3(0.5) written as a uniform vs. vec3(0.5) written locally in the frag func.
October 20, 2025 at 9:12 PM
Another Godot gotcha: if you type out a color in a shader, it can be interpreted in different color spaces depending on where you put it, even if you write it exactly the same.
Below, you can see the difference between vec3(0.5) written as a uniform vs. vec3(0.5) written locally in the frag func.
Below, you can see the difference between vec3(0.5) written as a uniform vs. vec3(0.5) written locally in the frag func.
Timeline cleanse: color-coordinating with the fall season.
October 18, 2025 at 9:27 PM
Timeline cleanse: color-coordinating with the fall season.
Reminds me of those weird alphabet Pokémon.
October 17, 2025 at 3:18 AM
Reminds me of those weird alphabet Pokémon.