Play with perspective in psychedelic puzzler Mirror Drop

Mirror Drop

Some say that the arms race for graphical fidelity is only good for chasing photo-realism. Mirror Drop by former ThatGameCompany developer Ian Lilley is a stunning showcase of the kinds of borderline-mystical tricks a modern GPU can pull, all while delivering a mesmerising and engaging little puzzle game. You’ve just got to roll a ball from A to B by shifting gravity, simple enough, but the spaces are a beautiful but baffling perspective-warped labyrinth of spaces within spaces. Just watch the trailer inside to see what I’m rambling on about.

While the game did make its debut on Steam recently, you can also pick it up free and devoid of DRM on its official page here, so now you’ve got no excuse not to try it.

Mechanically, some of the perspective-warping stuff that Mirror Drop does reminds me of Stereopolis, one of the Leftfield Collection games at EGX Rezzed this year, although this is much more overtly a puzzle game, wheras Stereopolis was more of a casual exploration experience with some light puzzle bits on the side.

There’s a decent amount of weird colour-shifting, reality-bending meat on Mirror Drop’s bones. The developer estimates it’ll take you a bit over three hours to get through its 25 levels. The game runs on a bespoke ray-tracing engine, so there’s not a single polygon on show as most GPUs would define them. It’s all spheres, cubes and cylinders, with nary a triangle in sight. It’s an impressive technical feat, and apparently took a full year and a half to make, which makes it all the more surprising that you can grab the whole thing for free, so if you like it, considering throwing the developer a few bucks.

You can grab Mirror Drop over on Steam for £5.79/$8 here, or free and sans-DRM here.

Thanks to Bennett ‘Getting Over it With Bennett Foddy‘ Foddy for pointing this one out on his cool little games blog.

11 Comments

  1. Ben King says:

    Yup damn it’s cool… I just finished fooling around with subnautica and the 3d navigation controls are really similar so I kinda slipped right into it. I have no understanding of how video games are made so this “ray tracing, no polygons” thing sounds like magic but it works. I’m enjoying swimming around in my 1994 glossy fractal school folder. 11 year old me is having his mind blown.

    • brucethemoose says:

      It is magic. And LOTS of work. Basically, they took everything every other game you own does, and chunked it out the window.

      Heck, it’s technically an OpenGL game, but that’s kinda a poor label since it skips the entire rasterization pipeline.

      • Vodka, Crisps, Plutonium says:

        It does look neat, but, from observer’s point of view it just looks like somebody took AVS/Milkdrop visual effects from good old Winamp and made them interactive.

    • MajorLag says:

      Actually rasterizing polygons is more complicated than raytracing in a lot of ways (people code up raytracers as a weekend project), it’s just also a whole lot faster because raytracing is incredibly computationally expensive (slow). Here’s an article by Fabien Sanglard disecting a raytracer who’s source fits on a business card: link to fabiensanglard.net

      You’ll notice the game uses a lot of reflections and spheres, because those are things raytracers excel at that polygon rasterization really doesn’t. You’ll also notice that there are very few objects in any given scene, for the opposite reason.

      None of which is to say that the game is unimpressive, indeed, it makes very effective use of the technique in ways that would be difficult to reproduce well in a traditional polygon rasterizing engine, and according to the minimum specs is performant enough to run on a GTX 460.

  2. brucethemoose says:

    This would be really interesting to benchmark. Is there some kind of deterministic test built into the game?

    • Raelalt says:

      There is a “show profile” option that shows a running display of the work being preformed in real time. There are five readout labels that show realtime and an average (in parens):
      ALL: ##.### (##.###)
      GPU: ##.### (##.###)
      CPU: ##.### (##.###)
      POLL: ##.### (##.###)
      PRSNT: ##.### (##.###)

      I don’t know what those last two represent.

  3. Ben King says:

    regarding benchmarking there’s a section in the Options>Graphics menu called “Profile” that lists some things I don’t understand: ALL, GPU, CPU, POLL, and PRSNT. Poll and Prsnt are foreign to me. It might make sense to computer savvy folks. Can someone ask Katherine Castle to explain this stuff to us or is she strictly the RPS hardware magic person?

  4. April March says:

    Free download, paid on Steam is a pretty interesting marketing ‘strategy’. I like it.

    • Premium User Badge

      alison says:

      I wish all games did this!! There are so many of those free games I read about here I’d love to try, but I never get around to it because I prefer to use Steam to stay organized. Even releasing for free on Steam isn’t the same as releasing paid on Steam, because free Steam games aren’t “sticky” in your library when you move to another machine.

      NORTH is an example where this worked. I bought it a couple years back and still think it’s one of the best games I’ve ever played. I think if you are marketing to “honorable” gamers who have at least a little bit of disposable income it’s a reasonable strategy.

  5. Premium User Badge

    alison says:

    Just a heads-up to those of you who might be scared of the spec due to all the benchmarking talk… I figured since this isn’t a triangle/polygon blitz game it might work well on my tablet. Thanks to the free download I can confirm that it does. It’s super smooth on an i7-8550U with integrated graphics. I don’t generally like puzzle games, but I’ll buy this just to support developers who build first-person games that don’t need a graphics card.

Comment on this story

HTML: Allowed code: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>