Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Flow Fields, Painting with Math

2025年09月27日に「Dev.to」が公開したITニュース「Flow Fields, Painting with Math」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Flow Fieldsは、コンピューターグラフィックスなどで利用される線の描画技術だ。グリッド上に配置された「方向」データ(ベクトル)に従って線を引き、滑らかな曲線や多様なパターンを生み出す。Web背景や画像生成など、様々なクリエイティブな表現に応用できる。

出典: Flow Fields, Painting with Math | Dev.to公開日:

ITニュース解説

フローフィールドは、コンピュータグラフィックス、ジェネレーティブアート、流体力学などの分野で活用される、線を数学的に描画する興味深い概念である。これは、視覚的に魅力的で動きのあるパターンを生成し、ウェブサイトの背景やデジタルアート作品、あるいは流体の動きをシミュレートする際にも利用される。

フローフィールドの基本的な考え方は、空間全体に多数の「ベクトル」が配置された「場の情報」を使って線を引くというものだ。ベクトルとは、方向と大きさを持つ矢印のようなもので、このベクトルの場の中に線を描き始めると、線はその下にあるベクトルの方向に沿って押し動かされ、結果として滑らかな曲線が生成される。このプロセスを繰り返すことで、ベクトルの場の形状や流れを反映した、流れるような曲線パターンが完成する。ベクトルの場を構成するプログラム、曲線の描画方法、あるいは色付けの方法を変えるだけで、抽象的な水流のようなパターンから、動物や顔のような具体的な形まで、様々な表現が可能となる。

フローフィールドを構築する過程は、主に三つの段階に分けられる。第一に「グリッドの構築」、第二に「グリッドへのベクトルの設定」、第三に「ベクトルの指示に従った曲線の描画」である。これらの各段階が、最終的な美しい画像を生み出す上で不可欠な要素となる。

まず、グリッドの構築について説明する。これはグラフ用紙のように、画面全体を細かな格子状の「セル」に分割する作業だ。各セルには、その中心点のX座標とY座標、そして後で設定するベクトルの情報が格納される。このグリッドは、線を描画する際に、現在の線の位置がどのセルの上にあるかを判断し、そのセルのベクトル情報を取得するための「地図」の役割を果たす。グリッドを作成する際には、実際の画面表示領域だけでなく、その外側にもセルを設けることが重要になる。これは、曲線が画面外からスムーズに流れ込んでくるような視覚効果を生み出すためだ。具体的には、ウィンドウサイズの四方に対して25%程度広げた領域をグリッドの対象とする。プログラムでは、まず各セルの幅と高さを定義する「解像度」を決め、拡張されたウィンドウの幅と高さをこの解像度で割ることで、必要な行数と列数を算出する。次に、これらの行数と列数に基づいて2次元配列を作成し、配列の各要素(セル)に計算されたX座標とY座標を格納する。X座標は、グリッドの左端の座標にセルのインデックスと解像度を掛けた値を加えることで、各セルが正しい位置に配置されるように決定される。Y座標も同様に計算される。

次に、作成したグリッドの各セルにベクトル、ここでは角度として表現される情報を設定する。ベクトルを設定する方法は多岐にわたるが、一般的には「Perlinノイズ」という技術がよく使われる。Perlinノイズは、完全にランダムな数値を生成するのではなく、隣接する数値が滑らかに変化する「連続的な乱数」を生成する特徴がある。これにより、各セルのベクトルの方向が急激に変化することなく、水の流れや風の動きのような、より自然で連続性のあるパターンを作り出すことができる。もしベクトルの方向が完全にランダムだと、描かれる線は不連続でギザギザしたものになってしまう可能性が高い。Perlinノイズの内部構造は複雑だが、その「滑らかな乱数を生成する」という特性を理解しておけば十分である。各セルに角度を設定する際、例えばセルの位置(行と列のインデックス)に基づいて計算された角度を各セルのデータに格納することで、グリッド全体に特定の方向の流れが定義される。

最後の段階は、定義されたグリッドとベクトル情報に基づいて、実際に曲線を引く作業だ。コンピュータグラフィックスでは、滑らかな曲線は、実際には非常に短い直線を多数連続して描画することで表現される。このステップでは、線がグリッドの下にあるセルのベクトルに従ってカーブするように描画される。曲線の描画は、まず画面の拡張された領域内でランダムな開始点を設定することから始まる。次に、一本の曲線が何個の短い直線から構成されるかを示す「ステップ数」と、各短い直線がどれくらいの長さを進むかを示す「ステップ長」を定義する。これらの値によって、描かれる線の滑らかさや密度が決定される。そして、定義されたステップ数だけループ処理を繰り返し、現在の線の終点を次の線の開始点として、短い直線を連続して描いていく。

このループ処理の中で最も重要なのは、現在の線の終点(X, Y座標)の下にあるグリッドセルを特定し、そのセルのベクトル(角度)を取得することである。これは、現在のX, Y座標とグリッドの左上の基準座標、そしてセルの解像度を使って、対応する行と列のインデックスを計算することで行われる。このインデックスを使って、グリッドの2次元配列から該当するセルの角度情報を取得する。取得した角度と定義されたステップ長を用いて、三角関数(コサインとサイン)を使って次のX座標とY座標を計算する。コサインは角度からX方向の移動成分を、サインはY方向の移動成分を導き出す。これらの移動成分を現在のX, Y座標に加えることで、線はセルのベクトルが示す方向に少しずつ移動し、全体として流れるような曲線が形成される。このプロセスは指定されたステップ数だけ繰り返され、一本の曲線が完成する。描画中に線がグリッドの範囲外に出てしまった場合は、それ以上グリッドデータがないため、描画を中断して次の曲線の描画に移る。

さらに、曲線の色付けも視覚表現に深みを与える重要な要素だ。ここでは、線の長さに応じて色を変化させる方法が紹介されている。具体的には、HSL(色相、彩度、明度)カラーモデルを利用し、曲線の長さに応じて「明度」の値を調整する。例えば、短い線は暗く、長い線は明るくすることで、奥行きのある表現が可能になる。この色の調整は、曲線の最大長と最小長、そして現在の曲線の長さを基準にして、明度の値を0から1の範囲に正規化し、元の明度にこの正規化された値を掛けることで行われる。また、調整の強度を制御するパラメータを追加することで、色の変化の度合いを細かく制御できるようになっている。

フローフィールドは、グリッドのベクトルの設定方法、曲線の描画パラメータ、あるいは色付けの方法を少し変えるだけで、非常に多様な視覚表現を生み出すことができる。例えば、各セルの位置に基づいて異なる色を設定し、そのセルの色を曲線に適用することで、鮮やかなグラデーションを持つフローフィールドを作成できる。また、描画プロセスをアニメーションループ内で実行し、時間をかけて徐々に曲線を描画していくことで、美しい描画過程自体を動的なアートとして見せることも可能だ。これらのバリエーションは、フローフィールドの持つ奥深さと、そのクリエイティブな可能性のほんの一部に過ぎない。これらの基本的な技術を理解することで、さらに複雑で魅力的な視覚表現を探索し、自分だけのユニークなフローフィールドアートを創造する出発点となるだろう。

関連コンテンツ

関連IT用語

関連ITニュース