「安卓原生3D開源渲染引擎」:Sceneform?EQR 渲染引擎
“那一夜凌晨3點,第一次提交 PR 的手在抖……”——我深刻體會這種忐忑與激動。
倉庫地址:(https://github.com/eqgis/Sceneform-EQR)。
一、前言:開源對我意味著什么
-
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渲染引擎)