https://www.toutiao.com/article/7231100034442445373/
WebGPU经过六年的时间,终于在2023年4月6日,由Chrome团队发布。5月2号,在Chrome113版本上,WebGPU被默认启动。自此,Web上有望出现3A级渲染的3D应用了!
Orillusion团队三年前开始关注WebGPU发展,经过两年多研发,多次框架重构,性能调优后,Orillusoin引擎在今天以开源的形式正式跟大家见面!
我们致力于在浏览器中实现桌面级的渲染效果,支持超大复杂场景的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,Dell·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框架,是不是也更加值得想象呢?
欢迎大家加入开发者社区交流群(tips:已在123群的就不要重复加入哦,所有的信息每个群都会同步滴!)
如果出现扫码进群已达到上限,请加大添加小鸥微信(图右),我们会邀请您进群~