上周公众号推了一篇文章,宣布 Cocos Cyberpunk 开源了,但夹在前后几天的新闻里好像并没有太多人注意到,看来我得再宣传一波(文末还有本周三直播讲解预告)。先看效果:
其实这个赛博朋克 3D 场景,很多人在前年 Cocos Creator 3.3 宣传的时候就看过了。为什么打磨到现在才放出工程源码呢?因为当时真的是通过大量对引擎源码的 hack 改动来实现的,而且不少功能是直接硬编码怼上去,并不是通过编辑器做可视化实现的。
为了使用 Cocos Creator 完整制作出这样的 Demo,我们从渲染算法到渲染管线,从编辑器体验到各种工具能力,从跨平台适配到性能伸缩性调优,都花了大量努力去为之铺平道路。
大家可以从以下网址免费下载到这个示例的所有工程源码和美术资源,并配合新发布的 Cocos Creator 3.7.1 运行:
https://store.cocos.com/app/detail/4543
技术亮点
为了让开发者更好得理解我们这个项目的制作初衷,Cocos Cyberpunk 中有几个优秀的技术亮点不得不自吹一波。
高伸缩性
Cocos 一直以来都是移动端优先的跨平台引擎,所谓伸缩性简单来说就是引擎能屈能伸,在低端设备和平台上能达到高性能低功耗,在高端设备上也可以尽可能释放引擎的表现力。

Cocos Cyberpunk 项目特别重视性能的优化和不同设备的适配,所以我们通过不同的渲染质量等级和渲染管线配置来实现高伸缩性。
在 PC 平台,我们默认开启了 Bloom、TAA、高分辨率、环境光照等渲染能力。而在移动端,我们针对各种不同的移动端芯片做了精细的配置,让该 Demo 可以以 30FPS 的稳定帧率运行在绝大部分设备上,其中最低端的设备,我们下探到了海思麒麟 970(2017)、高通骁龙 835(2017)和苹果 A10 芯片(2016),这代表着高质量游戏已经可以覆盖目前市面上的大部分低端设备。需要注意的是这个项目在所有设备上都使用了目前次时代手游才可能采用的延迟渲染管线。
大家也可以通过修改项目代码中的 href-setting.ts 去尝试不同配置的表现。
渲染管线定制能力
作为通用引擎,我们很重视不同项目的不同需求,所以引擎定制一直是我们最关注的能力之一,毕竟千人千面,无法一套配方满足所有开发者的需求。其中自定义渲染管线就是定制能力中门槛最高,也最难做好的基础设施,很多引擎在这方面都无法兼顾易用性和自由度。引擎团队从 2021 年开始就在开发次时代的自定义渲染管线,我们最新的成果 Render Graph 也是 Cyberpunk 高度依赖的引擎特性,它将渲染管线中不同的流程划分为不同的 Pass,开发者只需要关注每个渲染流程的算法和输入输出资源,就可以自由组合成一条完整的渲染管线。而前面提到的高伸缩性也部分依赖了管线流程的开关,比如 Bloom、TAA 等功能只需要简单的开关即可生效,甚至在运行时动态生效。

关于自定义渲染管线的细节,引擎组今年将参加在旧金山举行的 GDC 2023 进行技术分享,届时也会争取将分享免费开放出来。
渲染表现
渲染表现方面,Demo 中主要是在光照和后处理上花了一番功夫。光照方面主要是使用了延迟管线对大规模动态光源的支持,实现了角色在夜晚场景下的丰富人工照明表现。同时通过 Reflection Probe 支持了 IBL,在场景中的水洼上都可以看到霓虹灯的倒影,增强了氛围感。在后处理方面,使用了引擎默认的 Bloom 算法;还通过 AMD 的 FSR 算法对低分辨率进行超分,提升画面精细度;最后提供了 TAA 和 FXAA 两种抗锯齿算法。
基线设备
赛博朋克主要目标平台为 Android 和 iOS,默认自适应的性能参数可以保证各种移动端设备都稳定运行在 30 fps。我们测试的性能能基线设备为:
安卓:华为海思 970(Mate10),高通骁龙 835(小米6)。
iOS:苹果 A10 Fusion(iPhone7)。
桌面端可以通过修改 `href-setting.ts` 中的 fps 配置解除帧率的锁定限制。
更新说明
Demo 上线后,许多开发者体验并将自己的意见与建议告诉了我们。根据大家的反馈,我们对源码进行了更新,以优化使用体验:
优化编辑器初次加载体验,避免在一些特定资源卡住。
优化默认场景视角。
去除多余构建平台。
桌面帧率解锁。
增加 Safari & WebGL1 不支持提示。
Cocos Cyberpunk 项目目前刚刚开放,它也验证了很多引擎重要的特性,我们会在接下来会继续迭代这个项目的玩法和渲染表现,进一步尝试和打磨引擎的各种能力,也会通过这个 Demo 制作部分模块的教程。
点击文末【阅读原文】即可下载 Demo 源码。衷心希望这个项目能吸引更多开发者关注 Cocos,尝试 Cocos Creator,也可以通过这个项目更好得掌握引擎的使用,制作发布自己更好的作品!
📢本周三(3月1日)晚上19:30,在 Cocos B 站直播间,Cocos Creator 产品经理 Andy、引擎架构师 Hyde、资深图形工程师 youyou,将为大家介绍 v3.7、v3.7.1 重要新增功能与最新渲染管线,并解读 Cyberpunk Demo 技术要点。此外,杭州云圈网络技术攻坚部肖平、深圳恒空科技《剑舞》项目组前端主程陈细平,也将空降直播间对话交流,探索 Cocos 引擎 3.7 时代的更多可能。
Cocos B 站直播间
https://live.bilibili.com/21811345
往期精彩
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来