【開源項目】「安卓原生3D開源渲染引擎」:Sceneform?EQR


在這里插入圖片描述


「安卓原生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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86933.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86933.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86933.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

建造者模式 - Flutter中的樂高大師,優雅組裝復雜UI組件!

痛點場景:復雜的對話框配置 假設你需要創建一個多功能對話框: CustomDialog(title: 警告,content: 確定要刪除嗎?,titleStyle: TextStyle(fontSize: 20, color: Colors.red),contentStyle: TextStyle(fontSize: 16),backgroundColor: Color…

基于Java+Spring Boot的大學校園生活信息平臺

源碼編號:S559 源碼名稱:基于Spring Boot的大學校園生活信息平臺 用戶類型:雙角色,用戶、管理員 數據庫表數量:17 張表 主要技術:Java、Vue、ElementUl 、SpringBoot、Maven 運行環境:Wind…

C# .NET Framework 中的高效 MQTT 消息傳遞

介紹: 在當今互聯互通的世界里,設備之間高效可靠的通信至關重要。MQTT(消息隊列遙測傳輸)就是為此而設計的輕量級消息傳遞協議。本文將探討 MQTT 是什么、它的優勢以及如何在 .NET 框架中設置和實現它。最后,您將對 M…

nn.Embedding 和 word2vec 的區別

理解它們的關鍵在于??區分概念層級和職責??。 可以將它們類比為: ??word2vec:?? 一個??專門制作高質量詞向量模型的“工廠”??。??nn.Embedding:?? 一個??可存儲、查找并訓練詞向量的“智能儲物柜”??(作為…

華為云Flexus+DeepSeek征文|??華為云ModelArts Studio大模型 + WPS:AI智能PPT生成解決方案?

引言:告別繁瑣PPT制作,AI賦能高效辦公 ?? 在商業匯報、學術研究、產品發布等場景中,制作專業PPT往往需要耗費大量時間進行內容整理、邏輯梳理和視覺美化。??華為云ModelArts Studio大模型??與??WPS??深度結合,推出AI-P…

【連接redis超時】

報錯 客戶端輸出緩沖區超限 Client … scheduled to be closed ASAP for overcoming of output buffer limits 表示這些客戶端(通過 psubscribe 命令進行發布訂閱操作)的輸出緩沖區超過了 Redis 配置的限制,Redis 會關閉這些客戶端連接來避免…

PHP「Not enough Memory」實戰排錯筆記

目錄 PHP「Not enough Memory」實戰排錯筆記 1. 背景 2. 快速定位 3. 為什么 5 MB 的圖片能耗盡 128 MB? 3.1 粗略估算公式(GD) 4. 實際峰值監控 5. 解決過程 6. 最佳實踐與防御措施 7. 總結 PHP「Not enough Memory」實戰排錯筆記 —…

Java垃圾回收機制和三色標記算法

一、對象內存回收 對于對象回收,需要先判斷垃圾對象,然后收集垃圾。 收集垃圾采用垃圾收集算法和垃圾收集器。 判斷垃圾對象,通常采用可達性分析算法。 引用計數法 每個對象設置一個引用計數器。每被引用一次,計數器就加1&am…

基于python網絡數據挖掘的二手房推薦系統

基于網絡數據挖掘的二手房推薦系統設計與實現 【摘要】 隨著互聯網技術在房地產行業的深入應用,線上房源信息呈爆炸式增長,給購房者帶來了信息過載的挑戰。為了提升二手房篩選的效率與精準度,本文設計并實現了一個基于網絡數據挖掘的二手房推…

Java + 阿里云 Gmsse 實現 SSL 國密通信

前言 解決接口或頁面僅密信瀏覽器(或 360 國密瀏覽器)能訪問的問題 測試頁面 測試網站-中國銀行:https://ebssec.boc.cn/boc15/help.html 使用其他瀏覽器(google,edge等)打開 使用密信瀏覽器打開 解決…

國產數據庫分類總結

文章目錄 一、華為系數據庫1. 華為 GaussDB 二、阿里系數據庫1. 阿里云 OceanBase2. PolarDB(阿里云自研) 三、騰訊系數據庫1. TDSQL(騰訊云)2. TBase(PostgreSQL增強版) 四、傳統國產數據庫1. 達夢數據庫&…

解密閉包:函數如何記住外部變量

🧠 什么是閉包? 閉包是一個函數對象,它不僅記住它的代碼邏輯,還記住了定義它時的自由變量(即非全局也非局部,但被內部函數引用的變量)。即使外部函數已經執行完畢,這些自由變量的值…

I2C協議詳解及STM32 HAL庫硬件I2C卡死問題分析

一、I2C協議詳解 1. I2C協議概述 Inter-Integrated Circuit (I2C) 是由 Philips 半導體(現 NXP 半導體)于 1980 年代設計的一種同步串行通信總線協議。該協議采用半雙工通信模式,支持多主從架構,專為短距離、低速率的芯片間通信…

HTTP協議-后端接收請求

起因就是不知道post這個請求體中這些格式有什么區別,后端又怎么去接收這些不同格式的內容 Get請求 get請求是比較簡單的一類 正常的直接用參數接收(不寫的話名字要匹配)或者RequestParam都可以接收,用對象綁定也可以 resultful…

HTML5 實現的圣誕主題網站源碼,使用了 HTML5 和 CSS3 技術,界面美觀、節日氛圍濃厚。

以下是一個 HTML5 實現的圣誕主題網站源碼,使用了 HTML5 和 CSS3 技術,界面美觀、節日氛圍濃厚。它包括: 圣誕樹動畫 🎄雪花飄落特效 ??圣誕祝福語 🎁響應式布局,適配移動端 你可以將代碼保存為 index.…

Spring Cloud Bus 和 Spring Cloud Stream

Spring Cloud Bus 和 Spring Cloud Stream 都是 Spring Cloud 生態中的消息通信組件,但它們的定位和使用場景有顯著區別: 1. Spring Cloud Bus 核心定位:分布式系統的消息廣播(配置刷新、事件傳播)。 典型場景&#x…

磁懸浮軸承位移信號的高精度估計:卡爾曼濾波算法深度解析

無需位移傳感器,濾波算法如何實現微米級精度? 磁懸浮軸承作為革命性的非接觸式支承技術,憑借無磨損、無需潤滑、高轉速等優勢,在飛輪儲能、高速電機、人工心臟泵和航空航天領域獲得了廣泛應用。其核心控制依賴于對轉子位移信號的高精度實時檢測,傳統電渦流傳感器雖能提供位…

DAY 43 預訓練模型

目錄 一、預訓練的概念 二、 經典的預訓練模型 2.1 CNN架構預訓練模型 2.2 Transformer類預訓練模型 2.3 自監督預訓練模型 三、常見的分類預訓練模型介紹 3.1 預訓練模型的發展史 3.2 預訓練模型的訓練策略 知識點回顧: 預訓練的概念常見的分類預訓練模型圖像…

Redis:事物

🌈 個人主頁:Zfox_ 🔥 系列專欄:Redis 🔥 什么是事務 Redis的事務和MySQL的事務概念上是類似的.都是把?系列操作綁定成?組.讓這?組能夠批量執?. 但是注意體會Redis的事務和MySQL事務的區別: 弱化的原?性:redi…

CppCon 2018 學習:An allocator is a handle to a heap Lessons learned from std::pmr

“An allocator is a handle to a heap — Lessons learned from std::pmr” 翻譯過來就是:“分配器(allocator)是對堆(heap)的一種句柄(handle)——從 std::pmr 中學到的經驗”。 基礎概念 分…