見出し画像

[試作] Unity Blink Shader Prototype

インターネットで見つけたテクスチャ画像を貼るシェーダのサンプルをまねて、2つのテクスチャ画像を、一定間隔で切り替えるシェーダを、試しに作ってみました。VRChatへも、持ってこれました。

Shader "Custom/Wink001" {
    Properties
    {
       _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
        _WinkTex ("Wink (RGB) Trans (A)", 2D) = "white" {}
        _MainBumpMap ("Normal Map Base", 2D) = "white" {}
        _WinkBumpMap ("Normal Map Wink", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        CGPROGRAM
        #pragma surface surf Lambert
        struct Input {
            float2 uv_MainTex;
            float2 uv_WinkTex;
            float2 uv_MainBumpMap;
            float2 uv_WinkBumpMap;
        };
        sampler2D _MainTex;
        sampler2D _WinkTex;
        sampler2D _MainBumpMap;
        sampler2D _WinkBumpMap;

        void surf (Input IN, inout SurfaceOutput o) {
            if ( (sin(_Time.y/2.0f) > 0) && (sin(_Time.y/2.0f) < 0.05) ) {
                o.Albedo = tex2D(_WinkTex, IN.uv_WinkTex).rgb;
                o.Normal = UnpackNormal (
                    tex2D (_WinkBumpMap, IN.uv_WinkBumpMap));
                o.Emission = 0.0f;
                o.Specular = 0.0f;
                o.Alpha = 1.0f;
            } else {
                o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
                o.Normal = UnpackNormal (
                    tex2D (_MainBumpMap, IN.uv_MainBumpMap));
                o.Emission = 0.0f;
                o.Specular = 0.0f;
                o.Alpha = 1.0f;
            }
        }
        ENDCG
    }
    Fallback "Diffuse"
}

ファイル名で、"Wink.shader"で保存して、Unityのプロジェクトへドラッグアンドドロップすれば、インストールできます。
ただ、Unityのサーフェスシェーダだと、フラットシェードができないみたいなので、別ので作り直しか、、、、既存のToonシェーダ(Kamakura Shader, 等)に、法線画像も含めて切り替える機能を、追加してくれると嬉しいかな(;^ω^)

サンプルで使ったテクスチャ画像は、以下です。


この記事が気に入ったらサポートをしてみませんか?