3D技术在数字藏品中的应用

简介: 本文通过图文的方式详细介绍了在淘宝App中如何使用3D相关技术,优化淘宝App中的数字藏品的展示。从背景介绍、方案设计、模型预处理,模型处理、脚本操作等过过程出发来介绍,同时重点分析了其中的一些核心技术问题的解法。希望通过这篇文章,能够给初次接触 blender 和 unity 的前端开发同学有一定的启发和参考。

image.png

 业务背景


大淘宝技术为了优化淘宝App中的数字藏品的展示,为了凸显数字藏品的虚拟价值,带来营销增益buff,所以考虑建设对应的3D渲染能力,目前针对3D渲染侧有两部分诉求,一部分是如何渲染商家给到的 3D 模型,另一个部分是使用通用的相框模型将商家发行的虚拟藏品(一个的图片、视频)等进行动态的贴图展示,具体的相框模型如下:

image.gif

最终需要能力定制出这样的效果:

image.png

image.png当供应商提供模型落库完成,通过对应的 mid(模型的oss地址索引),业务可以接入 对应的渲染组件进行渲染,过程中可以调用 setGameObjectInfo 这个函数进行动态纹理的修改,具体渲染组件中的 API 接口设计如下

interface GameObjectInfo {
  /**
   * 图片纹理url,淘宝 CDN 资源地址
   */
  img?: string;
  /**
   * 视频纹理url,淘宝CDN资源地址
   *
   * @remarks
   * 如果img 和 videoSrc同时存在优先videoSrc
   */
  videoSrc?: string;
  /**
   * 设定 gameObject 颜色
   */
  color?: string;
  /**
   * 材质是否需要反光
   */
  isShine?: boolean;
}
interface setGameObjectInfo {
  /**
   * 针对模型或者模型中sku的某一个面进行贴图设置
   */
  (midOrSkuName: string, data: Record<string, GameObjectInfo>,): Promise<void>;
}

▐  技术挑战


基于已有的模型渲染能力,结合本次的技术方案,这几部分挑战可能在这个后续的开发链路中需要重点关注:

  1. 针对通用相框模型需要预先处理,一个是mesh 的拆分,另一个是mesh 的合并,调整对应 mesh面的 UV 映射,这部分使用什么软件进行处理?
  2. 如何将web 中标准的 gltf 相框模型供给到淘内App,淘内App 模型是需要通过unity 进行转化,这中间的转化链路应该是怎么样?同时这个转化过程中如何能够保证两个平台中效果是一致的?
  3. 渲染脚本应该如何修改,整体的实现思路应该是怎么样?在这个过程中如何保证模型的渲染效果?提高模型的渲染性能,提高C端的用户体验?

image.png

image.png

image.png

UV面投射

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.pngimage.png

image.png


image.png

interface GameObjectInfo {
  /**
   * 贴图url,淘内地址
   */
  img?: string;
  /**
   * gameObject 颜色
   */
  color?: string;
  /**
   * 材质是否需要反光
   */
  isShine?: boolean;
}
interface setGameObjectInfo {
  /**
   * 针对模型或者模型中sku的某一个面进行贴图设置
   */
  (midOrSkuName: string, data: Record<string, GameObjectInfo>,): Promise<void>;
}

▐  通过mid找到对应的GameObject

const findResult: FindPrefabResult = this.findNode(mid);
if (!findResult) return undefined;
const skuGos: Node[] = [];
forEachSkuGo(findResult.prefabObject, (node) => {
  skuGos.push(node);
});
const nftNames = Object.keys(data);
const texList: Promise<void>[] = [];
skuGos.forEach(sku => {
  sku.forEachChild(mesh => {
    if (nftNames.includes(mesh.name)) {
      texList.push(this.udpateNodeMaterial(mesh, data[mesh.name]));
    }
  });
});
return await Promise.all(texList);

 根据参数修改GameObject对应的参数


private async udpateNodeMaterial(imgGo: Node, option: {img?: string; color?: string; isShine?: boolean}) {  const { img, color, isShine = true } = option;  const imgRender = imgGo.getComponent(MeshRenderer);
  const material = isShine ? new LitMaterial() : new UnlitMaterial();
  imgRender.materials.clear();  imgRender.materials.add(material);
  if (color) {    material.color.set(color);  }
  if (img) {    material.offset.set(0, 1);    material.scale.set(1, -1);    const tex = await this._assetManager.loadAsync(Texture2D, '', img);    tex.samplerFlags |= SamplerFlags.MinAnisotropic | SamplerFlags.MagAnisotropic;    material.texAlbedo = tex;  }}


image.png

 模型转动畸变很大,感觉不是围绕中心点进行渲染


这是因为受到模型设定的Fov的影响,FOV越大,视角越大,转动畸变越大,为了解决这个问题,需要在建模是修改对应的项目的FOV值,默认FOV为60,可以将这个值调整为30,具体效果可以参考下面:

image.png

image.png

 unity中两种材质的对比,LitMaterial、UnlitMaterial区别


目前 acetiny-engine 引擎中,两种材质都支持,两个材质的区别是UnlitMaterial不会受到光照的影响,比较省资源,LitMaterial会受到光照的影响,针对业务的诉求,可以直接将以前使用的LitMaterial 变为 UnlitMaterial,即可满足业务的诉求。


 各向异性过滤,提高从掠射角观察时的纹理质量


各向异性过滤(英語:Anisotropic filtering,简称AF)是用来过滤、处理当视角变化导致3D物体表面倾斜时造成的纹理错误。如其名称所示,它是对周围各个方向上的像素进行取样计算后映射到目标像素上的技术。与双线性过滤和三线性过滤相比,它在大角度显示方面具有更高的精度,令画面更逼真,但计算量也更大,对显示卡的要求也更高。在actiny中默认是关闭的,可以开启并设置材质的采样率,用于提高从掠射角观察时的纹理质量。


tinyWeb.getApp().init({  renderOptions: {    anisotropy: true    ...  },  ...});


修改之后,对应的效果有了明显的提升,如图所示:

image.png

image.png

image.png

image.png

image.png

image.png

image.png

相关文章
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
银行数字新生态建设
银行数字新生态建设
|
7月前
|
存储 大数据 区块链
数字藏品领域新时代
数字藏品市场在中国多领域蓬勃发展,销售额迅速增长,得益于区块链、大数据和云计算等技术的支持,确保其唯一性、真实性和流通性。数字藏品具有稀缺性、真实性和平民化特点,广泛应用在文化遗产保护、珠宝设计、艺术品市场等领域,并通过技术创新与生态系统建设扩展应用场景,与元宇宙平台融合,提升用户体验。
|
存储 编解码 人工智能
数字技术可以让古籍活过来
数字技术可以让古籍活过来
106 1
|
人工智能 文字识别 Serverless
你认为数字技术能让古籍“活过来”吗?
在我国历史长河中留存下来的古籍星汉灿烂,但无论是竹简帛书还是纸质古籍在时间的浸润下都会造成不同程度的损毁,抢救、保护、修复... ...如何让古籍“活”起来、“动”起来、传承下来,是一个亟待解决的课题。通过阿里云 Serverless 产品,帮助复旦大学进行数字图书馆的搭建,从传统的浅层次图片,逐步建立了可打标、可互动图像修复的标准方案,让更多用户可以查阅到复旦图书馆特藏中心的古籍图片等大量珍贵的历史资料。
163 1
|
文字识别
数字技术之古籍
将要讲述数字技术在古籍方面的研究方向
|
存储 人工智能 自然语言处理
你觉得数字技术能让古籍活过来吗?
你觉得数字技术能让古籍活过来吗?
77 0
|
开发者
一分钟教你怎么拿到阿里云的数字藏品#阿里云数字藏品合集
阿里云发行了首款数字藏品;历史上架过“阿里云飞天5K纪念碑”、“开发者社区云小宝”、“阿里云第一行代码”、这些数字藏品都是自己的个人资产,特别具有收藏价值,满足自己的收藏爱好。
1514 2
一分钟教你怎么拿到阿里云的数字藏品#阿里云数字藏品合集
|
容器
数字藏品开发(源码版)丨NFT数字藏品系统开发(开发需求)丨NFT数字藏品开发方案
  Each digital collection platform generally defines digital collections as a kind of virtual cultural goods with limited distribution,including but not limited to digital paintings,pictures,music,videos,3D models,and other forms.It uses blockchain technology to record the process of rights confirma
NFT和数字藏品
NFT和数字藏品自制脑图
109 0
NFT和数字藏品
|
安全 5G
NFT数字藏品系统丨NFT数字藏品系统开发(详细及方案)丨NFT数字藏品开发源码及案例
 For example,the data collection of the Internet of Things,5G transmission,big data processing,the use of artificial intelligence and the guarantee of blockchain,each technology only completes a part of the life cycle of data elements,and needs larger and more focused concepts,scenarios and business