text - 为什么文本在游戏引擎中看起来如此糟糕?

标签 text godot rasterizing

我会选择 Godot,因为这是我最近一直在使用的,但我在 Unity 上也看到了相同(或至少相似)的问题。

当我将文本添加到我的游戏世界时(例如将文本添加到 UI 按钮以添加具体示例)默认情况下文本是一团乱麻。我必须非常小心地为每种字体选择一个确切的大小,然后仔细缩放它以确保它可以轻松阅读。这与记事本甚至控制台终端形成对比,在后者我可以使用几乎任何大小的几乎任何字体,而且一切看起来都很好。

我假设它与光栅化或引擎的其他一些基本假设有关,但这似乎是很久以前解决的问题。我错过了什么?为什么显示文本这么难?

最佳答案

文本很难,因为许多重要细节的大小与像素大致相同。例如,构成一个字母的笔画的宽度可能(理想情况下)比一个像素的宽度小一点或多一点。通常一个字母的位置在两个像素之间,要让它看起来和直接位于一个像素上的同一个字母一样好是很困难的。文本有很多锐利、高对比度的边缘。这些尖锐的边缘代表极高的空间频率,通常不会出现在自然图像中。图形引擎用于缩放纹理的算法最适合“自然”图像,例如照片,它们的空间频率要低得多(即使那样通常也需要一些抗锯齿)。

某些图像格式包含“渲染意图”以区分这些类别,以便图形引擎可以将算法切换到最适合图像类型的算法。但这种功能在 2D 引擎中比在 3D 游戏引擎中更常见。

文本在 2D 中看起来不错,因为 2D 图形引擎有很多专门用于在像素网格上很好地渲染文本的代码。字体提示、字体平滑和子像素渲染是 2D 引擎使用的一些技术。 3D 引擎具有类似命名的技术,但它们通常未针对文本进行优化。

如果您想深入了解渲染文本的问题(和解决方案),The Raster Tragedy是一个非常全面的资源。

要使文本在 3D 引擎中看起来不错,可以使用自定义着色器技术,例如预过滤 MIP 贴图或符号距离字段。

一般来说,如果您打算简单地将文本纹理贴到四边形上,那么您希望该纹理的分辨率至少与其投影到的屏幕区域一样大。您可能还想为文本纹理尝试不同的抗锯齿设置,而不是用于游戏中的其他纹理。

关于text - 为什么文本在游戏引擎中看起来如此糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66282386/

相关文章:

swift - 如何在 SWIFT 中在圆圈上绘制文本

python - 当第一个逗号出现时,包含 25 个以上单词的行被分割

Godot 2D WASD 机芯

godot - 如何查看事件中鼠标是否按下或屏幕被触摸?

c++ - 沿光栅化圆弧遍历像素

javascript - 绘制一个三 Angular 形到像素数组

python - 栅格化 matplotlib 轴内容(但不是框架、标签)

c# - 双击文本区域或文本框时指定突出显示行为?

python - 如何删除非 ASCII 字符但保留句点和空格?

game-engine - Godot - set_fixed_process 函数