电商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. 感谢大家观看