3d-four-seasons について
シーン、カメラ、操作性を保ちながら、3Dシーンに一貫した四季の変化を加えるスキルです。植生、マテリアル、照明、積雪、動きを季節状態で連動させます。
主な機能
- 01四季のブレンド状態
- 02季節に応じた照明とマテリアル
- 03樹種に応じた植生変化
- 04露出面に応じた積雪
- 05応答性の高い遷移と動きの軽減
活用シーン
- 01判別しやすい季節別シーンの作成
- 02色の累積ずれを抑えた季節切り替え
- 03露出した面への選択的な積雪
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mengto/ skills --skill 3d-four-seasonsインストール後、Claude Code で/3d-four-seasonsを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yamlREFERENCES.md
詳細
3D 四季
四季を通じて、同じ場所だと認識できる状態を保ちます。カメラの状態と操作性を維持しながら、季節ごとに互いに整合する複数の視覚的な手がかりを変化させます。
季節ごとの特徴を設定する
落葉樹、常緑樹、露出した地表、風雨をしのげる場所、照明、空、既存の天候を確認します。プロジェクトに適した樹種と気候を選びます。次の表は、温帯のシーンを想定した出発点です。
| 季節 | 葉と地面 | 光と大気 | 動き |
|---|---|---|---|
| 春 | 若葉;適した樹種には花 | 柔らかく暖かな日光;穏やかな霞 | まばらな花びらや若葉 |
| 夏 | 濃く茂った緑;地面を覆う豊かな植生 | 強い日光;陰の緑も見分けられる明るさ | 控えめな葉の舞いとそよ風 |
| 秋 | 樹種に応じた琥珀色、赤、茶色の葉;落ち葉 | 低い位置から差す暖かな日差し;金色の霞 | より多く舞い落ちる葉 |
| 冬 | 葉を落とした落葉樹の枝;葉を保つ常緑樹;露出した雪 | 空からの冷たい光;淡い日差し;暖かな室内の光 | 必要に応じてまばらな雪;葉の舞いはほとんどなし |
パーティクルエフェクトは、シーンに役立つ場合にのみ選びます。季節を切り替えるだけなら、嵐や完全な天候シミュレーターは必要ありません。
ひとつの状態を共有する
[spring, summer, fall, winter] の順に並ぶ4要素のブレンドを使います。autumn は fall の別名として受け入れ、内部ではひとつのキーに正規化します。各ウェイトは0以上で、合計が1になるようにします。
const presets = {
spring: [1, 0, 0, 0], summer: [0, 1, 0, 0],
fall: [0, 0, 1, 0], winter: [0, 0, 0, 1],
};
const weights = [0, 1, 0, 0];
let target = presets.summer;
function setSeason(name) {
const key = name === 'autumn' ? 'fall' : name;
if (!Object.hasOwn(presets, key)) return false;
target = presets[key];
return true;
}
function stepSeason(dt, reducedMotion = false) {
const a = reducedMotion ? 1 : 1 - Math.exp(-1.4 * Math.min(Math.max(dt, 0), 0.05));
for (let i = 0; i < 4; i++) weights[i] += (target[i] - weights[i]) * a;
}
同じ状態を、マテリアルのユニフォーム、空、太陽光とフィルライト、パーティクル密度、必要に応じて環境音に反映します。新しい季節が選択されたら、別のアニメーションをキューに追加したり夏にリセットしたりせず、現在のブレンドの遷移先を切り替えます。それぞれの結果は、設定済みのベース値とウェイトから求めます。前フレームの色に繰り返し色味を重ねると、色がずれていきます。
葉と雪を自然に変化させる
樹種ごとのカラーパレットと、インスタンスごとに固定されたIDを使用します。冬には、決定論的なしきい値またはディザリングを使って、落葉樹の葉を徐々に減らします。常緑樹の葉は維持します。葉がなくなった場所には夏の影が落ちないよう、シャドウ/深度用マテリアルにも対応する表示ルールと風のルールを適用します。
低コストで積雪を表現するには、冬のウェイトを上向きのワールド空間の幾何法線と露出マスクに組み合わせます。
snow = winterWeight * smoothstep(0.3, 0.85, worldNormal.y) * exposure
淡く粗い雪のマテリアルへブレンドします。上向きの法線だけを使うと、風雨をしのげるテーブルや屋内の床まで白くなります。露出しているオブジェクトにタグを付けるか、風雨をしのげる場所を示すマスクを用意してください。マテリアルのオーバーレイでは厚みは増えず、シルエットも変わりません。奥行きが重要になるクローズアップの縁に限り、選択的に雪の覆いをジオメトリとして追加します。シーンで積雪と融雪を表現する場合は、降雪の強度と積雪範囲を別々に保ちます。
遷移の応答性を保つ
パーティクルプールを事前に確保し、マテリアルとジオメトリを再利用します。シェーダーを再コンパイルしたりワールドを再構築したりせず、ユニフォームを変更します。シェーダーを拡張する際は既存のマテリアルフックを維持し、安定したプログラムキャッシュキーを使います。古い挿入ポイントが存在すると仮定せず、インストールされているレンダラーのシェーダーチャンクに合わせてください。
季節は時刻や天候から独立させます。それらの入力から最終的なライティング状態を一度だけ導出し、複数のコントローラーが同じ太陽光や霧の値を上書きしないようにします。高負荷の環境マップは、制御された状態変化時に更新し、可能な場合はキャッシュします。
キーボードで操作できるコントロールを用意し、選択中の状態を視覚的に示すとともに、アクセシブルなラベルを更新します。視差効果を減らす設定が有効な場合は、選択した季節の見た目を即座に適用し、整った静止シーンを維持します。非表示の間は継続的なアニメーションを一時停止します。
検証
同じカメラから四季すべてを撮影します。ラベルなしでも、それぞれの季節が認識できる必要があります。春 → 冬 → 夏 → 秋と素早く切り替えて遷移させ、色のずれ、古い影、メモリ割り当ての急増、カメラ操作の喪失がないか確認します。屋内外での雪の露出、常緑樹の維持、パーティクル数、デスクトップとモバイルでのレンダリングを検証します。
REFERENCES.mdをお読みください。Seijaku は、共有された uSeason の重み、setSeason、snowInject、葉の間引き、季節に応じた光の色合い調整を実演します。完全な降雪物理シミュレーションと気候シミュレーションは拡張機能であり、この実装の機能として主張されているものではありません。