cocos3 shader怎么传入vec4数组

rectSize 同理.

你这个 vec4 xxx[6] 的写法很诡异,即使是「6个(float 类型)元素的数组」也应该写做 float xxx[6]

我试了不行

因为我要的实际上是个vec2的数组,但是uniform里面定义了vec4之后貌似就不让用vec2数组了,所以我用了vec4数组。
properties里面理论上用[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],但我试过还会多一个报错是这个type error: Error EFX3302: illegal property declaration for ‘center’: wrong array length,用[0,0,0,0]反而没错的。

谁说的定义了vec4之后貌似就不让用vec2数组了?:joy: 你是咋定义的?

你应该是定义顺序不对违反了 UBO 内存布局策略吧?

uniform vec2 center[6]: array UBO members need to be 16-bytes-aligned to avoid implicit padding
是的,但我找不到合适的顺序……不过用vec4还是vec2应该不影响都能实现吧

  uniform ARGS {
    vec4 overlayColor;   // 遮罩颜色 RGBA
    vec2 center[6];      // 高亮中心(单位:像素)
    vec2 rectSize[6];    // 高亮区域尺寸(单位:像素)
    vec2 ui_resolution;  // 屏幕分辨率(单位:像素)
    float blur;          // 羽化宽度(单位:像素)
  };

mat我去学习一下……我也是参考这里的链接,人家貌似就用了vec4数组没啥问题。
我的“vec4 之后就不支持 vec2 数组”表述的不准确,我用vec2数组的情况下尝试了各种,找不到合适的顺序。

你那链接里的是 Cocos 2.X 的语法,你一楼写的语法明显是 3.X 的,互不兼容的

嗯,2和3这点不兼容我就不知道了嘛…所以发帖注明是3.X的版本来问了

我用3.8.7试了,为啥没报错? 虽然没效果,实现有问题而已。

我用的3.8.5= =我也升级下试试吧

你参数怎么设置的? 是编辑器里就报错?还是预览报错?还是真机?

我在 3.8.6 也试了下,确实也没报错……



编辑器里就报错,运行的时候也粉红的

材质面板也确实可以支持定义6组 vec4,看来3.x也是支持 vec 数组的

发现没报错的原因了,你没开USE_TEXTURE

image

开了,也没问题……

你要不把你项目打包成zip,帖子这里上传,我们再试试?

草了,我也突然好了……我是关掉USE_TEXTURE之后再打开也没了,估计是有什么缓存了吧……

再请教个问题,我应该怎么实现呢,我想做到一个遮罩里面有多个透明区域,我现在的代码,把i < 6改成i < 1有用,但是< 6就不行 @vajoy

image
透明度初始为1.0
后面合并使用min

不然原本应该是有6个重叠部分才是?