webgpu-threejs-tsl について
Three.js と WebGPU を使う開発者向けのスキル資料です。TSL の概念を解説し、マテリアル、コンピュートシェーダー、ポストプロセスの例やテンプレートを収録しています。
主な機能
- 01TSL ノードシェーダーの解説
- 02ノードマテリアルと計算シェーダーの例
- 03ポストプロセスと WGSL のガイド
- 04WebGPU と計算シェーダーのテンプレート
- 05デバイス喪失と制限のリファレンス
活用シーン
- 01Three.js の WebGPU プロジェクトの構築
- 02TSL によるカスタムマテリアルの作成
- 03GPU 計算によるパーティクル効果の実装
- 04GLSL から TSL への移行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dgreenheck/ webgpu-claude-skill --skill webgpu-threejs-tslインストール後、Claude Code で/webgpu-threejs-tslを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
REFERENCE.mddocs/compute-shaders.mdcore-concepts.mddevice-loss.mdlimits-and-features.mdmaterials.mdpost-processing.mdwgsl-integration.mdexamples/basic-setup.jscustom-material.jsearth-shader.jsparticle-system.jspost-processing.jstemplates/compute-shader.jswebgpu-project.js詳細
TSL を使った WebGPU Three.js
TSL(Three.js Shading Language)は、GLSL/WGSL の文字列ではなく、JavaScript で GPU シェーダーを記述できるノードベースのシェーダー抽象化です。
クイックスタート
import * as THREE from 'three/webgpu';
import { color, time, oscSine } from 'three/tsl';
const renderer = new THREE.WebGPURenderer();
await renderer.init();
const material = new THREE.MeshStandardNodeMaterial();
material.colorNode = color(0xff0000).mul(oscSine(time));
スキルの内容
ドキュメント
docs/core-concepts.md- 型、演算子、ユニフォーム、制御フローdocs/materials.md- ノードマテリアルとすべてのプロパティdocs/compute-shaders.md- インスタンス化配列を使った GPU コンピュートdocs/post-processing.md- 組み込みエフェクトとカスタムエフェクトdocs/wgsl-integration.md- カスタム WGSL 関数docs/device-loss.md- GPU デバイスの消失と復旧への対応docs/limits-and-features.md- WebGPU デバイスの制限とオプション機能
例
examples/basic-setup.js- 最小構成の WebGPU プロジェクトexamples/custom-material.js- カスタムシェーダーマテリアルexamples/particle-system.js- GPU コンピュートによるパーティクルexamples/post-processing.js- エフェクトパイプラインexamples/earth-shader.js- 大気を含む地球全体
テンプレート
templates/webgpu-project.js- プロジェクトのスターターテンプレートtemplates/compute-shader.js- コンピュートシェーダーのテンプレート
リファレンス
REFERENCE.md- クイックリファレンスチートシート
主な概念
インポートパターン
// Always use the WebGPU entry point
import * as THREE from 'three/webgpu';
import { /* TSL functions */ } from 'three/tsl';
ノードマテリアル
標準マテリアルのプロパティを TSL ノードに置き換えます。
material.colorNode = texture(map); // instead of material.map
material.roughnessNode = float(0.5); // instead of material.roughness
material.positionNode = displaced; // vertex displacement
メソッドチェーン
TSL では、操作にメソッドチェーンを使用します。
// Instead of: sin(time * 2.0 + offset) * 0.5 + 0.5
time.mul(2.0).add(offset).sin().mul(0.5).add(0.5)
カスタム関数
再利用可能なシェーダーロジックには Fn() を使用します。
const fresnel = Fn(([power = 2.0]) => {
const nDotV = normalWorld.dot(viewDir).saturate();
return float(1.0).sub(nDotV).pow(power);
});
このスキルを使用する場面
- WebGPU レンダラーを使って Three.js をセットアップする
- TSL でカスタムシェーダーマテリアルを作成する
- GPU コンピュートシェーダーを記述する
- ポストプロセスのパイプラインを構築する
- GLSL から TSL に移行する
- パーティクル、水、地形などの視覚効果を実装する
リソース
- Three.js TSL Wiki
- WebGPU の例(
webgpu_が先頭に付くファイル)
コメント
Markdown 対応