This uses a fairly simple trick: the textures are animated, while the
model is static and has a number of rotated copies of the parts that are
seen to move (four copies of the blades, eight copies of the top/bottom
and their edges). The opaque parts of the textures then decide which of
those faces' copies are visible in each frame.