基于Unity3D的三维虚拟人群场景生成方法与流程

文档序号:12675608阅读:1237来源:国知局

本发明属于计算机技术领域,更进一步涉及计算机图形学技术领域中的一种基于Unity3D的三维虚拟人群场景生成方法。本发明主要用来生成虚拟世界的大规模人群及相关环境、事件等,实现复杂人群仿真场景的快速建立。所述场景生成方法可用于仿真技术开发,模拟大规模人群及相关环境、事件等,以及相关游戏场景开发。本发明作为游戏开发,公共安全等相关领域基础研究,使用Unity3D游戏引擎具有的模块和插件进行开发,涉及具体操作技术,可以有效简化该场景设计方面的操作。



背景技术:

由大规模人群构成的虚拟场景是虚拟现实的重要组成部分。生成具有高保真度的虚拟人群场景在数字娱乐、虚拟演练、建筑设计、安全工程等领域具有广泛应用价值。然而,人群场景的设计十分复杂,除了需要模拟人群行为之外,还需要考虑人群生成问题以及相关环境、事件的设计。目前,一些技术在场景生成时,只涉及环境开发方面,缺乏背景事件和背景人物设计,如何系统化地构建虚拟人群场景目前还缺乏有效的方法。同时存在一些技术在场景生成操作上与开发平台所提供的操作不能一一对应的问题,如何将人群、环境和事件三个要素进行统一设计,运用现有开发平台便捷操作,实现流程化场景生成是一个需待解决的问题。

中国大唐集团科学技术研究院有限公司在其提出的专利申请“虚拟现实漫游场景生成方法及系统”(申请号CN201310284812.9申请公布号CN103440357B)中公开了一种基于数据转换技术的虚拟现实漫游场景生成方法及系统,该方法包括:通过精确建模的方式设计虚拟场景的空间结构,生成基础环境模型数据;将建模设计完成后的基础环境模型数据,进行跨平台的可视化仿真数据转换处理,转换为虚拟场景环境模型数据;通过预先设置的可视化虚拟漫游设计平台接口加载转换后的虚拟现实场景环境模型数据,生成虚拟现实漫游场景并进行交互式操作。本申请以解决现有技术中通过工厂三维布置设计管理系统所设计完成的结构模型不能被虚拟现实交互动作设计平台所识别的问题。该专利申请存在的不足是:没有指定具体开发平台,在实际的场景开发当中,不同的开发平台所具备的操作与该方法的操作并不能一一对应,增加的实际开发的难度。

福建工程学院在其提出的专利申请“一种3D场景的实时生成方法”(申请号CN201410830804.4申请公布号CN104599319A)中公开了一种3D场景的实时生成方法。该方法包括以下步骤:a)建立场景的空间数据库;b)设计自动推理机;确定各个场景内对象的行为模式,写入到一个推理机组件中;声明一个Unity3D空对象,将推理机组件负载于Unity3D空对象上,c)自动推理机驱动;利用Unity3D引擎刷新所有对象的Update()函数,d)以人称控制器为参考对象,划定空间渲染区域;e)实时场景生成;通过查询空间数据库获得Unity3D引擎会再次生成的对象,该对象数据通过自动推理机求得,实时生成3D场景。该专利申请存在的不足是:缺少对人群、环境和事件三个要素进行统一设计。



技术实现要素:

本发明针对上述现有技术存在的问题,提出了一种基于Unity3D建模技术的虚拟危险场景生成方法,可用于快速生成由虚拟人群以及相关环境因素所构成的虚拟场景。

本发明的具体步骤如下:

(1)建立数据库:

(1a)将Mono.Data.Sqlite.dll文件与System.Data.dll文件放在Unity3D游戏引擎中的Assets文件夹中,作为Unity3D游戏引擎内部数据库基础文件;

(1b)在Unity3D游戏引擎内部数据库基础文件中,分别建立环境数据库、事件数据库和人物数据库;

(2)建立静态虚拟环境:

(2a)利用三维建模软件,生成一个基础环境模型;

(2b)将基础环境模型以.fbx格式,导入Unity3D游戏引擎中,转换为静态虚拟环境;

(2c)使用Unity3D游戏引擎中的Streaming World插件,在x轴和z轴平面上设定划分网格尺寸为10米乘10米,由该插件将静态虚拟环境划分成多个独立的子环境,并存储到环境数据库中;

(3)建立事件:

(3a)定义用于三维虚拟危险场景生成的不同事件;

(3b)为所生成的不同事件添加描述事件属性的脚本文件;

(3c)将所生成的不同事件和与之对应的描述事件属性的脚本文件存储到事件数据库中;

(4)建立人物模型:

(4a)利用三维建模软件,设计3D人物模型;

(4b)将设计好的3D人物模型以.fbx格式,导入到Unity3D游戏引擎中,转换为虚拟人物模型;

(4c)使用Unity3D游戏引擎的动画控制模块,为虚拟人物模型添加提供运动动画播放功能的Animator Controller组件并添加C#动画控制脚本;

(4d)使用Unity3D游戏引擎的导航控制模块,为虚拟人物模型添加提供自动寻路功能的NavMeshAgent组件,得到设置好的虚拟人物模型添加C#寻路控制脚本;

(4e)将设置好的虚拟人物模型存储到人物数据库中;

(5)建立故事控制对象:

(5a)在Unity3D游戏引擎中新建一个Object空对象,为Object空对象添加C#控制脚本,并将该对象命名为故事控制对象;

(5b)在故事控制对象中使用Unity3D游戏引擎的Event Organizer插件,建立事件树,存储事件间关系;

(5c)在故事控制对象中新建一个Object空对象,为Object空对象添加C#事件触发脚本,并将Object空对象命名为对事件数据库中的事件添加事件触发形式的事件触发子对象;

(5d)在故事控制对象中新建一个Object空对象,为Object空对象添加C#事件选择脚本,并将该Object空对象命名为事件选择子对象;

(5e)在故事控制对象中新建一个Object空对象,为Object空对象添加C#事件冲突检测脚本,并将该该Object空对象命名为事件冲突检测子对象,利用事件选择子对象选出备选事件,检查备选事件与当前事件所产生的地点是否一致;若是,则执行步骤(5d),否则,执行步骤(5f);

(5f)在故事控制对象中新建一个Object空对象,为Object空对象添加C#人群动态生成脚本,并将该对象命名为人群动态生成子对象;

(6)生成三维虚拟危险场景:

(6a)游戏引擎从环境数据库中任意选择一个子环境;

(6b)游戏引擎调用事件选择子对象选择事件;

(6c)游戏引擎调用事件冲突检测子对象检测事件逻辑;

(6d)游戏引擎调用事件触发子对象生成事件;

(6e)游戏引擎调用人群动态生成子对象动态生成人群;

(6f)判断环境数据库中所有的子环境是否均被选择,若是,则执行步骤(7),否则,执行步骤(6a);

(7)完成三维虚拟危险场景的构建。

本发明与现有技术相比具有以下优点:

第一,由于本发明在Unity3D游戏引擎内部数据库基础文件中分别建立环境数据库、事件数据库和人物数据库,所建立的事件数据库和人物数据库补充了现有场景开发中缺少的背景事件和背景人物,克服了现有技术在场景生成时,只涉及环境开发方面的缺点,使得本发明综合了虚拟人群场景开发所需基本的设计要素,从环境搭建,事件设计到人群设计都有所涵盖,具有功能完善的优点。

第二,本发明包括使用Mono.Data.Sqlite.dll文件与System.Data.dll文件作为Unity3D游戏引擎内部数据库基础文件,使用Unity3D游戏引擎的Streaming World插件将静态虚拟环境划分成多个独立的子环境,使用Unity3D游戏引擎的动画控制模块,为虚拟人物模型添加提供运动动画播放功能的Animator Controller组件,使用Unity3D游戏引擎的导航控制模块,为虚拟人物模型添加提供自动寻路功能的NavMeshAgent组件,使用Unity3D游戏引擎的Event Organizer插件建立事件树,存储事件间关系,克服了现有技术在场景生成操作上与开发平台所提供的操作不能一一对应的缺点,使得本发明提高了虚拟人群危险场景生成工作以及类似游戏环境开发工作效率,具有开发效率高的优点。

附图说明

图1是本发明的流程图。

具体实施方式

下面结合附图1对本发明做进一步的描述。

步骤1,建立数据库。

将Mono.Data.Sqlite.dll文件与System.Data.dll文件放在Unity3D游戏引擎中的Assets文件夹中,作为Unity3D游戏引擎内部数据库基础文件。

在Unity3D游戏引擎内部数据库基础文件中分别建立环境数据库、事件数据库和人物数据库,生成的数据库文件以.db格式默认存放在和Assets文件夹同级的位置。

步骤2,建立静态虚拟环境。

利用三维建模软件,生成一个基础环境模型。

将基础环境模型以.fbx格式,导入Unity3D游戏引擎中,转换为静态虚拟环境,存放在Projeect面板的Environment文件夹中,静态虚拟环境包括空间大小、障碍物、道路以及环境出口。

在Unity3D游戏引擎中,在Inspector面板中勾选静态虚拟环境属性Static为True,并在Transform选项上点击reset。

将静态虚拟环境设置使用Unity3D游戏引擎中的StreamingWorld插件,在x轴和z轴平面上设定子划分网格尺寸为10米乘10米,由该插件将静态虚拟环境划分成多个独立的子环境,并存储到环境数据库中。

步骤3,建立事件。

定义用于三维虚拟危险场景生成的不同事件,具体包括:起火、爆炸、产生浓烟、产生薄烟、以及人群的疏散、聚集、逆向运动。

起火、爆炸、产生浓烟、产生薄烟四个事件使用Particle System组件,通过调整参数进行设计,人群的疏散、聚集,逆向运动通过改变人群的运动速度和方向进行实现。

为每个事件添加描述事件属性的C#脚本文件,所描述事件属性包括:持续时间、产生地点、作用对象、作用影响。

将所有的事件存储到事件数据库中。

步骤4,建立人物模型。

在三维建模软件中设计3D人物模型。

将设计好的3D人物模型以.fbx格式,导入到Unity3D游戏引擎中,转换为虚拟人物模型,并在模型的Rig选项卡中设置Animation Type为Humanoid模式。

使用Unity3D游戏引擎的动画控制模块,为虚拟人物模型添加提供运动动画播放功能的Animator Controller组件并添加C#动画控制脚本,导入动画资源,包括等待、行走、奔跑、跳跃等并在Animator Controller组件中设置动画之间的切换条件。

使用Unity3D游戏引擎的导航控制模块,为虚拟人物模型添加提供自动寻路功能的NavMeshAgent组件并添加C#寻路控制脚本,从Agent size、Steering、ObstacleAvoidance以及Path Finding四个方面进行设定,得到设置好的虚拟人物模型添加C#寻路控制脚本。

将设置好的虚拟人物模型存储到人物数据库中。

步骤5,建立故事控制对象。

第一步,在Unity3D游戏引擎中新建一个Object空对象,为Object空对象添加C#控制脚本并命名该对象为故事控制对象。

第二步,在故事控制对象中,利用Unity3D游戏引擎Event Organizer插件,建立事件树,存储事件间关系。

第三步,在故事控制对象中新建一个Object空对象,为Object空对象添加C#事件触发脚本,并将Object空对象命名为对事件数据库中的事件添加事件触发形式的事件触发子对象。事件触发形式包括通过Unity3D游戏引擎中的计时器组件实现的定时触发以及触发器模块实现的条件触发两种形式。定时触发通过Unity3D游戏引擎中的计时器组件,利用yield.WaitForSecodes()函数实现延迟操作,条件触发通过Unity3D游戏引擎的触发器模块,利用OnTriggerEnter()、OnTriggerStay()和OnTriggerExit()函数实现物体进入、停留、离开触发区域的检测。

第四步,在故事控制对象中新建一个Object空对象,为Object空对象添加C#事件选择脚本,并将该Object空对象命名为事件选择子对象,该子对象负责选择事件。在子环境中,由故事控制对象在事件树中查询与当前场景中事件相关的事件,并从事件数据库中获取;若没有查询到要生成的事件,则在事件数据库中随机选择一个事件作为下一个要生成的事件。

第五步,在故事控制对象中新建一个Object空对象,为Object空对象添加C#事件冲突检测脚本,并将该该Object空对象命名为事件冲突检测子对象,利用事件选择子对象选出备选事件,检查备选事件与当前事件所产生的地点是否一致;若是,则执行本步骤的第四步,否则,执行本步骤的第六步。

第六步,在故事控制对象中新建一个Object空对象,为Object空对象添加C#人群动态生成脚本,并将该对象命名为人群动态生成子对象,该子对象根据子环境中事件,利用Unity3D消息分发模块,按照事件对虚拟人群的影响,由事件使用BroadcastMessage()、SendMessage()和SendMessageUpWards()函数向游戏引擎发送反馈消息,由游戏引擎处理消息,根据消息中地点、事件、人群数量和移动目标参数,调整人群生成数量这一参数,从人物数据库中获取人物并生成,同时更新人群移动目标参数。更新人群移动目标参数。

步骤6,生成三维虚拟危险场景。

第一步,从环境数据库中任意选择一个子环境。

第二步,用事件选择子对象选择事件。选择事件是指,在子环境中,由故事控制对象在事件树中查询与当前场景中事件相关的事件,并从事件数据库中获取;若没有查询到要生成的事件,则在事件数据库中随机选择一个事件作为下一个要生成的事件。

第三步,用事件冲突检测子对象检测事件逻辑。

第四步,用事件触发子对象生成事件。

第五步,用人群动态生成子对象动态生成人群。动态生成人群是指根据子环境中事件,利用Unity3D消息分发模块,按照事件对虚拟人群的影响,由事件向游戏引擎发送反馈消息,由游戏引擎处理消息,根据消息中地点、事件、人群数量和移动目标参数,调整人群生成数量这一参数,从人物数据库中获取人物并生成,同时更新人群移动目标参数。

第六步,判断环境数据库中所有的子环境是否均被选择,若是,完成三维虚拟危险场景的构建,否则,执行本步骤的第一步。

步骤7,完成三维虚拟人群危险场景的构建。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1