
2009年 工 程 图 学 学 报2009 第2期 JOURNAL OF ENGINEERING GRAPHICS No.2
基于真实场景的大规模虚拟人群的快速生成方法
姜立军,李哲林,甘东兵
(华南理工大学机械工程学院,广东广州 5100)
摘要:利用Poser的三维人体建模功能和3DS MAX强大的修改功能,结合MAXScript脚本语言,实现了对三维人体模型骨架的自动生成、匹配和蒙皮。通过对人物动作的建立与分解,实现了连续多个人体三维模型的生成与导出,并由此建立了一个包含不同人体及动作姿态的角色库。通过调用库中的角色,并将由图像信息获得的人群分布参数赋予这些虚拟个体人,实现了基于真实场景的虚拟人群快速生成。
关键词:计算机应用;虚拟人群快速生成;真实场景;角色建模
中图分类号:TP 391
文献标识码:A 文章编号:1003-0158(2009)02-0069-07
A Quickly Virtual Crowds Modeling Method Based on Real Scene
JIANG Li-jun, LI Zhe-lin, GAN Dong-bing
( School of Mechanical Engineering, South China University of Technology, Guangzhou Guangdong 5100, China )
Abstract: A method of automatic production, matching and outer-surface covering for 3D human body is realized using 3D human body modeling functions in Poser and the modifying functions in 3DS MAX combined with the script language of MAXScript. Then continuous action frames of multi-human body models are generated and exported by creating and decomposition the character’s action, and a liberally included these models is created simultaneously. Finally, a quick method of creating massive virtual crowds is realized by loading these characters from liberally and assigning the distribution parameters from image processing.
Key words: computer application; virtual crowds modeling; real scene; character modeling
收稿日期:2007-10-07目前,关于虚拟人群仿真的研究中,侧重
于利用多智能体(multi-agent)技术,研究虚拟人群之间、虚拟人群与环境之间的空间协同协题[2-3, 6]。许多知名软件公司也针对虚拟现实的需要开发了人群制作软件或插件,这些软件多数采用粒子系统的方式,来实现大规模虚拟人群的生成,如美国Vital Idea公司开发了人群仿真软件Crowd;应用于Discreet 3D MAX软件的人群建模插件 Crowdit; Avid公司推出的SoftImage Behavior,这些软件目前主要用于游戏及电影动画的制作;可以方便地制作大批随机分布于虚拟场景中虚拟人群。然而,对于快速生成形态各异的虚拟人群,即使使用这些软件,仍然存在很多技术问题需要克服。
作者通过图像处理技术,实现了真实场景中人员的识别与特征提取,获得了人群分布参数,并研究一种快速建立三维人体模型的方法,将由照片获得的人群分布参数应用于虚拟人群,实现了近似于真实场景的大量虚拟人群快速生成。
1 大规模虚拟人群的创建流程
快速生成大规模虚拟人群的基本思路是:首先在Poser人体建模软件中创建所需要的单个角色,并导入到3D MAX软件中,利用MAXSCRIPT脚本语言开发的人群建模插件,实现对人体模型的骨架自动匹配和自动蒙皮,并创建生长形态各异的人体模型库,然后调用由真实场景信息获得的人群分布参数,实现人群在仿真场景中的自动定位。流程图如图1所示。
导入Poser
图1 三维虚拟人群生成流程图2 不同姿态人体三维模型的生成
2.1 Poser中创建基本人物造型
在Poser中建立三维人体模型相当方便,只须根据实际情况需要从模型库中调用相关的人体模型,然后进行修改即可。在建立角色模型时,为方便蒙皮等操作的调整,往往需要将三维人体模型设定为标准的大字型,而Poser本身自带人物库中没有相应的动作造型,需要通过Poser中的旋转命令对其造型进行调整。调整好的造型必须保存到动作库中,当对象模型改变时,可以通过调用该动作参数来改变对象造型,这样可以使
不同人物的造型保持一致,也为3DS MAX中对人体模型的修改及骨架的匹配提供方便。通过相应的操作可以对包括人体造型、脸部表情、头发、衣服及饰物等进行修改和调整。人体模型可以选择成年人、青年、少年、儿童等。选择及调整好的模型如图2所示。
图2 创建基本人物造型
由于在Poser中标准的人物造型成两脚并拢站立姿势,当调整为标准大字型造型时,人与地面将脱离,模型处于悬空状态,且当改变人体的身高时,与地面的相对位置也发生变化,对于不同的三维人体模型,为保证在3DS MAX进行更好的修改,须在Poser中执行“Drop to Floor”命令,模型回复到地面上,这样导入3DS MAX后,模型也将正好处于地面上。
2.2 模型的导入与修改
Poser导出的3DS文件,在3DS MAX中可以直接导入。Poser生成的PZ3格式的文件也可以通过中间插件GestureMax来导入到3DS MAX
·70· 工 程 图 学 学 报 2009年中,同时该插件可以创建骨骼并进行蒙皮,但该插件支持效果不是很好,生成的结果不理想,往往要进行大量的修改,反而并不可取。
由于在Poser中所生成模型的点和面数目较大,大量的人群生成时将严重影响计算机的演示效果,将对计算机硬件要求更高。所以在3DS MAX中有必要对人体模型进行优化,在不影响仿真效果的情况下尽量减少其点和面的数目。2.3 3DS MAX中人体动作的控制
2.3.1 人体模型各部分参数的测量
为了能自动生成可与三维人体模型相匹配的骨架,首先必须获得人体模型各部分的参数,包括身高,腰围,脚长等,而这些参数并不是作为三维模型的已知参数来提供,必须通过相关的分析与计算来取得。
由于所建模型的各部分比例均为标准正常人的比例(不考虑身体有缺陷者),只考虑胖瘦的变化,所以可以通过如下方法来获取各部分参数:
(1)对人体模型各部分进行划分,比如确定上半身与下半身的比例为5:8;
(2)求出所有顶点的坐标;
(3)根据划分求出某区间顶点在前后左右方向上的最大距离,也即求出包含该部分的最小矩形,即以该区域来表示其身体的大小。
身体各部分比例参数根据Curious Labs公司标准人体尺寸比例确定。比如,获取人体身高的方法:当三维人体模型成两脚并拢站立姿势时,对模型的所有顶点进行搜索,比较各顶点的坐标值,求出模型中最高点和最低点(即Z坐标值最大与最小点),两者Z坐标值之差即为该模型的高。由于在Poser中导出的模型成标准大字形,如图3所示。
图3 导出的模型
故通过上述方法还不能测出其真实身高,必须进行相应的计算。从图中可以看出,实际身高应该等于(GH + CB),而测量身高为GF,小于真实身高。即使已知CD位于身体的比例位置,而要求出C、D点的坐标是以身高为前提,所以不能求CB长度。
解决方法:在Poser中将模型调整为两脚并拢站立状态,然后导入3DS MAX中用上述方法进行测量,根据两次测量差的比值来确定其它模型的身高,此三维模型称之为参考模型。因为在Poser模型的高度变化实际上是一个等比缩放的过程,这样只需要测量一次就可以推算出其它模型的身高,不需要每次对不同的模型都单独导出来进行测量。关于人体各部位骨架参数的计算方法(见图4),参见文献[7]。
图4 身高计算示意图
在对人体其它部分尺寸进行测量时,如果模型顶点数目较少,仅利用切平面的方法容易引起误差,可以通过利用区间的方法来确定其尺寸。例如获取人体模型的腰围(与传统腰围意义不完全相同,这里以包围其腰部的最小矩形来确定)。假设在腰部设立一与Z轴垂直平面,如图5所示,因为各顶点为网格的结点,并不能保证代表腰部最前、最后及最左侧和最右侧的点正好落在此平面上,所以代表腰围的点须在一定的区间里面来确定,根据人体比例确定区间为0.61~0.63,由此根据得到的参数可以用来修正骨架。
2.3.2 添加骨架
获得人体基本尺寸后,就可以利用脚本语言,将人体模型的身高参数赋予人物对象,通过“Biped”命令自定义一个符合实际需要的人体
第2期 姜立军等:基于真实场景的大规模虚拟人群的快速生成方法 ·71·骨架。当获取了人体模型各部分尺寸后,根据参考模型就可以对骨架各部分大小进行相应的调整,从而使骨架与模型完美匹配。添加骨架效果如图6所示。
(a) (b)
图5 腰围测量示意图
图6 添加骨架效果图
2.3.3 蒙皮操作
为了能方便地调整人体模型,使人体的各部分随着骨架运动就必须进行蒙皮操作,使模型附着在骨架上面。在3DS MAX中操作时physique 修改器较skin更易操作和调节,但physique目前还不支持脚本语言操作,而skin则支持脚本语言操作。蒙皮过程的脚本程序参见文献[7]
2.3.4 编辑动作
对骨架进行蒙皮操作之后就可以通过调整骨架来随意设计人体动作造型(见图7),比如站立、蹲下等各种姿态。3DS MAX通过getTransform和setTransform命令往往不能通过脚本编程实现状态还原,move命令缺乏对不同人体模型的支持,但rotate命令可以实现对不同模型的调整并使之达到同样的姿态,且手动调节过程中参数可以通过MAXScript Listened来获取,方便编辑脚本。程序执行结果见图,脚本程序参见文献[1]。
(a) (b)
图7 动作调整示意图
2.4 3DS MAX中人体不同造型的快速生成
在人群的仿真中往往需要大量的各种不同姿态的造型,在进行动画演示时,如果动作模型过少就会让动作缺乏连贯性,从而看起来有点象机械手臂的动作,如果能创作更多的模型,就可以使人物的动作更流畅,更趋于真实,而对于数目较大的人群也需要大量相异造型的人体模型。快速生成不同造型的步骤是:①将不同的动作变换中的特征状态设定为特征模型;②对连续变换过程中的两个特征模型进行动作分解。③分解的步数即欲得到模型的个数。所谓动作变换中的特征状态是指动作过程中各关节变换到即将改变旋转方向的位置时的状态。以由站立姿势转为左脚在前的步行姿势为例:
当由前一特征状态转变为另一特征状态,总旋转角度为K,分解步数为10,则每次的增量为K/10,通过循环语句进行循环递增,每进行一次循环都将进行一次快照操作,将该动作姿态进行存贮,以便需要的时候导入。
其中的5个人体模型(见图8)分别以5个数据文件单独保存,以备将来单独调用。为使人体模型造型更逼真,可以对动作进行细分,提取相对较多的动作特征状态。
图8 动作分解图例
2.5 3DS MAX中人体模型的快速导出与导入
在3DS MAX中对模型的导出可以利用菜单“Export”命令,如果要导出多个模型中的单个模型,则可以选择“Export Selected”命令,将模
·72· 工 程 图 学 学 报 2009年
型单独保存为一个文件。但是由于在快速生成模型的过程中,如果分解的步数比较多,则创建的模型也相对较多,如果逐个执行菜单操作将非常繁琐,此时可以考虑通过脚本语言实现单个模型的自动保存。因为模型本身是一些点和面(三角形)构成,如果能导出模型的点坐标以及构成面的顶点关系,则就可以实现模型的保存,这一操作同样利用MAXScript 脚本实现,其程序可以参见文献[7]。
3 虚拟人群在场景中的分布参数
通过图像处理的方法,可以自动识别人群位置及分布参数[1],将这些参数应用到虚拟人上,即可建立与真实场景近似的虚拟场景。获得人群分布参数的基本思路是:首先获得一个需要仿真的场景,如图9(a),然后去除背景(图9(b)),灰度化处理并提取轮廓(图9(c)),高频滤波并进行连通域处理(图9(d)),使图像主体轮廓更加清晰,通过对图像轮廓特征的分析,确定了轮廓的共有特征,最后用圆形模板检测人的头部位置,获得头部圆形模板代表人员的圆心图像坐标(图9(e)),同样获得人的站立位置的图像坐标(图9(f)),通过对已知内外参数的相机小孔成像模型
(a) (b)
(c)
(d)
(e) (f )
图9 计算分布位置过程
成像原理的分析,找到在特定条件下确定二维图
像中点在三维空间位置的方法,计算出人群在实际空间的分布位置坐标。然后从模型库中调用人物造型,并将该坐标值赋给这些人物造型,即获得了与真实场景近似的虚拟场景,见图10。具体的成像原理及计算方法参见文献[7]。
基于真实场景的三维虚拟人群的生成是通过建立模拟实际中的场景模型,根据计算获得的真实场景中的人群分布信息,随机调用已建模型库中的模型于相应位置进行分布,从而达到场景
仿真的效果。最终生成的控制面板是各种命令的
集合,通过控制面板即可实现较复杂的过程。图10和图11分别是骨架匹配及动作调整后的人体模型。
图10 骨架匹配结果
图11 动作调整结果
设定的几种典型动作造型如图12所示。
图12 典型动作造型
第2期 姜立军等:基于真实场景的大规模虚拟人群的快速生成方法 ·73·
例如点击“右脚前行”对应“分解”按钮,当输入分解步数“20”时,程序将会将动作分解为20步,并生成20个三维模型,这些模型被自动保存在指定的模型库中,均可通过脚本语言进行单独调用。效果如图13所示。
图13 生成连续多个模型
如果要生成大量的人群,则需要建立数量相对较多的三维人体模型供随机调用。通过对单一动作的分解,可以获得相应分解步数的三维模型,通过对多个动作的分解操作则可以获得包含各种不同人体姿态的相对数目较多的人体模型库。对模型的名称通常用阿拉伯数字进行命名,这样在调用时有利于通过随机函数进行随机调用。
3DS MAX中建立的场景空间模型如图14所示。利用签署图像处理的方法,求得场景中人群的分布坐标位置,即它在地平面上的位置,通过脚本语言读取该坐标,然后从在模型库中随机导入一人体三维模型到相应虚拟场景中的对应位置,即可实现人群分布近似真实位置的显示。因为在生成坐标位置时已考虑到了虚拟场景与真实场景的比例,所以导入的人体模型的位置也是对应比例的坐标位置,与真实场景中的情况近似。
场景中人物的朝向也是随机分布的,因为目前还没有很有效的方法来确定人物的具体姿态和朝向,所以只能是对场景的近似描述。
将虚拟人群按真实场景中的分布参数设置到仿真场景后的结果如图15所示。
图14 仿真场景图
图15 人群分布结果图
4 结论
基于真实场景信息的人群仿真对于城市公共安全的评估及涉及到需要大量人员参与的各种训练具有非常重要的意义,特别是对场景的实时实景仿真,结合行为数据库,更能突出各种复杂情况下的人群活动情况,对各种方案的评估具有很重要的指导意义。人群仿真过程中需要的大量的三维人体模型对于体现场景的真实性很重要,而在建立这些人体模型的过程中将耗费大量的时间,增加了开发者的工作量。而对现场人群的分布信息的获取是能体现实时实景仿真的前提条件。
(1)通过对MAXScript脚本语言的深入研究开发,实现了对人体三维模型的测量和骨架的自动生成与匹配。
(2)对人体动作造型进行分解,实现了多个连续人体模型的快速输出,为开发大量的人体模型库节省了非常大的工作量。
(3)通过对图像进行处理,研究了人群的共同特征,编制了算法,实现了人群的识别,获
·74· 工 程 图 学 学 报 2009年
得了分群分布参数。
(4)实现了一种快速生成大规模虚拟人群的方法。
参 考 文 献
[1] 刘涛, 孙守迁, 潘云鹤. 面向艺术设计的虚拟人
技术研究[J]. 计算机辅助设计与图形学学报, 2004, 16(11): 1475-1483.
[2] Musse S R, Thalmann D. A behavioral model for real
time simulation of virtual human crowds [J]. IEEE Transactions on Visualization and Computer Graphics, 2001, 7(2): 152-1.
[3] Yohei Murakami, Toru Ishida, Tomoyuki Kawasoe, et al.
Scenario description for multi-agent simulation [C]//The
2nd International Joint Conference on Autonomous Agents and Multiagent Systems (AAMAS-03). 2003: 369-376.
[4] Tecchia F, Loscos C, Chrysanthou Y. Visualizing
crowds in real-time [J]. Computer Graphics Forum, 2002, 21(4): 753-765.
[5] Aubel A, Boulic R, Thalmann D. Real-time display of
virtual humans: level of details and impostors [J].
IEEE Transactions on Circuits and Systems for Video
Technology, Special Issue on 3D Video Technology, 2000, 10(2): 207-217.
[6] 纪庆革. 大型团体操虚拟编排与演练原型系统研究[D].
杭州: 浙江大学, 2003.
[7] 甘东兵. 基于图像人群分布信息的三维虚拟人群生
成[D]. 广州: 华南理工大学, 2008.
第2期 姜立军等:基于真实场景的大规模虚拟人群的快速生成方法 ·75·
