近期有小夥伴提了一個需求,選中物體是彩色顯示,非選中物體灰色顯示,物體排序正常,所以實現了一個簡單的需求,先上圖
推一個公衆號啊,歡迎大家關注,我會定期更新內容,小夥伴們也可以提個工作中的需求,近量幫助大家!!!
微信號:ITComputerGraph
如需工程:關注公衆號《IT木子李》回覆:unity彩色灰色混合顯示
這裏應用了相機的圖像處理和模版測試,需要兩個相機,一個相機渲染場景,一個相機渲染要選中的物體
場景相機需要做灰度處理,提取圖片亮度信息有固定公式,我們採樣圖像,然後提取亮度再輸出就可以了
同時支持亮度對比度調節
float _Brightness;
float _Contrast;
fixed4 frag(v2f i) : SV_Target
{
float4 renderTex = tex2D(_MainTex, i.uv);
fixed luminance = 0.2125 * renderTex.r + 0.7154 * renderTex.g + 0.0721 * renderTex.b;
luminance *= _Brightness;
float avgColor = 0.5;
float finalColor = lerp(0.5, luminance, _Contrast);
return fixed4(finalColor, finalColor, finalColor, 1);
}
接下來是兩個物體的shader部分,我們的方塊是要彩色顯示的,球要灰色處理,但球還在方塊的前面,所以球不需要輸出顏色信息,這樣我們給一個用當前顏色,模版值設爲2
Stencil{
Ref 2
Comp Always
Pass Replace
}
再看方塊shader,球以外沒有被擋住的部分要正常渲染,擋住的扔掉,所以模版值也設爲2,只要不等於2的,我們就認沒有擋住
Stencil{
Ref 2
Comp NotEqual
}