某游戏前Unity3D主程前来讲讲。
我从2014年开始使用Unity,最后使用的Unity版本是5.X,后面因转做机器学习这块,之后就没怎么用过unity了,感觉错过了元宇宙风口(哈哈哈哈开玩笑的,我对元宇宙仅仅保持观望态度,而且我更喜欢搞机器学习)
有一段时间没用了,有点生疏了,这里就稍微讲讲个人浅见,如不够深刻,请见谅。
Unity作为游戏引擎,上手其实还是很低门槛的。我们2014年时为了给投资人展示我们想做的玩法,仅仅用了一周,就做一个3D射击游戏demo。其实做3D游戏,何妨不是一种在虚拟空间的仿真呢。
通过拖拽的方式,你可以设置:
当然,在object里挂载代码并非是一个好的实践,这会让代码分散,同时不方便做版本管理。但在快速出demo阶段,用用无妨。
除了上面说到的,Unity引擎一个方便的地方是它的物理引擎。例如物体上还可以挂载其他属性,例如Collider属性,这样两个物体碰撞时的行为引擎就会自动计算出来。例如下图这种碰撞加抛物线效果,完全不需要你写代码实现,只需要加碰撞盒子,设置刚体,设置重力即可。
你还可以设置光照,让场景拥有阴影。不过实时计算阴影是很费资源的,如果光源是平行光且角度不变,你可以提前做好场景烘焙。所谓场景烘培,就是在unity里提前计算好阴影的位置,生成lightmap,贴在原场景上。
当然,用Unity建模是非常难的,不过Unity对其他建模软件的模型支持得很好,Maya或3D Max建模完成后,导入Unity里用就行了。
在我转行后,Unity的新版本还有机器学习,从这个版本开始我就没用过Unity了,不过看过几个demo,知道unity的ML-Agents能做什么(嘿嘿,还好我是搞机器学习的)。ML-Agents使用了强化学习,使得角色可以更智能。说句题外话,在ML-Agents出来前,我们也做过简单的基于规则的AI。虽然叫AI,其实只是个有限状态机(FSM),和机器学习一点关系都没有。
讲完Unity这些特性后,可以开始回答问题,为啥Unity为什么可以做数字孪生仿真模拟?
数字孪生业界普遍定义为[1]:
将数字孪生技术定义为:是充分利用物理模型、传感器更新、运行历史等数据,集成多学科、多物理量、多尺度、多概率的仿真过程,在虚拟空间中完成映射,从而反映相对应的实体装备的全生命周期过程。
做数字孪生仿真模拟,我们需要:
举个具体的例子。我们想做一个地区交通状态的数字孪生,看看自动驾驶在这个地区是否可行,我们可以在unity里建立这个城市的地图,然后试试在不同地方放入一定数量的车辆,通过第三方API来控制车辆自动驾驶,我们可以从中得知地区能容纳多少车,发生交通事故的频率及严重性等等,从而助力城市治理。
所以,确实Unity能满足数字孪生仿真的基本要求。
不过,Unity的功能也是有限的,在NLP(例如语音合成),计算机视觉这块,Unity以及第三方unity库能提供的功能非常少,如果要做好数字孪生模拟,仅仅靠unity还不够,还得通过第三方的API,才能使得数字孪生仿真效果更智能。但Unity作为数字孪生仿真模拟的容器,确实是非常适合的。