返回首页

GPU 字体渲染 Slug:动态膨胀和 MIT 许可

用于从贝塞尔曲线进行 GPU 字体渲染的 Slug 算法获得了一个关键改进 — 动态膨胀,自动优化多边形扩展。在代码演进和移除过时优化之后,该方法的专利已在 MIT 许可下开放,允许在项目中免费使用。

Slug:带动态膨胀的 GPU 字体渲染 — 现采用 MIT
Advertisement 728x90

Slug 算法:GPU 字体渲染,动态扩张与 MIT 许可开源

2016 年开发的 Slug 算法,支持从贝塞尔曲线直接在 GPU 上渲染字体和矢量图形,无需纹理图集。过去十年,它不断演进,关键升级为动态扩张,其专利现以 MIT 许可免费开放使用。

Slug 算法的演进

Slug 算法解决实时文本渲染的可靠、快速和高品质挑战。可靠意味着无丢失像素或伪影,性能确保即使在 2016 年级别的游戏机上 FPS 稳定,品质则提供任意缩放或视角下的平滑曲线和锐利边缘。

自 2017 年在 JCGT 发表以来,代码经历了多次优化:

Google AdInline article slot
  • 移除条带分割优化,该优化虽加速大字形渲染,但导致着色器分歧并使数据量翻倍。
  • 放弃自适应超采样,因为其优势仅在勉强可读的小文本上显现,而动态扩张能有效处理小尺寸锯齿。
  • 重构多色表情渲染:用独立字形的边界多边形替换像素着色器循环,简化代码并提升性能。

这些改动精简了像素着色器,减少数据使用,并提升整体渲染效率。

动态扩张:自动优化

在引入动态扩张前,用户需手动设置固定偏移来扩展字形边界多边形。这会导致小尺寸锯齿伪影和大尺寸 GPU 资源浪费。动态扩张通过在顶点着色器中基于模型-视图-投影(MVP)矩阵和视口尺寸自动计算最优偏移,解决两者问题。

计算确保部分覆盖的像素中心落入多边形内,实现正确栅格化且无多余填充。公式源于视口空间半像素扩张,并以二次方程求解:

Google AdInline article slot
d = (s³t + s²√(u² + v²)) / (u² + v² - s²t²)

其中 s = m₃₀p_x + m₃₁p_y + m₃₃t = m₃₀n̂_x + m₃₁n̂_yuv 来自 MVP 参数和法线的导数。正号表示沿单位法线向外的偏移。

为保持原始字形尺寸,使用逆 2×2 雅可比矩阵调整 mipmapped 表面的采样坐标,将偏移转换到对象空间。

专利释放与许可

2019 年,作者为 Slug 算法申请专利,但现以 MIT 许可无限制释放。开发者可无法律障碍集成到项目中。Slug 已获 Activision、Adobe 和 Ubisoft 等公司许可,用于游戏、科学可视化、CAD 等,证明其实战价值。

Google AdInline article slot

关键要点

  • Slug 从贝塞尔曲线直接在 GPU 渲染字体和矢量图形,实现可靠、快速和顶级品质。
  • 动态扩张自动优化边界多边形扩张,消除伪影和资源浪费。
  • 算法演进:移除条带分割和超采样,简化表情渲染。
  • Slug 专利现以 MIT 许可免费用于商业和开源项目。
  • 已在游戏、科学可视化、CAD 等领域经受实战考验。

— Editorial Team

Advertisement 728x90

继续阅读