15 ms·
Hilariously fast volume computation with the divergence theorem (2018)
- FartyMcFarter 20d ago> (No, there won’t be jokes.) I must be missing something here, inside joke or something in the title?
- Agentlien 20d agoI assume it's because the title contains "hilariously" and the author felt it necessary to state the content wasn't meant as humorous.
- amelius 15d agoIt's a pity they use the nabla symbol for vector difference. This symbol usually has a different meaning in the context of vector calculus.
- arn3n 20d agoI love these kinds of posts. Simple, fast, AI-free, and I learn something new.
- alex_suzuki 20d ago(2018)
- IAmBroom 20d agoOMG, that absolute dummy didn't know something that a human did in 2018! Are they not reading the entire internet every morning, when they wake up???
- alex_suzuki 20d agoI was merely pointing out that the post was published in 2018 so AI-free is kind of implied.
- N_Lens 20d agoI'll accept any kind of jocularity in the current climate!
- eterevsky 20d agoIsn't the same as just taking every triangle from the mesh, calculating the volume of a prism-like polytope between it and its projection on one the planes, and then taking it with a + sign if its projection is oriented in one direction, and with a - sign if it's oriented in another? This kind of formula works based on the basic geometry.
- gloveone 20d agoYes, the algorithm and its derivations are elementary and rather obvious for anyone decent at undergraduate level mathematics. But still, I am glad to see more people enjoying math!
- xigoi 20d agoI wonder if this could be reversed to give an intuitive “proof” of the divergence theorem.
- meindnoch 20d agoThe divergence theorem can be intuitively summarized in one sentence: "what comes out is whatever went in, plus whatever was produced inside"
- seanhunter 20d agoA very intuitive presentation of the divergence theorem is here https://youtu.be/TORt20_HjMY?is=uoJ8-2ToCSwW9rVF https://youtu.be/TORt20_HjMY?is=uoJ8-2ToCSwW9rVF
- elikoga 20d agoMy belly says the naive formula is summing the triangle pyramid volumes to the origin with sign in orientation. It looks like that's what they derived. Which is a generalization of 2d polygon area calculated by summing triangle areas for each edge, I was taught this in a math camp where we calculated map polygon areas on gis data. I remember math knowledge being hard to get pre AI era but I didn't remember it being this hard. No idea what the author means by "which are equivalent to rendering the mesh and then sampling the render".
- less_less 20d ago> My belly says the naive formula is summing the triangle pyramid volumes to the origin with sign in orientation. Yeah, that would also work but it's a slightly slower formula, sum(det(v1,v2,v3))/6. This one is summing sort of prism+pyramid shapes made by projecting each triangle to the yz plane.
- deleted 20d ago[deleted]
- chrisjj 20d agoI'd say what author means is the standard solution - which is equivalent to his on triangles but is on pixels ... except there's nothing naive about it and by using GPU parallelism and depth hardware it is lower cost on dense meshes.
- gigatexal 20d agoDid they also work on the graphics stack for the Asahi project?
- unkeen 20d agoSadly, there is no way to find out, f.ex. by a quick Google search.
- StilesCrisis 20d agoYup!
- gigatexal 20d agoI used to watch their vtuber videos on YouTube!
- gurkwart 20d agoThere's a really elegant solution using Geometric Algebra, that to this day is one of the most satisfying things I've ever learnt. Steven de Keninck outlines it in his 2019 Siggraph talk [1]. [1] https://youtu.be/tX4H_ctggYo?t=4795 https://youtu.be/tX4H_ctggYo?t=4795
- meindnoch 20d agoDon't really need vector calculus for this. Geometric intuition is sufficient. It is simply the summation of signed volumes of triangular columns/prisms parallel to the X axis. Visualization: https://jsfiddle.net/L7r1hwca/ https://jsfiddle.net/L7r1hwca/ I don't know what they could possibly mean by the naïve algorithms with rendering and sampling (???).
- nyeah 20d agoYeah, agreed. But words are cheap. It's one thing to say we don't need vector calculus, and another to develop that claim through the actual vector calculus, step by step.
- physicsguy 20d agoThis is one of those when you go "Huh, this is amazing!" or "Huh, I thought this trick was really well known!" depending on your background ;) Here's a similar impl from 1980 written in Fortran that also computes other properties like centroid: https://calgo.acm.org/550.zip https://calgo.acm.org/550.zip Algorithm 550: Solid Polyhedron Measures A. M. Messner and G. Q. Taylor ACM Trans. Math. Softw., 6(1), Mar 1980, pp.121--130 Keywords: polyhedron, graphics, numerical integration Language: Fortran 66/77; Shar Index: Z; Gams: P File size: 19.1 KB; But Messner published it first in: A. M. Messner, "A surface Integral method for computer calculation of mass properties", Paper No. 852, 29TH ANNUAL CONF. OF THE SOCIETY OF AERONAUTICAL WEIGHT ENGINEERS, Washington, D.C., May 1970. I think
- jacobolus 20d agoThis is one variant of the 3-d analog of the "shoelace formula" for area: https://en.wikipedia.org/wiki/Shoelace_formula#Generalization https://en.wikipedia.org/wiki/Shoelace_formula#Generalizatio... The 2-d version is from the 18th century. I'd expect the 3-d version was probably known in the 19th century, but I haven't searched for a reference.
- amluto 20d agoThis technique should be straightforwardly adaptable to compute arbitrary moments, not just the centroid. If you have a scalar-valued function that you can conveniently express as the divergence of any closed-form function, you can integrate it like this. And you can generalize beyond scalar-valued functions and beyond Euclidean space using the generalized Stokes’ theorem. You can even do this in real life: if you want to integrate the electric current density through a surface (that is, measure the total current crossing the surface), you can integrate its anti-curl (is that a word?) around the boundary of that surface, which is what a current transformer or a clamp-on current meter does. I bet there’s a hydraulic or pneumatic analog as well, but a nontrivial example isn’t immediately coming to mind.
- ted_dunning 20d agoThe hydraulic analog is that you can weigh a volume of water (which is the same as computing its volume) by adding up the forces on the surface surrounding the water. This looks like it requires a dot product with the normal vector for each triangle, but you can expand it into the same form as the article.
- flerovium114 20d ago[dead]
- srean 20d agoOn the other hand, if you want to compute the area of a polygon that have vertices at lattice points, you can count the number of interior points I, the number of boundary points B. Then the area A is A = I + B/2 - 1 This is Pick's theorem https://en.wikipedia.org/wiki/Pick's_theorem https://en.wikipedia.org/wiki/Pick's_theorem one of my favorite results. It does not generalize as nicely to higher dimensions unfortunately. If like the post you want the volume of a polyhedron you can use the three dimensional analogue of the shoelace formula (essentially equivalent). Let Va, Vb and Vc be the vertices of a triangle ∆ of a triangulation of the surface. You need to name the vertices in a consistent order/orientation wrt the origin. Then the volume V is the sum over all such triangles of the signed volumes V_∆ = 1/6 Va ^ Vb ^ Vc. That's the beauty of signed areas and volumes, determinants and exterior algebra. To understand why this is so there's this beautiful short video https://youtu.be/Sv7VseMsOQc https://youtu.be/Sv7VseMsOQc
- sebastianmestre 20d agoFrom a computational standpoint, Pick's theorem seems more useful to find the number of interior points via I = 2 (A - B + 1) Where area would be calculated using the sum of signed areas of triangles.
- srean 20d agoIndeed. One of my off by one errors is a stupid hacky Monte Carlo intution for Picks theorem. I count the number of points inside. Now about the boundary points I must assign some fractional weight because they are not fully inside. What's a stupid fraction I can use? Well, half seems about right. Voila, A = I + B/2.
- bob1029 20d ago> For a ballpark number, if volume needs to be calculated every frame in a high-performance 60 frames per second application, without the aid of a GPU, only using the CPU capabilities of a $35 Raspberry Pi, around 30 million triangles could be measured every frame. If knowing the volume of a mesh is important, we could pre-calculate it (even using this exact technique) and store it as an attribute on the object. Lots of things in game dev that are modeled as an integral over three+ dimensions tend to work better as a baked setup rather than real time. We kickstarted an entire AI industry trying to chase real time lighting.
- Isofarro 20d agoI'm sorry, English is my first language. What does "Hilariously" mean in this context? Or is there a maths specific meaning/interpretation?
- hallgrim 20d agoThe author is just expressing amusement at the surprising simplicity of the resulting algorithm
- deleted 20d ago[deleted]
- MarkusQ 20d agoIt's an intensifier. As a native English speaker you should probably be aware that we eventually sand-blast the semantics off of words until they all becomes synonyms for "good", "bad", "very", or "um". (This is similar to what French does to phonemes, but unrelated.)
- Joker_vD 20d agoAdverb hilariously (comparative more hilariously, superlative most hilariously) 1. In a hilarious manner; so as to amuse greatly. The author was greatly amused how quick the resulting algorithm works.
- ahaferburg 20d agoThe emphasis here is on the mesh being simple and closed. Make sure to validate these preconditions before relying on the output. Similar formulas exist for moments, to compute the inertia matrix for a rigid body.
- MarkusQ 20d agoClosed is clearly important. Why does it have to be simple? It looks like it should handle disjoint components, interior holes, etc. just fine?
- phkahler 20d ago>> Similar formulas exist for moments, to compute the inertia matrix for a rigid body. Fun fact. The inertia for any rigid body can be represented by 4 point masses forming a tetrahedron. If you diagonalize the inertia matrix, the coordinates of the 4 point masses can be (x, y, -z) (-x,-y,-z) (x, -y, z) (-x, y, z) where x,y,z are easy to calculate (I wrote this all down ages ago). You can also represent any point on the rigid body by its barycentric coordinates relative to those points. I believe an impulse can be applied, by finding the barycentric coordinates of the point its applied and using those coordinates to distribute the impulse to the 4 masses. This is all really cool with one huge exception. The 4 points become coplanar for large flat objects, which means the z-height is really small for a piece of sheet metal for example.
- lern_too_spel 20d agoYou might be interested in the shoelace formula and its generalization to n dimensions. https://en.wikipedia.org/wiki/Shoelace_formula https://en.wikipedia.org/wiki/Shoelace_formula
- lern_too_spel 20d agoFor this particular case of 3 dimensions, I found Newson, H. B. “On the Volume of a Polyhedron.” Annals of Mathematics, vol. 1, no. 1/4, 1899, pp. 108–10. JSTOR, https://doi.org/10.2307/1967277 https://doi.org/10.2307/1967277
- OscarCunningham 20d agoIt's also robust to errors in the mesh. Like if the triangles don't quite join up it still gives a reasonable answer. https://mathstodon.xyz/@keenancrane/109388206643166726 https://mathstodon.xyz/@keenancrane/109388206643166726
- xbar 20d agoWhat a fun post! My vector calculus is rusty so it was a pleasant little derivation. I liked getting to the end an find A.R. as the author. It made me appreciate this part of the journey that eventually got us some Asahi Linux graphics.
- hingler36 20d agoThis appears to be a retelling of another well-known process for volume computation: sum together the signed volumes of the tetraheda formed by each face with the origin (or any other fixed point WLOG). Very cool derivation though!
- bmenrigh 20d agoAt first I was going to say this is just the tetrahedra trick dressed up in slightly different clothes, and some sense it is, but there is a nice cancellation in the y and z coordinates which leads to less calculation in practice.