日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

渲染管线简介

發布時間:2025/3/15 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 渲染管线简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:?https://blog.csdn.net/nikoong/article/details/79776873

渲染管線入門

?

  渲染管線中一些技術名詞大部分是英文直譯,光看中文很容易被誤導。所以我們必須在了解一個技術的具體作用之后,才能了解它到底是什么。這篇博客我主要翻譯自Minh Tri Do Dinh的GPUs - Graphics Processing Units一文。也就是一些論壇里推薦給新手閱讀的圖形處理器架構(GPU_Architecture)與圖形管線(Graphics_Pipeline)。在此之上我還添加一些注解,方便大家閱讀。

基礎名詞

  • 3D物體:任何物體,其幾何形狀都是由三角形組成的。三角形,或者任何圖形,都由頂點組成。?
    ?

  • 頂點:具有空間坐標和其他信息(如顏色和紋理坐標)的點

  • 紋理:映射到3D物體表面的圖像,這會造成該物體由某種材料組成的幻覺。物體的頂點存儲著紋理坐標(2維向量),用于指定紋理如何映射到任何給定表面。?
    ?

  • 齊次坐標:3D空間中的點通常需要3個坐標來指定位置。如果繼續用3個坐標表示,有時會遇到問題。例如:頂點平移時的操作是加一個向量,頂點旋轉時的操作是乘以3x3矩陣)。所以我們通過擴展三維向量來繞開這個問題。我們添加另一個坐標(w坐標,從而得到所謂的齊次坐標[注1]。這樣一來,頂點的所有變換都可以通過將其四維坐標與特定的4x4矩陣相乘來進行,使得計算更容易。齊次坐標的另一個用途是明確區分向量和點。

渲染管線

  渲染管線(Graphics pipeline/rendering pipeline),其實貼切的翻譯應該是渲染流水線。渲染流水線就是將數據從3D場景轉換成2D圖像,最終在屏幕上顯示出來的總過程。它分為幾個階段:應用階段、幾何階段和光柵階段。?
  應用階段:主要是CPU與內存打交道,例如碰撞檢測,計算好的數據(頂點坐標、法向量、紋理坐標、紋理)就會通過數據總線傳給圖形硬件 。?

幾何階段(Geometry Stage)

  這個階段也被稱為“變換和光照”階段。為了從3D場景轉換到2D,場景中的所有物體都需要轉換到幾個空間。每個空間都有自己的坐標系。這些轉換是通過一個空間的頂點轉換到另一個空間的頂點來實現的。?
  光照(lighting),是這個階段的另一個主要部分。是使用物體表面的法向量來計算的。通過攝像機的位置和光源的位置,可以計算出給定頂點的光照屬性。?
?

  對于坐標系變換,我們從物體坐標系開始,每個物體都有自己的坐標系,這有利于幾何變換,如平移,旋轉和縮放。?
  之后,我們進入到世界坐標系,場景中的所有物體都具有統一的坐標系。?
  下一步是轉換到視圖空間,即攝像機坐標系。想象一下:先在世界空間中放一個虛擬攝像機,然后進行坐標變換,使得攝像機位于視圖空間的原點,鏡頭對準z軸的方向。現在我們定義一個所謂的視體(view frustrum),它用來決定了我們能夠通過虛擬的3D攝像機所能看到的場景,我們只需要把這些內容渲染出來就行。?
?

  之后,所有的頂點將被轉換剪切空間,并通過圖元裝配,組裝成圖元(primitive,三角形或線)。當物體在視體的外,說明我們不需要渲染這個物體,所以就簡單丟棄它。當一個物體有部分在視體內,我們需要進行剪切,同時生成新的頂點。新頂點具有適當的的紋理坐標和顏色坐標。?
  接著我們執行透視分割操作,其實就是實現了一個投影變換,把”近大遠小“的效果實現出來。把一個視體轉換為歸一化的立方體。這個立方體的坐標范圍:x和y在-1和1之間,z在0和1之間。同時視體內的物體也一同進行縮放。這樣一來得到的立方體,便于裁剪操作,也便于將來投影到平面(立方體只需要“扁平化”)。?
?

  最后,我們轉換到屏幕空間。執行的操作:根據窗口大小將x和y坐標縮放到合適的坐標,這樣就得到2D圖片了。(請注意,頂點的z坐標會保留,用于以后的深度操作)?
  請注意,除了剪裁之外紋理坐標也需要進行轉換。還要注意除去不可見的表面[注2]。如出去立方體的背面,就是所謂的背面剔除。

光柵階段(Rasterization Stage)

  光柵這個名詞不太好理解,新手可以想象成”透過一把梳子看世界“,類似于將連續的數據轉化成離散的數據。這里光柵階段是指矢量圖形轉化成像素點的過程。?
  GPU需要遍歷2D圖像并進行轉換將數據轉化為大量“像素候選”,即所謂的片段(Fragment,片段可以理解為像素的原型,但絕對不是指一大片像素)。片段是包含位置,顏色,深度,紋理坐標等屬性的數據結構。片段可能會最終成為圖像上的像素。片段是通過檢查原始圖元和和屏幕像素是否相交來生成的。如果一個片段與一個基元相交,但不與它的任何頂點相交,那么它的屬性必須通過頂點之間的屬性插值來計算得出。?
?

  最后還有一些步驟來得到最終的像素。最終像素顏色的計算:結合紋理和顏色、光照等其他屬性,或片段與另一個半透明片段的結合(所謂的α混合),亦或是可選的霧化效果(另一個圖形效果)。[注3]


注1:齊次坐標和四元數長得很像,但卻是不同的概念,適用領域也不一樣。

注2:可見性檢查的一些具體操作:?
* 剪刀測試(檢查矩形面罩的可見度)?
* 模板測試(類似于剪刀測試,僅針對緩沖區中的任意像素模板)?
* 深度測試(比較片段的z坐標,丟棄更遠的片段)?
* Alpha測試(檢查半透明碎片的可見度)

注3:在我們獲得最終結果之前,可以應用像抗鋸齒這樣的附加程序:將一些像素寫入內存供以后顯示。

reference

  • GPUs - Graphics Processing Units
  • 知乎:如何理解 OpenGL 中著色器、渲染管線、光柵化等概念?
  • OpenGL技術之View Volume, Viewport, Screen的關系
  • 維基百科-齊次坐標
  • 坐標系統
  • ?此外,還要講的就是? ?shader? 的編寫,這里推薦? ?http://bbs.gameres.com/upload/sf_20061018193133.pdf

總結

以上是生活随笔為你收集整理的渲染管线简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。