简体中文 | English

VR应用中出现走样的原因

    走样在普通的3D应用中就已经非常常见,反走样技术一直伴随着计算机图形学的发展一同成长。现在世界上已经存在很多反走样的技术,可以在维基百科找到。这些技术可以很大程度上地解决普通3D应用中的走样问题,而不必设计师、美术进行任何的修改,甚至大部分已经集成到硬件中,只要打开硬件开关即可。它们同样也能很大程度上解决VR应用的走样问题。然而由于VR应用的特殊性,使得开发人员需要另外做一些工作来解决新出现的走样问题。

    VR硬件的分辨率不够高。由于现在VR头戴式显示器普遍使用一块凸透镜来协助晶状体将像素点聚焦到视网膜,所以相当于隔着放大镜看屏幕。于是像素点被放大。限于技术原因,现在市面上大多数的VR头显都会产生一定的晶格效果(类似马赛克效果)。

    凸透镜的畸变和Timewarp。为了克服凸透镜的畸变问题,在VR硬件厂商各自的SDK中集成了反畸变算法。然而这个过程涉及到了纹理采样,于是引入了走样。同时为了降低延迟,需要将图像做一次旋转变换。于是和反畸变算法一样,需要进行纹理采样。当然一般来说,这两次的纹理采样被合并在了一起完成。

    图像的旋转不再是由鼠标或者键盘控制,而是跟随头戴显示器精确地旋转。于是会频繁出现非常细微的旋转动作。这样细微的动作也会把走样问题放大。

    归纳起来,走样出现在两个方面:几何体和纹理。下面将针对这两方面的走样,提供相应的避免或者解决办法。

几何体抗锯齿

    几何体的走样是出现在三角形光栅化过程中,几何边界跨越不同像素行或列时产生的锯齿和闪烁。


    首先需要打开抗锯齿算法。一般常用的抗锯齿算法是MSAA,许多硬件都有实现,只要简单打开即可。以Unity3D引擎为例,在导入DpnUnity插件后,DpnCameraRig的DpnManager中可以设置“Eye Texture Anti Aliasing”。然而在VR应用中这个方法虽然简单,但并不是那么有效,还会消耗较多的GPU资源。所以在移动设备上,建议设置为2x Multi-sampling,PC上可以设置为4x或8x。

    在《6002ZH Unity3D设置》中强调了要将Anti Aliasing关闭,这两者并不矛盾。因为前者设置的是RenderTexture的Anti Aliasing,后者设置的是FrameBuffer的Anti Aliasing。

    让美术介入,精心设计场景,尽量避免长的直线边界,可以避免令人不适的锯齿。如果非要出现这种图形元素时,如瞄准用的射线,方形物体。那么可以将这类几何体的边界加宽,加宽处进行Alpha Blending,有一个渐变的过渡,可以降低锯齿感。这实际是在模拟抗锯齿算法所做的事情。如下图,方块的横边被加宽了3个像素,并进行了渐变处理,而纵边仍然是硬直的边界。旋转之后,横边的锯齿感小于纵边。

    此外,美术还可以降低这些边界的色彩对比度,从而让人眼忽视锯齿感。

纹理反走样

    纹理走样是出现在纹理采样过程中,纹理中的线条穿越不同像素行或列时产生的锯齿和闪烁。要解决纹理走样问题,首先要确认生成了Mipmap,并使用了三线过滤。Mipmap可以通过硬件生成,而三线过滤则在Shader中实现。

    除了技术手段外,美术人员同样可以通过修改纹理来避免走样。首先美术人员可以将图片中清晰的边界柔化,在边界上有一个柔和的过渡可以很大程度上减少锯齿感。而避免过细的线条可以减少闪烁。

    在VR应用中,常常使用纹理来表现文字,所以文字的纹理同样有一些注意点。首先文字尽量大,锯齿和闪烁在文字细长的笔画上尤为明显。其次是在文字和背景之间做渐变处理,简单的方法是直接加高斯模糊,这样既加粗了字体,又能有效降低锯齿感。


Copyright © 2015deepoon.com, All Rights Reserved ICP: 15019466-1 (Shanghai) Shanghai Lexiang Technology Co., Ltd