开源生态的建设根植于社区,开发者在社区共享、共创、共赢,将会激发出无限的创造力,这就是开源最大的魅力!选择开源,源于我们坚信,“独行快,众行远”!
Orillusion 引擎
WebGPU 经过六年的时间,终于在 2023 年 4 月 6 日,由 Chrome 团队发布。5 月 2 号,在 Chrome113 版本上,WebGPU 被默认启动。自此,Web 上有望出现 3A 级渲染的 3D 应用了!
Orillusion 团队三年前开始关注 WebGPU 发展,经过两年多研发,多次框架重构,性能调优后,Orillusoin 引擎在今天以开源的形式正式跟大家见面!
Orillusion 致力于在浏览器中实现桌面级的渲染效果,支持超大复杂场景的 3D 呈现,为 3D 场景爆发时代提供底层引擎基础工具。
Github 地址:https://github.com/Orillusion/orillusion
引擎优势
WebGPU 是基于 Web 浏览器的全新现代图形 API,使网页能够直接调用 GPU 执行计算任务,并绘制复杂图像。
Orillusion 是一套基于 WebGPU 图形 API 的 Web3D 渲染引擎,能够媲美 PC 端图形 API 的渲染能力。Orillusion 引擎中使用了非常多的 GPU 开放能力,比如灵活操作的 GPU 缓存(GPU Buffer),强大的着色器(Webgpu Shader/WGSL),以及备受瞩目的 Compute Shader 计算内核,充分发挥 GPU 在非光栅化阶段的并行处理能力。
ECS 组件系统
Orillusion 使用 ECS(Entity-Components-System/实体-组件-系统)组件式架构做为引擎的整体设计思路。消除了继承模式中的继承链复杂、功能交织的问题,通过解耦,封装和模块化设计,开发者可以更灵活的进行功能组合及扩展。实体(entity)一旦挂接了组件(component),不需要复杂的继承关系就拥有了组件的全部能力,再配合上系统内设定的生命周期,使得开发者可以实现更灵活调用。
组件系统
内置组件
基础性能
连续内存 GPU 数据提交机制
传统 3D 引擎在渲染的链路中,CPU 与 GPU 相互等待是性能消耗的主要原因之一。其中一部分等待时长是在每一帧画面渲染前,CPU 自身的数据准备和 CPU 向 GPU 传输数据的等待过程中产生的,另外一部分等待时长是 GPU 状态切换频率过多,导致 CPU 产生了更多的空等待。Orillusion 引擎通过减少 CPU 向 GPU 写入数据的频率以及降低 GPU 渲染状态的切换频率,最终来实现性能提升。
性能的提升离不开 GPU 缓存(GPUBuffer)的利用。在大量数据场景中,可以利用 StorageGPUBuffer 把数据写入到一个 ByteStream 中,再统一写入到 GPUBuffer 进行一次性提交;在少量数据频繁交互的场景中,更多的会把数据写入到一个小内存块(UniformGPUBuffer)中,而后写入到 GPUBuffer 进行一次性提交。需要指出的是 StorageGPUBuffer 中的数据是可读、可写、可复制的,但 UniformGPUBuffer 中的内容仅支持写入。
GPUBuffer
全局连续内存矩阵机制
Orillusion 引擎还提供了用于提高性能的全局连续内存矩阵(StorageGPUBuffer+BindGroup),它将整合渲染中会使用到的所有矩阵,在渲染前进行统一提交。最终可以实现在不影响渲染结果的情况下,减少数据提交频率、CPU 和 GPU 数据写入时间以及 GPU 状态切换频率,从而很大程度上改善渲染性能。
全局连续矩阵内性能优化
渲染
集群光照剔除
场景渲染离不开丰富的光照,所以引擎采用集群光照(Cluster Lighting)来解决灯光数量限制的问题,也可避免延时渲染带来的诸多弊端。
光照数量中最常见的一个弊端是由传统前向渲染(Forward Rendering)中寄存器和性能的限制引起的,导致每个像素能计算的光源数量非常的小,且存在大量 GPU 性能浪费的情况。引擎通过 Cluster Lighting 预先算出光源在当前画面区块中像素的使用情况,精确统计出每一个区块像素受到的光源影响,合理裁剪区块像素的计算资源,从而实现性能的提升。而且,结合 HDR Lighting 和 Lighting IES 能力,可以渲染出更多丰富饱满的画面效果。
同屏幕 128+动态光源
PBR 渲染
Orillusion 引擎中提供了基于物理的材质渲染(PBR-Physical Based Rendering),从而可以支持金属、皮革、橡胶等有各自不同物理属性的材质渲染,让物体拥有丰富的细节,更强的质感表现。
后处理
后处理(Post-Process Effect)的种类非常丰富,常见的辉光、模糊、景深等都属于该范畴,为了方便使用,Orillusion 目前提供了 Bloom、GTAO、SSR 等后处理特效。
Bloom
辉光(Bloom)表现为高光物体带有的泛光效果,合理运用可以使平淡的画面具备影视作品的视觉效果。在引擎的物理光照中,物体表面的反射、折射、自发光等亮度超过了自定义的阈值后,就会形成光溢出的效果。
GTAO
环境光遮蔽(AO/Ambient Occlusion)是让整个画面展示接近现实阴影效果的重要手段,Orillusion 提供的 GTAO(Ground-Truth Ambient Occlusion)可以在一定半径内检测遮挡关系,让遮罩阴影的展现更贴合实际场景。
SSAO/GTAO 对比
SSR
反射在日常生活中随处可见,反射的拟真程度也是渲染结果好坏的重要影响因素之一。对此,Orillusion 提供了屏幕空间反射(SSR) 的能力,以实现真实合理的反射效果。
左侧:水面 SSR 倒影 右侧:场景内的倒影
粒子系统
现实生活中许多现象或内容是难以使用 Mesh 模型来呈现的,例如常见的火焰、烟、雾、雨雪等,这种场景一般会采用粒子系统来实现。Orillusion 引擎中借助 Compute Shader 强大的计算能力,既可追求精致的粒子效果,又能保证较高的性能,甚至还可结合场景探索与 GPU 粒子进行实时交互,以提高视觉特效的上限与质量。
粒子发射器
计算着色器
计算能力是 WebGPU 中最为瞩目的能力之一,也是新一代图形 API 标准中质的飞跃。Orillusion 引擎对原生计算着色器(Compute Shader)进行了封装,作为计算内核使用,以便连接引擎特有的多类 GPUBuffer,充分利用 GPU 的计算能力。引擎通过 Compute Shader 调用 GPU 计算内核,将计算任务或图像处理任务分配到每一个内核中进行并行计算,可以在极短的时间内返回结果。
GPU 计算内核
通过 Compute Shader 我们可以实时改变正在渲染的模型网格、顶点等 attribute buffer,实现物理仿真模拟的能力。
流体仿真
柔体仿真
引擎性能
除了上文中提到的使用 GPU 缓存(GPUBuffer)提高基础性能之外,引擎还针对不同的用户使用场景进行了三个性能优化方案的对比。以下就以绘制 55000 个 box 为场景对比不同渲染方案的性能消耗:
Orillusion 引擎使用结构清晰且高效的 ECS 组件系统为基础,利用 WebGPU 开放能力,尤其是强大的 GPU 缓存与计算内核,对比传统的 Web 端引擎,在性能,效果和易用性上都有了飞跃式的提升:
- 性能:得益于多种 GPU 缓存与全局连续内存机制的使用;
- 效果:通过合理的光照系统、丰富的后处理特效、粒子系统等整体灵活的相互间配合,可以让三维场景更贴合实际,有效的满足繁杂业务的展示需求;
- 易用性:不单单受 ECS 组件系统的提升,许多已封装的 API 同样带来了更加便捷的使用方式,可以降低开发者的学习难度和维护成本。
建设开源生态
开源不等于免费,开源更不等于单纯的公开代码。我们理解开源是一种开放、共享的创新协作模式,它突破物理边界,通过高效敏捷的沟通和协同,实现技术创新。技术人员可以花更多的精力放到创造性工作上,避免重复造轮子。而且,从整个软件产业的供应链上看,开源已经成为未来信息技术的主战场。
最近大家都已经被 ChatGPT 的相关内容刷屏。由于 OpenAI 目前并没有对最新训练模型进行开源,导致中国企业如果做出类似的产品,从技术算法角度来看可能至少需要一到两年的时间。但是“大模型”的训练不只是单纯的算法问题,还需要算力和数据的支持,所以这可能导致中国的大模型需要更长的研发迭代时间。
- 算力指的就是 GPU 芯片:大模型训练需要效率更高的更先进的芯片工艺支持,由于技术封锁,目前看很难在 14nm 以下的制程上快速实现国产化的突破。
- 数据指的是有价值的高质量数据:国内的企业很多都会把平台内容当做私有财产,放到自己的 APP 里,无法公开的被获取到。海外的主要互联网内容几乎都有 Web 版形态,便于通过搜索引擎进行数据分析。有了大量的原始数据池,才能激励完成后续优质数据的标注工作。
因此,我们更加相信开放的 Web 生态未来的前景非常光明。
Orillusion 在创立之初就坚定地拥抱开源,开放包容、共创共赢是基本理念。通过开源可以帮助社区更好地了解技术,也可以通过社区影响力对技术进行推广,邀请更多开发者参与。技术社区积极快速的反馈也能帮助我们汲取更多的需求场景输入,帮助技术迭代更新。我们一直坚信,软件再优秀,如果没有构建起良好的生态,没有开发者和合作伙伴的共建,是很难走得更好更远的。一个开源产品,社区的文化氛围和协同创造力,才是区别于他人的根本。在社区共享、共创、共赢,将会激发出无限的创造力,这也是开源最大的魅力!
对于国内来说,开源发展起步较晚,国内的开源基础软件需要更多的时间。所有想参与其中的角色,不论是技术人员,开源公司,还是投资人,都需要更大的耐心!
图源:O3DF
目前,Orillusion 引擎已经得到了 Linux 基金会 O3DF 的认可,即将正式加入 Linux 开源基金会的大家庭。未来,希望借助国际开源基金会的力量,把我们国人自己的开源项目做大做强,为中国的开源生态贡献一份力量。
AI 时代的机遇与挑战
ChatGPT 的发展历史
ChatGPT 自 2022 年 11 月发布以来,我们几乎每天都在感慨变革是如此迅猛,甚至产生了极大的 AI 焦虑,生怕一天不紧跟前沿,就会错过最新的 AI 技术或者 AI 应用的消息。当下,可以确定的是,一个全新的 AI 时代,已经进入了展开期。后续的 AI 应用,必然也会层出不穷。
我们先简单回顾下 ChatGPT 的历史。
总体来说,由于 OpenAI 成立之初,选择了 Transformer 做为解码器,坚持不懈的把标准的语言模型做为预训练的目标函数,因此开启了 ChatGPT 的诞生之路。
从 2018 年开始,GPT1 最早在 NLP 任务上使用 pre-training + fine-tuning 的工作范式。不到一年后,GPT2 在 GPT1 的基础上,用更大的数据集训练了一个更大的模型,证明了模型的泛化能力并发掘出了模型 zero-shot 的潜力。2020 年,GPT3 不再追求 zero-shot 的极致表现,而是考虑人类的学习方式,通过极少数样本 few-shot(in-context learning)和稀疏注意力的模型结构,把训练数据(45TB)和模型(1750 亿参数)提高到 GPT2 规模的 100 倍,暴力出奇迹,达到完成人类难以区分的新闻撰写的惊艳效果。当然,也出现了不符合人类偏好的模型“偏见”。
2021 年-2022 年,InstructGPT 基于 GPT3,通过有监督微调(SFT)和基于人类反馈的强化学习(RLHF),解决了模型的“偏见”问题,实现了模型回答和人类意图之间的对齐(Alignment)。同时,OpenAI 以代码做为训练数据,在 GPT3 的某个中间版本上进行另外一个路线的训练,推出了 Codex 初代模型。
2022 年 4 月-7 月,基于 InstructGPT 和 Codex 初代模型的后续迭代版本,通过进一步的代码训练和微调,创造了第一个 GPT3.5 家族的模型 code-davinci-002,也称为 Codex。
2022 年 5 月-6 月,基于 code-davinci-002,通过有监督指令微调(supervised instruction tuning)得到了 text-davinci-002。
2022 年 11 月,在 text-davinci-002 的基础上,通过 RLHF 获得了两个不同的模型变体,即 text-davinci-003 和 ChatGPT。前者恢复了一些 text-davinci-002 所牺牲的上下文学习能力,同时提高了 zero-shot 能力。
而 ChatGPT 则通过牺牲上下文学习能力来换取建模对话历史的能力。2023 年 3 月,进入 GPT4 的时代。它可以理解图像内容,体现了强大的“多模态”特性;有了更强的记忆力,token 数量从 GPT3.5 的 4K 提升到 32K; 有了更强的语言理解能力和推理能力;在各种考试中的表现也是得到了显著的提高。
GPT发展史
我们 Orillusion 团队在 2021 年就关注过 GPT3 的技术和能力,当时大模型已经展现出了很好的协作和概念理解能力,但是还不能实现多轮对话。ChatGPT 的出现,补齐了这一短板,而且在其他各个方面都有了大幅度提升。这项革命性的产品,让我们看到了一个巨大的机会。对于引擎产品品类来说,结合大语言模型的能力,使得引擎可以理解人们的意图,变的更加“聪明”,是接下来充满挑战的必经之路。伴随着 ChatGPT 的出现,我们认真的进行了长达半年多的思考、试错和工程优化,努力寻找着大模型和 3D 引擎之间的衔接桥梁。
AIGC 在 3D 应用场景的机会
随着现象级应用 ChatGPT 的出现,LLM 的多模态能力已经在文字和图片的生成上表现出了非常好的效果,大幅度提高了生产效率,甚至改变了人们的生活习惯。下一个被 LLM 覆盖的场景,必然是 3D 内容的生成。而且这也是降低 3D 内容创作门槛的最终解决方法。AIGC 在 3D 行业的突破,我们理解为两种表现形式:生成派和调用派。
生成派
比如 ChatGPT,Jasper,Imagen,Dall·E 2,Stable Diffusion,Midjourney 等,都是在文字或图片的场景里,从 0 到 1 的直接创造内容。对于 3D 资产,通过 AI 最终也一定可以实现从 0 到 1 的直接创造。从当前 3D 内容生产工作流兼容性的角度,考虑到 3D 资产需要应用到渲染管线,3D 资产最流行的 representation 就是 Mesh,除此之外还包括 NeRF,体素,点云,SDF 等。当下,可以基于 3D 数据集直接训练 AI 模型,实现 3D Mesh 资产的创作(GET3D),也可以基于 2D 图片信息,来生成各种 representation 的 3D 资产(Point·E,Magic3D,Dreamfusion,Phorhum)。虽然目前来看,3D 资产的生成还是处于相对早期的阶段,距离成熟商用可能至少需要半年到一年的时间,甚至是更久,这些不同的 representation 最终都会通过 AI,实现从 0 到 1 的直接生成创造。
调用派
在 3D 应用场景中,LLM 是否可以学习各种 DCC 软件(通过教程,案例,代码等),直接完成对这些基础软件的控制,通过“调用”的方式,完成 3D 内容的创作。比如我们是不是未来可以教会 LLM 使用 Unity 引擎或者 3DMax 工具,通过输入 prompt 指令,就可以直接生成我们需要的 3D 场景或者 3D 模型。LLM 本身更擅长的是对文字内容的理解,而复杂繁琐的专业性工作,有很多成熟的工具可以完成。我们未来是不是只需要把这些操作工具的过程交给 AI 来完成,而不再通过人工的操作。这好比我们的大脑只需要完成思考,再通过控制我们的手脚来完成工作一样。这种调用派的逻辑更像是 ChatGPT 当下的插件机制,如果想购买机票,只需要告诉 ChatGPT 我们的意图,然后通过插件调用成熟的机票购买服务就好了。
AIGC 在引擎产品的现状
这两种派别,我们认为第一种生成派是必然会发生的,就好比文字和图像的 AIGC 一样,目前大量的研究都集中在此。通过这种方式,我们可以快速的获得独立的 3D 资产,从而可以提高 3D 建模的效率,甚至是跳过这个专业的繁琐的 3D 建模阶段。而 3D 场景应用是一个比文字、图片、视频创作复杂的多的工作流,生成 3D 资产只是这个复杂工作流中的一个环节。比如,一个 3D 应用,需要策划给出方案,先完成原画的设计,建模师再完成建模,然后进入到 3D/游戏引擎中搭建更复杂的场景,编写交互逻辑,最后发布应用。假设生成派可以实现 3D 资产从 0 到 1 的创造,那在 3D 应用场景中,AI 又能如何加速传统的工作流呢?如果真正想实现 3D 应用场景全链路的 AI 化,我们认为调用派所覆盖的这些 DCC 工具,尤其是可以完成复杂场景搭建和逻辑编写的 3D 引擎工具,都存在巨大的革命性机会。
而且,在这个革命性机会到来的过程中,由 3D 引擎公司接入 AI 能力来实现会更为顺畅。因为这件事情的本质是垂直行业对于 AI 能力的应用,这需要团队深入了解 3D 引擎框架,能力和特征,也需要很强的 know how 经验。怎样让 AI 理解 3D 场景,快速学会 3D 引擎工具的功能,完成 3D 场景的搭建和 3D 应用的开发,就变的至关重要。
Roblox
Spline
当 ChatGPT 出现之后,已经有很多 3D 引擎公司表达了对于 AIGC 的认可,也出现了很多官方以及第三方的 Demo 展示,例如 Roblox,Unity,Unreal,Spline 等。虽然这个过程可能会相对漫长,也存在巨大挑战,但是 AIGC 在加速 3D 应用场景的创作上,已经成为了整个行业的共识。
AIGC 在 Orillusion 引擎的应用
AIGC 一直是我们 Orillusion 团队关注的重点。在引擎设计之初,我们就开始考虑 AI 对于引擎的适配问题。在 ChatGPT 出现以后,LLM 的多模态表现,对语言内容的理解,包括上下文的逻辑推理能力,都实现了巨大的突破,这让我们感到格外兴奋!接下来,唯一的问题就是怎样教会 LLM 去理解 3D 场景,学习 Orillusion 引擎的功能,最终完成 3D 应用的创作。这恰恰是我们擅长,且必须要做的事情。
这件事情的 Hard Core 有三个方面:
- 基于 WebGPU 标准的 Orillusion 引擎,这是我们的重要核心技术之一。3 年前,团队开始关注 WebGPU 的发展,至今经历了两年多的 WebGPU 引擎研发工作,今天以开源的形式正式和大家见面。未来,我们期待和众多开发者一起努力,共建国人自己的 Web3D 引擎底层生态。
- 如何教会大语言模型,理解 3D 场景,学会使用 Orillusion 引擎,来构建 3D 场景应用。通过标准化结构化的引擎功能封装,加快大语言模型的学习速度和准确度。基于数据反馈机制,对大模型进行再次 finetune,使其对 3D 场景和引擎功能的理解越来越准确。
- 如何实现 AI 能力在 3D 场景中的扩展。我们都知道 ChatGPT 本身是语言模型,要扩展能力就需要插件帮忙。借鉴这种插件思路,我们也在垂直的 3D 场景中,基于 Orillusion 引擎实现了构建 3D 空间能力的插件化扩展方式,开发者可以通过插件,扩充更加复杂的 3D 应用开发能力。
基于插件的扩展能力,如果有更多的开发者参与,就会实现更多的垂直化插件功能,也就可以满足更多的用户需求。而更多的用户,就可以产生更多的数据反馈,从而为 AI 模型带来更大的优化空间。当然,这个正向飞轮最终还要依靠广大的开发者和我们共同努力。因此,我们坚持开源,选择拥抱生态!
基于 WebGPU 标准的 WebLLM 项目,深度挖掘了 WebGPU 的潜力,最近得到了大量的关注。那未来“训练在云,推理在端”的 AI 框架,是不是也更加值得想象呢?