电商3D购物-自研引擎探索和业务实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 电商3D购物 自研引擎探索和业务实践 B2C零售-前端技术- 沈彬(梓泷) 大淘宝-XR技术- 杨舟(阿查)
2. 目录 01 背景介绍 02 自研3D引擎AceNNR 03 3D场景构建业务引擎 04 性能优化方案
3.
4. 背景介绍
5. 背景 - 3D购物业务探索 基础商品体验 可看 商品3D化,围绕单商品决策点,提供更直观的选购体验 可试 可搭配 可玩
6. 背景 - 3D购物业务探索 沉浸式购物 围绕电商的不同场域,建设不同类型的3D场景和玩法,提升沉浸式3D感知 搜索/推荐场景 营销场景
7. 背景 - 研发面临的问题 引擎选择 业务开发 性能优化 对于3D购物,我们需 有了引擎之后,怎么 3D模型小则几M,大 要什么样的引擎,来 快速的开发,支持业 则百M,如何快速下 满足各方面的诉求? 务的快速迭代? 载,防止用户长时间 等待?
8. 自研3D引擎AceNNR
9. 自研3D引擎AceNNR 需要解决问题 包体 跨平台 效果 多实例 开发效率
10. 自研3D引擎AceNNR-架构 Behaviour Scene Node Mesh Texture Camera Animation Particle Material Physics Lighting & Shadow • 底层依赖成熟的开源库BGFX, 解决Graphic API的跨平台问题 Rendering System Forward Rendering Post Processing Culling Draw call batching Multi-thread Bgfx OpenGL Metal DirectX Vulkan 设计思路: • 简化设计,仅提供必要的功能 模块,解决包体问题 WebGL OpenGLES • 引擎基于C++开发,并支持全 平台:Windows,Mac,iOS, Android, Web(WebAssembly) • 最终包体大小: • ios, android: < 4MB • webassembly: < 1MB (Gzipped)
11. 自研3D引擎AceNNR-效果 虚拟人 场景 商品 材质 标准PBR 液体 玻璃 布料 光照 自定义材质 (供应商定制) 环境光 Light Probe Reflection Probe Lightmap Shadow Map 各向异性 NeRF 车漆 直接光 钻石 效果对齐 Unity Editor AceNNR
12. 自研3D引擎AceNNR-效果展示 标准PBR 玻璃+液体 钻石 场景
13. 自研3D引擎AceNNR-效果展示 NeRF
14. 自研3D引擎AceNNR-效果展示
15. 自研3D引擎AceNNR-多实例 单实例 全局单例 游戏应用 资源独占 ? 平台应用 AceNNR 多实例 组件化 注:此处的资源指:CPU,内存等等系统资源 资源共享
16. 自研3D引擎AceNNR-多实例 挑战 Behaviour Scene Node Mesh Texture Camera Animation Particle Material Physics Lighting & Shadow Rendering System Forward Rendering Post Processing Culling Draw call batching Multi-thread Bgfx OpenGL Metal DirectX Vulkan WebGL OpenGLES 注:移动端显存和内存在同一块物理内存上,我们暂时都算做内存占用 • BGFX为单实例 • 3D引擎的内存消耗较大, 其中90%是GPU资源占用 (贴图,Mesh),多实例 该如何管理内存?
17. 自研3D引擎AceNNR-多实例方案 页面跳转流程 页面回退流程 页面B 页面A 1.页面跳转 1.页面回退 EngineB EngineA 2.引擎挂起 3.释放GPU对象 4.关闭BGFX BGFX 页面B 页面A 5.启动引擎 4.初始化BGFX EngineB EngineA 5.引擎恢复 6.从磁盘加载资源 7.初始化BGFX 8.重新创建GPU资源 BGFX 2.关闭引擎 3.释放GPU对象 4.关闭BGFX
18. 自研3D引擎AceNNR-开发模式 浏览器(兼容) 同层渲染(性能) 前端UI(React,Vue .etc) 事件通信 • 业务的DOM UI开发和原来的方式一 致 业务3D逻辑 • 业务3D逻辑可以通过typescript binding开发,和UI之间通过事件机 制通信 Typescript Binding • 前端同学的开发方式和普通的页面 开发一致(VSCode+Chrome) js binding Engine(C++) 要点: Engine(WebAssembly) • 根据容器环境的不同,自动切换到 使用wasm运行,或者Native (C++)
19. 场景构建业务引擎
20. 场景构建业务引擎 - 业务形态分析 商品 权益 人 + 电商必备元素: 各式各样的场景: 不同的玩法交互: 收集玩法 试穿试戴 展览性质
21. 场景构建业务引擎 - 整体架构 Feeds流 原则: 围绕3D业务形态的特 点,面向实体及场景 级别能力的封装,接 入便捷且高效 场景交互 翻页 Tab交互 运镜控制 比例控制 场景构建 Feeds布局 Tab布局 商品 目标: 底层依赖 多视角 载具设置 2D&3D混合 小地图 锚点 商品摆放 动态内容加载 宝箱 人物 Sku切换 动画播放 不同样式锚点 全景展示 开箱动画 人物渲染 包围盒 . . . 锚点连线&动效 相机展示 摆放逻辑 人物运动 动画 基础能力 形态切换 展馆 货架 原子功能 让开发者在不需要3D 基础的前提下,迅速 搭建引擎能力范围内 的3D业务 视差 Feeds滚动 商品缩放 商品切换 交互 资源 工具包 图像 闪烁动画 旋转动画 物体手势交互 商品模型加载 创建文字 坐标转换 尺寸获取 射线动画 . . . 相机手势交互 视频资源加载 创建视频 碰撞检测 可视检查 引擎 模型 A ce NNR T3D 模型 webview 同层容器
22. 场景构建业务引擎 - 商品 原子功能 锚点 宝箱 Sku切换 动画播放 不同样式 锚点文案 不同样式 锚点文案 手势交互 包围盒展示 锚点连线 呼吸动效 锚点连线 呼吸动效 事件响应 … 事件响应 … 事件响应 …
23. 场景构建业务引擎 - feeds和多tab布局 3D布局通过XZ平面模拟2D 多 tab页面的布局来实现,feeds 一排两列纵向摆放商品,每个 tab刚好撑满一屏 场景构建 》3D货架 平视、俯视两种视角 通过正交投影和透视投影两种成 像方式,及相机的位置旋转角度 等控制,来实现效果 不同形状的模型适配 3D模型和2D文字混排 通过计算商品模型的mesh 包围 盒,利用地面部分的对角线和高 度 2D文字和3D商品的地面 处于同一平面进行摆放 ,根据相机类型设置相 应间距
24. 场景构建业务引擎 - 各类模版 + 载具设置 场景构建 》3D展馆 内容加载 商品加载 宝箱加载 视频加载 海报加载 锚点绘制 完整场景
25. 场景构建业务引擎 - 场景交互 》feeds滚动 通过touch事件判断滑动方向,做相机滚动、前景滚动、惯性滚动
26. 场景构建业务引擎 - 列表切换 场景交互 》商品切换 单品切换 相机纵深移动 + 平移 相机圆柱体寻径
27. 场景构建业务引擎 - 场景交互 》商品缩放 计算模型包围盒 根据包围盒中心点计算出8个顶点坐标 从世界坐标转化为屏幕坐标 世界坐标系中的8个顶点 计算坐标点在X轴和y轴的最大最小距离 计算缩放比scale 根据scale计算出移动的焦距 屏幕坐标系中的8个顶点 模型放大焦距计算
28. 性能优化方案
29. 性能优化方案- 引擎启动提速 页面加载 html 主文档预请求 资源加载 JS 资源预加载 Web资源LRU缓存 TurbeWeb容器 数据加载 数据 引擎加载 JS引擎 wasm引擎 默认资源 数据预请求 JSI/JSC AceNNREngine 同层容器
30. 性能优化方案- 模型加载提速 网络全局拦截 预先下载 android接口 曝光埋点拦截 ios接口 native渲染 共用缓存 模型下载 jsbridge接口 同层渲染 模型读取 模型管理 3D资源缓存空间 上层业务主动调用Api webview资源拦截 web渲染 模型解压并缓存
31. 性能优化方案- 模型加载提速 模型瘦身 不同lod级别 Astc压缩纹理 渐进加载
32. 感谢大家观看

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.124.0. UTC+08:00, 2024-05-02 09:04
浙ICP备14020137号-1 $访客地图$