Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

pixijs-filters

PixiJS v8のコンテナにフィルターパイプラインで視覚エフェクトを適用する際に使用するスキルです。AlphaFilter・BlurFilter・ColorMatrixFilter・DisplacementFilter・NoiseFilterなどの組み込みフィルター、GLSL/WGSLを用いたカスタムFilter.from()、resolution・padding・antialias・blendRequiredなどのオプション、filterAreaによる最適化、コミュニティパッケージのpixi-filtersまで幅広くカバーします。

description の原文を見る

Use this skill when applying visual effects to PixiJS v8 containers via the filter pipeline. Covers built-in filters (AlphaFilter, BlurFilter, ColorMatrixFilter, DisplacementFilter, NoiseFilter), custom Filter.from() with GLSL/WGSL, options (resolution, padding, antialias, blendRequired), filterArea optimization, pixi-filters community package. Triggers on: filters, BlurFilter, ColorMatrixFilter, DisplacementFilter, NoiseFilter, Filter.from, GLSL filter, pixi-filters, filterArea.

SKILL.md 本文

container.filters に 1 つのフィルタ (またはチェーン処理用の配列) を割り当てることで、視覚効果を追加します。ビルトインフィルタはぼかし、色行列、ディスプレイスメント、透明度、ノイズに対応しており、カスタムフィルタは Filter.from(...) を使用して GLSL/WGSL フラグメントシェーダーをラップします。

クイックスタート

const sprite = new Sprite(await Assets.load("hero.png"));
app.stage.addChild(sprite);

const blur = new BlurFilter({ strength: 4, quality: 4 });
const colorMatrix = new ColorMatrixFilter();
colorMatrix.brightness(1.2, false);

sprite.filters = [blur, colorMatrix];

const container = new Container();
container.filters = [new BlurFilter({ strength: 2 })];
container.filterArea = new Rectangle(0, 0, 800, 600);
app.stage.addChild(container);

関連スキル: pixijs-custom-rendering (シェーダー内部、ユニフォーム型)、pixijs-blend-modes (フィルタとの合成)、pixijs-performance (フィルタチューニング、filterArea)。

コアパターン

ビルトインフィルタ

import {
  AlphaFilter,
  BlurFilter,
  ColorMatrixFilter,
  DisplacementFilter,
  NoiseFilter,
  Assets,
  Sprite,
} from "pixi.js";

// Alpha (子ごとのレイヤーリングなしで均一な透明度を適用)
const alpha = new AlphaFilter({ alpha: 0.5 });

// Blur — strength/quality は均一です。strengthX/strengthY で軸を分割します。
// kernelSize は奇数である必要があります (5, 7, 9, ... 15)。
// repeatEdgePixels は透明なエッジを防ぎます
const blur = new BlurFilter({
  strength: 4,
  quality: 4,
  kernelSize: 5,
  repeatEdgePixels: false,
});

// Color matrix — brightness は多くのプリセットの 1 つです。その他:
// tint, hue, contrast, saturate, desaturate, greyscale/grayscale,
// blackAndWhite, negative, sepia, technicolor, polaroid, kodachrome,
// browni, vintage, colorTone, night, predator, lsd, reset。
// `colorMatrix.matrix` (20 要素の配列) と `colorMatrix.alpha`
// (元の値と変換値のブレンド) で直接アクセス可能です。
const colorMatrix = new ColorMatrixFilter();
colorMatrix.brightness(1.5, false);
colorMatrix.contrast(0.5, true); // multiply は既存の行列の上に積み重ねます
colorMatrix.alpha = 0.7; // 70% の強度でブレンド

// Displacement — scale は数値または PointData です
const displacementTexture = await Assets.load("displacement_map.png");
const displacementSprite = new Sprite(displacementTexture);
const displacement = new DisplacementFilter({
  sprite: displacementSprite,
  scale: { x: 20, y: 10 },
});

// Noise — seed はノイズパターンを決定する任意の数値です。
// 同じ seed は同じパターンを再現します
const noise = new NoiseFilter({ noise: 0.5, seed: Math.random() });

sprite.filters = [blur, colorMatrix];

Filter.from() を使用したカスタムフィルタ

カスタムフィルタを作成する最も簡単な方法です。フラグメントシェーダーのみが必要で、PixiJS がデフォルトのバーテックスシェーダーを提供します。

import { Filter } from "pixi.js";

const filter = Filter.from({
  gl: {
    fragment: `
            in vec2 vTextureCoord;
            out vec4 finalColor;
            uniform sampler2D uTexture;
            uniform float uTime;

            void main() {
                vec2 uv = vTextureCoord;
                uv.x += sin(uv.y * 10.0 + uTime) * 0.02;
                finalColor = texture(uTexture, uv);
            }
        `,
  },
  resources: {
    timeUniforms: {
      uTime: { value: 0, type: "f32" },
    },
  },
});

sprite.filters = filter;

app.ticker.add((ticker) => {
  filter.resources.timeUniforms.uniforms.uTime += 0.04 * ticker.deltaTime;
});

より細かい制御が必要な場合は、GlProgram/GpuProgram オブジェクトを直接構築してください:

import { Filter, GlProgram } from "pixi.js";

const glProgram = GlProgram.from({ fragment: fragmentSrc, vertex: vertexSrc });

const filter = new Filter({
  glProgram,
  resources: {
    timeUniforms: {
      uTime: { value: 0, type: "f32" },
    },
  },
});

重要なポイント:

  • フラグメントシェーダーで gl_FragColor ではなく out vec4 finalColor を使用してください (GLSL ES 3.0)。
  • texture2D ではなく texture() を使用してサンプリングしてください。
  • WebGL は glProgram、WebGPU は gpuProgram を使用します。一方を省略するとそのレンダラーがスキップされます。
  • テクスチャはユニフォームではなく resources に入ります。フィルタシステムは自動的に uTexture (入力) を提供します。
  • filter.resources.{groupName}.uniforms.{name} を使用してユニフォーム値にアクセスしてください。

フィルタオプション

import { Filter, GlProgram, Rectangle } from "pixi.js";

const filter = new Filter({
  glProgram: GlProgram.from({ fragment }),
  resources: {},
  resolution: 0.5, // デフォルト 1。低いほど高速で、ぼやけています
  padding: 10, // デフォルト 0。効果がバウンドを拡張する場合の追加ピクセル
  antialias: "off", // デフォルト 'off'。'on' | 'off' | 'inherit'
  blendMode: "normal", // デフォルト 'normal'
  blendRequired: false, // デフォルト false。シェーダーが uBackTexture をサンプルする場合は true
  clipToViewport: true, // デフォルト true
});

// 最適化: 既知のバウンドを設定して、フレームごとの測定を回避します
container.filterArea = new Rectangle(0, 0, 800, 600);

// フィルタ配列を再構築することなくトグル
filter.enabled = false;

// 1 つのフィルタインスタンスを多くのディスプレイオブジェクト間で共有
sprite1.filters = [filter];
sprite2.filters = [filter];

コミュニティフィルタ (pixi-filters)

import { AdjustmentFilter } from "pixi-filters/adjustment";
import { GlowFilter } from "pixi-filters/glow";

sprite.filters = [
  new AdjustmentFilter({ brightness: 1.2, contrast: 1.1 }),
  new GlowFilter({ distance: 15, outerStrength: 2 }),
];

v8 の場合、コミュニティフィルタは古い @pixi/filter-* パッケージではなく pixi-filters/{name} インポートを使用します。

高度なブレンドモード

高度なブレンドモード (color-burnoverlayhard-light など) はフィルタシステムを使用しており、使用前にインポートする必要があります。WebGL では useBackBuffer: true も必要です。完全なリストは pixijs-blend-modes スキルを参照してください。

import "pixi.js/advanced-blend-modes";

await app.init({ useBackBuffer: true });
sprite.blendMode = "color-burn";

よくある間違い

[CRITICAL] 古い Filter コンストラクタの使用 (vertex、fragment、uniforms)

誤り:

import { Filter } from "pixi.js";

const filter = new Filter(vertex, fragment, { uTime: 0 });

正解:

import { Filter, GlProgram } from "pixi.js";

const filter = new Filter({
  glProgram: GlProgram.from({ fragment, vertex }),
  resources: {
    timeUniforms: { uTime: { value: 0, type: "f32" } },
  },
});

v8 はオプションオブジェクトを使用します。シェーダーは GlProgram.from() または GpuProgram.from() でラップする必要があります。ユニフォームは resources 内に明示的な型でグループ化されます。テクスチャはユニフォームではなくリソースです。

[HIGH] v8 で @pixi/filter-* パッケージを使用

誤り:

import { AdjustmentFilter } from "@pixi/filter-adjustment";

正解:

import { AdjustmentFilter } from "pixi-filters/adjustment";

@pixi/filter-* パッケージは v7 のみです。v8 の場合、コミュニティフィルタパッケージは pixi-filters/{name} に再構成されています。

[HIGH] コンテナ化なしで多数のフィルタを使用

各フィルタアプリケーションにはフレームバッファスイッチ、バウンド測定、テクスチャへのレンダーパスが必要です。親コンテナ上の 1 つのフィルタは、各子に同じフィルタを適用するより非常に安いです。

誤り:

for (const child of container.children) {
  child.filters = [new BlurFilter({ strength: 4 })];
}

正解:

container.filters = [new BlurFilter({ strength: 4 })];

[HIGH] WebGL で blendRequired フィルタを useBackBuffer なしで使用

blendRequired: true に設定するカスタムフィルタおよびほとんどの高度なコミュニティフィルタはバックバッファをサンプルします。WebGL ではレンダラーが useBackBuffer: true で初期化された場合のみ機能します。そうでない場合、PixiJS は警告をログし、フィルタはサイレントにフォールバックします:

await app.init({ useBackBuffer: true });

WebGPU はバックバッファを無条件に有効にするため、これは WebGL にのみ影響します。

[MEDIUM] 既知のサイズのコンテナに対して filterArea を設定していない

filterArea がないと、PixiJS は getGlobalBounds() を使用してフレームごとにコンテナバウンドを測定します。これはすべての子を再帰的に歩みます。既知の寸法を持つコンテナの場合、このコストを回避するために filterArea を設定してください:

import { Rectangle } from "pixi.js";

container.filterArea = new Rectangle(0, 0, 800, 600);
container.filters = [someFilter];

API リファレンス

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
pixijs
リポジトリ
pixijs/pixijs-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/pixijs/pixijs-skills / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: pixijs · pixijs/pixijs-skills · ライセンス: MIT