風の設定

概要


風の発生機能を利用することでクロスシミュレーションに風を与え、よりリアルに描写することができます。
これは風を発生させる範囲を指定するMagicaWindZoneコンポーネントをシーンに配置することにより制御します。
また、MagicaClothコンポーネントも[Wind]パネルの設定を調整することで受ける風の影響を変化させることが可能です。

サンプルシーン


風の機能についてはサンプルシーンが用意されています。
これらは次のフォルダにありテストする場合はお使いのレンダーパイプラインのシーンを選択して下さい。

このサンプルシーンにあるWindDemoにアタッチされているWindDemo.csがテストコードとなっています。
なお、シーンがパイプラインごとに分かれている理由は単に描画マテリアルの切り替えのためです。
内部に含まれるサンプルコードは同一です。

風ゾーンの設定


風を発生させるにはシーンにその範囲を指定する必要があります。
これにはMagicaWindZoneコンポーネントを利用します。
Unityには同じくWindZoneコンポーネントがありますがMagicaClothには影響しないので注意してください。
MagicaClothに風を与える場合は専用のMagicaWindZoneコンポーネントが必要です。

コンポーネントは次のように右クリックメニューから追加できます。

風ゾーンは[Mode]により幾つかの種類に分かれます。

Modeごとに設定項目が異なるため、次にこれらの種類について解説します。

Global Direction

シーン全体に対して影響する方向性の風です。
範囲はありません。

Main 風速(m/s)
Turbulence 乱流率
Direction Angle X 風の方向X角度(Deg)
Direction Angle Y 風の方向Y角度(Deg)
Is Addition 加算風フラグ

Sphere Direction

球形の領域に対して影響する方向性の風です。

Radius 半径
Main 風速(m/s)
Turbulence 乱流率
Direction Angle X 風の方向X角度(Deg)
Direction Angle Y 風の方向Y角度(Deg)
Is Addition 加算風フラグ

Box Direction

箱型の領域に対して影響する方向性の風です。

Box Size 範囲XYZサイズ
Main 風速(m/s)
Turbulence 乱流率
Direction Angle X 風の方向X角度(Deg)
Direction Angle Y 風の方向Y角度(Deg)
Is Addition 加算風フラグ

Sphere Radial

球形の領域に対して影響する放射性の風です。
放射風は領域の中心から外側に向けて風が発生します。
そのため方向の指定がありません。
また中心から外側に向けて[Attenuation]により風力の減衰カーブを指定することが可能です。

Radius 範囲半径
Main 風速(m/s)
Turbulence 乱流率
Attenuation 減衰カーブ
Is Addition 加算風フラグ

風ゾーンの優先順位

クロスコンポーネントに複数の風ゾーンが重なった場合はもっとも体積の少ないゾーン1つのみが有効になります。
ただしGlobalDirectionゾーンのみは例外として体積∞として扱われ優先順位が最も低くなります。
この優先順位は後述する[IsAddition]フラグをOnにした場合は除外されます。

IsAdditionフラグ

[IsAddition]フラグをOnにすると、その風ゾーンは加算型として処理されます。
加算型では風ゾーンの優先順位処理を無視して、複数同時に影響させることが可能です。
この場合の風は切り替えではなく風力が加算されるようになります。
ただし、1つのクロスコンポーネントに対して適用できる加算風は3つまでです。

MagicaClothの設定


風の影響はクロスコンポーネントごとにも調整できます。
これには[Wind]パネルを使用します。

Influence 風全体の影響率です。
下げることで受ける風を全体的に弱めることが可能です。
値は1.0(100%)以上にも設定できます。
Frequency 揺れの周期。
揺れの波形の速度を調整できます。
値は1.0(100%)以上にも設定できます。
Turbulence 乱流率。
揺れの乱れの大きさを調整できます。
値は1.0(100%)以上にも設定できます。
Noise Blend 波形のブレンド率。
Sin波形とNoise波形のブレンド率を調整できます。
Sin波とNoise波については後述します。
Synchronization 同期率。
クロス内の各ベースラインがどの程度同期して動くかを調整できます。
1.0にすると同じ動きになり、0.0にするとバラバラに動くようになります。
Depth Weight 深さ影響。
値を上げることで始点付近の頂点があまり風の影響を受けなくなります。
これはスカートや前髪などを安定させるのに便利です。
Moving Wind 移動風影響。
クロスの移動に対して自動的に風を発生させることが可能です。
値を大きくするほど移動時の風影響が強くなります。

Sin波とNoise波

風の揺らぎにはSin波形とNoise波形の2つが利用されています。
Sin波形は周期が一定しており日本アニメのワンシーンのような動きを作ることができます。
ただしその代わりにランダム性がなくなります。

Noise波形は周期が不規則でより自然で現実的な動きをつくることができます。

この2つの波形は[Noise Blend]により混合させることが可能です。

移動風

[Moving Wind]パラメータを上げることで、キャラクターの移動に合わせて自動的に風を発生させることができます。

移動風の風力は慣性パラメータの影響を受けます。
つまり、慣性パラメータにより移動影響を抑えている場合はその分移動風の影響も下がります。

調整のヒント


  • 風ゾーンの風速は30m/sまで設定できますが、あまりに強い風力は衝突判定時にトンネリング問題を引き起こす可能性が高いため注意してください。
  • 特定のクロスコンポーネントの風影響を減らしたい場合はInfluenceを調整してみてください
  • スカートなどで腰付近をあまり揺らしたくない場合はDepthWeightを上げてみてください。
  • 髪の毛などをバラバラに揺らしたい場合はSynchronizationを下げてみてください。
  • 揺れのランダム性を調整する場合はNoiseBlend以外にもSynchronaizationも色々と調整してみてください。
  • 移動風は慣性パラメータの削減影響を受けます
  • 爆風などはSphereRadialにIsAdditionフラグをOnにして一定時間発生させるのが効果的です。