共通設定の使い方
共通設定はMeshHologramが誇る強力な機能群です。参照先、AudioLink参照先、マスク/オフセット、モディファイアの4つで構成されています。
豊富なプロパティで自由度が特徴ですが、フラグメントを始めとしたメイン機能で殆どが共通して使用されており、流用性、適応性の点でも優れていると思います。
しかし、ただプロパティを用意するだけではそれらの機能がどのような効果をもたらすのか、どんな表現が可能なのかというのは直感的に分かりにくく、実装方法についてもいくつか課題がありました。
そこで、いくつかの例を基に様々なプロパティの設定をして、MeshHologramの表現を見ていきましょう。
シンプルなカラーノイズマテリアル
パッケージ内に例となるマテリアルを用意しています。分析から始めてもいいでしょう。Packages/MeshHologram/Materials/Tutorials/Noise_0.matを覗いてみてください。
任意のオブジェクトに付与して様子を見てみましょう。
TIP
UnityのSphereメッシュが特におすすめです。
しかし、他のモデルに切り替える場合はサイズ感が異なる場合があるため、フラグメントの線のサイズの調整をしましょう。
TIP
これからマテリアルに対していくつかの操作を行うチュートリアルが始まります。
しかし、参考にしているマテリアルはパッケージ内のものです。
サンプルとして置いてあるマテリアルの情報を上書きしたくない場合は、対象のマテリアルを複製してAssets内の別のフォルダに保存するといいでしょう。
複製して保存したマテリアルを使って色々な操作を試してみてください!
TIP
Scene上でマテリアルのアニメーションをスムーズに確認する場合は、上部のView OptionsのToggle skybox, fog, and various other effects.から、Always Refreshを有効にすると動作が滑らかになります。
描写負荷は向上しますので、必要に応じて切り替えるようにしましょう。
時間経過と共に、白と黒の模様が変移しているのが分かると思います。
これはカラーの着色の参照先でノイズを使用しています。
カラーとノイズの仕組み
いくつかのプロパティを一つずつ覗いてみましょう。カラーの色の参照先は0: Gradientが指定されています。こちらは下のプロパティにあるプライマリーカラーとセカンダリーカラーの行き来が可能な色設定となっています。
この二つの色の行き来は共通設定の参照先からの入力値によって制御されます。
参照先のノイズはモデルの頂点座標に基づいてランダムな入力値を出力する機能です。0~1のランダムな値が各頂点から出力され、その数値に応じてプライマリーカラーとセカンダリーカラーがブレンドされているという仕組みになります。0であればプライマリーカラーとなり、1であればセカンダリーカラーとなる。
そして、0.5であればプライマリーカラーとセカンダリーカラーの中間の色合いになるのです。
INFO
正確にはモディファイアという機能も関係するのですが、それは一先ず置いておきましょう。
ノイズのスケール縮小と変化速度改変
ここでプロパティを操作してみましょう。
カラー->共通設定->参照先->スケール Wの数値を少しずつ上げてみましょう。
白と黒の模様がより疎らになったと思います。
他にお好みでスケールの他の要素を変えてみてください。カラー->共通設定->参照先->時間乗算の数値を少しずつ上げてみましょう。
時間経過で変化していた模様が更に早く変化するようになったと思います。
0にすると一切変化が起きなくなります。
オブジェクトを移動すると変化するノイズ
ここで一つ、ユニークな機能をご紹介しましょう。
ノイズが生成される原理として、各頂点の座標を利用しています。
シェーダーの処理に工夫を凝らすことで、頂点の座標の空間も独自に指定することもできてしまいます。
以下の変更をお試しください。
カラー->共通設定->参照先->時間乗算を0にする。- 分かりやすくするために、時間によるアニメーションは切っておきましょう。
- 分かりやすくするために、時間によるアニメーションは切っておきましょう。
カラー->共通設定->参照先->座標空間をWorldにする。
変更しましたら、そのマテリアルが割り当てられているメッシュオブジェクトの座標を動かしてみてください。
場所に応じて、ノイズの箇所が変化していることに気付くと思います。
設定した通りの話ですが、ノイズが参照する座標空間をモデル空間(メッシュが持つ頂点座標)から、ワールド空間(ワールド上での頂点座標)へ切り替えたのです。
モディファイア
ここまで参照先、ノイズの主要な機能について解説しました。
ここからはその入力値を更に高度に制御するのに欠かせない重要な機能モディファイアについて説明していきます。
その前により分かりやすい設定のマテリアルを参考にしましょう。Packages/MeshHologram/Materials/Tutorials/Geometry_0.matをご利用ください。
こちらのマテリアルはメッシュが手前や奥へ行き来しているのが分かると思います。
今回はカラーの着色の時と同じようにジオメトリの操作に対してノイズを使用しています。
この表現に少しいまいちな印象を受けた方もいるのではないでしょうか?そうです、0~1を行き来する際に急に動きが反転してしまっているのですね。
これを改善するためにモディファイアを使ってみましょう。
早速ですが以下のプロパティを操作してみてください。ジオメトリ -> 共通設定 -> モディファイア -> イージングカーブを4にします。
先程とは変わり、緩急がついたかと思います。
これらの機能は入力値に基づいて緩急が付くように改変を行っており、その機能をイージングと言います。
下のグラフを見て頂くと分かりやすいと思いますが、イージングカーブを上げるとカーブが急になり、1にすると直線になります。
ループモードについて
ループモードは入力値をどのようにループするかを設定するプロパティです。
以前にも申し上げましたが、実際のところノイズは0~1を出力するのではなく、
時間経過と共に値が蓄積されていく仕組みになっています。
そこで、モディファイアがノイズから受け取った入力値を0~1の間でループさせていたということですね。
ノイズの二値化
二値化は0~1のように補間を持たず0と1のどちらかの状態しか取りません。つまり、急に変化するような振る舞いになります。
それを実現するには、イージングカーブを極限まで上げれば近似した振る舞いになるとは思いますが、あまりスマートではありません。
そう言った表現が簡潔にできるように以下の設定方法を推奨します。
ジオメトリ->共通設定->モディファイア->イージングモードを3: Invert InOutにします。ジオメトリ->共通設定->モディファイア->イージングカーブを0にします。
これで一瞬で飛び出たり引っ込んだりするような演出になったと思います。イージングモードで指定したInvert InOutというのはInOutのイージングの計算式を反転したものになります。
詳細は該当するプロパティのリファレンスをご参照ください。
一瞬だけ1になる入力値
上記の状態では、0と1の状態が均一に分かれて変化しています。
基本的には0の状態で、一瞬だけ1にしたい…そんな表現をするためには以下のプロパティを変更してみましょう。
ジオメトリ->共通設定->モディファイア->中間乗算を上げて、勾配を急にする。- もし、ノイズの二値化済みであればここの変更は不要です。
- もし、ノイズの二値化済みであればここの変更は不要です。
ジオメトリ->共通設定->モディファイア->1の線が僅かに残るように、中間加算をマイナス値へずらしていく。
たったこれだけで偏り具合を反映させることができます。逆にプラス値にすれば、0が一瞬だけ現れるようになります。
後はイージングカーブを少し加えれば、イージングもかかったリッチなアニメーションを表現できるはずです。
最後に
お試しいただいたユーザー様はお疲れ様でした。共通設定は無限の可能性を秘めていると思っているのですが、プロパティの数の多さや応用性の高さもあり、少々取っ付きにくいのではないかと思い、このようなチュートリアルを設けました。ノイズ、モディファイアの主要な機能を解説しましたが、共通設定はこれだけではなく、AudioLink参照先でAudioLinkと連動させることもできたり、マスク/オフセットでテクスチャを使った制御も可能です。
また、共通設定はカラーやジオメトリだけではなくOrbitを始めとしたユニークな機能でも活用できます。
色々活用していただければ幸いです!