基于LinkVR的沉浸式复杂场景构建与优化

2021-10-19 13:28项朝阳乔樑钟瑜段丹萍贺昉
现代信息科技 2021年5期
关键词:沉浸式虚拟现实技术

项朝阳 乔樑 钟瑜 段丹萍 贺昉

摘  要:基于LinkVR适配技术,构建沉浸式虚拟现实场景;针对场景的布局、结构和特点,运用Profile等相关手段进行性能分析,寻找主机资源消耗的关键点;通过烘焙、遮挡剔除和LOD等技术手段,对虚拟场景进行优化。文章以虚拟ICU为案例,叙述了一种沉浸式场景的构建方式,总结了对沉浸式复杂场景进行性能优化的关键技术。

关键词:虚拟现实技术;沉浸式;复杂场景构建

中图分类号:TP391      文献标识码:A 文章编号:2096-4706(2021)05-0093-05

Construction and Optimization of Immersive Complex Scenario Based on LinkVR

——Take the Construction of a Virtual ICU Scenario as an Example

XIANG Chaoyang,QIAO Liang,ZHONG Yu,DUAN Danping,HE Fang

(Guangdong Food and Drug Vocational College,Guangzhou  510520,China)

Abstract:LinkVR adaptation technology can be used to construct an immersive virtual reality scenario. Aimming at the layout,structure and characteristics of the scenario,the key points of host resource consumption would be found with the performance analysis using Profile and other related means. The virtual scenario is optimized by baking,occlusion elimination and LOD and other technology means. In this paper,taking virtual ICU as an example,the construction way of immersive scenario is narrated,and the key technology for the performance optimization of immersive complex scenarios is summarized.

Keywords:virtual reality technology;immersive;complex scenario construction

0  引  言

在过去几年里,一股沉浸式体验热潮正在世界各地蔓延。制作精良的沉浸式场景能带来颠覆感官的体验效果,但对主机资源的消耗也是巨大的。随着场景复杂度的提升,如何控制和减少主机资源的消耗,确保程序的流畅运行,对沉浸式复杂场景的构建至关重要。营造沉浸式场景的关键在于确保足够的FPS,虚拟场景里的FPS与动画的帧类似,只是虚拟场景里的图像被画到了屏幕,画一帧到屏幕被称为渲染一帧,渲染的速度以每秒渲染的帧数来衡量。现在大多数虚拟场景都是以60 FPS为目标,当低于30 FPS时,图像可能会卡顿,用户体验下降。对于沉浸式场景,更要确保足够而稳定的FPS才能拥有良好的体验效果。

本案例设计的虚拟ICU包括病房(分为普通病房和器官移植病房)、护士站、治疗室、医护办公室、仪器室、库房、打包间、消毒间、污物处理间,以及病人通道、医护通道和探视通道等区域,每个区间配置各种医疗设施,病房内配有多功能吊桥、心电监护仪、呼吸机、除颤仪、输液泵、注射泵及空气层流过滤装置等设备。对于这样一个沉浸式场景的构建,从模型构造、渲染模式选择、抗锯齿、烘焙处理、遮挡与剔除和LOD等环节均必须采取相应的技术手段和措施,降低资源消耗,提升渲染效率,确保虚拟场景流畅并稳定地运行。

1  工程文件创立

1.1  场景模型构建

影响沉浸式场景最終运行速度的三大因素为VR场景模型的总面数、VR场景模型的总个数、VR场景模型的总贴图量。贴图像素影响显示的清晰度,其数量受到场景需求的影响,故着重控制VR场景模型的总面数和VR场景模型的总个数。ICU是一个对温度、湿度和空气洁净度都有严格要求的独立空间,包括普通病房区、器官移植区和医护工作区域,通过病人通道、医护通道和探视通道与外界连通,如图1所示。

虚拟ICU建模分为建筑区域、基础设施和治疗设备三个部分,遵循VR场景一般性的建模规范和标准实施建模,基础建模完成后,模型个数为260,面数达25万,远远超出虚拟仿真的极限范围。为大幅降低计算机的资源消耗,采购以下措施对基础模型进行处理:

(1)模型个数的精简。将相同材质的物体分别赋好材质,调整好各自的贴图坐标,再将这些相同材质的物体进行合并以减少模型个数。在3dsMax里,主要采取两种方法合并模型,一是采用Attach(合并)命令精简模型个数;二是利用Collapse(塌陷)命令精简模型个数。

(2)模型面数的精简。从以下方面对模型进行精简和优化,包括Plane(面片)模型面的精简、Cylinder(圆柱)模型面的精简、Line(线)模型面的正确创建、曲线形状模型的创建及面数精简、删除模型之间的重叠面、删除模型顶部或底部看不见的面、删除物体之间相交的面、单面窗框的创建、复杂镂空模型的表现方法;另外,删除人物、被子和枕头等复杂模型里看不见的面,移除多余的点。

上述精减工作完成后,模型个数降到70个,面数减至15万。

1.2  Unity工程创立

1.2.1  模型导入

将从3dsMax导出的FBX文件导入Unity工程,为地面、墙体和大型设备等设置碰撞体,主摄影机添加漫游脚本,设置刚体和碰撞体,实现碰撞检测,如图2所示。

1.2.2  灯光布置

虚拟ICU场景面积大、房间多,且包含大量医疗设施和器械模型,为获得均匀的光照效果,需布置大量的灯光,导致场景渲染压力过大,当改变场景查看视角时,出现强烈的滞后和顿挫感。为兼顾运行效率和渲染效果,本案例采用两种技术手段进行处理,一是对灯光进行烘焙,降低实时渲染压力;二是在场景大门、可控灯光等关键位置布置混合模式灯光,启动阴影,并限制其只照射在地板、墙体等呈现阴影的物体上,在控制资源消耗的前提下使场景生动一些。

1.2.3  烘焙处理

通过烘焙技术将反射光和阴影记录到模型中,变成新的贴图,在程序运行时,显卡和CPU不需要对环境光进行运算,大幅节约了CPU的资源。在工程里Edit-Project Settings- Quality,Pixel Light Count下设置场景灯光总数,参与烘培的物体选择“Lightmap Static”和“Generate Lightmap”,参与烘培的灯光勾选“baked”且Spotlight不设置阴影,打开Window-Lighting-Settings,勾选“Auto Generate”,当调整灯光后会自动更新烘焙贴图,这将有利于后期对灯光的调整和优化,点击“Generate Lighting”后,在Assets下将自动生成一个文件夹LED-roam,此处存储烘焙产生的贴图。

2  沉浸式场景构建

2.1  LinkVR简介

LinkVR是一款虚拟现实内容适配软件。该软件提供了UnitySDK以及用于沉浸式环境VR内容开发的接口(C#的APIs),可帮助Unity3D内容创作者和体验者将制作的内容适配到虚拟现实沉浸式环境中,支持虚拟现实沉浸式环境、立体显示、追踪交互、三维手柄和多通道集群系统,提供了一个可视化的界面用来配置硬件环境和管理VR内容,搭配光学追踪系统对内容进行沉浸式交互体验,也可以帮助用户针对头戴式显示器进行基于真实物理空间的定位,支持多人虚拟与现实的相对位置关系一致的本地协同交互。

LinkVR软件分为LinkVR客户端、LinkVR监听端和LinkVR Unity SDK三个部分,客户端主要用于针对虚拟现实沉浸式环境的硬件进行配置,包括实际屏幕的数量、宽度和高度、空间位置和旋转角度、追踪系统的IP地址等。生成配置文件后,用户可以选择生成后的配置文件,一键分发、启动和关闭所制作的VR内容,同时,也可用于基于真实物理空间下的本地多人协同空间定位和内容体验。监听端主要用于监听和执行客户端启动或关闭VR内容的指令,接收客户端分发过来的配置文件和VR内容。Unity SDK主要用于Unity开发人员在Unity中导入插件调用相关接口进行虚拟现实沉浸式环境内容和大空间多人协同内容的创作和二次开发。

2.2  环境与配置

采用LED三维立体屏构建主动立体沉浸式显示系统。硬件配置LED三维成像立体屏、3D立体信号发射器、视频处理器,启动虚拟现实桥接软件、虚拟现实渲染软件和G-Motion光学位置追踪系统,使主动立体显示系统激活,VR交互手柄和3D主动立体眼镜处于动态跟踪状态。

系统工作站CPU为:Intel Xeon E-2176G 6C CPU 3.70 GHz处理器;芯片组为:英特尔C612高速芯片组;内存为:DDR4 2666 RDIMM ECC  2×16 GB;显卡为:NVIDIA Quadro P5000 16 GB配置;硬盘为:256 GB SSD+1 TB 3.5英寸 7200 rpm硬盘。

软件运行Windows10,Microsoft DirectX,Microsoft .Net

Framework 4.5.2或以上版本,Microsoft Visual C++ 2013 Re-

distributable (x64),Microsoft Visual C++ 2015 Redistributable (x64),Unity2017.4.12。

2.3  LinkVR導入Unity工程

将LinkVR的.unitypackage文件导入ICU的Unity工程,构建LED三维主动立体沉浸式显示场景。将LinkVR里的FPSController.prefab拖到场景中,在Hierarchy面板中选中FPSController物体下的LinkVRSystemRoot物体,修复不满足LinkVR要求的相关项目设置。内容包括:

(1)将PlayerSettings中的显示分辨率对话框选项设置为Disabled。

(2)将PlayerSettings中的捕获单屏设置为false。

(3)将PlayerSettings中的MTRendering(多线程渲染)设置为false。

(4)将PlayerSettings中的VR支持打开,并将设备设置为Stereo Display(non head-mounted)。

(5)将QualitySettings中的抗锯齿属性设置为Disabled。

另外,由于LinkVR与Unity自带的抗锯齿功能存在冲突,故关闭Unity自带的抗锯齿功能。

2.4  渲染模式选择

LinkVR主动立体支持DirectX和OpenGL两种渲染模式,由于OpenGL在系统方面的兼容性更好,本案例采用LinkVR Unity SDK默认并推荐的渲染方式OpenGLCore,将QualitySettings中的抗锯齿属性设置为不开启,因Unity默认的抗锯齿会破坏OpenGL渲染导致应用程序在打开后黑屏。

2.5  Post Processing抗锯齿

Unity自带的抗锯齿功能关闭,故导致三维图像品质大幅下降,为解决该问题,使用外部“Post Processing”插件取代Unity平臺抗锯齿功能。将“Post Processing”导入工程,为FirstPersonCharacter添加“Post Processing Behaviour”脚本,新建文件“Post Processing profile”,选择New Post-Processing Profile,勾选Antialiasing,Method选择“FAA”或“TA”,并将New Post-Processing Profile拖拽至“Post Processing Behaviour”脚本的变量里。

2.6  交互实施

LinkVR中,设有默认的手柄事件并开启了手柄射线,脚本加载在LinkVR的Joystick.prefab上,当LinkVR系统初始化时,会默认加载该手柄。在虚拟现实沉浸式环境中,如需获取来自手柄的输入,实施三维定位和确发。首先,在LinkVR中,启动StreamingAssets->VRPN->VenomxListener.exe,该程序会自动监听Venomx手柄的按键事件和摇杆轴事件。其次,LinkVR已设置“Clickable”和“Selectable”,分别为点击和抓取的响应层级,故在绑定碰撞的前提下,还要为空间内需触发的物体添加“Clickable”层,需拾取的物体添加“Selectable”层。并在触发控制脚本内添加以下代码,以便手柄通过LinkVR将触发信息传递给应用程序:

using LinkVR;

void OnClick(){

BZ_open = Pass_open;

}

如果通过UI交互,需新建UI的Canvas,并选择平面或立体模式,在Canvas下创建按钮,在触发控制代码里加如下内容。

if (LinkVRInput.GetButtonDown(1))

{

BZ_move = 1;

}

3  性能分析与优化

当烘焙处理完成后,虚拟ICU已可以在PC模式下取得流畅的运行效果,可采用LinkVR构建的沉浸式场景运行起来却出现强烈的滞后和顿挫感,需对程序性能做进一步的优化和提升。

3.1  性能分析

通过Stats、Profiler和嵌入子程序的方式,对工程播放和发布后程序运行两种状态下的FPS进行采样和分析:

(1)采用Stats、Profiler对导入LinkVR后的Unity工程进行分析,Stats为32.9%,Gfx.WaitForPresent为59.1%,且GPU耗时大于CPU耗时,确认场景是GPC密集,显示场景渲染消耗大量资源。为获得发布后程序运行状态下的FPS,通过下列脚本采集场景实际运行中的FPS:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Fpsshow :MonoBehaviour{

float deltaTime = 0.0f;

void Update() {

deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;

}

void OnGUI()  {

int w = Screen.width,h = Screen.height;

GUIStyle style = new GUIStyle();

Rect rect = new Rect(0,0,w,h * 2 / 100);

style.alignment = TextAnchor.UpperLeft;

style.fontSize = h * 2 / 100;

//new Color (0.0f,0.0f,0.5f,1.0f);

style.normal.textColor = Color.white;

float msec = deltaTime * 1000.0f;

float fps = 1.0f / deltaTime;

string text = string.Format("{0:0.0} ms ({1:0.} fps)",msec,fps);

GUI.Label(rect,text,style);

}

}

如图3所示,ICU的视野比较通透,所有病房均设置前后两道门,普通病房(1~4号)前门面向护士站,采取双开设计,方便病床移位,器官移植病房(5、6号)侧向面对,所有病房门都使用透明玻璃,方便查看和监护,故而导致场景整体显示内容多,计算资源消耗大。为方便比对和分析,选择如图所示A、B、C、D四个视角作为采样点,并在工程播放和程序发布后两种运行状态进行FPS数据采样,如表1所示。

(2)由于开发平台消耗资源,故工程播放状态的FPS明显低于程序发布后运行的FPS。各个视角的场景复杂程度不同,FPS也明显不同,其中,A视角FPS最小,显示内容包括护士站、大厅和2~6号病房,该视角显示内容最多,最能反映ICU全貌,渲染压力也最大;B视角FPS次之,显示内容包括大厅、1~5号病房和护士站部分内容,显示内容仅次于A视角,C视角和D视角的FPS较大,显示内容主要为病房内的吊桥、病床、相关设施,渲染压力明显小于A视角和B视角。总的来说,虚拟ICU场景区域繁多、设施品種复杂、视觉通透,渲染内容多,且在场景各区域FPS存在不均衡的状况。

3.2  性能优化

根据ICU布局同、特点和FPS的分布状况,在充分发挥视锥剔除的基础上,从调整场景布局、合理分离大模型、设置遮挡剔除和设置LOD等方面对性能进行优化:

(1)调整场景布局,对各区域和FPS进行均衡和优化。护士、病人和被铺是场景内面数最多的复杂模型,将这些内容的安放位置调整至FPS较高的1号、5号病房,降低A视角的渲染压力,1号病房在A视角的视锥外,5号病房门背向A视角,遮挡剔除作用显著,这样可使4个视角的FPS趋于均衡。

(2)合理分离大模型,提升视锥剔除功效。原模型结构集成合并度过高,如6个病房的墙体为一个完整模型、大厅内外墙、过道等建筑模型均为一个整体,而在Unity里,只有当模型完全在视锥外时剔除才能有效,这就导致A、B两个视角外的许多物体也被渲染,视锥剔除效率降低。某些透过病房门可看到探视通道的视角(即便只是看到一个点),探视通道内的所有图片都将渲染,浪费大量GPU资源。故而,对场景内过大的模型进行适当分离,如以病房为单位对病房的墙体拆离、大厅墙体按E、S、W、N方向拆解,探视通道内的图片分离,这样,当A视角顺时针转动时,E侧墙体和1、2、3号病房墙体依次被剔除,探视通道内S侧墙体上的图片也依次消失,大幅降低A视角的渲染压力,提升该视角的动态FPS。

(3)设置遮挡剔除,减少视锥内被渲染内容。将场景内尺寸较大的模型设置为“Occluder Static(遮挡)”和“Occludee Static(被遮挡)”,尺寸较小的模型设置为Occludee Static”,“Smallest Hole”设为1.2,“Backface”设为0.2,baked后生成的网格大小与病房相近。在A视角,2、4、5、6号病房的洗手池、挂钟(E侧)和呼吸机、吸痰机(S侧)等设施被遮挡;在B视角1~4号病房的吊桥、病床(W侧)和呼吸机、吸痰机(S侧)等设施被遮挡;在病房内的C、D视角,除房内设施和大厅的部分视线内的物体外,其他模型均被剔除。

(4)设置LOD,LOD按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。选择场景内最复杂的人物、被铺、病床和吊桥等模型,建立精度较低的中模和低模,分别添加到LOD Group组件里的LOD0、LOD1和LOD2上,通过Edit-Project Settings-Quality-Other设置“Lod Bias”参数值,以获取最佳的变化效果,如图4所示。

4  结  论

采取烘焙、遮挡剔除和LOD等技术手段优化后,虚拟场景运行流畅度和稳定性显著提升。在对应的4个采样视角获得的FPS均得到改善,其中A视角FPS由50提升至68,B视角FPS由81提升至97,这两视角的性能提升较为明显,C、D两角度FPS数据基本持平,原因是为均衡场景各区域和各视角的FPS,将原安放于3、6号病房消耗资源较多的人物和被铺等模型调整至1、5号病房所致。

尽管虚拟场景性能获得提升,但在实际运行中,由于沉浸式场景对FPS指标有更高的要求,渲染压力最大的A视角仍然存在少许卡顿,旋转操作更为明显。为提升感官舒适度,在几个重要的查看点设置瞬移跳转,在提升感官舒适度的同时,提高移动效率,降低GPU资源消耗。沉浸式场景营造的感官体验使人震撼,但使用过程中所带来的晕眩感却一直存在,未来,无论在基础层面上的硬件和算法,还是在应用层面上的措施和手段都有待进一步的研究和提升。

参考文献:

[1] 骆岩红,邓克岩,田歌,等.沉浸式VR教学系统“未奥” [J].计算机仿真,2020,37(11):194-198+303.

[2] 周向戈,唐丽玉,彭先敏,等.三维园林植被景观构建与虚拟展示 [J].计算机工程与应用,2019,55(7):234-240.

[3] 杨晨彬,高瞻.基于WebVR的医学体数据可视化 [J].计算机应用与软件,2019,36(5):101-107.

[4] 高晓晶,冯丽露.360°全景漫游在校园虚拟展示设计中的应用研究 [J].中国教育信息化,2018(6):85-88.

[5] 李婷婷,王相海.基于AR-VR混合技术的博物馆展览互动应用研究 [J].计算机工程与应用,2017,53(22):185-189+263.

作者简介:项朝阳(1965.04—),汉族,广东广州人,教授,高工,硕士,曾获国家级教学成果二等奖、广东省教学成果一等奖,研究方向:虚拟现实。

猜你喜欢
沉浸式虚拟现实技术
虚拟现实技术在电视节目中的应用
初中语文沉浸式散文教学研究
“沉浸式”初中体育教学的实践探索
艺术与技术:“沉浸式”的历史对话
虚拟现实技术应用于展示空间设计教学领域的探索
控制计算机系统的虚拟化方案
基于Internet环境下的虚拟现实技术在室内设计中的应用
虚拟现实技术在三维动画制作中的应用
数码绘画在虚拟现实技术下的多元表现
论美剧在英语教育中的作用