开源项目:G3D —— Hybrid 环境下的 WebGL 3D 渲染引擎

简介:

G3D 是一款基于 WebGL 的 JavaScript 3D 渲染引擎,借助 GCanvas,G3D 可以运行在 Weex,ReactNative 等 hybrid 环境下。G3D 由淘宝终端团队推出,并于 2018 年 3 月与 GCanvas 同时宣布正式开源。

那么就会有同学问了,G3D 和 three.js 有什么不同呀?G3D 和 GCanvas 究竟是什么关系啊?这篇文章,就聊一聊 G3D 这个产品的来龙去脉。

为什么有 G3D

G3D 的起源要从 GCanvas 说起。

GCanvas 在 Weex 和 React Native 环境下提供了浏览器环境中 Canvas 的绘图能力,手机淘宝 App 的 Weex 容器已经内置了 GCanvas。和 Canvas 一样,GCanvas 的绘图能力包括 2D 上下文和 WebGL 上下文的绘图能力。2D 上下文相对较为简单,可以直接拿来使用;而 WebGL 上下文比较复杂,从 WebGL API 到真正的 3D 应用之间往往还需要一层 3D 渲染引擎,社区中的 three.js,Babylon.js 等就是这类 3D 渲染引擎中的翘楚。

GCanvas 开发团队曾尝试把 three.js 和 Babylon.js 接入到 GCanvas 环境中来,遇到了一些困难:

  • 社区中的 WebGL 渲染引擎依赖了大量的 DOM API 和原生对象,在 Weex 与 React Native 环境中不存在这些 API 与原生对象。开发团队也曾尝试对 Babylon.js 和 three.js 进行改造,但发现成本比较高,而且后续跟进原版项目 bugfix 与功能迭代的难度也比较大。
  • 如 GCanvas 文档所述, GCanvas 目前仅支持 WebGL API 的一个子集。直接引入 Babylon.js 和 three.js,在 GCanvas 环境下还暂时无法正常工作。
  • 由于 three.js 和 Babylon.js 的体积已经比较巨大,其中很多功能在手机淘宝的业务场景中暂时用不到。因此,即使能够成功改造,巨大的 JS 体积也会拖垮手淘中很多页面的性能。

所以,GCanvas 开发团队决定从零开始开发一个小型的 WebGL 渲染引擎 G3D,并以此作为 GCanvas 3D 能力的辅助。可以预见,G3D 和 GCanvas WebGL 将会是相辅相成,互相促进,共同发展;并且在较长一段时间内,G3D 将是使用 GCanvas WebGL 能力,除了直接操作原生 WebGL API 之外的唯一选择。

G3D 有哪些功能

G3D 具有 3D 渲染引擎的基本功能:

  • 定义场景,定义透视相机。
  • 光照方面,目前支持 1)环境光;2)平行光;3)点光;4)穹顶光。
  • 材质方面,目前支持 1)基于冯氏反射模型的冯式面材质(朗伯面是冯氏面的一种特殊情况);2) 非光照材质。
  • 几何体方面,目前支持直接创建的几何体包括立方体,球体,圆柱,圆锥,折线;当然更多情况下是可以通过解析模型数据创建几何体。
  • 模型解析方面,目前支持 1) OBJ/MTL 模型;2) STL 模型这两种模型格式。
  • 交互:支持 3D点选/拖拽(由于 GCanvas framebuffer 仍未正常,此功能仅在浏览器中有效)。
  • 动画:支持骨骼动画和蒙皮动画。

值得注意的是,由于 G3D 需要运行在 Hybrid 环境下,无法依赖 DOM API,所以与 three.js,Babylon.js 等浏览器环境的引擎相比,G3D 无法支持诸如声音播放,文件加载等非渲染核心功能。举例来说,如果使用 three.js 加载模型,只需要调用相关方法传入模型的 url 即可,three.js 会自动加载和解析模型;但在使用 G3D 时,你需要手动获取该文件的内容(Hybrid 与浏览器会不一样),然后将内容字符串传入 G3D.MeshBuilder 的相关方法。

G3D 的未来

目前 G3D 已经在淘宝 3D 定制等业务中有所使用,在未来的半年到一年里,G3D 主要的目的有两个:

  • 追赶 Babylon.js 和 three.js 的高阶功能,如阴影、Shader材质、预处理、法线纹理、光线追踪等等,在其过程中推动 GCanvas WebGL 的完善,同时赋能业务和社区。
  • 进一步打通 G3D 与建模-动画工具链的通道,完善模型-材质数据结构,提升渲染效果,达到「(Blender 等工具中)所见即(G3D渲染出)所得」的开发体验,最大程度地降低 3D 项目的开发成本。

原文发布时间为:2018-03-8
本文作者:叶斋
本文来自云栖社区合作伙伴“ 淘宝技术”,了解相关信息可以关注“ 淘宝技术”微信公众号
相关文章
|
编解码 算法 搜索推荐
淘宝人生里的虚拟人像渲染技术
全程干货,淘宝人生里的虚拟人像是如何实现的?
淘宝人生里的虚拟人像渲染技术
|
JSON 监控 算法
TIDE.JS:三维空间数字化渲染引擎
为了满足我们三维空间渲染各个业务的需求,并且提供易用SDK方便第三方开发人员快速搭建自己的应用或平台,我们自研了TIDE.JS——一款组件化、轻量化、高性能、大规模的面向空间数字化应用的渲染引擎。
4416 0
TIDE.JS:三维空间数字化渲染引擎
|
10月前
|
编解码 监控 测试技术
《3D可交互道具开发痛点解决:轻量化建模与解耦式逻辑实践》
本文围绕古风开放世界3D可交互道具开发,聚焦“视觉精度”与“性能消耗”的矛盾,分享轻量化建模与解耦式逻辑集成的实践方案。作者针对陶罐、木箱等道具,通过“结构分层优化+贴图智能复用+LOD动态适配”实现轻量化,将移动端单场景道具内存占用降至80MB以下;采用“模型渲染+交互触发+状态管理”组件化架构解耦逻辑,道具迭代效率提升60%;结合差异化碰撞体设计、跨平台动态适配优化性能与体验,解决加载延迟、闪退等问题。最终形成可复用开发规范,为开放世界可交互元素开发提供参考,助力平衡视觉表现、运行性能与开发效率。
786 3
|
人工智能 BI 语音技术
AR眼镜+AI大模型:颠覆工业设备验收流程的智能革命
本方案结合AR眼镜与AI视觉大模型,打造高效、精准、可追溯的设备验收流程。通过第一视角记录、智能识别、结构化数据生成与智能报表功能,提升验收效率与质量,助力企业实现智能化管理。
|
存储 编译器 Python
python文件处理-CSV文件的读取、处理、写入
python文件处理-CSV文件的读取、处理、写入
1702 0
python文件处理-CSV文件的读取、处理、写入
|
人工智能 供应链 PyTorch
TimesFM 2.0:用 AI 预测流量、销量和金融市场等走势!谷歌开源超越统计方法的预测模型
TimesFM 2.0 是谷歌研究团队开源的时间序列预测模型,支持长达2048个时间点的单变量预测,具备零样本学习能力,适用于零售、金融、交通等多个领域。
2852 24
TimesFM 2.0:用 AI 预测流量、销量和金融市场等走势!谷歌开源超越统计方法的预测模型
|
数据安全/隐私保护 UED iOS开发
Figma桌面客户端下载教程+协作设计入门,小白也能变大神
Figma 是全球领先的云端UI/UX设计工具,支持多人实时协作、矢量图形编辑与原型交互设计。其核心优势包括跨平台同步、团队协作(支持50+成员同时编辑)和丰富的资源生态(集成2000+免费插件)。Figma无需安装,通过浏览器访问官网即可使用。硬件要求最低为4GB内存和5Mbps宽带,推荐配置为8GB+内存和50Mbps+宽带。用户可通过创建团队空间邀请成员,支持邮箱邀请和链接分享。Figma还提供详细的官方学习资源,帮助用户掌握核心功能。
|
JSON 安全 算法
Spring Security系列教程27--Spring Security实现CAS单点登录--搭建CAS服务端
前言 在上一章节中,一一哥 给各位介绍了单点登录的概念、执行流程原理,并且给大家介绍了CAS单点登录解决方案,在CAS解决方案中,我们需要搭建CAS服务端和CAS客户端,本文就开始给大家介绍如何实现CAS服务端。在这里,我给大家介绍一个开源的CAS服务端模板cas-overlay-template,接下来请跟我一起看看怎么实现吧。 一. 搭建CAS服务器 1. 概述 为了测试我前面讲解的CAS请求执行流程,我们需要搭建一个CAS测试环境,本篇内容主要是带领大家搭建一个CAS Server服务端环境。搭建CAS Server环境,需要依赖如下环境: ● JDK1.8+ ● Maven3.6+
2274 0
|
算法 NoSQL 安全
Lettuce的特性和内部实现问题之Lettuce的多连接模式与连接池模式有何不同
Lettuce的特性和内部实现问题之Lettuce的多连接模式与连接池模式有何不同
688 2
|
Linux 网络安全 数据安全/隐私保护
linux免密登录最简单--图文详解
linux免密登录最简单--图文详解
433 2