#wgpu #字体渲染 #距离场 #图形 #文本

kaku

使用距离场进行文本渲染的wgpu包

2个版本

0.1.1 2024年7月26日
0.1.0 2024年7月15日

#59 in 渲染

Download history 90/week @ 2024-07-11 21/week @ 2024-07-18 148/week @ 2024-07-25 6/week @ 2024-08-01

178 每月下载量

MIT 许可证

67KB
1.5K SLoC

Kaku

Crates.io Version docs.rs

一个用于rust+wgpu的文本渲染包,具有使用距离场的功能。

特性

  • 渲染OpenType字体(使用ab_glyph加载)。
  • 简单、非SDF文本渲染以提高性能(见“性能”)。
  • 基于SDF的文本渲染,用于高质量的放大和快速轮廓。

距离场的作用是什么?

不深入细节,距离场是一种以允许高质量放大、减少内存使用的方式来表示形状(如字体中的字符)的方法。它还允许你以非常高效的方式渲染某些效果,例如轮廓。

性能

当你使用kaku创建一个文本对象时,它必须为文本中的每个新字形生成距离场。这些字段被缓存,因此每个字形每个字体只需发生一次。计算这个纹理需要一小部分但并非微不足道的时间(在我的测试中约为1ms,但这也将取决于你的计算机和字形),因此如果这是一个问题,你也可以不使用sdf来渲染文本。

你也可以预先计算你将要绘制的字符的距离场。例如,对于一款英文游戏,你可以在启动加载屏幕中缓存所有字母数字字符。

一旦创建了一个文本对象,将其渲染到屏幕上的速度与使用sdf和不使用sdf的速度大致相同。

示例

以下是演示示例的截图,展示了kaku可以做到的一些事情

Example of kaku rendering text

此示例显示了相同的文本

  • 没有SDF渲染,仅使用ab_glyph提供的纹理。
  • 使用SDF渲染。
  • 使用SDF渲染,具有大轮廓。
  • 使用SDF渲染,放大2倍。尽管它被放大,但仍然清晰流畅!

依赖项

~8–40MB
~621K SLoC