日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HLSL的一些常见渲染特效的实现

發(fā)布時間:2024/4/17 编程问答 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HLSL的一些常见渲染特效的实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
http://group.lehu.shu.edu.cn/Article.aspx?aid=147793

原文作者:潘李亮
xheartblue@163.com



關(guān)于學(xué)習(xí),中國有句古話叫“學(xué)以致用”,可見把學(xué)到的東西用于實際實踐中是多么的重要,現(xiàn)在學(xué)習(xí)Direct3D/HLSL的人非常多,教程也非常多。但是很多人不知道看完這些教程后該干什么,或者說可以怎么利用學(xué)到的知識,本文針對已經(jīng)學(xué)習(xí)過Direct3D/HLSL的初學(xué)者,講述如果將HLSL用于數(shù)字圖像處理,帶領(lǐng)大家一起體會HLSL的強大。



本文會對Direct3D/HLSL做一個簡單的介紹,但是假設(shè)讀者已經(jīng)了解和掌握了Direct3D/HLSL的基本知識。



簡介.



1)Direct3D和HLSL



眾所周知,Direct3D是微軟開發(fā)的用于編寫Windows下高性能圖形程序的3D API。通過Direct3D,我們可以訪問高速的圖形加速卡。它是DirectX眾多成員的一部分。



HLSL 全稱High Level Shading Language . 是MS推出Direct3D 9時的一個重要更新。所謂的Shading Language還需要從Direct3D的圖形管道說起,Direct3D在Direct3D 8以前只能工作在固定管道(Fixed Function Pipe-line)的模式下,在固定管道模式下,圖元從提交到被轉(zhuǎn)化成可以顯示的像素是按照實現(xiàn)定義好的流程和算法來完成,可以認(rèn)為是固化在硬件中的死功能。



從Direct3D 8開始,微軟在Direct3D中引入了可編程管道(Programable Function
Pipeline)的概念,在可編程管道中,開發(fā)人員可以自己編寫用于處理頂點和像素的程序,這些程序是運行在GPU上而不是CPU上的。在Direct3D里面,用于處理頂點的程序叫Vertex Shader,用于處理像素的叫Pixel Shader。(目前最新的Direct3D10中又引入了Geometry Shader的概念)。因為硬件的水平在進步,所以可編程管道的處理能力也在不斷的提高,根據(jù)不同的硬件能力,Shader的版本也已經(jīng)有對應(yīng)的不同版本。從Direct3D發(fā)布的最早的Shader Model 1.0到現(xiàn)在主流的Shader Model 3.0,可編程管道已經(jīng)能提供一點范圍的通用編程能力了,這就是所謂的GPGPU。



從名字上可知,HLSL是一種高級語言(High Level),那么必然有與之對應(yīng)的Low Level Shading
Language,這個低級的語言就是ASM的Shader。它是類似于匯編語言,難以編寫和維護,而HLSL則跟我們熟悉的C/C++語言非常類似。大大降低了開發(fā)人員學(xué)習(xí)的成本。HLSL本身就是微軟和nVidia聯(lián)合開發(fā)的,nVidia的版本稱為Cg,也就是C
for Graphics??上攵?#xff0c;它和C是有同樣的血統(tǒng)的。



本文不是Direct3D和HLSL的教程,如果讀者覺得以上的概念還比較陌生,請先學(xué)習(xí)Direct3D的基礎(chǔ)知識。同時關(guān)于如何在Direct3D應(yīng)用程序中使用HLSL編寫的Vertex Shader和Pixel Shader,請參閱其它的教程和微軟的DirectX SDK。



2)RenderMonkey簡介



現(xiàn)在的開發(fā)人員可能都比較熟悉IDE的工作模式,尤其是使用Visual Studio一類開發(fā)工具的Windows程序開發(fā)人員。在一個統(tǒng)一的開發(fā)環(huán)境中,可以編寫和調(diào)試程序。HLSL作為一種新的語言,GPU編程作為一種新事物,目前還沒有很好的IDE能完整的支持編寫,調(diào)試一體化的工作方式。在本文我們將使用ATI的一個相對比較好用的開發(fā)HLSL的IDE: RenderMonkey。



RenderMonkey是由前ATI開發(fā)的,用于編寫Shader,并調(diào)試Shader的一個工具。由于RenderMonkey支持插件,所以RenderMonkey既可以編寫OpenGL的GLSL也可以編寫Direct3D的HLSL。它能支持創(chuàng)建RenderTarget,多Pass渲染,可以自由選擇用哪個shader model來編譯代碼。并能加亮顯示shader代碼。



經(jīng)典的RenderMonkey界面如下圖






?
?
?
?
?
?
?
?
?
?
?
?







左邊為工作區(qū),右邊為預(yù)覽區(qū)域。下面為信息輸出區(qū)。在左邊的工作區(qū)里可以看到。我們可以對Shader的工程進行分組,其中每一個可以獨立工作的工程稱為一個Effect。在同一時候預(yù)覽區(qū)中只能預(yù)覽當(dāng)前激活的Effect。每個Effect由不同的對象組成,其中比較重要的對象如下:



1) Pass . 這個pass就是渲染中常提到的pass.代表一遍的渲染



2) 幾何體。就是類紅色茶壺表示的,它代表在渲染中使用的幾何體。



3) 紋理對象和RenderTarget對象(用一個鉛筆表示)



4) Shader中用到的參數(shù),這些參數(shù)可以是自定義的,也可以是預(yù)定義的(比如當(dāng)前的觀察矩陣,攝像機的位置等參數(shù))。



5) 每個pass中用到的Shader。這些shader可以在RenderMonkey的代碼編輯器中進行編輯,并調(diào)用命令來編譯。



因為文章篇幅的關(guān)系,也不采用編寫Direct3D程序加載HLSL的方式來做演示程序,而是直接使用RenderMonkey來作為演示的平臺。關(guān)于如何使用RenderMonkey,請參照RenderMonkey的幫助,或者打開RenderMonkey自帶的例子,很容易就能掌握這個工具的使用方法。



GPGPU



本文將要介紹的是如何用HLSL來實現(xiàn)PhotoShop的濾鏡效果,也就是說需要通過GPU來進行數(shù)字圖像處理。這是目前很流行的GPGPU的應(yīng)用的一種。



我們知道,GPU和CPU的工作方式和用途都是不同的,CPU是通用的處理器,而GPU是專用于處理3D圖形顯示的,因此CPU的指令集更加豐富,而GPU的指令集更加有針對性,因此這就決定了GPU在犧牲了CPU的靈活性的前提上有更快的運行速度。GPU特別適合處理那種可以大規(guī)模并行的算法,比如某些數(shù)字圖像處理算法。



因為目前我們的程序只能通過Direct3D的API才能訪問到GPU,一般我們采用Pixel
Shader來進行GPGPU,所以我們要使用GPU來處理數(shù)據(jù)的時候,必須完成以下幾件事:



1).將數(shù)據(jù)提交給GPU



2).調(diào)用對應(yīng)命令讓GPU開始處理數(shù)據(jù)



3).從GPU哪里取回處理完畢的數(shù)據(jù)。



我們可以通過兩種方法將數(shù)據(jù)提交到GPU,紋理和shader的參數(shù),紋理中一般保存我們需要進行處理的數(shù)據(jù),而shader參數(shù)則一般是用于數(shù)據(jù)處理算法需要用到的一些參數(shù)。當(dāng)然這也不是絕對的。



當(dāng)數(shù)據(jù)已經(jīng)準(zhǔn)備完畢后,我們調(diào)用Direct3D的drawPrimitive函數(shù)在屏幕上繪制一個紋理相同大小的矩形,把GPGPU的算法寫到用于繪制這個矩形的Pixel Shader中。當(dāng)Direct3D開始繪制這個矩形以后,會為每一個象素調(diào)用一次整個Pixel Shader,然后把Pixel Shader的輸出寫入到RenderTarget中,因為我們繪制的矩形的大小和紋理的大小是一致的,所以輸出象素和紋理的象素可以做到一一對應(yīng)的關(guān)系,也就是說紋理中的每一個象素在經(jīng)過Pixel Shader的運算后被輸出掉RenderTarget里,等于對這個數(shù)據(jù)調(diào)用了一次我們需要的算法。我們知道現(xiàn)代的GPU中往往有大量的Pixel Shader處理單元,而這些處理都是可以并行運行的,可想而知,這個處理是非常快速的。



經(jīng)過前面的步驟,處理完的數(shù)據(jù)已經(jīng)到了RenderTarget里了,我們可以事先自己創(chuàng)建一個RenderTarget(通常和輸入紋理等大)來接受步驟2中的數(shù)據(jù),然后Lock這個RenderTarget取回數(shù)據(jù)。也可以在步驟二中直接把圖象繪制到屏幕上,通過Capture屏幕來得到輸出(對于圖象處理也夠了,就是速度慢,而且顯得非常傻)。



GPGPU簡單介紹到這里。詳細(xì)的GPGPU資料請參考www.gpgpu.org。 同時nvidia的網(wǎng)站和發(fā)布的SDK上也有很多關(guān)于GPGPU的例子。



接下來我們使用RenderMonkey來搭建一個用于數(shù)字圖像處理的架子,以實現(xiàn)類似PhotoShop的濾鏡效果



RenderMonkey圖像處理的架子-圖像黑白化



下面我們通過一個簡單的例子,先來完成一個最簡單的圖像處理-把圖像黑白化。來說明RenderMonkey如何來處理數(shù)字圖像。



Render Monkey和VC類似,內(nèi)置了一些工程代碼。在這里我們在RenderMonkey的工作區(qū)菜單里選擇Add Effect ->
DirectX->Screen-AlignedQuad. 在生成的工程中,我們看到RenderMonkey為我們顯示了一個默認(rèn)的圖片,首先我們就是要修改這個圖片,我們雙擊那個base圖片對應(yīng)的節(jié)點,選擇一個我們要演示的圖片。如下圖。







接下來,我們要開始進行我們關(guān)鍵的一步,編寫處理圖像的算法,我們雙擊剛才建立的項目中的single pass -> pixel shader . 開始編輯Pixel
Shader的代碼。



我們知道,一個RGB顏色的亮度和各個分量之間的關(guān)系的公式為:



GrayValue = 0.3 * R + 0.59*G + 0.11 *B



根據(jù)這個公式,我們的代碼如下:



sampler2D Texture0;

float4?
main( float2 texCoord? : TEXCOORD0 ) : COLOR



{



??
float4 _inColor = tex2D( Texture0, texCoord );



??
float h = 0.3 * _inColor.x + 0.59 *
_inColor.y + 0.11* _inColor.z;

?? float4 _outColor = float4(h,h,h,1.0);

?? return _outColor;



}



我來詳細(xì)的解釋一下這個Pixel Shader,首先我們定義的的sampler2D Texture0。Texture0就是代表我們輸入的圖像。這個圖像在RenderMonkey的工作區(qū)中用兩部分表示,首先需要在工作區(qū)中創(chuàng)建一個圖像對象bas,然后需要在用到這個紋理圖像的pass中創(chuàng)建一個紋理對象Texture0,然后讓這個Texture0指向我們剛才創(chuàng)建的紋理圖像bas,讀者應(yīng)該注意到了紋理對象的名字就是我們Shader里的sampler2D變量的名字,不錯,RenderMonkey就是以這種方法把shader代碼中的變量名字和工作區(qū)中的對象關(guān)聯(lián)起來.不光紋理如此,其它的float4/float3/float2/float變量都如此.



接下來的main函數(shù)中,我們通過紋理采樣的方式得到當(dāng)前需要繪制的像素,float4 _inColor = tex2D( Texture0, texCoord ); 也就是輸入的顏色。得到輸入顏色后,我們可以通過上面給出的公式來計算出這個顏色的灰度值,并用這個值構(gòu)造一個灰度顏色返回給Direct3D。系統(tǒng)就會把這個顏色作為最終的色彩顯示在窗口中,也就是得到一個黑白的圖像。最終結(jié)果如下圖:







圖:圖像去色效果



(注:這個例子是最簡單的HLSL用于圖像處理的例子,如果讀者覺得到目前為止還很有難度,建議重新溫習(xí)一遍Direct3D和HLSL的知識)。



通過這個例子,我們已經(jīng)基本了解了RenderMonkey處理圖像的步驟和流程,下面我們通過分析一些更加復(fù)雜一點的例子來體會HLSL的強大能力



l 入門效果之浮雕



"浮雕"圖象效果是指圖像的前景前向凸出背景。常見于一些紀(jì)念碑的雕刻上,要實現(xiàn)浮雕其實非常簡單。我們把圖象的一個象素和左上方的象素進行求差運算,并加上一個灰度。這個灰度就是表示背景顏色。這里我們設(shè)置這個插值為128 (圖象RGB的值是0-255)。同時,我們還應(yīng)該把這兩個顏色的差值轉(zhuǎn)換為亮度信息.否則浮雕圖像會出現(xiàn)彩色J



在使用HLSL處理浮雕效果的時候,兩個問題我們需要注意一下。



其中一個圖象邊界,寫過C++實現(xiàn)浮雕效果的朋友都知道,在處理邊界象素的時候可能是取不到左上角象素的, 這個時候就應(yīng)該左做特殊處理,通常我們把邊界位置的浮雕結(jié)果設(shè)置成背景顏色,但是使用HLSL的時候我們不需要在HLSL的shader中去對圖象的邊界做特殊處理,但是我們需要對紋理設(shè)置濾波器, 這個濾波器我們設(shè)置為CLAMP模式就可以了.



第二個需要處理的問題是, 我們知道PixelShader中,紋理的采樣坐標(biāo)是0-1.0, 如果我們要取到左上我們需要知道紋理圖象的大小,這樣才能把一個象素的的偏移轉(zhuǎn)換成0-1.0的值是多少, 假設(shè)紋理的大小是[w,h],當(dāng)前紋理坐標(biāo)是[u,v],那么它左上角的象素的紋理坐標(biāo)就是[u -1.0/w, v –
1.0/h].RenderMonkey中無法知道這個紋理圖像的大小,當(dāng)然如果我們自己用VC++寫一個程序的話,我們可以在加載圖像或者從IDirect3DTexture9對象中得到紋理大小.然后當(dāng)作一個constant常量設(shè)置給HLSL就可以了. 當(dāng)然也可以偷懶—假設(shè)紋理的大小就是1024
x 1024—得到的效果也是可以接受的.



好了,現(xiàn)在我來展示一下用來得到浮雕效果的HLSL的代碼:



sampler2D Texture0;



float2????? TexSize;



float4 main( float2 texCoord? : TEXCOORD0 ) : COLOR



{



??
float2?
upLeftUV = float2(texCoord.x - 1.0/TexSize.x , texCoord.y -
1.0/TexSize.y);



??
float4?
bkColor = float4(0.5 , 0.5 , 0.5 , 1.0);



??
float4?
curColor??? = ?tex2D( Texture0, texCoord );



??
float4?
upLeftColor =? tex2D( Texture0, upLeftUV );



??
//相減得到顏色的差



??
float4?
delColor = curColor - upLeftColor;



??
//需要把這個顏色的差設(shè)置



??
float?
h = 0.3 * delColor.x + 0.59 * delColor.y + 0.11* delColor.z;



??
float4?
_outColor = ?float4(h,h,h,0.0)+ bkColor;



??
return?
_outColor;



}









原圖 浮雕化后的圖像



讀者應(yīng)該會發(fā)現(xiàn),相對于C++版本的代碼,HLSL的代碼顯得非常的干凈和利索.沒有分支,沒有循環(huán).最重要的是它的速度非常快,對一個2048x2048的圖像完全可以做到>30fps的實時處理能力而不會耗費很多的CPU時間!



l 入門效果之馬賽克



接下來我們完成一個更加常見的效果—馬賽克.圖片的馬賽克就是把圖片的一個相當(dāng)大小的區(qū)域用同一個點的顏色來表示.可以認(rèn)為是大規(guī)模的降低圖像的分辨率,而讓圖像的一些細(xì)節(jié)隱藏起來, 比如電視中要秀一下某個罪犯的身材,卻又不能展示他的臉,這個時候我們就可以給他的臉加一個馬賽克.



用HLSL代碼實現(xiàn)馬賽克是非常簡單的,但是同樣的,我們需要一些額外的步驟,第一步就是先把紋理坐標(biāo)轉(zhuǎn)換成圖像實際大小的整數(shù)坐標(biāo).接下來,我們要把圖像這個坐標(biāo)量化---比如馬賽克塊的大小是8x8象素。那么我們可以用下列方法來得到馬賽克后的圖像采樣值,假設(shè)[x.y]為圖像的整數(shù)坐標(biāo):



[x,y]mosaic = [ int(x/8)*8 ,
int(y/8)*8].



得到這個坐標(biāo)后,我們只要用相反的方法,把整數(shù)坐標(biāo)轉(zhuǎn)換回到0-1.0的紋理坐標(biāo)。



具體的馬賽克效果代碼如下:



sampler2D Texture0;



float2???
TexSize;



float2???
mosaicSize = float2(8,8);



float4 main( float2 texCoord? : TEXCOORD0 ) : COLOR



{



??
//得到當(dāng)前紋理坐標(biāo)相對圖像大小整數(shù)值。



??
float2?
intXY = float2(texCoord.x * TexSize.x , texCoord.y * TexSize.y);



??
//根據(jù)馬賽克塊大小進行取整。



??
float2?
XYMosaic?? = float2(int(intXY.x/mosaicSize.x) * mosaicSize.x,



?????????????????????????????? int(intXY.y/mosaicSize.y) * mosaicSize.y );



??
//把整數(shù)坐標(biāo)轉(zhuǎn)換回紋理采樣坐標(biāo)



??
float2? UVMosaic?? = float2(XYMosaic.x/TexSize.x ,
XYMosaic.y/TexSize.y);



??
return tex2D( Texture0, UVMosaic );



}



經(jīng)過這個Shader處理后的圖像結(jié)果如下:







圖:馬賽克處理效果



讀者可能會發(fā)現(xiàn)這個馬賽克太普通了,確實它不夠新穎,下面我們來改良一下,我們希望達(dá)到這樣一個效果:馬賽克區(qū)域不是方的,而是圓的,圓形區(qū)域以外,我們用圖像原來的顏色覆蓋。這樣我們需要改變一下代碼。



首先求出原來馬賽克區(qū)域的正中心(原來是左上角):然后計算圖像采樣點到這個中心的距離,如果在馬賽克圓內(nèi),就用區(qū)域的中心顏色,否則就用原來的顏色。改良后的代碼如下,這里我們把馬賽克區(qū)域大小調(diào)節(jié)成16x16。這樣效果更明顯。



sampler2D?? Texture0;



float2?????
TexSize;

float2???
mosaicSize = float2(16,16);



float4 ps_main( float2 texCoord? : TEXCOORD0 ) : COLOR



{



??
float2?
intXY = float2(texCoord.x * TexSize.x , texCoord.y * TexSize.y);



??
//馬賽克中心不再是左上角,而是中心



??
float2?
XYMosaic?? = float2(int(intXY.x/mosaicSize.x) *
mosaicSize.x,?? int(intXY.y/mosaicSize.y) * mosaicSize.y )
+ 0.5 * mosaicSize;



??
//求出采樣點到馬賽克中心的距離

?? float2?
delXY = XYMosaic - intXY;



??
float??
delL? = length(delXY);

?? float2?
UVMosaic?? = float2(XYMosaic.x/TexSize.x ,
XYMosaic.y/TexSize.y);



??
float4?
_finalColor;



??
//判斷是不是處于馬賽克圓中。



??
if(delL< 0.5 * mosaicSize.x)



??????
_finalColor = tex2D( Texture0, UVMosaic );



??
else



??????
_finalColor = tex2D( Texture0, texCoord );



??
return _finalColor;



}



這個代碼相對上面的代碼復(fù)雜了一些,加了一個分支if/else。注意,GPU是個高度并行的處理器,過多分支會降低Shader的運行速度。這個改良的馬賽克效果如下







圖: 改良后的馬賽克效果



l 進階效果之銳化模糊



以上兩個效果相對比較簡單,姑且稱之為入門效果, 它并沒有用到太多數(shù)字圖像處理或者信號處理方面的知識。接下來我們要介紹稍微復(fù)雜一點的效果,第一個就是圖像的模糊和銳化。



圖像的模糊又成為圖像的平滑(smoothing),我們知道人眼對高頻成分是非常敏感的,如果在一個亮度連續(xù)變化的圖像中,突然出現(xiàn)一個亮點,那么我們很容易察覺出來,類似的,如果圖像有個突然的跳躍—明 顯的邊緣,我們也是很容易察覺出來的。這些突然變化的分量就是圖像的高頻成分。人眼通常是通過低頻成分來辨別輪廓,通過高頻成分來感知細(xì)節(jié)的(這也是為什
么照片分辨率低的時候,人們只能辨認(rèn)出照片的大概輪廓,而看不到細(xì)節(jié))。但是這些高頻成分通常也包含了噪聲成分。圖像的平滑處理就是濾除圖像的高頻成分。



那么如何才能濾除圖像的高頻成分呢?我們先來介紹一下圖像數(shù)字濾波器的概念。



簡單通俗的來說,圖像的數(shù)字濾波器其實就是一個n
x n的數(shù)組(數(shù)組中的元素成為濾波器的系數(shù)或者濾波器的權(quán)重,n稱為濾波器的階)。對圖像做濾波的時候,把某個像素為中心的nxn個像素的值和這個濾波器做卷積運算(也就是對應(yīng)位置上的像素和對應(yīng)位置上的權(quán)重的乘積累加起來),公式如下





其中x , y 為當(dāng)前正在處理的像素坐標(biāo)。



通常情況下,我們?yōu)V波器的階數(shù)為3已經(jīng)足夠了,用于模糊處理的3x3濾波器如下





。



經(jīng)過這樣的濾波器,其實就是等效于把一個像素和周圍8個像素一起求平均值,這是非常合理的---等于把一個像素和周圍幾個像素攪拌在一起—自然就模糊了J



用來對一個圖像做濾波處理的函數(shù)如下:



//用來做濾波操作的函數(shù)



float4 dip_filter(float3x3 _filter , sampler2D _image, float2 _xy, float2 texSize)



{



???
//紋理坐標(biāo)采樣的偏移



????
float2 _filter_pos_delta[3][3] =



????
{



???????
{ float2(-1.0 , -1.0) , float2(0,-1.0), float2(1.0 , -1.0) },



???????
{ float2( 0.0 , -1.0) , float2(0, 0.0), float2(1.0 ,? 0.0) },



???????
{ float2( 1.0 , -1.0) , float2(0, 1.0), float2(1.0 ,? 1.0) },



????
};



????
//最終的輸出顏色



????
float4 final_color = float4(0.0,0.0,0.0,0.0);



????
//對圖像做濾波操作



????
for(int i = 0 ; i < 3 ; i ++ )



????
{



????????
for(int j = 0 ; j < 3 ; j ++)



????????
{



?????????? ?//計算采樣點,得到當(dāng)前像素附近的像素的坐標(biāo)



????????????? float2 _xy_new = float2(_xy.x + _filter_pos_delta[i][j].x ,



??????????????????????????????????? _xy.y +
_filter_pos_delta[i][j].y);





??????????? float2 _uv_new = float2(_xy_new.x/texSize.x ,
_xy_new.y/texSize.y);



????
???????//采樣并乘以濾波器權(quán)重,然后累加



????????????? final_color += tex2D( _image, _uv_new ) * _filter[i][j];



????????
}



????
}



????
return final_color;



}



剩下的工作,我們就是定義一個用來進行模糊的濾波器模板,并調(diào)用dip_filter這個函數(shù)就可以了。代碼如下:



sampler2D Texture0;



float2???
TexSize;



float4 main( float2 texCoord? : TEXCOORD0 ) : COLOR



{



??
float2?
intXY = float2(texCoord.x * TexSize.x , texCoord.y * TexSize.y);



??
//用于模糊操作的濾波器



??
float3x3 _smooth_fil = float3x3 (1/9.0 ,1/9.0,1/9.0 ,



??????????????????????????????????? 1/9.0
,1/9.0,1/9.0 ,



??????????????? ????????????????????1/9.0 ,1/9.0,1/9.0 );



??
return dip_filter(_smooth_fil , Texture0 ,
intXY, TexSize);



}



以上的模糊濾波器稱為BOX濾波器,是最簡單的濾波器,如果考慮到離開中心像素的距離對濾波器系數(shù)的影響,我們通常采用更加合理的濾波器---高斯濾波器—一種通過2維高斯采樣得到的濾波器,它的模板如下:







很容易看出來,離開中心越遠(yuǎn)的像素,權(quán)重系數(shù)越小。



對于銳化操作,常用的銳化模板是拉普拉斯(Laplacian)模板,這個模板定義如下:







容易看出拉普拉斯模板的作法:先將自身與周圍的8個象素相減,表示自身與周圍象素的差別;再將這個差別加上自身作為新象素的灰度??梢?#xff0c;如果一片暗區(qū)出現(xiàn)了一個亮點,那么銳化處理的結(jié)果是這個亮點變得更亮,這就增強了圖像的細(xì)節(jié)。



下面三副圖分別表示了經(jīng)過BOX濾波。高斯濾波和拉普拉斯濾波后的圖像











BOX 模糊 高斯模糊 拉普拉斯銳化



高斯模糊和拉普拉斯銳化效果的HLSL和BOX的代碼基本一致,就是filter的系數(shù)不同,這里不在列出。



通過這個兩個效果,我們介紹了圖像的濾波操作,這樣的操作,也成為模板操作,它實現(xiàn)了一種鄰域運算(Neighborhood
Operation),即某個象素點的結(jié)果灰度不僅和該象素灰度有關(guān),而且和其鄰域點的值有關(guān)。模板運算在圖象處理中經(jīng)常要用到,可以看出,它是一項非常耗時的運算。有一種優(yōu)化的方法稱為可分離式濾波,就是使用兩個pass來進行x/y方向分別濾波,能讓運算次數(shù)大大減少。而且濾波器階數(shù)越高,優(yōu)勢越明顯。



數(shù)字圖像濾波的時候,同樣還需要注意邊界像素的問題,不過幸好,HLSL能讓邊界處理更加的透明和簡單。



l 進階效果之描邊效果



相對浮雕效果來說,描邊(邊緣檢測)的代碼并不復(fù)雜多少,只是在理論上相對來說稍微復(fù)雜一點,而且效果看上去更加的討人喜歡一些。



我們知道 ,如果在圖像的邊緣處,灰度值肯定經(jīng)過一個跳躍,我們可以計算出這個跳躍,并對這個值進行一些處理,來得到邊緣濃黑的描邊效果。



首先我們可以考慮對這個象素的左右兩個象素進行差值,得到一個差量,這個差量越大,表示圖像越處于邊緣,而且這個邊緣應(yīng)該左右方向的,同樣我們能得到上下方向和兩個對角線上的圖像邊緣。這樣我們構(gòu)造一個濾波器







經(jīng)過這個濾波器后,我們得到的是圖像在這個象素處的變化差值,我們把它轉(zhuǎn)化成灰度值,并求絕對值(差值可能為負(fù)),然后我們定義差值的絕對值越大的地方越黑(邊緣顯然是黑的),否則越白,我們便得到如下的效果:







圖:鉛筆描邊效果



該效果的代碼如下(其中dip_filter函數(shù)代碼同上):



sampler2D Texture0;



float2???
TexSize;



float4 main( float2 texCoord? : TEXCOORD0 ) : COLOR



{



??
float2?
intXY = float2(texCoord.x * TexSize.x , texCoord.y * TexSize.y);



??
float3x3 _pencil_fil = float3x3 (-0.5 ,-1.0? , 0.0 ,



??????????????????????????????????? -1.0 ,? 0.0 , 1.0 ,



?????????????????????????????????? -0.0? , 1.0 , 0.5 );



?



??
float4 delColor =? dip_filter(_pencil_fil , Texture0 , intXY,
TexSize);



??
float?
deltaGray = 0.3 * delColor.x? +
0.59 * delColor.y? + 0.11*
delColor.z;?????????????????

?? if(deltaGray < 0.0) deltaGray = -1.0 *
deltaGray;



??
deltaGray = 1.0 - deltaGray;



??
return float4(deltaGray,deltaGray,deltaGray,1.0);?????? ?????????????



}



上面演示的效果種用到的模板就是一種邊緣檢測器,在信號處理上是一種基于梯度的濾波器,又稱邊緣算子,梯度是有方向的,和邊沿的方向總是正交(垂直)的,在上面的代碼中,我們采用的就是一個梯度為45度方向模板,它可以檢測出135度方向的邊沿。



以上是簡單的邊緣檢測算子,更加嚴(yán)格的,我們可以采樣Sobel算子,Sobel 算子有兩個,一個是檢測水平邊沿的

,另一個是檢測垂直平邊沿的

,同樣,Sobel算子另一種形式是各向同性Sobel算子,也有兩個,一個是檢測水平邊沿的

,另一個是檢測垂直邊沿的

。各向同性Sobel算子和普通Sobel算子相比,它的位置加權(quán)系數(shù)更為準(zhǔn)確,在檢測不同方向的邊沿時梯度的幅度一致。讀者可以自行嘗試Sobel算子的效果,只要修改pencil_filter的值就可以了。



l 高級效果之偽 HDR/Blow



HDR和Blow在現(xiàn)在主流游戲中是非常時髦的效果。



所謂HDR就是高動態(tài)范圍的意思,我們知道,在普通的顯示器和位圖里,每通道都是8-bit,也就是說RGB分量的范圍都是0-255,這用來表示現(xiàn)實中的顏色顯然是遠(yuǎn)遠(yuǎn)不夠的,現(xiàn)實中的圖像的動態(tài)范圍遠(yuǎn)遠(yuǎn)大的多,那么如何在現(xiàn)有的顯示設(shè)備里盡可能的保持更大的動態(tài)范圍,而且讓它能更符合人眼的習(xí)慣就成了圖形學(xué)研究的一個熱點。通常真正的HDR的做法都是采用浮點紋理,把渲染運算的過程中,我們使用16bit的動態(tài)范圍來保存運算結(jié)果,然后我們對運算結(jié)果進行分析,求出這個圖像的中間灰度值,然后對圖像進行調(diào)整映射到LDR的設(shè)備中。但是這樣的算法有兩個非常耗資源的過程,其中一個是浮點紋理,另外一個就是求圖像中間灰度(通常情況是把圖像不停的渲染到RenderTarget,每渲染一次,圖像大小縮小一半,直到縮小到1x1大,一個1024 x1024的圖像需要渲染10次!)。因此雖然HDR的效果非常漂亮,但是目前還是只有為數(shù)不多的游戲采用了這樣的算法,大部分都是采用的偽HDR+blow效果。



偽HDR效果通常是重新調(diào)整圖像的亮度曲線,讓亮的更亮,暗的更暗一些,而Blow效果則是圖像的亮度擴散開來,產(chǎn)生很柔的效果。



在這里我們采用一個二次曲線來重新調(diào)整圖像的亮度,這個曲線的方程是



??
x [ (2-4k) x + 4k-1 ).



K的取值范圍為0.5 – 2.0



經(jīng)過這個公式調(diào)整以后,圖像上亮的區(qū)域?qū)⒏拥牧?#xff0c;并且整體亮度會提高。那么接下來,我們?nèi)绾问箞D像的亮度擴散開來呢?一種可行的方法就是對場景圖像做一次downsample。把它變成原來的1/4次大小,那樣就等于亮度往外擴散了4x4個象素的區(qū)域。



技術(shù)方案已經(jīng)基本有了。接下來我們要在RenderMonkey里實現(xiàn)它,和前面的例子不同,這里我們需要使用RenderMonkey的多pass渲染:



第一個pass我們先對圖像進行downsample操作,首先我們在原來的pass前增加一個新的pass,并命名為downsample pass,然后我們建立一個render to texture的紋理節(jié)點,設(shè)定它的大小(原圖像大小的1/4),并在新建立的pass里建立一個render target的節(jié)點指向它,這樣,這個pass的渲染結(jié)果就會保存到這個render to texture中。這個pass的pixel shader只要使用前面我們已經(jīng)完成的模糊效果的shader就可以了。



接下來,我們給另外一個pass命名為render pass,并增加一個新的紋理對象,并把紋理對象指向剛才我們增加的render
to texture,以便我們能在該pass中使用這個downsample過的圖像。然后我們增加一個float類型的變量,用來表示上面公式中提到的k值;最終工作區(qū)的結(jié)構(gòu)如下圖:







接下來編輯render pass的pixel shader。代碼如下:



sampler2D Texture0;



sampler2D TexDownSample;



float???
k ;//控制參數(shù),公式中k值.



float4?
xposure(float4 _color , float
gray , float ex)



{//重新調(diào)整場景的亮度

????? float b = ( 4 * ex -? 1 );



????
float a = 1 - b;



????
float f = gray * ( a * gray + b );

???? return??
f * _color;



}



float4 main( float2 texCoord? : TEXCOORD0 ) : COLOR



{



???
//亮度信息從downSample后的圖像中獲得



???
float4 _dsColor = tex2D(TexDownSample
, texCoord);



???
float _lum = 0.3 * _dsColor.x + 0.59 *
_dsColor.y + 0.11* _dsColor.z;

??? float4 _fColor = tex2D(Texture0 , texCoord);



???
//對最終顏色進行修正



???
return xposure(_fColor , _lum , k);???????????????????



}



下面是原圖像和經(jīng)過處理后圖像的對比:











原圖 k = 1.1 k = 1.6



圖:經(jīng)過偽HDR+Blow處理過的圖像和原圖的對比



l 高級效果之水彩化



真正的水彩效果在shader中是比較難實現(xiàn)的,它需要進行中值濾波后累加等一些操作,還需要處理NPR中的筆觸一類的概念。本文繞開這些概念,只從視覺效果上能盡量模擬出水彩的畫的那種感覺來。



我們知道,水彩畫一個最大的特點是水彩在紙上流動擴散后會和周圍的顏色攪拌在一起,另外一個特點就是水彩通常會形成一個個的色塊,過渡不像照片那樣的平滑。針對這兩個特點。我們可以設(shè)計這樣的一個算法來模擬水彩畫的效果。



首先我們模擬擴散,簡單的說,可以通過隨機對附近的象素點進行采樣來模擬顏色的擴散,而這個隨機區(qū)域的大小我們可以稱為擴散的力度。這在C++代碼里應(yīng)該是非常容易實現(xiàn)的,讀者只需要使用Random函數(shù)就可以了。但是HLSL并沒有提供這樣的函數(shù)(似乎有個noise函數(shù),不過不能用L)。怎么辦呢?我們可以采用噪聲紋理的方式,既事先計算好一個nxn的隨機數(shù)數(shù)組,作為紋理傳遞給Pixel shader,這樣在Pixel Shader里我們就能獲得隨機數(shù)了。得到隨機數(shù)后,我們將隨機數(shù)映射成紋理坐標(biāo)的偏移值,就能模擬出色彩的擴散了。典型的噪聲紋理是這個樣子的:







圖:噪聲紋理



接下來我們需要處理色塊,我們對顏色的RGB值分別進行量化,把RGB分量由原來的8bit量化成比特數(shù)更低的值。這樣顏色的過渡就會顯得不那么的平滑,而是會呈現(xiàn)出一定的色塊效果。



通過以上兩步處理后,我們得到的圖像依然有非常多的細(xì)節(jié),尤其是第一步處理中產(chǎn)生的很多細(xì)節(jié)噪點,很自然的我們就想到通過平滑模糊的方式來過濾掉這些高頻噪聲成分。



算法設(shè)計好了,接下來看看我們?nèi)绾卧赗enderMonkey里實現(xiàn)這個算法。



類似上一個效果,我們需要兩個pass來完成這個算法,第一個pass叫flow pass,模擬顏色的流動和處理顏色的量化。第二個pass叫Gauss pass,也就是前面提到的高斯模糊算法。我們的重點在第一個pass。



在模擬擴散的pass中,我們同樣需要一個RenderTarget,以把結(jié)果保存在其中以便后續(xù)處理,然后還需要一個噪聲紋理來產(chǎn)生隨機數(shù)。具體代碼如下:



sampler2D Texture0;



sampler2D noiseTexture;



float?????
_quatLevel ;? //量化的bit數(shù) ,取值2-6比較適合



float?????
_waterPower; //表示擴展力度,單位為象素



float4?
quant(float4 _cl , float n)



{//該函數(shù)對顏色的四個分量進行量化



???
_cl.x = int(_cl.x * 255 / n) * n /255;



???
_cl.y = int(_cl.y * 255 / n) * n /255;



???
_cl.z = int(_cl.z * 255 / n) * n /255;



???
return _cl;



}



?



float4 main( float2 texCoord? : TEXCOORD0 ) : COLOR



{



???
//取得隨機數(shù),對紋理坐標(biāo)進行擾動,形成擴散效果



???
float4 noiseColor = _waterPower *
tex2D(noiseTexture , texCoord);



???
float2 newUV?
= float2(texCoord.x + noiseColor.x / TexSize.x ,
texCoord.y + noiseColor.y / TexSize.y);



???
float4 _fColor = tex2D(Texture0
, newUV);



???
//量化圖像的顏色值,形成色塊



???
return quant(_fColor , 255/pow(2, _quatLevel)
);???????????????????



}



代碼中的_quatLevel用來表示對圖像的量化比特數(shù),值越小,色塊越明顯,比較合理的取值范圍是2-6。_waterPower則表示圖像顏色擴散范圍,取值范圍在8-64之間的效果比較好。



下面是經(jīng)過水彩畫處理后的圖像:









圖:水彩畫效果。左圖量化比特數(shù)為6比特,擴散范圍為20象素。



右圖量化比特數(shù)為5比特,擴散范圍為40象素



l 總結(jié)



GPU進行數(shù)字圖像處理,甚至是使用GPU進行數(shù)字視頻編輯是目前非常流行的話題,市場是已經(jīng)出現(xiàn)很多商業(yè)的產(chǎn)品,比如Mac公司的iMotion,就是完全采用GPU加速的視頻非編軟件,iMotion作者的對它的評價是:Play with the images in
real-time。可見它的效率之高,本文只是簡單的介紹了HLSL在圖像處理領(lǐng)域的應(yīng)用,希望能給沒入門的讀者撥開一些云霧。通過以上介紹的幾種濾鏡效果,讀者應(yīng)該大致掌握了使用HLSL進行數(shù)字圖像處理的一些基本步驟和方法了,為了方便起見,我們并沒有把處理完的圖像保存下來而是僅僅把處理完的圖像顯示在屏幕上,其實在RendererMonkey中也是可以把處理完的結(jié)果保存起來的,我們可以創(chuàng)建一個和圖像等大的RenderTarget。并把我們處理的結(jié)果繪制到這個RenderTarget中(關(guān)于如何設(shè)置當(dāng)前的RenderTarget,以及如何設(shè)置多個RenderTarget,留給讀者自己摸索),然后在RenderMonkey的工作區(qū)中選擇那個RenderTarget,在右鍵菜單中選擇保存到圖像就可以了。



我們知道C++也好,Basic也好,乃至現(xiàn)在的HLSL/GLSL也好。它們都是語言而已,充分的了解這些語言,熟悉他們的特性都是非常簡單的。但是如何充分發(fā)揮他們的作用,用它們做一些有意義的事情,就完全在于我們自己的實踐和在實踐中的創(chuàng)造性。如果讀者在實踐中還能創(chuàng)造處更多,更實用的效果。甚至是應(yīng)用的商業(yè)產(chǎn)品中。



最后還得提一下的是,文中出現(xiàn)不少信號處理和數(shù)學(xué)的知識,可見多花點時間在數(shù)學(xué)上是非常值得的J



注:處于閱讀方便,本文代碼都未經(jīng)過優(yōu)化。



參考資料:



高等教育出版社《數(shù)字圖像處理》



RenderMonkey官方網(wǎng)站:http://ati.amd.com/developer/rendermonkey/index.html



轉(zhuǎn)載于:https://www.cnblogs.com/guopenglx/archive/2011/04/14/2015550.html

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的HLSL的一些常见渲染特效的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产手机av在线 | 国际精品久久 | 久久久久99精品国产片 | 99精品热视频| 久久夜视频 | 免费观看性生交大片3 | 一区二区 精品 | 中文字幕制服丝袜av久久 | 99 色| 久视频在线 | 992tv人人网tv亚洲精品 | 日韩高清 一区 | 国产成人亚洲在线观看 | 欧美a√在线| 波多野结衣资源 | 日韩a级免费视频 | 国产麻豆成人传媒免费观看 | 黄色小说视频网站 | 亚洲精品国产片 | 久久久久夜色 | 99热在线国产 | 国产美腿白丝袜足在线av | 韩国精品在线观看 | 成人久久影院 | 青青久草在线 | 欧美伦理一区二区三区 | 日韩欧美在线一区 | 九九热久久久 | www.成人sex| 国产中年夫妇高潮精品视频 | 五月天天天操 | 国产视频亚洲视频 | 欧美日韩精品在线免费观看 | 中文字幕av免费在线观看 | 亚洲波多野结衣 | 国产不卡在线视频 | 激情综合五月网 | 精品在线小视频 | 99国产免费网址 | 久久久久久久久久久综合 | 丁香婷婷深情五月亚洲 | 国产伦理精品一区二区 | 一区二区高清在线 | 四虎国产精品成人免费影视 | 人人爽人人爽 | 日韩一区二区三区免费视频 | 特级黄色片免费看 | 黄在线 | 91日韩精品视频 | 亚洲欧美日韩在线看 | 国产精品1024 | 中文字幕 国产 一区 | 香蕉精品视频在线观看 | 最新婷婷色 | 97色在线观看免费视频 | 伊人网av | 91九色视频国产 | 97免费在线视频 | 精品久久久久免费极品大片 | 日韩高清在线一区二区 | 另类老妇性bbwbbw高清 | 欧美日韩另类在线观看 | 午夜视频一区二区三区 | 久久综合狠狠综合久久狠狠色综合 | 国产成人性色生活片 | 色婷婷狠狠18 | 亚洲精品久久久久中文字幕m男 | 亚洲综合在线发布 | 在线成人一区二区 | 久久精品久久精品久久 | av成人免费 | 日韩一区视频在线 | 日韩sese | 色婷婷99 | 亚洲综合丁香 | 日韩免费在线观看视频 | 国产精品久久久久久久久蜜臀 | 国产精品久久一区二区三区, | 九色视频网站 | 国产精品麻豆果冻传媒在线播放 | 国产精品热 | 精品久操 | 久久综合中文色婷婷 | 色吊丝在线永久观看最新版本 | 伊人春色电影网 | 伊人婷婷| 91伊人影院 | 国产对白av| 99久久激情| 天天操天天曰 | 亚洲jizzjizz日本少妇 | 手机在线欧美 | 欧美日韩在线精品 | 91成人在线免费观看 | 狠狠色丁香九九婷婷综合五月 | 国产在线日本 | 国产精品激情偷乱一区二区∴ | 国产在线一区观看 | 黄色软件在线观看视频 | 色婷婷激情电影 | av7777777| 99在线精品免费视频九九视 | 伊人午夜 | 99精品一区二区三区 | 成人h电影在线观看 | 99精品视频中文字幕 | 久久久久久毛片精品免费不卡 | 国产精品露脸在线 | 欧美成人亚洲成人 | 91九色国产在线 | 欧美色综合久久 | 天天天天爱天天躁 | 久久免费视频在线观看30 | 91超碰免费在线 | 成年在线观看 | 欧美日韩高清 | 欧美激情综合五月色丁香 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲一区二区精品 | 九九久久国产精品 | 国产尤物视频在线 | 国产人成在线观看 | 久久久久久久久久久综合 | 国产色综合| av网站在线免费观看 | 不卡av在线免费观看 | 久久久久久高潮国产精品视 | 午夜精品福利在线 | 日韩在线观看第一页 | 日韩网页 | 久国产在线播放 | 亚洲天堂精品视频 | 激情视频免费在线 | 黄色小视频在线观看免费 | 99在线免费视频观看 | 干狠狠 | 在线观看亚洲 | 四虎在线免费观看视频 | 丁香激情综合久久伊人久久 | 欧美最新大片在线看 | 久久婷婷综合激情 | 中文字幕免费久久 | 亚洲精品在线观看av | 丁香六月综合网 | 精品夜夜嗨av一区二区三区 | 久久综合九色综合久久久精品综合 | 日本中文字幕在线 | 一区二精品 | 黄污在线观看 | 高潮久久久 | 精品国产一区二区三区四 | 日韩精品视频在线观看免费 | 久久艹国产视频 | 日韩午夜av| 中文字幕在线看视频 | 最新免费av在线 | 中文字幕电影在线 | 欧美一进一出抽搐大尺度视频 | 最近中文字幕大全中文字幕免费 | 国产精品一区免费看8c0m | 国产黄色片免费观看 | 中文字幕一区二区三区久久 | 99久久综合狠狠综合久久 | 国产精品入口久久 | 久久福利剧场 | 免费视频色 | 天天色天天操天天爽 | 欧美亚洲国产精品久久高清浪潮 | 五月婷婷丁香综合 | 亚洲午夜久久久久 | 天堂av在线网址 | 午夜美女视频 | 伊人伊成久久人综合网小说 | 男女日麻批 | 国产高清综合 | 在线亚洲精品 | 夜夜爱av| 欧美综合色 | 亚洲欧美日韩一区二区三区在线观看 | 欧美二区在线播放 | 天天操狠狠操网站 | 日日夜夜天天综合 | 96精品视频 | 亚洲综合视频在线观看 | www.99热精品 | 久久亚洲免费视频 | 国产精品99久久久久久小说 | 在线中文字幕播放 | 丁香综合 | 国产精品免费看 | 国产三级视频在线 | 久久精品伊人 | 超碰国产在线观看 | 久久综合免费视频影院 | 成人黄在线观看 | 日韩一区二区三区高清免费看看 | 一区二区免费不卡在线 | 国产99久久九九精品 | 日日夜夜精品网站 | 九色91在线| 国产成人av一区二区三区在线观看 | 天天躁日日躁狠狠躁 | 日韩亚洲精品电影 | 日日操操| 精品理论片 | 成人av免费在线看 | 中文字幕一区在线观看视频 | 黄av资源 | 97精品在线| 国产亚洲精品久久久网站好莱 | 91亚洲精品在线观看 | 91激情| 丰满少妇一级片 | 久久情爱| 午夜国产成人 | 亚洲精品黄网站 | 亚洲91精品| 四虎成人精品永久免费av九九 | 亚洲在线不卡 | 精品国产电影一区二区 | 在线观看亚洲专区 | 色丁香久久 | 亚洲一级黄色 | 日韩在线视频国产 | 一区二区中文字幕在线播放 | 久久免费国产精品1 | 日日夜夜天天射 | 人人澡视频 | 美女福利视频网 | 激情av网| 日本中文一级片 | 99久国产| 国产乱码精品一区二区蜜臀 | 亚洲国产午夜视频 | 午夜黄色一级片 | 91九色porny蝌蚪视频 | 四虎精品成人免费网站 | 婷婷午夜激情 | 奇米先锋 | 精品国产一区二区三区久久影院 | 国产原创在线 | 99在线视频播放 | 五月天伊人网 | 国产精品一区在线观看你懂的 | 中文字幕av播放 | 波多野结衣日韩 | 欧美另类重口 | 亚洲成色777777在线观看影院 | 五月天激情婷婷 | 一级国产视频 | 操久在线 | 在线看国产 | 狠狠色噜噜狠狠狠狠2022 | 久久不卡视频 | 国产一区二区三区高清播放 | 99久久www | 亚洲精品在线观看不卡 | 日韩免费高清在线观看 | 久久国产精品第一页 | 久久免费毛片视频 | 91热| 精品999久久久 | 日韩在线视频线视频免费网站 | 亚洲精品日韩一区二区电影 | 6699私人影院 | 一级a性色生活片久久毛片波多野 | 天天操福利视频 | 丁香视频全集免费观看 | 在线观看日本高清mv视频 | 免费观看性生交 | 久久伊人综合 | 亚洲第一中文网 | 国产成人一区二区三区影院在线 | 1024手机在线看 | 成人啪啪18免费游戏链接 | 久久国产精品久久久 | 毛片一二区| 亚洲五月激情 | 国语精品久久 | 狠狠操天天操 | 国产精品第一 | a在线免费观看视频 | 国产欧美久久久精品影院 | 久久神马影院 | 超碰97在线人人 | 久久精品影视 | 三级黄色网址 | 免费av网站在线 | 天天干 夜夜操 | 亚洲综合黄色 | 天天插天天干天天操 | 蜜臀久久99精品久久久无需会员 | 黄色一级网 | 五月开心婷婷网 | 国产一区二区免费看 | 国产视频色| 久草视频手机在线 | 天天天干夜夜夜操 | 久久超级碰 | 99r精品视频在线观看 | 国产在线观看国语版免费 | 在线观看中文字幕第一页 | 国产福利av在线 | 精品999国产 | 欧美视频日韩视频 | 成人在线免费观看网站 | 在线高清av| 在线观看亚洲国产精品 | 国产一区精品在线观看 | 国产中的精品av小宝探花 | 毛片888| 91av在线不卡 | 成人在线播放免费观看 | 国产电影一区二区三区四区 | 在线中文字幕一区二区 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 免费久久久久久 | 黄色a在线观看 | 在线看黄网站 | 免费国产亚洲视频 | 天天射网| 精品一区在线 | 欧美亚洲xxx| 国产精品免费视频久久久 | 亚洲成a人片77777潘金莲 | av电影中文字幕在线观看 | 一区二区三区日韩精品 | 国产亚洲精品久久 | 亚洲精品动漫久久久久 | 国产在线视频在线观看 | 丁香六月天 | 99精品国产高清在线观看 | 黄色毛片在线 | 中文av不卡 | 香蕉日日 | 久久久在线 | 探花系列在线 | 色国产在线 | 国产亚洲成av片在线观看 | 狠狠狠狠狠狠狠 | 中文字幕在线观看91 | 精品免费观看 | 夜夜夜草 | 黄色av三级在线 | 国产又粗又猛又黄又爽的视频 | 亚洲国产精品人久久电影 | 久久久国产精品久久久 | 一区二区三区四区五区六区 | 麻豆91在线看 | 国产精品18久久久久久久久久久久 | 五月激情六月丁香 | 午夜精品电影 | 99爱这里只有精品 | 免费色婷婷 | 99视频网站 | 蜜桃视频精品 | 精品久久久久久国产偷窥 | 亚洲午夜久久久久 | 亚洲乱码中文字幕综合 | 亚洲爱av| 日韩电影在线一区二区 | 精品欧美在线视频 | 91成人在线网站 | 黄色网免费 | 在线观看完整版免费 | 久久精品亚洲一区二区三区观看模式 | 国产亚洲视频在线 | 日韩免费不卡视频 | 亚洲国产小视频在线观看 | 欧美日韩另类在线 | 在线国产中文字幕 | 国产伦理久久 | 久热电影 | 欧美一级特黄高清视频 | 三级av在线 | 亚洲午夜精 | 91av久久 | 手机av在线网站 | 亚洲最大的av网站 | www.香蕉 | www.日日操.com | 亚洲精品国产品国语在线 | 国产免费成人 | 在线观看91精品视频 | 久久日韩精品 | 人人精品久久 | 欧美日韩免费一区二区 | 黄色的片子 | a√天堂资源 | 天天射天天干 | 99热.com | 亚洲精品免费播放 | 久久亚洲精品国产亚洲老地址 | 国产成人福利片 | 视频二区在线 | 在线观看理论 | 97人人模人人爽人人喊网 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 天天射天 | 国产精品嫩草影视久久久 | 人人干人人超 | 丁香久久| 成人毛片网 | 久章操| 免费看高清毛片 | 97在线视频免费看 | 久久伦理影院 | 欧美亚洲免费在线一区 | 国产午夜麻豆影院在线观看 | 91精品国产欧美一区二区 | 欧美久久久久久久久中文字幕 | 97免费在线观看 | 超碰成人免费电影 | 欧美一区二区伦理片 | 日批视频在线 | 亚洲精品国偷拍自产在线观看 | 三级av在线播放 | 91福利视频一区 | 成人午夜性影院 | 五月天天色 | 美女精品| 欧美日韩免费网站 | 亚洲精选久久 | 中国一区二区视频 | 国产精品视频地址 | 97超碰人人澡人人 | 精品久久网站 | 亚洲国产欧洲综合997久久, | 麻豆一区二区 | 麻豆91精品91久久久 | 精品视频在线看 | 99亚洲天堂| 免费在线观看国产黄 | 九九热99视频 | 久久99精品热在线观看 | 在线91观看| 日本精品一二区 | 日韩精品视频在线观看免费 | 国产91在线观 | 色综合天天综合网国产成人网 | 成人影音av| 黄色小说免费在线观看 | 国产一区精品在线 | 国产成人精品免高潮在线观看 | 成人黄色大片在线免费观看 | 超碰97成人| 视频一区二区在线观看 | 97色在线观看免费视频 | 国产一区二区三区高清播放 | 天天综合导航 | 狠狠五月婷婷 | 在线观看国产日韩 | 九九九热精品 | 亚洲精品色 | 亚洲高清视频在线播放 | 欧美a免费| 国内久久视频 | 99视频在线观看视频 | 婷婷中文在线 | 天堂av观看| 日韩亚洲国产中文字幕 | 波多野结衣在线视频免费观看 | 久久久www成人免费精品张筱雨 | 7777精品伊人久久久大香线蕉 | 国产亚洲综合性久久久影院 | 久久人人爽视频 | 色噜噜日韩精品一区二区三区视频 | 9ⅰ精品久久久久久久久中文字幕 | 又黄又刺激的视频 | 中文av资源站 | 一区二区中文字幕在线观看 | 久久精品综合一区 | 在线免费看黄色 | 亚洲色视频 | 国内精品一区二区 | 国产999精品久久久久久麻豆 | 激情综合网在线观看 | 丁香视频在线观看 | 国产999精品久久久影片官网 | 亚洲激色 | 天天操夜夜叫 | 国产精品久久久久久麻豆一区 | 色婷婷综合久久久久 | 天堂在线视频免费观看 | 欧美精品一区二区免费 | 欧美成人基地 | 国产精品自在线拍国产 | 欧美精品色| 国产香蕉久久精品综合网 | 大荫蒂欧美视频另类xxxx | 亚洲欧美在线综合 | 狠狠久久伊人 | 日韩精品一区二区三区第95 | 午夜视频亚洲 | 久久精品黄 | 人人插超碰| 91成人区| 亚洲精品视频在线观看视频 | 精品视频 | 精品999 | 欧美午夜a | 99在线视频播放 | 97超视频 | 日韩精品首页 | 18+视频网站链接 | 国产精品成人一区 | 色偷偷男人的天堂av | 亚洲国产精彩中文乱码av | 亚洲精品欧美视频 | 色播五月激情五月 | 色综合久久久久综合 | 免费看v片网站 | 亚洲精品777| 久久国产欧美日韩精品 | 亚洲va天堂va欧美ⅴa在线 | 国产精品毛片久久久久久久久久99999999 | 欧美电影在线观看 | 日韩av在线一区二区 | 91九色在线视频 | 国产成人精品综合 | 日本中文字幕电影在线免费观看 | 天天操偷偷干 | 欧美成人性战久久 | 天天操网 | 久热免费在线 | 亚洲婷婷网 | 免费看片网页 | 国产91区| 成年人免费看片 | 中文亚洲欧美日韩 | 米奇影视7777 | 国产精品日韩欧美 | 国产在线中文 | 中文字幕视频网 | 国产一区免费看 | 国产福利精品在线观看 | 欧美日韩在线第一页 | 久久综合久久久久88 | 日韩欧美在线观看一区二区三区 | 91九色免费视频 | 波多野结衣电影一区二区 | 国产精品免费一区二区三区在线观看 | 婷婷国产精品 | 97色免费视频| 亚洲第一中文网 | 免费在线a | 中文字幕一区二区三区精华液 | 婷婷视频在线 | 青青河边草观看完整版高清 | 综合久久久 | www黄| 午夜视频免费 | 欧美a√在线| 77国产精品 | 久久久国产精品电影 | 亚洲精品美女久久17c | 国产精品v a免费视频 | 国产区欧美 | 国内久久精品视频 | 九九九九热精品免费视频点播观看 | 免费看的黄色片 | 欧美日韩国产成人 | avhd高清在线谜片 | 亚洲综合色视频在线观看 | 337p日本欧洲亚洲大胆裸体艺术 | 337p日本欧洲亚洲大胆裸体艺术 | 亚洲精品国产综合久久 | 国产精品一区二区果冻传媒 | 久久99精品国产麻豆宅宅 | 精品国产aⅴ麻豆 | 国产欧美精品在线观看 | 久久午夜电影网 | 国产精品久久久久久久妇 | 国产精品自产拍 | 天天爽夜夜爽精品视频婷婷 | 亚洲最新av网站 | 麻豆激情电影 | 久久99热国产 | 激情五月开心 | 91av在线不卡| 日韩一级成人av | 丁香久久激情 | 国产精品观看 | 成人精品久久 | 欧美日韩在线观看一区二区三区 | 园产精品久久久久久久7电影 | 九九激情视频 | 色九色| 国产在线第三页 | 91精品久久久久 | 国产一二三区在线观看 | 亚洲激情六月 | 美女网站色 | 精品成人a区在线观看 | 精品久久久久久亚洲综合网 | 中文字幕免费看 | 亚洲成人频道 | 国产91全国探花系列在线播放 | 99超碰在线观看 | 美女精品在线 | 中文字幕精品www乱入免费视频 | 在线观看视频h | 午夜精品中文字幕 | 国产91精品在线观看 | 久久99热这里只有精品国产 | 人人草在线视频 | 国产精品久久精品 | 成年美女黄网站色大片免费看 | 国产成人亚洲在线电影 | 99精品视频在线看 | 91在线观看黄 | 成人在线视频一区 | 99久久99久久精品国产片果冰 | 亚洲视频 视频在线 | 粉嫩av一区二区三区四区在线观看 | 米奇四色影视 | 欧美另类xxx| 精品在线观看国产 | 91.麻豆视频 | 成人在线免费看视频 | 成人在线你懂得 | 午夜精选视频 | 97人人艹| 亚洲最新毛片 | 狠狠干网址 | 亚洲黄色在线 | 三级视频国产 | 五月情婷婷 | 97超碰精品 | 欧美日韩xxx | 国产精品免费久久久久影院仙踪林 | 麻豆系列在线观看 | 免费网站看v片在线a | 天天天天综合 | 国产精品亚洲人在线观看 | 人人爱人人添 | 日本中文字幕免费观看 | 久久综合精品国产一区二区三区 | 亚洲免费精品一区二区 | 中文免费观看 | 免费观看国产成人 | 免费成人av电影 | 亚洲欧美视频在线观看 | 丁香九月激情综合 | av一区二区三区在线 | 久久艹中文字幕 | 亚洲第一区精品 | 久久视频| 伊人永久 | 国产精品资源网 | 6080yy精品一区二区三区 | 在线观看视频黄色 | 青青看片 | 欧美激情综合五月 | av中文字幕在线免费观看 | www免费黄色 | 狠狠操综合 | 精品99在线| 最新色站| 欧美在线观看视频免费 | 丁香国产视频 | 久久国产a | 亚洲欧美日韩精品一区二区 | 天天干,天天操,天天射 | 国产精品18久久久久久不卡孕妇 | 久久精品99国产精品 | 中文字幕在线网址 | 精品999在线| 日日操日日插 | 久久久这里有精品 | 久久激情小视频 | 国产午夜影院 | 久久久久免费电影 | 久久99国产精品免费网站 | 天天看天天干 | 亚洲日本精品 | 99精品在线免费 | 一区二区三区不卡在线 | 婷婷色综| 免费看的黄色的网站 | 久久精品视频观看 | 国产电影一区二区三区四区 | 天海翼一区二区三区免费 | 欧美亚洲久久 | 久久99精品久久久久久三级 | 国产白浆视频 | 亚洲自拍偷拍色图 | 中国一 片免费观看 | 手机在线看a | 粉嫩av一区二区三区四区在线观看 | 一区二区精品在线 | 亚洲精品国精品久久99热 | 久久综合久久综合这里只有精品 | 国产日韩av在线 | 日韩午夜电影网 | 久久免费在线观看 | 九九视频在线观看视频6 | 一级c片 | 国产日产欧美在线观看 | 成人亚洲综合 | 日韩中文字幕在线看 | 天天操天天色天天 | 中文字幕色在线视频 | 永久免费的av电影 | 九色琪琪久久综合网天天 | 国产免费一区二区三区最新 | 亚洲a在线观看 | 成人黄色资源 | 国产麻豆视频网站 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 天天插狠狠插 | 午夜久操| a成人v在线 | 亚洲精品国产精品国自产在线 | 国产成人精品一区二区在线 | 亚洲国产精品一区二区尤物区 | 欧美成人精品欧美一级乱 | 久精品视频在线观看 | 在线成人免费电影 | 亚洲人成精品久久久久 | 香蕉视频色| 国产网红在线观看 | 久久成人国产精品免费软件 | av黄色av | 五月婷婷激情综合网 | 国产视频色 | 午夜电影久久 | 综合国产在线 | 五月婷婷黄色网 | 国产免费久久久久 | 天天综合导航 | 国产精品美女久久久久久久久 | 国产区在线 | 97人人澡人人添人人爽超碰 | 91热爆视频| 一区二区三区www | 亚洲专区在线视频 | 欧美日韩一区二区三区免费视频 | 午夜精品成人一区二区三区 | 麻豆91视频 | 日韩免费网站 | 深夜男人影院 | 狠狠狠狠狠狠狠狠干 | 久久久久免费精品 | 久久九九久久 | 亚洲激情中文 | 一区二区三区久久精品 | 四虎www com| 免费精品在线观看 | 国产精品成人久久 | 久久综合婷婷综合 | 美女免费黄网站 | 99性视频| 免费男女羞羞的视频网站中文字幕 | 狠狠的干狠狠的操 | 国产午夜精品福利视频 | 又黄又爽的免费高潮视频 | 久热色超碰 | 国产美女免费看 | 青青草国产精品视频 | 天天草网站 | 日韩一二三区不卡 | 欧美成年黄网站色视频 | 91成年人视频 | 天天夜操| 99久久9| 久久精品这里精品 | 日韩免费三区 | 亚州国产精品视频 | 成人综合免费 | 亚洲欧洲久久久 | 丁香综合网 | 99精品欧美一区二区三区黑人哦 | 西西444www大胆无视频 | 黄色的视频 | 国产精品av在线免费观看 | 国产精品久久久久久久久久白浆 | 2018亚洲男人天堂 | 亚洲欧洲精品一区二区 | 欧美一区二区免费在线观看 | 午夜少妇| 国产精品 中文字幕 亚洲 欧美 | 成人av电影网址 | 午夜精品久久久久久久99水蜜桃 | 日韩精品免费在线视频 | 草久久影院 | 成人av片在线观看 | 日韩精品高清视频 | 视频在线观看99 | 成人亚洲综合 | 亚洲国产视频在线 | 精品一二三区 | 日本中文在线 | 精品99久久 | 欧美日韩国产在线 | 久久国产精品二国产精品中国洋人 | aav在线| 欧美日韩不卡一区二区 | 成人av片免费观看app下载 | 精品福利在线视频 | 日韩一区二区在线免费观看 | 中文字幕 在线 一 二 | 中文字幕电影网 | 69视频国产| 久久中文欧美 | 一区二区三区韩国免费中文网站 | 亚洲一级久久 | 99国产视频在线 | 亚洲一级性 | 视频一区二区三区视频 | 国产精品123| 国产精品毛片一区视频播 | 曰韩在线 | 久操视频在线免费看 | 久久最新网址 | 久久综合狠狠综合 | 国产九九九九九 | 国产精品久久久久久久妇 | 国产电影一区二区三区四区 | 亚洲无在线 | 久久久久久久久久久久久9999 | 精品国产成人在线 | 久久这里有精品 | 久久久影院官网 | 国产视频在线看 | jizz欧美性9 国产一区高清在线观看 | 97精品超碰一区二区三区 | 成人精品国产免费网站 | 亚洲综合激情五月 | 日韩中文在线电影 | 亚洲天天草 | 51久久成人国产精品麻豆 | 欧美一级日韩免费不卡 | 久久久久成人免费 | 久久精品久久精品久久39 | 一区二区三区三区在线 | a在线观看视频 | 激情图片qvod | 国产一区网址 | 色综合久久综合网 | 国产精品九九热 | 久久久精品日本 | 亚洲欧美婷婷六月色综合 | 天天干天天操天天操 | 国产精品久久久久久久av大片 | 国产精品嫩草影院123 | 中文字幕影视 | 国产精品不卡在线 | 99久久精品免费看国产一区二区三区 | 亚洲精品在线视频播放 | 国产资源网 | 国产成人黄色在线 | 亚洲激色 | 欧美国产在线看 | 97免费在线观看视频 | 亚洲午夜av电影 | 亚洲精品视频二区 | 国产福利在线 | av在线永久免费观看 | 亚洲激情影院 | 国产成人一区二区啪在线观看 | 国产视频一区二区在线播放 | 91精品国产成人 | 91久久国产露脸精品国产闺蜜 | 成人午夜电影在线播放 | 免费精品在线视频 | 天天综合日| 蜜臀一区二区三区精品免费视频 | 精品国产亚洲一区二区麻豆 | 日韩欧美一区二区不卡 | 成人在线视频你懂的 | 狠狠狠色丁香综合久久天下网 | 久久高视频| 啪嗒啪嗒免费观看完整版 | 91色国产在线 | 狠狠狠色丁香综合久久天下网 | 日韩经典一区二区三区 | 黄色毛片网站在线观看 | 狠狠色丁香婷婷综合久久片 | 亚洲精品国偷拍自产在线观看蜜桃 | 成人免费观看在线视频 | 精品国产一区二区三区久久久久久 | 91社区国产高清 | 在线成人免费电影 | 久久久久久久久久久久久久电影 | 日日操天天操狠狠操 | 亚洲精品乱码久久久久久 | 亚洲精品国产精品国自产观看 | 日韩不卡高清 | 六月婷婷久香在线视频 | 久久综合久色欧美综合狠狠 | 国产高清日韩欧美 | 日本久久久久久 | 日日干网 | 久久免费在线观看 | 综合天堂av久久久久久久 | 91亚洲精品视频 | 久久国产午夜精品理论片最新版本 | 免费a视频 | 一二三区视频在线 | www99久久| 久久成视频 | 欧美一二三视频 | 99热超碰在线 | av电影亚洲 | 97看片吧 | 亚洲一区欧美激情 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 日韩欧美区 | 人人超碰人人 | av中文天堂在线 | 视频在线观看91 | 久久一级片 | 91久久精品一区二区二区 | 天天操天天舔天天爽 | 99精彩视频在线观看免费 | 三级黄色欧美 | 一区二区三高清 | 亚洲综合在线播放 | 成人在线小视频 | 日本精品午夜 | 欧美日韩国产精品一区二区亚洲 | 一级做a爱片性色毛片www | 久久久毛片 | 亚洲精品视频大全 | 日韩av不卡播放 | 亚洲精品在线免费看 | 一区二区三区在线免费观看 | 人人玩人人添人人澡97 | 色综合天天狠天天透天天伊人 | 五月天婷婷在线观看视频 | 国产成人香蕉 | 91视频在线观看下载 | 精品视频99 | 一区二区欧美日韩 | 亚洲五月花 | 99精彩视频在线观看免费 | 日韩在线中文字幕视频 | 久久公开免费视频 | 欧洲av在线| 精品毛片一区二区免费看 | 亚洲第一区在线观看 | 日韩网站在线看片你懂的 | 亚洲视频在线看 | 草在线视频 | 天天操天天拍 | 麻豆精品国产传媒 | 爱干视频 | 欧美色图狠狠干 | 中文字幕频道 | 亚洲欧美视频一区二区三区 | 在线观看成人av | 精品亚洲网 | 91免费观看视频网站 | 999精品视频 | 欧美成人tv| av中文字幕在线免费观看 | 久久99国产一区二区三区 | 中文字幕在线观看完整版电影 | 一级大片在线观看 | av福利在线看 | av中文字幕在线观看网站 | 亚洲 精品在线视频 | 日韩理论影院 | 欧美一级视频一区 | www.狠狠插.com | 国产精品观看在线亚洲人成网 | 色a资源在线| 国产精品一区二区av日韩在线 | 日韩精品中文字幕有码 | 亚洲精品国久久99热 | 在线视频免费观看 | 四虎影视成人永久免费观看视频 | 最近最新mv字幕免费观看 | 国产激情免费 | 久久久精品 | 日韩精品免费一线在线观看 | 黄a在线观看 | 黄污网| 久章草在线观看 | 一区二区三区在线观看免费 | 国产小视频网站 | 午夜免费久久看 | 久久高视频 | 黄污网站在线 | 久草网首页 | 亚洲综合一区二区精品导航 | 国产黄色免费观看 | 探花视频在线观看免费版 | 永久av免费在线观看 | 免费黄在线看 | 四虎在线永久免费观看 | 91系列在线观看 | 免费观看久久久 | 91粉色视频 | 九九有精品 | 久久看片网站 | 精品少妇一区二区三区在线 |