cheap wall vision shape shader.

方便簡單的敵人身影遮掩身形提示….好罷其實我不明白自己剛剛說了啥.
大概就是這一種 shader

情況:
wall-vision-shader
Ref: http://www.danielkiedrowski.com/2012/07/wall-vision-outline-image-effect-unity-asset-store/

Ref: https://www.assetstore.unity3d.com/en/#!/content/24707


這些其實可以利用 SetPass 的特性來簡單實現.

Properties{
		// step 1, the color you wanted.
		_OcclusionColor("OcclusionColor", Color) = (0.2426471,0.07530426,0,1)
	}
	
SubShader{
	Tags{
		// step 2, Geometry make the vision display ontop of the others. e.g. building, walls.
		"Queue" = "Geometry+1" "RenderType" = "Opaque"
	}
	LOD 100

	Pass{
		ZWrite Off
		ZTest Greater
		Blend One Zero
		// step 3, Geometry make the vision display ontop of the others. e.g. building, walls.
		Color[_OcclusionColor]
	}
	
	// step 4, write a normal drawing shader here.
	// because it's ZWrite On and it's called after pervious, therefore it can override the 1st Pass result
	// if camera can really saw it on screen.
	Pass{
		Name "FORWARD"
		Tags{
			"LightMode" = "ForwardBase"
		}
	......
	}
	.....
}

簡單的四個步驟

  1. 顏色
  2. Geometry 地形+1.. 總之比其他建築物或牆等等使用的 shader 級別高, +1,+2,+3 如此類推.
  3. 第一個 Pass, Zwrite off, Color[xxx] 就是為了直接把顏色輸出到 surf.
  4. 正常顯示的 shader

因為 #4 的 Pass 在一般能看見的情況下, 是後繪的關係, 所以第一層的 Pass 就被取代, 所以畫面結果沒有顯示出來.
但是當人物被普通的建築或牆遮蓋的時候, 因為 ZDepth 的關係, 第二層的 Pass 不會繪畫. 而第一層的純顏色 Pass 就顯示出來.

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料