Cocos Creator:include 机制

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

include 机制

头文件

Surface Shader 中,包含了多个光照模型,如 standard,toon 等。

同时,我们拥有不同的渲染用途,如 render-to-scene, render-to-shadowmap 等。

不同的光照模型拥有不同的表面材质数据结构和光照计算函数,不同的渲染用途之间,流程上会有细微的差别。

如果为不同的光照模型和不同的渲染用途编写独立的代码,会使整个架构很难维护。

因此,在 Surface Shader 中,我们将不同光照模型的方法和结构体,以相同的名字定义在不同的头文件中,再使用 include 进行组合

这样就可以很容易实现,在同样的流程下,通过切换头文件实现不同的光照模型。

比如,在下面的代码中,我们通过 #include 引入 SurfacesMaterialData 的定义,函数中使用的结构体,就是 PBR 表面材质数据结构体。

//PBR 表面材质
#include <surfaces/data-structures/standard>
#define CC_SURFACES_FRAGMENT_MODIFY_SHARED_DATA
void SurfacesFragmentModifySharedData(inout SurfacesMaterialData surfaceData)
{
    // set user-defined data to surfaceData
}

如果我们更换它的头文件:

//toom 表面材质
#include <surfaces/data-structures/toon>
#define CC_SURFACES_FRAGMENT_MODIFY_SHARED_DATA
void SurfacesFragmentModifySharedData(inout SurfacesMaterialData surfaceData)
{
    // set user-defined data to surfaceData
}

此时的 SurfacesMaterialData 使用的就是 surfaces/data-structures/toon 中定义的结构体。

CCProgram

在 Surface Shader 中,CCProgram 包含的内容就是纯粹的 GLSL 代码内容。 我们可以将 Shader 分割到不同的 CCProgram 里形成代码片段,然后通过 include 进行引用。

以下面代码为例:

CCProgram shared-ubos %{
    ...
}%
CCProgram macro-remampping %{
    ...
}%

CCProgram vs %{
    #include<shared-ubos>
    #include<macro-remapping>
}%

CCProgram fs %{
    #include<shared-ubos>
    #include<macro-remapping>
}%

3D建模学习工作室 翻译整理,转载请注明出处!

上一篇:Cocos Creator:Surface Shader 执行流程 (mvrlink.com)

下一篇:Cocos Creator:宏定义与重映射 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号