张锡英 韩吉烨
摘要 针对现有水流墙系统中水流真实性不高、可移植性不好等问题,开发一套新的基于Unity3D虚拟水流墙系统。该系统采用SPH算法对水流墙系统中的水流加以优化,使其能够达到模拟真实水流的效果,真实地模拟了水流的视觉效果和物理特性。利用C#语言编写的画线代码可以完美地在屏幕上画线改变水流的路线。同时采用了以线段代替点的全新存储结构,减小存储压力,从而提高性能。该项目成果可大量发布于Windows、Android、IOS、Linux等多系统中供用户进行体验,并且对硬件需求不高,无需绑定硬件,一般配置都可以完美运行,支持发布到多种操作平台,以便满足多平台的需求,使用户可以得到更真实、更全面、更方便的体验效果。
关键词 Unity3D;虚拟水流墙;粒子系统;SPH算法;存储结构
中图分类号 S126;TP317.4 文献标识码 A 文章编号 0517-6611(2014)13-04111-03
Abstract A new virtual water wall system based on Unity3D was developed according to the problems of existing water wall system that the virtual water flow was not real enough and the portability was not ideal. This system optimized the water flow with SPH algorithm, which made it reach the effect of simulating the real water wall, really simulated the visual and physical properties of wall flow. The draw line code wrote by C# language could drew lines in screen perfectly to change the water flow ways. And the system adopted a new storage structure of replacing the points with the line segments, which reduced the pressure of the storage as well as improved the system performance. The project results posted on many systems such as Windows, Android, IOS and Linux largely to provide experience for user, and the general configuration operated perfectly because it had not high requirements to hardware without binding any hardware, it supported to post on a variety of operating platforms to met the needs of multiple platforms and then made users obtain more real, more overall, and more convenient experience effects.
Key words Unity3D; Virtual water wall system; Particle system; SPH algorithm; Memory system
虚拟水流墙系统是一款对现实中水流的各种物理特性进行模拟的虚拟现实系统[1]。随着虚拟现实技术在各领域的广泛应用,基于Unity3D的虚拟现实研究已经成为当前研究的热点[2]。初级版本的虚拟水流墙系统现在已存在于许多城市科技馆、科技主题公园等公众场所用于展示与用户体验,但这些初级版本的虚拟水流墙系统中存在着许多缺点和不足。针对这些问题,笔者开发了一款全新的虚拟水流墙系统。
1 水流墙的设计与实现
在水流墙项目系统中,水流是项目的主体。在程序启动时,会有虚拟的水流从屏幕顶端流出。
1.1 Unity3D
Unity3D是一款基于.NET的游戏开发引擎。作为一款成熟的3D游戏引擎,Unity3D为游戏设计者提供了许多游戏开发所必要的功能。这些强大的功能为开发该水流墙项目提供了可行性保障。同时大大降低了开发成本,缩短了开发周期并降低了风险[3]。
由于Unity3D可以充分、实时地处理大量的三维模型和数据,并能够提供高效的性能和高质量的保证等特点,长期被用于三维显示、实时交互的项目开发设计项目中。Unity3D还有一个很重要的特点是跨平台开发,它实现了一次开发、一键式发布的方式发布到多种平台的功能,目前支持发布到Android、Windows、Linux、Mac、IOS、Web和Flash等平台[4]。这个特点为在多平台发布和项目实现可移植性提供保障。
1.2 粒子系统
粒子系统是一种用于模拟不规则物体或自然场景的方法,这些不规则物体的特点是动态性和随机性[5]。粒子系统中的每个粒子都具有形状、大小、颜色、透明度、运动速度、运动方向、生命周期等多种属性,而且这些粒子随时间的推移不断变化,在时间和空间上具有动态分布特性,从而尽可能真实地模拟出具有复杂运动规律的动态特效[6]。
粒子系统的基本开发流程包括以下几个步骤[7]。
1.2.1 确定模拟对象的粒子模型。在利用粒子系统进行模拟之前,首先要对待模拟对象的运动规律进行分析,从而选择合适的粒子模型进行模拟。
1.2.2 初始化粒子系统。根据上一步骤确定的粒子模型对粒子系统进行初始化,包括设置粒子数量、大小、形状、颜色、初始位置等属性。
1.2.3 设置粒子运动规律。基于要模拟的对象设置粒子的运动规律及相关公式。通过粒子的协同运动模拟对象的运动。
1.2.4 粒子状态更新。粒子系统开始运行之后,需要根据粒子的运动规律按一定频率更新粒子状态。
1.2.5 粒子的消亡。每个粒子完成一个生命周期的所有活动之后便会进入消亡阶段,此时需要将消亡的粒子及时删除,以免耗费过多的系统资源。
1.3 SPH算法
SPH算法是典型的拉格朗日视角,基本原理是通过粒子模拟流体的运动规律,然后转化成网格进行流体渲染[8]。SPH算法的基本思想是将连续的流体分解为无数个细小的颗粒,这些颗粒相互影响,共同形成复杂的流体运动,其中每个单独的流体粒子都遵循牛顿第二定律[9]。SPH算法的基本运算流程包括以下几个步骤[10]。
2 画线的设计与实现
该项目的基本目的是用户可以在一个虚拟的有水流的环境下进行画线、删除等操作,所画的线会与虚拟水流中的水滴发生碰撞,改变水流的流动路径。基本思想是基于C#语言进行编码实现画线部分,使得画出的线具有碰撞盒,可以实现刚体碰撞。
2.1 画线操作的设计
开发过程中发现,实际操作中并非需要对每个点都进行存储,因为项目实际运行时应该是在触摸屏幕上运行的,而此时所需要的最小的长度单位应该是手指的宽度,而非屏幕像素中的每个点。所以在画线过程中并没有存储鼠标动作的每一个点,而是采用线段代替点作为画线过程中的最小长度单位,不需要将鼠标遍历过的所有的点都进行存储,而是仅仅存储满足条件的线段的起点和终点,并存储在结构体内,建立与之相对应的对象并将结构体存储在链表中。这样做有几个好处。
(1)由存储点变为存储线段,显然是减小了存储的压力,提升了程序性能。
(2)方便管理。并非将每个点都存进链表,而是利用有限的线段代替,每个线段对应一个对象,根据对象添加碰撞盒,减小了添加碰撞盒的难度。
(3)方便删除。在删除操作时,并不需要考虑每次删除的点在链表中的什么位置,而是仅仅知道删除的点在哪条线段上,直接将该线段删除,并删除对象即可。
(4) 设计的常量可以随时变更,更加灵活,以便适应更多的环境要求。这种用线段代替点的算法是项目相对于已有的系统的创新点之一。
画线算法基本流程如图1所示。
3 结语
基于Unity3D的水流墙系统的设计,采用SPH算法对粒子系统加以控制,使其能够达到模拟真实水流的效果。真实地模拟了水流的视觉效果和物理特性。利用C#语言编写的画线代码可以完美地在屏幕上画线改变水流的路线。该项目成果可大量发布于Windows、Android、IOS、Linux等多系统中供用户进行体验,并且对硬件需求不高,一般配置都可以完美运行,无需绑定硬件,使用户可以得到更真实、更全面、更方便的体验效果。
参考文献
[1] 赵沁平.虚拟现实综述[J].中国科学 F 辑:信息科学,2009,39(1):2,46.
[2] 邱建松.基于 Unity3D的实时虚拟仿真系统的研究与实现[J].电子制作,2012(12):15.
[3] 倪乐波,戚鹏,遇丽娜,等.Unity3d产品虚拟展示技术的研究与应用[J].数字技术与应用,2010(9):54-55.
[4] 陈晓青,王少伟.基于 Unity 的虚拟现实技术在教育中的应用[J].软件导刊(教育技术),2012(12):76-78.
[5] 吴继承,江南.虚拟现实中粒子系统的设计与应用[J].计算机仿真,2005,21(11):137-140.
[6] 王功明,郭新宇,赵春江.粒子系统的优化技术研究[J].计算机应用研究,2008,25(2):495-497,500.
[7] 熊耀.基于 Unity3D 粒子系统的三维影视特效开发研究[J].软件导刊,2012,11(11):134-136.
[8] 金阿芳,买买提明·艾尼.论光滑粒子流体动力学 (SPH) 方法[J].新疆大学学报:自然科学版,2006,23(2):188-193.
[9] 李会珍.采用 SPH 方法的拉格朗日方式流体运动模拟[D].合肥:安徽大学,2013.
[10] 郑兴.光滑质点流体动力学 (SPH) 算法研究[D].哈尔滨:哈尔滨工程大学,2005.
[11] 何水艳,丁沂.粒子系统与碰撞检测的研究[J].轻工科技,2012(6):71-72.