我要发帖 回复

高级会员

6

主题

1761

积分

0

专家分

兴趣点(最多三项):

视景仿真

私信
发表时间 : 2014-1-10 12:18:16 | 浏览 : 2695    评论 : 8
Vega Prime的SpeedTree模块程序设计

1 引言

       SpeedTree是美国IDV(Interactive Data Visualization)公司研发制作的一款专门的三维树木建模软件,支持大片树木的快速建立和渲染,而且它本身还带有强大的树木库。不仅可以通过插件将树木导入到其他的三维建模软件中使用,也可以为游戏引擎提供强大的树库支持,目前已经成为著名游戏引擎Unreal的御用树木生成软件。

       Vega Prime是Presagis公司研发制作的一款用于创建及配置视景仿真、多领域仿真和通用可视化应用的视景平台,利用其跨平台性与可扩展性,Vega Prime成为实时3D应用开发与调度最佳的COTS类工具包。Vega Prime开发环境大大提高进行实时3D应用的创建与配置速度,同时提供功能强大的扩展模块,以解决实时3D应用开发中遇到的难题,其中的SpeedTree模块能够在实时帧率下进行真实感植被景观的定义与渲染。SpeedTree模块集成来自IDV公司的获奖产品SpeedTree技术,此技术目前已经成为US DoD训练系统和大多数视景游戏的特定特征。SpeedTree模块能对Vega Prime应用中高密度植被进行定义和渲染,能在达到最佳视觉效果的同时保持原有的渲染效率不变,能生成具备碰撞映射、阴影和精细纹理的植被效果,提供具有200种树和植物种类的模型库,包括阔叶树、针叶树、棕榈树、仙人掌和灌木,允许对现有树型进行修改并创建新的树型。SpeedTree植被还能方便的添加到现有的OpenFlight和MetaFlight数据库中。

在下文中将讨论SpeedTree for Vega Prime模块的程序设计方法。


2 SpeedTree模块

       要使用SpeedTree for Vega Prime模块,必须安装Vega Prime 2.1.2或以上版本。
2.1 SpeedTree模型定义文件

       SpeedTree模型定义文件(SpeedTree Definition File)用来批量定义spt格式的源模型及其渲染属性,
其文件名是vsgn_speedtree_defs.txt。该文件名是不可更改的,OpenFlight加载器在加载SpeedTree模型时,只查找文件vsgn_speedtree_defs.txt,否则,将会产生不可预测的结果。

       vsgn_speedtree_defs.txt示例文件如下所示:
  1. MODEL tree1.speedtree {
  2.     SOURCE_FILE              Beech_RT.spt
  3.     INSTANCE_CULLING         false
  4.     TECHNIQUE_DETAIL         true
  5.     TECHNIQUE_SELF_SHADOW    true
  6.     TECHNIQUE_DETAIL         true
  7.     SCALE                    1.0
  8. }

  9. MODEL tree2.speedtree {
  10.     SOURCE_FILE              RiverBirchHero_RT.spt
  11.     INSTANCE_CULLING         false
  12.     TECHNIQUE_NORMAL_MAP     true
  13.     TECHNIQUE_SELF_SHADOW    true
  14.     TECHNIQUE_DETAIL         true
  15.     SCALE                    1.0
  16. }

  17. MODEL tree3.speedtree {
  18.     SOURCE_FILE              WillowOak_RT.spt
  19.     INSTANCE_CULLING         false
  20.     TECHNIQUE_NORMAL_MAP     true
  21.     TECHNIQUE_SELF_SHADOW    true
  22.     TECHNIQUE_DETAIL         true
  23.     SCALE                    1.0
  24. }

  25. MODEL tree4.speedtree {
  26.     SOURCE_FILE              SugarPine_RT.spt
  27.     INSTANCE_CULLING         false
  28.     TECHNIQUE_NORMAL_MAP     true
  29.     TECHNIQUE_SELF_SHADOW    true
  30.     TECHNIQUE_DETAIL         true
  31.     SCALE                    1.0
  32. }
复制代码
其中,关键字MODEL定义一个新的模型实例,接着是标识模型的文件名,然后在“{“和“}”之间定义模型参数。

2.2 交叉引用文件
        交叉引用文件(Cross Reference File)用来定义OpenFlight外部引用名字和替换文件名字之间的映射关系,OpenFlight加载器使用Vega Prime提供的搜索路径尝试加载外部引用的替换文件。交叉引用文件的文件名是vsgn_xref_map.txt,该文件名是不可更改的,OpenFlight加载器在加载SpeedTree模型时,只查找文件vsgn_xref_map.txt,否则,将会产生不可预测的结果。vsgn_xref_map.txt示例文件如下所示:

tree01.flt tree1.speedtree
tree02.flt tree2.speedtree
tree03.flt tree3.speedtree
tree04.flt tree4.speedtree

       其中,第一个字符串是OpenFlight模型数据库外部引用文件名,第二个字符串是替换文件的名字,用来加载代替前面的外部引用文件。当OpenFlight加载器读到外部引用节点时,它将用外部引用文件名同交叉引用文件中提供的文件名进行比较,如果找到匹配的项,就尝试用替换文件代替外部引用文件。

2.3 SpeedTreeControl类

       SpeedTreeControl类用来控制SpeedTree模型的属性,该类必须存在且唯一,其定义的属性包括:Wind Effects、Normal Mapping、Detail Texture、Self-Shadow和Instance Culling。为了在Vega Prime的Active Preview里看到SpeedTree模型,在应用配置文件ACF里必须有一个SpeedTreeControl实例。

3 SpeedTree模块程序设计

SpeedTree for Vega Prime模块程序设计流程主要是:
              ⑴ 用SpeedTreeCAD创建spt模型;
              ⑵ 用Creator创建包含外部引用的flt模型;
              ⑶ 编辑vsgn_speedtree_defs.txt和vsgn_xref_map.txt文件;
              ⑷ 编辑ACF文件,添加在⑵中创建的flt模型,添加SpeedTreeControl实例;
              ⑸ 在Active Preview里进行预览,或者用VC编程进行驱动。

3.1 创建spt模型
       在Vega Prime 2.2.1版本中带了SpeedTreeCAD 4.1版本,可以用来创建spt模型,运行界面如图1所示。这不是讨论重点,所以不做详细讨论。
1.jpg

       图1 SpeedTreeCAD 4.1运行界面


3.2 创建flt模型
       flt模型是OpenFlight格式的模型数据库,OpenFlight格式是Multigen Creator建模软件独创的用于描述三维虚拟场景的层次化数据结构,已经成为事实上的业界标准数据格式。在flt模型数据库中可以添加对其他模型数据库的外部引用,外部引用的内容在层级视图中被放置在外部引用节点中,外部引用节点必须用跟组节点同级别的节点作为父节点。外部引用的模型对象在当前模型数据库中具有只读属性,不能在当前模型数据库中对其进行编辑,但是可以对外部引用进行整体的移动、旋转或者缩放。向模型数据库中添加外部引用的步骤如下:

       ⑴ 在层级视图中选择适当的组节点,单击“Parent”按钮将其设为父节点;
       ⑵ 单击菜单“File”-“External Reference”,打开外部引用对话框;
       ⑶ 在外部引用对话框的“External File Name”编辑框中输入被引用的模型数据库文件名;
       ⑷ 单击“OK”按钮完成外部引用。

       还有一种常用的外部引用模型数据库的方法是直接在层级视图中,通过创建外部引用节点来进行外部引用操作。具体做法是,首先选择适当的组节点,然后打开创建工具箱,单击创建外部引用工具按钮。
       下面具体创建一个包含外部引用的flt模型,使用的Creator版本为3.2,运行界面如图2所示。
2.jpg

       图2 Creator 3.2运行界面


       打开Creator,在默认状态下,创建一个外部引用节点,在外部引用对话框的“External File Name”编辑框中输入“tree01.flt”, 单击“OK”按钮退出对话框。单击菜单“File”-“Save”,打开保存文件对话框,在文件名编辑框中输入“tree.flt”,单击“保存”按钮退出对话框,关闭Creator。

3.3 编辑模型定义文件和交叉引用文件
       可以用任意文本编辑器进行编辑,这里用的是Windows记事本,具体定义如下。
编辑vsgn_speedtree_defs.txt文件内容如下:
  1. MODEL tree01.speedtree {
  2.     SOURCE_FILE              Beech_RT.spt
  3.     INSTANCE_CULLING         false
  4.     TECHNIQUE_DETAIL         true
  5.     TECHNIQUE_SELF_SHADOW    true
  6.     TECHNIQUE_DETAIL         true
  7.     SCALE                    1.0
  8. }
复制代码
编辑vsgn_xref_map.txt文件内容如下:
tree01.flt tree01.speedtree

这两个文件定义了外部引用文件和替换模型文件的对应关系。

如上所示,用模型tree01.speedtree代替模型tree01.flt,而模型tree01.speedtree的源模型为文件Beech_RT.spt,即最终tree01.flt被Beech_RT.spt代替。

3.4 编辑应用配置文件ACF

        应用配置文件(Application Configuration File,ACF)包含了Vega Prime应用在初始化和运行时所需的一切信息,采用流行的通用文件格式扩展标识语言(XML)格式存储,可以使用Vega Prime的可视化编辑器LynX Prime进行开发。这里使用的LynX Prime版本为2.2,运行界面如图3所示。
3.jpg

       图3 LynX Prime 2.2运行界面


ACF文件具体定义步骤如下:

       ⑴ 打开LynX Prime,在默认状态下,创建一个Object实例,模型文件名选择前面用Creator创建的tree.flt,模型位置设置为(0,60,55),其他参数默认;
       ⑵ 创建一个SpeedTreeControl实例,参数设置默认;
       ⑶ 编辑搜索路径SearchPath,添加模型文件tree.flt和Beech_RT.spt所在的目录;
       ⑷ 修改运动模式,将其设为MotionGame;
       ⑸ 修改观察者myObserver的位置(x,y,z)为(0,0,60),姿态(h,p,r)为(0,0,0);
       ⑹ 单击菜单“File”-“Save”,打开保存文件对话框,在文件名编辑框中输入“test.acf”,单击“保存”按钮退出对话框,关闭LynX Prime。

3.5 程序运行效果
       对上面建立的ACF文件,可以用LynX Prime打开,在Active Preview里进行预览,也可以用VC编程进行驱动。使用VC编程驱动时,可以动态改变环境的风速和风向,使SpeedTree模型做出随风摇摆的不同响应。在Active Preview里预览效果如图4所示,在MFC单文档框架下的运行效果如图5所示。
4.jpg

图4 在Active Preview里预览的效果


5.jpg

图5 在MFC单文档框架下运行的效果

4 结语
       SpeedTree模块增强了Vega Prime中树木模型的真实性,调整Vega Prime里环境风的参数,SpeedTree模型能够以摇摆的方式做出逼真的反应。结合实例介绍了Vega Prime中SpeedTree模块的基本程序设计方法,在此基础上可以开发SpeedTree模块的具体应用。程序的开发运行环境为:Windows XP SP3、VS2005、Vega Prime2.2、Creator3.2。



评分

参与人数 1积分 +350 VR币 +100 收起 理由
obuil + 350 + 100 很给力!

查看全部评分

最近VR访客查看更多↓

obuil 评论于2014-1-10 12:54:21
不错的东西
haha459862 评论于2014-1-10 15:56:50
大赞,是不是发过论文啊
obuil 评论于2014-1-10 16:18:31
haha459862 发表于 2014-1-10 03:56 PM
大赞,是不是发过论文啊

得知 ,作者曾发表到杂志上过
UE4   |   虚幻引擎   |   Unity VR    |    Hololens
haha459862 评论于2014-1-10 18:02:25
obuil 发表于 2014-1-10 04:18 PM
得知 ,作者曾发表到杂志上过

关键是不是原创,呵呵,如果只是论文COPY的话,这就有点。。。
文章不错
obuil 评论于2014-1-10 18:11:58
haha459862 发表于 2014-1-10 06:02 PM
关键是不是原创,呵呵,如果只是论文COPY的话,这就有点。。。
文章不错 ...

原创
UE4   |   虚幻引擎   |   Unity VR    |    Hololens
winnersun专家组 评论于2014-2-19 15:35:51
是这个论文?
Vega Prime 之SpeedTree 模块程序设计
赵常寿 张鹏 吴红权
楼主是这里的哪一位?
kangzhao 评论于2014-3-1 17:28:40
牛..........
冰中火 评论于2015-8-28 08:43:21
非常棒的解析能力!

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-5-18 12:06 AM

返回顶部