Unityのシェヌダヌっお䜕初心者向けにやさしく解説

Unityでゲヌムを䜜るずき、キャラクタヌやオブゞェクトの「芋た目」を決めるのがシェヌダヌです。簡単に蚀うず、オブゞェクトの色、光の圓たり方、透明床、質感などをコントロヌルするプログラムのこずです。

今回は、シェヌダヌに぀いお詳しく解説しおいきたいず思いたす。

スポンサヌリンク

Unityのシェヌダヌっお䜕初心者向けにやさしく解説

䟋えば、氎のキラキラした衚珟や、金属のピカピカした反射、アニメ颚のトゥヌンシェヌディングなど、シェヌダヌを䜿えば衚珟の幅がぐっず広がりたす。

ずはいえ、「プログラムを䜿う」ず聞くず難しそうに感じるかもしれたせんが、基本を抌さえれば、意倖ずシンプルに䜿いこなせたす。

Unityのシェヌダヌにはどんな皮類がある

Unityには、いく぀かのシェヌダヌの皮類がありたす。たずはざっくり違いを芋おみたしょう。

1. 暙準シェヌダヌStandard Shader

Unityで最もよく䜿われるシェヌダヌです。光の反射、透明感、質感などを盎感的に調敎できるので、特に初心者におすすめです。蚭定次第でプラスチックや金属っぜく芋せたり、ガラスのような透明感を出したりできたす。

2. URPUniversal Render Pipeline甚のシェヌダヌ

軜量でパフォヌマンスが良いシェヌダヌです。モバむルゲヌムやVRコンテンツに向いおいお、動䜜が軜いのが特城。

3. HDRPHigh Definition Render Pipeline甚のシェヌダヌ

めちゃくちゃリアルなグラフィックを䜜りたい人向け。光の衚珟が匷化されおいお、リッチな映像を䜜るのに最適。ただし、動䜜が重めなので高性胜なPC向けずなりたす。

4. カスタムシェヌダヌ

「自分で独自の芋た目を䜜りたい」ずいうずきは、自分でプログラムを曞くこずもできたす。カスタムシェヌダヌを䜜れば、普通のシェヌダヌでは衚珟できない特殊な゚フェクトも可胜になりたす。

実際にシェヌダヌを曞いおみたしょう

ここからは、実際にシェヌダヌを曞いおみたしょうたずは簡単な「単色シェヌダヌ」のサンプルを玹介したす。

1. シェヌダヌファむルを䜜成する

Unityのプロゞェクトりィンドりで、Assetsフォルダを右クリック。Create→ Shader→Unlit Shaderを遞択。

䜜成されたファむルの名前をSimpleColorShader.shaderなど分かりやすい名前に倉曎したす。そのたたダブルクリックしお開きたす。

2. シェヌダヌを線集する

゚ディタVisual Studio や Rider などでシェヌダヌファむルを開くず、デフォルトのコヌドが蚘述されおいたす。これをカスタマむズしお、オブゞェクトの芋た目を倉曎したす。

ここでは、簡単な「単色シェヌダヌ」を玹介したす。

Shader "Custom/SimpleColor"
{
    Properties
    {
        _Color ("Main Color", Color) = (1,1,1,1)
    }
    SubShader
    {
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            
            fixed4 _Color;
            
            struct appdata
            {
                float4 vertex : POSITION;
            };
            
            struct v2f
            {
                float4 pos : SV_POSITION;
            };
            
            v2f vert (appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                return o;
            }
            
            fixed4 frag (v2f i) : SV_Target
            {
                return _Color;
            }
            ENDCG
        }
    }
}

「䜕が曞いおあるのか分からない」ずなるかもしれたせんが、ひず぀ず぀解説しおいきたす。

  • PropertiesのColorずいう郚分で、オブゞェクトの色を決めるパラメヌタを甚意しおいたす。マテリアルを通しお色を自由に倉曎できる仕組みです。
  • SubShaderの䞭に、実際の描画凊理を蚘述したす。
  • CGPROGRAMの䞭がプログラム郚分で、vertが「頂点シェヌダヌ」、fragが「フラグメントシェヌダヌピクセルシェヌダヌ」です。
  • frag関数では Colorをそのたた返しお、オブゞェクトを指定した色で描画しおいたす。

このシェヌダヌを䜿うず、マテリアルの色を奜きなように倉えるこずができたす。

頂点シェヌダヌVertex Shader

頂点シェヌダヌは、3Dモデルの「頂点」を凊理するプログラムです。モデルの各頂点の座暙を受け取り、どの䜍眮に描画するのか蚈算したす。

䟋えば、3D空間内のキュヌブがあったずするず、その各頂点の䜍眮を決めるのが頂点シェヌダヌの圹割です。ゲヌム内のカメラの芖点を考慮しお、適切な䜍眮に投圱する凊理を行いたす。

struct appdata
{
    float4 vertex : POSITION;
};

struct v2f
{
    float4 pos : SV_POSITION;
};

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

これは、基本的な頂点シェヌダヌのコヌドの䟋になりたす。

vert関数が頂点シェヌダヌです。appdata構造䜓は、オブゞェクトの頂点情報を受け取りたす。

UnityObjectToClipPos(v.vertex)を䜿っお、3D空間の座暙をスクリヌン座暙に倉換したす。

蚈算結果をv2f構造䜓に栌玍し、次の凊理ぞ枡したす。

フラグメントシェヌダヌFragment Shader / Pixel Shader

フラグメントシェヌダヌは、ピクセルごずの色を決めるプログラムです。頂点シェヌダヌがモデルの圢状を決めるのに察し、フラグメントシェヌダヌは芋た目の现かい郚分色や明るさ、透明床などを担圓したす。

䟋えば、赀いオブゞェクトを䜜りたい堎合、フラグメントシェヌダヌでそのピクセルの色を「赀」に蚭定したす。

fixed4 frag (v2f i) : SV_Target
{
    return fixed4(1, 0, 0, 1); // 赀色RGBA
}

こちらは、基本的なフラグメントシェヌダヌのコヌド䟋です。

frag関数がフラグメントシェヌダヌです。

fixed4(1, 0, 0, 1) は、RGBA赀・緑・青・透明床の倀を指定し、赀色を返しおいたす。

SV_Targetは、この関数がピクセルの色を出力するこずを瀺したす。

このフラグメントシェヌダヌを適甚するず、オブゞェクト党䜓が真っ赀になりたす。

3. マテリアルに適甚する

  1. Unityのプロゞェクトりィンドりで、Assetsフォルダを右クリック。
  2. Create → Materialを遞択し、新しいマテリアルを䜜成。名前は適圓でOK。
  3. 䜜成したマテリアルを遞択し、むンスペクタヌりィンドりでShaderの項目をクリック。
  4. Custom/SimpleColorを遞択。
  5. Colorを倉曎しお、オブゞェクトの色を自由に倉えられるこずを確認。

私は、TestMaterialずいう名前で䜜成したした。

Shaderを切り替える

    4. シヌン内のオブゞェクトに適甚する

    䜜成したマテリアルを、シヌン内のオブゞェクトCube等にドラッグドロップ。

    䞊の画像内にある「Main Color」の色を倉曎するずオブゞェクトの芋た目も連動しお倉化するず思いたす。

    オブゞェクトの色を倉える

    䟋ずしお、Main Colorを赀色に倉曎するずこんな感じでCubeも赀色になりたした。

    応甚線透明なシェヌダヌを䜜っおみよう

    䟋えば、オブゞェクトを半透明にしたいずきは、以䞋の蚭定を远加するず簡単にできたす。

    「Blend SrcAlpha OneMinusSrcAlpha」

    この行を加えるず、アルファ倀透明床を考慮したシェヌダヌになりたす。䟋えば_Colorに (1,1,1,0.5)のように蚭定するず、50%の透明床のオブゞェクトが䜜れたす。

    Shader "Custom/SimpleColor"
    {
        Properties
        {
            _Color("Main Color", Color) = (1,1,1,0.5) // 透明床を持぀カラヌ
        }
        SubShader
        {
            Tags { "Queue"="Transparent" "RenderType"="Transparent" } // 透明甚の蚭定
            Blend SrcAlpha OneMinusSrcAlpha // アルファブレンド
    
            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    
                fixed4 _Color;
    
                struct appdata
                {
                    float4 vertex : POSITION;
                };
    
                struct v2f
                {
                    float4 pos : SV_POSITION;
                };
    
                v2f vert(appdata v)
                {
                    v2f o;
                    o.pos = UnityObjectToClipPos(v.vertex);
                    return o;
                }
    
                fixed4 frag(v2f i) : SV_Target
                {
                    return _Color; // アルファ倀を考慮
                }
                ENDCG
            }
        }
    }
    

    Colorのデフォルト倀 (1,1,1,0.5) は、癜色1,1,1で透明床50%A=0.5 を意味したす。

    “Queue”=”Transparent” で透明オブゞェクトは䞍透明オブゞェクトの埌に描画されるようにする。

    たた、”RenderType”=”Transparent” でUnityがこのシェヌダヌを透明なものずしお扱うようにしたす。半透明オブゞェクト

    ColorのAのバヌを巊右に移動させるこずで、透明床を調敎出来るようになりたす。

    たずめ

    シェヌダヌを䜿えば、Unityのグラフィックを自由にカスタマむズできたす。最初は難しく感じるかもしれたせんが、基本のシェヌダヌを詊しおみるだけでも、ゲヌムの芋た目がぐっず倉わるはずです。

    著者プロフィヌル
    うんくん

    IT系に特化した蚘事がメむンです。Unity倚め。
    Udemy講垫もやっおいたす。よろしくお願いしたす。

    ※Amazonのア゜シ゚むトずしお、圓メディアは適栌販売により収入を埗おいたす。

    うんくんをフォロヌする
    unity基本操䜜
    スポンサヌリンク
    シェアする
    うんくんをフォロヌする