Unity初心者がシェーダーでお絵描きする 4

 

ブログの目的

Unityシェーダーでいろんなお絵描きができるようになること

 

参考にしている資料

KotaMatsusita さんがtwitterに公開をして下さっている、Unityシェーダーでお絵かきができるようになるためのスライド

docs.google.com

  

今日のUnity基本用語

GPU

画像を出力するためのメモリ。

 

OpenGL

Android, iOSなどのネイティブアプリの製作において主に用いられるAPI

GPUを利用して、細緻な3次元空間を描画する。

 

WebGL

OpenGLのWeb版。Web上で、質の高い3D空間を描画することができる。

スマホのブラウザからでも高度な3Dアニメーションを見れるという点において、スマホが広く普及している現代においては自然と重宝されてしまうAPI

 

●バーテックスシェーダー

画面の頂点座標を計算するところ。

 

●フラグメントシェーダー

 画面の各ピクセルの色を計算するところ。

 

●Cg/HLSL

シェーダーのプログラミング言語。CgとHLSLには、言語としての違いは殆どないらしい。

 

●Albedo(アルベド

オブジェクトそのものの色。

   

●Standard Surface Shader

Unity側が、オブジェクト表面の 光の反射 に関する設定を、いくつか(恐らくは2つ)用意してくれているシェーダー。

 

まず、オブジェクト表面の凸凹度合いを制御するための Smoothness

表面の凸凹度合いを調整することによって、光の反射の仕方を制御することができる。

1つの反射光の中には、いくつもの方向に反射をする diffuse反射 と、1つの方向にだけ反射をする specular反射 とが存在する。

この2種類の反射光の比率を Smoothness で指定することができ、それにより光の反射の仕方を制御することができる。

 

そして、オブジェクトの金属度合いを制御するための、Metallic 

公式では 金属度合い といった言葉で説明をされていたが、より良い理解のためには、物体のアルベド色と、周囲の景色を物体表面に映そうとする環境光 の比率を Metallic で指定しているという解釈の方が、より具体的でいい気がする。

 

Standard Surface Shader を利用すれば、これらの物理的なパラメータを、初期の段階からUnity上で調整することができる。 

 

理解を試みるにあたり、以下のブログをとても参考にさせていただいた。

indie-du.com

 

かなりの時間をかけて調べたが、結局、完全な理解には及んでいない気がする。

実際、Smoothness と Metallic って、パラメータも調整した結果得られるものは、どちらも ”物体のてかり具合” なんじゃないの? だとしたらどう使い分けるの? みたいな点を理解していない。

 

●Unlit Shader

自分で内容をカスタマイズするシェーダー。vertex / fragment シェーダーはUnlitシェーダーである。このような、プログラムによって動作の指示を与えられる性質を指して、プログラマブルと呼ぶこともある。

 

所感

第一の目的はシェーダーでお絵描きできるようになることだから、今 Standard Surface Shader にあまり時間を使わなくてもよかったな。。

話は逸れるけど、シェーダーのコードは、リファレンスなしで0から書けるようになりたい。。