博客 / 詳情

返回

「安卓原生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 true
  url "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
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.