![見出し画像](https://assets.st-note.com/production/uploads/images/11801239/rectangle_large_type_2_f2d279b6fa3303c54fe3a04e9846330d.jpeg?width=1200)
[試作] 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, 等)に、法線画像も含めて切り替える機能を、追加してくれると嬉しいかな(;^ω^)
サンプルで使ったテクスチャ画像は、以下です。