Posts

3D Interaction

Image
8 minute read. UX (user experience) design is hard - for those not in the industry, it's basically a slightly broader term for UI (user interface) or GUI (graphical user interface), which is to say how we as engineers let you the user interact with our software. I'll preface this by saying I have no formal training in UX, but then again I don't have formal training in sculpture or software engineering either, and I like to think that hasn't stopped me. 2D UX is plenty tricky, but 3D is a real bear. I've ended up designing and building a fair amount of 3D UX simply because there was no one else (a common deficiency of large software companies is a dearth of UX experts). I'm pretty proud of what I've built and I'll describe it in the hopes that it's copied, because I have spent a lot of time being frustrated by awful 3D interfaces. What makes 3D so hard? The biggest issue is that the interface (screen, mouse, touchscreen) is all 2D. Worse yet, it

Reframing Capitalism

Image
5 minute read. I was raised by back-to-the-land hippies, so I grew up with a pretty negative view of capitalism, but also with no clear idea of what the word meant. My parents were distrusting of rich people; a bias I still carry with me even as I'm becoming one. They considered debt to be evil; they never even had a mortgage, having bought five acres in the 1970s for $10,000 which they borrowed from my five-year-old brother's inheritance. They paid him back, though I have no idea if interest was involved. So anathema was debt that I honestly believed I couldn't go to college without a free-ride, since they had no money to send me. I managed to get enough scholarships from writing a dizzying array of application essays, but upon arrival I realized my stress was probably misplaced given everyone else had taken out student loans.  One of my closet friends in college had the opposite upbringing, where his family not only discussed investment at the dinner table, but played Mon

Smoothing Triangle Meshes

Image
4 minute read. My Manifold library operates on triangle meshes because they are a lowest common denominator representation of a solid that all others, from NURBS to SDFs, can be converted into. However, it can take a huge number of flat facets to adequately approximate the smooth curves of these other representations, particularly in manufacturing where graphics cheats like Phong shading are not available. Therefore, it would be convenient to be able to smoothly interpolate a triangle mesh so that fewer triangles could adequately approximate the desired curved surface. I have devised such a method which I will describe here, but first, a little background. When I was working on the 3MF spec (3D manufacturing format), we were trying to avoid the pitfalls of AMF (additive manufacturing format), one of which was curved triangles. The idea was that faceted meshes could be refined to a smooth shape by interpolating each triangle's corner vertices and normal vectors; the problem w

Solid Geometry Representations

Image
7 minute read. I recently published my Manifold library , which does operations on solids, specifically those represented by triangle meshes. But there are many ways to represent a solid object in a computer, so why did I choose this one? I thought it might be useful to give an overview of some of the popular data structures and what they are well- and poorly-suited to. Of course this is also my opinion and I have limited experience with many of these, so please comment if you know something I don't.  Categorization is always a bit tricky and arbitrary, but I feel like the highest-level split is between boundary representations (B-Reps) and signed distance functions (SDFs). I'll sub-categorize below each of these. Signed Distance Functions (SDFs) Though less common, the SDF is in some ways the simpler idea. It explicitly represents a solid: in its simplest form it is a function that takes any point in 3D space and returns if that point is inside or outside of the solid. To make

Manifold Performance

Image
4 minute read. The primary purpose of my Manifold library is topologically-robust results, as I've already discussed . My secondary purpose is to make it fast by leveraging the power of parallel processing. There is still significant work that can be done to improve performance, but I'm proud enough of its current state to show some benchmark comparisons.  How to benchmark? It would be nice to show some kind of big-O trend, but different shapes have wildly different results: if we take n to be the number of triangles in each input shape, the number of intersections could be anywhere from zero to n 2 , which will directly affect the processing time. The Menger sponge is an example that scales close to  n 2 , but that is not common. If you think of the progression of  n  as a refinement function, subdividing the triangles into smaller ones, then you would generally expect to have O( n 1/2 ) intersections since the surface is 2-dimensional while the intersection curve is 1-di

Introducing my Manifold Library

Image
3 minute read. Manifold is my computational geometry library - the beginnings of a CAD kernel of sorts. Its purpose is fast, reliable, topologically-sound operations on manifold triangle meshes. Reliability is really the key: I started this library because I was amazed at how unreliable the geometry kernels I had experienced (even high-end CAD) were in generating manifold - basically solid - output. The lack of reliability stems from the fact that Euclidean geometry is based on real numbers, but computers work in finite precision with rounding errors. This means it is entirely possible for a computer to find two points to be on the same side of a line, but their midpoint to be on the opposite side: Euclidean geometry does not hold.  For this reason, many computational geometry libraries are proven correct for "general position" input, which means geometry where nothing is within rounding error of coincident, co-linear, or co-planar. This might be okay if the geometry were

Hometown Conspiracies

Image
The cabin I was born in. I grew up in the sticks, on a tiny island in the Puget Sound. My parents moved there in the '70s as back-to-the-land hippies and built the log cabin my mom still lives in (I wrote about my late father here ). I had it easy with power and running water by the time I was born; my siblings had ten years without. But there are some funny things about the country, as illustrated all too well by an article entirely too close to home: The True Story of the Antifa Invasion of Forks, Washington . It's a long read, but I highly recommend it; while I don't know any of the people referenced, I feel like I could have. It's a good portrait of a world far outside the urban bubble.  Now, my town was actually closer to Port Townsend, a tourist metropolis of about 8,000 people that served as my bright, shining lights. Port Townsend probably has more artists per capita than anywhere in the state and has attracted hippies like my parents for decades, so it's qu