Blenderであそんでみた

3D-CGソフトBlenderの小技や豆知識など。

マスグレイブテクスチャを分かりやすく説明してみる/仕組み編

f:id:hainarashi:20220209090754j:plain

※記事製作時のバージョン:Blender3.0

 

とてもリアルな質感が作れて便利なマスグレイブテクスチャ
使わないのはもったいない!
というわけで、分かりやすいようにまとめたこの「仕組み編」では、「マスグレイブテクスチャはどういう仕組みで模様を作っているのか」を説明します。
仕組みを知っておくとパラメーターの働きが具体的に理解できるので、より扱いやすくなります。

 

この記事は「マスグレイブテクスチャを分かりやすく説明してみる/使い方編」の続きです。
未読の方は、まず「使い方編」からお読み下さい。

hainarashi.hatenablog.com

 

マスグレイブテクスチャの仕組み

話の始まりはノイズテクスチャから。
ノイズテクスチャといえば皆さんお馴染み、雲や煙のようなこの模様。
技術的な正式名称を「パーリンノイズ(Perlin Noise)」といいます。

f:id:hainarashi:20220207172228j:plain

※Ken Perlin氏の写真出典:Ken-Perlin - ACM SIGGRAPH Blog

 

パーリンノイズは、どこを取っても同じ形にならない不規則な模様です。
ランダムではありますが、「模様のサイズや密度が一定の範囲内で、大きな偏りや変化が無い」というのも特徴です。

f:id:hainarashi:20220208172540j:plain

これを発展させて、サイズや密度に自然な偏りや変化のある、より複雑な不規則模様を作れるようにしたのがマスグレイブテクスチャ(Musgrave Texture)です。

※名前の由来は見当たらなかったのですが、「マスグレイブ」というのは英語圏の苗字なので、たぶんマスグレイブ氏が開発したのだと思われます。

 

マスグレイブテクスチャは、次の手順で作られます。

【1】 元になるパーリンノイズを用意する。

f:id:hainarashi:20220202152015j:plain

 

【2】 1のパーリンノイズを元に、ある割合で変化させたパーリンノイズを作る。

f:id:hainarashi:20220206222410j:plain

 

【3】 2のパーリンノイズを元に、最初と同じ割合で変化させたパーリンノイズを作る。

f:id:hainarashi:20220206222414j:plain

 

【4】 3のパーリンノイズを元に、最初と同じ割合で変化させたパーリンノイズを・・・という処理を繰り返す。

f:id:hainarashi:20220206222419j:plain

 

【5】 すべてのパーリンノイズを重ね合わせると、マスグレイブテクスチャのできあがり!

f:id:hainarashi:20220202155646j:plain

 

この「同じ割合の変化を繰り返して、すべてを重ね合わせる」というのは、フラクタルを作る手法の一種です。
マスグレイブテクスチャは、「自然界によく見られるタイプのフラクタルパターンを作るテクスチャ」なのです!

 

ここまで理解すると、パラメーターの役割も具体的に理解できるようになります。
改めて、各パラメーターの役割と働きを見直してみましょう。

 

パラメーターの役割と働き

スケール(Scale)

最初に用意する「元になるパーリンノイズ」の大きさを操作するパラメーターです。
結果として、最終的に生成される模様の大きさを操作することになります。

 

細かさ(Detail)

「パーリンノイズを重ね合わせる回数」を設定するパラメーターです。
この値が大きいほど、重ね合わせるパーリンノイズが増え、最終的に生成される模様の複雑さが上がります。

f:id:hainarashi:20220203142709j:plain

 

「細かさ」という名称から勘違いしやすいのですが、「最終的な模様の細かさ」を直接に操作するものではありません。
模様がどのように変化するかは、他のパラメーターとの兼ね合いで決まります。
例えば「空隙性(くうげきせい)」が「1」の場合、「細かさ」の値を変えても、最終的な模様の細かさは変化しません。
※これは「空隙性」の項目で詳しく説明します。

f:id:hainarashi:20220219143456j:plain

「細かさ」は、「解像度のような働きをするパラメーター」とイメージすると良いでしょう。
他のパラメーターで設定した結果が、「細かさ(解像度)」を上げるほど細部まで見えるようになる、という感じです。

 

ちなみに「重ね合わせる回数」には「元になるパーリンノイズ」も含まれます。

なので、「細かさ」が「1」の場合、

  • 元になるパーリンノイズを用意した ⇒ 終わり

となり、他のパラメーターをどのように設定しても、模様は変化しません。

また、「細かさ」が「0」の場合、

  • 元になるパーリンノイズも用意しない ⇒ 終わり

となり、結果は真っ黒(データ無し)になります。

 

なおマニュアルによると、「細かさ」の値を大きくすると計算量が増えるため、レンダリング時間が長くなる・・・らしいです。
しかし私の作業環境・作業内容(静止画を作るくらい)では差が分かりませんでした。
マシンスペックや、動画・ゲームなど状況によっては影響が出るのかも知れません。
その場合は「細かさ」の値を下げるか、画像テクスチャにベイクするなどの対策が必要になります。

 

空隙性(くうげきせい)(Lacunarity)

重ね合わせるパーリンノイズのスケール変化を設定するパラメーターです。
この値が大きいほど重ね合わせるパーリンノイズが細かくなり、結果として、最終的な模様が細かくなります。

f:id:hainarashi:20220219143655j:plain

 

実際にどの程度細かい模様になるかは、「細かさ」との兼ね合いで決まります。
下の3つの設定は、だいたい同じくらいの見た目になります。
(ただし「細かさ」が大きい方が、細部まできれいな模様になります。)

f:id:hainarashi:20220219143914j:plain

 

なお、空隙性は「1」より大きい値で設定します。

空隙性が「1」の場合、元と同じパーリンノイズを重ね合わせることになるため、最終的な模様の細かさは変化しません。

空隙性が「1」より小さい場合、元よりも模様が大きいパーリンノイズを重ね合わせることになるため、最終的な模様は細かさを失うように変化します。

f:id:hainarashi:20220219144035j:plain

 

次元(Dimension)

重ね合わせるパーリンノイズの「振幅(magnitude)の変化」を設定するパラメーターです。
(日本語マニュアルでは "magnitude" が「大きさ」と訳されていますが、この場合「振幅」が正しい訳です。)

「振幅の変化」とは、分かりやすくいうと「重ね合わせが進むほどパーリンノイズが暗く(平坦に)なる変化」のことです。
パーリンノイズが暗く(平坦に)なると、重ね合わせの結果への影響が弱まります。
そのため「次元」の値が大きいほど、最終的に生成される模様がぼやけることになります。

f:id:hainarashi:20220204213842j:plain

 

オフセット(Offset)

重ね合わせるパーリンノイズに加算する値を設定するパラメーターです。
この値が大きいほど、重ね合わせるパーリンノイズが明るくなり、最終的に生成される模様も明るくなります。

f:id:hainarashi:20220205133708j:plain

 

ゲイン(Gain)

マニュアルには「振幅を調整するための追加の乗数」とありますが、残念ながら具体的な仕組みはよく分かりませんでした。
詳しい方、教えて下さい。

 

タイプ(Type)

すべてのパーリンノイズを重ね合わせる際の計算方法です。
計算方法の違いで、最終的に生成される模様のパターンが決まります。
マニュアルによると、

  • fBM:すべてを足し合わせる(加算)
  • マルチフラクタル:すべてを掛け合わせる(乗算)
  • ハイブリッドマルチフラクタル:加算と乗算を組み合わせる

という辺りまではなんとなく分かる気がしますが、あとの2つはどのように計算しているのか、具体的な方法がよく分かりませんでした。
詳しい方、教えて下さい。

 

 

以上、「マスグレイブテクスチャを分かりやすく説明してみる/後編」でした。

 

※本文添削・構成アドバイス:相方

 

twitter

灰ならし (@hainarashi) | Twitter

 

使用した3Dモデル

マテリアルボールの3Dモデルはこちらからお借りしました。

Material ball in 3D-Coat - Download Free 3D model by 3d-coat (@3d-coat) [a6bdf1d] - Sketchfab is licensed under Creative Commons Attribution

 

参考サイト

edom18.hateblo.jp

 

qiita.com

 

thebookofshaders.com