当前位置: 首页 > news >正文

【开源项目】「安卓原生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
http://www.lryc.cn/news/576101.html

相关文章:

  • ArcGIS Pro利用擦除工具,矢量要素消除另一矢量部分区域
  • 【网络安全】密码学知识普及
  • 高可用与低成本兼得:全面解析 TDengine 时序数据库双活与双副本
  • OkHttp 简单配置
  • pandas---使用教程
  • 解构SAP RISE与Cloud ERP授权新政:从许可模式到迁移策略的深度指南
  • (一)miniconda安装配置
  • Dubbo服务调用超时问题解决方案
  • Hyperledger Fabric 入门笔记(二十)Fabric V2.5 测试网络进阶之Tape性能测试
  • Linux tcp_info:监控TCP连接的秘密武器
  • 【RAG面试题】如何获取准确的语义表示
  • MCP-安全(代码实例)
  • ubuntu安装达梦数据库
  • Java8方法引用:简洁高效的编程利器
  • algorithm ——————》双指针(移动0 复写0 快乐数 装水问题 以及数组中找几个数和为指定的元组)
  • TCP四层模型:网络协议核心解密
  • WPF 3D 开发全攻略:实现3D模型创建、旋转、平移、缩放
  • HTTP协议中Connection: Keep-Alive和Keep-Alive: timeout=60, max=100的作用
  • Linux入门攻坚——49、高可用HA之corosync/pacemaker(2)
  • Linux命令行操作基础
  • 关于css的height:100%
  • JAVA-泛型通配符的上界和下界
  • UUDS—常见NRC及其含义
  • 中国双非高校经费TOP榜数据分析
  • ROS:录制相机、IMU、GNSS等设备数据
  • gRPC技术解析与python示例
  • 楼宇自控系统以智能化管控,全方位满足建筑节约、安全与可靠运行需求
  • 像素之外的智慧:Adobe AI在动态影像与云端协作中的进阶应用
  • 如何设置 Java 的环境变量
  • 23种设计模式——单例模式的暗黑面