知識0からのUnityShader勉強

知識0からのUnityShader勉強

UnityのShaderをメインとして、0から学んでいくブログです。

【UnityShader】SurfaceShaderの基礎 #1

Shaderの知識が0の自分が色々なサイト、ブログ様を参考に学んで行きたいと思います。

今回はこちらです。

nn-hokuson.hatenablog.com


さっそくやってみる

おもちゃラボ様の手順通りに、ShaderSample.zipを落としてみる。

f:id:soramamenatan:20190511190937p:plain

龍のドラゴンが現れました。


オブジェクトにアタッチ

そのままShaderとMaterialを制作し、アタッチしてみる。

f:id:soramamenatan:20190511191625p:plain

特にコードも記述してないので変化があるわけではなさそう。


コード変更

次に先程作った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;
}

すると

f:id:soramamenatan:20190511192153p:plain

おおおおお~~~~~!!! なんかよくわかんないけど黒くなった! こういうの見るとテンション上がっちゃいますね。


なぜ色が変わったのか?

ここで書き換えたのは「o.Albedo=〜」の行だけです。
Albedoに代入する値をテクスチャの値ではなく黒色にしています。

とのこと

o.Albedo = fixed4(0.1f, 0.1f, 0.1f, 1);

つまりこの部分にあたります。


Albedoってなんだ・・・。

f:id:soramamenatan:20190511192634p:plain

indie-du.com

このサイト様にわかりやすく書いてありました。

つまりrgb値を直接いじってるってことですね。


そもそもサーフェスシェーダーとは

簡単にまとめると、ライティングやシャドウが自動的に適応してくれるシェーダーらしい。

詳しくはおもちゃラボ様にわかりやすく書いてあります。


f:id:soramamenatan:20190511200853p:plain

nn-hokuson.hatenablog.com


後で見直すようにコメントを増やす

// サーフェスシェーダー関数
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;
}


次もおもちゃラボ様の続きを参考に勉強します!

nn-hokuson.hatenablog.com