关于CCProgram的include的疑问

这里先放一段来自builtin-standard.effect的代码片段

問題4
我看了文档 Cocos Creator 3.8 手册 - 着色器语法,但是我还是看不懂上面这段,原因是#include后面的比如macro-remapping是什么?另一个.effect的名称吗?我搜索了项目发现并没有macro-remapping这个文件,是在.effect文档中有声明着色器名称什么的吗?但是看了下builtin-standard.effect的CCEffect,里面并没有类似名称声明的东西,那如果我想要引用builtin-standard.effect的pass我应该#include写什么呢?

顶下…

https://docs.cocos.com/creator/manual/zh/shader/surface-shader.html

include后面是一个chunk,可以理解成effect里抽离分装出来的通用的一些函数和变量

我看了下文档Include
上面说是Internal/clunks目录下
但是我在Internal/clunks下面找不到macro-remapping和最下面四个文件,asset下也没有,这是怎么回事?这里应该报错才对,但是并没有,然而我把这个#include 写在我自己的.effect里时会报错
[Assets] …/RoleMaterial/effect-001.effect - unlit-fs:frag: Error EFX2001: can not resolve ‘macro-remapping’
这个是什么情况?

顶下…

顶下…

我随手讲讲,
首先cocos shader和unity shader一样有自己的语法规则。

effect文件是shader文件的入口文件,chunk文件是shader文件的库文件。

对于任意program chunk(程序块)都是用

CCProgram name %{

}% 

组成。

任意CCProgram可以在内部通过inlcude来链接其他CCProgram。

比如你提到的macro-remapping主要作用是声明宏的一个辅助程序块(CCProgram chunk)。在builtin-standard文件的顶部。编译时会展开所有#include。你可以把他当作c++/rust的inline来理解,内联。也就是说你在effect文件内部可以实现任意个CCProgram chunk,然后在某个CCProgram或某多个CCProgram中去链接。

对于任意chunk文件,一般是用来放置可能被多个chunk或者effect文件链接的公共函数或者结构。