10 ms·
Look, ma, no matrices
- ebolyen 3y agoThe interpolation of animations at the bottom is really neat, but I can't help but wish the models were a little less _active_ on the rest of the page. Math is plenty hard without a small elephant cheerleader.
- orangesite 3y agoAu contraire my friend, if it were not for the elephantine encouragement I would not have made it to the end of the page! <3
- xeonmc 3y agoThe come-hither looks were just a little bit distracting, though.
- blt 3y agoif the author is reading this: please define the acronym PGA when first using it!
- at_compile_time 3y agoProjective geometric algebra for anyone wondering. A null basis vector is added to the basis vectors of the space you're working in. This allows the algebra to represent geometric objects that do not pass through the origin.
- epistasis 3y agoI've been working through a bunch of Geometric Algebra on the web and YouTube lectures in recent weeks. Though I guessed Projective Geometric Algebra, I still wasn't certain as it's the first time I can recall seeing the acronym!
- lupire 3y agoThis called "affine transformation" in linear algebra language. (Linear algebra is stretches and rotations. Affine (affinity?) adds translations) https://people.computing.clemson.edu/~dhouse/courses/401/notes/affines-matrices.pdf https://people.computing.clemson.edu/~dhouse/courses/401/not... In 2 dimensions: Rotation = multiplying by an imaginary unit. Stretches = multiplying by a real number Translation = adding a complex number. In higher dimensions, the analogy to complex numbers breaks down.
- xeonmc 3y agoIt is not affine transforms per se but rather the expansion into homogeneous coordinates that enables translation by treating it as if it's a shear that leaves the reciprocal dimension untouched. > Rotation = multiplying by an imaginary unit. This is also not quite right. Rotation is multiplying by a complex number with a magnitude of 1 (or perhaps you meant to say "raising a number to the power of i"?)
- Joker_vD 3y agoBut... aren't the traditional 4x4 transformation matrices already use projective space, essentially?
- guhcampos 3y agoYes! The use of FPGA for "Fast PGA" was particularly confusing.
- enkimute 3y agodone. mea maxima culpa.
- corysama 3y agoIt's fun that there have been many approaches to interpolating rotations (geometric algebra, quaternions, even full-matrix interpolation [1]). But, after hand-optimizing the code, the final code ends up mostly the same for all approaches. The difference is in your understanding of the rules and capabilities. From what little I know, GA seems like the most consistent and capable approach. It's unfamiliar. It's a bit much to take in getting started. But, people who clear that hurdle love it. Alternatively, everybody uses quaternions while complaining they don't understand them and need a whole book to visualize them. (Visualizing Quaternions by Andrew J. Hanson, Steve Cunningham) [1]https://www.gamedev.net/tutorials/programming/math-and-physics/do-we-really-need-quaternions-r1199/ https://www.gamedev.net/tutorials/programming/math-and-physi...
- lupire 3y agoNaive Lie Theory is a great book, and the first chapter teaches quaternions. https://www.goodreads.com/en/book/show/4419538 https://www.goodreads.com/en/book/show/4419538
- dustingetz 3y agoalso Physics from Symmetry spends 1/3 the book on lie theory passing through quaternions https://www.amazon.com/Physics-Symmetry-Undergraduate-Lecture-Notes/dp/3319666304/ https://www.amazon.com/Physics-Symmetry-Undergraduate-Lectur...
- epistasis 3y agoI'm not a mathematician, and don't have a ton of use for geometry in my work, but was learning GA for fun, and have similarly tried to learn quaternions in the past. GA is fun, quarternions are not fun. I think I understand GA, but I knew I did not understand quaternions after working through lectures and problems. Now that I know some GA, I kind of feel like a I know quaternions, finally.
- segfaultbuserr 3y ago> I think I understand GA, but I knew I did not understand quaternions after working through lectures and problems. Most physicists stopped using them at the end of 19th century for the same reason... > More than a third part of a century ago, in the library of an ancient town, a youth might have been seen tasting the sweets of knowledge to see how he liked them. He was of somewhat unprepossessing appearance, carrying on his brow the heavy scowl that the "mostly-fools" consider to mark a scoundrel. In his father's house were not many books, so it was like a journey into strange lands to go book-tasting. Some books were poison; theology and metaphysics in particular they were shut up with a bang. But scientific works were better; there was some sense in seeking the laws of God by observation and experiment, and by reasoning founded thereon. Some very big books bearing stupendous names, such as Newton, Laplace, and so on, attracted his attention. On examination, he concluded that he could understand them if he tried, though the limited capacity of his head made their study undesirable. > But what was Quaternions? An extraordinary name! Three books; two very big volumes called Elements, and a smaller fat one called Lectures. What could quaternions be? He took those books home and tried to find out. He succeeded after some trouble, but found some of the properties of vectors professedly proved were wholly incomprehensible. How could the square of a vector be negative? And Hamilton was so positive about it. After the deepest research, the youth gave it up, and returned the books. He then died, and was never seen again. He had begun the study of Quaternions too soon. - Oliver Heaviside, Electromagnetic Theory
- zoogeny 3y agoOne of my favorite math/graphics YouTube creators Freya Holmér did an excellent intro to Geometric Algebra not that long ago [1]. If you have any interest in 3d graphics (especially but no limited to splines/Bezier curves) then be sure to check out all of their videos. I personally have always struggled with linear algebra and I tend to find these Clifford Algebra approaches much more intuitive. 1.https://www.youtube.com/watch?v=htYh-Tq7ZBI&ab_channel=FreyaHolm%C3%A9r https://www.youtube.com/watch?v=htYh-Tq7ZBI&ab_channel=Freya...
- karmakaze 3y agoThis is who I thought this was going to be. I enjoyed this along with the Splines & Beziers ones. Such great presentation, never feels rushed but gets to the point.
- aaronblohowiak 3y agothe splines yt video (https://www.youtube.com/watch?v=jvPPXbo87ds https://www.youtube.com/watch?v=jvPPXbo87ds) is (IMHO) one of the best educational videos on a programming topic, full stop.
- plagiarist 3y agoI knew the name looked familiar. Splines was a fantastic video.
- Quekid5 3y agoI'd like to point out that the YT comments have some good (weird for YT, I know!) clarifications and questions about bits where she did go a bit fast or skip over things, e.g. the non-commutativity of products (in general) and such. Great video.
- simpaticoder 3y agoWhat a wonderful talk, thanks. It reminded me of https://enkimute.github.io/ganja.js/ https://enkimute.github.io/ganja.js/ which is actually a library by enkimute, the OP! (It's quite a remarkable library too, by being a single file, no-build script that supports N dimensional algebras along with render support.)
- rhelz 3y agoGeometric Algebra was a complete mystery to me until I finally realized: it is just polynomial multiplication, but with some quantities for which the order of multiplication matters, and which have a weird multiplication table: i*i = 1, i*j = -j*i. That's it. Most intros present geometric product of two vectors: (x1*i + y1*j) * (x2*i + y2*j) as some deep mysterious thing, but its just the same FOIL polynomial multiplication you learned in freshman algebra: (x1*i + y1*i)(x2*i+y2*j) = x1*x2*i*i + x1*y2*i*j + y1*x2*j*i + y1*y2*j*j = (x1*x2 + y1*y2) + (x1*y2 - y2*x1)*i*j The quantity in the first parenthesis, above, is the our old familiar dot product. The quantity in the second parenthesis is our old friend the cross product, but expressed in a new dimension whose basis is i*j, and which--unlike the cross product--generalizes to any number of dimensions. In GA its called the "wedge product". Once you "get" that, you find that doing things like deriving rotation formulas, etc, become easy, because you can apply all the skills you developed in algebra to solving geometric problems.
- skhunted 3y agoYour comment is interesting to me. A few days ago someone asked why math classes don’t the how and why and rather tend to just present the formulas for the operations and tell people to compute. Here you are focusing on what the operations do rather than on why they work. It’s an interesting contrast and one that teachers of mathematics have to balance. The two questions, How does it work? Why does it work? Can’t always both be answered well in a given course.
- rhelz 3y ago// focusing on what the operations do rather than why // YMMV, of course, but in general, I always found it easier to understand the why once I understood the what and the how, rather than the other way around.
- skhunted 3y agoYes. Usually, though, when someone complains about the teaching of mathematics they say we focus too much on how to do the operations and not enough on why they work the way they do. I agree it is much easier to understand why after knowing how.
- spenczar5 3y agoAre these algorithms efficient even given GPUs? I have the vague impression that GPUs are well-tuned for matrix work. Are those advantages lost when using Geometric Algebra formulations, so you actually dont come out ahead? This is uninformed speculation, go ahead and correct me!
- buildartefact 3y agoThis is exactly what the article is about. TLDR they can be roughly equivalent
- rhelz 3y agoWhen you are programming, you have to figure out: 1. What quantity you want to calculate, and 2. What the most efficient way to calculate it is. PGA (once you spend the--alas--not insubstantial overhead to understand it!) is a really good way of doing #1. Its virtually always a good idea to first try out the simplest and easiest to code up implementation anyways. And what you get from using PGA to do #1 will certainly be good enough for you to prototype out the rest of your program enough to be able to benchmark it and find out where the real bottlenecks are. Happily, in most cases it will also either be the fastest way to calculate it, or close enough to not be the bottleneck. And if is a bottleneck, it gives you a deep understanding of the problem you are trying to solve--which, IMHO, is a good idea to have before you just start trying to shave off cycles in hopes of getting it fast enough.
- hamish_todd 3y agoIt's an extremely common misconception that because GPUs have matrix matrix and matrix vector products in the standard, that means GPU companies must be accelerating them. In fact, because it is SIMD across the shader cores already, you can't necessarily do this. Some GPUs do, some don't
- nox101 3y agoGA seems great! But ... > and modern formats like Khronos' glTF use quaternions for all their rotation needs. Fantastic for animations, and generally considered worth the cost of the unavoidable conversions to and from matrices. Quaternions are bad for animation. Animate a clock going from 9am on Monday to 6pm on Friday. Euler angles this might be expressed as from 0 degrees to 1620 degrees. With Quaternions, nope. This can't be expressed in gLTF. It can be in Unreal an Unity, both of which default to use Eular for animation. In gLTF you're required to bake it into smaller turns, all less than 180 degrees.
- enkimute 3y agoFor specifying animations, you should work in the quaternion lie algebra, not in the group as you suggest. There you can represent 1620 degrees without any problem. Furthermore, in the quaternion Lie algebra (pure imaginary quaternions), and only in that space, you can take an arbitrary rotation key, multiply all 3 of its values with 10 and get 10 times that rotation without change in axis. If you rotate around just one axis, the Lie algebra feels just like Euler angles .. in fact its exactly the same thing, but if you rotate around more than one .. it keeps working intuitively and usably - Euler angles absolutely do not.
- deleted 3y ago[deleted]
- hn8305823 3y agoAlso, the use case for quaternions depends on how many times you will be applying the same rotation. If it's a few or dozens of times then maybe not the most efficient. If it's million or billions then you are going to want to use quaternions. This is mainly due to the cost of converting to and from the rotation vector.
- xeonmc 3y agoi.e. keep it in vector form if you're combining them a lot, convert to polar form when you want to work with angles
- contravariant 3y agoTo be honest I've never really liked how GA results in all kinds of mixed elements if you're not careful what you multiply with what. Requiring up to 2^n terms for what was an n-dimensional space seems a bit hard to deal with. It seems like it should be better able to deal with geometry (i.e. inner products), but I've never really found a good argument why you wouldn't just use the wedge product and the hodge star (or musical isomorphisms). Even something 'magic' like turning a bivector "u^v" into a rotation in that plane "e^(u^v)t" is essentially just using the musical isomorphism to turn the 2-form u^v into a linear automorphism, allowing you to make sense of "e^(u^v)t" as a matrix exponential. Another example that often gets mentioned is the ability to turn maxwell's equations into a single equation, but since the use of differential forms already makes it possible to summarize it into two equations which hold for very different reasons I never understood the utility of combining them into one equation.
- rhelz 3y ago// Requiring up to 2^n terms for what was an n-dimensional space// Sometimes, the economy is illusory, e.g. normal vectors transform differently than position vectors do. Sure, you can, if you want, use the same data structure to represent both of them, but you'll still have to have some way of keeping track what kind of vector it is holding, as well as sprinkle special cases throughout your code to handle each one differently. GA, takes the bull by the horns by having vectors use one basis (i,j,k) for vectors, and another basis (j*k, k*i, i*j) for the other. // never understood the utility of combining them into one equation // This is a good example of how having a higher-dimensional space actually gives you better economy of storage than a lower dimensional space does: one equation is better than two, or four :-) And electric fields are different from magnetic fields in quite the same way as vectors are different from bivectors. You can either "special case" them by using a different equation for Electric and Magnetic fields, or you can treat them uniformly with one.
- chombier 3y agoA somewhat simpler way of keeping track in the case of normals is to use row vectors for, well, covectors, which is what normals are anyways. What GA brings is the ability to express linear combinations of scalars, vectors, bi-vectors ... Whether this is actually useful/desirable in practice is another story though.
- pasabagi 3y agoWhat a great article! Not an area of special interest of mine, but the piece was a joy to read.
- enkimute 3y agoThank you, appreciate that!
- lawrenceyan 3y agoThis gives me PTSD
- DrDroop 3y agoWhat! Why?
- lawrenceyan 3y agoWorking on point transformations. Not that bad, but still a bit of a pain.
- turtledragonfly 3y agoFor people interested in this topic, here's a good set of slides going over Grassman/Clifford/Geometric algebra concepts: http://www.terathon.com/gdc12_lengyel.pdf http://www.terathon.com/gdc12_lengyel.pdf And another good site: https://mattferraro.dev/posts/geometric-algebra https://mattferraro.dev/posts/geometric-algebra
- enkimute 3y agodon't foget the fantastic Sudgy 'A swift introduction to projective geometric algebra' : https://www.youtube.com/watch?v=0i3ocLhbxJ4 https://www.youtube.com/watch?v=0i3ocLhbxJ4 and ofcourse the go-to reference https://bivector.net https://bivector.net or join 1000+ profs, researchers and enthusiasts on the bivector discord here https://discord.gg/vGY6pPk https://discord.gg/vGY6pPk
- e4m2 3y agoThe author of that talk, Eric Lengyel, also wrote the book "Foundations of Game Engine Development, Volume 1: Mathematics". Its 4th chapter focuses on the same topics.
- nimish 3y agoSomeone ought to do a full Lie representation theory explanation of graphics operations.
- spintin 3y agoThis is hair splitting at the end of progress: The fact that 3D skeletal animation is still using 4x4 matrices in the GPU means the math developed for this around Half-Life 1 (on CPU?) is still the bleeding edge. 1998 -> 2024 = 26 years! In 1000 years 3D animation will still be the same. End of story.
- __xor_eax_eax 3y agoWas that first paragraph even english? Man thats thick
- andai 3y agoThis article goes over my head, but the title reminded me of my experiments writing simple 3D renderers. After several failed attempts to learn linear algebra, I had the shower thought that a 3D rotation is just three 2D ones, and that I already know how to do those. Within an hour or so I had a wireframe 3D renderer, perspective and all! I encourage everyone to try it.