【UnityShader】SurfaceShaderの基礎 #1
Shaderの知識が0の自分が色々なサイト、ブログ様を参考に学んで行きたいと思います。
今回はこちらです。
さっそくやってみる
おもちゃラボ様の手順通りに、ShaderSample.zipを落としてみる。
龍のドラゴンが現れました。
オブジェクトにアタッチ
そのままShaderとMaterialを制作し、アタッチしてみる。
特にコードも記述してないので変化があるわけではなさそう。
コード変更
次に先程作ったsample.shader内のsurf関数を下記のように書き換えてみる
void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = fixed4(0.1f, 0.1f, 0.1f, 1); // Metallic and smoothness come from slider variables o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; }
すると
おおおおお~~~~~!!! なんかよくわかんないけど黒くなった! こういうの見るとテンション上がっちゃいますね。
なぜ色が変わったのか?
ここで書き換えたのは「o.Albedo=〜」の行だけです。
Albedoに代入する値をテクスチャの値ではなく黒色にしています。
とのこと
o.Albedo = fixed4(0.1f, 0.1f, 0.1f, 1);
つまりこの部分にあたります。
Albedoってなんだ・・・。
このサイト様にわかりやすく書いてありました。
つまりrgb値を直接いじってるってことですね。
そもそもサーフェスシェーダーとは
簡単にまとめると、ライティングやシャドウが自動的に適応してくれるシェーダーらしい。
詳しくはおもちゃラボ様にわかりやすく書いてあります。
後で見直すようにコメントを増やす
// サーフェスシェーダー関数 void surf (Input IN, inout SurfaceOutputStandard o) { // テクスチャをいじってそう fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; // オブジェクトのAlbedo(ベースカラー)を変更している o.Albedo = fixed4(0.1f, 0.1f, 0.1f, 1); // 謎 o.Metallic = _Metallic; // 謎 o.Smoothness = _Glossiness; // アルファ値いじってそう o.Alpha = c.a; }
次もおもちゃラボ様の続きを参考に勉強します!