By Nick Seavert(著:Nick Seavert) Time To Read: ~15 Minutes(読む時間: 約15分) Last Updated: Friday, February 6th, 2026(最終更新:2026年2月6日(金))
IlluGen 事例イメージ画像
以下の例と図はすべて、IlluGen のプロジェクトファイルで確認できます:
Download Here(ダウンロードはこちら)

Introduction(はじめに)

Curl noise(カールノイズ)は、実際に流体シミュレーションを作る手間をかけずに、流体のようなテクスチャやパターンを生成できる便利なツールです。VFX 向けにユニークなアセットを作るうえで役立つ場面は多く、この記事の後半では私が行ったいくつかの実験も紹介します。
Curl noise は、Perlin noise のようなベースとなるグレースケール入力に対して、「任意の点における 2D ベクトルの回転(カール)成分」を求める数学的操作によって得られます。Ryan Smith は Overdraw の記事の中で次のように述べています:
…これにより、ベクトルが斜面に沿って動くのではなく、斜面の周りに回り込む(curl AROUND)ベクトル場が作られます。だから Curlと呼ばれるのです。
こうして得られた curl noise は、ほかのテクスチャ入力を歪ませる(distort)ために利用できます。また、これらのフィールドは時間でアニメーションさせたり、ブレンドして重ねたりすることで、層状のディテールを持たせることもできます。curl noise の重要なポイントのひとつは non-divergent(非発散) であることです。これは、フィールドに入ってくる量と出ていく量が同じになり、中身(量)が増減しないことを意味します。
Divergence(発散) とは、ある点(またはその周辺)における局所的な 膨張(正の発散)/収縮(負の発散)の度合いを表す尺度で、Fig. 1 のように可視化できます。
この記事では、divergence(発散)あり/なし両方の curl noise を扱います。というのも、適度な divergence を含めたほうが、よりアーティスティックで自然な結果につながる場合があるからです。
IlluGen の divergence(発散)と curl(回転)の可視化例
図1:IlluGen を使えば、divergence(発散)と curl(回転)を簡単に可視化できます。

Let’s Start By Generating Curl Noise in IlluGen
(IlluGen で Curl Noise を作ってみよう)

Substance Designer のようなツールでは、法線マップ入力を使ってテクスチャをワープできます。しかし IlluGen では、ワープ操作に UV テクスチャ座標を使います。Fig. 2 では、Grid テクスチャを Directional Blur に入れ、これを歪ませる元画像にしています。このケースでは、Directional Blur ノードは Substance Designer の Vector Morph ノードのような働きをします。Directional Blur ノードの設定は Warp Intensity 50%、サンプル分布は forward only です。

curl noise フィールドを作るために、ここでは入力として(例として)4 オクターブの Perlin ノイズを使い、そのハイトマップから UV を導出します。ですが、それだけでは斜面をたどる方向のベクトルしか得られません。そこで UV from Derivative ノードの rotation パラメータを使ってベクトルを回転させます。ここでは 90° 回します。

次に、ノイズを divergence-free(非発散)にするために Levels ノードで Noise 入力を反転します。これはノード内の リマップカーブを反転(上下をひっくり返す)することで行えます。

反転したノイズは intensity mod ピンに接続します。こうするのは、curl を正確に計算するには、歪み(distortion)の強度を、その地点にある curl の量に対応づける必要があるためです。intensity mod ピンは、intensity 入力ボックス内の サイン波アイコンをクリックすると表示(露出)できます。

この UV を Directional Blur に挿すと Fig. 3 のようになります。おめでとう!これで curl noise を作れました。
発散(divergence)を含まないノイズ作成のノード例
図2:発散(divergence)を含まないノイズの作成
生成された curl noise テクスチャ
図3:生成された curl noise テクスチャ(いい感じ!)

Insight #1 – Blurry inputs are better for generating curl & swirls
(気づき #1:ぼけた入力のほうが curl と渦が出やすい)

Fig. 4 では、curl を生成する元ノイズが、オクターブ数を増やしながら段階的に変化していくアニメーション例を示しています。ノイズのオクターブ数、スケール、ガウシアンブラーの適用などは、最終結果に大きく影響します。私の経験では、入力がぼけたテクスチャのほうが、curl が扱える勾配の変化が増え、より良い渦が生まれやすいと感じています。

Fig. 5 では、ノイズを時間でスケール変化させています。これは追加オクターブを増やすのに近い働きをします。オクターブとスケールをバランスさせることで、自分にとってちょうど良い渦の量とディテール量に調整できます。
図4:curl を導出する元ノイズのオクターブ数を増やしたアニメーション
図5:ノイズをスケールすると、ディテール量がさまざまに変化します。

Insight #2: Use divergence to your advantage
(気づき #2:divergence を味方にする)

上で学んだように、正の発散と負の発散はピクセルを押したり引いたりします。curl noise は通常、UV を 90° 回転させることで divergence-free になりますが、この値からずらすことで正/負の divergence を加えられます。

Fig. 6 では、UV の回転を 60°〜120° でアニメーションさせ、アセット生成に使えそうな回転レンジの目安を示しています。カール方向を反転したい場合は -120°〜-60° を使うとよいでしょう。
図6:UV 回転をアニメーションさせるとテクスチャに divergence が加わり、色が締まる(pinch する)ような変化が生まれます。
別の方法として、よりアーティスティックになり得る divergence の足し方は、UV の強度をモジュレーション(変調)しないことです。これを行うと、厳密には curl noise の定義に忠実ではなくなりますが、Fig. 7 に見られるように、より強い色の変化を作れるようになります。

これは、UV 強度の値を、入力ノイズのグラデーション全体に対して一律に適用しているために起こります。モジュレーションなしの場合は、色の島(island)がはっきり分かれ、エッジが鋭くなる傾向があることに気づくはずです。

一方、モジュレーションをオンのままでも、UV 強度を 100% 以上に上げれば、似たような効果を得られます。
UV回転80度、強度モジュレーションあり/なしの比較
図7:UV 回転 80 度、強度モジュレーションあり/なしの比較

Insight #3: Your color variation is highly dependent upon what you are warping, not just your curl noise input.
(気づき #3:色の変化は curl 入力だけでなく「何を歪ませるか」に強く依存する)

ここで見えているのは curl noise の色そのものではなく、curl noise の速度場(velocity field)で 歪められた画像です。では、いくつか異なるパターンを使うとどうなるかを見てみましょう。

Fig. 8 では、グリッド状に並べた色付きドットをワープしています。Fig. 9 では Voronoi ノイズをワープしています。Fig. 10 ではエッジ検出したノイズパターンをワープしています。これらの図では、ワープ量やノイズスケールは同一ではありません。各ケースで十分に良いと感じる見た目になるまで、値をいろいろ試して決めました。

これらすべての図を含むファイルも用意してあります。同じ curl noise でまとめてワープして比較するのも簡単なので、興味があればぜひ検証してみてください。
中周波の curl で、グリッド状の色ドットをワープ
図8:中周波の curl で、グリッド状の色ドットをワープ
高周波 curl で Voronoi ノイズをワープ
図9:高周波 curl で Voronoi ノイズをワープ
divergence-free な curl で、エッジ検出ノイズをワープ
図10:divergence-free な curl で、エッジ検出ノイズをワープ
次に私は、curl noise の UV を作るためのノイズと、ワープされるパターン側のノイズに まったく同じノイズを使ったらどうなるか?と考えました。完璧な curl であれば Fig. 1 のように、影響を受けたピクセル位置が回転するだけのはずです。Fig. 11 では、この方法によって面白い糸引き/筆致(ブラシストローク)のような効果が見られます。
curl とパターン入力を同一にした場合の見た目比較
図11:curl とパターン入力を同一にすると筆致(ブラシストローク)っぽい見た目になります

Insight #4: Blending methods to achieve more detail or multi-directional curl
(気づき #4:ブレンドでディテール追加/多方向 curl を作る)

ここまでは、とてもシンプルなノードグラフで curl noise を作ってきました。では、追加のブレンド工程を入れて、もっと面白い結果を出すにはどんな方法があるでしょう?

私が最初に考えたのは、最終的に出た curl noise を入力として、もう一度 curl noise を作ったらどうなる?ということです(マルチパス curl)。これは Fig. 12A と Fig. 12B に示しています。アートとしては確かに面白いのですが、この方法は intensity 設定によっては非常にシャープ(硬い)になりやすいです。
curl noise でさらに curl noise を作るノードグラフ
図12A:curl noise でさらに curl noise を作るとどうなる?
curl に curl を注入した結果
図12B:curl に curl を注入した結果
次に私は、時計回りと反時計回りの渦を両方確実に混在させて、もっとバリエーションを増やす方法はないか?と考えました。80 度の UV と -80 度の UV を作り、これら 2 つの curl 計算結果を 減算(subtractive)ブレンドすると、Fig. 13A のように液体っぽい、あるいは木星っぽい結果が得られます。Fig. 13B はノード構成です。

結果は UV blend ノードのピン順(どちらをどちらの入力へ挿すか)でも変わります。どちらが正しいということはないので、必要に応じて順序を入れ替えてください。
双方向の渦。反時計回りと時計回りの渦
図13A:双方向の渦。反時計回りと時計回りの渦を探してみよう!
双方向 curl のセットアップ例
図13B:双方向 curl のセットアップ
さらに私は、curl noise にもオクターブのような概念を持ち込めないか?と考えました。大きな渦が全体を押し動かしつつ、小さく精密な渦がディテールを定義する、というイメージです。

幸いこれは簡単で、グローバルに効く curl と、ローカルに強く効く curl を 2 つ用意します。そして UV blend ノードで ADD(加算)して 2 入力を足し合わせれば実現できます。background / foreground のどちらに入れるかは重要ではありません。Fig. 14A が結果で、Fig. 14B がノードグラフです。
複数オクターブ的な影響を持つ curl の合成イメージ
図14A:複数オクターブ的な影響を持つ curl
multi-octave curl に必要なノードグラフ
図14B:multi-octave curl に必要なノードグラフ

Insight #5: Animation can give you great flipbooks!
(気づき #5:アニメーションで良いフリップブックが作れる)

ここまでは静止テクスチャを扱ってきました。curl noise をアニメーションするフリップブックやアニメーションノイズマップとして使いたい場合、curl を生成する元を Fractal ノードから Fractal ノードへ置き換える必要があります。

その理由は、現時点の IlluGen では、通常の Noise ノードでは 3D ノイズが適切にタイルしないためです。将来的には修正されますが、現状は Fractal ノードを使います。

Fractal ノイズをアニメーションさせるには、Fig. 15 のように 3D noise チェックボックスを有効にします。次に Z position ピンを露出させ、タイムラインでキーフレームするか、モジュレーターで使えるようにノードグラフ側へ出します。例はプロジェクトファイルで確認できるはずです。そこから curl noise が動き出します。

さらに、スクロールするノイズ同士を掛け算したり、マスクや侵食(erosion)をアニメーションさせたり、curl noise をカースティクス(caustics)の屈折に使ったり、といった VFX テクニックを組み合わせることで、ここまで学んだことをベースにユニークな効果を作れるようになります。
Fractal ノイズをアニメーションする方法
図15:Fractal ノイズをアニメーションする方法
図15A:液体っぽいノイズのアニメーション
図15B:イリデッセンス(玉虫色)
図15C:魔法のウィスプ(靄/ひも状表現)
図15D:カースティクスのカール表現

Insight #6: Curl noise usually won’t tile by default in IlluGen (yet)
(気づき #6:IlluGen の curl noise は(現状)デフォルトではタイルしないことが多い)

IlluGen では、Directional Blur ノードのバグにより curl noise がタイルしません。これは 2026年2月6日(時点)で、次回アップデートで修正される予定です。

現状の回避策として、curl noise テクスチャを作った後に Tile ノードへ通し、Mirror wrap(Fig. 16)、Voronoi sampling、または Scale wrap のいずれかを選びます。どれも本当の意味でのタイルほど良くはありませんが、多くの場合はいずれかの方法で継ぎ目をかなり隠せます。
Mirror wrap を使って curl noise をタイルする
図16:Mirror wrap を使って curl noise をタイルする

IInsight #7: Experiment with custom input shapes beyond just noise
(気づき #7:ノイズ以外のカスタム形状入力も試そう)

これは curl 入力にも当てはまりますが、とくに歪ませたい対象(ディストート元)で効果が大きいです。円を歪ませれば、侵食(erosion)スプラット(splat)向けに、ユニークな煙/液体っぽいマスクを作れます。線形グラデーションを歪ませれば、シャープな渦を作れます。

組み合わせの数や狙える複雑さという意味では、本当に無限の可能性があります。この記事で扱った内容は、IlluGen で実現できるユニークな表現の、まだ表面をかすった程度にすぎません。
ノイズ以外の形状でも実験して、どこまで行けるか試してみよう!
図17:ノイズ以外の形状でも実験して、どこまで行けるか試してみよう!
Files (配布ファイル)
Curl_Tutorial.zip (記事内のプロジェクトファイル一式)
ダウンロード
IlluGen
ゲーム VFX アーティストの制作を強力に支援する新ツール

ゲーム開発向け IlluGen