文章編號:11819時間:2024-10-01人氣:
渲染管線的主要任務是在給定三維物體、光源、材質等條件下,生成二維圖像。 物體在圖像中的位置、形狀和外觀取決于它們的幾何、環境特征以及相機的位置。 物體的材質屬性、光源、紋理和著色方程決定了物體的外表。 實時渲染管線大致分為四個主要步驟,每個步驟包含若干子步驟。 步驟間有邏輯分割,但在實際實現中部分步驟可能會合并執行。 應用階段在CPU上運行,開發者全權控制。 此階段的關鍵是將幾何信息傳遞給幾何處理階段。 應用階段基于軟件實現,可以利用CPU多核提升性能。 碰撞檢測、接收外部輸入(如鍵盤、鼠標)和實現加速算法通常在此階段完成。 幾何處理階段在GPU上執行,主要負責頂點著色、投影、裁剪和屏幕映射。 頂點著色分為頂點著色器、模型變換、視圖變換和投影變換。 細分著色、幾何著色和流輸出是可選步驟,取決于GPU硬件能力和需求。 曲面細分產生適當數量的三角形表示曲面,幾何著色處理圖元產生新頂點,流輸出使GPU成為幾何引擎。 這些步驟按照細分、幾何著色和流輸出的順序執行。 裁剪階段篩選出視圖體內的圖元,將圖元傳遞至光柵化步驟。 裁剪使用4維齊次坐標,第四值在透視投影中確保正確的三角形插值和裁剪。 屏幕映射將坐標系轉換為屏幕坐標,與深度值和其他著色信息結合,準備進入光柵化階段。 光柵化階段將屏幕空間的頂點及其對應的深度值轉換為屏幕像素。 判斷像素是否位于三角形內部是此階段關鍵部分。 圖元裝配計算三角形的差分、邊界方程及其他數據,用于三角形遍歷和數據插值。 三角形遍歷查找像素是否在三角形內。 像素處理分為像素著色和合成兩步。 像素著色階段由可編程的GPU核執行,開發者提供像素著色器程序計算顏色值。 合成階段融合像素著色產生的顏色數據,并解決可見性問題,包括深度測試和半透明物體的繪制順序。 模版緩沖用于控制渲染數據寫入。 合成操作統稱為混合操作。 幀緩沖包含所有緩沖。
計算機圖形學是利用計算機合成和操作視覺信息的學科。 它的應用領域廣泛,包括游戲、電影、虛擬現實(VR)、增強現實(AR)、用戶界面(GUI)、數字照片、地圖繪制、3D打印、建筑設計等。 在計算機圖形學中,涉及到的知識多而復雜。 首先,要解決的是如何建模,例如繪制一個立方體。 假設立方體長寬高為2*2*2,中心在三維坐標軸中心(0,0,0)。 立方體的八個頂點坐標分別為:A(1,1,1),B(-1,1,1),C(1,-1,1),D(-1,-1,1),E(1,1,-1),F(-1,1,-1),G(1,-1,-1),H(-1,-1,-1)。 接下來,需要解決的是如何將三維空間中的立方體投影到二維平面上,即用數字描述在屏幕上顯示立方體的過程。 投影的基本策略包括將三維頂點投影成二維平面上的點,然后將這些點連接起來。 透視投影是基于“近大遠小”的原理,通過小孔成像原理,將三維物體顯示在二維平面上。 具體公式為:v = y/z, u = x/z,其中x, y, z指的是頂點到相機小孔C的水平、豎直和橫向距離,而不是頂點在三維空間中的坐標。 接著,我們需要了解像素(Pixel)的概念。 一個像素由紅綠藍三原色和色彩空間(透明度)信息組成,以32位(相當于一個浮點數)存儲,每個值范圍為0-255。 顯示屏由許多像素組成,1920*1080分辨率表示橫向1080個點,縱向1920個點,共約200萬個點。 顯示像素的方法有LCD和DMD等。 光柵化是指將連續的物體(如線、多邊形)用像素網格表示。 對于線段的光柵化,可以采用Diamond Rule,即只在直線穿過正方形中間的菱形區域時點亮整個正方形像素。 通過求解線段的斜率,可以簡化光柵化過程。 通過建模和光柵化,我們可以在屏幕上顯示3D物體。 下一節將學習如何繪制更復雜的平面圖形,以及處理鋸齒問題。 理解3D物體的建模和光柵化過程是計算機圖形學的基礎,為后續學習更復雜的表面描繪、光照模擬、材質屬性和物體運動做好準備。 學習計算機圖形學是一個循序漸進的過程,從簡單的二維繪圖到復雜的三維渲染,涵蓋了數學、幾何、計算機視覺等多個領域。 通過不斷實踐和學習,可以逐步掌握這一領域的知識和技能。
渲染管線與GPU(Shader前置知識)渲染管線是實時渲染的核心組件,其目的通過虛擬相機、三維物體、光源等生成二維畫面。 它一般分為四個大階段——應用階段、幾何運算、光柵化、像素運算。 應用階段由應用程序驅動,主要任務包括用戶輸入處理、碰撞檢測、動畫、物理模擬、全局加速算法等,通常在CPU端執行。 這個階段決定了渲染的效率,因此許多渲染優化,如各種剔除算法,都在此階段進行。 部分應用階段的工作可以通過Compute Shader交給GPU處理,實現GPU的高并行計算能力。 幾何運算階段負責處理形體變換、投影和其他逐頂點或逐三角面的幾何操作,決定繪制對象是什么、如何繪制和繪制位置。 此階段可以細分為頂點Shading階段、投影階段、剪裁階段、屏幕映射階段。 頂點Shading階段負責頂點位置計算、輸出法線、紋理坐標等信息。 幾何運算階段包含細分曲面、幾何Shading和流輸出等可選過程,這些過程在GPU中可以獨立實現。 光柵化階段將屏幕空間的二維頂點及其深度等數據轉化到屏幕像素內,分為三角面設置(圖素集合)階段與三角形遍歷階段。 最后是像素運算階段,通過前面所有階段后,圖素內的像素被傳遞到此階段,進行深度測試和顏色確定。 此階段分為像素Shading階段與合并階段,像素Shading階段使用插值Shading數據作為輸入,輸出顏色傳入合并階段,而合并階段負責將像素shading算出的顏色與當前顏色緩存的顏色進行混合。 渲染管線中,GPU的高并行計算能力通過流水線實現,將大量簡單任務同時處理,從而大幅度提高了渲染效率。 通過細分曲面、幾何Shading等可選過程,GPU能對模型進行優化,增加細節表現力。 同時,GPU在像素運算階段提供高度可編程性,允許用戶實現各種復雜的渲染效果,如紋理貼圖、Alpha測試等。 綜上所述,渲染管線與GPU緊密合作,通過高效的數據處理和并行計算,實現實時、高質量的三維圖像渲染。 了解渲染管線的工作原理和GPU在其中的作用,對于掌握Shader技術、提高渲染效率至關重要。
深入探討多重采樣(MSAA)的神秘世界,讓我們從Khronos和微軟的官方文檔出發,理解這個抗鋸齒技術的運作原理。 OpenGL和DX中的MSAA,其核心是每個像素的覆蓋掩碼(4-bit)和樣本(4個深度值),它們的協同工作確保了圖像的平滑性。
光柵化、片段著色與裁剪在渲染流程中,先經歷光柵化,將幾何形狀轉換為像素。 接著,片段著色器單獨處理每個像素,但它并未考慮覆蓋情況,只計算單個樣本的顏色。 裁剪階段則是關鍵,因為我們需要考慮scissor區域,以確定哪些樣本是有效的。 在此之后,MSAA的合成過程在片段著色器之后進行,以便利用裁剪信息。
4x MSAA的執行策略關于4x MSAA的執行,有兩種可能的解釋:一種是逐個樣本執行,即一次處理四個樣本;另一種是整體一次性處理。 樣本顏色的來源可能各異,可以是每個位置獨立采樣或所有樣本共享中心顏色,這取決于具體實現的技術細節。
默認情況下,每個像素僅進行一次采樣,中心顏色會被復制到四個樣本中。 這可能源于像素中心或內部樣本,以避免Outerpolate現象。 提升Pixel Frequency雖能提高效率,但可能影響視覺效果,這時Sample Frequency提供了選擇,讓每個像素的樣本獨立由片段著色器處理。
MSAA的深度與透明度處理
MSAA(如4x)的默認操作是對樣本顏色進行加權平均,深度和模板值通常是四個獨立值。 如果深度測試失敗,相應的樣本會被忽略。 Alpha to Coverage通過改變覆蓋掩碼,實現了順序無關的透明度處理。 盡管Alpha Test在某些情況下效果不佳,Alpha Blend則提供了更佳的邊緣融合,但需要遵循特定順序。 Alpha to Coverage類似于基于樣本的Alpha Test,提供了更靈活的解決方案。
在處理方式上,MSAA與Supersampling的主要區別在于,MSAA對所有位置進行處理,而不僅僅是邊緣。 最終,MSAA輸出的圖像以100x100分辨率的像素為單位,每個像素包含四個樣本的均值,這個過程通常通過雙線性插值(Bilinear resolve)來實現。 值得注意的是,樣本顏色可能來自不同的三角形,取Z測試通過的三角形顏色作為最終結果。
通過深入了解MSAA的這些細節,我們能夠更好地欣賞到它在消除鋸齒、提升圖像質量方面的獨特貢獻,以及在實際應用中的靈活調整選項。
經過變換之后,不管是正交投影還是透視投影,都被變換成[-1,1]的立方體,接下來就是要繪制在屏幕上,叫做光柵化 1.相機的可視面,寬高,可以得到長寬比 (field of view視場角),根據垂直可視角度fovY和長寬比可以得到水平可視角度fovX 1.右邊是視椎的近平面,點(1,t,n)與z軸的夾角是fovY/2 2.t是z的值,b是-t,近平面的高就是2t,r就是x的值,l是-r,近平面的寬就是2r 3.于是可以得到右邊兩個等式 1.左下角是原點,每個像素用(x,y)整數表示,圖中藍色像素是(2,1) 2.像素的寬高是1,像素的中心是(x+0.5,y+0.5) 3.屏幕的范圍是從(0,0)到(width,height) 1.忽略z,實質還是一次平移加一次縮放 2.因為MVP得到的是中心在原點,所以要先平移,讓左下角位于原點,然后把x和y拉伸到屏幕的大小 不管是二維還是三維,圖形都可以分解成一定數量的三角形 1.實質就是判斷點否在三角形內 2.定義一個函數inside(tri,x,y)來輸出是否在三角形內,然后遍歷整個屏幕中的像素 1.利用向量的叉乘,p2p0 x p2q,p0p1 x p0q,p1p2 x p1q三個結果如果是同號的,則在三角形內,否則在三角形外 在邊緣上的點再不同情況下可以算也可以不算. 1.將三角形包圍在內的矩形叫做bounding box 2.p1,p2,p3中取maxX和maxY,就得到一個優化后的bounding box,可以提高效率,除此之外還有很多優化方案 三角形光柵化之后,由于像素點本事有大小,因此就會產生鋸齒(Aliasing) 鋸齒產生的原因是采樣率的問題,采樣的概念在圖片,視頻.音頻中通用,低采樣率可以降低質量,加快處理速度,但是會產生走樣(Artifacts),鋸齒便是其中一種情況. 顯示器會在刷新的時候隔行刷新,例如第一幀刷新奇數行第二幀刷新偶數行,以此提高效率,但是會在一定程度上造成走樣,或者叫做瑕疵. 上圖中叫做摩爾紋,是采樣的時候,為了降低質量去除奇數行或者偶數行像素產生的. 信號變換的太快以至于采樣的速度很不上,就造成了Artifacts 先對場景,或者說信號進行模糊(濾波)處理,然后再采樣,可以在一定程度上反走樣 注意如果先采樣,再做模糊是達不到效果的 圖二中: 同樣的采樣頻率,信號頻率越快,就越會走樣,上面的根據采樣可以大概的還原出信號函數,但是下面的已經完全不能還原了 圖三中: 在藍色函數中進行采樣,采樣之后還原,還原出來的是顯然只能是黑色函數,和原本的藍色已經差的太遠;也可以理解成,用同樣的采樣頻率去采樣兩種頻率的信號,結果卻完全相同 傅里葉變換可以把時域變成頻域: 1.左邊的圖像,叫做時域,右邊的圖叫做頻域,是左邊的圖經過傅里葉變換生成的 2.右邊圖像的信息由亮度在不同的位置表示出來,外圍的是高頻,中心的是低頻 3.水平和數值的十字高亮,是因為圖片不是重復信號,沒有時間信息,因此處理的時候會把圖片進行平鋪,一張接一張,當圖像切換邊界的時候,會產生劇烈的變化,從高頻到低頻全部都產生了變化,就出現了十字高亮 去除低頻信息: 1.將右邊的中心低頻信息抹去,逆傅里葉變換,從右向左重新生成圖片,叫做高通濾波,也就是只有高頻信息可以通過 2.由此可見,只剩下邊緣,或者說邊界,就是顏色和紋理等等細節發生劇烈變化的時候,就對應著高頻的信息. 去除高頻信息: 1.低通濾波,圖像的邊界已經看不到了,只剩下色塊表示的低頻信息 選擇性的去除不同的頻率區域: 1.產生不同的效果,圖一去除了最低頻的色塊和高頻的邊緣,圖二去除了大量低頻的色塊,和高頻的信息,通過這種控制,可以得到不同程度的細節信息 卷積Convolution: 1.首先是一個一維的信號,方便理解 2.然后是一個過濾器,過濾器從左向右移動,每次移動一個單位,移動之后計算過濾器中心對應的信號值,計算加權平均值,然后寫入采樣,最終得到一個采樣結果 3.卷積就是模糊操作 1.把信號(圖)用濾波器做卷積(圖變成另一張) 2.上一步等效于,把圖通過傅里葉變換,生成頻域,再把濾波器也傅里葉變換,兩者相乘,最后再逆傅里葉變換,就得到了和1相同的另一張圖 低通濾波器: 1.每個像素周圍八個像素都乘1,再加起來,然后除上9 2.這個box越大,圖像越模糊,如果是最小的box,則相當于沒做濾波,圖像就沒變化 3.上圖兩個盒子,是時域圖像,也就是黑白色塊,右邊頻域圖MSAA抗鋸齒: 把一個像素點細分成4個,甚至16個,通過三角形覆蓋的點個數,取一個百分比,占三個就是75%,占一個就是25% FXAA:采樣生成圖片之后,通過圖像處理,把鋸齒給替換掉,效率很高 TAA:把MSAA的樣本分布在時間上,復用前面幀的處理 DLSS:深度學習超采樣(超分辨率),50x50的圖片放到200x200需要補充像素,因此功能就是放大圖片 后畫的東西會覆蓋先畫的東西,計算機繪制沿用畫家算法的時候也是這么做的,遠近或者說遮擋關系,叫做深度關系 一種互相遮擋的情況,畫家算法無法解決這種場景. 深度緩存算法: 1.前面說到三個互相遮擋的三角形,無法確定深度關系,所以換個角度,去確定每個像素的深度,生成渲染后的圖片的同時,也生成一張用于保存每個像素深度信息的圖 1.左邊是渲染后圖 2.右邊是深度圖,離相機越近的點,顏色越黑 3.假設首先只有地板,地板的深度圖是近黑遠白,現在添加一個圖中的鏤空立方體進去,像素點a原本顯示的地板有一個深度x,現在點a也同時處在立方體上,立方體給了a另一個深度y,根據x和y就可以決定地板和立方體的遮擋關系 1.首先將場景分解成一定數量的三角形 2.將三角形全部光柵化 3.一開始所有的像素深度緩存值是無限大,也就是最遠,遍歷所有三角形的所有像素,然后和深度圖的所有像素點對比,如果深度比像素存儲的深度要小,說明應該要覆蓋原來的像素,就把深度重新寫到這個像素中. 4.這個算法與順序無關,也沒有做排序,只是在記錄一個最小值,大的值不做任何處理,因此復雜度僅為O(n) 1.R代表無限大 2.5比R小,則重新寫入 3.加入第二個三角形,跟R和5相比,比5大要被原來的三角形遮擋,比5小的會遮擋原來的三角形 4.這兩個三角形插入到了一起,互相遮擋一部分
內容聲明:
1、本站收錄的內容來源于大數據收集,版權歸原網站所有!
2、本站收錄的內容若侵害到您的利益,請聯系我們進行刪除處理!
3、本站不接受違法信息,如您發現違法內容,請聯系我們進行舉報處理!
4、本文地址:http://www.lmxpnzry.com/article/d617f51d0979ee9665c2.html,復制請保留版權鏈接!
簡介在當今的互聯網時代,我們經常發現自己被網絡審查和限制所束縛,網站被封鎖,應用程序被禁用,我們的在線自由受到限制,但是,有一個解決方案可以幫助我們打破這些障礙,恢復我們的互聯網自由,GoAgent,什么是GoAgent,GoAgent是一個開源的代理服務器,可以繞過互聯網審查和限制,它可以通過在本地計算機上設置代理服務器來工作,該服...。
本站公告 2024-10-01 04:04:20
簡介MaterialMotion是Google為Android開發人員提供的動畫和過渡工具集,旨在幫助開發者創建流暢、一致且引人入勝的用戶體驗,它建立在MaterialDesign原則之上,提供了一組預定義的動畫和過渡效果,可輕松應用于各種UI元素,主要功能預定義的動畫,MaterialMotion提供了一系列預定義的動畫,用于常見交...。
互聯網資訊 2024-09-30 13:43:48
什么是OverlayIcon64.dll,OverlayIcon64.dll是一個動態鏈接庫,DLL,,是Windows操作系統的重要組成部分,它用于在文件和文件夾上疊加圖標,以提供有關其狀態的視覺指示,OverlayIcon64.dll問題的原因OverlayIcon64.dll問題通常是由以下原因引起的,文件損壞,病毒或惡意軟件感...。
最新資訊 2024-09-29 14:53:04
HTML和CSS是Web開發中使用的兩種基本技術,HTML用于創建網頁的結構,而CSS用于控制網頁的外觀,當您開發Web應用程序時,可能會遇到各種HTML和CSS問題,本文檔是一個故障排除指南,將幫助您解決一些最常見的問題,HTML常見問題元素未顯示,確保元素的開始和結束標簽已正確關閉,檢查元素的父元素是否具有足夠的寬高以容納元素,元...。
技術教程 2024-09-24 12:10:40
SQLDISTINCT語句用于從表中返回唯一值,對于從大型數據集移除重復數據非常有用,但是,在使用DISTINCT語句時,可能會遇到各種問題和錯誤,本文提供了針對這些問題的故障排除指南,幫助您識別并解決這些問題,常見問題1.重復值仍然顯示原因,在DISTINCT子句中使用了錯誤的列,數據表中存在隱式重復的值,例如,空值,解決方案,檢...。
本站公告 2024-09-23 03:06:17
簡介圖層列表是動畫軟件中一個強大的工具,它允許您組織和管理您的圖層,通過使用圖層列表,您可以輕松地創建復雜的動畫效果,這些效果在過去很難或不可能實現,在本文中,我們將討論如何使用圖層列表來創建高級動畫效果,我們將介紹各種技術,包括圖層蒙版、跟蹤蒙版和父級動畫,我們還將提供一些提示和技巧,以幫助您充分利用圖層列表,使用圖層蒙版創建高級動...。
技術教程 2024-09-15 15:46:04
tools,qt,creator,>,QtCreator,Qt公司開發的跨平臺C,C,IDE,選擇編譯器或IDE時要考慮的因素在選擇C語言編譯器或IDE時,需要考慮以下因素,平臺支持,確保編譯器或IDE支持您開發應用程序所需的平臺,語言特性支持,確保編譯器或IDE支持您要使用的C語言特性,性能,對編譯速度、代碼生成質量和其他性...。
技術教程 2024-09-13 11:31:43
引言隨著應用程序變得越來越復雜,開發人員需要更強大的工具來構建和部署它們,Java虛擬機,JVM,已成為構建高性能、可移植應用程序的關鍵組件,隨著時間的推移,JVM不斷發展,新功能和創新不斷涌現,重塑應用程序開發的格局,新功能和創新GraalVMNativeImage,這項技術允許將Java應用程序編譯為本機可執行文件,從而提高啟動時...。
本站公告 2024-09-12 19:45:18
body,font,family,Arial,Helvetica,sans,serif,font,size,16px,margin,0,padding,0,.container,width,100%,max,width,960px,margin,0auto,padding,30px,.header,text,align,cente...。
互聯網資訊 2024-09-11 23:40:10
引言隨著嵌入式設備的日益復雜化,對熟練的嵌入式Linux驅動程序開發人員的需求也在不斷增長,嵌入模式是一種專門為嵌入式系統設計的Linux內核,它提供了開發高效、可靠且可維護的驅動程序所需的特性和功能,在本教程中,我們將深入探討嵌入模式,并了解如何利用其獨特功能來設計和開發出色的嵌入式Linux驅動程序,我們將涵蓋以下主題,嵌入模式簡...。
本站公告 2024-09-09 13:08:03
在學習編程時,動手實踐是最重要的部分之一,通過在真實項目中動手實踐,你可以將所學知識應用到實際場景中,深入理解編程概念,并培養解決實際問題的技能,尋找真實項目尋找真實項目可以從以下幾個途徑開始,開源項目,在GitHub等平臺上搜索開源項目,你可以找到各種規模和復雜程度的項目,從簡單的工具到復雜的應用程序,個人項目,如果你有自己的想法,...。
最新資訊 2024-09-08 22:13:29
織夢CMS是一個強大的內容管理系統,CMS,,可讓您輕松創建和管理網站,有許多不同的織夢CMS模板可用,每個模板都提供了一組不同的功能和設計,選擇最適合您需求的模板非常重要,這將幫助您創建一個成功且有效的網站,選擇織夢CMS模板時要考慮的因素在選擇織夢CMS模板時,需要考慮以下幾個因素,您網站的目的,您將使用您的網站做什么,您是博客、...。
本站公告 2024-09-06 12:55:33