16
16

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 でShaderの勉強 その4

Posted at

引き続きShaderの勉強をしていきます。

前回はZTestやZWrite周りを勉強したので今回はBlend周りをやってみたいと思います。

Test1(半透明用)とTest2(不透明用)シェーダーを作りました。

Test1
Shader "Custom/Test1"{
	Properties {
		_MainColor("MainColor" , Color) = (1,1,1,1)
	}
	SubShader {
		Tags {"Queue" = "Transparent" "RenderType" = "Transparent"}
		ZWrite Off
		ZTest LEqual
		Blend SrcAlpha OneMinusSrcAlpha

		Pass {
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			uniform float4 _MainColor;

			float4 vert(float4 pos : POSITION ): SV_POSITION {
				return mul(UNITY_MATRIX_MVP,pos);
			}

			float4 frag() : SV_TARGET {
				return _MainColor;
			}
			ENDCG
		}
	}
}
Test2
Shader "Custom/Test1"{
	Properties {
		_MainColor("MainColor" , Color) = (1,1,1,1)
	}
	SubShader {
		Tags {"Queue" = "Geometry" "RenderType" = "Opaque"}
		ZWrite On
		ZTest LEqual

		Pass {
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			uniform float4 _MainColor;

			float4 vert(float4 pos : POSITION ): SV_POSITION {
				return mul(UNITY_MATRIX_MVP,pos);
			}

			float4 frag() : SV_TARGET {
				return _MainColor;
			}
			ENDCG
		}
	}
}

白CubeにTest1,赤CubeにTest2をつけてみたところ正常に動作しました。
スクリーンショット 2016-09-23 0.14.16.png
スクリーンショット 2016-09-23 0.15.03.png

###あえて描画しない

描画しない
Shader "Custom/Test3" {
	Properties {
		_Color ("Color", Color) = (1,1,1,1)
	}

	SubShader {
		Tags {"Queue" = "Geometry-1"}

		Pass{
			Zwrite On
			ColorMask 0
		}

	} 
}

このシェーダーをつけることによって、
これが
スクリーンショット 2016-09-23 1.14.55.png
こうじゃ!
スクリーンショット 2016-09-23 1.15.52.png

プチ解説
完全透明Cubeの背後にあるタイルのシェーダーのQueueはGeometryが設定されています(Unlitシェーダー)
今回のシェーダーのQueueはGeometry-1が設定されているので先に描画が行われます。デプスバッファに位置情報が書き込まれますが、ColorMask 0が設定されているため何も描画されません。そのためピクセル位置にはQueue = Backgroundの背景の色がそのまま残ることになります。
次いでQueue = GeometryのタイルのZTestが行われますが、ZTest LEqualが指定してあるため、より手前にある完全透明に勝てず描画が行われません。
結果的にピクセルに残る色は背景になる、というわけです :)
シェーダー面白い :)

16
16
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
16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?