【Unity】初めて『シェーダーグラフ』でシェーダーを学んでみる 基礎編.㉚

f:id:Effect-Lab:20180504221823j:plain

 

こんにちは。

 

シェーダーを一度も触った事のないデザイナーが、Unityの「シェーダーグラフ」を使ってシェーダーを学んでみるシリーズ。

 

このシリーズでは、公式のサンプルシーンを元に僕がシェーダーグラフで学んだ事を解説していきます。
シェーダー学習初という事もあり、たくさんの方のブログを拝見し、勉強させていただきました。
このシリーズには僕が参考にさせていただいたブログのリンクを貼らせていただいておりますので、そちらも併せて読んでいただくとより一層理解が深まるかと思います。
 

 

今回は「基礎編.㉚」という事で、公式のサンプルシーンにある上の画像の放射状に広がる柄のシェーダーがどのように作られているかを解説します

 

 

 まずはこちらの記事で紹介したサンプルシーン「Shader Graph Example Library」を開いてください。

 

シーンは開けましたか?
それではシェーダーの解説に入ります。

 

 シェーダーを開く

サンプルのシーンを開いたら、「Procedural-Pattern-Shatter」というファイルをダブルクリックして下さい。

f:id:Effect-Lab:20180504222253j:plain

 

するとシェーダーグラフのエディターが立ち上がります。
※Propertyにコンバートされていたノードは「Convert To Inline Node」で元に戻してあります。
※RotateノードのRotationの値は0にしてあります。

f:id:Effect-Lab:20180504222307j:plain

  

 全体の流れ

個々のノードを見ていく前に、このシェーダーが何をしているのか、全体の流れを軽く把握していきましょう。

f:id:Effect-Lab:20180504222317j:plain

このシェーダーは、①でUVを回転させ、②でUVを極座標にしています。

③で②から受け取った極座標のUVを繋ぎ、このような画像が完成します。

f:id:Effect-Lab:20180504222618j:plain

 

  

 重要ノード群の解説

さて、全体の流れを把握した所で、今回のシェーダーで重要な役割を持つノードを詳しく見ていきましょう。 

 

 ② Polar Coordinates

f:id:Effect-Lab:20180504223936j:plain

このノードは、入力されたUVの値を極座標に変換するノードです。

 

Centerで極座標の中心点を設定できます。

Radial Scaleは中心点から外側に向かう距離の値を、Length Scaleは中心点を基点に回す角度の値をそれぞれ設定できます。   

Radial ScaleとLength Scaleがどう影響するかは下図のイメージです。

f:id:Effect-Lab:20180504225638j:plain

 

もう少し具体的に見てみましょう。

まずはRadial Scaleの実例から。
Frequency(1, 0)のCheckerboardノードを用意します。

f:id:Effect-Lab:20180505001251p:plain

ここにPolar Coordinatesノードを繋いでみます。

f:id:Effect-Lab:20180505001401p:plain

リング状の図形ができましたね。
この状態でPolar CoordinatesノードのRadial Scaleの値を「2」にしてみます。

f:id:Effect-Lab:20180505001629p:plain

リングの数が増えました!
これは、「中心点から外側に向かう距離の値」が増えた(プレビュー画面に表示される距離が1から2に増えた)ためにこのようになります。

 

次はLength Scaleの実例です。
Frequency(0, 1)のCheckerboardノードを用意します。

f:id:Effect-Lab:20180505003043p:plain

ここにPolar Coordinatesノードを繋いでみます。

f:id:Effect-Lab:20180505003149p:plain

縦に分割されましたね。
この状態でPolar CoordinatesノードのLength Scaleの値を「2」と「5」の2種類を試してみます。

f:id:Effect-Lab:20180505003431p:plain

f:id:Effect-Lab:20180505003317p:plain

プレビュー画面の中心を起点に縦のスプライト模様が回転し、集中線っぽい形になってきました!
値を極端に増やすと、より集中線ぽくなりますよ。

 

どうでしょう?
「UVの値を極座標に変換する」とはこういうイメージになります。
今回のように色々試してみるとどういう計算がされてるかが飲み込みやすいと思います。
僕も計算だけで分かり難いところはいろいろ弄りまくってイメージで覚える事が多いです(笑)

 

 ③ Checkerboard

f:id:Effect-Lab:20180505010319p:plain

このノード自体の機能は既に解説済みですので、今回のシェーダーでの使われ方だけを解説したいと思います。

先ほどの②Polar Coordinatesの項目で解説したように、Length Scaleの値を増やせば今回の最終結果に似た絵が導かれます。

ただし、今回はLength Scaleではなく、CheckerboardノードのFrequencyの値で調整しています。
ここでどのような計算が行われているか見ていきたいと思います。

まずFrequency(0, 8)のCheckerboardノードを用意してみます。

f:id:Effect-Lab:20180505011138p:plain

上下に対して白黒が8回繰り返されたボーダーができました。
この状態で極座標にするので下図のようになります。

f:id:Effect-Lab:20180505011642p:plain

この状態でPolar CoordinatesのLength Scaleの値を増やしてみると下図のようになります。

f:id:Effect-Lab:20180505011902p:plain

計算する個所は違いますが、結果的に似たような事をしていますね。

 

 完成!

f:id:Effect-Lab:20180504222618j:plain

これで今回のシェーダーは完成です!

 

 まとめ

今回のシェーダーはちょっと仕組みを理解するのに時間がかかったので詳しく解説してみました。

解説の中で、似たような結果を求めるのに複数のやり方があることも分かりました。
シェーダーは奥が深いですね。

さて、今回新しく覚えるべきノードは1つです。

  1. Polar Coordinates極座標

 

この1つを覚えたら次へ進みましょう!