1. 程式人生 > >Unity Shader透明效果

Unity Shader透明效果

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)
Blend One One

在這裡插入圖片描述