未来を創る、テックコミュニティー

代表技術通信~Unityのことをちゃんと勉強する② Shaderについて

草場代表
2020/09/28

こんばんは。代表の草場です。

UnityのShaderに関してです。「【PointCloud】大量の点群データをUnityで読み込んでVR化する!【メタバース】」の以下の一文を理解するためです。
「まずOnEnableメソッドで、posbuffer, colbufferという名前でメモリ領域にVector3の配列の形でデータを書き込んでいます。 CPUが点群データに触るのは、ここの1回だけで、それ以降は基本的にShader(GPU)の側でよしなに描画されることになります。」

Shader?
ということで、Samurai Blogの「【Unity入門】シェーダーを書いてみよう!ShaderLabの簡単な書き方!」を参考に入門します。
Blogによると、

Shader(シェーダー)を一言で表すと「描画方法を記述したプログラム」と言えるでしょう。このプログラムがあるからこそ、画面にオブジェクトが表示されるんです。逆になければ画面には何も表示されません。「でもそんなの書いた記憶ないよ!」と思う人も多いでしょう。しかし実はそれは、デフォルトで選択されている「スタンダートシェーダー」が一般的な描画処理を行ってくれているからなんです。

ふむ。描画方法が設定できるわけですね。

いったんUnity開いて、ヒエラルキーに3Dオブジェクトを追加します。Cubeにします。ヒエラルキー内で右クリック、3D objectでCube選択。

Cubeのインスペクターを見ると、Default MaterialのところにShaderがあり、今はStandardになっています。

なるほど。で、Shaderで必ず知っておかないといけないんが、3Dモデルは三角形の集合体、ということのようです。詳しくはSamurai Blogの「【Unity入門】シェーダーを触るなら必須!まずは仕組みを知ろう!」が勉強になります。三角形の集合体で3次元表示させていると。では、細かくどうやって三角形で3Dモデルにするか?記事によると、

三角形のデータに対して「頂点データの加工」が行われ、次に「ピクセルデータへの加工」が実行されます。そして実際の描画に至るわけです。
頂点シェーダーとは?
三角形には頂点が3つありますよね?実はこの頂点ひとつひとつに、座標や色などの、描画に必要なデータが詰め込まれているんです。その頂点データを描画時に加工するのが、先ほど出てきた「頂点シェーダー」です。これはその名の通り「頂点情報を加工することができる処理」です。この処理を書くことで、頂点情報を操作することが可能なわけです。

フラグメントシェーダーとは?
頂点の加工が終わったら、次に三角形の描画が始まります。しかし描画と言っても一度に表示が行われるわけではなく画像のようにピクセル単位(点単位)で描画が行われるんです。その処理を「フラグメントシェーダー」と言います。またフラグメントシェーダーは、ピクセル情報を加工するため、別名ピクセルシェーダーと呼ばれることもあります。

なるほど。まずは頂点の点をいじる、そしてそれで張られた三角形の中をいじるイメージかな?

では、Shaderを自作してみます。こんなことも知らないのか、という感じですが、そもそもマテリアルを設定しないといけないそうです。Samurai Blogの「【Unity】色や画像で見栄えを変えよう!materialの簡単な使い方!」によると、

簡単に噛み砕いて説明すると、materialとは「オブジェクトをどのように画面に描画するかを決める材料」と言えるでしょう。つまり例えば「木材というmaterial」をオブジェクトに設定すると、「木材のような質感をもったオブジェクト」として描画される。「鉄というmaterial」を設定すれば「鉄のような質感をもったオブジェクト」が描画されるわけですね!つまり和訳の「材料」の通り「オブジェクトの描画材料」となるのがmaterialということでした。

これでオブジェクトの詳細がいじれるようになるということですね。では早速、Unityのプロジェクト画面で右クリック、Create>Materialで、New Materialが作成されます。

このマテリアルを、ヒエラルキーのCubeに入れると、CubeのInspectorにNew materialが追加されます。Albedoで色変えれます。

ではShaderで描画方法をプログラミングします。Shaderファイルを作ります。Projectで、Create>Shader>Unlit Shaderで作成します。

名前をMyShaderにしました。

これをマテリアルに設定する必要します。CubeのInspectorのNew materialのShaderをクリック。検索にMyShaderと入れると出てくるのでクリックすると追加。適応されました。Texutureなどが出てきます。

ではスクリプトを見ます。Shaderファイルをダブルクリックしてエディタを開きます。Samurai Blogの「【Unity入門】シェーダーを書いてみよう!ShaderLabの簡単な書き方!」に基づき、簡単な処理で実行をします。一旦Shaderファイルのコードを消し、ブログにあるコードを貼り付けます。モデルを設定した色で表示するシェーダー処理です。

色の変更が可能となりました。今日はここまで。

この記事を書いた人
草場代表
エディター