Karl
@hexaquo.at
1.2K followers 920 following 170 posts
Researcher, teacher and activist somewhere at the intersection of landscape perception, graphics programming, open source, and climate change. Working on VR landscape visualization with Godot. Maintaining Geodot: https://github.com/boku-ilen/geodot-plugin
Posts Media Videos Starter Packs
hexaquo.at
now I'm curious too, did you figure it out?
Reposted by Karl
kelvinvanhoorn.com
Trying out 2 different approaches to leaf rendering on trees.

The first is a custom mesh, where each quad of the mesh is extended along the normals.

The second is are multimeshes of quads, where the normal is based on the vertex position relative to the center of the multimesh.

#GodotEngine
Reposted by Karl
jendrikillner.bsky.social
Graphics Programming weekly - Issue 411 - October 5th, 2025 www.jendrikillner.com/post/graphic...
Reposted by Karl
bildoperationen.bsky.social
So-called #genAI means the abolition of the future through the proliferation of endless streams of stochastically rendered generic pasts. Having turned large parts of the cultural archive into training data, it now traps us in a foreverized pastness, a 24/7 nostalgia for a past that never existed
quoproquid.bsky.social
have just come across a YouTube account that has been using Sora to upload reels of fake, AI-generated “90s sitcoms” every few hours
hexaquo.at
Ahh right, of course. I knew I was missing something 😅 that's tricky!
hexaquo.at
I see, and if I understand correctly, what you'd want is for this "next pass" to only render on top of back-faces (as in the first picture), but not on top of front-faces (second picture), right? Could you use something like sign(dot(camera_direction, normal)) to differentiate between that?
hexaquo.at
Oh interesting! I might be missing something but could you check the dot product between camera direction and mesh normal and use the inverted depth test only if that is negative, i.e. if the thing that's currently being rendered is a back-face and not a front-face?
hexaquo.at
Using a sphere made it a bit easier because I could pass the radius for figuring out when the camera has reached the other side. Maybe that could at least be generalized to symmetric meshes by using the model-space vertex length or something? (But maybe using an approximate radius is good enough)
hexaquo.at
The idea is: make the vertices stick to the camera rather than passing behind it, and use alpha to make these vertices fade out as the camera is moving through the mesh.
Schematic drawing. Left, labeled "before", shows a camera (depicted as a triangle) inside a circle. Right, labeled "after", shows the camera next to a half-circle, the wall of which is right in front of the camera. Screenshot of Godot shader code:

shader_type spatial;

uniform float radius = 2.0;

varying float inside_alpha_factor;

// I think you could get this out of the PROJECTION_MATRIX, but I was too lazy to figure that out
#define CAMERA_NEAR -0.051

void vertex() {
	// Transform vertex from model space into view space
	vec3 view_vertex = (MODELVIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;

	// Calculate a factor which goes from 1.0 (when the camera is in front of the original vertex
	// position, i.e. the vertex is right on the near plane in view space) to 0.0 (when the vertex
	// is radius * 2.0 behind the camera, i.e. we're at the opposite end of the mesh)
	inside_alpha_factor = smoothstep(radius * 2.0, CAMERA_NEAR, view_vertex.z);

	// Stick the vertex right onto the camer's near plane
	view_vertex.z = min(view_vertex.z, CAMERA_NEAR);

	// Transform back to model space and assign to VERTEX
	VERTEX = (inverse(MODELVIEW_MATRIX) * vec4(view_vertex, 1.0)).xyz;
}

void fragment() {
	// Apply the alpha
	ALPHA = inside_alpha_factor;
}
hexaquo.at
This got me wondering what would be the easiest way to make meshes appear like a volume when moving through them (using only shaders). This is what I came up with:
Reposted by Karl
yiningkarlli.bsky.social
In light of EA's upcoming change of ownership... here's your annual reminder that Will Wright's original GDC 2005 demo of Spore was one of the most incredible game demos every presented, before the game was utterly and totally ruined by EA's meddling.

www.youtube.com/watch?v=ofA6...
Will Wright GDC 2005 Spore (The Future of Content) Remastered
YouTube video by Zeusmonomon
www.youtube.com
Reposted by Karl
impossible.bsky.social
This is not only introducing a new approach to OIT, but it's a comprehensive overview of various OIT techniques and a history of transparency in COD.

One thing that seems to be missing is CPU-side depth sorted transparency, which I implemented in SHG's COD branch and IIRC Treyarch had also
ceruleite.bsky.social
#SIGGRAPH2025 Advances in Real-Time Rendering in Games course talks slides posted: "Adaptive Voxel-Based Order-Independent Transparency" shipping in the upcoming Call of Duty: Black Ops 7 by Michal Drobot from Activision Central Tech is now online: advances.realtimerendering.com/s2025/index....
hexaquo.at
It's a bit unintuitive but the light shader is primarily used for controlling how shadows work, e.g. for imlementing toon shading. I wrote a tutorial on them here: hexaquo.at/pages/unders...

If you just want your object to glow, what you want is probably the EMISSION in the fragment shader.
hexaquo.at
Karl @hexaquo.at · 10d
Really cool! Good idea to combine it with the ProtonScatter addon. Thanks for the shout-out :)
Reposted by Karl
kelvinvanhoorn.com
It sure is windy here 🍃

Rendering is based on this great tutorial (hexaquo.at/pages/grass-...) by @hexaquo.at

Placement is done with ProtonScatter (github.com/HungryProton...) by @hungryproton.bsky.social

#GodotEngine #IndieDev #shader #grass #rendering
Reposted by Karl
prbgaesthetics.bsky.social
Unused pre-rendered backgrounds from The Legend Of Zelda: Ocarina Of Time (1998)
hexaquo.at
Karl @hexaquo.at · 24d
Oh good idea! Shader debugging is pretty arcane haha, I'll try to collect and write up some of the tricks I've come up with. And it'd be a good opportunity to dive into "proper" debugging tools like RenderDoc too. Thanks for the suggestion :)
Reposted by Karl
jendrikillner.bsky.social
Graphics Programming weekly - Issue 408 - September 14th, 2025 www.jendrikillner.com/post/graphic...
hexaquo.at
Karl @hexaquo.at · 27d
Ahh thank you, I'm really happy to hear that! Let me know if there's anything unclear or something you'd want to see covered in a future post :)
Reposted by Karl
godotfest.com
Mother nature has created a beautiful place for us. The green and lush forests of the world calm our souls... until we have to render them! Let's hear Karl Bittner's virtual gardening wisdom @ #GodotFest!
Image with text, spotlighting a talk or workshop for GodotFest 2025

Plants, Polygons and Pixels: Large-Scale Vegetation Rendering
A showcase of easy and free workflows for creating 3D assets, the most important shading tricks to get them looking great, and how to use impostors for level-of-detail.
Karl Bittner
hexaquo.at

buy your ticket today: 25.godotfest.com
Reposted by Karl
estheroate.bsky.social
Every lens leaves a blur signature—a hidden fingerprint in every photo.

In our new #TPAMI paper, we show how to learn it fast (5 mins of capture!) with Lens Blur Fields ✨

With it, we can tell apart ‘identical’ phones by their optics, deblur images, and render realistic blurs.
Reposted by Karl
prbgaesthetics.bsky.social
Keepsake (2006)

Developed by Wicked Studios.
Reposted by Karl
rachelftech.bsky.social
Just posted a new #devlog sharing my process making procedural stained glass windows with dynamic lighting in #Godot!

Was cool getting to edit some engine code for the first time to enable this effect! #gamedev
I Modified Godot to Make Procedural Stained Glass
YouTube video by RachelfTech
www.youtube.com