Skip to content

APIリファレンス: シェーダー

シェーダーは、キャンバス上の位置に基づいて各ピクセルの色を定義します。主にグラデーション、パターン、ノイズに使用されます。シェーダーは paint.setShader(shader) を介して Paint オブジェクトに割り当てられます。

グラデーション

グラデーションは最も一般的なシェーダーのタイプです。Skijaはいくつかのタイプをサポートしています:

線形グラデーション

2点間の滑らかな遷移を作成します。

視覚的な例: 線形、放射状、スイープ、円錐グラデーション、およびノイズシェーダーの例については、examples/scenes/src/ShadersScene.java を参照してください。

java
Shader linear = Shader.makeLinearGradient(
    0, 0, 100, 100,      // x0, y0, x1, y1
    new int[] { 0xFFFF0000, 0xFF0000FF } // 色 (赤から青)
);

放射状グラデーション

中心点からの円形の遷移を作成します。

java
Shader radial = Shader.makeRadialGradient(
    50, 50, 30,          // 中心 x, y, 半径
    new int[] { 0xFFFFFFFF, 0xFF000000 } // 色 (白から黒)
);

スイープグラデーション

中心点を中心に遷移が掃引されるグラデーションを作成します(カラーホイールのように)。

java
Shader sweep = Shader.makeSweepGradient(
    50, 50,              // 中心 x, y
    new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0xFFFF0000 }
);

2点円錐グラデーション

2つの円の間の遷移を作成します(3Dのような照明やフレアに便利です)。

java
Shader conical = Shader.makeTwoPointConicalGradient(
    30, 30, 10,          // 開始 x, y, 半径
    70, 70, 40,          // 終了 x, y, 半径
    new int[] { 0xFFFF0000, 0xFF0000FF }
);

ノイズとパターン

パーリンノイズ

雲、大理石、炎のように見えるテクスチャを生成します。

java
// フラクタルノイズ
Shader noise = Shader.makeFractalNoise(
    0.05f, 0.05f,        // baseFrequencyX, baseFrequencyY
    4,                   // numOctaves
    0.0f                 // seed
);

// 乱流
Shader turb = Shader.makeTurbulence(0.05f, 0.05f, 4, 0.0f);

イメージシェーダー

Image をシェーダーに変換し、タイル状に配置したり、形状を塗りつぶすために使用できます。

java
// Imageクラスを介してアクセス
Shader imageShader = image.makeShader(
    FilterTileMode.REPEAT, 
    FilterTileMode.REPEAT, 
    SamplingMode.DEFAULT
);

合成と変更

  • Shader.makeBlend(mode, dst, src): ブレンドモードを使用して2つのシェーダーを合成します。
  • shader.makeWithLocalMatrix(matrix): シェーダーの座標系に変換を適用します。
  • shader.makeWithColorFilter(filter): シェーダーの出力にカラーフィルターを適用します。

タイルモード (FilterTileMode)

シェーダー(グラデーションや画像など)が定義された境界よりも大きな領域を塗りつぶす必要がある場合:

  • CLAMP: 残りの部分を塗りつぶすために端の色を使用します。
  • REPEAT: パターンを繰り返します。
  • MIRROR: パターンを繰り返し、端でミラーリングします。
  • DECAL: 境界の外側を透明にレンダリングします。