Issue #919
WWDC23 introduces lots of new additions to SwiftUI, notably Metal shader support with these modifiers
- colorEffect: Returns a new view that applies shader to self as a filter effect on the color of each pixel.
- layerEffect: Returns a new view that applies shader to self as a filter on the raster layer created from self.
- distortionEffect: Returns a new view that applies shader to self as a geometric distortion effect on the location of each pixel.
So you can create effects like these
Before we could also use Metal with SwiftUI by wrapping MTKView
in UIViewRepresentable
or SpriteView
with shader, so learning a bit about Metal helps a long way
Here are the resources I’ve found to be very useful
ShaderToy
Shader Toy is a shader community where people share very creative and interesting shader effects in OpenGL. OpenGL and Metal language are somewhat similar so you can read and understand the logic
Metal by example
Great book by Warren Moore, who worked on camera and photo apps at Apple. As of March 2023 you can download the book for free on this site.
Warren also has a very nice 30 days of Metal tutorials that we can follow along the basics like device, buffer and texture.
Shader Playground
A playground for shading languages.
You can compile HLSL and GLSL using fxc.exe, dxc.exe, glslangValidator.exe, spirv-cross.exe, and mali-sc.exe. You can see the compiler output and disassembly. You can chain multiple shader compilers together to transpile one language to another. You can share permalinks to shaders
The book of shaders
Gentle step-by-step guide through the abstract and complex universe of Fragment Shaders, by Patricio Gonzalez Vivo
Accelerate graphics and much more with Metal
Resource and links from Apple how to best use Metal in apps and games.
There are videos about Metal at WWDC Be sure to check out Metal documentation for code examples and tutorial links.
Bringing OpenGL Apps to Metal
Get introduced to the architecture and feature set of Metal and learn a step-by-step approach for transitioning OpenGL-based apps to the Metal API
Metal shading language specification
Whether you’re new to Metal or trying to port code from OpenGL, understanding the Metal language is essential. In this spec you’ll learn about primitive types like float, float4, float4x4
In Metal you can access vector component in a very convenient way.
Metal with SwiftUI
A Youtube playlist on how to use Metal from easy to advanced features.
Introduction to Metal Compute
Great tutorials by Eugene on how to use Metal compute and kernel shader to apply cool effects to texture