soypat / gsdf

3D/2D CAD design package written in Go. GPU accelerated.
BSD 3-Clause "New" or "Revised" License
14 stars 0 forks source link
3d-printing autocad boolean-operations cad finite-element-method go golang gpu implicit-geometry implicit-surfaces mesh sdf signed-distance-field signed-distance-functions solid stl

gsdf

go.dev reference Go Report Card codecov Go sourcegraph

gsdf is a CAD 3D design library for Go that uses SDFs for shape definition. Rendering can be done on GPU or CPU for visualization or 3D printing file outputs. Quick jump to usage: bolt example.

All images and shapes in readme were generated using this library.

circle bolt-example

Requirements

Features

Package layout/structure

Examples

Find examples under examples directory. Run on GPU with: -gpu flag.

Most 3D examples output two files:

Output and timings for

npt-flange - 9× GPU speedup

This was converted from the original sdf library example.

GPU rendering in 1 second. 0.4M triangles

time go run ./examples/npt-flange -resdiv 400 -gpu
using GPU       ᵍᵒᵗᵗᵃ ᵍᵒ ᶠᵃˢᵗ
compute invocation size  1024
instantiating evaluation SDF took 115.587024ms
wrote nptflange.glsl in 97.829µs
evaluated SDF 46148621 times and rendered 423852 triangles in 1.103100086s with 95.7 percent evaluations omitted
wrote nptflange.stl in 710.038498ms
finished npt-flange example
go run ./examples/npt-flange -resdiv 400 -gpu  1,01s user 1,10s system 95% cpu 2,217 total

CPU rendering in 9 seconds. 0.4M triangles

time go run ./examples/npt-flange -resdiv 400 
using CPU
instantiating evaluation SDF took 14.173µs
wrote nptflange.glsl in 73.155µs
evaluated SDF 46147934 times and rendered 423852 triangles in 8.482344469s with 95.7 percent evaluations omitted
wrote nptflange.stl in 703.931017ms
finished npt-flange example
go run ./examples/npt-flange -resdiv 400  9,01s user 0,82s system 103% cpu 9,481 total

npt-flange-example

fibonacci-showerhead - 40× GPU speedup

Note that the amount of triangles is very similar to the NPT flange example, but the speedup is much more notable due to the complexity of the part.

GPU rendering in 0.87 seconds. 0.3M triangles

time go run ./examples/fibonacci-showerhead -resdiv 350 -gpu
using GPU       ᵍᵒᵗᵗᵃ ᵍᵒ ᶠᵃˢᵗ
compute invocation size  1024
instantiating evaluation SDF took 108.241558ms
wrote showerhead.glsl in 581.351µs
evaluated SDF 14646305 times and rendered 309872 triangles in 768.731027ms with 89.08 percent evaluations omitted
wrote showerhead.stl in 509.470328ms
showerhead example done
go run ./examples/fibonacci-showerhead -resdiv 350 -gpu  0,87s user 0,69s system 94% cpu 1,646 total

CPU rendering in 36 seconds. 0.3M triangles

time go run ./examples/fibonacci-showerhead -resdiv 350 
using CPU
instantiating evaluation SDF took 27.757µs
wrote showerhead.glsl in 507.155µs
evaluated SDF 14645989 times and rendered 309872 triangles in 35.794768353s with 89.08 percent evaluations omitted
wrote showerhead.stl in 499.13903ms
SDF caching omitted 21.62 percent of 14645989 SDF evaluations
showerhead example done
go run ./examples/fibonacci-showerhead -resdiv 350  36,16s user 0,76s system 100% cpu 36,591 total

fibonacci-showerhead

More examples

iso-screw array-triangles geb-book-cover