我想知道,这两个选项之间是否存在明显的性能差异? ?
#1 楼
正如TheBuzzSaw所说,它确实取决于很多事情,包括光栅化图形与矢量图形的实现。这里有一些高性能的矢量图形方法,这些方法是使用传统的光栅化方法呈现的。 >
Loop和Blinn演示了如何通过渲染单个三角形并使用像素着色器中的纹理坐标来表示像素在曲线上方还是下方,来绘制矢量贝塞尔曲线的二次方:
http ://www.msr-waypoint.net/zh-cn/um/people/cloop/LoopBlinn05.pdf
基本思想是将三角形角位置设置为3个控制点位置,然后将每个角的纹理坐标分别设置为(0,0),(0.5,0)和(1,1)。在着色器中,如果插值纹理坐标(x * xy)<0,则像素位于曲线下方,否则位于曲线上方。 :
https://www.shadertoy.com/view/4tj3Dy
关于第二种方法,这是Valve公司的一种方法,其中到形状的距离存储在纹理中,像素数据,允许使用纹理采样绘制矢量图形。解码非常简单,甚至可以仅使用alpha测试在固定功能的硬件上实现!
http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf
为了让您了解第二种技术的效果,此1024x768胡子图像是由具有单个颜色通道的64x32源图像生成的! (又名2KB未压缩)
我也在我的博客上写了一些有关它的内容:
http://blog.demofox.org/2014/06 / 30 / distance-field-textures /
以下是一些示例OpenCL代码,以显示其简单程度:这两种技术都非常快,并且使矢量和光栅化图形之间的界线有些模糊。它们使用栅格化技术进行渲染,但具有缩放/缩放属性,如矢量图形技术。
评论
$ \ begingroup $
另请参见valvesoftware.com/publications/2007/…
$ \ endgroup $
–互联网由catz制成
15年8月4日在19:00
$ \ begingroup $
是的,这是一种非常酷的技术,这是我提到的第二种技术,我也链接到上述相同的pdf。
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
15年8月4日在19:02
$ \ begingroup $
糟糕,很抱歉。
$ \ endgroup $
–互联网由catz制成
15年8月4日在19:03
$ \ begingroup $
可以在此处找到距离场的边缘抗锯齿的自适应解决方案:essentialmath.com/blog/?p=151。
$ \ endgroup $
– Jim Van Verth
2015年8月4日19:35
#2 楼
可能有。较少的技术解答:
如果您正在建立与图形编程无关的网站或其他应用程序,则答案可能是肯定的。 。底层的API将尝试猜测如何呈现它们并有效地对其进行缓存。但是,当您的应用程序运行并且API有时会错误地猜测时,它可能不得不重新渲染事物并影响性能。
更多技术信息:重新使用最新的GPU之一和库在GPU上绘制矢量路径,则所有位图纹理都由GPU渲染。
我将考虑将矢量图形渲染为纹理。在这里,性能将取决于您的工具链,您的应用程序是否根据矢量资产动态创建纹理以及是否以各种缩放级别查看图形。涉及两个问题:资源和纹理生成。如果您仅以静态大小显示图形,那么我会说没有区别,也许您的工具链可以在运行时将资源转换为位图图形。但是,如果它们以各种大小显示或在3D世界中显示,那么您将需要mip映射纹理,这会占用更多内存。如果您真的想看到具有更大纹理的保真度“接近”,它们将占用大量内存。让您的应用程序仅在必要时动态创建较大的纹理,这样可以节省内存,但在运行时成本很高,并且会影响性能。
我希望这会有所帮助。
评论
确实,这取决于许多因素。 NVIDIA为矢量图形提供硬件加速。你有看到它吗? developer.nvidia.com/nv-path-rendering-videos