最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2019-12-06 Unity Shader Alpha測試/Alpha混合

2019-12-07 00:09 作者:winter_mute  | 我要投稿

主要是為了記錄一下學(xué)習(xí)的歷程,以便于之后回顧和檢視,而且也能強(qiáng)化一下理解。

之前的貼圖部分之后再補(bǔ)上吧。

直接上代碼和效果

Alpha test 透明度測試

工作原理: 如果一個片元的透明的(alpha值,a值)不滿足條件(通常是小于某個閾值),則它對應(yīng)的片元就會被舍棄,而且被舍棄的片元對顏色緩沖區(qū)不產(chǎn)生任何影響(相當(dāng)于不會被渲染/從渲染隊(duì)列剔除?)。否則則會被當(dāng)成正常不透明物體來處理。

透明度測試的函數(shù):

void clip(float?x){

????if(any(x<0))

????discard;//即舍棄該片元

}

代碼來

Alpha測試中Clip函數(shù)需要的Cutoff變量的范圍在0-1之間
SubShader中的Tags有三變量

SubShader中的Tags有三個標(biāo)簽必須聲明,分別代表了歸組(TransparentCutout組),渲染隊(duì)列(AlphaTest)? 是否不受投影器(Projector)影響

clip函數(shù)????????????????????????

關(guān)鍵處在此,該處的clip函數(shù)拓展開來如下

if((texColor.a - _Cutoff) < 0)

discord;

即如果該片元的a值減去_Cutoff設(shè)定的值后小于0,則就會被舍棄。

在此之前和之后的代碼與之前的沒有變化,Alpha測試只是片元著色器中的一環(huán)。

最后使用的Fallback是內(nèi)置的VertexLit,該SubShader保證了使用透明度測試的物體可以正確的先其他物體投射陰影。

當(dāng)Cutoff的值在0.5以下時,所有片元經(jīng)過clip函數(shù)后都是大于0的所以不會被舍棄
當(dāng)cutoff大于某些值時,由于貼圖中的一些alpha值的設(shè)置,導(dǎo)致部分片元clip處理后小于0,故被舍棄

但是顯然這個可能存在渲染的問題,在視角透過被舍棄的片元后, 后面的片元沒有被渲染出來(也可能是cube沒有設(shè)置內(nèi)部的渲染)

但Alpha測試不會得到真正的透明效果,它只是通過Alpha測試來篩選片元。

透明度混合

該方法能夠真正實(shí)現(xiàn)透明的效果

原理是使用當(dāng)前片元的透明度作為混合因子,與顏色緩沖區(qū)存在的顏色值進(jìn)行混合得到新的顏色。

但是Alpha Blend需要關(guān)閉ZWrite(深度寫入),即透明物體不會記錄深度值到深度緩沖區(qū),它無法影響到之前和之后的物體的渲染。

其實(shí)實(shí)現(xiàn)也比較簡單,也是在fragment shader中進(jìn)行一些計算(BLEND)

選取一些段落分析

_AlphaScale就是整體的透明度,聲明后可以在Inspector中調(diào)節(jié)

SubShader中的渲染隊(duì)列Queue改為Transparent,歸到Transparent組中。RenderType通常用于著色器替換。

關(guān)閉深度寫入/設(shè)置混合模式與混合因子。SrcAlpha為源顏色的混合因子,OneMinusSrcAlpha為目標(biāo)顏色(存在于顏色緩沖區(qū)的顏色)的混合因子。

DstColor = SrcAlpha * SrcColor + (1 - SrcAlpha) * DstColor

相比上個Alpha Test存在兩個改動,即去掉了Clip函數(shù),將返回值中第四個變量1.0換成了 texColor.a * _AlphaScale,即能夠使用聲明的_AlphaScale來乘片元的a變量,改變片元的透明度。


2019-12-06 Unity Shader Alpha測試/Alpha混合的評論 (共 條)

分享到微博請遵守國家法律
名山县| 宁海县| 合山市| 浑源县| 颍上县| 上栗县| 锡林浩特市| 珠海市| 墨江| 武邑县| 武威市| 伊吾县| 兴义市| 正宁县| 古蔺县| 福泉市| 澄江县| 沙湾县| 水城县| 丁青县| 西和县| 盐亭县| 政和县| 尉犁县| 伊川县| 庆云县| 建阳市| 长葛市| 万安县| 荃湾区| 高安市| 永登县| 大渡口区| 容城县| 舞钢市| 宁波市| 綦江县| 清流县| 河曲县| 宁安市| 修武县|