shader chunks / usepass 相关疑问

  • Creator 版本:2.2.0

最近在看最新的 creatorshader 相关的内容,想把之前 cocos2dx 做的一些 2d 效果试着在 creator 中实现。creatorshader 的设计应该是参照了 unity3d 的,在看了源码和例子,文档以后,还有几个疑问想请教一下。

3d 文档中提到了关于 effect 的设计和语法的内容:
https://docs.cocos.com/creator3d/manual/zh/material-system/effect-syntax.html

看完后主要想问一下:

  1. 这里提到的 chunk 有没有实际的使用例子,我如果想要定义适用自己的 chunk 有什么需要遵循的规范 (放在什么地方,什么时候被加载之类的)

  2. creator 有没有类似 uniity3d 里的 Usepass 功能,达到跨 shader 共享 pass 的效果

  3. 3d 文档里提到的这些,在 2d2.2.0 里面是否都同样适用

希望有知道的人,可以指点一下,谢谢了。

自己简单尝试了下,chunk 使用貌似现在只能放到引擎目录下才能生效

共享属性函这里 :
CocosCreator.app/Contents/Resources/engine/cocos2d/renderer/build/chunks/

共享 vs, fs 这里 :
CocosCreator.app/Contents/Resources/engine/cocos2d/renderer/build/chunks/shader

不过自己写的 .inc 貌似不是每次修改就刷新的,看了下源码找到了 :
CocosCreator.app/Contents/Resources/engine/package.json

"scripts": {
    "test": "gulp test-in-ci",
    "build-chunks": "node ./cocos2d/renderer/build/build-chunks",
    "build-mapping": "node ./cocos2d/renderer/build/build-mapping"
  },

但是 build-chunks 文件并不存在,执行 npm run build-mapping 以后,自己的 .inc 也没有马上更新

另外,试了下 passvert frag 除了直接引用 shader/xxx.inc , 还可以给个函数,语法 xxx:xxx,返回值匹配就行了。

至于想要共享的 pass 放哪里没找到,貌似共享 pass 官方还没有搞。

如果理解有错的地方,希望官方指正。

额,总体来说 2.2.0的使用 并没有文档可以直接遵循。3d的文档 可以参考,但是没办法照搬,照搬也可能出错。

第一条里提到的 chunk具体是指的哪块?
现在编写基本是要根据调试信息 具体分析,基本与3d里文档有相当的差别
如果不清楚的报错信息,可以贴出来,我帮看看

Usepass 功能是否存在@2youyou2

马上刷新的功能建议看看ShaderFx的实现,晓衡哥实现了

就是文档里的 include 机制

我指的是自己写的 chunk 刷新的不及时,不是 shader 在编辑器里刷新的问题

他应该知道 @jare

:smiling_imp::2: