Skip to content

ノイズの使い方

ノイズはMeshHologramが誇る強力な機能です。
しかしプロパティの塊だけでは、そのノイズがどのような効果をもたらすのか、どんな表現が可能なのかというのは直感的に分かりにくく、実装方法についてもいくつか課題がありました。
そこで、いくつかの例を基に様々なノイズを作成して、MeshHologramの表現を見ていきましょう。

シンプルなカラーノイズ

パッケージ内に例となるマテリアルを用意しています。分析から始めてもいいでしょう。
Packages/MeshHologram/Materials/Noise/Noise_Color.matを覗いてみてください。
任意のオブジェクトに付与して様子を見てもいいです。

TIP

UnityのSphereメッシュが特におすすめです。
しかし、他のモデルに切り替える場合はフラグメントの線のサイズの調整をしましょう。

TIP

これからマテリアルに対していくつかの操作を行うチュートリアルが始まります。
しかし、参考にしているマテリアルはパッケージ内のものです。
サンプルとして置いてあるマテリアルの情報を上書きしたくない場合は、対象のマテリアルを複製してAssets内の別のフォルダに保存するといいでしょう。
複製して保存したマテリアルを使って色々な操作を試してみてください!

時間経過と共に、白と黒の模様が変移しているのが分かると思います。
これはカラーの着色に対してノイズを使用しています。

ノイズのスケール縮小と変化速度改変

ここでプロパティを弄ってみましょう。

  • カラー -> Noise 1st プロパティ -> スケール Wの数値を少しずつ上げてみましょう。
    白と黒の模様がより疎らになったと思います。
    他にお好みでスケールの他の要素を変えてみてください。

  • カラー -> Noise 1st プロパティ -> 時間乗算の数値を少しずつ上げてみましょう。
    時間経過で変化していた模様が更に早く変化するようになったと思います。
    0にすると一切変化が起きなくなります。

ノイズ値のカーブ

カーブの解説に移りたいですが、その前により分かりやすい設定のマテリアルを参考にしましょう。
Packages/MeshHologram/Materials/Noise/Noise_Geometry.matをご利用ください。

こちらのマテリアルは色の変移の他に、メッシュが手前や奥へ行き来しているのが分かると思います。
カラーの着色ジオメトリの操作に対して同じノイズを使用しています。

ジオメトリの動きに強弱があることにお気づきですか?
その正体はカラー -> Noise 1st プロパティ -> ノイズ値のカーブにあります。
ノイズ値のカーブというのは、0~1に変化するノイズ値にイージングのようなカーブ形状に変化させるプロパティです。
下のグラフを見ながらノイズ値のカーブを調整すると変化が分かりやすいと思います。

ノイズの二値化

二値化は0~1のように補間を持たず0と1のどちらかの状態しか取りません。つまり、急に変化するような振る舞いになります。
このノイズの場合は、ノイズ値のカーブを極限まで上げれば近似した振る舞いになるとは思いますが、あまりスマートではありません。
そう言った表現が簡潔にできるように以下の設定方法を推奨します。

  • カラー -> Noise 1st プロパティ -> カーブタイプにチェックを入れます。
  • カラー -> Noise 1st プロパティ -> ノイズ値のカーブ0にします。

これで、一瞬で飛び出たり引っ込んだり、色が白や黒に変わるような演出になったと思います。
カーブタイプというのはイージングの計算式を反転したものに切り替えるプロパティです。
詳細は該当するプロパティのリファレンスをご参照ください。

一瞬だけ1になるノイズ

上記の状態では、01の状態が均一に分かれて変化しています。
基本的には0の状態で、一瞬だけ1にしたい…そんな表現をするためには以下のプロパティを変更してみましょう。

  • カラー -> Noise 1st プロパティ -> スレッショルド(加算)1の線が僅かに残るように、マイナス値へずらしていく。

たったこれだけで偏り具合を反映させることができます。逆にプラス値にすれば、0が一瞬だけ現れるようになります。
後はノイズ値のカーブを少し弄れば、イージングもかかったリッチなアニメーションを表現できるはずです。

これでスレッショルドの使い方は理解できたのではないでしょうか?

オブジェクトを移動すると変化するノイズ

もう一つ、ユニークな機能を紹介しましょう。
ノイズが生成される原理として、各頂点の座標を利用しています。
シェーダーの処理に工夫を凝らすことで、頂点の座標の空間も独自に指定することもできてしまいます。
以下の変更をお試しください。

  • カラー -> Noise 1st プロパティ -> 時間乗算を0にする。 // 分かりやすくするために、時間によるアニメーションは切っておきましょう。
  • カラー -> Noise 1st プロパティ -> 座標空間Worldにする。

変更しましたら、そのマテリアルが割り当てられているメッシュオブジェクトの座標を動かしてみてください。
場所に応じて、ノイズの箇所が変化していることに気付くと思います。

設定通りの話ですが、ノイズが参照する座標空間をモデル空間(メッシュが持つ頂点座標)から、ワールド空間(ワールド上での頂点座標)へ切り替えたのです。

最後に

お試しいただいたユーザー様はお疲れ様でした。
ノイズは無限の可能性を秘めていると思っているのですが、少々取っ付きにくいのではないかと思い、このようなチュートリアルを設けました。
色々活用していただければ幸いです!

Released under the MIT License.