The engineering behind Figma's vector networks (2019)
alexharri.com
alexharri.com
P.S. I have no affiliation with his work, although I did contribute 10$ to his Kickstarter Campaign back in the day.
Boris Dalstein first published his work on Vector Graphic Complexes (VGC) at SIGGRAPH in 2014 [1]
Figma introduced Vector Networks in 2016 [2]
At first glance, this thesis looks super neat! I'm excited to check it out! I don't believe I've seen it before which is surprising given the overlap.
You and Boris seem to have identified the pain-point and got to a similar place independently
i really feel like Geometric Algebra, specifically the concepts of wedge product and bivectors, could save everyone a lot of time if it was put into the curriculum. because people keep "rediscovering" it all the time and calling it different names. (here "determinant")
Gibbs/Heavysides style vectors are convenient because it works with our 3D intuition, but Grassman/Clifford style works better for the differential calculus of gradient decent, hyper planes of DBScan, computer graphics etc...
Here is a programer friendly site that may be of help for those who are interested.
The geometric product being the sum of the exterior and dot products also solves a lot of things you run into with vector and tensor analysis.
Vector networks would conceivably allow you to draw with vectors in a way that is laborious in other tools like Illustrator/Affinity because of the two-connected node limitation; allowing you to create a drawing of something like a wheel with 8 spokes that is just a single path rather than 8 paths that are layered on top of each other in other tools. Vector networks feel like the correct way to draw an object rather than the hack that designers have been relying on since the inception of vector-based art because of this limitation.
The problem is that well, vector-networks, in conjunction with the standard pen tool, are not enough to actually be useful for drawing. Figma doesn't have any newer path-drawing functionality like a curvature or 'smart-mode' pen tool which draws curves that are fully continuous and pleasant looking. These newer tools are a cornerstone of creating elegant looking shapes in modern vector design programs, but Figma just has the 25-year old pen tool. Figma also doesn't have other tools that are necessary for drawing—reflect, an isometric mode, path smoothing, blending, repeating, etc.
It's a strange positioning because vector networks are basically only useful for drawing (like drawing an object like a car, or a scene, or something). I have never used them once for UI design, which is generally based on rectangles where a vector-network isn't needed. And they would make drawing so much better, as the linked post describes. But without any additional helper tools, you just can't create drawings of any complexity on their own; so they end up not being used. Figma could be the best vector drawing tool because of everything else that makes Figma so great—it's wonderful UI, snappiness, great color handling, etc. I want Figma to be able to replace illustrator for me so damn bad. And they are so close. But they have chosen to not focus on drawing at all; so they have this amazing vector-network thing that they're always bragging about—but I doubt anyone's really using it for anything, since it is useless for drawing just by itself.
The real goldmine for artists who create vector based art would be if a tool that is actually built for drawing—like illustrator—decided to add vector-networks as a core part of their offering. I mean, at the end of the day, a vector-network is basically a bunch of paths that have a node with a shared coordinate. Doesn't seem like it would be that hard to implement, but Adobe innovates on Illustrator at snail-like speed.
I've taken some computational geometry classes, and loved the interesting theorems and which seemingly trivial problems were actually extremely difficult to prove, and which seemingly complex things were easy to prove, it's a very fun field. Still, I had never actually written the code or seen the algorithms for drawing Bézier curves, so this was great for me.
I love drawing with vector graphics, but haven't used Figma much, so seeing their vector graphs was very enlightening for me. I'll be using Figma in the future.
It feels like this article was tailor made for me, I loved it.
> This post can be thought of as an introduction to a really interesting problem space, and as a resource for people interesting in making use of some aspects of Vector Networks for future applications. I hope it succeeds in providing value to both developers being introduced to new concepts and ideas, and to designers interesting in learning more about the tool they know and love.
Back in 2018 I wanted to support vector networks in my animation editor project, but had a really hard time finding information. I didn't have a math or CS background, so just knowing what concepts to Google was somewhat of a brick wall. Googling "vector networks" didn't yield any useful results, because there weren't any resources discussing them (aside from marketing content from Figma). So in writing this post, I wanted to create the resource I needed back then.
A determinant is defined for matrices, not for vectors and from the purpse of your article I think you skipped over that part for simplicty/brevity. But really, introducing it once properly, then going to the more pragmatic definition of yours aknowledging that it is skipping some parts would be so much better for someone not knowing this field in depth. Or just not calling it determinant. And mentioning that determinants show a sort of scale factor of transformation, also for 3D, would be nice to connect to 3D rendering and such.
Since it is meant as intro/tutorial on implementation I would really point into all the right math-relates directions as a reference. Whoever wants, can read or skip those parts.
Sometimes it's just hard to write blog posts. How much is too little info, how much is too detailed. It's actually really hard stuff that we all wrestle with when writing.
So to the authors, thanks!
Macromedia/Adobe Flash was exactly this, and supported vector networks. The only big difference relevant to the article was that Flash supported quadratic beziers natively, but not cubic ones. That meant no self-overlapping curves were possible.
> In this case, that's b. We repeat the previous step and keep selecting the CCW edge until we reach the original node.
Isn’t it a?
It would be awesome if they released a tool focused on illustration instead of UI.
You don't just draw whatever random vector shape and turn it into UI.
You create UI elements and arrange them in UI related containers (grids etc) for that.
The "vector drawing" is for the decoration of the UI, not for its definition.