NV_path_rendering替代方案[关闭]

2024-05-09

我刚刚观看了 Siggraph 2012 的一个非常令人印象深刻的演示:

http://nvidia.fullviewmedia.com/siggraph2012/ondemand/SS106.html http://nvidia.fullviewmedia.com/siggraph2012/ondemand/SS106.html

我的问题是,这是一个专有的 Nvidia 扩展,在 GPU 上快速渲染贝塞尔路径的其他可能性是什么?或者,是否有希望这最终成为 OpenGL 标准的一部分?是否可以对这最终发生的时间进行估计?

您是否知道任何其他处理 GPU 路径渲染的项目(最好是开源的)?

编辑:原始论文现在有一个新的“附件”:

https://developer.nvidia.com/sites/default/files/akamai/gamedev/files/nvpr_annex.pdf https://developer.nvidia.com/sites/default/files/akamai/gamedev/files/nvpr_annex.pdf


现成的替代品

NanoVG (https://github.com/memononen/nanovg https://github.com/memononen/nanovg)似乎有一点吸引力(http://www.reddit.com/r/opengl/comments/28z6rf/whats_a_popular_vector_c_library_for_opengl/ http://www.reddit.com/r/opengl/comments/28z6rf/whats_a_popular_vector_c_library_for_opengl/)。所以你可以看看他们的实现。不过,我自己没有使用过 NanoVG,而且对其内部结构也很不熟悉;我所知道的是他们明确拒绝使用NV_path_rendering: https://github.com/memononen/nanovg/issues/25 https://github.com/memononen/nanovg/issues/25

正如我在上面的评论中已经提到的,NV_path_rendering 现已在 Skia 中实现,并且似乎也受到 cairo 的青睐,请参阅上面 tjklemz 的答案下面的评论,以获取有关这些详细信息的链接。 NV_path_rendering 的一个问题是它在某种程度上依赖于固定功能管道,因此与 OpenGL ES 2.0 有点不兼容,但有一个解决方法https://code.google.com/p/chromium/issues/detail?id=344330 https://code.google.com/p/chromium/issues/detail?id=344330

我会远离任何与 OpenVG 相关的东西。致力于此的委员会已于 2011 年解散;它现在基本上是一个遗留产品/API。 OpenVG 的大多数实现(包括 ShivaVG)也很古老,并且根据以下标准使用固定功能 OpenGLhttps://github.com/memononen/nanovg/issues/113 https://github.com/memononen/nanovg/issues/113如果你确实必须使用类似 OpenVG 的库,MonkVG似乎是免费的中维护得最好的[读作:最近被放弃的](代码:https://github.com/micahpearlman/MonkVG https://github.com/micahpearlman/MonkVG; 2010年公告http://www.khronos.org/message_boards/showthread.php/6776-MonkVG-an-OpenSource-implementation-available http://www.khronos.org/message_boards/showthread.php/6776-MonkVG-an-OpenSource-implementation-available)。他们声称它可以通过 OpenGL ES 1.1 和 2.0 在 Windows、MacOS X、iOS 和 Android 上运行。 [相当大的]警告是 MonkVG 并不是 OpenVG 的完整实现;请参阅其代码页上的“TODO”部分以了解缺少的内容。

我还发现开罗(和 pango)开发者 Behdad Esfahbod 编写了一个新的字形(即字体)渲染库(https://code.google.com/p/glyphy/ https://code.google.com/p/glyphy/): "GLyphy是使用 OpenGL ES2 着色语言的符号距离场 (SDF) 文本渲染器。 [...] GLyphy [...] 表示使用提交给 GPU 的实际向量的 SDF。这会产生非常高质量的渲染。” 据我所知,它还没有在开罗使用。(Behdad [从 Red Hat] 转到 Google,而开罗已经有一段时间没有发布版本了,所以也许 GLyphy 会去相反,谁知道...)我不确定该解决方案对任意路径的通用性如何。(在另一个方向上,NV_path_rendering 还可以渲染字体并使用字距调整,以防您不知道这一点。)如果您对 GLyphy 感兴趣,您绝对应该观看 Linux.conf.au 2014 上的演讲:https://www.youtube.com/watch?v=KdNxR5V7prk https://www.youtube.com/watch?v=KdNxR5V7prk如果您不熟悉(原始)SDF 方法,请参阅http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf

我发现 Mozilla 开发人员的演讲总结了当今使用的常见方法:https://www.youtube.com/watch?v=LZis03DXWjE#t=828 https://www.youtube.com/watch?v=LZis03DXWjE#t=828(时间戳是为了跳过介绍部分,他告诉你什么是 GPU。)

DIY(可能)

顺便说一句,很多路径渲染的东西都是命令/状态更改密集型的。我认为 Mantle、DX12 以及 OpenGL 的等价物(主要是扩展)http://gdcvault.com/play/1020791/ http://gdcvault.com/play/1020791/)可能会改善一点。

我想我还应该提到 Nvidia 已获得(至少)四项与 NV_path_rendering 相关的专利:

  • https://www.google.com/patents/US8698837 https://www.google.com/patents/US8698837
  • https://www.google.com/patents/US8698808 https://www.google.com/patents/US8698808
  • https://www.google.com/patents/US8704830 https://www.google.com/patents/US8704830
  • https://www.google.com/patents/US8730253 https://www.google.com/patents/US8730253

请注意,还有大约 17 个与这些“同时发布”相关的 USPTO 文件,其中大多数是专利申请,因此完全有可能从这些文件中授予更多专利。更新:谷歌没有完全链接all它们加在一起,所以还有一些已经被肯定地授予:

  • https://www.google.com/patents/US8786606 https://www.google.com/patents/US8786606
  • https://www.google.com/patents/US8773439 https://www.google.com/patents/US8773439

我不确定他们愿意在什么条件下许可这些......

我发现了 Kilgard 自己写的一个非常好的常见问题解答,内容是“矢量图形/路径渲染有什么特别之处”,不幸的是它被埋在了 OpenGL 论坛的某个地方。。对于任何考虑快速/黑客替代解决方案的人来说,这是一本非常有用的读物​​。

Direct3D 11.1 中还有一项新功能,可能很有用,因为 Microsoft 使用它来改进 Windows 8 中的 Direct2D 实现;它被称为目标独立光栅化(TIR)。除了微软已经申请了专利之外,我对此了解不多。http://www.google.com/patents/US20120086715 http://www.google.com/patents/US20120086715问题是,根据这场“口水战”,似乎只有 AMD GPU 真正支持它http://www.hardwarecanucks.com/news/war-of-words- Between-nvidia-and-amd-over-directx-11-1-support-continues/ http://www.hardwarecanucks.com/news/war-of-words-between-nvidia-and-amd-over-directx-11-1-support-continues/

Adoption

我无法预知 NVpr 何时会被非 Nvidia 采用,但我认为他们正在大力推动。这OpenGL 4.5 Nvidia 演示 http://www.ustream.tv/recorded/51255959/几乎已经被它接管了——至少就演示软件而言,我认为这有点愚蠢(因为它不是 OpenGL 4.5 核心的一部分)。 Neil Trevett 也不止一次报道过 NVpr(例如https://www.youtube.com/watch?v=eTdLwfOLoG0#t=2095 https://www.youtube.com/watch?v=eTdLwfOLoG0#t=2095) and Adobe Illustrator beta 2014正在使用它 http://on-demand.gputechconf.com/gtc/2014/video/S4867-path-fast-lines-adobe-illustrator.mp4以及谷歌的 Skia。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NV_path_rendering替代方案[关闭] 的相关文章

  • 移动/调整大小期间 opengl 窗口冻结

    我正在使用 LWJGL 开发游戏 移动窗口时 计划将来添加调整大小代码 渲染循环冻结 我希望它在移动时继续以某种方式运行 LWJGL 不包括 glutMainLoop Display属于OpenGL 而不是Java 相关代码 regular
  • glm 中矩阵值的顺序不正确?

    我开始使用GLM http glm g truc net通过 OpenGL 3 和 GLSL 进行数学运算的库 我需要正交投影来绘制 2D 图形 所以我编写了这个简单的代码 glm mat4 projection 1 0 projectio
  • 如何计算正切和副法线?

    谈谈OpenGL着色语言 GLSL 中的凹凸贴图 镜面高光之类的东西 I have 顶点数组 例如 0 2 0 5 0 1 0 2 0 4 0 5 法线数组 例如 0 0 0 0 1 0 0 0 1 0 0 0 世界空间中点光源的位置 例如
  • GL_COLOR_ATTACHMENT 有什么作用?

    我现在正在学习帧缓冲区 但我只是不明白颜色附件的作用 我了解帧缓冲区 第二个参数的意义是什么 glFramebufferTexture2D GL FRAMEBUFFER GL COLOR ATTACHMENT0 GL TEXTURE 2D
  • 按像素值偏移 gl_Position 或 gl_Vertex

    我的属性包含像素值 我想用这个属性值来偏移我的 gl vertex 问题是我的 gl vertex 以世界单位为单位 而 offset attribute 以像素为单位 如果我将屏幕尺寸作为统一发送 然后将像素转换为 1 到 1 值 并将其
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同
  • 如何在opengl中使用四元数绕屏幕中心旋转?

    我正在尝试实现轨迹球 轨迹球旋转 但我的中心有问题 回转 无论如何 我希望中心成为屏幕的中心 让我解释一下到目前为止我所做的事情 我创建了一个四元数 旋转轴 向量起点x向量结束 角度 向量起点 向量结束 从该四元数中 我创建了一个旋转矩阵
  • 如何为 glDrawElements() 指定每个图元的颜色

    我想渲染一个索引几何体 所以 我有一堆顶点和关联的排序索引 我在用glDrawElements 渲染 2 个四边形 如下所示 现在 我知道我可以使用glColorPointer 用于指定每个顶点的颜色 我的问题是 我可以指定吗每个基元的颜色
  • 如何在OpenGL中像这样绘制连接的带状线

    我想用以下方式绘制一系列连接线 GL LINE STRIP 我尝试过自己编写代码 但没有得到想要的结果 所以我来到这里 帮助我找出我错在哪里 这里我只给出我的draw 函数 glBegin GL LINE STRIP glVertex2f
  • Windows 上的 OpenGL SDK

    我正在尝试编写一个 OpenGL 应用程序 因此我安装了 Windows 7 SDK 然而 它似乎是OpenGL 1 1 define GL VERSION 1 1 1 如何找到我安装的 OpenGL 版本 dll 以及在哪里可以找到较新的
  • 如何在片段着色器中将 gl_FragCoord 转换为世界空间点?

    我的理解是 如果您有视图投影矩阵 屏幕宽度和屏幕高度的逆矩阵 则可以将 gl FragCoord 转换为片段着色器中世界坐标中的点 首先 你转换gl FragCoord x and gl FragCoord y通过分别除以宽度和高度 然后将
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • 我们如何在每次运行时使用不同的种子在 CUDA C 中生成随机数?

    我正在研究一个随机过程 我想在每次运行程序时在 CUDA 内核中生成不同的系列随机数 这类似于我们在 C 中声明 种子 时间 空 接下来是 srand 种子 和兰特 我可以通过内核将种子从主机传递到设备 但是 这样做的问题是我必须将整个种子
  • OpenGL 缓冲区、glFlush 和 glutSwapBuffers()

    使用之间有什么区别吗 glutInitDisplayMode GLUT SINGLE GLUT RGB with glFlush and glutInitDisplayMode GLUT DOUBLE GLUT RGB with glutS
  • 如何在 OpenGL 中绘制镜像某些东西的镜子?

    根据我的理解 要在 OpenGL 中进行镜像 您基本上需要绘制场景 然后将所有内容翻转并再次绘制 只是使其通过镜子可见 从而在镜子中创建完美翻转的图像 但我看到的问题是 执行此操作时 唯一可以看到其他镜子的镜子是在前一个镜子之后渲染的镜子
  • SDL 程序中颜色关闭

    我目前正在开发一个非常简单的游戏 使用纯 C 方法和 SDL 及其官方额外库 如 SDL image 和 OpenGL 现在 虽然我遇到了一些障碍 但我不知道为什么要这样做 绘制时颜色全部关闭 我目前在 Mac 上运行该程序 但如果我没记错
  • 新显卡上的 nvoglv32.dll 中的绘制调用崩溃

    几天前 由于一些硬件更改 我设置了计算机并安装了新的 Windows 8 副本 其中 我将显卡从 Radeon HD 7870 更改为 Nvidia GTX 660 再次设置 Visual Studio 11 后 我从 Github 下载了
  • 了解流式多处理器 (SM) 和流式处理器 (SP)

    我正在尝试了解 GPU 的基本架构 我已经阅读了很多材料 包括这个非常好的答案 https stackoverflow com a 2213744 2386113 但我仍然很困惑 无法得到一个好的图片 我的理解 GPU 包含两个或多个流式多
  • GLSL memoryBarrierShared() 有用吗?

    我想知道 memoryBarrierShared 的用处 事实上 当我查找屏障功能的文档时 我读到 对于计算着色器中任何给定的静态屏障实例 单个工作组内的所有调用都必须进入该实例 然后才能允许任何调用继续超出该实例 这确保了在给定的屏障静态
  • sRGB 纹理。它是否正确?

    我最近阅读了一些有关 sRGB 格式以及它们如何允许硬件自动对典型显示器执行色彩校正的文章 作为我阅读的一部分 我发现您可以使用普通纹理和返回结果上的 pow 函数来模拟此步骤 无论如何 我想问两个问题 因为我以前从未使用过此功能 首先 有

随机推荐

  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代
  • firebase批量更新和onWrite触发同步

    我在同步两个 Firebase 云函数时遇到问题 第一个函数对多个文档执行批量更新 第二个函数由onWrite触发这些文档之一 为了便于说明 假设我有两个文档A and B 在两个单独的集合中 第一个云功能更新两个文档A and B有消防库
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器
  • 在读/写二进制数据结构时访问位域

    我正在为二进制格式编写一个解析器 这种二进制格式涉及不同的表 这些表同样采用二进制格式 通常包含不同的字段大小 其中 50 100 个之间 大多数这些结构都有位域 并且在 C 语言中表示时看起来像这样 struct myHeader uns
  • 使用 Promise 语法编写同步代码有什么好处吗?

    有同步承诺这样的概念吗 使用 Promise 语法编写同步代码有什么好处吗 try foo bar a b bam catch e handleError e 可以写成类似的东西 但使用同步版本then foo then bar bind
  • 如何在 Caffe 的网络中出现多次损失?

    如果我在网络中定义多个损失层 从这些末端到网络的开头是否会发生多个反向传播 我的意思是 他们真的是这样工作的吗 假设我有这样的事情 Layer1 Layer2 Layer n Layer cls1 bottom layer n top cl
  • 为什么对gapi.client.drive.realtime.get的响应为空?

    下面是成功进行身份验证的页面 然后尝试使用drive realtime get 方法以三种方式获取现有实时文档的JSON 导出 console log 调用的结果显示在注释中 ID 为 EXISTING FILE ID 的文件存在 并且已使
  • 不明确的 XML 模式

    我正在尝试为 XML 生成一个非常简单的 XML 架构 类似于以下内容
  • c# 模拟 IFormFile CopyToAsync() 方法

    我正在对一个异步函数进行单元测试 该函数将 IFormFile 列表转换为我自己的任意数据库文件类列表 将文件数据转换为字节数组的方法是 internal async Task
  • 无法使 Polly 超时策略覆盖 HttpClient 默认超时

    我正在使用 Polly 重试策略 并且正如预期的那样 在重试过程中HttpClient达到 100 秒超时 我尝试了几种不同的方法来合并 Polly 超时策略 将超时移至每次重试而不是总计 但 100 秒超时仍然会触发 我读过大约 5 个
  • 如何在createQueryBuilder中使用通配符?

    在我的存储库类中 我使用 public function getItemsByTag tag qb this gt createQueryBuilder c gt select c gt where c tags LIKE bipolar
  • 在 OpenXML 中应用数字格式

    我正在尝试使用 OpenXML 从头开始 创建 Excel 电子表格 并且一切正常 将实际值转储到实际单元格中 但现在我正在尝试将数字格式应用于列 但遇到了问题 我有styles xml看起来像这样
  • 如何使盒子阴影显示在容器中的下一个元素上?

    请看这段代码 http codepen io Varin pen kkGgVd http codepen io Varin pen kkGgVd div class container div class outside2 div clas
  • 使用 php 变量更改 css 类

    这里需要您的帮助 正如标题所示 我正在尝试使用 PHP 变量更改 css 类 所以基本上我想创建一个回显某些代码的循环 但我希望第一个循环中的 div 类有所不同 它应该被隐藏 这是我为使问题变得清晰而编写的简化代码 我不知道错误在哪里 请
  • 如何在odoo中重写js函数

    我想加载 shop checkout url 函数是 odoo define change info order website sale change info order function require use strict oe w
  • 如何在 Angular 2 中订阅 DOMContentLoaded 事件?

    我正在将 UI 主题从 Angular 1 移植到 Angular 2 在第 1 个版本中 我有 viewContentLoaded事件 我想将其重新制作为 Angular 2 我正在尝试使用 HostListener DOMContent
  • 使用 Swift 解析框架

    有人尝试过将 Parse Framework 与 swift 一起使用吗 只要添加桥接文件 您就可以使用 swift 和 Objective C 代码 这是我的查询 从 Parse 返回的 对象 数组正确地包含了我的所有数据 但该方法在将
  • 为什么 .each 在我的 Rails 视图中完成后会重复数组? [复制]

    这个问题在这里已经有答案了 在我的 Rails 视图页面中 我有以下循环 它应该循环遍历我的 tag list 数组并打印每个标签 由于某种原因 它在打印每个单独的标签后会重复该数组 例如 这个数组有两个元素 ruby python 每个方
  • 使用 CDI+JSF 使会话失效不起作用

    我正在尝试在我的应用程序中实现注销 所以我这样做了 public String logout try FacesContext facesContext FacesContext getCurrentInstance ExternalCon
  • NV_path_rendering替代方案[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚观看了 Siggraph 2012 的一个非常令人印象深刻的演示 http nvidia fullviewmedia com sig