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

大家小时候在玩玩具时肯定都幻想过这样的场景:想象着自己手上的玩具能动起来,就像《玩具总动员》里的玩具们一样有自己的性格,能够和自己一起玩耍。以前我也一直以为玩具总动员只是童话,让玩具拥有灵魂,能够动起来的想法只是幻想。但如今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 最新技术资讯~

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/HMSCore/blog/5565983

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。