paichn 发表于 2023-10-8 02:33:12

怎样看待Cocos creator 3.0的发布,在手游开发方面与unity的差距还有多大?

怎样看待Cocos creator 3.0的发布,在手游开发方面与unity的差距还有多大?

gxggxy103 发表于 2023-10-8 02:33:20

在 Cocos Creator 3.8 版本中,新增了不少实用的特性,其中我最喜欢的,就是它自带后期效果管线,并且还内置了许多高级效果。
有用来增强画面效果的 FSR, ColorGrading 和 Bloom。

http://picx.zhimg.com/v2-86f4b5298b7e3a820e2afb81eb377527_r.jpg?source=1940ef5c

http://pic1.zhimg.com/v2-99a54b37109d0ed55b27f21035926997_r.jpg?source=1940ef5c

http://pic1.zhimg.com/v2-5c5811a0ea902ca0cf632e46b1d4b432_r.jpg?source=1940ef5c
还有用来增强 3D 空间感的 HBAO。

http://picx.zhimg.com/v2-21988dcc1dc66602e3f4b91e6163a233_r.jpg?source=1940ef5c
以及用来抗锯齿的 TAA 和 FXAA。

http://picx.zhimg.com/v2-f4bd6958d85fd00d10982960239402c6_r.jpg?source=1940ef5c
可以说,在后期效果管线的加持下,整个画面效果有了质的飞越。

http://picx.zhimg.com/v2-e85671c7f1fb40cf39873b4e4339d881_r.jpg?source=1940ef5c
如何启用

今天的内容比较简单,就是教大家如何新写一个自己的后期效果。
在这之前,我们先来看看如何启用后期效果。

http://pica.zhimg.com/v2-73dab45582b1d415687fc72f3b431e6c_r.jpg?source=1940ef5c
我们用这个经典的场景来做示范。
这个场景叫 Sponza,它包含了许多复杂的建筑结构,方便观察对比一些细节。所以,很多图形渲染相关的 DEMO 都用它来做示例。
大家可以从各类模型网站上下载到, 也可以在 Cocos Store 中搜索 Sponza,进行下载。
想要开启 Cocos Creator 3.8 中的后期管线,只需要简单的 3 步。
第一步,我们需要创建一个空节点

Cocos Creator 中的后期效果是以组件方式管理的,所以我们需要先创建一个空节点作为载体。
我们把它起名为, PostProcess,这样项目管理起来会更加直观。
选中它,在右边的属性面板中,点击添加组件按钮,找到 PostProcess,展开。
这里列出来的,就是引擎内置的所有后期效果了。

http://picx.zhimg.com/v2-2e867479462c4842814efe7ee6c2c985_r.jpg?source=1940ef5c
BlitScreen 的用法比较特殊,我们后面会用到,这里先跳过。
我们把除 BlitScreen 以外的所有效果都添加到这个节点上。
添加的顺序可以随意,因为每一个后效都有一个优先级,引擎内部在使用的时候会根据优先级进行排序,从而确保最后合成的效果是正确的。
我们可以看到,cc.PostProcess 组件会被自动添加到这个节点上,使这个节点成为一个后效节点。

http://picx.zhimg.com/v2-360324f8a9a7dfaaba087d5f82046b9f_r.jpg?source=1940ef5c
第二步,打开摄像机上的开关

我们找到需要开启后效的摄像机,在这个场景中,就是 Main Camera 节点,选中它,然后在属性面板中勾选 Use Post Process,启用后效。
可以看到,在 Use Post Process 下还有一个 Post Process 参数。

http://pica.zhimg.com/v2-65f1b892ebe61f3ae2f13e64b7bff013_r.jpg?source=1940ef5c
我们可以把想要使用的后效节点拖动到这个属性上。这个特性非常管用,我们就可以根据项目需要,为不同的摄像机设定特定的后效处理流程。
我们也可以让它为空,引擎会自动使用全局后效节点。
那什么是全局后效节点呢? 我们来看看。
我们选中 PostProcess 节点,在 cc.PostProcess 组件里,可以看到, 它有一个 Global 属性。

http://pic1.zhimg.com/v2-8aae8c804807cc4e8f7291517d710902_r.jpg?source=1940ef5c
如果它被勾选,表示它是一个全局后效。开启了 Use Post Process 但 Post Process 参数为空的摄像机,会来使用它。
如果如果取消勾选,那么这个后效只会在引用它的摄像机上被使用。
需要注意的是,不管哪种情况,一个摄像机只会执行一个后效流程。 如果一个场景中有多个全局后效节点,摄像机会使用最选找到的那一个。
我们可以发现,还是没有效果。 这是因为在 Cocos Creator 3.8 中,内置管线还不支持后效,需要切换到自定义管线。
第三步,开启自定义管线

打开项目设置面板,切换到功能裁剪标签,启动自定义管线。

http://pic1.zhimg.com/v2-46a609cfb9b3bb0915ae669ae767e6b7_r.jpg?source=1940ef5c
然后选择宏配置,填写好自定义管线名称。 我们用的是默认的自定义管线,所以填 Custom 就可以了。

http://pic1.zhimg.com/v2-5879a19f80829bdc3ec92a621c81bb65_r.jpg?source=1940ef5c
由于切换了管线,我们想要在 Cocos Creator 场景编辑器内看到效果的话,需要刷新一下 Cocos Creator。
我们可以关闭 Cocos Creator 再打开。也可以按下快捷键 CTRL + R 刷新 Cocos Creator。
可以看到,渲染窗口中的效果发生了变化。
我们调配置一些参数,让整个画面看起来更好些。
可以看到,当我们改动属性面板上的参数时,编辑器中就能实时看到对应的变化,非常方便。

http://picx.zhimg.com/v2-79d8830d1426551189f25ffdec262740_r.jpg?source=1940ef5c
值得说明的是,第三步只是当前版本需要,在后面的版本,比如 3.9 中,就不需要了。
关于每一个后期效果的属性介绍和使用方法,在 Cocos 引擎官方文档中都有解释。
并且呢,也有很多朋友分享了这方面的内容,大家可以去找找看,我们今天就不多说了。
接下来我们进入今天的主题:如何编写一个自己的后期效果 Shader。
后效 Shader 编写

后效 Shader 的编写,需要用到刚刚我们提到过的 BlitScreen 组件, BlitScreen 的作用就是将屏幕内容再绘制一次。
选中 Post Process 节点,在右边的属性面板中,我们给它添加一个 BlitScreen 后效。
可以看到,BlitScreen 上有一个材质参数。

http://picx.zhimg.com/v2-1be6e008aed60875f88ced9ee1a8bdd9_r.jpg?source=1940ef5c
这个材质就是决定绘制效果的关键。
接下来,我们只需要实现一个后效 Shader,并创建一个材质就可以了。
BlitScreen

Cocos Shader 编写,最快的方法就是从引擎提供的模板开始。
我们先找到引擎内置的后效 Shader。
在资源面板中,我们定位到 internal/effects/pipeline/post-process/。
可以看到,引擎内置的后效 Shader 都在这里。 有兴趣的朋友可以自行去研究。

http://pica.zhimg.com/v2-daa8d8a79d35f0095f0717d565cf4214_r.jpg?source=1940ef5c
我们双击打开要用到的 BlitScreen。
可以看到它非常简单,它的 vs 引用的是一个公共头文件,我们打开看看。
可以看到,它几乎什么都没有做,只是输出了用来绘制屏幕内容的位置信息以及我们在fs中需要用到的纹理坐标。
而在它的 fs 中,也只是将屏幕颜色原封不动地输出来。

http://picx.zhimg.com/v2-6210e3e4a76f2c029be09b0d5b559acf_r.jpg?source=1940ef5c
接下来,我们就基于它来实现一个可以改变画面颜色的后效。
实现 Shader

我们选中 BlitScreen,右键选择 复制。
然后在 assets 目录下 右键选择 粘贴。 把它改名为 effect-post-color,双击打开。
这里的 include 的路径是不能用的,我们需要修改一下。 最简单的办法是直接把 vs 里的内容复制粘贴过来。

http://pic1.zhimg.com/v2-25df0b846c5bfb02c715a58389a78ec6_r.jpg?source=1940ef5c
然后,我们添加一个 color 属性,用来设置目标颜色。
我们还需要定义一个对应的 uniform。
找到 CCProgram fs 中的 UBO,在这里添加一个 vec4 color;
最后就是颜色合成了。 我们把 color.rgb 与原图颜色的乘积用来做目标颜色
再把 color.a 作为混合因子与原图插值。
我们的后效 Shader 就写好了。完整 Shader 代码如下,... 表示未做修改。
CCEffect %{
techniques:
- passes:
    ...
      properties:
      color: { value: , editor: { type: color } }
}%

CCProgram vs %{
...
}%

CCProgram fs %{
...
uniform UBO {
    ...
    vec4 color;
};
...
void main () {
    fragColor = texture(inputTexture, v_uv);
    vec3 destColor = fragColor.rgb * color.rgb;
    fragColor.rgb = mix(fragColor.rgb, destColor, color.a);
}
}%
现在我们来看看它的效果。
回到 Cocos Creator 中,新建一个材质,起名为 mat-post-color,然后把它的 effect 切换为刚刚写好的effect-post-color。

http://pic1.zhimg.com/v2-2596fd2a3b081bc85e539310bdba9a38_r.jpg?source=1940ef5c
选中 Post-Process 节点,把它拖动到它的 Material 属性上。

http://picx.zhimg.com/v2-2596fd2a3b081bc85e539310bdba9a38_r.jpg?source=1940ef5c
调节参数,可以看到渲染效果跟着变化了。

http://picx.zhimg.com/v2-7ee4daac8f8fb5ec33b78272c2d248fc_r.jpg?source=1940ef5c
我们的自定义后期效果 Shader 就完成了。
总结


http://picx.zhimg.com/v2-c05cc41e32376375fee2840eef30d4fc_r.jpg?source=1940ef5c
需要注意的是,采用今天介绍的这种方法,只能实现单 Pass 的后期效果,比如 像变灰,蒙板 等等。
如果想要实现一些需要多 Pass 才能实现的效果,比如运动模糊,景深 等效果,就需要使用代码配合。我会在下一期文章中进行分享。
好啦,今天的内容就到这里,希望能够给大家带来帮助。
关注麒麟子,我会分享更多关于图形渲染和游戏开发相关的教程、经验和技巧。

acff00 发表于 2023-10-8 02:33:29

Unity 3D 开发者,有短暂使用过cocos系列引擎,之前是Ogre3D 开发者。
说一下我的理解吧:
10年左右的开源游戏引擎使用经验,让我了解到开源游戏引擎有一个巨大的劣势,不是技术,而是生态。
还没有Unity 3D的时候,国内最主流的引擎是UE和Ogre3D,UE有一套完整的生态体系,比如场景渲染,植被渲染,大气层渲染,基于Flash 的UI系统。这些商业引擎和游戏开发框架之间是互相授权的, 你买了UE就等于买了一大堆商业功能引擎和工具,UE把赚来的钱分给这些商业引擎和工具。 而对于Ogre3D来说,我觉得只说渲染部分的话,基本没有差距,但是涉及到这些功能型引擎工具的话,差距就大了,不是说没有,基本上都非常不方便,开源的吗,你要自己组合,自己调试。相对于UE的一站式服务,要求太高,成本太高。

http://picx.zhimg.com/50/v2-0d86cb91c8541ef6437ae07dec6cc4a1_720w.jpg?source=1940ef5c
当时UE 10万元授权的时候,这个还不是问题,毕竟开源引擎便宜,穷人该用还是要用。但Unity3D,打破了这个平衡,用互联网思想把游戏引擎做成一个服务,引擎本身基本免费,这样对于开源引擎的价格优势就不存在了。
Cocos系列,在开始的那几年,可能是一个奇迹,主要有两点,

[*]是后台有一个商业公司触控科技在运作,不缺钱,和其他开源引擎不同,大家靠钱发电而不是靠爱发电,这个在开始能量就很大。但随着触控上市失败,后期这个优势就慢慢的渐弱了。
[*]是最重要的一点,2D引擎不需要生态,技术都是成熟的统一的,就如同云风当年的风魂引擎,一个大牛就能搞定大部分的工作。而三维引擎是工业体系,需要不同领域不同部门合作,这就回到了最原始的问题,没有生态。
这个没有生态不仅仅是开源引擎的问题,更重要是中国开发者的问题。我是做AR的,去国外参加过活动,一些AR的硬件设备,在开发过程中就能和Unity 3D合作,直接把功能集成在引擎中。对开发者非常方便实用。 而国产硬件,其实也不差,但是都是自己在搞那些SDK,和国外游戏引擎开发者沟通很少,这就导致很可能最后引擎一升级,SDK就作废的窘境,对于我们这些内容开发者而言,太烦了。再比如ar foundation 和 Vuforia这些比较出名的AR框架会内建支持HoloLens iOS, MagicLeap这些国外生态里面的AR硬件,而中国的nreal, action one 都要自己实现支持,甚至根本就不支持。
对于生态而言,国内也是个劣势。但中国最好的是市场大,钱多,期待早日建成自己的生态圈吧。

<hr/>如果cocos 定义为制作微信小游戏的引擎,那么生态就在腾讯手里了,还是有的玩的。但回归主流开发领域,难。

abcadr 发表于 2023-10-8 02:34:10

先说几个冷门的点:
1、creator的文档,是最好的unity入门教程
中文,详细,非机翻
2、unityhub这个东西,最近在不当人的路上也越走越远了。
最近还在查授权,公司买了一个便宜的授权,好像是只能两个人用的pro版,但公司营收绝对不到10w,我在公司用个人账号登录,给我封了,发邮件解释了,说号给你解了,但是你这个号不能在公司用,下次我还封
但据说只有国区是这样
3、要做小游戏,选择也不多,目前还是creator的主场。unity都没参赛。

cocos的东西,尤其是新东西,在有其他备选的情况下,最主要的问题是,小公司不敢用,大公司不愿用。
以前2dx 3.x的时候,studio已经给我整得ptsd了。先不说studio这个东西多坑了。你cancle项目就cancle吧,不维护就算了嘛,以前的我自己踩了坑填了还能勉强用下去,居然突然就毁尸灭迹不给下载链接了。
这么一坑,谁还敢来用你的新东西。说没就没了。
小公司玩儿不起,而大公司,不差钱,更倾向于有完整工具链的工具。
当然也有一些有特殊需求的公司,可能会拿来爆改,效果也不错。但是不具备参考价值,因为一般小公司也没那个能力和资源来爆改。

除非unity继续作大死,不然creator很难在非小游戏的地方站起来。

twinsbbs 发表于 2023-10-8 02:34:40

差起码7.52749个UE。

dxl0812 发表于 2023-10-8 02:35:39

跟芯片领域差距差不多吧。。。。。超车的办法就是先不去抢主力市场,先用低端市场养活自己,然后再想办法超车
页: [1]
查看完整版本: 怎样看待Cocos creator 3.0的发布,在手游开发方面与unity的差距还有多大?