写点什么

如何给玩偶建模并让它跳个舞?

作者:HMS Core
  • 2022 年 8 月 16 日
    新加坡
  • 本文字数:2527 字

    阅读完需:约 8 分钟

大家小时候在玩玩具时肯定都幻想过这样的场景:想象着自己手上的玩具能动起来,就像《玩具总动员》里的玩具们一样有自己的性格,能够和自己一起玩耍。以前我也一直以为玩具总动员只是童话,让玩具拥有灵魂,能够动起来的想法只是幻想。但如今 HMS Core 3D建模服务让这一幻想变成了现实。


原理解释


使用 HMS Core 3D建模服务骨骼绑定能力就能让玩偶在手机屏幕上动起来,开发者只需要用普通手机拍摄二足人形物体的多张图像,建立静态的 3D 模型,通过云侧 AI 自动绑定算法后,自动生成模型的骨骼和蒙皮权重,通过业界主流引擎即可一键驱动。除了预置的动作还能加入自己动捕的个性化动作,让玩偶形象在屏幕上跟着节奏跳舞。


Demo 演示



自动骨骼绑定能力开发步骤


在开始开发工作之前,需要先配置AppGallery Connect,同时请确保工程已经集成HMS Core SDK并且已经配置Maven仓地址


  1. 使用云侧服务的能力,需要使用“agconnect-services.json”里的 api_key 值,在应用初始化时通过 api_key 或者 AccessToken 来设置应用鉴权信息,AccessToken 的优先级较高。


通过 setAccessToken 方法设置 AccessToken,在应用启动时初始化设置一次即可,无需多次设置。


ReconstructApplication.getInstance().setAccessToken("your AccessToken");
复制代码


获取 Access Token 可参见基于OAuth 2.0开放鉴权客户端模式。


通过 setApiKey 方法设置 api_key,在应用启动时初始化设置一次即可,无需多次设置。


ReconstructApplication.getInstance().setApiKey("your api_key");
复制代码


当在 AppGallery Connect 上注册应用时,会给您的应用分配 api_key。


  1. 新建 3D 物体建模引擎并初始化,新建自动骨骼绑定配置器。


// 新建3D物体建模引擎 Modeling3dReconstructEngine modeling3dReconstructEngine = Modeling3dReconstructEngine.getInstance(context); // 新建骨骼绑定蒙皮配置器 Modeling3dReconstructSetting setting = new Modeling3dReconstructSetting.Factory()     // 设置工作模式为图片模式     .setReconstructMode(Modeling3dReconstructConstants.ReconstructMode.PICTURE)     // 设置任务类型     .setTaskType(Modeling3dReconstructConstants.TaskType.AUTO_RIGGING)     .create();
复制代码


  1. 新建上传监听器回调,用于处理拍摄的物体图片上传结果


private Modeling3dReconstructUploadListener uploadListener = new Modeling3dReconstructUploadListener() {     @Override     public void onUploadProgress(String taskId, double progress, Object ext) {          // 上传进度     }     @Override     public void onResult(String taskId, Modeling3dReconstructUploadResult result, Object ext) {          // 上传成功处理     }     @Override     public void onError(String taskId, int errorCode, String message) {         // 上传失败处理     } };
复制代码


  1. 使用 3D 物体建模配置器初始化任务,并且给新建的 3D 物体建模引擎设置上传监听器,上传采集的图片数据。


// 使用3D物体建模配置器初始化任务(该接口需要在子线程中调用) Modeling3dReconstructInitResult modeling3dReconstructInitResult = modeling3dReconstructEngine.initTask(setting); String taskId = modeling3dReconstructInitResult.getTaskId(); // 设置上传监听器 modeling3dReconstructEngine.setReconstructUploadListener(uploadListener); // 调用3D建模引擎的上传接口,上传采集的图片数据 modeling3dReconstructEngine.uploadFile(taskId, filePath);
复制代码


  1. 查询自动骨骼绑定任务状态


// 查询3D物体建模任务状态需要初始化任务处理类 Modeling3dReconstructTaskUtils modeling3dReconstructTaskUtils = Modeling3dReconstructTaskUtils.getInstance(context); // 调用查询接口获取3D物体建模任务状态(该接口需要在子线程中调用) Modeling3dReconstructQueryResult queryResult = modeling3dReconstructTaskUtils.queryTask(taskId); // 获取建模任务状态 int status = queryResult.getStatus();
复制代码


  1. 新建下载监听器回调,用于处理自动骨骼绑定模型文件的下载结果


private Modeling3dReconstructDownloadListener modeling3dReconstructDownloadListener = new Modeling3dReconstructDownloadListener() {     @Override     public void onDownloadProgress(String taskId, double progress, Object ext) {         // 下载进度     }         @Override     public void onResult(String taskId, Modeling3dReconstructDownloadResult result, Object ext) {         // 下载成功处理     }     @Override     public void onError(String taskId, int errorCode, String message) {         // 下载失败处理     } };
复制代码


  1. 新建的下载配置项并将新建的下载监听器传入新建的 3D 物体建模引擎,下载骨骼绑定成功的模型文件


// 设置下载配置项 Modeling3dReconstructDownloadConfig downloadConfig = new Modeling3dReconstructDownloadConfig.Factory()     // 配置OBJ或glTF格式     .setModelFormat(Modeling3dReconstructConstants.ModelFormat.OBJ)     // 配置普通或PBR模式     .setTextureMode(Modeling3dReconstructConstants.TextureMode.PBR)     .create(); // 设置下载监听器 modeling3dReconstructEngine.setReconstructDownloadListener(modeling3dReconstructDownloadListener); // 调用3D物体建模引擎的下载接口,传入任务ID,下载地址和下载配置项,下载模型文件 modeling3dReconstructEngine.downloadModelWithConfig(taskId, fileSavePath, downloadConfig);
复制代码


更多应用场景


使用骨骼绑定功能,除了可以实现让玩偶在手机屏幕上跳舞,还可以帮助开发者做很多其他有趣又强大的功能。如电商领域,使用自动骨骼绑定能力可以驱动手办进行动态展示,从而增加产品的吸引力;在教育领域,可以将骨骼绑定和音频功能结合,让孩子手中的玩偶跳舞讲故事,寓教于乐;在游戏领域,可以将骨骼绑定和 AR 功能结合,让 3D 模型走入真实场景中。


了解更多详情>>


访问华为开发者联盟官网


获取开发指导文档


华为移动服务开源仓库地址:GitHubGitee


关注我们,第一时间了解 HMS Core 最新技术资讯~

用户头像

HMS Core

关注

HMS Core技术团队。 2022.06.16 加入

分享最新的技术干货,带来最全的能力应用场景,更新热门开发者圈子活动。与开发者一起,同成长,共精彩。

评论

发布
暂无评论
如何给玩偶建模并让它跳个舞?_HMS Core_InfoQ写作社区