デコシノニッキ

ホロレンジャーの戦いの記録

独習ShaderGraph その7 ステンドグラスをつくる

前回
www.tattichan.work

ステンドグラスをつくる回です nn-hokuson.hatenablog.com
例のごとく素材がないので無敵のPowerPointでなんとかします。

f:id:haikage1755:20180128112338p:plain:w250

ステンドグラスシェーダのプログラム

Shader "Custom/sample" {
    Properties{
        _MainTex("Texture", 2D) = "white"{}
    }
        SubShader{
        Tags{ "Queue" = "Transparent" }
        LOD 200

        CGPROGRAM
#pragma surface surf Standard alpha:fade
#pragma target 3.0

        struct Input {
        float2 uv_MainTex;
    };

    sampler2D _MainTex;

    void surf(Input IN, inout SurfaceOutputStandard o) {

        fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
        o.Albedo = c.rgb;
        //グレースケースへの変換式
        //grayscale = 0.3 * R + 0.6 * G + 0.1 * B
        //0.2以下(黒色付近)で透明度を1に、そうでなければ透明度を0.7にする
        o.Alpha = (c.r*0.3 + c.g*0.6 + c.b*0.1 < 0.2) ? 1 : 0.7;
    }
    ENDCG
    }
        FallBack "Diffuse"
}

これパワポだぜ?
f:id:haikage1755:20180128113035p:plain:w250

ステンドグラスシェーダのノード

完成図です。
f:id:haikage1755:20180210210755p:plain:w350

分解していきましょう
まずはグレースケールをつくるパートです。TextureのR, G, BにMultiplyで各項に0.3, 0.6, 0.1を掛け合わせて全て足します。
f:id:haikage1755:20180128133341p:plain:w350

条件分岐です。条件分岐にはStepノードを使います。Stepとは入力に対して、閾値以上であれば1そうでなければ0を返すノードです。
今回で言えば0.2ですね。0.2以下であれば1をかけ、0.2以上であれば0.7を掛けて足し合わせます。
f:id:haikage1755:20180210210900p:plain:w250

完成です。 f:id:haikage1755:20180128134457p:plain:w350

(大変に愚かだった頃のノード) 完成図です。なぜこんなことになったのかというと、"条件式がない"
f:id:haikage1755:20180128133147p:plain:w350

分解していきましょう
まずはグレースケールをつくるパートです。TextureのR, G, BにMultiplyで各項に0.3, 0.6, 0.1を掛け合わせて全て足します。

f:id:haikage1755:20180128133341p:plain:w350

ここからが大変でした。if文のところです。
f:id:haikage1755:20180128133636p:plain:w350

  1. -0.2をして-0.2~0.8の値にする。
  2. Clamp(0, 0.01)とすることで元々0.2以下だった値は0になり、0.2以上は0.01になります。
  3. 0.01で割ります。0.2以下だった値は0、0.2以上だった値は1になります。
  4. OneMinusで反転させます。
  5. 0.7を加算します。これで値は0.7または1.7のどちらかになります。
  6. Clampで1以上の値を1にします。
  7. Alphaに代入します。

そしてAlbedoにTextureのRGBを入力してやれば完成です。

f:id:haikage1755:20180128134457p:plain:w350

ShaderForgeとかなら恐らく難なく実装できた部分なんでしょうが、条件式使えないのって大変ですね…

[デコシノニッキ]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」