Skip to content

RFUniverse 开源版本介绍

不考虑学术问题,只从工程角度出发,仿真环境的关键就是三件事:仿真本身性能如何、新手的上手难度如何、接口的完全性如何。前者是Unity本身决定的,我们能做的也只有调整某些参数使其达到速度和优度的平衡;而后两者是我们能把握的。

开源版RFU使用方案

目前我们确定目标和方案:

  • 目标:用户在不安装Unity的条件下就可以玩转RFUniverse
  • 方案:提供两个Unity可执行文件:
  • 第一个为可编辑的场景。
    • 用户可以直接通过键鼠与环境进行交互,自行搭建环境。
    • 支持导入和导出json配置文件,该文件描述了场景中物体的位置信息。
    • 支持键鼠的交互使Camera的位姿改变。
  • 第二个为与Python端可互通的场景
    • 该场景既支持代码导入物体,也支持json配置文件直接生成场景。
    • 该场景支持所有已有的物理性、支持强化学习
    • 支持键鼠的交互使Camera的位姿改变。

对于我们工程项目中已有的资源(模型、贴图、纹理、材质等),我们都可以制作成Prefab并内置到GUI里面,放上缩略图供用户选择。而对于用户想要自定义的模型或定制prefab,我们暂时不提供无Unity Editor的解决方案(因为我觉得写起来会非常麻烦,这个功能可以放到Todo里面,等到开源了之后再慢慢添加)。

对于用户制作的AssetBundle以及我们后续提供的AssetBundle(相当于游戏扩展包),我希望第一个场景也可以支持拖动导入,但是这个缩略图可以没有,只显示名字即可。

下面是我回顾之前一段时间RFUniverse的开发过程中,我觉得比较需要的搭建场景所需GUI功能。我目前的想法是先按照这里的开发进程来进行,同时向大家征求一些意见。等下面这些功能以及大家的需求开发完毕(更确切地说,必要的、合乎实际的需求开发完毕)之后,我们把之前的场景都适配到现在的框架下测试一遍,第一版开源就算是完成了。后面的文档、教程以及更多的功能接口可以继续慢慢做。

开源版RFU做的优化

  1. 修改Agent.cs基类,使得与Py-Unity通信有关的物体自动注册到对应Manager中,省略了编写Agent脚本的步骤。
  2. Unity端在接收到数据后直接调用对应Manager进行解析并分发结果,不再等待下一帧FixedUpdate。
  3. 更加细化了Manager和Attr模块的功能:
  4. 一个场景中同属性物体只有1个Manager模块,而每个物体都有一个Attr模块。
  5. Manager模块只负责接收数据、向物体发送指令、收集数据、数据回传。
  6. Attr模块负责接受指令并执行。
  7. 两个场景均支持与键鼠的交互,用户可以自行修改Camera的pose并记录在json中。
  8. 所有与Load物体相关的操作均在统一的asset_channel中进行,取代了之前的不同channel各自load的方案。Load进去的物体会自动注册到对应的Manager名下,便于管理。
  9. 未来会扩展更多的功能及接口。

待开发功能:

以下功能都需要在json配置文件中支持记录和复原。 Demo视频

物体创建篇

  • 创建基础几何模型(Cube、Sphere、Capsule、Cylinder、Quad)
  • 创建Prefab中的物体
  • 根据AssetBundle文件创建物体
  • Obi相关的物体,制作成prefab,直接导入Empty

Transform篇

  • 物体的旋转(Rotation)
  • 物体的平移(Position)
  • 物体的缩放(Scale)
  • 物体的父子关系

物体属性篇

  • 物体的颜色材质可调
  • Collider的添加(VHACD及各种Collider)
  • Rigidbody的mass调整
  • Rigidbody的useGravity调整
  • ArticulationBody的JointType调整
  • ArticulationBody的LowerLimit、UpperLimit调整(仅JointType为Prismatic或Revolute时可调)
  • ArticulationBody的Stiffness调整(仅JointType为Prismatic或Revolute时可调)
  • ArticulationBody的Damping调整(仅JointType为Prismatic或Revolute时可调)
  • Collider的调整
  • VHACD的结果可以保存
  • Collider的Physics Material参数调整
  • SMPLX的调整(人的高矮胖瘦、关节)(身体、表情、

注:当前Collider的调整只考虑一个part里面有一个mesh的情况

UI篇

  • 物体旁的transform参数显示
  • 调整transform时的整数吸附
  • 物体transfrom参数可输入
  • 物体的Collider显示
  • 对Rigidbody、ArticulationBody的可调参数的显示和调整
  • ArticulationBody的转轴取值范围显示

Long Term TODO

  • 对ArticulationBody的点击可选中其某一部分
  • OBI相关参数的调整
  • 在Edit场景中加入制作prefab的功能
  • 文档
  • Tutorial
  • 加入获取数据接口,不再每帧发送无用数据
  • 整合所有channel简化接口调用方式
  • 整理优化所有模型资源,提升运行渲染性能
  • 开发Editor脚本:简化Prefab制作流程以及Prefab规范性检查