Makepad グラフィックスとエフェクト logo

Makepad グラフィックスとエフェクト

開く

MakepadのGPUアクセラレーテッドシェーダー、SDF描画、アニメーション、ビジュアルエフェクト。シェーダーの基礎、SDF形状、アニメーターシステム、イージング関数を学習。

共有:

Makepad グラフィックスとエフェクト

MakepadのGPUアクセラレーテッドシェーダー、SDF描画、アニメーション。

クイックナビゲーション

カテゴリ 説明
シェーダーの基礎 構造、変数、数学関数
SDF描画 円、ボックス、カプセル、パス描画
アニメーション アニメーター、イージング、キーフレーム、ループ
ビジュアルエフェクト ホバー、グラデーション、シャドウ、グロー

シェーダー構造

live_design! {
    MyShader = {{MyShader}} {
        fn pixel(self) -> vec4 {
            let sdf = Sdf2d::viewport(self.pos * self.rect_size);

            // 形状を描画
            sdf.circle(50.0, 50.0, 20.0);
            sdf.fill(#FF0000);

            return sdf.result;
        }
    }
}

SDF操作

// 基本形状
sdf.circle(x, y, radius)
sdf.box(x, y, width, height, border_radius)
sdf.capsule(x1, y1, x2, y2, width)

// 塗りつぶしとストローク
sdf.fill(color)              // 形状を塗りつぶす
sdf.stroke(color, width)     // 輪郭を描く
sdf.fill_keep(color)         // 塗りつぶし、さらなる操作のために形状を保持

アニメーターシステム

live_design! {
    <Button> {
        animator: {
            hover = {
                default: off
                off = { from: {all: Forward {duration: 0.15}} }
                on = { from: {all: Snap} }
            }
        }

        draw_bg: {
            color: #2196F3
            color_hover: #42A5F5
        }
    }
}

イージング関数

イージング 使用例
OutQuad 入場アニメーション
InQuad 退場アニメーション
InOutQuad スムーズな遷移
ExpDecay {d1: 0.8, d2: 0.97} 物理的な動き

アニメーション例

live_design! {
    LoadingSpinner = {{LoadingSpinner}} {
        animator: {
            spin = {
                default: on
                on = {
                    from: {all: Loop {duration: 1.0}}
                    apply: { draw_bg: { rotation: 360.0 } }
                }
            }
        }

        draw_bg: {
            fn pixel(self) -> vec4 {
                // 回転アークシェーダー
                let sdf = Sdf2d::viewport(self.pos * self.rect_size);
                let angle = self.rotation * PI / 180.0;
                // 回転アークを描画
                return sdf.result;
            }
        }
    }
}

グラデーションエフェクト

draw_bg: {
    fn pixel(self) -> vec4 {
        // 線形グラデーション
        let grad = self.pos.y;
        let color = mix(#FF0000, #0000FF, grad);
        return vec4(color, 1.0);
    }
}

リソース

コメント

まだコメントがありません。最初のコメントを投稿してください!