筑牛网>数据>正文

Oculus工程师分享:常见渲染问题,及发现问题、解决问题的方法

2019-09-12 20:26:48 映维网 分享

查看引用/信息源请点击:映维网

常见的渲染问题,以及发现问题和解决问题的方法

映维网 2019年08月28日)关卡已经设计完成,asset已经准备妥当,而性能是稳定的72FPS。但当戴上头显时,一起都非常糟糕。对于Oculus软件工程师特雷弗·达什(Trevor Dasch)而言,他已经对这样的问题见惯不怪。日前,达什撰文介绍了常见的渲染问题,以及发现问题和解决问题的方法。下面是映维网的具体整理:

1. 随处可见的锯齿

加载游戏后,你的菜单看起来参差不齐,而环境充斥着仿佛轻轻一碰就会割破皮肤的齿状痕迹。到底发生了什么事情呢?

1.1 何谓折叠失真及其产生原因

这种锯齿是由于折叠失真造成:将图像光栅化至2D像素网格时出现的现象。每个像素只能有一种颜色,所以GPU会在绘制每个形状时选择像素正中心的颜色。当计算机渲染几何体时,它会将3D网格转换为一系列的2D三角形。这时,每个像素的中心要么位于其中心或要么不是,从而产生了锯齿图案。

我们如何避免这种情况呢?名为MSAA(多重采样抗锯齿)的技术可以确定每个像素的多个点是否位于多边形之内,然后根据覆盖点数的比例将一定比例的多边形颜色应用于最终渲染像素。 对于2X MSAA,系统将采样两个点,如果三角形覆盖两者,则应用100%的颜色;如果只有一个采样位于在三角形内,则50%的像素颜色来自所述三角形。对于所有采样,三角形的颜色仅确定一次。所以与单个采样相比,GPU的计算负载稍微更高。我们推荐4X MSAA,因为质量方面的增益值得付出这样的成本。

好了,你启用了MSAA,现在画面和角色看起来都十分平滑,但用户界面依然锯齿状十足。你不是说这将能够解决我的问题吗?

事实证明,MSAA不是一颗万能药。它不适用于透明对象,因为这个实现需要写入深度缓冲区,而透明度不支持。对于任何立体UI四边形,只需将它们变成不透明即可。这一举两得:你解决了混叠失真问题,同时消除了过度调用的情况。但如果背景是半透明或者角落圆滑,最简单的解决方法是在所有用户界面spires的周围添加透明像素边框。重新捣鼓美术是一份痛苦的差事,但最终效果会比MSAA清晰,因为每个边缘像素的alpha将与sprites的像素覆盖完全相关。例如,额外的一行透明像素可以产生巨大的差异,你只需在Unity TextMeshPro组件勾选“Extra Padding”复选框即可。

MSAA同时不适用于Alpha Cutout材质,因为每个像素都会发生裁剪。事实证明,有一种名为Alpha-To-Coverage的优秀工具,或者说Unity的AlphaToMask。通过设置alpha值,你可以告诉GPU要用像素覆盖的MSAA采样数量。例如,对于MSAA 4X,如果我希望进行50%的混合,我只需将alpha设置为0.5,而对于75%不透明度,alpha则为0.75。这听起来相当复杂,但实际上它使得交换alpha clip变得轻而易举,你只需令着色器输出从纹理采样中检索到的Alpha通道值。这是因为原始纹理像素是0或1 alpha,所以双线性插值的alpha结果直接对应于像素的覆盖范围。

如果你希望进一步探索这一主题,我强烈推荐你阅读技术美术本·格拉斯(Ben Golus)关于Alpha-To-Coverage的介绍文章。

2. 亮晶晶的纹理

现在已经解决了锯齿问题,但你依然会看到图像出现奇怪的闪光。发生了什么事情呢?

2.1 纹理折叠失真

与几何混叠失真类似,纹理混叠失真会在图像光栅化至2D像素网格时发生。当然,这完全可以避免。大多数纹理(Unity中的默认设置)是双线性采样。如果像素对齐,输出纹理将匹配源图像的像素布局:

如果对源图像的采样出现稍微的偏差(自由camera时经常会出现),则输出的每个像素将是源图像中四个交叠渲染目标中的结果像素的像素的混合。

这意味着,如果你采样的图像分辨率与渲染纹理的图像分辨率匹配,则每个像素将对输出图像像素具有100%的贡献(即使源纹理与目标渲染目标不完美对齐)。如果你采样的纹理分辨率低于输出图像,则源图像中的每个像素将对输出图像中的更多像素产生影响,但每个像素依然具有相同的贡献。但如果你正在采样的纹理分辨率高于渲染纹理,则系统不会以相同的程度对像素进行采样,并最终根本不对某些像素进行采样。这种不均匀的采样会导致混叠失真。

你如何利用这些信息呢?如果你的纹理处于固定距离,你可以选择完美的分辨率并以1:1像素分辨率匹配进行采样。例如,带有自定义图标的Unity Splash Screen。我已经看过太多存在混叠失真的屏幕图像,而实际上,只需确保纹理大小正确,画面看起来就会非常出色。另一方面,如果你可以接近或远离纹理(VR中99.9%的纹理是这样),你将根本无法选择一个完美的分辨率。

声明:本站部分资源来源于网络,版权归原作者或者来源机构所有,如作者或来源机构不同意本站转载采用,请通知我们,我们将第一时间删除内容。本站刊载文章出于传递更多信息之目的,所刊文章观点仅代表作者本人观点,并不意味着本站赞同作者观点或证实其描述,其原创性及对文章内容的真实性、完整性、及时性本站亦不作任何保证或承诺,请读者仅作参考。
编辑: