LoginSignup
1
0

More than 3 years have passed since last update.

シンプルなImageEffectその3。Posterization

Posted at

twitterでアップしたImageEffect用シェーダ。Posterization(ポスタリゼーション)のコードを貼っておきます

少し前の記事
シンプルなImageEffectその1。モザイク。
で書いたとおり、

floor(パラメータ * _DivideNum ) / _DivideNum

とすることで、パラメータのカーブを階段状に粗く(粗階調化)する事ができます。
モザイクはuvに対して上記の変換を行うことで一定間隔でサンプリング位置を固定していたのですが、
ソレを色のパラメータに行うことで、色調のカーブを粗階調化してポスタリゼーションを実装することが出来ます。

Posterization.shader
Shader "ScreenPocket/ImageEffect/Posterization"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _DivideNum ( "Divide Num", Float ) = 1
    }

    SubShader
    {
        // No culling or depth
        Cull Off ZWrite Off ZTest Always

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            sampler2D _MainTex;
            float _DivideNum;

            fixed4 frag (v2f i) : SV_Target
            {
                return floor(tex2D( _MainTex, i.uv ) * _DivideNum) / _DivideNum;
            }
            ENDCG
        }
    }
}

ゲームをレトロに見せたり、ホラー的な演出を作るときにも使えたりします。

1
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
1
0