rototiller
generative-art
rototiller | generative-art | |
---|---|---|
1 | 3 | |
6 | 41 | |
- | - | |
9.4 | 2.5 | |
24 days ago | 8 months ago | |
C | Rust | |
GNU General Public License v3.0 only | - |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
rototiller
-
What I've learned about flow fields so far
I implemented a something similar[0] a while back in rototiller[1], there's a short low-res youtube clip here[2].
It was a fun little hack, I didn't realize this is a thing. I was just messing around with an idea of pushing particles through a cube of tri-linearly interpolated direction vectors, without simulating any actual physics like mass/friction/fluids or anything like that.
Something which surprised me was during development I just populated the cube of vectors with randomized vectors, fully expecting I'd have to do something more intentional and clever before it was interesting to watch. But the emergent structure of the flow paths even with the pseudo-random vectors was surprisingly interesting and I just left it at that, with the addition of a second randomized field the direction vectors would be interpolated between in a ping-pong manner. When one field is dominant, it re-randomized the other, resulting in a continuously-looking evolving field...
[0] https://github.com/vcaputo/rototiller/blob/master/src/module...
[1] https://github.com/vcaputo/rototiller/tree/master
[2] https://www.youtube.com/watch?v=-q2Yq2fHedw
generative-art
-
What I've learned about flow fields so far
Thanks! Some splits are randomly generated by traversing the line and each point has a small chance (5% or so) to create a split and change color. I've tried other techniques as well where lines change color by which region of the the canvas they are in etc.
I even wrote a small UI using Rust and egui to render the drawings in real-time just to play around with that specific part. It looks like this https://imgur.com/a/Zfp1ls3 and is open source https://github.com/damoonrashidi/generative-art/tree/develop...
-
Roast my Rust
Repo can be found here, and some places in particular that I'm assuming are bad are my pointmap implementation where I couldn't really figure out how top make it take a single generic for the struct that is then used for the new function as well (the is totally superfluous but I couldn't really figure out how to make it work without it). Also not sure if this map a value from range A to range B is supposed to look like this, because it felt very verbose.
-
OpenRNDR or Processing?
I tried openrndr when I started learning kotlin and really liked it. The APIs were pretty close to what I was doing myself before I discovered it. Granted it felt like I abused the framework a bit since all I wanted to get out of it was a jpg or SVG. But ye, could highly recommend, great product. Here's a link to the stuff I made with it https://github.com/damoonrashidi/generative-art but it's all "learning kotlin" stuff so code quality wise it's a bit lacking I'd guess, and it's probably not very idiomatic.
What are some alternatives?
SoftwareRenderer - Software rendering engine with PBR. Built from scratch on C++.
rusty_art - Creative coding and optical illusions in Rust.
software-renderer - Software rasterizer in C
libpd-rs - Safe rust abstractions over libpd.
wrend - A framework-agnostic Rust/WASM + WebGL2 Rendering library, compatible with calling from both Rust and JavaScript on the web.
wgshadertoy - A WGSL playground inspired by Shadertoy.
astro-nannou-starter - A minimal boilerplate for Astro / Vite with the Nannou creative framework (Rust → WASM). Supports multiple sketches + hot-reload.
rustmas - Christmas lights controller capable of displaying 3D animations
generative-art - My personal project for generative art.