Material upgrade documentation for v3.0 to v3.1

1. 着色器升级与变化

1.1 内置头文件变化

原来 v3.0 版本的标准着色器头文件 shading-standard 变成了 v3.1 版本的 standard-surface-entry,可以使 effect 同时兼容 forward 渲染管线,和deferred 渲染管线。

原来 v3.0 版本的 cc-fog 头文件变成了 v3.1 版本的 cc-fog-vs/fs,被拆分成了顶点着色器与片元着色器两个版本。

1.2 顶点着色器

  • gl_Position

    v3.1 版本的 VS 主函数名称从 vert 改为了 main ,并且新增了宏 gl_Position,用来给返回值赋值。

    1. CCProgram standard-vs %{
    2. precision highp float;
    3. // include your headfile
    4. #include <cc-fog-vs> // 注意这里头文件名称的变化
    5. // fill in your data here
    6. void main () {
    7. // fill in your data here
    8. gl_Position = fill in your data result;
    9. }
    10. }%

1.3 片元着色器

  • CC_STANDARD_SURFACE_ENTRY()

    加载标准着色器头文件 standard-surface-entry,使用 v3.1 版本的标准着色器输出函数 CC_STANDARD_SURFACE_ENTRY() 替换原有 v3.0 版本着色器输出函数 frag ()

    1. CCProgram standard-fs %{
    2. // include your headfile
    3. #include <cc-fog-fs> // 注意这里头文件名称的变化
    4. #include <standard-surface-entry> // 注意这里标准着色器头文件的名称变化
    5. // fill in your data here
    6. void surf (out StandardSurface s) {
    7. // fill in your data here
    8. }
    9. CC_STANDARD_SURFACE_ENTRY() // 标准着色器输出函数
    10. }%

2. Deferred渲染管线

2.1 Deferred Rendering Pipeline

v3.1 与 v3.0 版本材质系统最大的区别就是 v3.1 版本支持了 deferred 渲染管线,引擎自带标准的 standard-surface-entry 头文件可以同时支持 forward 渲染管线,和 deferred 渲染管线,用法如下:

  1. CCEffect %{
  2. techniques:
  3. // fill in your data here
  4. - &deferred
  5. vert: // your Vertex shader
  6. frag: // your Fragment shader
  7. phase: deferred
  8. propertyIndex: 0
  9. blendState:
  10. targets: // 关闭混合
  11. - blend: false
  12. - blend: false
  13. - blend: false
  14. - blend: false
  15. properties: // your properties name
  16. // fill in your data here
  17. }%
  18. // fill in your data here
  19. CCProgram standard-fs %{
  20. precision highp float;
  21. #include <cc-global>
  22. #include <shared-ubos>
  23. #include <cc-fog-fs> // 注意这里头文件名称的变化。
  24. #include <standard-surface-entry> // 注意这里标准着色器头文件的名称变化
  25. // fill in your data here
  26. void surf (out StandardSurface s) {
  27. // fill in your data here
  28. }
  29. CC_STANDARD_SURFACE_ENTRY() // 标准着色器输出函数
  30. }%
  31. // fill in your data here

2.2 渲染管线判断

在头文件 standard-surface-entry 会判断选择了哪条渲染管线,光照计算在文件 shading-standard-additive

如果判断是 deferred 渲染管线,会先调用 deferred-lighting effect 文件,随后调用光照计算文件 shading-standard-additive

  1. #define CC_STANDARD_SURFACE_ENTRY()
  2. #if CC_FORWARD_ADD
  3. #include <shading-standard-additive>
  4. // fill in your data here
  5. #elif CC_PIPELINE_TYPE == CC_PIPELINE_TYPE_FORWARD // 判断是否前向渲染管线
  6. // fill in your data here
  7. #elif CC_PIPELINE_TYPE == CC_PIPELINE_TYPE_DEFERRED // 判断是否后向渲染管线
  8. // fill in your data here
  9. #endif

3. 参数传输升级

顶点着色器往片元着色器传递shadow参数的宏,原本 v3.0 为 CCPassShadowParams,v3.1 版本修改为 CC_TRANSFER_SHADOW

v3.1 版本顶点着色器往片元着色器传输 FOG 参数,直接使用 CC_TRANSFER_FOG

版本对比:

  • v3.0
  1. v_fog_factor = CC_TRANSFER_FOG(pos);
  2. CCPassShadowParams(pos);
  • v3.1
  1. CC_TRANSFER_FOG(pos);
  2. CC_TRANSFER_SHADOW(pos);

升级指南