当前位置: 首页 > 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.lqws.cn/news/546409.html

相关文章:

  • 机器学习6——线性分类函数
  • PHP「Not enough Memory」实战排错笔记
  • 小程序 API 开发手册:从入门到高级应用一网打尽
  • 基于[coze][dify]搭建一个智能体工作流,抓取热门视频数据,自动存入在线表格
  • Python打卡:Day38
  • 华为数通认证:适合谁的技术进阶之路?
  • 基于MySQL的分布式锁实现(Spring Boot + MyBatis)
  • 【数据分析,相关性分析】Matlab代码#数学建模#创新算法
  • 【C语言】知识总结·指针篇
  • 关于SAP产品名称变更通知 SAP云认证实施商工博科技
  • 动态控制click事件绑定
  • H.264中片数据分割(Slice Data Partitioning)介绍
  • Decoder-only PLM GPT1
  • c++异常
  • LINUX625 DNS反向解析
  • gemini-cli 踩坑实录
  • Windows VMWare Centos环境下安装Docker并配置MySql
  • PART 7 视频
  • web布局25
  • iOS打包流程中的安全处理实践:集成IPA混淆保护的自动化方案
  • 消息队列的网络模型详解:IO多路复用、Reactor模型、零拷贝
  • 一键获取服务器硬件脚本:CPU/内存/磁盘/RAID检测脚本详解
  • 电子行业 MES 系统:生产管理的智能引擎
  • Minio的扩容
  • 【docker】docker run参数说明
  • Imbalanced-learn 5. Ensemble of samplers
  • 【水印论文阅读1】将水印规则的定义域从离散的符号空间转移到连续的语义空间
  • 【大模型水印论文阅读2】前缀文本编码、均匀性约束
  • 【linux】程序地址空间
  • 信息抽取领域关键Benchmark方法:分类体系