开放3D基金会(O3DF)成立于2021年,为艺术家、内容创作者、开发人员和技术领导者,提供一个聚集和协作、分享最佳实践以及塑造开放3D开发未来的新家园,同时致力于为每个行业提供用于构建游戏和模拟器的开源、全功能、高保真、实时3D引擎。
2022年7月21日,在中国开源软件推进联盟主办,赛迪传媒、《软件和集成电路》杂志社联合承办,CSDN独家直播的“第十七届开源中国开源世界高峰论坛”上,O3DF基金会执行董事Royal O'Brien带来了《O3DE引擎(开源、实时、跨平台3D引擎)》的主题演讲。

以下为Royal O'Brien演讲实录:
大家好,我是Linux基金会数字媒体和游戏部门的总经理Royal O'Brien,同时担任O3DF执行董事,今天在此和大家谈谈O3DF。


大家可能会问,O3DF是什么?
O3DF致力于3D开源技术的使用,可以使用在任何垂直行业,包括游戏、模拟器、机器人、人工智能、机器学习、视觉、特效、电影、能源、地产、医学、培训和许多其他领域中。
我们的最主要项目Open 3D引擎是第一个真正的3A级开源3D引擎,它在Apache2.0及MIT许可下,当前免费提供给全世界使用。
我们所说的3A级到底是什么意思呢?
这意味着一个引擎能够支持从生产到完成所需要的全部元素,编辑器拥有一个物理基础渲染器、一个物理系统、一个核心运行、过场动画等。
当你尝试去定义什么是端到端的3D引擎时,你会发现其中的一些典型程序我们每天都在使用,使用场景可能在我之前所提到的垂直领域之中,比如游戏。
大家可以想象,在制作一款使用3D技术的游戏时,都需要一个引擎,不管是在电脑或者是手机平台上创建,引擎都是必要的。幸运的是,Open 3D引擎的构建方式是完全模块化的,这种模块化还带来了跨平台的兼容性,所以Open 3D引擎本身支持Windows、Mac、Linux、Android、iOS以及一些主机,这意味着其也支持移动端。为了做到这一点,Open 3D引擎必须要确保它支持最新的技术,如DirectX、Vulkan或Metal。
如果你拥有一个只适用于高端硬件的引擎,很难让别人把这样的引擎推出,因为他们需要花很多时间去优化它,才不会在玩游戏的时候烫到手。幸运的是,引擎组装的方式有不同的渲染模型,无论是向前或延后,它都允许你改变想做的类型。
同时,引擎是开源的,也就是说任何人都可以使用它。我们希望他们能够使用并在此基础上进一步发展,因为当他们发现漏洞并对其做出调整时,就可以在代码中做出贡献,这十分有利于后续人群的分享、使用。
说到贡献,除社区外还需要不同的公司来支持。当前,我们有很多大公司参与这个项目,如微软、Adobe、英特尔、华为、AWS、EPIC和腾讯。

该项目最初是亚马逊内部的一个项目,随着时间的推移,它被设计得更加模块化,并最终成为一个开源项目。
我自己参与这个项目很长一段时间,当它完全开源的时候,我离开了亚马逊,加入了Linux基金会继续跟进这一项目。因为我们想让它成为一个真正的开源项目,不依赖于任何一家公司,而是没有界限和附带目的地由中立组织全权负责。
对于引擎,我们需要考虑的一件事是:尽管你有一个了不起的引擎,但它适用于其他行业和垂直行业吗?
答案是肯定的。它必须适用于不同的领域,你不会想要一个只能做游戏的引擎,除此之外还需要做很多调整才能让它工作。
引擎模块化是一个非常关键的因素,换句话说,将渲染器从引擎中取出非常困难,因为它通常与许多不同的系统交织在一起,但有了Open 3D引擎,你就可以简单地停用它。你几乎可以停用任何元素,这意味着你可以将其缩小到你想要的大小以精确匹配你要做的事。
如果我正在做模拟或者建构视频序列等,我可能不需要其中的一些动画系统,所以这种能力可以帮助我们减少或移除这些暂时不必要的系统。
再者,代码本身是用C++编写的,我们在里面使用了一些Python脚本,这允许你以模块化的方式构建这些组件。
在处理引擎时还有另一个重要部分:在配置时我们删除了几乎所有的二进制格式,大部分是JSON或者XML,并使用像CMake这样的开源工具,这使得你可以使用任何类型的编辑器或配置系统。
大家应该记得我在这里讨论了跨平台,但这并不是说我们把Windows作为唯一的平台,而Linux和其他平台都是二等平台。实际上你可以从O3DE网上找到安装软件包,并且在Linux上端到端地使用整个系统。你不需要在所有地方都装上Windows系统,而是可以根据目标平台的区别来构建你想要的不同类型的程序。

前文我们已经讨论过游戏,接下来让我们更深入探索。以汽车为例,如今汽车越来越智能化了,在驾驶时可以为您提供方向的增强实景或者一个提示界面。这些对于3D引擎来说是非常棒的,因为只有通过空间才能知道车的大小以及其周围的一切。你可以把它映射到一个坐标上,然后放到3D引擎上,这样就可以和它一起工作了。它会给你提示,如在100米后会有一个转弯,当你要转弯时,它也会根据场景来调整和缩放转弯深度。
如果你现在考虑的是发生在未来的事情如建造整个城市,可以通过数字孪生做到分区、建筑设计规划、交通模拟。对于希望进行遥距现场管理的公司,可以通过运行不同实时物联网的设备和传感器,实现在3D演示空间中观看及检验。
此外,我们还探讨了一些关于健康与医学的问题,远程医疗现在受到重视,我们能够在3D空间中看到事物并可视化。目前技术越来越先进,我们并未困在2D平面里,而是开始更多地使用3D技术,这意味着我们能更准确、更好地理解和观察事物。
开源可以将不同的技术适用到不同领域。如果有人知道如何在数字孪生上进行坐标转换,通过开源,这种能力就可以转化为在医学上如何作出坐标空间。这是一种属于开源的独特能力:可以将技术在那些本会保持封闭的行业中进行分享。

当人们创造并作出贡献的时候,其他行业可以一起受益。因为这些是用C++构建且支持Android和iOS,这意味着会有很多更新的芯片和设计元素可以发挥作用,同时拥有ARM及更好的提高。
很多和我交谈过的人都说,开源是实现元宇宙的关键要素。我们也这么认为,这意味着要在AR和VR的3D及超环境中建立这些类型的模型,会议、模拟、训练需要无缝分享,才能推进人们对事物的看法,促进实现我们从未想过的东西。但我们已经在开源中,以各种不同的方式看到了这一点,技术的用途是单一的,但当它们被用于开源时,新的大门就打开了。
那么为什么这对所有行业都很重要呢?因为这有助于他们削减成本,有助于创新,有助于他们推进想做的事情,而不需要在这些不同的领域中寻找规律。
你的公司不需要雇用十个图形工程师,因为这是在另一个区域处理的,但你们会有物理工程师,可以促进不同公司之间的合作。它在降低成本的同时又保持着高速的创新。
开源一次又一次地被证明是一个非常有效的模式。那么,为什么以前没有开源软件能成功地做到这一点呢?
因为要做到这一点,还需要迈出一大步。我们必须肯定AWS公司,AWS在这方面投入了大量的时间、工作和金钱,当他们决定把它变成开源软件的时候,这对开源社区来说是一个巨大的好处。这意味着我们有一个巨大的基础平台可以工作,不需要从头开始做很多东西就能拥有完整的端到端系统。
现在我们有了这个激动人心的3D平台,这个平台正在突飞猛进地发展,我们希望每个人都能参与其中。
任何可以利用3D技术的公司,他们不仅想使用这项技术,也希望能和其他公司建立联系,一起协作,以确保工作内容没有重复。
记住,开源是一项全球性的努力,它没有边界,所有任何人都可以参与其中。
现在大家明白这个基金会是由社区和企业赞助商组成的,他们也是董事会的一部分,社区中大多数人支持技术指导委员会来决定什么项目可以推介出去。所以这不是一种只有一家公司可以随便使用的商业模式,社区有更大的优先权,让所有共享的声音变成了实际的方向。
作为基金会的一部分,有这样的影响力,对基金会及其成长非常重要。如何参与其中和成为其中的一部分,去网站(WWW.o3de.org)或者登陆Github.com/o3de看一看,我们有一个实时Discord服务器即discord.gg/o3de,你会发现那里有一个巨大的社区,每天都有成千上万的人在那个社区里聊天。
如果你有问题或者想了解更多,可以直接抓取代码、获取文档,把问题发到在Discord里,也许有人能在几分钟或几小时内回答你。
这里有一些问题:该怎样成为会员?会员和非会员之间有什么区别?
会员有三种类型,分别是准会员、普通会员与高级会员。
当前,技术顾问委员会中有9个席位,其中5个席位是由社区驱动的,也就是由社区投票决定的。剩余4人是来自董事会成员,也是由投票决定。所以影响力的大小,以及你希望如何帮助推动和发展项目,完全由自身所决定。只有这样的支持,才能让我们成长为一个整体,成为现在的基金会。
我们如何看待中国成为基金会的一部分呢?
中国付出了很多的努力和技术,我们期待不同的项目,并希望能够共同进步。
代码没有边界,其本身就是一种奇妙的艺术表达。我自己也是一名工程师,写了30多年的代码,因为代码都是一样的,所以你的背景并不重要。如果你有时间与你的团队交流,向他们解释他们现在的机遇是什么,这是非常重要的。
最后,我想呼吁大家采取行动,与我们进行交流,积极参与进来,一起做更多的贡献, 谢谢大家。
点击2022(第十七届)开源中国开源世界高峰论坛-CSDN直播,查看更多精彩演讲内容!
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r
如何在Ruby中获取BasicObject实例的类名?例如,假设我有这个:classMyObjectSystem我怎样才能使这段代码成功?编辑:我发现Object的实例方法class被定义为returnrb_class_real(CLASS_OF(obj));。有什么方法可以从Ruby中使用它? 最佳答案 我花了一些时间研究irb并想出了这个:classBasicObjectdefclassklass=class这将为任何从BasicObject继承的对象提供一个#class您可以调用的方法。编辑评论中要求的进一步解释:假设你有对象
我在非Rails项目中使用ActiveRecord。在Rails中,我可以这样做:config.time_zone='EasternTime(US&Canada)'config.active_record.default_timezone='EasternTime(US&Canada)'但如果我不使用rails,我该如何设置时区? 最佳答案 ActiveRecord::Base.default_timezone='EasternTime(US&Canada)' 关于ruby-没有轨道的A
在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc
我在一个我想在formtasticGem中覆盖的方法中找到了这个。该方法如下所示:defto_htmlinput_wrappingdohidden_field_html是什么意思?在第三行做什么?我知道它对数组有什么作用,但在这里我不知道。 最佳答案 你可以这样读:hidden_field_htmllabel_with_nested_checkbox是连接到hidden_field_html末尾的参数-为了“清晰”,他们将其分成两行 关于ruby-on-rails-没有参数的`