●透明是游戲中經(jīng)常使用的一種效果草姻,在實(shí)時(shí)渲染透明效果,通常會(huì)在渲染模型時(shí)控制它的透明通道稍刀。在unity中實(shí)現(xiàn)透明效果有兩種方式:透明度測(cè)試(只有全透明與不透明兩種),透明度混合(透明度可控,關(guān)閉深度緩沖寫(xiě)入)账月。
●渲染順序是在寫(xiě)透明效果shader中非常重要的參數(shù)综膀,在渲染所有不透明的物體時(shí),可以不用考慮渲染順序局齿,因?yàn)橛猩疃染彌_的存在剧劝。它的原理是把模型離攝像機(jī)的距離記錄下來(lái),再渲染片元的時(shí)候抓歼,就把緩沖的深度值與當(dāng)前距離攝像機(jī)的距離作比較讥此,誰(shuí)近一些就渲染誰(shuí)。所以可以不用考慮渲染順序谣妻,但是在寫(xiě)透明物體是需要關(guān)閉深度緩沖萄喳,因?yàn)槿绻该魑矬w在不透明物體前面,這個(gè)時(shí)候我們是需要渲染出來(lái)不透明物體的蹋半。如果打開(kāi)了深度緩沖寫(xiě)入的話他巨,不透明物體就不會(huì)渲染出來(lái)了。 這里給一個(gè)結(jié)論:就是我們需要先渲染不透明的物體然后再渲染透明的物體减江。
●這里有兩個(gè)文章染突,都寫(xiě)的很詳細(xì)”沧疲可以看看份企。文章1,文章2
●透明度測(cè)試代碼中調(diào)用了裁剪的方法:
//這里是根據(jù)閥值來(lái)裁剪值
clip(texColor.a-_Cutoff);
這個(gè)方法等價(jià)于:
if((texColor.a-_Cutoff)<0.0){
discard;
}
●AlphaTest標(biāo)簽設(shè)置:
Tags{"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
●透明度混合代碼中關(guān)閉了深度緩沖寫(xiě)入與開(kāi)啟混合值:
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
●AlphaBlend標(biāo)簽設(shè)置:
Tags{"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}