14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UNITYシェーダ UsePassでシェーダーファイルをまとめる

Posted at

1つのシェーダーに複数のパスが書かれることが多い
例えば Forward、ForwardAdd、Outline、ShadowCaster、Deferred
と。
また、シェーダーも目的別に複数ふえます
キャラ用、キャラ アルファクリップ有、キャラ 自己発光あり・・・ 背景、背景クリップ有、背景 自己発光あり、背景 輪郭線あり・・・
それらをそのまま書くと コピーペーストだらけの保守性のわるいものになります
そこで 保守性をあげるために
cginclude、UsePassなどがあります

とりあえず今回は、Passが多くなり醜くなったのでUsePassできれいにする

#元のコード
Passが複数あります

Shader "hogehoge"
{
	Properties
	{ 
             hogehoge 
	}

	SubShader{
		Tags{ hoge }

		Pass
		{
			name "FORWARD"
			hogehoge
		}


		Pass
		{
			name "FORWARD_ADD"
			hogehoge
		}

		Pass
		{
			name "OUTLINE"
			hogehoge
		}

		Pass
		{
			name "SHADOW_CASTER"
			hogehoge
		}


    }
    FallBack "HOGE"

}

パスが増えるたびに どんどんコードが長くなりますし
シェーダーを増やすごとに このファイルをコピーしてカスタマイズしていきます
保守性やばいですね

#UsePassする
上記のPass{} の中身を UsePassを使い名前で参照します

Shader "hogehoge"
{
	Properties
	{ 
             hogehoge 
	}

	SubShader{
		Tags{ hoge }

		UsePass "hoge/FORWARD"
		UsePass "hoge/FORWARD_ADD"
		UsePass "hoge/OUTLINE"
		UsePass "hoge/SHADOW_CASTER"
	}
	FallBack "HOGE"
}

Passの中身のシェーダーコードが名前で参照でき、これでパスやシェーダーが増えても安心!

Passの中身は

Shader "hoge" {
			
	SubShader{
		Pass
		{
			Name "FORWARD"
			hoge
		}
	}
}

のように別のファイルにパスの中身をかけます
Shaderに名前をつけ、PassもNameで名前をつけます
Shader名/Pass名 で呼び出す

Shader名は、Materialにシェーダーを適用するときの名前のあれです
今回のパスの中身を記述したシェーダーは Materialから設定させたくないので
Shader名をHiddenから始めます

また 注意点としては PassのNameは 大文字小文字を使えますが、大文字小文字の区別なく判断されるので
私は大文字で統一しています

14
12
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
14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?