这两年的技术发展,大家想必都看在眼里,单用“爆发”二字,实在难以描述其中的惊天巨变。而回到网页3D这个话题上,我想,最大的驱动力,莫过于16年至今虚拟现实的迅速崛起,彻底推进了三维可视化技术的突飞猛进,而物联网发力,又开启了一扇通往新世界的大门。
游戏界至今争论不休的Unity还是HTML5,依我看至少WebGL活的好好的,而插件技术么,则让我想起了一首悲伤的歌:dyinginthesun…
今天当然还是给大家介绍一款最新的三维可视化成果,开始正题前,我想先盘点一下这两年还算靠谱的一些三维应用。
工业上的,偏销售侧有复杂零件的三维展示,依托零件原有模型,做好参数转换,比较容易实现。偏管理侧,主要是厂房车间和生产设备的三维监控;电力行业,有无人值守变电站的巡检和监控,结合三维可以进行远程巡检作业,降低人工作业的风险;仓库和粮仓,引入三维后,可以结合库房系统、环境系统,进行全方位的管理;矿山和隧道,这个很好理解:作业越是危险、对环境要求越高的地方,越是需要虚拟仿真;3D家装设计,通常是在线模式,拖拽设计,结合家具贩售,早先是以Stage3D为主,这两年也看到很多WebGL的案例;博物馆、图书馆、档案馆的导览结合解说,复杂设备的虚拟仿真培训,商品展示,这个比较多了,像虚拟试衣间,商品的三维在线浏览,比如刚看到这款霸气侧漏的零食:
这次的案例,对模型几乎没有要求,只是用了最基本的形状元素,但是却可以解决企业在不断发展壮大,尤其是信息化进程不断深入的过程中,都会遇到的问题,那就是如何将复杂流程可视化。
流程,看起来很简答的两个字,英文process。我们这里所说的流程,主要是企业的业务流程,如生产流程、各类行政申请流程、财务审批流程、人事处理流程、质量控制及客服流程等等。
业务流程对于企业的意义不仅仅在于对企业关键业务的一种描述;更在于对企业的业务运营有着指导意义,这种意义体现在对资源的优化、对企业组织机构的优化以及对管理制度的一系列改变。这种优化的目的实际也是企业所追求的目标:降低企业的运营成本,提高对市场需求的响应速度,争取企业利润的最大化。(from智库百科MBAlib)
为啥我突然开始拽商业名词了呢?因为,这是甲方爸爸给出的一个难题。
甲方爸爸的企业,部门繁多,流程复杂,为了提升业务流程的效率,同时优化企业自身的管理,提出了一个将其现有业务流程进行三维可视化的需求。
为什么要把流程进行三维可视化呢?
通俗的说,因为平面的实在是看不清理不顺了;时髦点讲,只有“升维”,才能展示和包容更多的信息。
看到这里的三体同好们,请不要吝啬向我隔空挥舞小手!
甲方爸爸的信息实在太多,而且不能透露,我们就找其中几个简单的举个例子,比如每个企业每天都在处理的报账流程:(应要求马赛克了一些文字)
报账流程业务图:
二层逻辑交互图:
报账业务基础架构:
看到如此复杂的结构,无论你是以下哪种表情,都不要惊慌:
我们先简单梳理下流程图的大致框架,一共可以分为五层:
虽然看起来层次感有了,不过这只是个整体的框架demo,我们在这基础上一步步修改。
说下层模型的圆弧效果。为了把每个层做成圆弧的效果,我把层模型拆解成了由9个简单模型组合而成,上图给你们看(原谅我图画得渣渣)。
模型1、2、3、4、5均为厚度相同的立方体,模型6、7、8、9为大小相等的1/4圆柱体,9个模型组合成层模型。
模型1的代码:(模型1,2,3,4,5差不多,就只贴模型1的代码了。)
varcenterNode=newmono.Cube({width:width,height:height,depth:depth,});centerNode.s({'m.type':'phong','m.color':color});模型6的代码:
varleftTopCylinder=newmono.Cylinder({radiusTop:radius,radiusBottom:radius,height:height,arcLength:Math.PI/2,//圆柱的圆弧所占长度arcStart:Math.PI//圆弧开始的角度});leftTopCylinder.s({'m.type':'phong','m.color':color});leftTopCylinder.p(-width/2,0,-depth/2);9个模型合并:
varcombo=newmono.ComboNode([centerNode,leftNode,rightNode,topNode,bottomNode,leftTopCylinder,rightTopCylinder,leftBottomCylinder,rightBottomCylinder],['+'],true);背景和配色首先,增加了背景图片,选取的是一张星空的图片,之后根据背景修改了配色和部分模型。
效果还是不错的,看起来更加大气。增加背景代码:
network.setClearColor(0,0,0);network.setClearAlpha(0);network.setBackgroundImage('./images/background.jpg');文字图中显示文字类似对话框的东西其实是billboard,先创建一个billboard,再用canvas画一张图作为贴图贴到上面就可以了。
这两种属于obj模型,是设计小姐姐做的,然后我们通过make.Default.register函数定义模型,通过make.Default.load函数加载使用模型。
为了使效果更逼真,我们给模型做了环境贴图。
object3d.setStyle('m.envmap.image',make.Default.getEnvMap('envmap5'));
单纯的静态图看起来有些单调,所以我们给连线加了动画效果:找一张一半透明一半有颜色的图片,作为贴图贴在连线上,利用动画函数使贴图不断平移,就实现了下面的效果。
最底层的模型采用了实体模型,真实感更强:
上面也提到过,层与层、层内各个模块中之间存在错综复杂的多层嵌套关系,为了展现这种关系,那肯定就要连线,话不多说,直接上图。
线的类型有两种,层与层之间的连线类型是link,每层模块之间的连线类型是pathLink,创建pathLInk代码如下:
link.setLinkType('control');//control属性控制连线的拐点link.setControls(controls);//controls为数组这样就可以呈现图中的伞状效果啦。
为了增加点朦胧感以及让伞状效果更好,我们特意添加了一点光环,有没有感觉金光从天而降呢?此时请想象自己45°角仰望天空,金光照在脸上。
基础打好,下面就可以加上动画,执行流程了。先上图:
点击左边的按钮,出现图中的白色小球,沿着连线运动,完整展现整个流程步骤。当然,镜头会随着小球切换,这样小球时刻在视线正中,妈妈再也不用担心我的视线被挡住。
镜头切换的代码也很简单:
varpos=link.getPointAt(v);workflowSphere.p(pos);billboard.p(pos.clone().add(newmono.Vec3(0,250,0)));varcamera=main.sceneManager.network3d.getCamera();camera.lookAt(pos);camera.p(pos.clone().sub(this._cameraOffset));数据最后聊聊数据。为了方(tou)便(lan),我们将流程图的所有数据都存放在后台。在后端页面,可以设置流程图的结构、逻辑、流程节点的样式等。
利用Ajax获取模型数据,然后三行代码便可建造一个3D流程图系统。
dataManager.addCategoryFromJson(loadData.categories);dataManager.addDataTypeFromJson(loadData.datatypes);dataManager.addDataFromJson(loadData.datas);同样,可以在后端页面设置连线的样式、颜色、起点、终点等等,获取到连线数据后,利用上文提到的方法便可绘制出所需要的连线。连动画的起点、走向同样可以在后端页面设置。
如果甲方爸爸觉得某个流程有问题,需要修改时,不要怕,默默打开后端页面改几个节点就好了。速度这么快,快夸我快夸我。
总而言之,只需要通过数据配置即可生成不同的三维流程,满足客户的各种需求。
对demo感兴趣的同学,可以给我发邮件:tw-service@servasoft.com,甲方爸爸的数据不能给你,demo还是可以给你们看一眼的。