2个版本
0.1.1 | 2024年7月26日 |
---|---|
0.1.0 | 2024年7月15日 |
#59 in 渲染
178 每月下载量
67KB
1.5K SLoC
Kaku
一个用于rust+wgpu的文本渲染包,具有使用距离场的功能。
特性
- 渲染OpenType字体(使用ab_glyph加载)。
- 简单、非SDF文本渲染以提高性能(见“性能”)。
- 基于SDF的文本渲染,用于高质量的放大和快速轮廓。
距离场的作用是什么?
不深入细节,距离场是一种以允许高质量放大、减少内存使用的方式来表示形状(如字体中的字符)的方法。它还允许你以非常高效的方式渲染某些效果,例如轮廓。
性能
当你使用kaku创建一个文本对象时,它必须为文本中的每个新字形生成距离场。这些字段被缓存,因此每个字形每个字体只需发生一次。计算这个纹理需要一小部分但并非微不足道的时间(在我的测试中约为1ms,但这也将取决于你的计算机和字形),因此如果这是一个问题,你也可以不使用sdf来渲染文本。
你也可以预先计算你将要绘制的字符的距离场。例如,对于一款英文游戏,你可以在启动加载屏幕中缓存所有字母数字字符。
一旦创建了一个文本对象,将其渲染到屏幕上的速度与使用sdf和不使用sdf的速度大致相同。
示例
以下是演示示例的截图,展示了kaku可以做到的一些事情
此示例显示了相同的文本
- 没有SDF渲染,仅使用ab_glyph提供的纹理。
- 使用SDF渲染。
- 使用SDF渲染,具有大轮廓。
- 使用SDF渲染,放大2倍。尽管它被放大,但仍然清晰流畅!
依赖项
~8–40MB
~621K SLoC