Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

3D 文本

前言

项目中不仅会要在 HUD 中使用文本,有时也会需要把文本作为 3D 场景的一部分。Godot 为此提供了两种方法。Label3D 节点以及 MeshInstance3D 节点的 TextMesh 资源

此外,Godot 还可以使根据 3D 顶点在相机上的位置来定位控制节点成为可能。在 Label3D 和 TextMesh 不够灵活的情况下,这可以用作 "真实的" 3D 文本的替代方案。

参见

你可以使用 3D 标签和文本演示项目 查看3D文本的实际效果。

这个页面不会涉及如何在 3D 环境中显示 GUI 场景。有关如何实现这个功能的信息,请参考GUI in 3D 演示项目。

Label3D

../../_images/label_3d.png

Label3D 的行为类似于 Label 节点,只不过是换到了 3D 空间中。与 Label 节点不同,此 Label3D 节点继承 GUI 主题的属性。不过,外观还是可定制的,使用的也是与 Control 节点相同的字体子资源(包括对 MSDF 字体渲染的支持)。

优势

  • Label3D 的生成速度比 TextMesh 快。虽然两者都使用缓存机制,只渲染一次新字形,但 Label3D 的(重新)生成速度仍然更快,尤其是对于长文本。这可以避免在低端 CPU 或移动设备上玩游戏时出现卡顿。

  • Label3D can use bitmap fonts and dynamic fonts (with and without MSDF or mipmaps). This makes it more flexible on that aspect compared to TextMesh, especially for rendering fonts with self-intersecting outlines or colored fonts (emoji).

参见

有关配置字体导入的指南,请参阅 使用字体

限制

默认情况下,Label3D 与 3D 环境的交互有限。 着色 标志启用时能够接受光照、被光源着色。但是,即使在 Label3D 的 GeometryInstance3D 属性中将 阴影投射 设置为 开启 ,它也不会投射阴影。这是因为该节点内部生成具有透明纹理的四边形网格(每个四边形一个字形),并且具有与 Sprite3D 相同的限制。当多个 Label3D 重叠,尤其是当它们具有轮廓时,透明度排序问题也会变得明显。

这可以将 Label3D 的透明度模式设置为 Alpha Cut 来缓解 ,但代价是文字渲染不够流畅。Opaque Pre-Pass 透明度模式可以保持文本的流畅性,同时允许 Label3D 投射阴影,但仍会存在一些透明度排序问题。

有关详细信息,请参阅 3D 渲染限制页面中的 Transparency sorting 部分。

Text rendering quality can also suffer when the Label3D is viewed at a distance. To improve text rendering quality, enable mipmaps on the font or switch the font to use MSDF rendering.

TextMesh

../../_images/text_mesh.png

TextMesh(文本网格)资源和 Label3D 类似,都能够在 3D 场景中显示文本,使用的是相同的字体子资源。但 TextMesh 生成的不是透明四边形,而是代表字形轮廓的 3D 网格,具有和网格一样的属性。因此,TextMesh 默认是开启着色的,会