当前位置: 首页 > 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

相关文章:

  • 汽车涂胶车间的“通信桥梁”:PROFIBUS DP转ETHERNET/IP网关的应用实践
  • 高防IP在服务器中的作用都有哪些?
  • 微信小程序进度条progress支持渐变色
  • iOS 网络请求断连重试失败?抓包分析丢包原因的完整流程
  • 设计模式精讲 Day 15:解释器模式(Interpreter Pattern)
  • .net8创建tcp服务接收数据通过websocket广播
  • 安科瑞碳计量电表与碳资产管理平台:企业双碳转型的智能中枢
  • Kamailio SIP+RTP双网卡SBC呼叫流程与媒体处理说明
  • Flutter 网络栈入门,Dio 与 Retrofit 全面指南
  • <script setup> 语法糖
  • 基于 Spring Boot + Vue 3的现代化社区团购系统
  • MyBatis中的SQL理解
  • Dubbo服务调用全流程解析
  • matlab实现轮轨接触几何计算
  • 前置机、跳板机、堡垒机详细介绍及对比
  • 数字孪生技术为UI前端注入新活力:实现智能化交互新体验
  • vue将页面导出pdf,vue导出pdf ,使用html2canvas和jspdf组件
  • OpenCV CUDA模块设备层-----双曲正弦函数sinh()
  • 【linux】程序地址空间
  • AI聊天多分支对话的纯前端实现