Unity Stencil 模板測試概要
阿新 • • 發佈:2018-12-18
模板測試與透明度測試以及深度測試類似,模板測試也是用來決定一個畫素點是否渲染的過程。其中要用到的模板緩衝區與顏色緩衝區以及深度緩衝區類似,模板緩衝區可以為螢幕上的為每個畫素點儲存一個無符號整數值(通常的話是個8位整數)。模板測試發生在透明度測試(alpha test)之後,深度測試(depth test)之前。其中所有的測試都通過,才會更新顏色緩衝區中的顏色。
一般來說,stencil完整語法格式如下:
stencil{ Ref referenceValue ReadMask readMask WriteMask writeMask Comp comparisonFunction Pass stencilOperation Fail stencilOperation ZFail stencilOperation }
關鍵字 | 實際意義 | 預設值 |
Ref | 作為與緩衝區中的值比較的參考值。 | 無 |
ReadMask | (ref & readMask Comp函式 stencilBuffer & readMask)的bool值決定是否通過模板測試 | 255 |
WriteMask | (ref & writeMask)的值在修改方式為replace的情況,整數值將覆蓋buffer,其他修改方式無效 | 255 |
Comp | 定義參考值與模板值比較的方式,即決定的是模板測試通過與否的方式。 | Always |
Pass | 定義模板測試與深度測試皆通過 |
Keep |
Fail | 定義模板測試不通過時,基於參考值對模板值的修改方式。 | Keep |
ZFail | 定義模板測試通過,深度測試不通過時,基於參考值對模板值的修改方式。 | Keep |
ComparisonFunction可選型別: | |
Greater |
相當於“>”操作,即僅當左邊>右邊,模板測試通過,渲染畫素 |
GEqual |
相當於“>=”操作,即僅當左邊>=右邊,模板測試通過,渲染畫素 |
Less |
相當於“<”操作,即僅當左邊<右邊,模板測試通過,渲染畫素 |
LEqual |
相當於“<=”操作,即僅當左邊<=右邊,模板測試通過,渲染畫素 |
Equal |
相當於“=”操作,即僅當左邊=右邊,模板測試通過,渲染畫素 |
NotEqual |
相當於“!=”操作,即僅當左邊!=右邊,模板測試通過,渲染畫素 |
Always | 不管公式兩邊為何值,模板測試總是通過,渲染畫素 |
Never | 不敢公式兩邊為何值,模板測試總是失敗 ,畫素被拋棄 |
StencilOperation可選型別: |
|
Keep | 保留當前緩衝中的內容,即stencilBufferValue不變 |
Zero | 將0寫入緩衝,即stencilBufferValue值變為0 |
Replace | 將參考值寫入緩衝,即將referenceValue賦值給stencilBufferValue |
IncrSat | stencilBufferValue加1,如果stencilBufferValue超過255了,那麼保留為255,即不大於255 |
DecrSat | stencilBufferValue減1,如果stencilBufferValue超過為0,那麼保留為0,即不小於0 |
Invert | 將當前模板緩衝值(stencilBufferValue)按位取反 |
IncrWrap | 當前緩衝的值加1,如果緩衝值超過255了,那麼變成0,(然後繼續自增) |
DecrWrap | 當前緩衝的值減1,如果緩衝值已經為0,那麼變成255,(然後繼續自減) |