three-best-practices
Three.jsのパフォーマンス最適化とベストプラクティスのガイドライン。Three.jsコードの作成・レビュー・最適化時に使用します。3Dシーン、WebGL/WebGPUレンダリング、ジオメトリ、マテリアル、テクスチャ、ライティング、シェーダー、TSLに関するタスクで自動的に適用されます。
description の原文を見る
Three.js performance optimization and best practices guidelines. Use when writing, reviewing, or optimizing Three.js code. Triggers on tasks involving 3D scenes, WebGL/WebGPU rendering, geometries, materials, textures, lighting, shaders, or TSL.
SKILL.md 本文
Three.js ベストプラクティス
Three.js アプリケーションの包括的なパフォーマンス最適化ガイド。18 のカテゴリーにおける 120 以上のルールが、影響度の優先順位に基づいて記載されています。
ソース・クレジット
このスキルは複数の信頼できるソースからベストプラクティスをコンパイルしています:
- mrdoob によってメンテナンスされている Three.js
llmsブランチの公式ガイドライン- Utsubo による 100 Three.js Tips - WebGPU、アセット最適化、パフォーマンス ティップスをカバーする優れた包括的ガイド
適用するべき場面
以下の場合はこのガイドラインを参照してください:
- 新しい Three.js プロジェクトをセットアップするとき
- Three.js コードを作成またはレビューするとき
- パフォーマンスを最適化またはメモリリークを修正するとき
- カスタムシェーダー(GLSL または TSL)を操作するとき
- WebGPU 機能を実装するとき
- WebXR で VR/AR エクスペリエンスを構築するとき
- 物理エンジンを統合するとき
- モバイルデバイス向けに最適化するとき
ルールカテゴリー(優先度順)
| 優先度 | カテゴリー | 影響度 | プリフィックス |
|---|---|---|---|
| 0 | モダン セットアップ & インポート | FUNDAMENTAL | setup- |
| 1 | メモリ管理 & 破棄 | CRITICAL | memory- |
| 2 | レンダーループ最適化 | CRITICAL | render- |
| 3 | ドローコール最適化 | CRITICAL | drawcall- |
| 4 | ジオメトリ & バッファ管理 | HIGH | geometry- |
| 5 | マテリアル & テクスチャ最適化 | HIGH | material- |
| 6 | アセット圧縮 | HIGH | asset- |
| 7 | ライティング & シャドウ | MEDIUM-HIGH | lighting- |
| 8 | シーングラフ組織 | MEDIUM | scene- |
| 9 | シェーダー ベストプラクティス (GLSL) | MEDIUM | shader- |
| 10 | TSL (Three.js Shading Language) | MEDIUM | tsl- |
| 11 | WebGPU レンダラー | MEDIUM | webgpu- |
| 12 | ロード & アセット | MEDIUM | loading- |
| 13 | Core Web Vitals | MEDIUM-HIGH | vitals- |
| 14 | カメラ & コントロール | LOW-MEDIUM | camera- |
| 15 | アニメーション システム | MEDIUM | animation- |
| 16 | 物理演算 統合 | MEDIUM | physics- |
| 17 | WebXR / VR / AR | MEDIUM | webxr- |
| 18 | オーディオ | LOW-MEDIUM | audio- |
| 19 | ポストプロセッシング | MEDIUM | postpro- |
| 20 | モバイル最適化 | HIGH | mobile- |
| 21 | プロダクション | HIGH | error-, migration- |
| 22 | デバッグ & DevTools | LOW | debug- |
クイックリファレンス
0. モダン セットアップ (FUNDAMENTAL)
setup-use-import-maps- 古い CDN スクリプトではなく Import Maps を使用setup-choose-renderer- WebGLRenderer (デフォルト) vs WebGPURenderer (TSL/compute)setup-animation-loop- 手動 RAF ではなくrenderer.setAnimationLoop()を使用setup-basic-scene-template- 完全なモダン シーン テンプレート
1. メモリ管理 (CRITICAL)
memory-dispose-geometry- 常にジオメトリを破棄memory-dispose-material- 常にマテリアルとテクスチャを破棄memory-dispose-textures- 動的に作成されたテクスチャを破棄memory-dispose-render-targets- 常に WebGLRenderTarget を破棄memory-dispose-recursive- 階層構造に対して再帰的な破棄を使用memory-dispose-on-unmount- React のクリーンアップ/アンマウント時に破棄memory-renderer-dispose- ビューを破棄するときにレンダラーを破棄memory-reuse-objects- ジオメトリとマテリアルを再利用
2. レンダーループ (CRITICAL)
render-single-raf- 単一の requestAnimationFrame ループrender-conditional- 静的シーン用のオンデマンド レンダリングrender-delta-time- アニメーション用にデルタタイムを使用render-avoid-allocations- レンダーループ内でメモリを割り当てないrender-cache-computations- 高コストな計算をキャッシュrender-frustum-culling- フラスタム カリングを有効化render-update-matrix-manual- 静的オブジェクトの自動マトリックス更新を無効化render-pixel-ratio- ピクセルレートを 2 に制限render-antialias-wisely- アンチエイリアシングは慎重に使用
3. ドローコール最適化 (CRITICAL)
draw-call-optimization- フレームあたり 100 未満のドローコール を目標geometry-instanced-mesh- 同一オブジェクト用に InstancedMesh を使用geometry-batched-mesh- 異なるジオメトリ(同一マテリアル)用に BatchedMesh を使用geometry-merge-static- BufferGeometryUtils で静的ジオメトリをマージ
4. ジオメトリ (HIGH)
geometry-buffer-geometry- 常に BufferGeometry を使用geometry-merge-static- 静的ジオメトリをマージgeometry-instanced-mesh- 同一オブジェクト用に InstancedMesh を使用geometry-lod- 複雑なモデル用に Level of Detail を使用geometry-index-buffer- インデックス付きジオメトリを使用geometry-vertex-count- 頂点数を最小化geometry-attributes-typed- 適切な型付き配列を使用geometry-interleaved- インターリーブ バッファを検討
5. マテリアル & テクスチャ (HIGH)
material-reuse- メッシュ間でマテリアルを再利用material-simplest-sufficient- 機能する最もシンプルなマテリアルを使用material-texture-size-power-of-two- 2 の累乗のテクスチャサイズを使用material-texture-compression- 圧縮テクスチャ (KTX2/Basis) を使用material-texture-mipmaps- ミップマップを適切に有効化material-texture-anisotropy- 床用に異方性フィルタリングを使用material-texture-atlas- テクスチャ アトラスを使用material-avoid-transparency- 透明マテリアルを最小化material-onbeforecompile- シェーダー修正用に onBeforeCompile を使用(または TSL)
6. アセット圧縮 (HIGH)
asset-compression- Draco、Meshopt、KTX2 圧縮ガイドasset-draco- ジオメトリサイズを 90-95% 削減asset-ktx2- GPU 圧縮テクスチャ (UASTC vs ETC1S)asset-meshopt- Draco の代替案でデコンプレッション高速化asset-lod- 30-40% のフレームレート向上のための Level of Detail
7. ライティング & シャドウ (MEDIUM-HIGH)
lighting-limit-lights- アクティブなライトを 3 個以下に制限lighting-shadows-advanced- PointLight コスト、CSM、フェイク シャドウlighting-bake-static- 静的シーン用にライティングをベイクlighting-shadow-camera-tight- シャドウ カメラをタイトに調整lighting-shadow-map-size- 適切なシャドウ解像度を選択 (512-4096)lighting-shadow-selective- シャドウを選択的に有効化lighting-shadow-cascade- 大規模シーン用に CSM を使用lighting-shadow-auto-update- 静的シーン用に autoUpdate を無効化lighting-probe- Light Probes を使用lighting-environment- アンビエント ライト用に環境マップを使用lighting-fake-shadows- バジェット コンタクト シャドウ用にグラデーション プレーン
8. シーングラフ (MEDIUM)
scene-group-objects- 組織化用に Groups を使用scene-layers- 選択的レンダリング用に Layers を使用scene-visible-toggle- 追加/削除ではなく visible フラグを使用scene-flatten-static- 静的階層構造をフラットン化scene-name-objects- デバッグ用にオブジェクトに名前を付与object-pooling- 作成/破棄ではなくオブジェクトを再利用
9. シェーダー GLSL (MEDIUM)
shader-precision- モバイル用に mediump を使用(約 2 倍高速化)shader-mobile- モバイル固有の最適化(varyings、分岐)shader-avoid-branching- 条件付きを mix/step に置き換えshader-precompute-cpu- CPU で事前計算shader-avoid-discard- discard を避け、alphaTest を使用shader-texture-lod- 既知のミップレベル用に textureLod を使用shader-uniform-arrays- ユニフォーム配列を優先shader-varying-interpolation- varyings をモバイル用に 3 個に制限shader-pack-data- RGBA チャネルにデータをパックshader-chunk-injection- Three.js シェーダー チャンクを使用
10. TSL - Three.js Shading Language (MEDIUM)
tsl-why-use- onBeforeCompile ではなく TSL を使用tsl-setup-webgpu- TSL 用の WebGPU セットアップtsl-complete-reference- 完全な TSL 型システムと関数tsl-material-slots- Material ノード プロパティリファレンスtsl-node-materials- NodeMaterial クラスを使用tsl-basic-operations- 型、操作、スウィズリングtsl-functions- Fn() を使用した TSL 関数作成tsl-conditionals- TSL での If、select、ループtsl-textures- テクスチャとトリプラナー マッピングtsl-noise- 組み込みノイズ関数 (mx_noise_float、mx_fractal_noise)tsl-post-processing- bloom、blur、dof、aotsl-compute-shaders- GPGPU とコンピュート操作tsl-glsl-to-tsl- GLSL から TSL への変換
11. WebGPU レンダラー (MEDIUM)
webgpu-renderer- セットアップ、ブラウザ サポート、マイグレーション ガイドwebgpu-render-async- コンピュート集約的なシーン用に renderAsync を使用webgpu-feature-detection- アダプター機能をチェックwebgpu-instanced-array- GPU 永続バッファwebgpu-storage-textures- 読み取り/書き込みコンピュート テクスチャwebgpu-workgroup-memory- 共有メモリ(10-100 倍高速化)webgpu-indirect-draws- GPU 駆動レンダリング
12. ロード & アセット (MEDIUM)
loading-draco-compression- 大規模メッシュ用に Draco を使用loading-gltf-preferred- glTF フォーマットを使用gltf-loading-optimization- DRACO/Meshopt/KTX2 を備えた完全ローダー セットアップloading-progress-feedback- ロード進捗を表示loading-async-await- ロード用に async/await を使用loading-lazy- 非重要なアセットを遅延ロードloading-cache-assets- キャッシングを有効化loading-dispose-unused- 未使用アセットをアンロード
13. Core Web Vitals (MEDIUM-HIGH)
core-web-vitals- 3D 用の LCP、FID、CLS 最適化vitals-lazy-load- IntersectionObserver を使用してフォールド下の 3D を遅延ロードvitals-code-split- Three.js モジュールを動的インポートvitals-preload- リンクタグでクリティカル アセットをプリロードvitals-progressive-loading- 低解像度から高解像度への漸進的ロードvitals-placeholders- ロード中にプレースホルダー ジオメトリを表示vitals-web-workers- 高コスト処理をワーカーに オフロードvitals-streaming- チャンクごとに大規模シーンをストリーミング
14. カメラ & コントロール (LOW-MEDIUM)
camera-near-far- タイトな near/far プレーンを設定camera-fov- 適切な FOV を選択camera-controls-damping- スムーズなコントロール用にダンピングを使用camera-resize-handler- リサイズを適切に処理camera-orbit-limits- オービット コントロール制限を設定
15. アニメーション (MEDIUM)
animation-system- AnimationMixer、ブレンディング、モーフ ターゲット、骨格アニメーション
16. 物理演算 (MEDIUM)
physics-integration- Rapier、Cannon-es 統合パターンphysics-compute-shaders- コンピュート シェーダーで GPU 物理演算
17. WebXR (MEDIUM)
webxr-setup- VR/AR ボタン、コントローラー、ヒット テスト
18. オーディオ (LOW-MEDIUM)
audio-spatial- PositionalAudio、HRTF、空間オーディオ
19. ポストプロセッシング (MEDIUM)
postprocessing-optimization- pmndrs/postprocessing ガイドpostpro-renderer-config- ポスト処理用に AA、ステンシル、デプスを無効化postpro-merge-effects- 単一パスで複数のエフェクトを結合postpro-selective-bloom- パフォーマンス用に選択的ブルームpostpro-resolution-scaling- FPS 向上用に半解像度にスケールpostpro-webgpu-native- WebGPU 用 TSL ベース ポスト処理
20. 最適化 (HIGH)
mobile-optimization- モバイル固有の最適化とチェックリストraycasting-optimization- BVH、レイヤー、GPU ピッキング
21. プロダクション (HIGH)
error-handling-recovery- WebGL コンテキスト喪失と復旧migration-checklist- バージョン別の重大な変更
22. デバッグ & DevTools (LOW)
debug-devtools- 完全なデバッグ ツールキットdebug-stats-gl- WebGL/WebGPU 監視用 stats-gldebug-lil-gui- ライブ パラメータ調整用 lil-guidebug-spector- WebGL フレーム キャプチャ用 Spector.jsdebug-renderer-info- ドローコールとメモリを監視debug-three-mesh-bvh- BVH を使用した高速レイキャストdebug-context-lost- WebGL コンテキスト喪失を処理debug-animation-loop-profiling- レンダーループ セクションをプロファイルdebug-conditional- プロダクションでデバッグコードを削除
使用方法
個別のルール ファイルで詳細な説明とコード例を参照してください:
rules/setup-use-import-maps.md
rules/memory-dispose-geometry.md
rules/tsl-complete-reference.md
rules/mobile-optimization.md
各ルール ファイルには以下が含まれています:
- なぜそれが重要かの簡潔な説明
- 説明付きの BAD コード例
- 説明付きの GOOD コード例
- 追加のコンテキストと参考資料
キーパターン
モダン Import Maps
<script type="importmap">
{
"imports": {
"three": "https://cdn.jsdelivr.net/npm/three@0.182.0/build/three.module.js",
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.182.0/examples/jsm/",
"three/tsl": "https://cdn.jsdelivr.net/npm/three@0.182.0/build/three.tsl.js"
}
}
</script>
適切な破棄
function disposeObject(obj) {
if (obj.geometry) obj.geometry.dispose();
if (obj.material) {
if (Array.isArray(obj.material)) {
obj.material.forEach(m => m.dispose());
} else {
obj.material.dispose();
}
}
}
TSL 基本的な使用方法
import { texture, uv, color, time, sin } from 'three/tsl';
const material = new THREE.MeshStandardNodeMaterial();
material.colorNode = texture(map).mul(color(0xff0000));
material.colorNode = color(0x00ff00).mul(sin(time).mul(0.5).add(0.5));
モバイル検出
const isMobile = /Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
renderer.setPixelRatio(Math.min(window.devicePixelRatio, isMobile ? 1.5 : 2));
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- emalorenzo
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/emalorenzo/three-agent-skills / ライセンス: MIT
関連スキル
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
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。