發(fā)現(xiàn)物體輪廓的一個(gè)簡單方法就是使用N·V,其中N為法向量,V為頂點(diǎn)到眼睛(即攝像機(jī))的向量。N·V度量了相對于當(dāng)前視點(diǎn)表面的可見程度,當(dāng)N·V是正值時(shí)一個(gè)點(diǎn)是可見的,而當(dāng)N·V為負(fù)的時(shí)候這個(gè)點(diǎn)被隱藏。N·V接近0的點(diǎn)代表了從可見到隱藏的轉(zhuǎn)變——這些點(diǎn)就是在或者接近物體的輪廓上的點(diǎn),通過對一個(gè)1D紋理采樣(簡單情況下,只有黑白兩個(gè)像素寬度,一個(gè)像素高度),可以得到類似于階梯函數(shù)的效果,shader代碼片段如下:
float edge = max
(dot
(N , V
) ,
0);
edge = tex1D
(edgeSampler , edge
);
color = edge*color
可以通過1D紋理的寬度來控制描邊的粗細(xì),如下圖所示:

通過if-else的形式給出過濾閥值也許更簡單,但效果卻沒有紋理采樣好。