Under the Bridge

Thrash Metal

Since all you Dear Readers seemed to think our Daft Punk allusion last post was clever, let’s do another music callout this time. Not that it really takes a whole lot of clever to connect up Metal with a particularly extreme genre of such, but hey, it gives us an excuse to link to the thrashiest of thrash bands playing the Duke Nukem theme for your post-reading background music, which we just haven’t done enough of so far.

Any-ways, in case like us you’d pretty much skipped over stuff about Metal figuring it was only of interest to game engine writers, there’s some interesting stuff around that people are doing with it you might like to be aware of. In particular, this FlexMonkey post caught @NatashaTheRobot‘s eye (and if you’re not subscribed to her Swift newsletter, you should be):

Two Million Particles at 25 Frames Per Second on an iPad

Following on from my last post where I managed to calculate and render over 1,000,000 particles in realtime, I’ve done some pretty effective tweaking of the code to create an app that calculates and renders (with blur and trails) over 2,000,000 particles at around 25 frames per second on my iPad Air 2…

Not bad, not bad. Also note followup:

Swarm Chemistry: Creating an Advanced GPU Based Particle System with Metal

…With Metal, I’ve been able to create a kernel shader that can calculate and render 4,096 swarm members at 30fps – so that’s 16,777,216 particle interactions per frame or 503,316,480 particle interactions per second! Pretty impressive stuff for a tablet computer!

Code at FlexMonkey / MetalParticles, with UI described in Adding a User Interface to my Swarm Chemistry App on an iPad

So that’s pretty cool, but still a little niche. A good number of you probably run into need for parallel computation, particularly image processing, not all that rarely though, yes? Start over at Metal-dedicated site Metal By Example and check out these articles:

Introduction to Compute Programming in Metal

This post is an introduction to topics in compute (or data-parallel) programming. It is designed to be read before its companion article, Fundamentals of Image Processing. In this article, we will cover the basics of setting up the compute pipeline and executing kernel functions on large sets of data in parallel…

Fundamentals of Image Processing in Metal

In this post, we will start exploring the world of image processing with the Metal shading language. We will create a framework capable of representing chains of image filters, then write a pair of image filters that will allow us to adjust the saturation and blur of an image. The end result will be an interactive app that allows you to control the image filter parameters in real-time…

Back at FlexMonkey there’s a project FlexMonkey / MetalReactionDiffusion building off that described in these posts:

Metal Kernel Functions / Compute Shaders in Swift

Reaction Diffusion Cellular Automata with Metal Compute Shaders

Swift & Metal: 1,000 Reaction Diffusion Solver Iterations per Second

And as long as we’re mining for Metal nuggets here, if this has inspired you to go learn more about it from scratch, here’s some good intros:

Ray Wenderlich’s iOS 8 Metal Tutorial with Swift: Getting Started and Part 2: Moving to 3D

LiquidFun Tutorial with Metal and Swift – Part 1 and Part 2 and Part 3

objc.io’s Metal

An Introduction to 3D Graphics with Metal in Swift

If you want to get more into the rendering side than that, then check out all the rest of the articles at Metal By Example.


iOS GPU Programming with Swift & Metal

Particles Set Free! High Performance Particles for Swift Developers

Audio Visualisation for iOS with AudioKit & ParticleLab

Rendering Text in Metal with Signed-Distance Fields

Swifter Swift Image Processing With GPUImage

Stream Video Textures into 3D Scene with Metal

The Supercomputer In Your Pocket: Metal & Swift

Understanding PowerVR GPUs via Metal