t3kt / raytk

Raymarching shader toolkit for TouchDesigner
https://raytk.net
Other
238 stars 15 forks source link

SOP-based SDF #657

Open t3kt opened 2 years ago

t3kt commented 2 years ago

Why this is hard: "Geometry" in RayTK is defined using SDFs which are mathematical functions that find the distance to the closest part of shape from any point in space. Regular SOP geometry is defined by a collection of triangles that are connected to form surfaces.

To determine how far a point is from a surface defined by a mesh is a complex problem. There is some research around doing it with machine learning. The bunnySdf is based on a shader created using that process.

Options: Houdini is able to do this sort of conversion from a mesh to a grid of points with distance values, but it definitely is not a realtime operation.

There's an example of a possible voxel-based implementation here using a 3-pass rendered that gets a distance map for each axis. https://github.com/DBraun/TouchDesigner_Shared/tree/master/Starters/boids

Both of these approaches only work when you limit the space to a specific grid of points. Using that for an arbitrarily positioned SDF has limitations.

An attempted adaptation of DBraun's approach is in progress but needs a lot more work.

t3kt commented 5 months ago

Other potential approaches: