threejs-spectral-ocean について
threejs-spectral-oceanは、Three.jsで確率的な方向性の海面を構築するスキルです。スペクトルFFTの決定論的なカスケード、統合された変位面、数値・GPU検証を扱い、沿岸機能や光学機能の範囲も明確にします。
主な機能
- 01表現方式と有効範囲の選択
- 02決定論的なスペクトルFFTカスケード
- 03変位ジオメトリと法線の統合
- 04泡・CPUクエリ・沿岸連携の選択機能
- 05変換、精度、GPUライフサイクルの検証
活用シーン
- 01広帯域の確率的な方向性海面の作成
- 02波の変換とジオメトリ精度の確認
- 03沿岸モデルへの沖合波浪入力
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ linegel/ threejs-complete-set-of-skill --skill threejs-spectral-oceanインストール後、Claude Code で/threejs-spectral-oceanを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEagents/openai.yamlreferences/spectral-cascade-ocean-system.mdscripts/fft-convention-oracle.mjs詳細
スペクトルオーシャン
方向分散密度から、次元量を持つランダムな海を生成し、変位と陰影を適用した一枚のサーフェスにします。スペクトル領域は、水深と分散関係がカスケードごとに 1 つずつ定義された、水平一様な周期領域です。
1. 表現を選定する
望ましい見た目ではなく、必要な観測量に基づいて選択します。
| 観測量 | 担当 |
|---|---|
| 少数の手作りモード、または正確で低コストな CPU クエリ | $threejs-water-optics のパラメトリック波 |
| 有界の擾乱、または明示的な壁 | $threejs-water-optics の有界ハイトフィールド |
| 広範囲にわたる確率的な方向性のある海 | このスペクトル FFT スキル |
| 水深に応じた屈折、回折、砕波、遡上、または乾湿フロント | $threejs-water-optics の沿岸ブランチ。このスキルは沖合の外力を供給できます |
| 転倒、巻き込まれた空気、噴流、または三次元渦 | 外部自由表面ソルバー |
表示される波長帯域に十分な数の独立モードが含まれ、直接加算がより高コストになるか、目に見えて反復的になる場合にのみ、FFT カスケードを選択します。表示波長の範囲、フットプリント、許容する位相/勾配誤差、周期的な反復距離、相互作用の要件、実測したメモリ予算を記録します。
完了条件: 必要な水の観測量すべてに担当する行があり、採用しない各行について妥当性またはコスト上の理由が明記されていること。
2. スペクトル規約を固定する
メートル、秒、ラジアン毎メートル、ラジアン毎秒を使用します。次の項目を宣言してください。
- 安定した水平物理座標系と水面基準面
- カスケードごとのパッチ長、解像度、
Delta k、表現する半径方向帯域、ガードバンド - 逆変換の符号、正規化、中心化インデックス補正
- 重力、平均水深、表面張力、密度、一様流
- スペクトルの種類、方向の規約、シード、カスケードのパワーウィンドウ
- 係数/状態に使う単一のクロックと、レンダリングサーフェスの単一の所有者
必要な逆変換の規約は次のとおりです。
f[j] = sum_n F[n] exp(+i 2 pi n dot j / N).
正規化された逆変換を使用する実装では、後から海を調整するのではなく、係数の初期化時にスケーリングしてください。流れは水の速度およびドップラー項として別個に扱います。大気中の風が水の流れになることはありません。
風波では、サンプリングした風ベクトル、基準高度、平均化ウィンドウとフットプリント、プロファイル/抗力の較正、安定度の扱い、吹送距離、外力の継続時間または波齢、方向分布モデル、表現する発生項を記録します。統計状態は連続的に目標値へ移行させ、突風は飛沫に影響させても、発達した波を再シードしてはいけません。
この規約を固定する際は、環境外力、波数ベクトルと変換規約、分散関係と次元付きスペクトルの参照セクションのみを読み込んでください。
完了条件: すべての係数とクロックの単位が一意に定まり、初期化と検証で同じ変換規約が使われ、1 つの外力スナップショットを再生すると同じ係数と位相が再現されること。
3. 検証可能なカスケードを構築する
カスケードのパワーと決定論的係数、
変位スペクトルと微分スペクトル、
パッキングと逆 FFT、
変換ゲートのリファレンスセクションを読み込みます。
変換を実装または変更する際は、
FFT 規約オラクルをインポートまたは適用します。
すべての makeConventionFixtures() スペクトルを実装に通し、
その measureTransform() メトリクスと呼び出し側で宣言したゲートを
applyTolerances() に渡してから、本番スペクトルを読み込みます。CPU オラクルは
サイズ 8/16/32 に意図的に限定されており、無効な数値入力と空のゲートを拒否し、
ゼロ基準の相対誤差を明示的に報告します。これは本番 FFT の上限ではありません。
方向別の角周波数分散密度 S_omega については、
P(k_x,k_z) = S_omega(omega(k),theta) |d omega/dk| / |k|,
[P] = m^4.
離散係数の分散には Delta k_x Delta k_z を含めます。パワーウィンドウは、
表現対象の帯域において sum_c w_c(k)=1 を満たします。滑らかな重なりでは、
振幅に sqrt(w_c) を使用します。法線は同じ物理グリッド上で
(seed,cascade,signed_mode_x,signed_mode_z) から生成し、中心化ストレージのシフトによって
残存モードのシードが変わらないようにします。
固有のエルミート対を時間発展させ、一様流による移流を共通位相として適用します。 その 2 つの静止チャート周波数は異なるため、クエリの速度範囲には両方を含めます。 微分は波数空間で構成し、 その後、高さ、水平変位、傾斜、および変位微分を変換します。除算の前に、 DC セルと自己共役なナイキストセルを明示的に処理します。
**完了条件:**方向別の正規化、パワーウィンドウの合計、目標分散と実現分散、 係数の決定性、エルミート共役パートナー誤差、DC、両方の軸ビン、斜めのビン、 共役対、すべてのナイキスト・パリティケース、CPU-DFT 誤差、パーセバル誤差、 および逆 FFT 後の虚数成分の漏れが、宣言したゲートをすべて通過すること。
4. 1 つの厳密な水面を組み立てる
複合接線、速度、サンプリング、および折り返しの規則については、 厳密な変位ジオメトリのみを読み込みます。
非線形ジオメトリの計算前に、すべてのカスケードフィールドを合計します。
P(q) = (q_x + chi D_x, h, q_z + chi D_z),
合計した変位から両方のパラメトリック接線を導出し、法線を
normalize(cross(P_qz,P_qx)) に設定します。混合微分を含む完全な水平ヤコビアンを
計算します。これらの簡潔な式は chi が一定の場合に成り立ちます。
空間または時間による変化がある場合は、積の微分則に基づく項を追加します。
行列式が 0 以下であることは折り返しを意味し、法線マップの欠陥ではありません。
本番用のガードバンドではナイキスト線を除外します。パリティのみを確認する変換
フィクスチャでは、解像されたジオメトリの検証にはなりません。
1 モード基準を使って chi の符号を選びます。正の逆変換規約では、
h=a cos(kx) に対して正のシャンピーさが
X=x-chi a sin(kx) を生み、波頂を圧縮する必要があります。
ジオメトリでは、表現された変位帯域を解像できる必要があります。そのフットプリントで 解像できないモードはフィルタリングまたは省略し、それらが高さ/傾斜に与える寄与を 報告します。表示されるすべての位置は、1 つのメッシュ/マテリアルが所有します。
**完了条件:**1 モードの伝播と変位の符号が正しいこと、解析的な接線と法線が 有限差分と一致すること、合成分散と最小ヤコビアンを測定すること、折り返しを数えること、 位置、法線、速度、泡、および時間的な利用側が同じ不変の状態ペアを読み取ること。
5. 表現されるオプションの状態のみを追加する
Foam
foam を有効にした場合は、 foam セクションのみを読み込みます。
複合カスケードの圧縮、ヤコビアンの時間発展、曲率、または較正済みの砕波プロキシから 1 つのソースを構築し、1 つの有界な履歴を時間発展させます。ラグランジュパラメーターの保存、オイラー移流、または保存的な密度輸送を宣言します。ソース、輸送、反応、拡散、表示範囲は、それぞれ個別に検査できる状態にします。
Queries
CPU クエリを有効にした場合は、 CPU queries セクションのみを読み込みます。
決定論的な係数のサブセットを CPU 上に保持します。パラメーター座標でのサンプリングと、物理水平座標でのサンプリングを分けて公開します。波形勾配を考慮したオイラークエリでは X(q)=x を反転します。省略モードの誤差上限、反転残差、数値誤差、GPU プローブとの差異は、それぞれ分けて扱います。フレーム処理では、同期的なマップ読み戻しを行いません。
Optics
$threejs-water-optics がインストールされ、利用可能な場合は、フレネル、屈折、Beer-Lambert、受光面のコースティクスの規則に対してこれを呼び出します。これにより、表面形状、導関数、foam、光学処理が 1 つの原因と最終出力変換を共有します。利用できない場合は missing optics owner と報告し、この実装およびその主張の範囲から光学処理を除外します。
完了条件: 有効な各オプションに所有者、有効期間、サポート/フィルター、リセット規則、失敗時の診断があること。無効なオプションは状態を割り当てず、何も主張しないこと。
6. 必要な場合にのみ沿岸系を結合する
海が深さによって変化する所有者、または湿潤/乾燥を扱う所有者にデータを供給する場合は、
coastal donor セクションと、位相解決、位相平均、所有権の各サブセクションのみを読み込みます。どちらかのソルバーを実行する前に、スペクトルのドナー、沿岸のコンシューマー、強制力、反応、レンダーサーフェス、foam の各所有者を記録します。また、SI 単位、共通の物理フレーム/原点と水位基準、クロック、サンプル時刻または転送区間、更新頻度とサンプル位相、帯域サポート、フィルターと求積、有効性、古さと誤差、ドナー/受信側の状態とリソースのバージョンも記録します。大気の強制力、平均流、波の転送、沿岸の反応は別々の信号として扱います。クロックの不連続、リベース、互換性のないバージョン、表現の変更、または所有権の変更の後は、依存する境界、クエリ、foam、形状、時間状態をリセットします。合成後の経路でも観測可能な各要素に所有者が 1 つずつない場合は $threejs-choose-skills を呼び出します。
次のいずれか 1 つを選択します。
- 位相解決: 共通の位相、固有周波数、サンプル時刻、帯域 ID、誤差とともに、標高と深さ積分流量を転送します。入射特性のみを指定し、沿岸側の出射特性は保持します。
- 位相平均: 次元を持つ波作用量/エネルギー、固有周波数、群速度、流れ、方向、求積、帯域 ID を転送します。受信側がローカル表示の位相を別途管理します。
FFT は沖合のドナーのままです。水深を材質内でサンプリングしても、屈折、回折、砕波、遡上、湿潤/乾燥の所有権は与えられません。コヒーレントなドナー/受信側のコピーでは、1 つの空間レンダー所有者を使います。パワーウィンドウは、独立した帯域または直交する帯域にのみ適用します。
完了条件: プロデューサー、コンシューマー、区間、サンプル位相、単位、サポート、フィルター、有効性、古さ、誤差、状態バージョン、反射の範囲、レンダー/foam の所有権が明示されていること。単一モードの法線入射および斜入射テストで、位相、標高、流量または波作用量、透過パワー、反射が整合すること。
7. GPU パスを統合して検証する
バックエンド、リソース、ディスパッチ、精度、ライフサイクルの要件については、WebGPU とパフォーマンスのみを読み込んでください。
WebGPURenderer を初期化してから、そのバックエンドや制限を確認してください。StorageTexture データには NoColorSpace と明示的な精度を使用してください。グローバルなプロデューサー/コンシューマー間の依存関係は、ディスパッチ境界をまたぎます。変換の正確性、初期化済みのデバイス制限、占有率、トラフィック、継続的なタイミング計測に基づいて、検証済みのグローバル・ピンポン FFT(Stockham 自動ソートまたは明示的なビット反転を行う radix-2)、あるいはワークグループ内に保持する行を選択してください。
単一の RenderPipeline と単一の出力変換でレンダリングしてください。レンダリングリースが係数、解決済みマップ、フォーム、クエリ、プレゼンテーションの各世代を使用している間、それらを不変に保ってください。サイズ変更、シード、スペクトル、ケイデンス、表現、または原点の変更時には、互換性のある状態を移行するか、依存する履歴をすべてリセットしてください。
各対象について、実際の割り当て、ピーク時の生存バイト数、ディスパッチ数、精度比較、ウォームアップ後の継続的なタイミング計測、およびカメラを固定した最終/フォームなし/詳細なし/ポスト処理なしのキャプチャを報告してください。
完了条件: 初期化済みのバックエンドと選択した制限が記録されていること、上記の数値ゲートをすべて通過すること、フレームのクリティカルパスに読み戻しがないこと、ライフサイクルの再構築/破棄後に割り当て量が一定になること、最終画像にサーフェスの所有者と出力変換がそれぞれ 1 つだけあること。