非真實感渲染

2021-08-11 18:02:35 字數 1771 閱讀 4625

非真實感渲染的定義:就是使用一些渲染方法使得畫面達到某些特殊的繪畫風格相似的效果,簡稱npr。

渲染輪廓線的方式:常見渲染方式如下:

1.基於觀察角度和表面法線的輪廓線渲染:這種方法就是使用視角方向和法線方向的點乘結果來得到輪廓資訊。但是很多模型渲染出來的描邊效果卻不盡人意,而且也不能控制輪廓線風格的渲染。

2.過程式幾何輪廓線渲染:這種方法就是使用兩個pass渲染,第乙個pass用來繪製背面的片面並且使用一些技術讓它的輪廓可見。第二個pass再正常渲染正面的麵片。但是這種方法不適用平整的立方體模型,而且也不能控制輪廓線風格的渲染。

3.基於影象處理的輪廓線渲染:這種方法就是使用邊緣檢測的方式來識別輪廓資訊。但是像桌子上紙張這種一些深度和法線變化小的輪廓卻無法被檢測出來,而且也不能控制輪廓線風格的渲染。

4.基於輪廓邊檢測的輪廓線渲染:就是通過判斷一條邊相鄰的兩個麵片是否滿足(n0.v >0) # (n1.v > 0)計算公式,也就是一條邊相鄰兩個麵片是否乙個朝正面,乙個朝背面

的方式來精確的獲取乙個輪廓邊,然後按照自己想要的風格來直接渲染它們。但是由於逐幀提取額輪廓邊,所以幀之間會出現跳躍性。

5.混合1~4方式的輪廓線渲染:也就是首先精確的獲取輪廓邊,把模型和輪廓邊渲染到紋理當中,再使用影象處理的方式識別輪廓邊,並在影象空間中實現不同風格式的渲染。

**風格的渲染:使用漫反射係數對一張紋理進行取樣,以控制漫反射的色調。然後對輪廓線渲染來進行描邊。並控制好高光反射係數,讓高光係數和閾值進行比較,使高光區域邊緣平滑漸變,從而實現**風格的渲染。實現**如下:

// 這個shader用來繪製模型背面並使視角方向按照法線進行偏移,使輪廓線渲染可以看見

subshader

pass ;

struct v2f ;

v2f vert (a2v v)

float4 frag(v2f i) : sv_target

endcg

}

// 這個shader主要對漫反射進行紋理取樣並且控制高光區域邊緣漸變

v2f vert (a2v v)

float4 frag(v2f i) : sv_target

素描風格的渲染:使用6張素描紋理進行渲染。在頂點著色器中計算逐頂點光照,根據光照結果決定6張素描紋理的混合權重,並傳遞給片元著色器,然後在片元著色器中根據這些權重來混合6張紋理的取樣結果,從而實現素描風格的渲染。實現**如下:

v2f vert(a2v v)  else if (hatchfactor > 5.0)  else if (hatchfactor > 4.0)  else if (hatchfactor > 3.0)  else if (hatchfactor > 2.0)  else if (hatchfactor > 1.0)  else 

o.worldpos = mul(unity_objecttoworld, v.vertex).xyz;

transfer_shadow(o);

return o; }

fixed4 frag(v2f i) : sv_target

注意:

1.step(p1,p2)函式的意思就是p2小於p1時返回0否則返回1。而smoothstep(-w, w, p)則表示p在[-w,w]之間時返回的是0到1之間的插值,否則如果p小於-w則返回0,如果p大於w則返回1。

2.fwidth函式用來獲取相鄰畫素之間的近似導數值。

learnopencv非真實感渲染

邊緣保留過濾器 edgepreservingfilter 輸出3通道影象 recurs filter 遞迴過濾 1,normconv filter 歸一化卷積 2。使用recurs filter選項的速度比normconv filter快3.5倍。當不需要銳化並且速度很重要時,應使用recurs f...

幹細胞技能醫療真實感觸

最開始接觸幹細胞技能醫療是通過朋友介紹的。結婚多年以來,對家庭的操心和工作上的壓力,導致我心力憔悴。狀況日益下降,身體也開始呈現早衰的跡象,為此我煩心不以。食補,藥補,去美容店做各種保養也無濟於事,家裡人看到我的狀況也很是疼愛,通過多方探問,了解到幹細胞技能醫療。上網科普了一下幹細胞常識,幹細胞是一...

真實感場景繪製(附原始碼)

首先給出繪製效果圖 說明 本系統繪製了乙個真實感的三維場景,並實現場景漫遊。使用按鍵 或w s a d控制運動方向,pgdn和pgup可以改變觀察者的高度,滑鼠控制轉向,按鍵 f 可以開啟和關閉 霧氣 esc退出程式。本場景中繪製了牆壁與地面 天空 石柱 箱子 玻璃球 雪人 霧等物件,下面將依次分析...