UnityShader初級篇 透明度混合

2021-08-13 08:19:28 字數 2014 閱讀 8915

shader"unity shaders book/chapter 8/alpha blend"

//在透明紋理的基礎上控制整體的透明度

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

} subshader

pass

//關閉深度寫入

zwrite off

//為透明度混合進行合適的混合狀態設定

//srcalpha是源顏色(該片元著色器產生的顏色)的混合因子

//oneminussrcalpha是目標顏色(已經存在於顏色緩衝中的顏色)的混合因子

blend srcalpha oneminussrcalpha

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "lighting.cginc"

fixed4 _color;

sampler2d _maintex;

//需要用 「紋理名_st」 的方式定義紋理的屬性,s是縮放(scale),t是平移(transform)

//_maintex_st.xy獲取縮放值,_maintex_st.zw獲取偏移值

float4 _maintex_st;

fixed _alphascale;

struct a2v

;struct v2f

; //在頂點著色器中計算出世界空間的法線方向和頂點座標以及變換後的紋理座標

當複雜模型本身有遮擋關係時,上述shader會產生錯誤排序,可在shader中新增乙個pass,開啟深度寫入,但不輸出顏色,就可以得到正確的深度資訊

shader"unity shaders book/chapter 8/alpha blending zwrite"

//在透明紋理的基礎上控制整體的透明度

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

} subshader

//新增乙個pass開啟深度寫入,但不輸出顏色

pass

pass

//關閉深度寫入

zwrite off

//為透明度混合進行合適的混合狀態設定

//srcalpha是源顏色(該片元著色器產生的顏色)的混合因子

//oneminussrcalpha是目標顏色(已經存在於顏色緩衝中的顏色)的混合因子

blend srcalpha oneminussrcalpha

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "lighting.cginc"

fixed4 _color;

sampler2d _maintex;

//需要用 「紋理名_st」 的方式定義紋理的屬性,s是縮放(scale),t是平移(transform)

//_maintex_st.xy獲取縮放值,_maintex_st.zw獲取偏移值

float4 _maintex_st;

fixed _alphascale;

struct a2v

;struct v2f

; //在頂點著色器中計算出世界空間的法線方向和頂點座標以及變換後的紋理座標

v2f vert (a2v v)

fixed4 frag (v2f i) : sv_target

endcg

} }fallback"transparent/vertexlit"

}

UnityShader初級篇 遮罩紋理

shader unity shaders book chapter 7 mask texture bumpmap normal map 2d bump bumpscale bump scale float 1.0 高光反射遮罩紋理 specularmask specular mask 2d whit...

UnityShader 根據鏡頭物件進行透明

前些時間接到乙個需求,要求攝像相機位置來判斷,當前是不是需要透明化,需要從半透到最後最後透明,在崩壞3的角色介面裡面有這樣的效果,當你鏡頭推進的時候,頭髮可以又半透到透明狀態變化。關鍵點在 在於用鏡頭位置與物體所在世界位置座標 做比較 shader scene alpha blend alphasc...

Unity Shader學習 一 基礎篇

本系列學習是以馮樂樂學姐編寫的 unityshader入門精要 為基礎資料來學習的。據隔壁學霸介紹,此書有很多實用shader而且講解細緻,所以在這裡也向大家推薦一下。計算機影象是通過渲染流水線的方式進行渲染的 分為應用階段,幾何階段,光柵化階段。每個階段本身通常也是乙個子流水線 應用階段 由cpu...