掌桥专利:专业的专利平台
掌桥专利
首页

用于矢量图形的极坐标描边

文献发布时间:2023-06-19 11:39:06


用于矢量图形的极坐标描边

本申请要求Mark Kilgard于2019年12月10日提交的名称为“用于矢量图形的极坐标描边(POLAR STROKING FOR VECTOR GRAPHICS”、序列号为62/946,267的美国临时申请的权益,该申请与本申请共同转让,并通过引用将其全部内容并入本文。

技术领域

本申请总地涉及表示路径,更具体地,涉及表示和渲染用于矢量图形的描边路径。

背景技术

矢量图形(如在PostScript,PDF,可缩放矢量图形,OpenVG,Flash等中使用的)以两种方式之一渲染形状和文本:填充(本质上是“在形状内着色”)或描边(本质上是“描绘形状的轮廓”)。这些形状通常称为“路径(paths)”,渲染填充的或描边的(stroked)路径的过程通常称为“路径渲染”。

现有方法通过包含大量CPU预处理的较慢的CPU光栅化技术或较快的GPU方法来执行描边。对基于CPU的预处理的需求常常使GPU描边方法受到CPU运行的瓶颈。此外,用于GPU描边方法的基于CPU的预处理通常会将渲染状态(例如描边宽度、顶端(cap)样式和连接(join)样式)组合到路径的GPU表示中,这样更改起来就变得很昂贵。这样的GPU表示比路径的原始表示占用多得多的内存。

发明内容

在一方面,本公开提供一种逼近路径的链接的方法。在一个示例中,该方法包括:(1)确定路径的链接(link)的切线角变化;(2)基于该切线角变化按步进(in steps)评估链接;以及(3)提供采用步进(steps)的链接的极坐标描边表示,其中评估是非递归执行的。

在另一方面,本公开提供一种极坐标描边系统。在一个示例中,极坐标描边系统包括:(1)路径处理器,配置为将路径分解为链接,以及(2)极坐标描边处理器,配置为由链接的表征(characterization)确定链接的极坐标描边中间位,并使用极坐标描边中间位生成每个链接的极坐标描边表示。

在又一方面,本公开提供一种渲染器。在一个示例中,渲染器包括:(1)CPU,配置为将路径分解为链接,以及(2)GPU,配置为基于每个链接的极坐标描边表示生成路径的描边曲面细分。

在再一方面,本公开提供一种渲染描边路径的方法。在一个示例中,该方法包括:(1)获得路径的至少一个链接的表征;(2)由该表征计算至少一个链接的极坐标描边中间值;(3)利用极坐标描边中间位生成表示至少一个链接的四边形序列,以及(4)使用至少一个链接的四边形序列提供路径的描边曲面细分。

现在结合附图参考以下描述,其中:

图1示出了根据本公开原理的以极坐标描边表示的路径的示例的图示;

图2示出了根据本公开原理的构造为执行极坐标描边的极坐标描边系统的示例的框图;

图3示出了根据本公开原理的构造为执行极坐标描边的渲染器的示例的框图;

图4示出了根据本公开原理的构造为执行极坐标描边的渲染器的另一示例的框图;

图5示出了根据本公开原理执行的极坐标描边的方法的示例的流程图;

图6示出了图1的路径的链接,连同包括该链接的矢端曲线的矢端曲线图,以及由图5的极坐标描边方法500提供的该链接的极坐标描边表示;

图7至图10可视化地表示用于提供图6所示的极坐标描边表示的方法500的步骤;

图11至图15示出了图1的路径的其他链接,连同包括不同链接的矢端曲线的对应的矢端曲线图,以及由图5的极坐标描边方法500提供的该链接的极坐标描边表示;

图16示出了根据本公开原理执行的渲染描边路径的方法的示例的流程图;

图17示出了根据本公开原理的配置为利用极坐标描边来显示路径的计算设备的示例的框图;以及

图18示出了根据本公开原理的配置为利用极坐标描边打印路径的打印机的示例的框图。

本公开提供了一种用于表示路径的改进的描边(stroking)操作,诸如改进了路径渲染中的描边操作。改进的描边操作,在本文中称为极坐标(polar)描边,其采用沿路径的切线角步进(stepping)以在路径上提供极坐标描边表示。路径是在此称为链接的路径成分的组合。路径的链接可以是区段(segment),例如直线段或曲线段、顶端或连接。沿路径的一个或更多个链接以切线角步进包含“求解”,以确定一链接何时可能从顺时针转弯变为逆时针转弯(反之亦然),然后在每个步长(step)中,求解链接的梯度何时与每个切线角步长的90度旋转垂直。这种方法可以采用三角函数,并沿链接在每个步骤中求解线-曲线交点。

有利地,本公开认识到线-曲线交点是链接的生成方程的矢端曲线(hodographcurve)与极线重合的地方。矢端曲线图(hodograph)是包括链接梯度的矢端曲线的极坐标图。例如,链接的矢端曲线(其是三次贝塞尔曲线)是抛物线。极线(polar line)是以指定角穿过矢端曲线的原点的线。使用极线的隐式方程和矢端曲线的参数方程来求解矢端曲线和极线之间的交点,提供了一参数值,在该参数值处,链接指向极线的角方向。由于可能有不止一个这样的交点,所以交点确定将限制在感兴趣的参数范围内的单个答案。图6和图11至15示出了链接及其对应的矢端曲线的示例。

极坐标描边表示可以用于生成路径的描边曲面细分(tessellation)。例如,链接的极坐标描边表示可以是代表该链接的多边形(例如四边形)序列,并且可以用于生成描边曲面细分。对于采用CPU生成描边曲面细分的现有方法,切线角的步进将是一种昂贵的方法。诸如GPU之类的并行处理器的有效三角函数评估(sin,cos,atan2)使以切线角步进的求解步骤完全可行。例如,由于极坐标描边方法确定要采取多少步骤而无需递归处理,因此极坐标描边方法可以很好地映射到GPU曲面细分和网格着色器。整个极坐标描边方法(例如曲面细分、光栅化和着色)可以由GPU执行。

所公开的极坐标描边可以被用来在包括网络浏览器(可缩放矢量图形(SVG)),文档查看器(PDF),导航和地图系统以及插图应用程序(Adobe Illustrator,Inkscape)在内的几个不同领域中改善描边路径渲染的性能和质量。极坐标描边也可以用于控制根据输入路径执行操作的不同机器。例如,根据输入路径处理材料的计算机数控(CNC)机器。在描边扩展发生在与路径本身不同的坐标空间中的情况下,极坐标描边也很有用。典型的用途是窗口空间描边(在SVG中称为非缩放描边)。这对于诸如地图和导航系统之类的应用程序非常重要,在这些应用程序中,描边以像素为单位(通常为1)的宽度指定,因此在缩放到地图时,网格线或标记的宽度不会也缩放。

有利地,极坐标描边方法也可以处理路径的每个链接,而无需对不同类型的链接进行特殊布置。例如,弯曲的路径可以包含尖点(cusps),尖点是曲线上曲率变为无限大的点。当曲率为无穷大时,递归方法无法对其进行界定。因此,现有的递归描边方法专门处理尖点。尖点的实际问题是梯度变为(0,0),这是不能归一化的零长度向量。由于极坐标描边技术通过以无梯度的方式步进切线角来操作,因此极坐标描边方法无需任何特殊处理即可自动处理尖点。

现在转到图,图1示出了由链接组成的路径100的示例的图。路径100表示完整路径,其具有起点101,终点114以及起点101和终点114之间的区段(segments)和连接的多个链接。起点101和终点114在本文中也分别被称为控制点101和控制点114。路径100包括多种路径段类型,包括线段(最简单),二次贝塞尔区段,更通常是有理二次贝塞尔区段的圆弧以及包括各种拓扑结构(回路,蛇形曲线)并展示0到2个拐点的三次贝塞尔区段。这些区段示例了与常规SVG路径命令具有1对1对应关系的二次区段、三次区段、线段和弧线段的关键拓扑。线段和连接中的每一个都由生成方程定义,该方程包括一组控制点,其中第一个和最后一个控制点与区段或连接的端点重合。路径100是用于说明本公开的极坐标描边技术的简单路径。由于极坐标描边包括以梯度空间角步进,因此极坐标描边技术广泛地推广到具有各种标准路径段类型和连接的多种类型的链接的更复杂路径。

路径100包括二次贝塞尔区段115,具有两个拐点的三次贝塞尔区段120,具有零拐点的三次贝塞尔区段130,具有一个拐点的三次贝塞尔区段140,线段150和圆弧160。路径100还包括将区段连接在一起的连接。示例性连接是尖角连接(miter join)170、172、174和斜角连接(bevel join)180、182。尖角连接170将贝塞尔区段120连接到贝塞尔区段130,尖角连接172将贝塞尔区段130连接到贝塞尔区段140,而尖角连接174将贝塞尔区段150连接到圆弧160。斜角连接180将贝塞尔区段115连接到贝塞尔区段120,而斜角连接182将贝塞尔区段140连接到直线段150。图6和图11至15示出了路径100的每个区段,相应的矢端曲线,以及根据极坐标描边生成的极坐标描边表示的示例。路径100可以被提供给系统,例如图2的极坐标描边系统200,用于生成极坐标描边表示。

图2示出了根据本公开原理的构造成采用极坐标描边表示路径的极坐标描边系统200的示例的框图。极坐标描边系统200可以是绘制路径的描边曲面细分的渲染器,或者是其一部分。极坐标描边系统200可以位于单个计算设备上或分布在多个计算设备上。计算设备可以是例如膝上型计算机,台式计算机,计算板,智能电话或服务器。计算设备可以包括用于显示路径的至少一个屏幕。计算设备也可以是机器或用于控制机器。例如,极坐标描边系统200可以与诸如打印路径的打印机或使用路径处理材料的CNC机器之类的机器相关联或与之集成。在一些示例中,极坐标描边系统200是基于云的服务器。极坐标描边系统200包括路径处理器210和极坐标描边处理器220。极坐标描边系统200可以包括不止一个路径处理器210或不止一个极坐标描边处理器220。路径处理器210或极坐标描边处理器220可以是中央处理单元(CPU)或图形处理单元(GPU)。在一个示例中,路径处理器210是CPU,而极坐标描边处理器220是GPU。有利地,GPU可以包括多个并行处理器以允许并行处理多个链接。在一些示例中,路径处理器210和极坐标描边处理器220可以是单个处理器。

极坐标描边系统200被配置为接收要表示的路径并生成路径的极坐标描边表示。所接收的路径可以是表示该路径的链接的生成方程的代码形式,例如SVG路径命令。每个链接的生成方程包括该链接的控制点。路径可以来自,例如Web浏览器,文档查看器,导航或地图系统,或插图应用程序,例如矢量图形程序。所接收的路径可以是简单的,例如图1的路径100,或复杂的,具有以多种组合形成序列的多种类型的区段和连接。

路径处理器210被配置为将接收到的路径分解为链接,例如路径100的区段和连接,并编码这些链接以进行存储。例如,路径处理器210可以接收路径100并且将路径100分解为图1中所示的各个区段和连接,并对区段和连接进行编码以进行存储。编码的链接可以被存储在极坐标描边处理器220的存储器中。这样,路径处理器210将链接编码成可以存储和被极坐标描边处理器220读取的格式。编码的链接和链接的控制点被下载到极坐标描边处理器220以表示路径100。路径处理器210可以被配置为在指示极坐标描边处理器220生成链接的极坐标描边表示之前对链接执行附加处理以使能极坐标描边。附加处理可以对应于由图3的CPU 310执行的处理。

此时,路径处理器210将命令发送到极坐标描边处理器220,指示极坐标描边处理器220生成路径链接的极坐标描边表示。可以通过编程接口将命令从路径处理器210发送到极坐标描边处理器220,其中命令表现为函数调用。链接可以生成为图元(例如补丁),也可以生成为任务。生成的极坐标描边表示可用于可视地表示路径。例如,极坐标描边处理器220可以将极坐标描边表示提供给计算设备屏幕以显示路径。计算设备可以是例如膝上型计算机,台式计算机,计算板,智能电话或具有能够显示极坐标描边表示的屏幕的另一种类型的计算设备。极坐标描边处理器220还可提供极坐标描边表示以打印路径或操作采用该路径的机器。例如,极坐标描边系统200可以与采用极坐标描边表示来打印路径的打印机集成。图17图示了示出使用极坐标描边表示的路径的显示的示例。图18图示了使用极坐标描边表示来打印路径的打印机的示例。图1的路径100作为示例路径用于图17和图18二者。

极坐标描边处理器220可以被配置为通过由链接的表征(characterization)确定链接的极坐标描边中间位(intermediate)并采用极坐标描边中间位来生成极坐标描边表示,来生成极坐标描边表示。链接的表征是定义链接的特征的集合。例如,链接的表征可以包括特征的组合,例如链接的类型,链接的生成方程,链接的控制点以及指向这些控制点的索引。极坐标描边处理器220可以根据本文公开的极坐标描边算法运行。因此,极坐标描边处理器220可以有效地编码本文公开的算法,例如由图5的流程图表示的算法。

极坐标描边处理器220可以并行地生成用于极坐标描边处理器220的链接的极坐标描边表示。在一些示例中,极坐标描边处理器220可以并行生成多个路径的极坐标描边表示。因此,极坐标描边处理器220可以并行地在多个路径上操作,同时还可以并行地在那些路径的多个链接上操作。如本文所使用的,“并行”包括至少部分地并行,并且指示处理是在并行路径中发生的,但不一定同时发生。

极坐标描边处理器220可以是GPU,并且根据图形管线进行操作,其中极坐标描边的某些步骤在沿着图形管线的特定阶段发生。极坐标描边处理器220可以经由图形管线的一个或更多个着色器来提供极坐标描边功能。着色器是在图形管线的特定阶段执行特定的一个或更多个功能的程序。极坐标描边着色器是已被编程为执行本文公开的极坐标描边功能的着色器的示例。极坐标描边着色器可以执行通常包含在图形管线中的附加功能,也可以作为图形管线的一个或更多个着色器的一部分执行。极坐标描边处理器220可以采用诸如图3或图4所示的图形管线的不同示例之一。

图3示出了根据本公开原理的渲染器300的示例的框图,该渲染器300包括被构造为执行极坐标描边的图形管线。渲染器300提供用于极坐标描边的系统的示例,例如图2的极坐标描边系统200。渲染器300使用极坐标描边来渲染路径。渲染器300包括CPU 310,GPU320以及另一硬件组件,存储器330。

CPU 310被配置为接受或接收路径,将路径分解为链接,对链接进行编码,以及通过图形命令将链接和控制点下载到GPU 320。CPU 310还被配置为绑定GPU 320的极坐标描边着色器。绑定可以包括建立用于极坐标描边着色器的当前配置并设置变量。CPU 310还为极坐标描边着色器设置统一变量(uniform)。在着色器处理过程中,统一变量的值不变。统一变量是极坐标描边过程持续时间内的常量。例如,描边宽度可以设置为5。配置的另一部分可以包括通过旋转,平移,缩放或投影来变换路径的坐标空间。此时,CPU 310向GPU 320发送命令,指示GPU 320绘制路径的链接。可以通过编程接口将命令从CPU 310发送到GPU320,其中命令表现为函数调用。如上所述,链接可以绘制为补丁或任务。其他图元(例如三角形)也可以被图形管线采用来进行渲染。

GPU 320包括用于处理表示路径的图元的可编程图形管线321。该图元可以是补丁,并且将用作讨论图形管线321的操作的示例图元。图形管线321包括顶点拉取器322,顶点着色器323,曲面细分控制着色器324,曲面细分生成器325,曲面细分评估着色器326,图元组件和光栅化器327以及片段着色器328。某些阶段,诸如顶点拉取器322、曲面细分生成器325、图元组件和光栅化器327,是图形管线321的固定功能的GPU阶段。其他图解说明的阶段,即顶点着色器323、曲面细分控制着色器324、曲面细分评估着色器326和片段着色器328,是图形管线321的可编程着色器GPU阶段。能够使用OpenGL 4.0,用于嵌入式系统(ES)3.2的OpenGL,Direct3D11或类似的图形应用程序编程接口的GPU提供具有这些阶段的此类可编程图形管线321。OpenGL 4.0和OpenGL ES 3.2可从位于俄勒冈州比弗顿的KhronosGroup公司获得,而Direct3D 11可从华盛顿州雷蒙德的Microsoft公司获得。可从加利福尼亚州圣塔克拉拉市的Nvidia公司获得的具有Volta或Pascal架构的GPU是可以提供可编程图形管线321的GPU的示例。如以下参照图5所述,图形管线321的各个阶段也可以被配置为执行极坐标描边方法500的步骤。

顶点拉取器322是图形管线321的第一阶段,其提取补丁的顶点。顶点着色器323然后描述每个顶点的各种特性。曲面细分控制着色器324、曲面细分生成器325和曲面细分评估着色器326协作将补丁曲面细分成三角形网格或相连的线。曲面细分控制着色器324和曲面细分评估着色器326是用于GPU曲面细分的两个可编程阶段,而曲面细分生成器325是固定功能的GPU阶段。曲面细分控制着色器324作为GPU曲面细分的第一阶段执行补丁范围的计算,例如计算每个补丁的细节水平(LOD)。曲面细分生成器325使用曲面细分水平将补丁分解为新的一组图元,并为每个顶点分配坐标。曲面细分评估着色器326基于曲面细分控制着色器324和曲面细分生成器325提供的信息评估网格顶点。曲面细分评估着色器326从曲面细分生成器325计算每个顶点的位置,控制曲面细分图案,并指定生成的补丁的方向。

在意图用于管线321的链接的示例表示中,具有六个控制点的补丁对每个链接进行编码。六个控制点足以索引三次贝塞尔区段的四个控制点,另外两个足以索引初始和末端梯度控制点。其他类型的链接需要较少的控制点。特殊的控制点索引值(例如零)可用于编码特定类型的链接。熟练的从业人员将认识到这样的链接表示非常适合于顶点拉取器322,并且可以紧凑地存储在存储器中。

图元组件和光栅化器327将由曲面细分评估着色器326生成所得的曲面细分补丁划分为用于渲染的各个光栅化图元(通常为三角形)的序列。然后,片段着色器328计算基本补丁的每个像素的颜色和其他属性。存储器330从可编程图形管线321的片段着色器328接收像素更新。存储器330包括存储所接收的像素更新的帧缓冲器334,其提供用于显示的图像。在此示例中,图像是路径的描边曲面细分。在一些示例中,存储器330是视频存储器,其中一系列描边的曲面细分被编码为视频流。

用以完成适合于来自可编程图形管线321的路径描边的曲面细分的关键细节并不明显。曲面细分生成器325通常生成密集的矩形2D网格,网格的宽度和高度在一侧限制为64。描边路径段、顶端或连接的曲面细分通常需要被曲面细分为长条四边形(有时长100s),而不是密集的网格。为了精确地细分需要大量细分的链接,细分的条可能需要比细分生成器325可以生成的密集网格的最大宽度或高度(对于任何一个通常为64)长很多倍。一种非显而易见的技术(此处称为NaN中毒(NaN poisoning))(表示为非数字或NaN,是无效的浮点值),将密集的网格划分为适当的(可能很长)条带,以描边摸任意链接。在可编程图形管线321的示例使用中,在曲面细分评估着色器326上执行的极坐标描边着色器生成用于要丢弃的三角形的顶点的位置的NaN值。图元组件和光栅化器327无法处理具有一个或多个NaN位置值的光栅化图元,因此必须丢弃任何此类“NaN中毒”的图元。其余未丢弃的三角形具有由曲面细分评估着色器326计算的(无NaN)顶点位置,因此,当由图元组件和光栅化器327处理时,这些三角形将接缝在一起成一长条,以形成与预期的描边曲面细分相对应的连续三角形条。编排NaN中毒和条接缝涉及在曲面细分控制着色器324上运行的极坐标描边着色器,以将适当的网格和相关参数馈送到曲面细分生成器325和曲面细分评估着色器326。

图4示出了根据本公开原理的渲染器400的另一示例的框图,该渲染器包括构造为执行极坐标描边的图形管线。渲染器400提供了用于极坐标描边的系统的另一示例,例如图2的极坐标描边系统。渲染器400包括CPU410、GPU 420和存储器430。GPU 420包括图形管线421,该图形管线421与图3中的GPU 320的图形管线321一样,类似地提供链接的描边的曲面细分。然而,图形管线421的GPU曲面细分由两个可编程阶段提供,由任务着色器424和网格着色器426,而不是图形管线321的曲面细分控制着色器324、曲面细分生成器325和曲面细分评估着色器326。图形管线421和渲染器400的其他组件可以被配置为并且作为与图3的图形管线321和渲染器300的相同命名的组件运行。这样,片段着色器428是另一个可编程着色器GPU阶段,图元组件和光栅化器427是固定功能的GPU阶段。可从Nvidia公司获得的具有Turing架构的GPU是可用于可编程图形管线421的GPU的一个示例。图2的路径处理器210可以作为图3的CPU 310和图4的CPU 410运行。虽然图形管线321在表示每个链接的补丁上操作,但是图形管线421在可表示一个或更多个链接的任务上操作,并且还生成繁衍网格着色器实例以生成必要的曲面细分。

任务着色器424被编程为执行图3的顶点着色器323和曲面细分控制着色器324的功能。这样,与图2不同,任务着色器424确定其一个或更多个链接的每个顶点的各种特性,并读取顶点数据本身,而在图2中是通过固定功能顶点拉取器322拉取顶点。然后,任务着色器424执行补丁范围(patch-wide)内的计算作为GPU曲面细分的第一阶段,类似于曲面细分控制着色器324。

网格着色器426被配置为执行剩余的GPU曲面细分功能,包括通过极坐标描边将一个或更多个链接分解成新的一组图元,为每个顶点分配坐标以及评估网格顶点。网格着色器426还被配置为计算每个顶点的位置并控制输出网格的曲面细分图案。然后,图元组件和光栅化器427将所得的网格划分为用于渲染的各个三角形的序列,并且片段着色器428计算基本链接的每个像素的颜色和其他属性。然后像素更新被提供给存储器430的帧缓冲器434,以用于显示路径的描边曲面细分。如以下参考图5所指出的那样,任务着色器424和网格着色器426也可以被配置为执行极坐标描边方法500的步骤。

图5示出了用于生成极坐标描边表示的极坐标描边方法500的示例的流程图。极坐标描边表示可用于描边曲面细分。这样,方法500的一些步骤可以映射到诸如GPU 320或GPU420之类的GPU。如下所述,可编程图形管线321和421的不同阶段可以被配置为执行极坐标描边方法500的至少一些步骤或特定功能。方法500的至少一些步骤也可以由图2的极坐标描边系统200执行。

方法500基本上包括两个步骤:为路径的每个链接确定极坐标描边中间位,并使用极坐标描边中间位评估用于生成每个链接的极坐标描边表示的多边形。对于方法500,四边形将用作示例多边形。方法500以接收路径开始于步骤515。该路径可以是预处理的路径,诸如从图2的路径处理器210接收的路径。

方法500进行到步骤516,在此确定是否存在要处理的路径的链接。链接数和链接类型将根据路径而变化。对于方法500的初始运行,将存在要处理的路径的至少一个链接。当没有要处理的路径的附加链接时,方法500继续至步骤590并结束。

当存在要处理的路径的链接(即,初始链接或下一个链接)时,方法500继续至步骤518,在该步骤中,读取链接的类型和索引。链接的类型可以是例如由路径100的链接表示的区段或连接。例如,链接可以是贝塞尔区段或连接的类型,例如尖角连接或斜角连接。链接的索引指示链接的开始和结束。

在步骤520中,读取链接的控制点。如上所述,每个链接都有包括定义链接的控制点的生成方程。对于方法500,链接的表征包括链接类型,索引,生成方程和控制点。关于可编程图形管线321,步骤518和520可以由顶点拉取器322执行。

在诸如窗口空间描边的某些情况下,还根据需要在步骤530中变换控制点。变换控制点考虑用于路径的极坐标描边表示的任何旋转,平移,缩放或透视变换。关于可编程图形管线321,步骤530可以由顶点着色器323执行,而下面的步骤540可以由曲面细分控制着色器324执行。

在步骤540中,计算出链接的极坐标描边中间位。极坐标描边中间位可以使用圆弧切线从控制点计算出。极坐标描边中间位包括N,p,Ψ,δ,Δ

Ψ是与有序序列的每个元素p相对应的切线角。对于第一个p,Ψ指示链接最初朝向的角度。对于最后一个p,Ψ指示链接终止的角度。对于每个中间位p,Ψ指示其相应拐点的切线角。

δ是沿着拐点之间的链接的不同间隔要步进的度数,并且Δ

一旦获得极坐标描边中间位,就将其用于确定四边形。确定四边形是一个迭代过程,该过程从步骤550开始,并通过选择肋条(rib)继续进行到步骤560。肋条是四边形的一侧,其长度等于路径的描边宽度。一对连续的肋条可以形成四边形。对于肋条对的初始肋条,可以将索引值设置为零。在步骤570中评估肋条的位置和法线,并在步骤572中生成肋条的顶点。关于可编程图形管线321,步骤550和560可以由曲面细分生成器325执行,并且步骤570和572可以由曲面细分评估着色器326执行。每个肋条都是独立的,可以并行处理。

在步骤574中,确定是否已经评估了一对肋条。对于初始肋条,确定可以是是否为链接选择了不只一个肋条。如图5所示,可以通过将所选肋条的当前索引值与零进行比较来进行确定。如果一对肋条还没有被评估,则方法500继续至步骤580,在步骤580,确定是否有链接的更多的肋条要处理。当没有链接的其他肋条要处理时,方法500继续至步骤590并结束。对于第一次通过迭代肋条过程,将有另一个肋条要处理。当还有至少一个肋条要处理时,方法500返回步骤560,并选择下一个肋条。此时,索引可以增加一个以用于下一个肋条。在步骤570中评估下一肋条的位置和法线,并在步骤572中生成下一肋条的顶点。然后在步骤574中确定是否已经评估了一对肋条。如果否,则方法500继续至步骤580。如果是,则在步骤576中生成用于光栅化的四边形。该四边形由该对肋条的顶点限定。可以将四边形提供给光栅化器,例如图3-图4的图元组件和光栅化器327或427。可替代地,可以将四边形拆分并表示为共享公共边的两个三角形。方法500从步骤576继续到步骤580并继续。肋条的索引可以在例如步骤576或580中被重置为零,以在迭代过程中进一步指示肋条对。其他计数器或比较值也可以用于确定肋条对。例如,如图4中的网格着色器方法可生成肋条对以匹配网格着色器实例的线程并行性。

对链接的每个肋条重复生成肋条的顶点然后生成四边形的步骤。当在步骤580中确定没有链接的更多的肋条时,方法580继续至步骤516,在步骤516中,确定是否存在要处理的路径的另一链接。如果该路径没有更多链接,则方法500继续到步骤590并结束。然后,可以将用于路径链接的所有生成的四边形用于(例如)将路径渲染为描边细分。如果还有更多的链接要处理,则方法500继续到步骤518以继续下一个链接。如上所述,可编程图形管线321的不同阶段可以配置为执行方法500的指定步骤。关于可编程图形管线421,任务着色器424可以配置为执行步骤518至550,以及网格着色器426可以被配置为执行步骤560、570、572、574和576。

虽然被呈现为迭代过程,但是所有的肋条迭代可以独立地操作,因此方法500的至少部分可以在例如GPU上并行执行。可以并行地评估肋条的多个处理组,并且可以使用具有并行处理器的一个或更多个GPU来并行处理链接的多个处理组。在一个示例中,并行评估了32个肋条的序列。此外,可以同时并行评估多达32个肋条的若干这类序列。在一些示例中,来自八个链接的肋条被同时处理。

方法500可用于生成各种类型的链接,包括顶端和连接。矢量图形系统中的顶端可以是圆形,正方形,三角形或省略的。在极坐标描边中,顶端被处理为其中控制点都共同位于顶端的锚点处的退化链接。可以计算极坐标描边中间位N,p,Ψ,δ,Δ

类似地,矢量图形系统中的连接可以是圆形,斜角,尖角,三角形或省略的。在极坐标描边中,连接被作为其中控制点都共同位于连接的交接点处的退化链接处理。可以计算极坐标描边中间位N,p,Ψ,δ,Δ

现在将路径100和来自路径100的链接(二次贝塞尔区段)用作示例来描述方法500。图6示出了二次贝塞尔区段115以及包括用于二次贝塞尔区段115的矢端曲线612的矢端曲线图610,和由方法500提供的二次贝塞尔区段115的极坐标描边表示620。矢端曲线图610包括被18个虚极线以10度为增量进行划分的360度的极角,其中每个虚线都穿过矢端曲线图的原点。图6还包括用于二次贝塞尔区段115的极坐标描边中间位及其值,表示为630。计算了图6(以及图11至图15)中的中间位,以便最大绝对梯度角从肋条到肋条变化将不超过5度。该5度的阈值是任意设置的。较小(较大)的值将导致更多(更少)的曲面细分,并在所得的极坐标描边曲面细分中产生更多(更少)的四边形。有利地,调节该阈值提供了对所得的极坐标描边的曲面细分质量的直观控制。更多的四边形将导致更好地逼近链接的真实描边区域,而更少的四边形可以更快渲染或具有改善的功率效率。

与二次贝塞尔区段115一起示出的是用于定义二次贝塞尔区段115的生成方程的控制点。二次贝塞尔区段115包括三个控制点,分别表示为第一,第二和第三控制点101、102、103。控制点101、102、103用于生成提供极坐标描边表示620所需的极坐标描边中间位630。可以从用于生成二次贝塞尔区段115的典型SVG命令获得控制点。

根据方法500的用于生成极坐标描边表示620的极坐标描边操作采用沿二次贝塞尔区段115的切线角步进。沿二次贝塞尔区段115的切线角步进包含确定何时二次贝塞尔区段115从顺时针转向变化为逆时针转向(反之亦然),然后在每个步骤中求解二次贝塞尔区段115的梯度何时正交于每个切线角步进的90度旋转。这种方法包含在沿着二次贝塞尔区段115的每一步进处求解线-曲线交点。

图7-10示出了关于提供极坐标描边表示620的二次贝塞尔区段115的方法500的步骤。图7-10借助于极坐标描边表示620来阐明极坐标描边。对于图6-10,极坐标描边表示620是例如由渲染器300或400渲染的二次贝塞尔区段115的描边曲面细分。

图7示出了生成矢端曲线612,该矢端曲线612是二次贝塞尔区段115的梯度图。矢端曲线612表示当沿着二次贝塞尔区段115移动时速度和方向的改变。在开始时,在第一控制点101(其中p为0),二次贝塞尔区段115朝着144.782度(或-2.52693弧度)的负方向。这由极坐标描边中间位Ψ

图8示出了沿着二次贝塞尔区段115移动,方向最终以-45度(或-0.785395弧度)结束,该角度为矢端曲线612的角终点。-45度为Ψ

图9示出了确定链接的极坐标描边表示将需要的四边形的数量N,并且还表示了矢端曲线612上的点之间的间隔间隙的数量。如图9所示,间隙可以沿着矢端曲线612(线段)不均匀地间隔开;然而,仔细检查沿矢端曲线612的每个点的极角将确认极角的变化是均匀的。在该示例中,N为20。在图9中的极坐标描边表示620上还示出了构成二次贝塞尔区段115的描边曲面细分的20个四边形,以及定义了20个四边形的21个肋条。Δ

图10示出了极坐标描边中间位δ相对于矢端曲线612之间的对应关系。在该示例中,δ为+4.98912度(或0.0870766弧度),其表示矢端曲线612上的每两个连续点之间的均匀角。加号表示步进为逆时针方向。如极坐标描边中间位p所示,整个二次贝塞尔区段115处于[0,1]间隔,这表明二次贝塞尔区段115沿一个方向缠绕。

图11至图15表示路径100的其他链接,具有矢端曲线的矢端曲线图以及极坐标描边表示。对于图11至图15而言,和图6到图10一样,极坐标描边表示是渲染的描边曲面细分的示例。方法500可用于类似于图7至图10所示地用于二次贝塞尔区段115的生成图11至图15的极坐标描边表示。

图11示出了具有两个拐点120的三次贝塞尔区段,具有两个拐点120的三次贝塞尔区段的矢端曲线1112的矢端曲线图1110,以及极坐标描边表示1120。还示出了用于具有两个拐点120的三次贝塞尔区段的极坐标描边中间位及其值。对具有两个拐点120的三次贝塞尔区段的控制点103、104、105和106进行编号,以对应于组成路径100的相邻链接和链接序列。这样,第三控制点103是二次贝塞尔区段115的第三控制点,第六控制点106是具有0拐点的三次贝塞尔区段130的图12所示的第六控制点。对于路径100的每个链接,连续的控制点将继续通过图11至图15。

在图11中观察序列p如何具有四个元素[0、0.321664、0.79169、1]。p中的中间值0.321664和0.79169标识沿具有两个拐点120的三次贝塞尔区段的拐点的参数值。同样,序列Ψ具有指示拐点的极角的四个元素。因此,矢端曲线120从Ψ0(62.6502度)开始,对于第一拐点1101逆时针旋转到Ψ

图12包括具有零拐点的三次贝塞尔区段130,具有零拐点的三次贝塞尔区段130的矢端曲线1212的矢端曲线图1210以及极坐标描边表示1220。示出了具有零拐点的三次贝塞尔区段130的生成曲线和极坐标描边表示1220二者的控制点105、106、107和108。还示出了具有零拐点的三次贝塞尔区段130的极坐标描边中间位和值1230。由于具有零拐点的三次贝塞尔区段130没有拐点,类似图6中的参数序列p简单地是[0,1],并且当在极坐标描边表示1220中生成59个肋条和58个四边形时,旋转没有变化。

图13包括具有一个拐点的三次方贝塞尔区段140,具有一个拐点的三次方贝塞尔区段140的矢端曲线1312的矢端曲线图1310,极坐标描边表示1320以及具有一个拐点的三次贝塞尔区段140的极坐标描边中间位和值1330。示出了具有一个拐点的三次贝塞尔区段140的生成曲线和极坐标描边表示1320的控制点108、109、110和111。单个拐点的存在解释了为什么序列p具有三个元素,[0,0.412743,1]。来自[0,0.412743]的第一参数间隔到达单个拐点603以及来自[0.412743,1]的第二参数间隔。第一间隔以均匀的逆时针方向步长步进,直到到达单个拐点1303,然后以均匀的顺时针步长步进。极坐标描边表示1320示出极坐标描边如何有利地在梯度角度大小上采取均匀的步长,使得极坐标描边表示1320中间的大部分平坦区域具有比曲面细分结果的更多弯曲端的较少的四边形。

图14包括线段150,具有线段150的矢端曲线1412的矢端曲线图1410,极坐标描边表示1420和线段150的极坐标描边中间位和值1430。示出了线段150的生成曲线和极坐标描边表示1420二者的控制点111和112。观察极坐标描边表示1420如何有利地是单个四边形(N=1),因为沿着线段150没有梯度角变化(δ

图15包括圆弧160,具有圆弧160的矢端曲线1512的矢端曲线图1510,极坐标描边表示1520,以及圆弧160的极坐标描边中间位和值1530。示出了圆弧160的生成曲线和极坐标描边表示1520二者的控制点112、113和114。由于圆弧160没有拐点,所以参数序列p为类似图6和图12中的[0,1],并且当在极坐标描边表示1520中生成20个肋条和19个四边形时,旋转没有变化。

图16示出了根据本公开原理执行的渲染描边路径的方法1600的示例的流程图。该路径具有至少一个链接,并且可以具有多个链接和不同类型的链接。方法1600描述了处理路径的单个链接并且针对路径的每个链接执行。有利地,当采用并行处理器时,每个链接的处理可以并行执行。方法1600或方法1600的至少一部分可以由如本文所公开的极坐标描边系统200,渲染器300或渲染器400来执行。方法1600在步骤1605中开始。

在步骤1610中,获得路径的链接的表征。GPU可以根据接收到的有关链接的信息(例如从对路径执行预处理的CPU)来确定表征。在其他示例中,GPU可以例如从CPU接收表征。链接表征可以包括链接类型,索引,链接的生成方程以及链接的控制点。

在步骤1620中,根据表征计算出链接的极坐标描边中间值。可以如本文所公开的那样,利用弧切线从控制点计算出极坐标描边中间位。如上所述,极坐标描边中间位可以包括N,p,Ψ,δ,Δ

在步骤1630中,生成四边形序列以表示链接。可以使用极坐标描边中间位生成四边形的序列。在步骤1640中,使用四边形的序列来提供链接的描边曲面细分。图6至图15以及相应的以上讨论提供了针对不同类型的链接生成四边形并从四边形的序列提供链接的描边曲面细分的示例。方法1600继续到步骤1650并结束。如上所述,针对路径的每个链接执行方法1600,并且可以并行执行针对每个链接的处理。

图17示出了根据本公开原理的被配置为显示采用极坐标描边的路径的计算设备1700的示例的框图。路径100用作示例。计算设备1700可以是例如膝上型计算机,台式计算机,计算板,电视机(包括机顶盒)或智能电话。计算设备1700包括极坐标描边系统1710和屏幕1720。计算设备1700还可以包括通常包括在被配置为在其屏幕上显示图像的计算设备中的附加组件。极坐标描边系统1710可以被配置为作为极坐标描边系统200,渲染器300,渲染器400或根据本文公开的极坐标描边方法来运行。极坐标描边系统1710生成路径100的极坐标描边表示,并将极坐标描边表示提供给屏幕1720以显示路径100。屏幕1720可以是用于显示图像的计算设备的常规屏幕。

图18示出了根据本公开原理的被配置为利用极坐标描边打印路径的打印机1800的示例的框图。路径100用作示例路径。打印机1800包括极坐标描边系统1810,控制器1820和打印机构1830。打印机1800还可包括通常包括在被配置为打印图像的打印机中的附加组件。极坐标描边系统1810可以被配置为作为极坐标描边系统200,渲染器300,渲染器400或根据本文公开的极坐标描边方法来运行。极坐标描边系统1810生成路径100的极坐标描边表示并将极坐标描边表示提供给控制器1820。控制器1820采用极坐标描边表示来生成打印命令,以基于该极坐标描边表示引导打印机构1830打印路径100。打印机构1830可以是打印机的常规组件,例如用于打印图像的笔。在一张纸1840上示出了打印的路径100。

可以要求保护本公开的各个方面,包括发明内容中所指出的系统和方法。发明内容中提到的每个方面可以具有下面结合提出的从属权利要求的一个或更多个要素。

上述设备、系统或方法的一部分可以在各种数字数据处理器或计算机中体现或由其执行,其中,对计算机进行编程或存储一系列软件指令的可执行程序,以执行方法的一个或更多个步骤。此类程序的软件指令可以表示算法,并以机器可执行的形式编码在非暂时性数字数据存储介质上,例如磁盘或光盘,随机存取存储器(RAM),磁性硬盘,闪存和/或只读存储器(ROM),以使各种类型的数字数据处理器或计算机能够执行本文所述的一种或多种上述方法或功能、系统或设备中的一个、多个或全部步骤。数据存储介质可以是数字数据处理器或计算机的一部分或与之关联。

数字数据处理器或计算机可以包括一个或更多个GPU,一个或更多个CPU,一种或更多种其他处理器类型或其组合。数字数据处理器和计算机可以位于彼此相邻,位于用户附近,位于云环境,数据中心中或位于其组合中。例如,某些组件可以位于用户附近,而某些组件可以位于云环境或数据中心中。

GPU可以体现在单个半导体衬底上,该单个半导体衬底包括在具有一个或更多个其他设备(例如附加GPU,存储器和CPU)的系统中。GPU可以被包括在包括一个或更多个存储器设备并且被配置为与计算机的主板接口的图形卡上。GPU可以是与CPU共同位于单个芯片上的集成GPU(iGPU)。具有例如用于执行一个或更多个任务的必要逻辑和/或特征的配置的装置,例如被设计、构造或编程。

本申请涉及领域的技术人员将理解,可以对所描述的实施例进行其他和进一步的添加、删除、替换和修改。

相关技术
  • 用于矢量图形的极坐标描边
  • 生成可缩放矢量图形场景的至少一部分的复杂度矢量的方法和设备以及用于测试可缩放矢量图形场景的至少一部分在设备上的播放适宜性的方法和测试设备
技术分类

06120113006512