【开源项目】「安卓原生3D开源渲染引擎」:Sceneform‑EQR
「安卓原生3D开源渲染引擎」:Sceneform‑EQR 渲染引擎
“那一夜凌晨3点,第一次提交 PR 的手在抖……”——我深刻体会这种忐忑与激动。
仓库地址:(github.com)。
一、前言:开源对我意味着什么
-
DIY 的自由 Vs. 工业化的束缚
刚入 Android 原生开发时,我习惯自己在项目里嵌入各种 3D 渲染/AR/XR 模块,结构臃肿、流程混乱。
当我知道 Google Sceneform SDK 被弃用,起初只是出于“就地救火”般的情绪,却在折腾过程中产生“改造它,让它更适合所有设备”的强烈冲动。 -
“写代码” Vs. “分享代码”
一直以来,我只把代码写到私有仓库,没想过真实地把它开出来。
Sceneform‑EQR ,是我第一次把自己能力真正“裸奔”在所有开发者面前——那一刻,我感到恐惧,也因潜在的影响而无比兴奋。
二、为什么选 Sceneform‑EQR ?
1. AR/3D 是日趋火热的开发方向
Sceneform 依赖 ARCore 和 Filament,能快速构建 AR 应用。但它官方只发布到 1.16,即已停止维护 (eqgis.cn, cnblogs.com, developers.google.com)。问题来了:
- 不支持 AndroidX;
- 不再更新;
- 仅兼容 ARCore 设备,不支持华为2020年以后的机型和其他OEM设备 。
2.Filament:跨平台硬核渲染引擎
Filament 支持 Android/iOS/Web,多平台 PBR 渲染
Sceneform‑EQR 基于 Sceneform + Filament 扩展,能兼容 ARCore、Huawei AREngine、ORB‑SLAM3,并提供 3D/AR/VR 场景以及透明、视频/图片拓展 (github.com)。
3. 市场需求与生态缺口
主流安卓生态缺乏对非 ARCore 设备的统一支持。用户需要能跑在平板、XR 眼镜、双屏设备上的轻量渲染方案,而 Sceneform‑EQR 需踏出这一步。
三、项目概览:架构、功能与生态
1. 项目结构
-
Eq‑Renderer
渲染库:Android/eq‑renderer
:主要源码;
-
示例工程
SampleProj/app
:Demo 程序; -
Maven 本地依赖发布:
maven {allowInsecureProtocol trueurl "http://repo.eqgis.cn"
}
implementation "com.eqgis:eq‑renderer:1.0.9"
(github.com)
2. 核心功能模块
- 场景加载:支持 glTF 模型加载(普通场景、AR/VR 场景均可)(github.com);
- 动画支持:封装 ModelAnimation,自动播放、设置时长、循环,接入 FilamentAnimator;
- XR 支持:支持AR、VR、普通3D场景。集成 ARCore、AREngine、ORB‑SLAM3,支持场景间一键切换;
- 背景扩展:支持透明背景、图片背景、视频背景,特点是灵活配置、流程简洁 (blog.csdn.net);
- 材质扩展:调用 matc 生成材质,实现呼吸、流动纹理、视频贴图等;
- 手势交互:单指旋转、双指平移/缩放、点击事件等基本场景交互内置;(blog.csdn.net);
3. 核心功能截图
在普通3d场景加载GLTF格式的模型
在AR场景加载GLTF格式的模型
支持GLTF模型动画
手势点击交互
通过手势控制模型(单指旋转、双指平移、双指缩放)
案例:AR桌面
通过渲染安卓原生View实现
支持双屏显示,常用于XR眼镜
案例:AR涂鸦(自定义纹理、流动纹理、视频纹理、移位贴图)
呼吸效果,通过Filament的matc工具编译自定义材质文件
流动纹理,使用视频资源作为纹理贴图
四、技术挑战与解决思路
1. 模型动画封装:Filament + Sceneform 的融合
-
FilamentAnimator 获取
Sceneform‑EQR 在调用Node#setRenderable(model)
后,通过RenderableInstance.getFilamentAsset()
获取 FilamentAsset,再调用getAnimator()
获取动画控制器 (github.com, cnblogs.com)。 -
封装 ARAnimationModel
ARAnimationParameter parameter = new ARAnimationParameter().setDuration(6000L).setRepeatMode(ARAnimationRepeatMode.INFINITE); ARAnimationModel anim = new ARAnimationModel(node); anim.createAnimation(parameter); anim.setCurrentIndex(0); anim.play();
背后运行的是在每帧 update 时调用
Animator.applyAnimation()
并updateBoneMatrices()
(cnblogs.com)。
2. 多平台兼容:ARCore / AREngine / ORB‑SLAM3
- 使用工厂模式封装 SessionProvider 抽象层;
- 启动此渲染模块时即可传入不同支持方式;
- 编译中引入
com.eqgis:arexp
、:orbslamsupport
等包。
3. 背景扩展:SurfaceView 的透明问题
- 初期实验在
BaseSceneActivity
中通过sceneLayout.setTransparent(true)
实现透明背景,使用透明 SurfaceView 叠在 ConstraintLayout 上 (blog.csdn.net); - 后期评估性能优先,决定继续使用 SurfaceView 而不是 TextureView。
4. 动态材质:PBR / 呼吸 / 流动 / 视频
- 使用 Filament
matc
离线编译材质; - 支持
material.setTexture(parameterName, texture)
实时更换动态图层 (github.com);
五、创新点与核心优势
功能 | 定制亮点 |
---|---|
动画 | glTF 文件动画读取、FilamentAnimator 封装,减少开发门槛 |
背景扩展 | 支持透明/图片/视频/WebXR,自由拼搭场景 |
XR 兼容 | 非 ARCore 设备支持 ORB‑SLAM3 与 AREngine |
材质延展 | 离线 matc + 运行时贴图注入,轻松实现呼吸/流动/视频视觉效果 |
交互手势 | 通用手势控制层,全场景复用,富交互体验 |
六、结语
Sceneform‑EQR 已从实验项目成长为社区共建项目,支持多端渲染,完整走完从“第一次开源”到“开源维护者”的自我蜕变。
这篇文章,是我献给自己、献给所有还在深夜为 PR 抓狂的开源er——你们没有走错,代码与热爱终将被世界看到。
愿你我在技术社区的森林里,发出自己的光。
附录
社区链接
-
GitHub 仓库
- https://github.com/eqgis/Sceneform-EQR
-
码云
- https://gitee.com/eqgis/EQ-Renderer-Sample-Proj
-
“EQ-雪梨蛋花汤”的相关专栏。
- Sceneform-EQR(安卓原生3D渲染引擎)
https://blog.csdn.net/qq_41140324/category_12571725.html
- Sceneform-EQR(安卓原生3D渲染引擎)