Skip to content
The resources and source code for my XiaoZhuanLan series on image processing using Apple's Metal Api.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
MetalImageProcessing 【Feature】add mask demo Jan 24, 2019
chapter_03 【Feature】add ch03 Jul 26, 2018
chapter_04
chapter_05 【Feature】add ch05 Aug 31, 2018
README.md 【Feature】add mask demo Jan 24, 2019

README.md

Metal-Practice

这是我的小专栏 iOS 图像处理 对应的源码。欢迎订阅,配合教程看效果更佳~

顺手给个星星哦~

Metal,启程

从 2014 年,Apple 正式推出 Metal 到现在,这个 Metal 系列教程,酝酿了很久,却迟迟没有进展。

直到 WWDC 2018,Apple 宣布 iOS 12 将弃用 OpenGL / CL,我想,这或许是个机会。

Apps built using OpenGL ES will continue to run in iOS 12, but Open GL ES is deprecated in iOS 12. Games and graphics-intensive apps that previously used OpenGL ES should now adopt Metal.

这个系列会回顾整理之前学习的内容,有序输出。算是对自己的一个交代,同时也希望,能帮助到那些想要学习 Metal 却不知道怎么下手的朋友。

那么,什么是 Metal

Render advanced 3D graphics and perform data-parallel computations using the GPU.

总结来说,Metal 能让你尽可能的发挥 GPU 强大的渲染、运算的能力。

这里,我不做过多的阐述,如果你对图像处理,游戏编程感兴趣,又或者你只是认可这项技术,相信它是未来,值得投资学习。那么,我想这个系列不会让你失望。

这个系列的文章,是教程、实践,而不是文档

我会尽可能,在实现功能的过程中,穿插介绍各个知识点。而不是一股脑的全部输出。

不然可能看了四五篇,发现自己还是什么都做不了,还是不懂之前学到的具体是什么。

然后,就不了了之了。

Metal 系列的实战教程,会循序渐进,穿插详细介绍各个用到的 Metal 对象。

由于 Metal(iOS 8 + A7),MetalKit(iOS 9 + A7)的软/硬件限制,以及不同读者的需求,之后的配套 Demo,会同时包含 iOS+Swift 和 macOS+ObjC 两种,文章以 iOS+Swift 进行演示。并且尽可能不用 MetalKit,功能都自己实现(避免一些实现细节被屏蔽了,以及降低系统版本限制)。当然,也会有专门的文章,介绍 MetalKit 相关。

另外,每节 Demo 都有 start / end 两份代码,建议阅读完后,自己根据 start 基础工程,完成本节新的内容。该系列 Demo 主要是为了学习 Metal,所以一些语法特性,代码/文件结构,容错,封装等,不会去细究。

每篇文章争取控制在 15 分钟的阅读量,细分知识点,便于随时阅读,学习。

另外,之后的实战,会侧重于图像处理,比如滤镜,画笔,马赛克,增高,相机,AR 贴图等。开发过程中,也会结合系统的其他框架,比如 Core Image、ARKit、Core ML、Vision 等,做一些好玩的事情。

PS: 订阅后的朋友,可以加我微信:wxidlongze,拉你进群。交流,扯淡,学习资源分享~ 最后,源码在文末~


目录

基础概念:

一。Metal 概述

Metal 是什么,Metal 能做什么,为什么要用 Metal。

二。Metal 框架一览

Metal 进行图像处理的整体框架。宏观介绍渲染管线。

基础实践:

三。清屏

最最最最简单的一个基础工程。介绍整体的显示渲染流程。

四。绘制一个三角形

堪称图形界的 Hello World。会较为完整的过一遍渲染管线。

涉及的内容包括:渲染管线的配置,着色器的编写,顶点数据的提交,图元的绘制

麻雀虽小,五脏俱全。

img

五。Buffer & Texture

实现基础图像的渲染,即在屏幕上,显示一张我们指定的图片。主要关心非基础图元的绘制,Metal 里面的数据、资源的管理方式,图像解码的一些基础知识。介绍 MTLBuffer 以及 MTLTexture 相关内容。

img

六。GPUImage 3 浅析、基础框架搭建

浅析一下 GPUImage 3 的设计,然后基于此,剥离出一些代码,形成基础框架,实现视图封装,也为之后的效果处理提供支持。

GPUImage

七。颜色滤镜

介绍颜色滤镜常见的两种实现方式:shaderlookup table,并实现饱和度、亮度滤镜,以及常见的阿宝色滤镜。

同时会分析对应算法的原理。

八。风格化滤镜(上)

上篇我们介绍了简单的颜色滤镜,即独立像素点变换,按照一定规律,修改当前像素点的色值。每个像素点都是独立的,不相互依赖。相对的,其他几类,我们可以统一归类为风格化滤镜,这类滤镜有一个显著的特点:当前点的最终色值,需要依赖其他位置点的色值,来共同决定。 这一篇中,会介绍这么两个滤镜 Zoom Blur 和 Toon 的具体实现。

以及系统提供的景深信息等。

img

img

九。风格化滤镜(下)

介绍 Toon 效果的具体实现。 介绍下更复杂的滤镜,比如之前很火的风格转换,以及借助 Core ML 模型的一些方式。

img

十。增高 & MTLHeap

MTLHeap:An abstract memory pool from which you can create resources. 就是一块预先分配好的内存区域,然后这块区域用来干什么,完全是由开发者来控制的,可以随意复用。 这次,我们同样是实现一个新的效果,增高。并分析使用 MTLHeap 带来的优势。

十一。抠图换背景 & Mask

Mask 的使用场景,以及抠图换背景的具体实现。

To be continued ~


具体源码,可以在我的 Github 上找到:Metal-Practice,顺手给个星星哦~

You can’t perform that action at this time.