Archive for the ‘4D Toys’ Category

4D Toys Version 1.6: Wireframe Projections

Tuesday, December 15th, 2020

4D Toys Update (iOS) (Steam VR + Mouse & Keyboard).

New button: Wireframe Projections.

When enabled, the edges of objects are projected onto the current slice.

That means that no matter where the slice is, the edges of the objects will always be visible.

It’s an “old school” way of displaying 4D objects which you may have seen before!

Try it in the 2D Levels!

I had fun going back to every level to check it out. It lets you see the movement of the objects even if you are not in the same slice.

As with the previous update, there is a new page at the right-most end of the level select hub. After you play the relevant level there the button will be unlocked.

The 2D/3D version gives an idea of what exactly these lines are showing:

Note: for simplicity each 4D toys update is now called 1.x, where x is the number of the update.

4D Toys Version 1.5: Anti-Gravity, Export Mesh for 3D Printing, 4D Accelerometer

Wednesday, August 19th, 2020

Here is another 4D Toys Update (iOS) (Steam VR + Mouse & Keyboard).

It adds three buttons:

  • Export Mesh: Exports a 3D mesh of what is currently visible on screen.

    These meshes can then be 3D printed, etc… (Unfortunately 4D printing is not yet available in this universe :P).

    Find the meshes in your Documents folder. (On iOS you can access it by connecting your iDevice to your computer and using Finder).

    Note that Shapeways’ algorithm for filling the inside of meshes sadly fails on some of the coolest meshes like the Star Polychora from the last update, since they are filled with lots of polygons on the inside (btw it’s fun to poke your head inside these meshes in VR!).
  • Anti-Gravity: Creates an anti-gravity field that makes objects float. Besides the obvious coolness, this allows to see rotations that are unrestricted from the constraints of the collision with the ground.

  • 4D Accelerometer (iOS only): Swaps the forward/backward direction of the accelerometer with the 4th dimension.

    That is, tilting your device toward/away from you will result in a force along the 4th dimension instead.

A new page of shapes has been added, with one new level for each button. Visiting each of these levels unlocks the corresponding buttons. Also, all special buttons are now gathered into a new menu button. This lays the groundwork for easily adding new features in future updates!

Btw, the SIGGRAPH conference started and my talk on nD Rigid Body Dynamics is now online (I will post it publicly in a few weeks). The Q&A session is on Wed Aug 26 at 9:00AM PDT!

SIGGRAPH 2020 Technical Paper: N-Dimensional Rigid Body Dynamics

Thursday, May 7th, 2020

Excited to announce that my technical paper “N-Dimensional Rigid Body Dynamics” was accepted to SIGGRAPH 2020! Very proud to present research developed for 4D Toys & Miegakure at such a prestigious conference.

Here is the link to the paper and the abstract:

I present a formulation for Rigid Body Dynamics that is independent of the dimension of the space. I describe the state and equations of motion of rigid bodies using geometric algebra. Using collision detection algorithms extended to nD I resolve collisions and contact between bodies. My implementation is 4D, but the techniques described here apply to any number of dimensions. I display these four-dimensional rigid bodies by taking a three-dimensional slice through them. I allow the user to manipulate these bodies in real-time.

Btw I believe it is basically unheard of to have work from an indie game presented in the SIGGRAPH technical papers track?

The paper is full of really fun and beautiful math (obviously Geometric Algebra based, see my recent article) that makes me happy. One reviewer called the work “whimsical,” and they’re not wrong, ahah.

Most of this work (including writing the paper) is from ~2012, but I added a section on the (4D) Dzhanibekov effect at the suggestion of the reviewers. Many thanks to them for helping me greatly improve the paper.

Interactive Article/Video: Let’s remove Quaternions from every 3D Engine (An Interactive Introduction to Rotors from Geometric Algebra)

Monday, February 3rd, 2020

I have not yet posted on this blog that last year I released an article/video with interactive diagrams on Geometric Algebra, specifically Rotors. (I also recently updated it). Here is the introduction:

To represent 3D rotations graphics programmers use Quaternions. However, Quaternions are taught at face value. We just accept their odd multiplication tables and other arcane definitions and use them as black boxes that rotate vectors in the ways we want. Why does $\mathbf{i}^2=\mathbf{j}^2=\mathbf{k}^2=-1$ and $\mathbf{i} \mathbf{j} = \mathbf{k}$? Why do we take a vector and upgrade it to an “imaginary” vector in order to transform it, like $\mathbf{q} (x\mathbf{i} + y\mathbf{j} + z \mathbf{k}) \mathbf{q}^{*}$? Who cares as long as it rotates vectors the right way, right?

Personally, I have always found it important to actually understand the things I am using. I remember learning about Cross Products and Quaternions and being confused about why they worked this way, but nobody talked about it. Later on I learned about Geometric Algebra and suddenly I could see that the questions I had were legitimate, and everything became so much clearer.

In Geometric Algebra there is a way to represent rotations called a Rotor that generalizes Quaternions (in 3D) and Complex Numbers (in 2D) and even works in any number of dimensions.

3D Rotors are in a sense the true form of quaternions, or in other words Quaternions are an obfuscated version of Rotors. They are equivalent in that they have the same number of components, their API is the same, they are as efficient, they are good for interpolation and avoiding gimbal lock, etc… in fact, they are isomorphic, so it is possible to do some math to turn a rotor into a quaternion, but doing so makes them less general and less intuitive (and loses extra capabilites).

But instead of defining Quaternions out of nowhere and trying to explain how they work retroactively, it is possible to explain Rotors almost entirely from scratch. This obviously takes more time, but I find it is very much worth it because it makes them much easier to understand!

Earth-Centric planetary motion

For example, Quaternions are introduced as this mysterious four-dimensional object, but why introduce a fourth dimension of space to visualize a 3D concept? By contrast 3D Rotors do not require the use of a fourth dimension of space in order to be visualized.

Trying to visualize quaternions as operating in 4D just to explain 3D rotations is a bit like trying to understand planetary motion from an earth-centric perspective i.e. overly complex because you are looking at it from the wrong viewpoint.

It would be great if we could start phasing out the use and teaching of Quaternions and replace them with Rotors. The change is simple and the code remains almost the same, but the understanding grows a lot.

As a side note, Geometric Algebra contains more than just Rotors, and is a very useful tool to have in one’s toolbox. This article also serves as an introduction to it.

And here are some quotes about it:

The clearest explanation of 3D geometric algebra within 15 minutes that I’ve seen so far —BrokenSymmetry
I am sold. While I can understand quaternions to an extent, this way of thinking is a much more intuitive and elegant approach. —Jack Rasksilver
This sets a high standard for educational material, and is a shining example of how we can improve education with today’s technologies. —Sebastien Pierre
When I was in college, I asked one of my math professors why the cross product of two vectors results in a perpendicular vector whose magnitude is equal to the area of the parallelogram formed by the two vectors. Like..what? Why? And what about 2D? They blew me off, and that was a big part of why I stopped taking math in college. […] Anyway, I had pretty much given up on ever truly understanding the whole jumble of seemingly unrelated types that are cross products. But then I saw this: And…wow. Just 15 minutes and a lot more than just cross products suddenly make a lot more sense. —Mason Remaley
I’m a pure math dude at heart, even if I don’t get to do it much any more. Two years ago, my wife asked me, “If you had to get a math equation tattooed on your body, what would it be?” I answered, “i^2 = j^2 = k^2 = ijk = -1”. I felt a brief flush of anger when I saw this headline. This is an extraordinarily good article that should be read by pretty much anyone doing graphics programming. —pflats

I wrote most of in 2011/2012, but didn’t release it because I was not satisfied with part of it. But I thought it was time to let go and release it anyway. I actually think it is hurting the advancement of science that people are still mainly using quaternions instead of Geometric Algebra, so holding on to it was not good.

So last fall/summer I cleaned up some of the diagrams and made a 15 minute long video that follows the article exactly. I never made a video this long, and it was quite exhausting. But I thought it would be really cool to make an article that is perfectly synced to a video, so you can either read it or watch it, and the article serves as an exact table of contents for the video.

I think I came across Geometric Algebra from attending SIGGRAPH a long time ago? Specifically this book: Geometric Algebra for Computer Science by Dorst et al. Later on I found this great book: Linear and Geometric Algebra by Macdonald

Geometric Algebra soon came in handy for Miegakure, specifically to define the 4D equivalent to Quaternions, which I posted about on this blog. Later on it became the backbone of 4D Toys.

Learning about Geometric Algebra was also great because it answered so many questions I had when learning linear algebra, the cross product, quaternions, etc… I basically wrote this article for my past self as a college student.

I recently rewrote the introduction to add more detail about the properties of Rotors and how they relate to quaternions. Even though the content went into detail, it should now be clear what Rotors are from only reading the introduction. I can already see from reading recent comments that it was worth it.

I deliberately picked a cheeky click-bait title…

Something else that might be of interest is the history of Geometric Algebra, so I recently added a heavily summarized version to the end of the article. I think looking at the history makes it clearer how the quaternion viewpoint stayed in people’s minds for longer than necessary…