LoginSignup
0
0

【メモ】shaderlab Transparent Alpha値 1より大きい値を指定するとなんかカッコいい

Posted at

要点

  • 透過シェーダーのアルファ値は0~1の範囲外も指定できる。
  • 覆い焼きっぽい不思議な効果が得られる。

実際に見てみる

以下は透過シェーダーのコード。
Shader "Custom/Transparent_Test"
{

    Properties
    {
        Transparent_Value("不透明度", Range(-10,10)) = 0.5
    }
    SubShader
    {
        Tags { "Queue"="Transparent" "RenderType"="Transparent" }
        Blend SrcAlpha OneMinusSrcAlpha
        
        Pass
        {
            CGPROGRAM
            #pragma vertex vert_img
            #pragma fragment frag
            #include "UnityCG.cginc"
            float Transparent_Value;

            fixed4 frag () : SV_Target
            {
                return fixed4(1,1,1,Transparent_Value);
            }
            
            ENDCG
        }
    }
}

このシェーダーで透過を表現できている。実際に見てみよう。
Planeを作り、試すと以下のようである。

image.png

白色が透けている。

さて、このコードは透明度をイジることができる。

たとえば不透明度を下げると、白色が薄くなる。

image.png

不透明度を上げると、白色が濃くなる。

image.png

では、不透明度をどんどん大きくしてみよう。

image.png

なんか不思議な光景になった。
これには透過の仕組みが関係している。

透過の仕組み

UnityのTransparentの計算を、具体的に見てみよう。

001.png

オブジェクトの不透明度が0.6のとき、
色 = オブジェクトの色 × 0.6 + 背景の色 × (1 - 0.6) で計算する。わかりにくければ
色は「オブジェクトの色の60%」と「背景の色の40%」を足した色 で求めていると考えてもよい。

だからオブジェクトの不透明度が10のとき
色 = オブジェクトの色 × 10 + 背景の色 × (-9) と計算される。すなわち
色は「オブジェクトの色の1000%」から「背景色の900%」を引いた色 で求めている。

だから極端な色になって、コントラストがエグいことになる。

応用例

不透明度を-10にすると、こうなる。

image.png

動的に変化させると、なんかカッコいい。

aaa.gif

使い所は、ない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0