From 77960d810ed7cab6f40ca21d4e8466d90d7539ea Mon Sep 17 00:00:00 2001 From: Alex Nichol Date: Tue, 9 Jul 2024 07:50:52 -0400 Subject: [PATCH] shadow_text: full example --- examples/experiments/shadow_text/README.md | 15 +++ examples/experiments/shadow_text/main.go | 113 ++++++++++++++++-- .../shadow_text/paths/hello.json.gz | Bin 0 -> 1058 bytes .../{path.json.gz => paths/nug.json.gz} | Bin .../experiments/shadow_text/rendering.png | Bin 0 -> 38534 bytes .../shadow_text/rendering_direct.png | Bin 0 -> 19904 bytes 6 files changed, 121 insertions(+), 7 deletions(-) create mode 100644 examples/experiments/shadow_text/README.md create mode 100644 examples/experiments/shadow_text/paths/hello.json.gz rename examples/experiments/shadow_text/{path.json.gz => paths/nug.json.gz} (100%) create mode 100644 examples/experiments/shadow_text/rendering.png create mode 100644 examples/experiments/shadow_text/rendering_direct.png diff --git a/examples/experiments/shadow_text/README.md b/examples/experiments/shadow_text/README.md new file mode 100644 index 0000000..84a88af --- /dev/null +++ b/examples/experiments/shadow_text/README.md @@ -0,0 +1,15 @@ +# shadow_text + +Create a 3D shape whose shadow is a pre-specified 2D path. + +You can create a new path using [draw_path.html](draw_path.html). Extract the JSON and gzip it, then specify `-path path/to/file.json.gz`. + +# Renderings + +Here's the model from the light's point of view + +![Rendering of the model from the light position](rendering_direct.png) + +Here's the model from random points of view: + +![Rendering of the model from other directions](rendering.png) diff --git a/examples/experiments/shadow_text/main.go b/examples/experiments/shadow_text/main.go index f2c0a9e..306da11 100644 --- a/examples/experiments/shadow_text/main.go +++ b/examples/experiments/shadow_text/main.go @@ -3,22 +3,121 @@ package main import ( "compress/gzip" "encoding/json" + "flag" "io" + "math" "os" "github.com/unixpickle/essentials" "github.com/unixpickle/model3d/model2d" + "github.com/unixpickle/model3d/model3d" + "github.com/unixpickle/model3d/numerical" + "github.com/unixpickle/model3d/render3d" + "github.com/unixpickle/model3d/toolbox3d" ) +type Args struct { + Path string `default:"paths/hello.json.gz"` + LightX float64 `default:"-0.2"` + LightY float64 `default:"-2.0"` + LightZ float64 `default:"2.0"` + + Resolution float64 `default:"0.01"` + + MidDist float64 `default:"2.2"` + DistRange float64 `default:"0.2"` + + Segments int `default:"500"` + Thickness float64 `default:"0.03"` +} + func main() { - path := LoadPath() + var args Args + toolbox3d.AddFlags(&args, nil) + flag.Parse() + + curve := PathCurve(&args) + lightPos := model3d.XYZ(args.LightX, args.LightY, args.LightZ) + + distFunc := DistanceFunc(&args) + pointFunc := func(t float64) model3d.Coord3D { + xy := curve.Eval(t) + projPoint := model3d.XZ(xy.X, xy.Y+1.0) + ray := projPoint.Sub(lightPos).Normalize() + return ray.Scale(distFunc(t)).Add(lightPos) + } + + var segments []model3d.Segment + for i := 0; i < args.Segments; i++ { + t1 := float64(i) / float64(args.Segments) + t2 := float64(i+1) / float64(args.Segments) + segments = append(segments, model3d.NewSegment(pointFunc(t1), pointFunc(t2))) + } + + const backY = 0.5 + + attachToBack := func(t float64) { + p0 := pointFunc(t) + dir := p0.Sub(lightPos) + scale := (backY - lightPos.Y) / dir.Y + p1 := lightPos.Add(dir.Scale(scale)) + segments = append(segments, model3d.NewSegment(p0, p1)) + } + attachToBack(0) + attachToBack(1) + + maxYPoint, _ := (&numerical.LineSearch{ + Stops: 50, + Recursions: 2, + }).Maximize(0, 1, func(t float64) float64 { + return curve.Eval(t).Y + }) + attachToBack(maxYPoint) + + solid := model3d.JoinedSolid{ + toolbox3d.LineJoin(args.Thickness, segments...), + // Back + model3d.NewRect( + model3d.XYZ(-1.0, backY, 0.0), + model3d.XYZ(1.0, backY+0.1, 1.5), + ), + // Bottom + model3d.NewRect( + model3d.XYZ(-1.0, -0.5, 0.0), + model3d.XYZ(1.0, backY, 0.1), + ), + } + + mesh := model3d.DualContour(solid, args.Resolution, true, false) + mesh = mesh.EliminateCoplanar(1e-5) + + render3d.SaveRandomGrid("rendering.png", mesh, 3, 3, 300, nil) + render3d.SaveRendering("rendering_direct.png", mesh, lightPos, 512, 512, nil) + + // This looks less cool than I expected. + // render3d.SaveRotatingGIF("rendering.gif", mesh, model3d.Z(1).ProjectOut(lightPos).Normalize(), lightPos.Scale(-1), 512, 50, 10.0, nil) + + mesh.SaveGroupedSTL("shadow_text.stl") +} + +func DistanceFunc(a *Args) func(t float64) float64 { + return func(t float64) float64 { + return a.MidDist + a.DistRange*math.Sin(math.Sin(t*3+0.3)*math.Pi*4) + } +} + +func PathCurve(a *Args) model2d.Curve { + path := LoadPath(a) path = path.Decimate(100) - path.SmoothSq(20) - path.SavePathSVG("path.svg") + path.SmoothSq(10) + path = path.SubdividePath(3) + path = path.Scale(1 / (path.Max().X - path.Min().X)) + path = path.Translate(path.Min().Mid(path.Max()).Scale(-1)) + return model2d.NewSegmentCurveMesh(path) } -func LoadPath() *model2d.Mesh { - f, err := os.Open("path.json.gz") +func LoadPath(a *Args) *model2d.Mesh { + f, err := os.Open(a.Path) essentials.Must(err) defer f.Close() r, err := gzip.NewReader(f) @@ -36,8 +135,8 @@ func LoadPath() *model2d.Mesh { for i, point := range path { if i > 0 { res.Add(&model2d.Segment{ - model2d.XY(path[i-1].X, path[i-1].Y), - model2d.XY(point.X, point.Y), + model2d.XY(path[i-1].X, -path[i-1].Y), + model2d.XY(point.X, -point.Y), }) } } diff --git a/examples/experiments/shadow_text/paths/hello.json.gz b/examples/experiments/shadow_text/paths/hello.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..82e6775ebe975cf73a167f91febd2324f499e22a GIT binary patch literal 1058 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

_0puH!UjQ|B%;mIB`G@jcT! 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 DAjC7% literal 0 HcmV?d00001 diff --git a/examples/experiments/shadow_text/rendering_direct.png b/examples/experiments/shadow_text/rendering_direct.png new file mode 100644 index 0000000000000000000000000000000000000000..373c5b1bd974d7d2622389020c4ffcabb7dc60cb GIT binary patch literal 19904 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 literal 0 HcmV?d00001