升级指南: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)忽略 该材质升级。

升级说明

四个元素 要添加到效果文件中,如下所示:

  1. vs out varying 定义

    1. #if CC_RECEIVE_SHADOW
    2. out mediump vec2 v_shadowBias;
    3. #endif
  2. vs shadow bias 获取

    1. #if CC_RECEIVE_SHADOW
    2. v_shadowBias = CCGetShadowBias();
    3. #endif
  3. fs in varying 定义

    1. #if CC_RECEIVE_SHADOW
    2. in mediump vec2 v_shadowBias;
    3. #endif
  4. fs shadow bias 赋值

    1. #if CC_RECEIVE_SHADOW
    2. s.shadowBias = v_shadowBias;
    3. #endif

示例(代码片段)

  1. // 顶点着色器
  2. CCProgram standard-vs %{
  3. // 头文件区域
  4. #include <cc-xxx>
  5. ...
  6. #include <cc-xxxx>
  7. // vs 输出区域
  8. out vec3 v_xxx;
  9. ...
  10. #if CC_RECEIVE_SHADOW
  11. out mediump vec2 v_shadowBias;
  12. #endif
  13. ...
  14. out vec3 v_xxxx;
  15. // vs 执行区域
  16. void main () {
  17. xxx;
  18. ...
  19. #if CC_RECEIVE_SHADOW
  20. v_shadowBias = CCGetShadowBias();
  21. #endif
  22. ...
  23. xxxx;
  24. }
  25. }%
  26. // 片元着色器
  27. CCProgram standard-fs %{
  28. // 头文件区域
  29. #include <cc-xxx>
  30. ...
  31. #include <cc-xxxx>
  32. // vs 输入区域
  33. in vec3 v_xxx;
  34. ...
  35. #if CC_RECEIVE_SHADOW
  36. in mediump vec2 v_shadowBias;
  37. #endif
  38. ...
  39. in vec3 v_xxxx;
  40. // ps 执行区域
  41. void surf (out StandardSurface s) {
  42. xxx;
  43. ...
  44. #if CC_RECEIVE_SHADOW
  45. s.shadowBias = v_shadowBias;
  46. #endif
  47. ...
  48. xxxx;
  49. }
  50. }%