虚拟景观漫游中的优化技术应用解析

2021-02-19 03:13
中国新技术新产品 2021年23期
关键词:漫游顶点纹理

张 丹

(福州职业技术学院信息技术工程系,福建 福州 350108)

1 虚拟景观漫游概述

虚拟漫游,是虚拟现实技术的重要应用,通常应用在在建筑、教学、旅游、医学等诸多领域。虚拟现实漫游具有其独特的沉浸感、交互性、仿真操作等,是其他固定路线漫游或没有加护的其他漫游技术无法比拟的[1]。随着生产力和计算机科学技术的不断发展,各行各业对 VR 技术的需求量日益加剧,VR 技术在各行各业都取得了巨大进步,并逐步成为一个全新的科学技术领域。虚拟景观漫游,作为虚拟漫游的一个重要方面,将虚拟三维场景构建与虚拟漫游交互进行完美结合。被广泛应用在地产景观、小区景观、旅游景观的领域,给用户在身临其境欣赏景观的同时,还可以交互仿真进行一系列操作。

虚拟景观漫游,一直以来需要克服的重点问题在于,怎样平衡虚拟环境仿真度与渲染场景实时绘制之间的矛盾。在虚拟景观漫游中,用户看到的景象看起来距离较近,那么久需要场景的绘制尤其逼真。于是需要精细的三维模型来满足表现需要。同时,漫游运行却受到计算机硬件性能的约束,当三维模型建造的越复杂越精细,在渲染场景进行绘制时,要满足用户实时体验的良好效果,就越困难。VR 环境下的复杂场景建模要求具有真实感的模型[2],而且虚拟场景还必须实时生成,即要求三维场景刷新速度需要和用户视点变化的速度一致。那么通常会考虑,在三维场景模型的精确度和渲染场景的绘制速度之间取一个折中值,既能够满足必要的虚拟真实性,又不会产生绘制困难。于是,就需要各种优化技术,来配合场景虚拟交互漫游的需要,在尽可能地减少绘制计算量的同时,又不降低用户对虚拟仿真的体验感。

2 Unity 优化技术原理

对于虚拟仿真项目来说,与运行性能相关的,主要有两种计算资源,CPU 和GPU,在运行过程中它们相互合作,来控制项目的运行帧率与渲染分辨率,CPU 负责运行帧率,GPU 则负责渲染分辨率等。

Unity 软件的渲染统计窗口(Rendering Statistics Window ),显示了很多重要的渲染数据,例如FPS 帧频、批处理数目、顶点和三角网格的数目等。

表1 中列出了渲染统计窗口中显示的各个信息。

表1 Unity 渲染统计信息

对于CPU 来说,限制它的主要是Draw Call,当项目开始运行,准备对渲染画面进行绘制时,就需要调用Draw Call。通常的小区漫游或者是景观漫游,场景中通常分布着适当的水面和很多的树木丛林,在对水面进行渲染时,会使用材质和着色器,但在渲染树模时,需要适合树木的另外的材质和着色器,这时的CPU 需要重新准备绘制的顶点数据和需要重新设置材质,这个工作过程其实比较耗时。也就是说,构建一个场景,如果场景中的每个对象和物体都有各自不同的材质纹理等,就会产生非常多的Draw Call,从而影响运行的帧率,同时用户体验的交互性也会下降。

GPU 本身负责场景的整个渲染进程,它的处理开始部分是从CPU 传过来的三维模型数据,然后进行着色等工作,最后给屏幕上输出每个像素。于是知道了影响GPU 性能的因素有处理顶点的数目、屏幕的分辨率、显存等。

所以,优化技术的考虑有顶点优化,常用的有LOD 技术、遮挡剔除技术等;像素优化,常用的有控制透明物体、减少实时光照等;CPU 优化,减少Draw Calls,常用的有场景静态对象使用静态批处理;带宽优化,常用的有减少纹理大小等。

三维模型的LOD 技术和遮挡剔除技术可以同时减少CPU 和GPU 的负荷。CPU 可以提交更少的draw call,而GPU需要处理的顶点和片元数目也减少了。

3 优化技术应用解析

之后将三维场景导入Unity 进行虚拟漫游和仿真交互控制。常用的优化技术主要有以下几个方面。

3.1 优化几何体

虚拟景观漫游制作的流程中,第一步是创建场景三维模型,在进行三维建模的时候,需要注意在满足造型的基础上,减少模型中的三角面。为了尽可能减少模型中的顶点数目,建模人员往往需要优化模型的网格结构。常见的三维建模工具,通常会有一些相应的优化方案,来进行网格结构的自动优化。随着整体优化,场景中的每一个面片分配都仅为表达造型的有效面片[3]。

在Unity 的渲染统计窗口中,笔者可以查看到渲染当前需要的三角面片数目和顶点数目。在GPU 看来,有时需要把一个顶点拆分成两个或更多,这样是因为分离纹理坐标(uv splits)和产生平滑的边界(smoothing splits)。例如,创建一个长方体,长方体的6 个面有一些共用的定点,而在不同的面上,同一个顶点所对应的贴图纹理坐标也许并不相同。这时,GPU 会将这个顶点拆分成一些纹理坐标不同的顶点。GPU 本身只关心绘制顶点的数量。因此,笔者需要考虑的是怎样尽量去减少绘制顶点的数目。另外一条几何体优化建议是,移除不必要的硬边以及纹理衔接,避免边界平滑和纹理分离。

3.2 LOD 技术

LOD(Level of detail)细节层次优化技术与Mipmap 技术有些相似,后者是纹理金字塔,而LOD 是面向三维模型的模型金字塔,根据距离摄像机的距离远近,选择需要使用怎样精度的模型。LOD 技术的优势在于,可以在满足需要的情况下,尽可能地减少需要绘制的顶点数。那么它的缺点则是,由于资源导入的数量,需要占用较多的内存,因此在不同精度模式所处的距离问题上,需要调整好,否则可能会导致外观模拟的突变。在Unity 中,给需要使用LOD 技术的对象添加LOD Group 组件。

层次细节(Levels of Detail)是根据物体在场景中所占视图的百分比来调节不同复杂度模型的。当摄像机距离某物体较远的时候,采用低模,当摄像机距离较近的时候,采用高模。可以提高游戏渲染效率,但会占用更多的内存。

景观漫游场景中的树木就非常适合应用LOD,给树木对象添加LOD Group 组件。将高精度,中等精度,低精度的模型,拖拽到组件的各个级别上。选择需要控制的模型以及距离设置LOD 0 对应高精度模型,LOD 1 对应中等精度,LOD 2 对应低精度。

给树木添加LOD 组件之后,可以看到在景观场景漫游中,距离树木由近到远时,树木的外观编号以及网格简化过程如图1 所示。

图1 树木应用LOD 远近效果变化

3.3 遮挡剔除技术

遮挡剔除(Occlusion culling)在场景渲染中可以用来消除某些物体后面的看不到的物体,这样计算机资源就不会消耗在摄像机看不到的物体顶点上,从而提升整体的运行性能。遮挡剔除会使用一个虚拟的摄像机来遍历场景,从而构建一个潜在可见的对象集合的层级结构。在运行时刻,每个摄像机将会使用这个数据来识别哪些物体是可见的,而哪些被其他物体挡住不可见。使用遮挡剔除技术,不仅可以减少处理的顶点数目,还可以减少重复绘制,提高游戏性能。

打开渲染窗口的遮挡剔除(Occlusion Culling),选中需要遮挡剔除的物体,进行相应设置,然后进行烘焙,将Edit改为Visualize。这样当物体不在摄像机的可视范围内,不会对其进行渲染。

图2 是小区景观使用遮挡剔除后的俯视图,可以看到前后展示对比。

图2 景观场景应用遮挡剔除

同时,应用遮挡剔除前后,观察渲染统计窗口,会发现性能参数的前后对比变化明显,例如可以看到CPU 的处理时间由原来的25.7ms 变成了15.1ms,优化前的帧频是38.8f/s,而优化后帧频是66.3f/s,以及一些其他参数的优化变化。

3.4 其他优化技术

场景对象看起来使用了非常复杂高级的光照计算,但实际上是优化后的结果。首先将场景中运行不会发生移动的建筑物或障碍物设置成static,取消自动烘焙,调整好灯光效果,可以参照实时灯光的效果,将灯光模式设置成烘焙,在灯光设置面板中启用烘焙,烘焙完成会得到场景的光照烘焙图,满足静态物体光照。再将光照探针分布在场景中,满足动态物体光照。实时阴影同样是一个非常消耗性能的效果。不仅是CPU 需要提交更多的draw call, GPU也需要进行更多的处理。因此,应该尽量减少实时阴影,例如使用烘焙把静态物体的阴影信息存储到光照纹理中,而只对场景中的动态物体使用适当的实时阴影。

对于运行加载优化,用的最多的莫过于LOD 以及MipMap 多级渐远纹理技术,MipMap 又被称为“纹理贴图金字塔”。它的原理是提前用滤波处理来得到很多更小的图像,形成一个图像金字塔,每一层都是对上一层降采样的结果。这样在实际运行时,就能快速得到结果像素。当物体原理摄像机时,可以直接使用较小的纹理,纹理质量稍差,模糊感较强。物体靠近时适当替换较大纹理,纹理质量好,模糊感较少。以便给玩家呈现更精致的画面。那么当物体远离时,无须高精度纹理展示时,则替换低精度纹理,降低了显存带宽,减少了渲染。但是,为了适配多场景,比如远近多个不同的场景,提前生成几张精度不同的纹理,使用一定的空间用于存储这些多级渐远纹理,通常会多占用1/3 的内存空间,是利用空间换取时间的办法。

有些时候显示的分辨率也会对性能产生影响,尤其是在Android 系统使用时,当分辨率过高,而硬件性能却很低,也就是说硬件性能与分辨率要求不匹配时,就产生了运行效果较差的情况,所以硬件性能与渲染画面质量之间应该如何平衡是需要研究的问题。这是可以考虑使用Android 系统的硬件缩放技术,来提升运行效率,直接在Unity 中设置显示的分辨率,通过调用Screen.SetResolution()函数,函数的参数需要与开发时UI 分辨率进行等比例计算,可能面临调大或调小的情况。设置运行分辨率后,程序原有的代码逻辑不会受到影响,而运行效率确实提高了,并且能观察到帧频的显著提高。使用这种方法如果遇到偶尔屏幕显示异常如横竖屏错乱的问题,可以考虑到Java 层去修改UnityPlayerNativeActivity.java,调用getResources().getDisplayMetrics()来修复问题并得到正确的显示效果。

3.5 表现效果优化

给场景对象添加后处理组件post process volume,勾选其中的is global 作用全局,之后在相机中同样方式添加一个post process Layer 组件,回到后处理上,点击new 来新建一个配置,点击add effect 可以添加各种处理效果。

给场景中的树丛应用后处理的部分效果,抗锯齿Antialiasing、太阳射线光SunShafts、镜头暗色晕圈VignetteAndChromaticAberration、柔光Bloom、色彩校正曲线ColorCorrectionCurves。

可以看到场景应用后处理以上效果后的,前后渲染效果对比如图3 所示。在实际应用中,可以根据需要,选择合适的后处理效果应用,以达到不同的环境渲染效果。

图3 应用后处理技术前后效果对比

4 结论

虚拟景观漫游是虚拟漫游的一个重要方面,比如在房地产的应用领域中,通过地产景观虚拟漫游,用户可以身临其境的观赏到优美的小区环境。

在虚拟景观漫游项目创建过程中,从三维几何体优化到LOD 优化等技术的使用,以及使用后处理效果,对提高虚拟漫游整体运行性能以及用户体验效果,有非常重要的意义。

猜你喜欢
漫游顶点纹理
过非等腰锐角三角形顶点和垂心的圆的性质及应用(下)
使用纹理叠加添加艺术画特效
关于顶点染色的一个猜想
霹雳漫游堂
TEXTURE ON TEXTURE质地上的纹理
NASA漫游记
消除凹凸纹理有妙招!
边走边看:漫游海底 梦想成真
一个人在顶点