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

C++ Programmer's Cookbook

{C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

游戲引擎基礎(二)(3D環境的光照和紋理)

2部份: 3D環境的光照和紋理


世界的燈光
  在變換過程中, 通常是在稱為觀察空間的坐標空間中, 我們遇到了最重要的運算之一: 光照計算。 它是一種這樣的事情, 當它工作時,你不關注它,但當它不工作時, 你就非常關注它了。有很多不同的光照方法,從簡單的計算多邊形對于燈光的朝向,并根據燈光到多邊形的方向和距離加上燈光顏色的百分比值,一直到產生邊緣平滑的燈光貼圖疊加基本紋理。而且一些 API 實際上提供預先建造的光照方法。舉例來說,OpenGL 提供了每多邊形,每頂點,和每像素的光照計算。

  在頂點光照中,你要決定一個頂點被多少個多邊形共享,并計算出共享該頂點的所有多邊形法向量的均值(稱為法向量),并將該法向量賦頂點。一個給定多邊形的每個頂點會有不同的法向量,所以你需要漸變或插值多邊形頂點的光照顏色以便得到平滑的光照效果。 你沒有必要用這種光照方式查看每個單獨的多邊形。 這種方式的優點是時常可以使用硬件轉換與光照(T & L)來幫助快速完成。 不足之處是它不能產生陰影。 舉例來說,即使燈光是在模型的右側,左手臂應該在被身體投影的陰影中,而實際上模型的雙臂卻以同樣的方式被照明了。

  這些簡單的方法使用著色來達到它們的目標。 當用平面光照繪制一個多邊形時, 你讓渲染(繪制)引擎把整個多邊形都著上一種指定的顏色。這叫做平面著色光照。 (該方法中,多邊形均對應一個光強度,表面上所有點都用相同的強度值顯示,渲染繪制時得到一種平面效果,多邊形的邊緣不能精確的顯示出來)

  對于頂點著色 ( Gouraud 著色) ,你讓渲染引擎給每個頂點賦予特定的顏色。 在繪制多邊形上各點投影所對應的像素時,根據它們與各頂點的距離,對這些頂點的顏色進行插值計算。 (實際上Quake III 模型使用的就是這種方法, 效果好的令人驚奇)

  還有就是 Phong 著色。如同 Gouraud 著色,通過紋理工作,但不對每個頂點顏色進行插值決定像素顏色值, 它對每個頂點的法向量進行插值,會為每個頂點投影的像素做相同的工作。對于 Gouraud 著色,你需要知道哪些光投射在每個頂點上。對于 Phong 著色,你對每個像素也要知道這么多。

  一點也不令人驚訝, Phong 著色可以得到更加平滑的效果,因為每個像素都需要進行光照計算,其繪制非常耗費時間。平面光照處理方法很快速, 但比較粗糙。Phong 著色比 Gouraud 著色計算更昂貴,但效果最好,可以達到鏡面高光效果("高亮") 這些都需要你在游戲開發中折衷權衡。


不同的燈光
  接著是生成照明映射,你用第二個紋理映射(照明映射)與已有的紋理混合來產生照明效果。這樣工作得很好, 但這本質上是在渲染之前預先生成的一種罐裝效果。如果你使用動態照明 (即,燈光移動, 或者沒有程序的干預而打開和關閉),你得必須在每一幀重新生成照明映射,按照動態燈光的運動方式修改這些照明映射。燈光映射能夠快速的渲染,但對存儲這些燈光紋理所需的內存消耗非常昂貴。你可以使用一些壓縮技巧使它們占用較少的的內存空間,或減少其尺寸大小, 甚至使它們是單色的 (這樣做就不會有彩色燈光了),等等。 如果你確實在場景中有多個動態燈光, 重新生成照明映射將以昂貴的CPU周期而告終。

  許多游戲通常使用某種混合照明方式。 Quake III為例,場景使用照明映射, 動畫模型使用頂點照明。 預先處理的燈光不會對動畫模型產生正確的效果 -- 整個多邊形模型得到燈光的全部光照值 -- 而動態照明將被用來產生正確的效果。 使用混合照明方式是多數的人們沒有注意到的一個折衷,它通常讓效果看起來"正確" 這就是游戲的全部做一切必要的工作讓效果看起來"正確",但不必真的是正確的。

  當然,所有這些在新的Doom引擎里面都不復存在了,但要看到所有的效果,至少需要 1GHZ CPU GeForce 2 顯卡。是進步了,但一切都是有代價的。

  一旦場景經過轉換和照明, 我們就進行裁剪運算。 不進入血淋淋的細節而,剪斷運算決定哪些三角形完全在場景 (被稱為觀察平截頭體) 之內或部份地在場景之內。完全在場景之內的三角形被稱為細節接受,它們被處理。對于只是部分在場景之內的三角形, 位于平截頭體外面的部分將被裁剪掉,余下位于平截頭體內部的多邊形部分將需要重新閉合,以便其完全位于可見場景之內。 (更多的細節請參考我們的 3D 流水線指導一文)

  場景經過裁剪以后,流水線中的下一個階段就是三角形生成階段(也叫做掃描 線轉換),場景被映射到2D 屏幕坐標。到這里,就是渲染(繪制)運算了。


紋理與MIP映射
  紋理在使3D場景看起來真實方面異常重要,它們是你應用到場景區域或對象的一些分解成多邊形的小圖片。多重紋理耗費大量的內存,有不同的技術來幫助管理它們的尺寸大小。紋理壓縮是在保持圖片信息的情況下,讓紋理數據更小的一種方法。紋理壓縮占用較少的游戲CD空間,更重要的是,占用較少內存和3D 顯卡存儲空間。另外,在你第一次要求顯卡顯示紋理的時候,壓縮的(較小的) 版本經過 AGP 接口從 PC 主存送到3D 顯卡, 會更快一些。紋理壓縮是件好事情。 在下面我們將會更多的討論紋理壓縮。


MIP
映射(多紋理映射)
  游戲引擎用來減少紋理內存和帶寬需求的另外一個技術就是 MIP 映射。 MIP 映射技術通過預先處理紋理,產生它的多個拷貝紋理,每個相繼的拷貝是上一個拷貝的一半大小。為什么要這樣做?要回答這個問題,你需要了解 3D 顯卡是如何顯示紋理的。最壞情況,你選擇一個紋理,貼到一個多邊形上,然后輸出到屏幕。我們說這是一對一的關系,最初紋理映射圖的一個紋素 (紋理元素) 對應到紋理映射對象多邊形的一個像素。如果你顯示的多邊形被縮小一半,紋理的紋素就每間隔一個被顯示。這樣通常沒有什么問題 -- 但在某些情況下會導致一些視覺上的怪異現象。讓我們看看磚塊墻壁。 假設最初的紋理是一面磚墻,有許多磚塊,磚塊之間的泥漿寬度只有一個像素。如果你把多邊形縮小一半, 紋素只是每間隔一個被應用,這時候,所有的泥漿會突然消失,因為它們被縮掉了。你只會看到一些奇怪的圖像。

  使用 MIP 映射,你可以在顯示卡應用紋理之前,自己縮放圖像,因為可以預先處理紋理,你做得更好一些,讓泥漿不被縮掉。當 3D 顯卡用紋理繪制多邊形時,它檢測到縮放因子,說,"你知道,我要使用小一些的紋理,而不是縮小最大的紋理,這樣看起來會更好一些。" 在這里, MIP 映射為了一切,一切也為了 MIP 映射。


多重紋理與凹凸映射
  單一紋理映射給整個3D 真實感圖形帶來很大的不同, 但使用多重紋理甚至可以達到一些更加令人難忘的效果。過去這一直需要多遍渲染(繪制),嚴重影響了像素填充率。 但許多具有多流水線的3D 加速卡,如ATI's Radeon nVidia's GeForce 2及更高級的顯卡,多重紋理可以在一遍渲染(繪制)過程中完成。 產生多重紋理效果時, 你先用一個紋理繪制多邊形,然后再用另外一個紋理透明地繪制在多邊形上面。這讓你可以使紋理看上去在移動,或脈動, 甚至產生陰影效果 (我們在照明一節中描述過)。繪制第一個紋理映射,然后在上面繪制帶透明的全黑紋理,引起一種是所有的織法黑色的但是有一個透明分層堆積過它的頂端 這就是 -- 即時陰影。 該技術被稱為照明映射 ( 有時也稱為 暗映射),直至新的Doom ,一直是Id引擎里關卡照明的傳統方法。

  凹凸貼圖是最近涌現出來的一種古老技術。幾年以前 Matrox 第一個在流行的 3D 游戲中發起使用各種不同形式的凹凸貼圖。就是生成紋理來表現燈光在表面的投射,表現表面的凹凸或表面的裂縫。 凹凸貼圖并不隨著燈光一起移動 -- 它被設計用來表現一個表面上的細小瑕疵,而不是大的凹凸。 比如說,在飛行模擬器中,你可以使用凹凸貼圖來產生像是隨機的地表細節,而不是重復地使用相同的紋理,看上去一點趣味也沒有。

  凹凸貼圖產生相當明顯的表面細節,盡管是很高明的戲法,但嚴格意義上講,凹凸貼圖并不隨著你的觀察角度而變化。比較新的 ATI nVidia 顯卡片能執行每像素運算,這種缺省觀察角度的不足就真的不再是有力而快速的法則了。 無論是哪一種方法, 到目前為止,沒有游戲開發者太多的使用; 更多的游戲能夠且應該使用凹凸貼圖。


高速緩存抖動 = 糟糕的事物
  紋理高速緩存的管理游戲引擎的速度至關重要。 和任何高速緩存一樣,緩存命中很好,而不命中將很糟糕。如果遇到紋理在圖形顯示卡內存被頻繁地換入換出的情況,這就是紋理高速緩存抖動。發生這種情況時,通常API將會廢棄每個紋理,結果是所有的紋理在下一幀將被重新加載,這非常耗時和浪費。對游戲玩家來說,當API重新加載紋理高速緩存時,會導致幀速率遲鈍。

  在紋理高速緩存管理中,有各種不同的技術將紋理高速緩存抖動減到最少這是確保任何 3D 游戲引擎速度的一個決定性因素。 紋理管理是件好事情這意味著只要求顯卡使用紋理一次,而不是重復使用。這聽起來有點自相矛盾,但效果是它意謂著對顯卡說,"看, 所有這些多邊形全部使用這一個紋理,我們能夠僅僅加載這個紋理一次而不是許多次嗎?" 這阻止API ( 或圖形驅動軟件) 上傳多次向顯卡加載紋理。象OpenGL這樣的API實際上通常處理紋理高速緩存管理,意謂著,根據一些規則,比如紋理存取的頻率,API決定哪些紋理儲存在顯卡上,哪些紋理存儲在主存。 真正的問題來了:a) 你時常無法知道API正在使用的準確規則。 b)你時常要求在一幀中繪制更多的紋理,以致超出了顯卡內存空間所能容納的紋理。

  另外一種紋理高速緩存管理技術是我們早先討論的紋理壓縮。很象聲音波形文件被壓縮成 MP3 文件,盡管無法達到那樣的壓縮比率,但紋理可以被壓縮。 從聲音波形文件到MP3的壓縮可以達到 11:1的壓縮比率,而絕大多數硬件支持的紋理壓縮運算法則只有 4:1 的壓縮比率,盡管如此,這樣能產生很大的差別。 除此之外,在渲染(繪制)過程中,只有在需要時,硬件才動態地對紋理進行解壓縮。這一點非常棒,我們僅僅擦除即將可能用到的表面。

  如上所述,另外一種技術確保渲染器要求顯卡對每個紋理只繪制一次。確定你想要渲染(繪制)的使用相同紋理的所有多邊形同時送到顯卡,而不是一個模型在這里,另一個模型在那里,然后又回到最初的紋理論。僅僅繪制一次,你也就通過AGP接口傳送一次。Quake III 在其陰影系統就是這么做的。處理多邊形時,把它們加入到一個內部的陰影列表,一旦所有的多邊形處理完畢,渲染器遍歷紋理列表,就將紋理及所有使用這些紋理的多邊形同時傳送出去。

  上述過程在使用顯卡的硬件 T & L(如果支持的話)時,并不怎么有效。你面臨的結局是,滿屏幕都是使用相同紋理的大量的多邊形小群組,所有多邊形都使用不同的變換矩陣。這意謂著更多的時間花在建立顯卡的硬件 T & L 引擎 ,更多的時間被浪費了。 無論如何,因為他們有助于對整個模型使用統一的紋理,所以它對實際屏幕上的模型可以有效地工作。但是因為許多多邊形傾向使用相同的墻壁紋理,所以對于世界場景的渲染,它常常就是地獄。通常它沒有這么嚴重,因為大體而言,世界的紋理不會有那么大,這樣一來API的紋理緩存系統將會替你處理這些,并把紋理保留在顯卡以備再次使用。

  在游戲機上,通常沒有紋理高速緩存系統(除非你寫一個)。在 PS2 上面,你最好是遠離"一次紋理" 的方法。在 Xbox 上面, 這是不重要的,因為它本身沒有圖形內存(它是 UMA 體系結構),且所有的紋理無論如何始終保留在主存之中。

  事實上,在今天的現代PC FPS 游戲中,試圖通過AGP接口傳送大量紋理是第二個最通常的瓶頸。最大的瓶頸是實際幾何處理,它要使東西出現在它應該出現的地方。在如今的3D FPS 游戲中,最耗費時間的工作,顯然是那些計算模型中每個頂點正確的世界位置的數學運算。如果你不把場景的紋理保持在預算之內,僅居其次的就是通過AGP接口傳送大量的紋理了。然而,你確實有能力影響這些。 通過降低頂層的 MIP 級別(還記得系統在哪里不斷地為你細分紋理嗎?) 你就能夠把系統正在嘗試送到顯卡的紋理大小減少一半。你的視覺質量會有所下降-- 尤其是在引人注目的電影片斷中--但是你的幀速率上升了。這種方式對網絡游戲尤其有幫助。實際上,Soldier of Fortune IIJedi Knight II: Outcast這兩款游戲在設計時針對的顯卡還不是市場上的大眾主流顯卡。為了以最大大小觀看他們的紋理,你的3D 顯卡至少需要有128MB的內存。這兩種產品在思想上都是給未來設計的。

  上面就是第 2 部份。在下面章節中,我們將介紹許多主題,包括內存管理,霧效果,深度測試, 抗鋸齒,頂點著色,API等。

posted on 2007-12-04 13:16 夢在天涯 閱讀(3137) 評論(0)  編輯 收藏 引用 所屬分類: Game/OpenGL

公告

EMail:itech001#126.com

導航

統計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1812158
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              在线视频一区二区| 亚洲淫性视频| 欧美视频在线免费| 欧美日韩国产一区精品一区| 欧美黄色网络| 欧美日韩不卡合集视频| 欧美性开放视频| 国产精品一区二区女厕厕| 国产欧美成人| 亚洲国产成人在线播放| 日韩视频中文字幕| 亚洲男同1069视频| 久久综合一区二区| 91久久久精品| 一区二区三区色| 久久精品99国产精品酒店日本| 看片网站欧美日韩| 欧美亚洲第一区| 一区二区视频免费完整版观看| 亚洲精品小视频| 欧美中文字幕| 亚洲日本中文字幕区| 小黄鸭精品aⅴ导航网站入口| 久久影院午夜论| 国产精品久久久久久久久久久久久| 国产日韩专区| 制服丝袜亚洲播放| 欧美69wwwcom| 亚洲欧美日韩天堂一区二区| 欧美jizz19性欧美| 国产伦精品一区二区三区免费迷| 亚洲激情专区| 久久久亚洲国产天美传媒修理工| 亚洲国产成人精品久久| 久久久久欧美| 亚洲欧美欧美一区二区三区| 久久久精品动漫| 99精品欧美一区二区三区| 久久久99爱| 国产精品大片| 日韩视频―中文字幕| 免费日韩视频| 欧美一区二区视频在线| 欧美日韩一本到| 亚洲欧洲日韩综合二区| 久久人人97超碰精品888| 亚洲免费小视频| 欧美特黄一区| 亚洲一级片在线观看| 亚洲人成网站影音先锋播放| 久久精品国产在热久久| 国产精品欧美经典| 亚洲欧美激情诱惑| 一区二区三区国产| 欧美日韩视频第一区| 99热在线精品观看| 91久久线看在观草草青青| 久久伊人亚洲| 亚洲激情av| 亚洲高清影视| 欧美韩日视频| 日韩一区二区精品视频| 亚洲经典视频在线观看| 欧美www视频在线观看| 亚洲国产日日夜夜| 91久久午夜| 欧美香蕉视频| 香蕉av福利精品导航| 亚洲一区二区三区四区在线观看| 国产精品成人午夜| 久久精品99久久香蕉国产色戒| 亚洲综合二区| 国产一区成人| 免费观看久久久4p| 你懂的国产精品| 99精品国产热久久91蜜凸| 91久久久精品| 国产精品亚洲综合一区在线观看| 午夜精品国产更新| 久久精品盗摄| 亚洲免费观看高清在线观看 | 久久国产一区二区三区| 娇妻被交换粗又大又硬视频欧美| 蜜臀91精品一区二区三区| 久久亚洲图片| 一区二区高清在线观看| 亚洲一区免费| 在线观看亚洲一区| 亚洲美女视频网| 国产日韩欧美中文在线播放| 一区二区国产日产| 亚洲精品色婷婷福利天堂| 99热精品在线| 91久久综合亚洲鲁鲁五月天| 亚洲高清网站| 国产精品人人做人人爽 | 国产精品成人免费视频 | 亚洲先锋成人| 永久久久久久| 国产精品99久久久久久久女警 | 亚洲精选91| 国产日韩成人精品| 91久久精品国产91久久| 国产一区二区看久久| 亚洲日本va午夜在线影院| 国产亚洲精品7777| 日韩视频在线观看免费| 激情久久久久| 亚洲主播在线| 在线综合+亚洲+欧美中文字幕| 久久狠狠亚洲综合| 亚洲欧美日产图| 欧美激情精品久久久久久黑人 | 免费成人黄色| 欧美在线免费看| 欧美视频日韩| 91久久精品美女高潮| 影音先锋亚洲精品| 欧美中文字幕视频在线观看| 一区二区三区高清不卡| 免费一区二区三区| 免费在线日韩av| 国内成人精品一区| 性久久久久久久久| 欧美伊人久久大香线蕉综合69| 欧美日韩国产免费| 日韩午夜在线观看视频| 99热这里只有成人精品国产| 麻豆91精品| 欧美电影美腿模特1979在线看| 国产在线不卡| 欧美一区二视频| 久久精品欧美| 国产日产精品一区二区三区四区的观看方式 | 亚洲美女免费精品视频在线观看| 欧美一区二区三区免费视| 午夜精品美女自拍福到在线 | 久久人人97超碰国产公开结果| 亚洲精品网站在线播放gif| 久久一区二区三区四区五区| 久久精品视频一| 国产亚洲一区二区精品| 欧美一级视频精品观看| 欧美一区二区三区在线观看视频| 国产精品99一区二区| 一本久道久久综合婷婷鲸鱼| 一区二区久久久久| 国产精品高潮呻吟久久| 亚洲一区二区三区四区五区午夜| 午夜精品久久久久| 国产亚洲精品美女| 久久久久一区二区| 亚洲成人直播| 亚洲性线免费观看视频成熟| 国产精品v亚洲精品v日韩精品| 亚洲一区二区高清视频| 久久不射电影网| 在线精品一区二区| 欧美激情亚洲自拍| 亚洲图片你懂的| 六月婷婷一区| 日韩小视频在线观看| 国产精品国内视频| 久久精品一区四区| 最新国产の精品合集bt伙计| 在线亚洲免费| 韩国在线视频一区| 欧美激情综合五月色丁香小说| 中文精品视频| 嫩草影视亚洲| 亚洲欧美日韩国产中文在线| 国产亚洲免费的视频看| 欧美/亚洲一区| 亚洲在线视频| 亚洲黄色尤物视频| 久久激情综合网| 亚洲日本中文| 国产综合第一页| 欧美日韩免费一区二区三区视频| 午夜欧美大尺度福利影院在线看 | 一区二区三区精品久久久| 国产毛片一区| 欧美激情中文字幕在线| 欧美一级理论性理论a| 亚洲精品国久久99热| 久久九九有精品国产23| 在线视频一区观看| 亚洲国产精品成人久久综合一区| 欧美日韩在线精品| 欧美mv日韩mv国产网站app| 午夜欧美不卡精品aaaaa| 日韩写真视频在线观看| 麻豆乱码国产一区二区三区| 午夜视频在线观看一区二区| 日韩视频在线播放| 亚洲高清av| 国产一区二区三区在线观看视频| 欧美日韩一区在线| 欧美精品电影| 欧美成人午夜影院|