Kelvin van Hoorn's Avatar

Kelvin van Hoorn

@kelvinvanhoorn.com

Working on a platformer game at @smallleapstudio.com Experienced Technical Artist πŸ§™ MSc. of Applied Physics 🧲 Loves stylized rendering πŸ–ŒοΈ Personal website: http://kelvinvanhoorn.com #GameDev #IndieDev #Godot #Shader #VFX #TechArt #TechArtist

1,315
Followers
700
Following
274
Posts
19.10.2024
Joined
Posts Following

Latest posts by Kelvin van Hoorn @kelvinvanhoorn.com

The grass instances are created through multimeshes.

The interaction takes place in the grass blade's shader, which uses its world position to read from the 3D interaction texture. Here it just reads the value and scales down accordingly.

05.03.2026 08:57 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Video thumbnail

Portal's out! The base is free of course (including all the shaders, controller script and animations), but if you want to support me I made some presets too!

Link: binbun3d.itch.io/godot-portal...

#godot #godotengine #shader #vfx #gamedev #indiedev

04.03.2026 12:57 πŸ‘ 131 πŸ” 25 πŸ’¬ 2 πŸ“Œ 2

The heart is also generated πŸ€–

04.03.2026 07:20 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Video thumbnail

Guess I'm making portals now. Maybe I could use the stencil buffer somehow here.

#godot #godotengine #godotshaders

03.03.2026 09:48 πŸ‘ 552 πŸ” 64 πŸ’¬ 15 πŸ“Œ 3

They look good, but it might be tough to get them optimised and still looking crisp.

02.03.2026 14:30 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Are those raymarched clouds? πŸ˜Άβ€πŸŒ«οΈ

02.03.2026 14:18 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Chonky triangle rat

02.03.2026 12:46 πŸ‘ 14 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Video thumbnail

New updates for my interactive guide about tweens!!!

Very excited about this one because it explains whats the deal with "if tween: tween.kill()"!

There are now 15+ fun pages that covers almost everything you need to truly understand #Godot tweens, for free!

qaqelol.itch.io/tweens

#GameDev #Dev

01.03.2026 13:48 πŸ‘ 225 πŸ” 57 πŸ’¬ 3 πŸ“Œ 1

πŸ‘‹

28.02.2026 20:09 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Without the snapping you get issues as a pixel gets spread out over several pixels on sub-pixel movement (there's probably a name for this).

Currently only 2 channels of the texture are used. One for the transition effect and one for interactor effects (such as grass being pushed down).

28.02.2026 14:09 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Some interesting titbits. The texture in the top left is a slice of the 3D texture.

It is centred on the camera, with currently a resolution where 1 pixel corresponds to 1m in the world.

The texture/camera movement happens in jumps of 1 pixel (i.e. the movement is snapped to a 1m grid).

28.02.2026 14:09 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

You can do a lot of neat things with it, but there are also a million minute things that can go wrong with no clear errors πŸ˜…

28.02.2026 12:16 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Video thumbnail

Reworked how I keep track of points that interact with shaders (the colour transition and grass interaction) to a compute shader that writes to a 3D texture.

It can now handle a lot more points, and because it's a texture I can create trails πŸŽ‰

#ScreenshotSaturday #GameDev #IndieDev #Shader

28.02.2026 07:45 πŸ‘ 40 πŸ” 6 πŸ’¬ 4 πŸ“Œ 0
Video thumbnail

Reworked how I keep track of points that interact with shaders (the colour transition and grass interaction) to a compute shader that writes to a 3D texture.

It can now handle a lot more points, and because it's a texture I can create trails πŸŽ‰

#ScreenshotSaturday #GameDev #IndieDev #Shader

28.02.2026 07:45 πŸ‘ 40 πŸ” 6 πŸ’¬ 4 πŸ“Œ 0
Preview
a cartoon of spongebob holding a pencil Alt: Spongebob meme where he's vigorously writing only to have written "The". It looks very fancy though.

Starting on those credits during the prototype πŸ“

26.02.2026 15:21 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
The Steam Next Fest promo image.

The Steam Next Fest promo image.

πŸ“’ INDIE DEVS WHO ARE IN NEXT FEST!

If you're participating and would like your demo/store page reposted to 37K+ Bluesky followers then drop it in the replies below*

*No games that use Gen-AI please and thank you.

24.02.2026 12:09 πŸ‘ 549 πŸ” 228 πŸ’¬ 133 πŸ“Œ 19

πŸ‘‹

24.02.2026 11:10 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Video thumbnail

I'm late to the #Zelda40th anniversary posting, but here's a repost of my Ganon animation

2DFX: @theycallmesal.bsky.social

24.02.2026 05:30 πŸ‘ 590 πŸ” 141 πŸ’¬ 7 πŸ“Œ 0

When it comes to vague graphics problems, precision issues are too common πŸ˜…

23.02.2026 16:39 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Home - Unpause Wij gaan verder!

Dutch games press is getting gutted left and right, with what was literally my childhood games news magazine Power Unlimited going down just the other day. So, a bunch of good folks decided "we'll do it ourselves". If you're Dutch, go check out Unpause!

www.unpause.nl

23.02.2026 15:09 πŸ‘ 150 πŸ” 30 πŸ’¬ 8 πŸ“Œ 1
Video thumbnail

Just to be sure I checked what would happen if I only up the precision to R16, and it indeed fixes the issue πŸ‘ (or at least the value gets a lot lower).

23.02.2026 14:33 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

It most likely is that, for my purpose I will probably just subtract a flat value and clamp instead of multiplying.

23.02.2026 14:19 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Was just making some tea to clear my mind, and got me thinking the same. Probably 0.1*0.98=~0.1 πŸ™ƒ

23.02.2026 14:16 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
#[compute]
#version 450

layout(local_size_x = 8, local_size_y = 8, local_size_z = 8) in;

layout(r8, set = 0, binding = 0) uniform restrict writeonly image3D copy_texture;
layout(r8, set = 0, binding = 1) uniform restrict readonly image3D read_texture;

void main() {
    // Copy
    ivec3 uvw = ivec3(gl_GlobalInvocationID);
    vec4 result = imageLoad(read_texture, uvw);

    // Decay
    result.r *= 0.98;

    imageStore(copy_texture, ivec3(gl_GlobalInvocationID), result);
}

#[compute] #version 450 layout(local_size_x = 8, local_size_y = 8, local_size_z = 8) in; layout(r8, set = 0, binding = 0) uniform restrict writeonly image3D copy_texture; layout(r8, set = 0, binding = 1) uniform restrict readonly image3D read_texture; void main() { // Copy ivec3 uvw = ivec3(gl_GlobalInvocationID); vec4 result = imageLoad(read_texture, uvw); // Decay result.r *= 0.98; imageStore(copy_texture, ivec3(gl_GlobalInvocationID), result); }

Screenshot of the copy/decay pass.

23.02.2026 14:05 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Video thumbnail

I'm so confused right now. Doing some compute shader work with 2 passes. One draws dots and the other copies the previous frame and decays its value (so that you have trails).

The values do decay, but for some reason they don't decay all the way to 0 (or very near 0) πŸ˜΅β€πŸ’«

#ComputeShader #GodotEngine

23.02.2026 14:05 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

You would think Altman is more than 20 years old and has eaten food, but then you hear him speak and think he might need another 20 years before this "get smart" happens πŸ€”

23.02.2026 08:05 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
PancitoMerge for Nintendo Switch (E)
PancitoMerge for Nintendo Switch (E) YouTube video by FayerDev

Surprise! PancitoMerge is now available in the Nintendo Switch eShop!

We made a new trailer to announce the launch and it has a really cool original song!

Trailer: www.youtube.com/watch?v=vBwO...
Nintendo: www.nintendo.com/us/store/pro...

Please share it around!

19.02.2026 17:15 πŸ‘ 137 πŸ” 76 πŸ’¬ 9 πŸ“Œ 8
Screenshot of the main character of my game before changes.

Screenshot of the main character of my game before changes.

Paint-over of the main character of my game.

Paint-over of the main character of my game.

Screenshot of the main character of my game after changes.

Screenshot of the main character of my game after changes.

Updated the character model this week to get closer to the paint-over from last week. How well did I do?

#ScreenshotSaturday #GameDev #IndieDev #Art

21.02.2026 10:05 πŸ‘ 21 πŸ” 5 πŸ’¬ 1 πŸ“Œ 0
Screenshot of the main character of my game before changes.

Screenshot of the main character of my game before changes.

Paint-over of the main character of my game.

Paint-over of the main character of my game.

Screenshot of the main character of my game after changes.

Screenshot of the main character of my game after changes.

Updated the character model this week to get closer to the paint-over from last week. How well did I do?

#ScreenshotSaturday #GameDev #IndieDev #Art

21.02.2026 10:05 πŸ‘ 21 πŸ” 5 πŸ’¬ 1 πŸ“Œ 0
Video thumbnail

CALX is an action adventure game inspired by sci-fi art and IDM music. Please try the demo and wishlist it! #gamedev #indiedev #Game

19.02.2026 15:51 πŸ‘ 74 πŸ” 14 πŸ’¬ 3 πŸ“Œ 6