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 渲染的局限性

前言

出于对性能的要求, 实时渲染引擎有很多局限性.Godot的渲染器也不例外. 为了更有效地工作, 你需要了解这些局限性.

纹理尺寸限制

在台式机和笔记本电脑上,旧设备可能不支持大于 8192×8192 的纹理。你可以在 GPUinfo.org 上检查你的目标 GPU 的限制。

移动端GPU通常仅支持小于4096×4096的纹理. 此外, 一些移动端GPU不支持对非二的幂次大小的纹理进行重复(repeat)操作. 因此, 如果你想让你的纹理在所有平台上正确显示, 你应该避免使用比4096×4096大的纹理, 如果纹理需要重复, 应该使用两倍的大小.

要限制可能因为尺寸太大而无法渲染的特定纹理的大小,你可以将 Process > Size Limit 导入选项设置为大于 0 的值。 这将减少导入时纹理的尺寸(保留纵横比),而不影响源文件。

带状颜色

当使用 Forward+ 或 Forward 移动渲染方法时,Godot 的 3D 引擎在内部以 HDR 进行渲染。但是,渲染输出将色调映射到一个低动态范围,以便可以在屏幕上显示。这可能会导致可见的条带效应(banding),尤其是在使用无纹理的材质时。出于性能原因,与 Forward+ 相比,使用 Forward 移动渲染方法时颜色精度也较低。

使用兼容性渲染方法时,不使用 HDR,并且颜色精度是所有渲染方法中最低的。这也适用于 2D 渲染,在 2D 渲染中,使用平滑渐变纹理时可以看到条带。

有两个主要的方法来缓解条带:

  • 如果使用 Forward+ 或 Forward 移动渲染方法,请在高级项目设置中启用 Use Debanding 。 这会应用全屏去色带着色器作为后处理效果,并且非常经济合算。

  • 或者,将一些噪点烘焙到纹理中。这主要在 2D 中有效,例如用于渐晕(vignetting)效果。在 3D 中,你还可以使用一个`自定义去色带着色器 <https://github.com/fractilegames/godot-gles2-debanding-material>`__ 应用于你的 材质 。即使你的项目以低颜色精度渲染,此技术也能发挥作用,这意味着它在使用移动和兼容性渲染方法时也能发挥作用。

色彩带对比(增加对比度以提高可视性)

色彩带对比(增加对比度以提高可视性)

参见

参见 Banding in Games: A Noisy Rant (PDF) 获取更多有关条带效应的细节和解决方案。

深度缓冲精度

为了在 3D 空间中排序对象,渲染引擎使用了深度缓冲区(也称为 Z 缓冲区)。这个缓冲区具有有限的精度:在桌面平台上是 24 位,在移动平台上有时是 16 位(出于性能原因)。如果两个不同的对象最终具有相同的缓冲值,那么就会发生 Z 冲突(Z-fighting),此时移动或旋转相机,将观察到纹理来回闪烁。

为了使深度缓冲在渲染区域上更精确,你应该增加摄像机节点的 Near 属性。但是要小心,如果你设置得太高,玩家就会看穿附近的几何体。同时,还应该