實現乙個塗抹擦除效果

2021-09-08 13:21:09 字數 1955 閱讀 9418

塗抹還是滿常見的效果。

要做塗抹,首先要存一張中間貼圖作為mask。

然後需要兩個shader,乙個做mask乙個做混合。

maskshader:

shader "

unlit/maskshader

" _maskdecaltex(

"mask decal texture

", 2d) = "

white"{}

_maskoffset(

"mask offset

", vector) = (0,0,0,0

) }

subshader

lod

100pass

;struct

v2f ;

sampler2d _maintex;

float4 _maintex_st;

float4 _maskoffset;

sampler2d _maskdecaltex;

fixed4 frag (v2f i) : sv_target

endcg}}

}

blendshader:

shader "

unlit/blendshader

" _secondtex(

"second texture

", 2d) = "

white"{}

_masktex(

"mask texture

", 2d) = "

white"{}

}subshader

lod

100pass

;struct

v2f ;

sampler2d _maintex;

float4 _maintex_st;

sampler2d _secondtex;

sampler2d _masktex;

fixed4 frag (v2f i) : sv_target

endcg}}

}

指令碼(核心部分):

viewportpoint -= new vector4(0.5f, 0.5f

);if (mpersistmasktex == null

)maskmat.settexture(

"_maintex

", mpersistmasktex);

maskmat.setvector(

"_maskoffset

", viewportpoint);

graphics.blit(mpersistmasktex, maskrt, maskmat);

blendmat.settexture(

"_maintex

", src);

blendmat.settexture(

"_secondtex

", temprt);

blendmat.settexture(

"_masktex

", maskrt);

graphics.blit(src, des, blendmat);

var cacheactive =rendertexture.active;

rendertexture.active =maskrt;

mpersistmasktex.readpixels(

new rect(0, 0, mpersistmasktex.width, mpersistmasktex.height), 0, 0

);rendertexture.active = cacheactive;

2018/11/18補充:近期實現了對塗抹畫素的判斷操作,塗抹到一定程度後則完成擦除:

實現乙個有趣的小效果

一 新建乙個project。二 新增兩個textview,並設定它的屬性。android id id tv one android layout width wrap content android layout height wrap content android text 瘋狂源自夢想,技術成...

乙個flash loading效果

在公司裡做動畫時候做的乙個loading的效果,可以參考但不要直接用,因為裡面有一些自己的mc不一定合適,而且這裡沒有給出具體的說明文字 shift f2開啟場景面板,在scene1前加乙個場景命名loading 在loading做兩個層,乙個action層,乙個層用來放置loading效果的mc ...

乙個flash loading效果

在公司裡做動畫時候做的乙個loading的效果,可以參考但不要直接用,因為裡面有一些自己的mc不一定合適,而且這裡沒有給出具體的說明文字 shift f2開啟場景面板,在scene1前加乙個場景命名loading 在loading做兩個層,乙個action層,乙個層用來放置loading效果的mc ...