營(yíng)銷網(wǎng)站參考今日熱搜榜排名
一、模板測(cè)試(Stencil Test)
模板測(cè)試可以實(shí)現(xiàn)的一些效果圖
1.是什么
①?gòu)匿秩竟芫€出發(fā):模板測(cè)試是在逐片源操作階段,透明測(cè)試之后,深度測(cè)試之前的位置。
②從書面概念上理解
說(shuō)到模板測(cè)試,就要先說(shuō)道模板緩沖區(qū)。模板緩沖區(qū)與顏色緩沖區(qū)和深度緩沖區(qū)類似,模板緩沖區(qū)可以為屏幕上的每個(gè)像素點(diǎn)保存一個(gè)無(wú)符號(hào)證書值(通常的話是個(gè)8位整數(shù))。這個(gè)值的具體一一視程序的具體應(yīng)用而定。在渲染的過(guò)程中,可以用這個(gè)值與一個(gè)預(yù)先設(shè)定的參考值相比較,根據(jù)比較的結(jié)果來(lái)決定是否更新相應(yīng)的像素點(diǎn)的顏色值。這個(gè)比較的過(guò)程被稱為模板測(cè)試。模板測(cè)試發(fā)生在透明測(cè)試之后,深度測(cè)試之前。如果模板測(cè)試通過(guò),則相應(yīng)的像素點(diǎn)更新,否則不更新。
③從邏輯上理解:通過(guò)一些邏輯判斷,針對(duì)當(dāng)前像素進(jìn)行取舍,如下圖。stencilBufferValue是模板緩存中的值,其它由我們定義
2.語(yǔ)法表示
- Ref referenceValue //參考值
- ReadMask readMask //讀取掩碼,取值范圍也是0~255的整數(shù),默認(rèn)255,二進(jìn)制11111111,即讀取的時(shí)候不對(duì)referenceValue和stencilBufferValue產(chǎn)生效果,讀取的還是原始值
- WriteMask writeMask //輸出掩碼,當(dāng)寫入模板緩沖時(shí)進(jìn)行掩碼操作(按位與【&】),writeMask取值范圍是0~255的整數(shù),默認(rèn)值也是255,即當(dāng)修改stencilBufferValue值時(shí)寫入的仍是原始值
- Comp comparisionFunction //比較方式,關(guān)鍵字見下圖
- Pass stencilOperation //條件滿足后的處理
- Fail stencilOperation //條件不滿足后的處理
- ZFail stencilOperation //深度測(cè)試失敗后的處理
ComparisionFunction
StencilBufferValue(Pass,Fail,ZFail)
3.模板測(cè)試流程
4.模板測(cè)試總結(jié)
- 使用模板緩沖區(qū)最重要的兩個(gè)值:當(dāng)前模板緩沖之(stencilBufferValue)和模板參考值(referenceValue)
- 模板測(cè)試主要就是對(duì)這兩個(gè)值使用特定的比較操作:Never,Always,Less,LEqual,Greater,Equal等等
- 模板測(cè)試之后要對(duì)模板緩沖區(qū)的值(stencilBufferValue)進(jìn)行更新操作,更新操作包括:Keep,Zero,Replace,IncrSat,DecrSat,Invert等等
- 模板測(cè)試之后可以根據(jù)結(jié)果對(duì)模板緩沖區(qū)做不同的更新操作,比如模板測(cè)試成功操作Pass,模板測(cè)試失敗操作Fail,深度測(cè)試失敗操作ZFail,還有針對(duì)正面和背面精確更新操作PassBack,PassFront,FailBack等等
5.模板測(cè)試擴(kuò)展
- 描邊
- 多邊形填充
- 反射區(qū)域控制
- shadow volume陰影渲染
- 等等
視頻代碼 Stencil-Test
StencilMask
ToonLitStencilMasked