透明度混合:
可以實現半透明效果。
使用當前片元的透明度作為混合因子,與已經儲存在顏色緩衝中的顏色值進行混合,得到新的顏色。
同時需要關閉深度寫入,注意渲染順序問題。
混合命令:
blend這個命令在設定的同時也開啟了混合模式,開啟之後才能使用混合。
混合是乙個逐片元操作。
常用語義:
blend off 關閉混合
blend srcfactor dstfactor 開啟混合,設定混合因子
blend srcfactor dstfactor, srcfactora dstfactora
blendop blendoperation
公式:
blend:目標顏色 = 該片元的顏色乘以srcfactor + 顏色快取區內的顏色乘以dstfactorfactor 因子:
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 為透明度混合進行合適的混合狀態設...