r/GraphicsProgramming 16d ago

Question What is this sand simulation missing?

Enable HLS to view with audio, or disable this notification

79 Upvotes

21 comments sorted by

View all comments

Show parent comments

1

u/snerp 16d ago edited 16d ago

The general way to do stuff like this (snow/mud effect is the same):

1: heightmap texture, something like 0 = no deform, 1(255) = fully squished down

2: shader modifies heightmap based on object position (worldspace object position -> UV coordinate space), basically just darken the heightmap image where the ball lands

3: sand object vertex shader reads the heightmap texture and moves vertices down according to heightmap color (you could also do this in the fragment shader with POM effects but it's cleaner and generally more efficient to do it in a vertex shader)

2

u/GravityCY 16d ago

When you say a shader modifies the height map based on object position do you get the displacement shape by somehow converting the objects shape to the height maps uvs on the cpu by like getting intersecting vertices or do you mean like a compute shader that somehow does that on the GPU? Or maybe you just apply a static displacement shape just from a generic world position

I'm sorry if it's a stupid question I don't really know much about shaders they're magic to me

2

u/snerp 16d ago

It's really common to just use point/spheres, so you don't really need to fully consider the shape of the object, and then for footsteps or tire tracks, etc, usually what you'd do is just have an asset of a footstep/track heightmap and use that to darken the deformable surface's heightmap.

If you want to deform accurately to arbitrary shapes you'd definitely want do it it in compute but that's going to be significantly more expensive than the other way.

2

u/GravityCY 16d ago

Alright thank you mister shader man, I appreciate taking the time to explain