Cocos Creator 3D シェーダー入門:マテリアルとエフェクトの基本

シェーダーをCocos Creatorで使用するには、まずマテリアルを作成し、そのマテリアルにカスタムエフェクト(シェーダー)を割り当てる必要がある。その後、対象の3Dモデルにアタッチされたcc.MeshRendererコンポーネントのMaterialsリストにそのマテリアルを追加することで、シェーダー効果が反映される。

Cocosにおけるシェーダー構成

Cocos Creatorのシェーダーは主に以下の2つのブロックで構成される:

  • CCEffect:レンダリングパスやプロパティ設定をYAML形式で記述
  • CCProgram:実際のGLSLコードを含む頂点/フラグメントシェーダー本体

CCEffectの基本構造

CCEffect %{
  techniques:
  - name: opaque
    passes:
    - vert: vs: entry
      frag: fs: entry
      properties:
        mainTexture: { value: grey }
        colorScale: { value: [1, 1, 1], target: colorScaleAndCutoff.xyz }
      depthStencilState:
        depthTest: true
        depthWrite: true
}%

ここで定義されたpropertiesは、シェーダーコード内のuniform変数と対応し、Creatorエディタ上で調整可能になる。

CCProgramのテンプレート

CCProgram shader-name %{
  precision highp float;
  #include <...>
  
  // uniform, in, out 変数の宣言

  vec4 entry() {
    // 色計算ロジック
    return finalColor;
  }
}%

実践例:縦方向グラデーションシェーダー

以下は、UV座標のY値に基づいて上から下へ色が変化するシンプルなフラグメントシェーダーの例である。

CCEffect %{
  techniques:
  - name: opaque
    passes:
    - vert: general-vs:vert
      frag: gradient-fs:frag
      properties: &props
        mainTexture: { value: white }
        topColor: { value: [1, 1, 0, 1], editor: { type: color } }
        bottomColor: { value: [1, 0, 0, 1], editor: { type: color } }
  - name: transparent
    passes:
    - vert: general-vs:vert
      frag: gradient-fs:frag
      blendState:
        targets:
        - blend: true
          blendSrc: src_alpha
          blendDst: one_minus_src_alpha
      properties: *props
}%

CCProgram gradient-fs %{
  precision highp float;
  #include <legacy/output>
  #include <legacy/fog-fs>

  in vec2 v_uv;
  in vec3 v_position;
  in vec3 v_normal;

  uniform sampler2D mainTexture;

  uniform Constant {
    vec4 topColor;
    vec4 bottomColor;
  };

  vec4 frag() {
    float factor = v_uv.y;
    vec4 baseColor = mix(topColor, bottomColor, factor);
    vec4 texColor = texture(mainTexture, v_uv);
    vec4 col = baseColor * texColor;

    CC_APPLY_FOG(col, v_position);
    return CCFragOutput(col);
  }
}%

このシェーダーをマテリアルに適用し、モデルに割り当てると、テクスチャと2色の線形補間による縦グラデーションが表示される。

タグ: Cocos Creator GLSL Shader Material 3D Rendering

8月12日 04:18 投稿