Download PDF [1.13MB]
介绍
在本文中,我们将探讨过去几年内,Adobe 工程师使用 OpenGL* 和 OpenCL™ 增强 Photoshop 以提高硬件可用性方面所取得的进步。 Adobe 团队选择了两种特性模糊锐化(Blur Sharpen)和智能锐化(Smart Sharpen)作为近期工作的重心,因为此两者提供的处理速度和质量都不够理想。 我们将在本文中讨论这两种特性的效果。
开放标准语言、Adobe Photoshop 和英特尔
数年以来,人们一直使用 OpenGL(开放图形语言)提升不同平台间的渲染性能和资源利用率。 OpenCL(开放计算语言)是一款免费的开放标准,支持中央、图形和其他处理器进行可移植、通用及并行编程。 OpenCL 标准是现有 OpenGL API 的补充,可为 OpenGL 使用图形处理器进行渲染提供常规计算例程。 OpenCL 可为开发人员提供统一的编程环境在既定平台内的所有处理资源上执行代码。
Adobe Photoshop是一款领先的图形产业应用,可用于图形编辑和操作。 需要大量处理和内存资源的用户 — Photoshop 是一款强大的应用,要求计算机具备最高的性能。 为支持其图形处理能力,Adobe 在许多代 Photoshop 中使用了开放标准。 它现在已经进行了更新,可利用 OpenCL,这能够提供更高的性能。
英特尔为该报告提供了测试。 此外,英特尔还提供了大量工具和 SDK 来加速视觉计算的开发。 其中包括适用于英特尔® 处理器的开发人员指南(页面上每一代英特尔图形处理器的指南链接)。 最新指南包括针对第四代英特尔® 酷睿™ 处理器图形的图形开发人员指南 — 现在包括 OpenGL)、针对 OpenCL 应用的英特尔® SDK以及视觉计算专用网站。
对于一款强大的应用,如 Photoshop,使用诸如 OpenGL 和 OpenCL 等开放标准能够提高性能,支持处理例程跨平台使用,并支持更轻松地使用其他 Adobe 产品。
Photoshop 之使用 OpenGL 和 OpenCL 标准
数年前,在 Adobe Creative Suite* 4 Photoshop 版(Photoshop CS4)中,Adobe 开发人员将 OpenGL 工作的重心放在增强 Canvas 和 3D 交互上。 他们使用 OpenGL API 实施了 Smooth Zoom、Panning、Canvas Rotate、Pixel Grid 和 3D Axis/Lights 来增强性能。 打开这些特性(在首选项中),启用 “Use Graphics Processor”,选择 “Advanced Settings” 按钮,从下拉菜单中选择 “Advanced Drawing Mode”,勾选“Use Graphics Processor to Accelerate Computation” 和 “Use OpenCL” 的复选框。参考图 1 和图 2,了解 Photoshop 用户界面中的建议设置。
图 1: Photoshop* 首选项对话框中的图形设置
图 2: 在 Drawing Mode 下拉菜单中选择 “Advanced”
借助 Photoshop CS5,开发人员使用了 OpenGL 来加速用户界面(UI)和添加 Pixel Bender 插件。目标 UI 特性包括 Scrubby Zoom、HUD Color Picker、Color Sampling Ring、Repousse 和 3D Overlays。 借助这些新特性,OpenGL 模式扩展至基本、常规和高级方法。
然后,在 Photoshop CS6 中,该团队使用 OpenGL 和 OpenCL 中的标准化特性强化了内容编辑。 开发人员使用 OpenGL 添加了 Adaptive Wide Angle、Liquify、Oil Paint、Puppet Warp、Lighting Effects 和 3D Enhancements。 他们还使用 OpenCL 标准添加了 Field/Iris Tilt/Shift 功能和 Blur 功能。
今天,借助最新版 Adobe Creative Suite,Creative Cloud 可使用 Smart Sharpen 以及可选的 “Use Graphics Processor” 和 “Use OpenCL” 模式进一步增强 Photoshop 应用。
支持 OpenGL 和 OpenCL 的英特尔核芯显卡设备
以下英特尔图形设备需要默认面向 OpenGL 和 OpenCL 图形加速启用:
- 第四代英特尔® 酷睿™ 处理器
- 英特尔® 核芯显卡 4200、4400、4600、P4600、P4700
- 核芯显卡 5000
- 锐炬™ 显卡 5100
- 锐炬™ Pro 显卡 5200
- 第三代英特尔® 酷睿™ 处理器
- 英特尔® 核芯显卡 4000、P4000
- 第二代英特尔® 酷睿™ 处理器
- 英特尔® 核芯显卡 3000、P3000
开发特定 Photoshop 增强特性
开发人员如何实现这些成果? Photoshop 使用了一套图层将许多高级特性应用至图像。 图 3 解释了这一概念,它将一个非常简单的图像的三个图层展示为白色空间。 示例中的效果、红色和蓝色图层在堆栈中是单独图层。 可应用到图层中的效果包括锐化、模糊和红眼去除。 无需改变源文件即可将效果应用至最终图像。 此外,用户还可对这些图层进行整理、堆叠和结合以提供混合效果(见右图),如将红色和蓝色组合在一起得到紫色(PURPLE)。 此外,还包括一些特殊图层,称 “mask layer”,它可以限制应用至指定图像区域的效果。
此外,图像结合也适用于 Photoshop 纹理。 Photoshop 纹理是指使用其他图层与现有图层混合,或对其进行覆盖,从而使图像呈现“纹理化”。 注意下图中,左下侧的砖块如何在透明度较低的情况下,为中间图像中雕像的斗篷提供纹理。
Adobe 使用了 OpenGL API 来增强 Photoshop 纹理/图层效果。 在 OpenGL Advanced Mode 中,OpenCL 的 “”调用支持着色工具(Shader Tool)应用棋盘格滤镜合成、色调映射和配色。
锐化焦点
运动照片中广泛使用锐化步骤,因为只需增加一些控制便可对动态照片产生很大的影响。 图 5 展示了如何通过在照片编辑时应用锐化步骤来改进细节。 注意,右侧的“锐化后”图像中,文本、星星甚至笔触细节都更加显著。
但是,锐化后步骤可能会产生一些多余的负效果。 原始图像中相对清晰或不重要的细节会产生人造的效果,这类似于增加了图像的“噪音”,从而产生光晕效果。 在该版本中,Adobe 采用了使用 OpenCL 标准实施的基于分块的“降噪和锐化”算法,对传统智能锐化进行了革新。 全新的基于分块的算法可生成没有任何光晕效果的清晰图像。 此外,降噪步骤抑制了“进行锐化时“噪音”增强”的问题。 比较以下图 6、图 7 和图 8 中的图像。 借助该结果,Adobe 希望使用这些标准进一步改进所有的锐化工具。
在焦点中应用模糊(Blur)功能
使用 OpenCL 能够改善的另一种编辑工具功能是 Blur 工具。 有许多方法可以强调和模糊图像的某一部分。 许多质量是在照片拍就时形成的,但是经过一些后期处理,能够改进,至少改变照片的效果。 红眼去除和裁剪是非常常见的后期处理任务,而图像的清晰度也能够进行改进。 特定图像区域锐化能产生很大的影响。
图 9: 蒙娜丽莎(Francesco del Giocondo 的妻子 Lisa Gherardini 的画像)画家:列奥纳多·达·芬奇
在作品《蒙娜丽莎》中,列奥纳多·达·芬奇(图 9)[8]通过将蒙娜丽莎的图像置于有些许散焦的乡村风景之前来强调其在肖像中的主题。 通过对背景进行模糊处理,他帮助观者将焦点放在其主题(画作中最重要的部分)而非背景。 以下是模糊处理如何改进现代图像的示例。 我们很难找到照片的主题,模糊处理能够帮助突出图像的主题。 我以图 6 中使用的锐化图像为例,通过应用 Blur 工具进一步强调图像中央的星星,这将会让星星在右下方的图像中更清晰(图 10)。 模糊处理能够改变我们看图像的角度,因此星星能够更突出。 毋庸置疑,有许多方法可以对图像进行模糊处理(出于特定目的),而这种方法最新。
图 10: 原始图像(左)锐化(中)后,添加了 Blur(右)进行强调
向图像添加 Blur 如同使用了彩色蜡笔,只是在这里,鼠标是蜡笔,颜色是 Blur 功能。 如要应用 Blur,需要选择 Blur 工具,调整 “笔刷(brush)”工具(可从 1 个屏幕像素调整至整个图像尺寸的光标)的尺寸,以符合想要进行模糊处理的图像区域的尺寸,然后点击并按住鼠标并对想要进行模糊处理的图像区域 “着色或擦除(coloring or scrubbing)”。 执行越多的着色操作,就会有越多的模糊效果应用到图像区域。
英特尔增强图形性能
添加 OpenCL Blur 工具的操作提出了一些挑战,也提供了一些好的学习机会。 该团队希望利用主机平台上的所有资源来平衡工作负载。 跨平台操作包括 Windows* 和 Mac* OS 至关重要。 这些因素促使他们选择了 OpenCL。 该团队最终选择了 Photoshop 中现有的模糊化工具,并将其从优化的 CPU 代码中移植至 OpenCL 内核。
Adobe 希望降低 Blur 的复杂性,未采用 OpenCL 以前需要在多个线程上运行多个命令队列。 此外,他们还在低端视频子系统上遇到资源限制的问题,如超时和内存不足故障。 最终,他们通过使用基于 OpenCL 的解决方案降低了平台变量,如驱动程序堆栈以及多种编译器的使用。 借助 OpenCL,他们能够将部分图像缓存至本地内存并为图形处理器将图像分解为 2k X 2k 数据块,从而大幅降低挑战。 这些改进带来更高的可靠性,并通过利用 GPU 将过滤速度提高了 4-8 倍。
英特尔的测试表明,以下 Photoshop 操作的性能得到提升,因为随着英特尔核芯显卡不断更新换代,可用的执行单元和内存带宽不断提升,如下图所示(图 11)。[1]
图 11: 基于多代英特尔核芯显卡的具备 OpenGL* 性能的 Photoshop*
在进行测试时启用和禁用 OpenGL 或 OpenCL 特性,我们发现例程将会大幅提升 Liquify Filter 和 Field Blur 工具的性能,详见下图(图 12)。 在英特尔® 核芯显卡 4600 上,关闭/开启 1 GPU 加速时 Liquify 和 Blur 处理时间一般为数秒钟。[1]
该操作非常有用。 在开、关 OpenCL 硬件加速的情况下进行测试时,该款全新 Blur 功能的处理速度提高了 3 倍,具体取决于工作负载和正在渲染的范围尺寸(图 13)。[1]
一般的应用处理所需的时间仅占较小工作负载的大部分,因此较大的工作负载在处理时间上能够获得更大的改进。 当启用 OpenCL 加速时,CPU 和 GPU 都能够有效利用,而且许多多线程应用的核心都能够向图形处理器提交工作。 图形处理单元的最低利用率为 70%,内存利用率为 10%-36%,具体取决于图形子系统。 最后,图形管线中没有停顿,这能够提供更出色的用户体验。
总结
添加基于标准的处理例程让 Adobe 能够继续其在每个版本中增强 Photoshop 性能的传统。 通过在英特尔核芯显卡设备上添加基于 OpenCL 的加速,用户能够获得更高的性能,并且能够在整个图像中实时评估模糊滤波器。 向这些过滤器中添加 OpenCL 之前根本无法获得如此完整的图像体验,而且 OpenCL 的添加还支持更有效地创建出色图像。 在添加 OpenCL 之前,应用效果之前只能预览一小部分的图像。 而现在,用户能够在进行调整时全屏查看只能锐化过滤器,并能够更快地获得所需的最终图像。 采用 OpenCL 后,Photoshop 的性能得到显著提升。
[1]结果基于英特尔内部分析结果,仅供参考。 任何系统硬件、软件的设计或配置的不同均可能影响实际性能。
参考资料和资源
- OpenGL 规范和其他资源: khronos.org
- OpenCL 规范和其他资源: khronos.org
- Adobe Photoshop
- 面向 OpenCL 应用的英特尔® SDK
- 英特尔® 开发人员专区上的英特尔® 视觉计算源
- 英特尔® 处理器开发人员指南
- 面向第四代英特尔酷睿处理器的英特尔处理器显卡开发人员指南
- 英特尔在 SIGGRAPH 2013 上发布的 OpenCL 视频和演示
- 借助英特尔锐炬显卡、英特尔® 性能工具和 OpenCL 加速内容创建
- 视频: Adobe 借助 OpenCL* 和英特尔® 图形进行优化
- 视频: 结合使用 Adobe Blur 工具
- 视频: 使用智能锐化对照片进行锐化和完善
作者介绍
Tim Duncan 是一位英特尔工程师,被朋友们成为“Gidget-Gadget 先生”。 Tim 目前负责帮助开发人员将技术集成至解决方案,他在芯片制造和系统集成领域有着数十年的经验。 如欲对其有更多了解,请访问英特尔® 开发人员专区:Tim Duncan (英特尔)
Murali Madhanagopal 是英特尔视觉与并行计算事业部的一员,他在其中担任首席图形架构师。 他获得了德州农工大学学院站(Texas A&M University, College Station)计算机信息系统专业的理学硕士,并获得印度安那大学金奈工程学院(College of Engineering Guindy, Anna University)计算机工程学士学位。 Madhanagopal 主要负责开发和执行英特尔工作站处理器图形策略,以支持 ISV 软件在当前和未来基于处理器显卡的平台上高效运行。 此外,他还积极参与到业内领先的 CAD、CAE 和数字内容创建 ISV 和 OEM 优化应用和系统的活动中。
英特尔、Intel 标识、Iris 和锐炬是英特尔公司在美国和/或其他国家的商标。
OpenCL 和 OpenCL 标识是苹果公司的商标,需获得 Khronos 的许可方能使用。
英特尔公司 © 2014 年版权所有。 所有权保留。
* 其他的名称和品牌可能是其他所有者的资产。