Three Goblin Art
No title available

izzy's playlists!
tumblr dot com

No title available
Cosimo Galluzzi
Cosmic Funnies
styofa doing anything
KIROKAZE

oozey mess

pixel skylines
Monterey Bay Aquarium
2025 on Tumblr: Trends That Defined the Year
NASA
No title available
🪼

No title available

Kaledo Art
trying on a metaphor

Love Begins

seen from Greece
seen from United States
seen from Chile

seen from United Kingdom

seen from Mexico

seen from Canada
seen from Australia

seen from United States

seen from Malaysia

seen from United States

seen from Malaysia
seen from Belarus

seen from United States
seen from United States

seen from United States
seen from United States
seen from United States
seen from United States

seen from South Africa
seen from United States
@bully-girl
I optimized the raytracing of gaussian metaballs. Here we have a negative ball followed by a positive ball (they are segments since I show them in a single dimension). The pink graphic shows the pseudo-distance field, function of the point in space (the space is the Real line here), blue is y=0, red is y=1, green is y=-1.
The first graph shows how the sphere tracing (represented by dark green circless) evolved before when I only normalized the field with the lipschitzian constant. There are a lot of steps until we reach the intersection with y=0 (the boundary with the object), so the algorithm was slow.
The second graph shows the same thing, but this time I conditioned the field to make it closer to a true distance field. There are far less steps so it’s faster. However, this conditioning only works on a group of positive balls. You can see the field is not continuous because we only work with positive balls first. When we reach a certain threshold, we fall back on the old method which account for all the balls, but is efficient enough to be used when we’re close to the object.
Not shown here, is what happens when the algorithm starts at a pretty far distance (around 30 units). Floating point errors screws up everything because exponentials and logarithms aren’t friendly at all.
This is a new set where I experiment metaballs based on Perlin noise, and more based on electrical fields. You can find out more about it on the internet.
Usually, implementations of this family of objects use the marching cubes algorithm. This is indeed quite efficient when using a rasterizer, which is the rendering model used by your graphic card and DirectX/OpenGL. It’s still possible to use it in raytracing, but it’s an approximation, and you end up with a polygon mesh or a voxel buffer. I don’t like them, so I’m left with two solutions. Either I run a volumetric raytracing with a fixed step (this is raymarching, still an approximation), or I keep using the distance field raytracing I was already using so much before (this is sphere tracing). The only problem is, these things are NOT distance fields. The electrical field is a bunch of 3D gaussian “curves” mashed together, and the object is defined when its value goes above a certain threshold. Fundamentally the same for the 3D Perlin noise.
The solution here is to find out the lipschitzian constant of the field/noise, and divide it by said constant. It becomes a pseudo-distance field where you can evaluate the field/noise value at some point, and you’re 100% sure the object is placed FURTHER than this point. It fits in the sphere tracing algorithm, but in the end, it actually works like raymarching, except the step is dynamic and never overshoots behind the object.
Last part of the set.
Up until now, all metaballs were harmonic metaballs, ie the geometry of the object was a pseudo-distance field whose value is the harmonic mean of the primitives’ distance fields. Here I experiment twice with an arithmetic mean instead. The third image is the same as before, except the light source intensity decreases quadratically.
Second part of the set. More volumetric rendering. I also introduce the Schlick material as a citizen of the uncountable amount of Physically Based Rendering methods, replacing the less realistic Phong material (I still keep it in a corner though).
Also, more CSG, more metaballs (though now, it’s more like meta-sphere/torus/tube), and metaballs in CSG (this is how I created the black glass). The smoke now works as planned (absorption works, emission works, scattering is not implemented).
Here is the first part of the second set (why is there a limit of 10 pictures ? ;_; ), showing some progress while I was piling up features and trying to figure out how to fix and tweak them. The time range for the entire set spans from March 22 to April 9. Lighting and aspect ratio had been fixed beforehand.
New things that appear here are proper transparency, volumetric rendering, normal mapping.
I was wondering where to put my raytracing gallery, and then I remembered I had a tumblr account. Brilliant. These two are actually stereoscopic images (crossed vision). The first one uses harmonic metaballs (February 25), the second one uses CSG (March 8 -- the lighting and aspect ratio are wrong, but don’t mind).
Every rendered image posted here is entirely generated with my own software unless stated otherwise. I usually program with C++, and I’m fond of Common Lisp too. I’ve also a bit less substantial experience with Java, javascript, and much less experience (or rather, I haven’t used them for a while) with SPARC and x86 ASM, TI-Basic.
Regarding the raytraced scenes, I’m using a few libraries such as Boost, GLM, libpng. I build with autotools. Writing a raytracer program is part of the curriculum at the university I’m currently in. The project already ended, but I want to continue working on it.