3D 轻量数字人

快速创建基于3D技术的数字人,并应用到WebGL、Unity、Unreal Engine等引擎中

  • 在浏览器中访问 数字人工作台
  • 获取形象的唯一uuid
  • 通过对应的 URL https://meta-asset.shuwen.com/avatar/v1/model/{uuid}.glb 可以获取该虚拟形象的 GLB 模型
  • 将获取到的 GLB 模型文件在你的代码中运行起来吧

使用 HTTP API 获取 GLB

标题部分 使用 HTTP API 获取 GLB
终端窗口
https://meta-asset.shuwen.com/model/v1/

使用方在自己的数据库中存放用户 ID 和 Avatar UUID 的映射关系。

终端窗口
/avatar/{uuid}.glb

2. 默认贴图 1K,支持 256、512、1K、2K

标题部分 2. 默认贴图 1K,支持 256、512、1K、2K
终端窗口
/avatar/{uuid}.glb?texture_size=512

3. 默认合并 Mesh,可以选择不合并

标题部分 3. 默认合并 Mesh,可以选择不合并
终端窗口
/avatar/{uuid}.glb?join_mesh=no

4. 默认贴图合并为一张大贴图,可以选择不合并(不合并贴图时,mesh 也必须分离)

标题部分 4. 默认贴图合并为一张大贴图,可以选择不合并(不合并贴图时,mesh 也必须分离)
终端窗口
/avatar/{uuid}.glb?texture_size=512

5. 默认带有 ARKit 和 Lipsync 扩展的 BlendShapes,可以关闭 BS 功能,或者选择只有部分 BS 的模型

标题部分 5. 默认带有 ARKit 和 Lipsync 扩展的 BlendShapes,可以关闭 BS 功能,或者选择只有部分 BS 的模型
终端窗口
/avatar/{uuid}.glb?morph_targets=no # 去除 BS
/avatar/{uuid}.glb?morph_targets=arkit # 只有 ARKit 规范的 BS

6. 默认带有动画,可以选择生成不带动画的模型,或者指定带哪些动画

标题部分 6. 默认带有动画,可以选择生成不带动画的模型,或者指定带哪些动画
终端窗口
/avatar/{uuid}.glb?animation=no
/avatar/{uuid}.glb?animation=idle,walk

7. 获取 draco 压缩算法压缩后的 glb

标题部分 7. 获取 draco 压缩算法压缩后的 glb
终端窗口
/avatar/{uuid}.glb?compress=draco

第三方使用 SDK 让用户自定义创建形象

标题部分 第三方使用 SDK 让用户自定义创建形象
    1. 第三方在 metaavatar 系统中创建应用,填写应用的名称、用途、所在域名,分配 appkey 和 appsecret。
    1. 服务端通过 appkey 和 appsecret 获取 access_token。
    1. 在自己的页面中引入 JavaScript SDK,使用 access_token 初始化自定义捏脸页面。
终端窗口
import { AvatarCreator, AvatarError } from '@shuwen/avatarsdk';

const avatarCreator = new AvatarCreator ({
  access_token: "<>",
  // 可通过 CSS Variables 实现
  themes? : {
    primaryColor: "#",
    secondaryColor: "#",
  }
  // 如果 uuid 不为空,则是编辑模式
  uuid?: "<>",
  // 高级捏脸配置,对有 IP 自定义,服装自定义需求的客户提供扩展支持
  config?: {
    
  }
});

// 用户编辑完成
avatarCreator.on("complete", (event) => {
  // 获取模型 uuid
  console.log(event.uuid);
});

// 编辑过程发生错误
avatarCreator.on("error", (error) => {
  switch (event.type) {
    // 非法的 appkey 或 appsecret
    case AvatarError.ILLEGEL_APP:
      break;
    // uuid 不存在或者无权限
    case AvatarError.INVALID_UUID:
      break;
    // userdata 格式有错
    case AvatarError.INVALID_USERDATA:
      break;
    // 服务器异常
    case AvatarError.SERVER_ERROR:
      break;
  }
});

// 渲染到 HTML DOM 结构中
avatarCreator.render(document.getElementById("avatarEl"));
    1. 将照片转模型的算法能力服务化
终端窗口
POST /face/generate
可以主动传递一些 Query 参数,让生成的结构更符合需求
标题部分 可以主动传递一些 Query 参数,让生成的结构更符合需求
  • age - 年龄
  • gender - 性别
  • skinColor- 皮肤颜色
终端窗口
{
  "gender": "<>", // 算法识别到的性别
  "age": "<>" // 算法识别到的年龄
  "mesh": [], // 网格体
  "texture": "<>", // 贴图
}