1. 程式人生 > >Unity Stencil 模板測試概要

Unity Stencil 模板測試概要

模板測試與透明度測試以及深度測試類似,模板測試也是用來決定一個畫素點是否渲染的過程。其中要用到的模板緩衝區與顏色緩衝區以及深度緩衝區類似,模板緩衝區可以為螢幕上的為每個畫素點儲存一個無符號整數值(通常的話是個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,(然後繼續自減)