Metal Petal框架

简介: 介绍的Metal Petal能力与最佳使用

前言

Metal Petal是一个基于Metal的图像处理框架,旨在通过易于使用的编程界面为静态图像和视频提供实时处理。

核心组件

MetalPetal 的一些核心概念与 Apple Core Image 框架中的概念非常相似。

  • MTIContext,对比CIContext

提供渲染MTIImage的评估上下文。它还存储了大量缓存和状态信息,因此尽可能重用上下文更高效。

  • MTIImage,对比CIImage

MTIImage对象是要处理或生成的图像的表示。它确实直接表示图像位图数据,相反,它拥有生成图像或更准确地说是aMTLTexture所需的所有信息。它由两部分组成,一个是如何生成纹理的配方(MTIImagePromise)和其他信息,例如上下文如何缓存图像(cachePolicy),以及如何采样纹理(samplerDescriptor)。

  • MTIFilter,对比CIFilter

MTIFilter表示图像处理效果和控制该效果的任何参数。它产生一个MTIImage对象作为输出。要使用过滤器,您可以创建一个过滤器对象,设置其输入图像和参数,然后访问其输出图像。通常,过滤器类拥有静态内核(MTIKernel),当您访问其outputImage属性时,它会要求具有输入图像和参数的内核生成输出MTIImage

  • MTIKernel

MTIKernel表示图像处理例程。MTIKernel负责为过滤器创建相应的渲染或计算管道状态,以及为aMTIImage构建MTIImagePromise

优化

MetalPetal做了很多优化,它会自动缓存函数、内核状态、采样器状态等。

它利用可编程混合、无内存渲染目标、资源堆和金属性能着色器等金属功能来实现快速高效的渲染。在macOS上,MetalPetal还可以利用苹果芯片的TBDR架构。

在渲染之前,MetalPetal可以查看您的图像渲染图,并计算出进行渲染所需的最小中间纹理数量,从而节省内存、能量和时间。

如果可以串联多个“食谱”,以消除冗余的渲染传递,它也可以重新组织图像渲染图。(MTIContext.isRenderGraphOptimizationEnabled

并发性考虑因素

MTIImage对象是不可变的,这意味着它们可以在线程之间安全地共享。

然而,MTIFilter对象是可变的,因此无法在线程之间安全共享。

MTIContext包含许多状态和缓存。MTIContext对象有一个线程安全机制,使得在线程之间共享MTIContext对象是安全的。

比 Core Image 的优势

不同:

Core Image可以使用GPU或者CPU渲染。

MetalPetal主要专注于使用GPU进行渲染。

优势:

  • 完全可定制的顶点和片段函数。
  • MRT(多个渲染目标)支持。
  • 一般来说,性能更好。(需要详细的基准数据)

内置过滤器

  • Color Matrix - 颜色矩阵

  • Color Lookup - 颜色查找

    Uses an color lookup table to remap the colors in an image.

    使用颜色查找表重新映射图像中的颜色。

  • Opacity - 不透明度

  • Exposure - 曝光

  • Saturation - 饱和

  • Brightness - 亮度

  • Contrast - 对比

  • Color Invert - 颜色反转

  • Vibrance - 活力

    Adjusts the saturation of an image while keeping pleasing skin tones.调整图像的饱和度,同时保持令人愉悦的肤色。

  • RGB Tone Curve - RGB音调曲线

  • Blend Modes - 混合模式

    • Normal - 标准
    • Multiply - 相乘
    • Overlay - 覆盖
    • Screen - 拍摄
    • Hard Light - 硬光
    • Soft Light - 柔和的光线
    • Darken - 变暗
    • Lighten - 减轻
    • Color Dodge - 彩色道奇
    • Add (Linear Dodge) - 添加(线性道奇)
    • Color Burn - 颜色燃烧
    • Linear Burn - 线性燃烧
    • Lighter Color - 较浅的颜色
    • Darker Color - 深色
    • Vivid Light - 生动的光
    • Linear Light - 线性光
    • Pin Light - 针灯
    • Hard Mix - 硬混合
    • Difference - 区别
    • Exclusion - 排斥
    • Subtract - 减去
    • Divide - 分裂
    • Hue - 顺化
    • Saturation - 饱和
    • Color - 颜色
    • Luminosity - 亮度
    • ColorLookup512x512 - 颜色查找512x512
    • Custom Blend Mode - 自定义混合模式
  • Blend with Mask - 与遮罩混合

  • Transform - 转变

  • Crop - 裁剪

  • Pixellate - 像素

  • Multilayer Composite - 多层复合材料

  • MPS Convolution - MPS卷积

  • MPS Gaussian Blur - MPS高斯模糊

  • MPS Definition - MPS定义

  • MPS Sobel - MPS Sobel

  • MPS Unsharp Mask - MPS不明显的遮罩

  • MPS Box Blur - MPS盒子模糊

  • High Pass Skin Smoothing - 高通皮肤平滑

  • CLAHE (Contrast-Limited Adaptive Histogram Equalization) - CLAHE(对比度限制自适应直方图均衡)

  • Lens Blur (Hexagonal Bokeh Blur) - 镜头模糊(六角形散景模糊)

  • Surface Blur - 表面模糊

  • Bulge Distortion - 隆起失真

  • Chroma Key Blend - 色度键混合

  • Color Halftone - 颜色半色调

  • Dot Screen - 点屏

  • Round Corner (Circular/Continuous Curve) - 圆角(圆形/连续曲线)

  • All Core Image Filters - 所有Core Image滤镜,配合MTICoreImageUnaryFilter使用

最佳实践

  • 尽可能重复使用MTIContext

上下文是重量级对象,因此,如果您确实创建了对象,请尽早创建,并在每次需要渲染图像时重用它。

  • 明智地使用MTIImage.cachePolicy

当您不想保留图像的渲染结果时,请使用MTIImageCachePolicyTransient,例如当图像只是过滤器链中的中间结果时,因此渲染结果的底层纹理可以重复使用。这是内存效率最高的选项。但是,当您要求上下文渲染之前渲染的图像时,它可能会重新渲染该图像,因为它的基础纹理已被重用。

默认情况下,过滤器的输出映像具有transient策略。

当您想防止底层纹理被重复使用时,请使用MTIImageCachePolicyPersistent

默认情况下,从外部来源创建的图像具有persistent策略。

  • 了解MTIFilter.outputImage是一个计算属性。

每次您要求过滤器输入其输出图像时,即使输入与上次调用相同,过滤器也可能为您提供新的输出图像对象。因此,尽可能重复使用输出图像。

例如,

//          ╭→ filterB
// filterA ─┤
//          ╰→ filterC
// 
// filterB and filterC use filterA's output as their input.

在这种情况下,以下解决方案:

let filterOutputImage = filterA.outputImage
filterB.inputImage = filterOutputImage
filterC.inputImage = filterOutputImage

比以下更好:

filterB.inputImage = filterA.outputImage
filterC.inputImage = filterA.outputImage
目录
相关文章
|
6月前
|
算法 计算机视觉 iOS开发
iOS 实时图像处理技术:使用 Core Image 和 Metal 进行高效滤镜应用
【4月更文挑战第8天】 在移动设备上实现高效的图像处理功能是现代应用程序开发中的一个关键需求。苹果的iOS平台提供了Core Image和Metal两大技术,它们为开发者提供了强大的工具来实现复杂的图像处理任务。本文将探讨如何使用Core Image进行基础图像处理,并结合Metal的性能优势,开发出一个自定义的实时图像滤镜。我们将通过创建一个能够动态调整参数并且具有实时反馈效果的滤镜来演示这一过程。
|
9天前
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
|
1月前
|
Kubernetes 调度 算法框架/工具
NVIDIA Triton系列02-功能与架构简介
本文介绍了NVIDIA Triton推理服务器的功能与架构,强调其不仅适用于大型服务类应用,还能广泛应用于各类推理场景。Triton支持多种模型格式、查询类型和部署方式,具备高效的模型管理和优化能力,确保高性能和系统稳定性。文章详细解析了Triton的主从架构,包括模型仓库、客户端应用、通信协议和推理服务器的核心功能模块。
73 1
NVIDIA Triton系列02-功能与架构简介
|
11月前
|
存储 API 开发工具
AMD 开源 “HIP-RT” 光线追踪库
AMD 开源 “HIP-RT” 光线追踪库
202 0
|
缓存 前端开发 定位技术
Flutter游戏引擎Flame系列笔记 - 1.Flame引擎概述
本文介绍Flutter游戏开发现状以及Flame游戏引擎的整体情况与相关概念。
1395 0
|
机器学习/深度学习 人工智能 测试技术
利用 UMA 使硬件加速器可直接用于 TVM
利用 UMA 使硬件加速器可直接用于 TVM
164 0
|
存储 缓存 API
Metal 简述 & API
Metal是苹果在2018年推出用于取代在苹果端的业务的图形编程接口,在2018年之前使用的是基于OpenGL ES 封装的GLKit,通过Metal相关API直接操作GPU,能最大限度的利用GPU能力。
449 0
Metal 简述 & API
|
存储 编解码 API
Google与Binomial合作开源Basis Universal GPU纹理编解码器
近期,Google与Binomial宣布合作开源Basis Universal GPU纹理编解码器,在保持GPU性能效率的同时,提升Web、桌面端与移动应用程序中图像传输的性能。本文来自Google开源博客。
384 0
Google与Binomial合作开源Basis Universal GPU纹理编解码器
|
前端开发 开发工具 数据安全/隐私保护
Lite UI Framework-让你快速的实现企业级管理型业务
lite ui framework 的初衷是让开发者可以快速的搭建一些轻量化的管理型业务页面,它基于react+umi+antd+gantd开发并开源
479 0
Lite UI Framework-让你快速的实现企业级管理型业务