unity中通常使用2種方法來實現透明效果:第一種是使用透明度測試(alpha test),這種方法無法得到真正的半透明效果;另一種是透明度混合(alpha blending)。
透明度測試和透明度混合的基本原理如下:
●透明度測試:只要乙個片元的透明度不滿足條件(通常是小於某個閾值),那麼它對應的片元就會被捨棄。透明度測試是不需要關閉深度寫入的,它和其他不透明物體最大的不同就是它會根據透明度來捨棄一些片元。它產生的效果要麼完全透明,要麼完全不透明。
●透明度混合:這種方法可以得到真正的半透明效果。它會使用當前片元的透明度作為混合因子,與已經儲存在顏色緩衝中的顏色值進行混合,得到新的顏色。透明度混合需要關閉深度寫入,這使得我們要非常小心物體的渲染順序。需要注意的是,透明度混合只關閉深度寫入但沒有關閉深度測試。
函式: void clip(float4 x);void clip(float3 x);void clip(float2 x);void clip(float1 x);void clip(float x);
引數:裁剪時使用的標量或向量條件。
常見的混合型別
//正常(normal),即透明度混合
blend srcalpha oneminussrcalpha
//柔和相加(soft additive)
blend oneminusdstcolor one
//正片疊底(multiply),即相乘
blend dstcolor zero
//兩倍相乘(2x multiply)
blend dstcolor srccolor
//變暗(darken)
blendop min
blend one one
//變亮(lighten)
blendop max
blend one one
//濾色(screen)
blend oneminusdstcolor one
//等同於
blend one oneminussrccolor
//線性減淡(linear dodge)
unity Shader透明效果
一 深度緩衝 對於不透明物體,不需要考慮它們的渲染順序,因為強大的深度緩衝 z buffer 在實時渲染中,深度緩衝是用於解決可見性問題的,基本思想 根據深度緩衝中的值來判斷該片遠距離攝像機的距離。一 透明度 當開啟透明混合後,當乙個物體被渲染到螢幕上時,每個片元除了顏色值和深度值之外,還有另乙個屬...
Unity Shader 實現半透明效果
想要實現如下效果 主角可以遮擋背景,背景遮擋主角時候半透明混合 研究了一周,shader知識了解從無到稍稍入門,終於解決了,記錄一下實現方案。使用blend one oneminussrcalpha指令,也就是srccolor dstcolor 1 srcalpha 假設a和b重疊,先渲染a,然後渲...
unity Shader 扭曲效果
所謂扭曲就是擾動乙個物體的uv座標,表現出來就是乙個擾動效果,如火焰扭曲空氣,和水波對水底的影響。1.在shader 中我們需要一張當前渲染的紋理 2.給乙個物體渲染並使用當前紋理,用螢幕座標作為uv座標加上乙個擾動值 1.unity提供了抓取的pass grabpass unity官網介紹 每次遇...