869 private links

Rotors are a rotation representation generalized from Quaternions and Complex numbers that works in any numbers of dimensions.

The article starts by pointing out that rotation is defined as a scalar property on a plane. The canonical representation of a plane is a bivector representing the outer product of two vectors. The bivector is in principle a fundamental concept just like the vector. Similar to how a vector represents a point with a scalar length, a bivector represents a plane with a scalar area (signed). The area of a bivector a∧b is |a||b|sin(angle). The reason we also see the term |a||b|sin(angle) from cross product is because cross product actually gives rise to a bivector instead a vector! Historically we've been confusing bivectors with vectors because they have the same representation in 3D.

The inner and outer product completes a geometric product of two vectors: ab=a⋅b+a∧b. Reflection R(a,v) is defined elegantly using geometric product: R(a,v)=-ava. Then it's noted that two reflections is equivalent to a rotation by twice the angle between a and b: R(a,R(b,v))=ba v ab. The "ab" here is known as a rotor. Applying a rotor on both sides of a vector rotates this vector in the plane a∧b by twice the angle between a and b. Quaternion is just a representation of Rotors in 3d: i:=y∧z, j:=z∧x, k:=k∧y. The scalar part (w in w+xi+yj+zk) corresponds to the inner product.

Keywords: bivector, geometric product, rotor, quaternion, rotation

TIL signed distance field. First I need to explain the concept of alpha testing. Alpha testing is a rendering technique for textures. It dictates that when rendering a texture, perform a test on the alpha value of that pixel against a threshold. Completely throw out or keep the data depending on the comparison result. Typically the alpha value for each pixel is set to the actual transparency of the pixel. This signed distance field method calculates the signed distance of each pixel to the nearest color pixels. The signed instance field is then saved in alpha channel in the texture. All the remaining alpha-testing mechanism is the same. It's claimed that this technique improves the rendering quality of low-resolution textures drastically.

Read the original paper: https://steamcdn-a.akamaihd.net/apps/valve/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf

This article talks about PGA (projective geometric algebra), an alternative approach to do geometric transformation that is not using matrix.

A detailed description on the hardware architecture of Game Boy console.

TIL A* with fixed iteration depth.

A really nice article on how to synchronize game state over a network with latency and high packet loss. The protocol described in the last is quite clever:

Instead of detecting packet loss after the fact and resending lost packets, we redundantly include all inputs in each UDP packet until we know for sure the other side has received them

By the way, the website seems to have a lot of worth reading articles on game development, especially networking related ones: https://gafferongames.com/

An interesting approach towards procedurely generated level/room/dungeon: specify various constraints and use a solver to place the objects on the tiles.

An article about Ray casting, WASM4 (a game console emulator that runs WASM "cartridges"), binary size reduction, and generally how to interface with WASM in Rust.

Townscaper is probably the most interesting procedure generation "game" I played. The buliding are generated for an irregular grid, and yet everything fit together organically. It was always a mystery to me how it actually works. This article explained some of the mechanisms.

It's a hard decision for Amethyst and I am glad to see the transition.

I am bookmarking this article especially for it containing a list of good libraries and reading recommendation towards game development in Rust.

The series of article that describes why is multiplayer game so difficult to get right and the solutions to it. Smooth multiplayer experience requires designing both the architecture and the game experience in ways that make it feel like playing locally. The series is about the tricks to implement it.

After reading it, I can longer take smooth multiplayer gameplay as granted. Every such game felt like a masterpiece to me.

A terse and informative little book on how to write a ray tracer and a rasterizer. It piqued my interest to write a toy rasterizer for fun as a weekend project.

The article explains how to design a game loop that runs update on a fixed rate regardless of computer specs. Also how to make the game appear more smooth when rendered.

Joel Burgess on Twitter: "Among Skyrim players, you'll occasionally see this tip: if you see a wild fox, follow it and you'll be led to treasure. Sometime shortly after shipping, we saw this going around online, and an informal investigation started. Who made foxes do this?!"

Sound effects and melodies offered in permissive licenses.