升级指南:Effect 从 v3.4.x 升级到 v3.5.0
宏标记和函数宏
宏标记和功能宏的效果语法已升级,为避免占用标准的 glsl 定义,项目中旧的 Cocos Shader 文件(*.effect)将自动升级,但如果您使用的是没有配套 *.meta 数据的外部 Cocos Shader 文件,或编写新的 Cocos Shader,则必须注意。
- 宏标记的新语法:
#pragma define meta
- 函数宏的新语法:
#pragma define
有关详细信息,请参阅 Cocos Shader 语法 - macro-tags。
模型级别的阴影偏移
在 v3.5 中我们支持对模型设置单独阴影偏移值,可以对简单或复杂曲面上的阴影效果进行详细控制。如果您有任何自定义的 effect 文件,您可能需要升级它们使阴影偏移值生效。
解决 effect 文件从v3.4.x,升级到 v3.5.0 后,shadowBias 不生效的问题。
注意:如果禁用灯光的阴影贴图,或者没有在顶点着色器上计算 CC_TRANSFER_SHADOW(pos) 则 忽略 该材质升级。
升级说明
有 四个元素 要添加到效果文件中,如下所示:
vs out varying 定义
#if CC_RECEIVE_SHADOW
out mediump vec2 v_shadowBias;
#endif
vs shadow bias 获取
#if CC_RECEIVE_SHADOW
v_shadowBias = CCGetShadowBias();
#endif
fs in varying 定义
#if CC_RECEIVE_SHADOW
in mediump vec2 v_shadowBias;
#endif
fs shadow bias 赋值
#if CC_RECEIVE_SHADOW
s.shadowBias = v_shadowBias;
#endif
示例(代码片段)
// 顶点着色器
CCProgram standard-vs %{
// 头文件区域
#include <cc-xxx>
...
#include <cc-xxxx>
// vs 输出区域
out vec3 v_xxx;
...
#if CC_RECEIVE_SHADOW
out mediump vec2 v_shadowBias;
#endif
...
out vec3 v_xxxx;
// vs 执行区域
void main () {
xxx;
...
#if CC_RECEIVE_SHADOW
v_shadowBias = CCGetShadowBias();
#endif
...
xxxx;
}
}%
// 片元着色器
CCProgram standard-fs %{
// 头文件区域
#include <cc-xxx>
...
#include <cc-xxxx>
// vs 输入区域
in vec3 v_xxx;
...
#if CC_RECEIVE_SHADOW
in mediump vec2 v_shadowBias;
#endif
...
in vec3 v_xxxx;
// ps 执行区域
void surf (out StandardSurface s) {
xxx;
...
#if CC_RECEIVE_SHADOW
s.shadowBias = v_shadowBias;
#endif
...
xxxx;
}
}%