C
抗锯齿
Qt 3D Studio 有多种方式来对抗在 3D 模型实时渲染中普遍存在的锯齿(即“锯齿形”)问题。每种技术都提供自己的优点和限制。可以将多种技术结合起来,但这可能会产生每种技术的性能成本。
锯齿的原因
在详细讨论不同的技术和技术之前,我们先说明锯齿的三个主要原因。之后是关于每个可能的解决方案的细节。了解哪种技术最适合您的问题,可以帮助您在视觉质量和充足的渲染速度之间取得平衡。
几何锯齿
默认情况下,所有几何图形一次渲染一个屏幕像素。如下左图所示,这可能会导致明显的尖锐边缘,特别是在高对比度的情况下(尤其是在这个黑白案例中最为明显)。
减少几何锯齿的有效技术(单击查看全尺寸)。
解决此问题的最正确的方法是使用多重采样抗锯齿,因为它只在需要时收集更多的几何细节。使用时间抗锯齿或渐进抗锯齿也可以正确地减轻问题。
使用FXAA或SMAA图像效果可以平滑边缘,但可能会误解细节。例如,注意下面方块的角落并不是完全正确的,或者圆的两侧稍微扁平了。
最后,在特定有限情况下,您可能可以使用轮廓透明度图来平滑所选几何体的边缘。
纹理锯齿
当纹理是子采样(显示的像素少于原始图)时,您可能会看到基于所选像素的不可接受的失真。当模型移动时,这个问题会加剧,因为可能会选择完全不同的像素。在下面的图片中,请注意 E3 和 F3 之间的线消失了,G3 和 H3 之间的线强烈出现,然后下一个 5 列消失,以此类推。
减少纹理锯齿的有效技术(单击查看全尺寸)。
最简单(也许最好)的解决方案是在图像纹理本身中使用米制映射。其他解决方案包括使用时间抗锯齿或渐进抗锯齿来从纹理中收集更多信息。
使用多重采样抗锯齿不会解决这个问题。使用FXAA或SMAA图像效果可以删除一些丑陋的失真,但这样做的方式显然在纹理可以被人预判时是不正确的。
图像效果在纹理可以被人预判时不工作得很好(单击查看全尺寸)。
反射
锯齿
与纹理锯齿相似,反射环境的材料会对图像进行子采样。在某些情况下——如左下角的反射线——当细节被跳过时,这个问题会变得明显。
减少反射伪影的有效技术(点击查看全尺寸)。
在这种情况下,最正确的解决方案是使用 时间抗锯齿 或 渐进抗锯齿 来查找额外的信息。使用 FXAA 或 SMAA 图像效果可以通过模糊它们来隐藏明显的闪烁问题,但在环境可预测的情况下,这可能会显得明显不正确。
一个简单可行的替代方案是将材质做得不那么光滑,更加粗糙。在这种情况下,环境自动使用较低分辨率的米普贴图,将锐利细节混合在一起。
抗锯齿技术
当原数据中的“信息”比我们可以在屏幕像素中表示的多时,会导致锯齿现象。抗锯齿技术分为三个类别
- 寻找单个像素真实额外信息的方法,并在相同的位置表示它们所有信息
- 尝试找到看起来不好的地方并掩盖问题的图像特效
- 艺术家使用的解决方案,试图绕过技术限制
寻找额外信息的技术
多采样抗锯齿
多采样抗锯齿(MSAA)在整个图层上运行。几何形状的边缘进行超采样,从而产生更平滑的轮廓。然而,这种技术对几何形状内部的材质没有影响。
- 使用方法:在时间轴调色板中选择一个图层,然后在检查器调色板中选择多采样抗锯齿属性为2x或4x。
- 优点:对几何轮廓有很好的影响,锯齿在这里通常最明显;与快速动画兼容。
- 缺点:使用成本可能较高;对纹理或反射问题没有帮助。
时间抗锯齿
时间抗锯齿在整个图层上运行。摄像头在帧之间进行轻微的震动,并将每一帧的结果与前一帧混合。
- 使用方法:在时间轴调色板中选择一个图层,然后在检查器调色板中启用时间抗锯齿复选框。
- 优点:由于摄像头的震动,可以找到其他情况下丢失的细节;对性能的影响很小。
- 缺点:快速移动的物体会产生一帧的阴影。
渐进抗锯齿
渐进抗锯齿(PAA)在整个图层上运行。当图层上的所有内容都停止移动时,摄像头在帧之间进行轻微的震动,并将每一帧的结果与前一帧混合。积累的帧越多,结果看起来越好。
- 使用方法:在时间轴调色板中选择一个图层,然后在检查器调色板中选择2x、4x或8x作为渐进抗锯齿属性。
- 优点:在静态图像中提供了丰富的细节,且没有性能成本。
- 缺点:如果有任何视觉变化发生,它不会生效;8x PAA大约需要八分之一秒来渲染(在60fps的情况下),这可能会引起注意。
米普贴图
米普贴图在存储与纹理的同时,存储了该纹理的一些预计算的较低分辨率的版本。每当纹理以较小的尺寸显示时,渲染系统会自动使用这些低分辨率图像(将许多细节组合成单个像素),并将需要时混合到结果中。
- 使用方法: 使用NVIDIA的免费纹理工具插件为Photoshop保存图像为DDS格式,并在界面中勾选“生成MIP贴图”。您可能需要调整图像大小,使其维度是2的幂,例如32,64,128,256等。有关更多详细信息,请参阅以下部分 优化图像/保存为DDS/使用MIP贴图。
- 优点: 极低的性能影响;极大地提高了纹理图像质量;鼓励您使用DDS格式,它比PNG格式加载和渲染更快。
- 缺点: 需要使用外部工具来优化图像;比没有MIP贴图的相同图像多使用33%的图形内存。
超采样抗锯齿
超采样抗锯齿(SSAA)作用于整个图层,甚至多个图层。上面没有提及或比较它,因为性能惩罚可能非常严重,并且因为它需要艺术家额外的努力。这种技术应作为最后的手段使用。
- 使用方法: 将图层另存为其自身的子演示。指定此演示的大小应大于您想要显示它的大小(每个维度约大1.4倍似乎能提供良好的结果)。将此演示添加到您的应用程序中(在
.uia
文件中)。在您希望显示演示的地方创建一个矩形,并在其上应用漫反射贴图。(您选择的图像的源和大小无关紧要。)在图像调色板中选择漫反射贴图图像,并将您的演示作为该图像的子演示。演示将以您指定的尺寸渲染,然后作为矩形的图像映射使用。在采样纹理时将使用双线性插值,为最终结果提供一种超采样抗锯齿形式。 - 优点: 提供无边界的全场景抗锯齿,没有动画的限制。
- 缺点: 当您的演示已被图形系统的填充率限制时(这种情况经常发生),可能会严重降低性能。
图像效果
FXAA
快速近似反走样(FXAA)是一种可以应用于整个图层的效果。它寻找与摄像机距离相似的像素,并平滑边缘。
- 使用方法: 通过打开项目调色板底部的效果库,并将
FXAA.effect
文件拖放到项目调色板中,将FXAA效果复制到您的项目中。然后,将FXAA效果从项目调色板拖放到您希望应用它的Timeline图层上。在检查器中没有可配置的参数。 - 优点: 相对经济,可以清理许多常见问题,以免它们分散注意力。
- 缺点: 因为它基于已经抗锯齿的图像,所以它所做的修复通常是通过模糊/隐藏额外信息来实现的,而不是添加更多信息(请参阅纹理抗锯齿示例中"G4"和"H5"之间的角落);它可能对细文本细节有负面影响(请参阅几何抗锯齿示例中的"小文本")。
SMAA
增强型亚像素形态学抗锯齿(SMAA)是一种可以应用于整个图层的效果。它试图比FXAA更智能地清理图像。
- 使用方法: 通过打开项目调色板底部的效果库,并将
SMAA.effect
文件拖放到项目调色板中,将SMAA效果复制到您的项目中。然后,将SMAA效果从项目调色板拖放到您希望应用它的Timeline图层上。在检查器中没有可配置的参数。 - 优点: 可以清理许多常见问题,以免它们分散注意力;比FXAA添加的错误细节更少。
- 缺点: 比FXAA更贵;作为一个基于图像的效果,它不能可靠地添加缺失的细节。
艺术家使用的作弊手段
轮廓透明度图
当你的模型有一个统一的轮廓时,你可以应用一个透明度图,使得几何图形的外边缘透明。使用透明度的渐变可以使物体的边缘平滑消失。然而,即使你的透明度图在一个像素的空间范围内直接从完全不透明变为完全透明——正如上面的几何示例所示——结果也会提供抗锯齿的边缘。这是因为图像图,包括透明度图,都使用双线性插值。
- 如何使用:构造一个使你的几何图形外轮廓透明的透明度图,并将其应用于材料的多重散射图或透明度图通道。
- 优点:可以显示比正常AA更柔和的过渡;可以针对模型而不是针对层进行应用。
- 缺点:如果物体的轮廓会发生变化,则不能使用;使用透明度的多个重叠模型会消耗填充率性能,这通常很宝贵。
修改材料或几何图形
如上图所示,对于反射锯齿,有时候问题的最简单解决办法是更改作品。如果你在模型的角上得到扰人的反光亮点,问问自己:我能使材料更柔和吗?我能修改几何图形以平滑或改变反射角度吗?我能编辑环境图来减少尖锐的过渡吗?
对于某些问题没有万能的解决方案。虽然我们的目标是生产出始终能产生令人愉悦、逼真的实时效果的产品,但偶尔修改你的艺术观点通常是最实际的获取最佳渲染的方法。
在某些Qt许可证下可用。
了解更多。