夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Shader GraphでホログラムShaderを作る  その② ホログラムシェーダーの完成

本日はShader勉強枠です。

先日コミュニティのイベント"ガチラボ"でShaderGraphを触る勉強会を開催しました。本日はそこで触ったShaderをまとめます。

〇ガチラボとは?

[ガチラボ]とは熊本のxRコミュニティ[KumaMCN]で行われるガチ勢育成勉強会です。

熊本で活躍されているがち本さんが主に開催しておりましたが今回はがち本さんの弟子である筆者が主にShaderに関しての知見を共有しながら実際にオンラインワークショップを開催しました。

前回はホログラムシェーダーのベース部を作成しました。

redhologerbera.hatenablog.com

今回は続きを進め完成させます。

f:id:Holomoto-Sumire:20211002212235p:plain

〇ノイズとスキャンのエフェクト

今回のShaderはノイズとスキャンによってホログラムを表現します。

①[UV]ノードと[Split]ノードをつなぎます。

f:id:Holomoto-Sumire:20211002212541p:plain

[Split]ノードは入力されたベクトルの成分をそれぞれ分割する処理を行います。

今回はオブジェクトの持つUVのうちY成分(上下)の値のみを使用します。

②[Time]ノードを[Float]ノード(変数)と[Multiply]ノードで積算し[Split]のY成分を[Add]ノードで足します。

f:id:Holomoto-Sumire:20211002212834p:plain

ここで[Time]ノードに変数を掛け合わせているのは時間をユーザー側が変更できるようにするためです。

掛け合わせる値によって例えば0.1を掛け合わせる場合時間の流れが10分の1になります。

③[Add]のアウトプットを[Fraction]ノードへつなぎます。

f:id:Holomoto-Sumire:20211002213317p:plain

[Fraction]ノードは入力された値の小数部のみを返す処理をします。

これによって値が0~1に定まるためUVノードのY成分にのっとって上下に流れる波が完成します。

④前回作成したベース部と掛け合わせます。 [Power]ノードと[Add]ノードでオーブの内部と外部を足し合わせている間に[Multiply]ノードで掛け合わせます。

f:id:Holomoto-Sumire:20211002213847p:plain

これによってオーブの内部に走査線が入ります。

f:id:Holomoto-Sumire:20211002214115p:plain

次にホログラムのノイズを作成します。

⑤[Time]ノード[Float]ノード[Multiply]ノードつなぎ時間と係数を掛け合わせアウトプットを[Add]ノードですでにある[Split]ノードとつなぎます。

f:id:Holomoto-Sumire:20211002214516p:plain

同様の処理はすでに作成していますが、新規で作った理由として走査として使った最初の処理とは変数を変え別々の速度で処理を行うためです。

⑥BackboradにFloat型で[ScanSpeed]という変数を作成します。

f:id:Holomoto-Sumire:20211002214854p:plain

GraphInspectorウィンドウからデフォルト値を30に設定しておきます。

f:id:Holomoto-Sumire:20211002215002p:plain

⑦[Add]ノードの出力と変数[ScanSpeed]を[Multiply]ノードで掛け合わせ[Fraction]ノードへと接続します。

f:id:Holomoto-Sumire:20211002215146p:plain

これによって走査ノイズが作成できます。

f:id:Holomoto-Sumire:20211002215322p:plain

⑧最後に作成した走査ラインと走査ノイズを[Add]ノードで接続します。

f:id:Holomoto-Sumire:20211002215608p:plain

以上でホログラムShaderの完成です。

f:id:Holomoto-Sumire:20211002215710p:plain