UnityShader 理解深度測試

2021-07-29 07:14:05 字數 1006 閱讀 4916

深度測試(ztest):把當前片元的深度值與已經存在深度緩衝區中的深度值進行比較,未通過測試的片元將被捨棄.例如小於時,捨棄該片元,或者大於時捨棄等.深度測試的比較方式是可配置的.通過深度測試的片元深度值是否寫入深度緩衝區,這是通過關閉/開啟深度寫入(zwrite)來做到的.

關於物體被障礙物遮擋後,顯示其輪廓的效果.

球體處於三個不同位置的顯示效果圖.

當球遮擋部分的片元z值大於平面的z值(離相機越遠z值越大,反之越小)時,遮擋部分顯示紅色邊緣光.而未被遮擋部分的片元z值小於平面的z值則顯示藍色.只要做好深度測試部分的操作,就可控制物體被遮擋時和未被遮擋時的渲染.

下圖為球正好與平面相交時的效果.

此處使用兩個pass分別控制被遮擋部分與未被遮擋部分的渲染.每個pass都會經歷乙個完整渲染管線流程,多pass時按順序執行.

按圖①②③順序渲染,示例**如下

....

頂點著色器和片元著色器實現見原始檔

....

subshader

lod 100

pass

//繼續處理上乙個pass處理後的快取區資料

pass

}

此時,渲染效果順序是②①③,如果直接把兩個pass也如此簡單地顛倒順序,最後會發現無論怎麼調節material引數和移動球的位置,球都只會顯示藍色..

正確的寫法如下~

....

頂點著色器和片元著色器實現見原始檔

....

subshader

lod 100

pass

//繼續處理上乙個pass處理後的快取區資料

pass

}

iframe深度理解

前言 如果你的頁面是乙個後台管理頁面,那麼你一定對iframe不陌生。從h5定稿開始,在涉及框架引入頁面時,統一建議使用iframe來進行相關的資源嵌入。使用場景 1 通常在不希望整體頁面跳轉,只需要主體頁面跳轉,則需要加入iframe標籤來作為展示頁面的視窗,通常在管理後台 qq郵箱等管理介面應用...

深度理解函式

我們知道每一次函式的呼叫都是乙個過程,這個過程我們通常稱為 函式的呼叫過程。這個過程要為函式開闢棧空間,用於本次函式的呼叫過程中臨時變數的儲存 現場保護。這塊棧空間被稱為函式棧幀。在理解函式的棧幀之前,我們需要了解幾個特殊的暫存器和一些彙編指令。eip 程式計數器,存放當前指令的下一條指令的位址 e...

深度理解指標

首先,指標是什麼呢?我們看這樣一段 includeint main 知道了這些以後,讓我們再來看幾個有關指標的定義。指標陣列 指標陣列是陣列,是乙個存放指標的陣列。舉個栗子 int arr1 10 表示每個陣列元素是一級指標,int表示指標指示的型別是整型 char arr2 4 表示每個陣列元素是...