パープルハット

※当サイトではGoogleアドセンス広告を利用しています

Unity Shader3D (2)画像の貼り付けと色反転





リンク

Shaderについてのまとめ記事

kiironomidori.hatenablog.com




画像の貼り付け

概要

テクスチャーを張り付けるにはShaderのProperiesで画像用の変数を用意する必要があります。宣言は

_MainTex ("Texture", 2D) = "white" {}

のようにする必要があります。

また、surf関数で利用するためにはPropertiesで宣言した変数と同じ名前の変数をSubShader内で

sampler2D _MainTex;

というように宣言する必要があります。


プログラム

ここで、実際にShaderファイル内にどのようなプログラムを書き込めばよいかを紹介していきます。
実はUnityでShaderファイルを作成したときに記述されているプログラムを書き換えるだけで大丈夫です。

Shader "Custom/Inverter"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }

    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input
        {
            float2 uv_MainTex;
        };


        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
            o.Albedo = c;
        }
        ENDCG
    }
    FallBack "Diffuse"
}


プログラム内の

fixed4 c = tex2D(_MainTex, IN.uv_MainTex)

という処理でインスペクターで設定したテクスチャーを表示することができます。


動作確認

使用するテクスチャーはベイツ・イメージズ様のものを使用させていただきました。

まず、用意した画像をアセットに追加してShaderファイルとマテリアルを作成します


Shaderに先ほどのプログラムを記述したらマテリアルにドラッグ&ドロップで追加して、マテリアルに用意した画像をセットします。


このマテリアルを例えばSphereにアタッチすると以下の様になっていることが確認できます。





張り付けた画像の色反転

続いて先ほどのマテリアルの色を反転させて画像の様に表示させる方法を紹介します。


先ほどのプログラムの

o.Albedo = c;

の箇所を

o.Albedo = 1 - c;

とするだけです。