開啟深度寫入的半透明效果 Shader

2021-10-04 23:29:00 字數 718 閱讀 4658

思路 「第乙個pass開啟深度寫入,但不輸出顏色,它的目的僅僅是為了把該模型的深度值寫入深度緩衝中」

「第二個pass進行正常的透明度混合,由於上乙個pass已經得到了逐畫素的正確的深度資訊,該pass就可以按照畫素級別的深度排序結果進行透明渲染。」

shader "chapter8/alphablendzwrite"

_alphascale("alpha scale",range(0,1)) = 1

} subshader

pass

pass

zwrite off

blend srcalpha oneminussrcalpha

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "lighting.cginc"

struct a2f;

struct v2f;

sampler2d _maintex;

float4 _maintex_st;

fixed4 _color;

fixed _alphascale;

v2f vert(a2f v)

fixed4 frag(v2f i):sv_target0

endcg

} }fallback "diffuse"

}

半透明物體與深度寫入

因為無法控制乙個物體每個片元的渲染順序,所以對於自交叉的半透明物體,如果只用1個pass,關閉深度寫入,因為渲染順序不固定,有可能先渲染前面片元,後渲染後面片元,前面片元混合後面片元的效果變成了後面片元混合前面片元的效果。如果只用1個pass,開啟深度寫入,因為渲染順序不固定,有的地方先渲染前面片元...

C GDI 半透明的陰影效果

利用 gdi 可以很容易的描畫出逼真的半透明效果的陰影。void drawshadow graphics g,graphicspath buttonpath int count 1 brush.setsurroundcolors colors,count brush.setfocusscales 0...

產生半透明效果的步驟

要製作半透明效果,必須先決定圖形所要顯示的透明度,例如透明度100 就是完全透明,透明度50 就是半透明。下面就來說明製作半透明效果的步驟 步驟一 取出點陣圖的各個畫素點,將各畫素點的rgb值乘以透明度百分比,然後將它放入到乙個記憶體陣列中。步驟二 取出背景圖與點陣圖重疊部分的畫素點,將各畫素點的r...