青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

羅朝輝(飄飄白云)

關注嵌入式操作系統,移動平臺,圖形開發。-->加微博 ^_^

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  85 隨筆 :: 0 文章 :: 169 評論 :: 0 Trackbacks

Per Pixel Lighting Techniques
         飄飄白云譯  2008-03-22

原文鏈接:http://www.nitrogen.za.org/viewtutorial.asp?id=5

這個教程用到了向量數學知識,如果你對向量數學還不是很了解,請先閱讀向量教程:read the tutorial。

光照與物體表面的相互作用可以通過將一些數學公式應用于基于per pixel(區別于基于頂點)的著色,從而模擬出真實生活中的各種材質效果。比如浮雕效果,波浪效果,油漆效果等。

在這個教程中,我們有如下假定:

第一,我們討論的是基于像素著色(per-pixel basis),每個pixel有它自己的位置向量,法線向量以及表面顏色(Surface color,在這里可以是來自紋理的顏色,也可以是RGB顏色(flat color));

第二,表面顏色Surface color)通常是由R,G,B三部分組成,在這個教程中,我們把它當作一個向量看待;

第三,輸入表面顏色(光照處理前的表面顏色,這里的“輸入”可以理解為函數的輸入參數的“輸入”)只是普通的顏色(單純的紋理顏色或者RGB顏色),而輸出表面顏色(光照處理后的表面顏色)是光照作用于表面的合成顏色,如可以是有陰影,高光等效果的顏色。

第四,這個教程中假設每個場景中只有一個燈光。對于多燈光的場合,對每一個燈光循環進行這些運算(環境光除外)。

 

好了,讓我們開始講解各種光照的算法原理

 

Ambient Lighting 環境光

 

在真實生活里,有光線的房子里的物體不會是全黑的,總有一些光量子照亮物體表面,即使這個表面是背對光源的,這就是環境光的原因。我們不考慮環境光的照射方向,我們總認為場景中的物體,不論它在什么位置,總會受到一定數量的環境光照射(全局照明)。環境光照算法如下:

 

Inputs:

       Col – 物體原表面顏色

        AmbAmount – 場景中環境光的強弱程度 (介于0 1之間)

     Outputs:

        SurfaceColor – 環境光照作用之后的表面顏色

        SurfaceColor = Col*AmbAmount;

 

環境光照效果圖:

 

Lambert Shading (郎伯特著色,郎伯特:物理上的亮度單位,在這里就是漫射光作用)

 

現在我們真正開始考慮一束光照射在物體表面上的作用過程,我們使用最常見的光照算法-------漫反射光照著色或者說郎伯特余弦定律或郎伯特著色(三個都一回事),這個算法是將入射光與表面法線向量的點積當作漫反射光照強度因子,下面我們看看環境光照與漫射光照共同作用的算法:

 

Inputs:

        LCol – 照射在表面上的漫射光

        Pos – 表面上被照射的位置

        LPos – 漫射光源的位置

        N -表面上被照射的位置處的法向量

        Col –物體原表面顏色

        AmbAmount -場景中環境光的強弱程度 (0 to 1)

Outputs:

        SurfaceColor -環境光照與漫射光照共同作用之后的表面顏色

 

        VectorToLight = Normalise(LPos - Pos);

        DiffuseFactor = Dot(VectorToLight, Normal); //DiffuseFactor ranges from 0 to 1

//光線與表面法線夾角大于90度,想像下光線在表面背面射過來,正表面肯定沒有光照

   if(DiffuseFactor < 0)

        then DiffuseFactor = 0;

 

        //環境光照與漫射光照共同作用

    SurfaceColor = Col*AmbAmount + Col*DiffuseFactor*LCol;

 

環境光與漫射光共同作用效果

 

Specular Highlights鏡面高光

現在我們考慮物體表面有光澤的效果,這種效果是將Phong反射模型,結合前面兩個光照作用而成。這中光照效果計算需要知道觀察者在場景中的位置,而先前的環境光照與漫射光照效果計算都與觀察者所在位置無關的。

這種光照計算是這樣的,首先我們計算入射光在表面處的反射光線,然后再將反射光線與視線(觀察者的眼睛與表面觀察點的連線)之間的點積值當作反射到觀察者眼中的光照強度因子,因為表面上高亮的部分是反射光線反射到觀察者眼睛或照相機中較多的地方,這些地方的反射光線與視線之間的夾角非常小,點積值就越大。

 

Inputs:

        ViewPos – 觀察者的位置

        SpecAmount – 鏡面光強弱. (from 0 to about 200)

        SpecCol – 鏡面光顏色(通常為白色).

 

        LCol – 照射在表面上的漫射光

        Pos – 表面上被照射的位置

        LPos – 漫射光源的位置

        N -表面上被照射的位置處的法向量

        Col –物體原表面顏色

        AmbAmount -場景中環境光的強弱程度 (0 to 1)

 

Outputs:

        SurfaceColor -環境光照,漫射光照與鏡面光共同作用之后的表面顏色

        

        DiffuseFactor = ... //經前兩個光照作用得來的顏色

       

        DirectionToViewer = Normalise(ViewPos - Pos);

        VectorToLight = Normalise(LPos - Pos);

        //計算反射光

        ReflectanceRay = 2 * Dot(N, VectorToLight) * N - VectorToLight;

   

    //計算鏡面光照因子. 數學公式 SpecFac = (R dot N)^Spec

    SpecularFactor = Pow(Dot(ReflectanceRay, DirectionToViewer), SpecAmount);

   

        //環境光照,漫射光照與鏡面光共同作用

    SurfaceColor = Col*AmbFactor + Col*DiffuseFactor*LCol + SpecCol*SpecularFactor;

環境光照,漫射光照與鏡面光共同作用

 

Note:可以在一個場景中使用多個漫射光照與鏡面光作用

Fresnel Term 菲涅爾準則

菲涅爾效果是根據觀察者的觀察表面來調整反射率來實現的。比如你從水面,油漆表面或者絲綢的正上方看,反射光澤的柔和效果基本沒有,如果側著或平著看的話,反射光澤的柔和效果就很明顯,這就是菲涅爾效果。我們簡單地通過點積操作計算表明法線與視線之間夾角的余弦值,再將這個值加權。對于較平滑表面,加權系數設置在1.0-5.0之間(油漆效果,絲綢等),對于比較凹凸的表面,加權系數設置為8.0或更高(水波,液體等)

 

Inputs:

        ViewPos – 觀察者的位置

        FresAmount – 邊緣或表面的尖銳程度. (油漆絲綢:1,液體: 2-8)

        FresCol - frenel 反射光 (通常使用reflection map or 類似的東西).

 

        LCol – 照射在表面上的漫射光

        Pos – 表面上被照射的位置

        LPos – 漫射光源的位置

        N -表面上被照射的位置處的法向量

        Col –物體原表面顏色

        AmbAmount -場景中環境光的強弱程度 (0 to 1)

 

Outputs:

        SurfaceColor -環境光照,漫射光照與鏡面光,菲涅爾反射共同作用之后的表面顏色

        

        DiffuseFactor = ... //環境光照,漫射光照作用得來的顏色

        SpecularFactor = ... //鏡面高光作用得來的顏色

 

        DirectionToViewer = Normalise(ViewPos - Pos);

        //計算fresnel因子. 我們計算視線與表面法向量間夾角的余弦值([-1..1]之間),然后加一,移動到區間[0..2],然后再加權。

        FresnelTerm = Pow(Dot(N, DirectionToViewer)+1, FresAmount);

   

        //確保因子的在正常范圍內

        if (FresnelTerm > 1)

               then FresnelTerm = 1; 

    //無菲涅爾反射的場合: Ambient light, Diffuse Light and Specular Light

         NonReflective = Col*AmbFactor + Col*DiffuseFactor*LCol + SpecCol*SpecularFactor;

 

        Reflective = FresCol;

        //環境光照,漫射光照與鏡面光,菲涅爾反射共同作用

    SurfaceColor = NonReflective*(1-FresnelTerm) + Reflective*FresnelTerm;

 

               

漫射無菲涅爾反射時效果                    漫射有菲涅爾反射時效果

posted on 2008-03-30 15:58 羅朝輝 閱讀(2073) 評論(1)  編輯 收藏 引用 所屬分類: 計算機圖形學

評論

# re: 【譯】各種光照的算法原理 2008-05-19 10:58 smeagol
= Pow(Dot(N, DirectionToViewer)+1, FresAmount);
如果是正面那么N 和 DirectionToViewer不可能是負 那么FresnelTerm 老是大于2 所以最終老是1 這樣結果對嗎?
  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品乱码久久久久久日本蜜臀 | 久久综合精品一区| 亚洲美女免费精品视频在线观看| 一色屋精品视频在线看| 国产精品成av人在线视午夜片| 欧美一区二区三区在线观看视频| 亚洲国产色一区| 亚洲国产另类 国产精品国产免费| 久久精品免费播放| 国产精品任我爽爆在线播放| 久久国产精品72免费观看| 午夜精品国产更新| 一区二区三区日韩精品| 欧美国产先锋| 亚洲电影欧美电影有声小说| 久久综合激情| 久久漫画官网| 久久午夜电影| 欧美日韩视频在线观看一区二区三区| 欧美激情一区二区三区全黄 | 韩国久久久久| 亚洲国产午夜| 亚洲精品视频在线观看网站| 亚洲承认在线| 亚洲综合精品四区| 欧美一级播放| 蜜桃久久精品乱码一区二区| 久久久久国产一区二区| 欧美成人黄色小视频| 久久精品国产亚洲精品| 欧美好骚综合网| 亚洲国产一区二区三区青草影视 | 亚洲经典自拍| 久久理论片午夜琪琪电影网| 99伊人成综合| 欧美日韩理论| 在线亚洲一区二区| 亚洲品质自拍| 欧美日韩综合一区| 中国av一区| 亚洲天堂成人在线观看| 国产精品久久久久久久久久久久久 | 在线中文字幕一区| 欧美精品一区在线观看| 在线视频欧美日韩精品| 亚洲精品视频在线看| 国产精品二区在线观看| 欧美一区二区日韩一区二区| 欧美一区影院| 亚洲国产精品免费| 亚洲美女视频在线观看| 国产欧美精品一区二区三区介绍 | 狼人天天伊人久久| 亚洲欧美日韩精品| 亚洲欧美日韩精品综合在线观看| 欧美精品一区二区三区蜜桃| 亚洲激情另类| 国产有码一区二区| 在线视频日韩| 亚洲一区日韩在线| 国产精品大全| 欧美一区二区播放| 欧美一区二区三区电影在线观看| 国产日韩欧美亚洲| 免费观看欧美在线视频的网站| 亚洲自拍啪啪| 最新国产成人av网站网址麻豆| 欧美亚洲一区在线| 亚洲视频一起| 久久久免费观看视频| 亚洲影视在线| 欧美日产国产成人免费图片| 久久久伊人欧美| 欧美一区二区三区在线免费观看| 免费在线日韩av| 欧美成年人视频| 在线观看日韩专区| 欧美高清视频在线播放| 久久综合一区二区三区| 国产日韩精品久久| 久久精品1区| 亚洲国产色一区| 中文高清一区| 国产一区二区三区av电影| 欧美一区二区女人| 欧美国产一区二区| 欧美国内亚洲| 午夜国产精品影院在线观看| 一区二区三区www| 亚洲最黄网站| 欧美成人免费视频| 亚洲欧洲在线播放| 欧美大胆成人| 欧美国产在线视频| 亚洲直播在线一区| 亚洲欧美精品在线观看| 久久综合九色欧美综合狠狠| 国产精品99久久久久久久vr| 久久这里只精品最新地址| 欧美图区在线视频| 最新成人av在线| 欧美国产日韩在线| 欧美亚洲成人免费| 久久中文字幕导航| 欧美手机在线| 欧美www视频在线观看| 欧美视频一区二区三区…| 久久欧美中文字幕| 欧美精品在线观看播放| 欧美亚洲一区二区三区| 免费欧美日韩| 欧美影院精品一区| 免费看的黄色欧美网站| 欧美有码在线视频| 夜夜嗨av一区二区三区四季av| 国产精品一区三区| 狠狠狠色丁香婷婷综合激情| 亚洲国产欧美久久| 国产亚洲一本大道中文在线| 亚洲国产欧美日韩| 国内精品久久久久影院薰衣草 | 亚洲国产美女精品久久久久∴| 在线亚洲欧美| 最近中文字幕日韩精品| 亚洲欧美日韩一区| 亚洲免费在线视频| 欧美日韩亚洲另类| 亚洲精品日韩在线观看| 国语自产在线不卡| 在线中文字幕不卡| 亚洲人www| 暖暖成人免费视频| 亚洲高清久久久| 亚洲国产成人av好男人在线观看| 亚洲一区影音先锋| 午夜精品成人在线视频| 国产精品ⅴa在线观看h| 99精品99| 亚洲欧美中文日韩v在线观看| 欧美精品免费看| 99精品视频免费观看视频| 日韩午夜三级在线| 欧美女同视频| 亚洲午夜av电影| 亚洲欧美日韩一区二区在线| 欧美午夜三级| 国产精品99久久久久久久女警| 一区二区三区高清不卡| 欧美涩涩视频| 亚洲一区二区三区精品动漫| 亚洲欧美日韩国产中文在线| 欧美视频中文一区二区三区在线观看 | 极品中文字幕一区| 久久精品夜色噜噜亚洲a∨| 久久久久久一区| 国产综合色精品一区二区三区| 欧美一区二区三区四区在线观看| 欧美一区午夜视频在线观看| 国产亚洲人成a一在线v站| 亚洲欧美日本国产专区一区| 欧美在线综合| 亚洲黑丝在线| 欧美激情亚洲| 亚洲欧美国产制服动漫| 久久久亚洲成人| 精品999网站| 蜜臀91精品一区二区三区| 日韩香蕉视频| 久久久久中文| 亚洲精品一区二区三区福利| 欧美精品日韩一本| 午夜精品久久99蜜桃的功能介绍| 久久久久久久国产| 亚洲日本免费电影| 欧美日韩国产一区二区三区地区 | 中日韩高清电影网| 国产亚洲精品久久久久久| 久久青青草综合| 亚洲性xxxx| 永久免费视频成人| 欧美午夜片在线免费观看| 久久精品国产清高在天天线 | 亚洲国产老妈| 欧美亚洲免费| 亚洲精品乱码视频| 国产欧美91| 欧美日韩成人一区二区| 久久先锋影音av| 亚洲一区三区在线观看| 亚洲黄色精品| 美女性感视频久久久| 新狼窝色av性久久久久久| 在线亚洲一区二区| 亚洲国产日韩在线一区模特| 国产精品色一区二区三区| 欧美日本不卡| 农夫在线精品视频免费观看| 久久久www成人免费无遮挡大片 | 欧美日韩国产成人高清视频| 可以免费看不卡的av网站|