3.5.2 shader 问题求教

image

为什么用这句代码,这个shader文件会报错。

image

想试着学大佬的写一个水波效果

CC_APPLY_FOG是什么

报错日志一起贴出来看看呗

学着大佬的搞了一个旧版本的 shader 来写。 但是 似乎 col = CC_APPLY_FOG(col, factor_fog); 这句语法在 3.4 之后的版本 不能这么用了。

第二个参数一定是 v_position 这种 vec3 参数

[Window] The “path” argument must be of type string or an instance of Buffer or URL. Received undefinedTypeError [ERR_INVALID_ARG_TYPE]: The “path” argument must be of type string or an instance of Buffer or URL. Received undefined
at Object.openSync (fs.js:468:10)
at Object.func [as openSync] (electron/js2c/asar_bundle.js:5:1846)
at readFileSync (fs.js:377:35)
at e.readFileSync (electron/js2c/asar_bundle.js:5:8872)
at Object.refresh (E:\liumin\cocos\dashboard\CocosDashboard\resources.editors\Creator\3.5.2\resources\resources\3d\engine\editor\inspector\assets\effect.js:308:39)
at Object. (E:\liumin\cocos\dashboard\CocosDashboard\resources.editors\Creator\3.5.2\resources\resources\3d\engine\editor\inspector\assets\effect.js:279:26)
at HTMLElement.update (E:\liumin\cocos\dashboard\CocosDashboard\resources.editors\Creator\3.5.2\resources\app.asar\node_modules@editor\creator\dist\ui-kit\renderer\components\panel\index.ccc:1:1685)
at E:\liumin\cocos\dashboard\CocosDashboard\resources.editors\Creator\3.5.2\resources\resources\3d\engine\editor\inspector\contributions\asset.js:330:28
at Array.forEach ()
at Object.update (E:\liumin\cocos\dashboard\CocosDashboard\resources.editors\Creator\3.5.2\resources\resources\3d\engine\editor\inspector\contributions\asset.js:328:41)

这个应该是 effect 内部有语法错误,在 creator 中没编译通过,导致无法加载时出现的报错。

你这里 factor_fog 是个 float 类型的值,而 CC_APPLY_FOG 第二个参数需要 vec3 类型的值,所以报错了。

之前的版本的shader 好像不少是传的这个值, 我看到是3.4之后是改了,但是就不确定怎么传了

看看你那边fog-fs 文件里面怎么定义的

3.6.0版本测试 不报错的

你看我上面贴的shader代码,大部分是论坛里学的。

最后一句 col = CC_APPLY_FOG(col,factor_fog) 这里是会报错的, 上面官方回答了 不能用这个float 类型了,要用 vec3。 我得自己想办法找到替代, 如果不能用这个 float factor_fog了,那要怎么用。

https://gitee.com/yeshao2069/cocos-creator-shader/blob/v3.5.x/demo/3d/Creator3.5.0_3D_RoleShield/assets/effect/sphere.effect#L77-106

可以参考下