3.7.2的builtin-standard.effect的变化?

好像都被封装了,有没有相关文档啊?
比如我一个简单的需求:在SurfacesFragmentModifyBaseColorAndTransparency里面拿世界坐标。
之前实在standard-vs里面通过out一个v_position,从 vec4 pos = matWorld * In.position; 过来,然后再standard-fs里面in vec3 v_position即可,那现在怎么办呢?

最后发现该怎么用怎么用,有个SurfacesVertexModifyUV的函数里面找到了这个In,就从这里out 出来了In.position;
这个In里面具体有什么东西?应该怎么查啊?

CCProgram surface-vertex %{
  
  out vec4 v_position;
  out vec4 v_worldPosition;
//...
  #define CC_SURFACES_VERTEX_MODIFY_UV
  void SurfacesVertexModifyUV(inout SurfacesStandardVertexIntermediate In)
  {
    In.texCoord = In.texCoord * tilingOffset.xy + tilingOffset.zw;
  #if CC_SURFACES_USE_SECOND_UV
    In.texCoord1 = In.texCoord1 * tilingOffset.xy + tilingOffset.zw;
  #endif

    // 为surface-fragment输出本地坐标和世界坐标
    mat4 matWorld, matWorldIT;
    CCGetWorldMatrixFull(matWorld, matWorldIT);
    v_position = In.position;
    v_worldPosition = matWorld * In.position;
  }
}%

CCProgram surface-fragment %{
  in vec4 v_position;
  in vec4 v_worldPosition;

  #define CC_SURFACES_FRAGMENT_MODIFY_BASECOLOR_AND_TRANSPARENCY
  vec4 SurfacesFragmentModifyBaseColorAndTransparency()
  {
    vec4 baseColor = albedo;
    
    #if USE_VERTEX_COLOR
      baseColor.rgb *= SRGBToLinear(FSInput_vertexColor.rgb); // use linear
      baseColor.a *= FSInput_vertexColor.a;
    #endif

    #if USE_ALBEDO_MAP
      vec4 texColor = texture(albedoMap, ALBEDO_UV);
      texColor.rgb = SRGBToLinear(texColor.rgb);
      baseColor *= texColor;
    #endif

    #if USE_ALPHA_TEST
      if (baseColor.ALPHA_TEST_CHANNEL < albedoScaleAndCutoff.w) discard;
    #endif

    // test本地坐标与世界坐标
    // baseColor.a = step(v_position.x - v_position.z, 0.0);
    baseColor.a = step(v_worldPosition.x - v_worldPosition.z, 0.0);

    baseColor.rgb *= albedoScaleAndCutoff.xyz;
    return baseColor;
  }
//...
}%
...

原来我每次建工程总是复制之前的工程,使用的也是引擎自动升级上去的资源,其实早在3.7开始就已经由此改变了。

最后改成了在SurfacesVertexModifyWorldPos替换函数中直接获取,不影响其它的业务流。

  out vec3 v_worldPosition;

  #define CC_SURFACES_VERTEX_MODIFY_WORLD_POS
  vec3 SurfacesVertexModifyWorldPos(in SurfacesStandardVertexIntermediate In)
  {
    v_worldPosition = In.worldPos;
    return v_worldPosition;
  }

至于In里面有什么的问题,可以查看chunks/surfaces/default-functions 下面的几个chunk