1. 程式人生 > >【unity】 shader的渲染次序 實現,水只倒影 場景,不要倒影角色。

【unity】 shader的渲染次序 實現,水只倒影 場景,不要倒影角色。

專案裡用了個比較簡化的水(手機上用的),  角色也會倒影在很遠的水面上。
因為用了 
GrabPass{"_GrabTexture"} 接取相機的資料 再做水面效果的處理。

策劃希望只過濾掉 角色的影子。


本來想換相機 設一下mask 排除角色,用相機的RenderTexture ,網上有些例子就是這樣的。
http://www.ceeger.com/forum/read.php?tid=3162&fid=2
但開銷肯定變大不少。

後來請教了同事, 說shader 有渲染順序

參考 http://blog.csdn.net/candycat1992/article/details/37345251


渲染佇列 渲染佇列描述 渲染佇列值
Background 這個佇列通常被最先渲染。 1000
Geometry 這是預設的渲染佇列。它被用於絕大多數物件。不透明幾何體使用該佇列。 2000
AlphaTest 通道檢查的幾何體使用該佇列。它和Geometry佇列不同,對於在所有立體物體繪製後渲染的通道檢查的物件,它更有效。 2450
Transparent 該渲染佇列在Geometry和AlphaTest佇列後被渲染。任何通道混合的(也就是說,那些不寫入深度快取的Shaders)物件使用該佇列,例如玻璃和粒子效果。 3000
Overlay 該渲染佇列是為覆蓋物效果服務的。任何最後被渲染的物件使用該佇列,例如鏡頭光暈。 4000



所以改了水和角色的 Queue配置。


  這樣 水是2970  角色是2980  ,  不能大於半透明,否則據說有些特效就會把角色蓋住。
渲染佇列 渲染佇列描述 渲染佇列值
Background 這個佇列通常被最先渲染。 1000
Geometry 這是預設的渲染佇列。它被用於絕大多數物件。不透明幾何體使用該佇列。 2000
AlphaTest 通道檢查的幾何體使用該佇列。它和Geometry佇列不同,對於在所有立體物體繪製後渲染的通道檢查的物件,它更有效。 2450
Transparent 該渲染佇列在Geometry和AlphaTest佇列後被渲染。任何通道混合的(也就是說,那些不寫入深度快取的Shaders)物件使用該佇列,例如玻璃和粒子效果。 3000
Overlay 該渲染佇列是為覆蓋物效果服務的。任何最後被渲染的物件使用該佇列,例如鏡頭光暈。 4000