透明度混合

2021-10-20 07:36:18 字數 2417 閱讀 2333

透明度混合:

可以實現半透明效果。

使用當前片元的透明度作為混合因子,與已經儲存在顏色緩衝中的顏色值進行混合,得到新的顏色。

同時需要關閉深度寫入,注意渲染順序問題。

混合命令:

blend

這個命令在設定的同時也開啟了混合模式,開啟之後才能使用混合。

混合是乙個逐片元操作。

常用語義:

blend off 關閉混合

blend srcfactor dstfactor 開啟混合,設定混合因子

blend srcfactor dstfactor, srcfactora dstfactora

blendop blendoperation

公式:

blend:目標顏色 = 該片元的顏色乘以srcfactor + 顏色快取區內的顏色乘以dstfactor

factor 因子:

one:1

zero:0

srccolor:原畫素的顏色值

srcalpha:原畫素的a值

dstcolor:顏色緩衝區的顏色值

dstalpha:顏色緩衝區的a值

oneminussrccolor:1-原畫素的顏色值

oneminussrcalpha:1-原畫素的a值

oneminusdstcolor:1-顏色緩衝區的顏色值

oneminusdstalpha:1-顏色緩衝區的a值

blendoperation:

add:混合後的顏色相加

sub:混合後的顏色相減

revsub:反過來,目標顏色減去原顏色

min:原顏色和目標顏色每個分量的最小值

max:原顏色和目標顏色每個分量的最大值

常用:

blend srcalpha oneminussrcalpha 正常透明度混合

blend oneminusdstcolor one 柔和相加

**如下:

shader "alphablend"

_alphascale (

"alpha scale"

,range(0

,1))

=1//控制透明度

} subshader

lod 100

pass

zwrite off

blend srcalpha oneminussrcalpha//srcalpha 代表原畫素的a值,oneminussrcalpha 代表1-目標畫素的a值

cgprogram

#pragma vertex vert

#pragma fragment frag

#include

"unitycg.cginc"

#include

"lighting.cginc"

struct v2f

;fixed4 _color;

sampler2d _maintex;

float4 _maintex_st;

fixed _alphascale;

fixed4 frag (v2f i)

: sv_target

endcg

}}fallback "transparent/vertexlit"

}

注意:

當模型有複雜的遮擋關係,會出現因為排序錯誤產生的錯誤透明效果。

可以使用兩個 pass 通道。

第乙個 pass 開啟深度寫入,但不輸出顏色,僅將深入值寫入到深度緩衝中。

第二個 pass 進行正常的透明度混合,因為第乙個已經得到了逐畫素的正確的深度資訊。

得到的結果就是:模型內部不會存在半透明效果,但是模型與背景可以進行正常顏色混合。

**如下:

...

pass..

.

同時這種方式的缺點:浪費效能

一般透明的效果都需要進行雙面渲染,因為預設引擎剔除了物體背面。

但是透明的是需要看到內部的。

如果透明度混合需要進行開啟雙面渲染,不能簡單的使用

cull off

如果想要得到正確的透明效果,就必須保證正確的渲染順序。

使用兩個 pass 通道。

第乙個只渲染背面。

第二個只渲染正面。

**如下:

pass

pass

shader 透明度混合

透明度混合是實現了真正的半透效果。它會以當前片元透明度作為混合因子,與已經儲存在顏色緩衝區中的顏色進行混合,得到新的顏色。同時要關掉深度寫入,小心物體的渲染順序。用blend srcfactor dstfactor來進行混合。這個命令在設定混合因子的同時也開啟了混合模式,否則不會有混合效果,因為開啟...

UnityShader 透明度混合

關閉深度寫入帶來的問題 開啟深度寫入的半透明效果 shaderlab的混合命令 透明度混合 實現 開啟深度寫入的半透明效果 實現 透明度混合可以得到真正的半透明效果。它會使用當前片元的透明度作為混合因子,與已經儲存在顏色緩衝中的顏色值進行混合,得到新的顏色。但是,透明度混合需要關閉深度寫入,這使得我...

UnityShader初級篇 透明度混合

shader unity shaders book chapter 8 alpha blend 在透明紋理的基礎上控制整體的透明度 alphascale alpha scale range 0,1 1 subshader pass 關閉深度寫入 zwrite off 為透明度混合進行合適的混合狀態設...