一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

三維場景轉(zhuǎn)化為一幅二維圖像的過程

Dbwd_Imgtec ? 來源:未知 ? 作者:李倩 ? 2018-07-13 17:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

三維圖形渲染管線就是將三維場景轉(zhuǎn)化為一幅二維圖像的過程。

圖像中物體所處位置及外形由其幾何數(shù)據(jù)和攝像機(jī)的位置共同決定,物體外表是受到其材質(zhì)屬性、光源、紋理及著色模型所影響。

管線過程由3個(gè)大的階段組成:

Application(應(yīng)用程序階段):運(yùn)行在CPU上,能被開發(fā)者完全控制,該過程所做操作包括:

① 準(zhǔn)備場景數(shù)據(jù)

加載模型:Mesh、Material、Shader、Texture(硬盤 --> 內(nèi)存 --> 顯存)

攝像機(jī)(位置、朝向、視錐體)

光源(位置、類型等參數(shù)信息)

② 裁剪和剔除 :視錐裁剪、背面剔除、遮擋剔除 (Occlusion Culling)

③ 計(jì)算模型視圖矩陣

④ 設(shè)置渲染狀態(tài)(RenderState)

渲染管線內(nèi)部維護(hù)著一些狀態(tài)值。在我們調(diào)用渲染API函數(shù)進(jìn)行繪制之前我們需要設(shè)置這些狀態(tài)值。

這些狀態(tài)值指導(dǎo)GPU如何渲染我們傳遞到顯存的模型和紋理數(shù)據(jù)。我們稱這些狀態(tài)值為“渲染狀態(tài)(Render States) ”。

渲染狀態(tài)包括Shader、Texture、Material、Light內(nèi)部定義的各種狀態(tài)等

最后,發(fā)起DrawCall調(diào)用

Geometry(幾何階段):負(fù)責(zé)與每個(gè)渲染圖元打交道,進(jìn)行逐頂點(diǎn)、逐多邊形的操作。

其重要任務(wù)是把頂點(diǎn)坐標(biāo)變換到帶有深度的屏幕空間中,再交給光柵器進(jìn)行處理。

可進(jìn)一步分割成:模型視圖變換,頂點(diǎn)著色,[曲面細(xì)分],[幾何著色],投影,裁剪及屏幕映射

模型變換:將模型從模型空間變換到世界空間

視圖變換:將各個(gè)模型從世界空間變換到眼空間(攝像機(jī)處于原點(diǎn))

通常會把這兩個(gè)變換矩陣結(jié)合成modelview矩陣,并將這個(gè)過程稱之為模型視圖變換

頂點(diǎn)著色器:主要功能是修改頂點(diǎn)屬性。如:通過傳入模型視圖矩陣(MVP)進(jìn)行頂點(diǎn)空間變換(位置屬性)、逐頂點(diǎn)光照(顏色屬性)、紋理坐標(biāo)變換(uv屬性)等

頂點(diǎn)著色器的處理單元是頂點(diǎn),也就是說,輸入進(jìn)來的每個(gè)頂點(diǎn)都會調(diào)用一次頂點(diǎn)著色器。

頂點(diǎn)著色器只能對輸入頂點(diǎn)的相關(guān)屬性進(jìn)行修改、創(chuàng)建和忽略,不可以創(chuàng)建或銷毀任何頂點(diǎn),而且無法得到頂點(diǎn)與頂點(diǎn)間的關(guān)系。

輸入一般是一個(gè)變換矩陣和一個(gè)相對坐標(biāo);輸出為眼空間中的坐標(biāo)及每個(gè)頂點(diǎn)所附帶的其他屬性,如顏色、紋理坐標(biāo)

曲面細(xì)分著色器:用于細(xì)分圖元,分為3個(gè)階段。

Control Shader,負(fù)責(zé)把控后續(xù)階段的初始化操作,例如細(xì)化程度(可編程

處理Control階段的輸出,細(xì)化Patch數(shù)據(jù)(不可編程)

Evaluation Shader的輸入為Patch數(shù)據(jù);輸出數(shù)據(jù)為頂點(diǎn)著色器所應(yīng)輸出的數(shù)據(jù),但是是批量的(可編程)

幾何著色器:輸入是1個(gè)圖元,輸出是N個(gè)圖元(N>=0)

通過Shader程序可以指定Geometry Shader對頂點(diǎn)信息進(jìn)行增減。還有,因?yàn)閷?shí)際增減的是圖元頂點(diǎn),所以對各種的線段、多邊形、粒子等圖元也可以進(jìn)行增減。

利用Geometry Shader的各種方法被創(chuàng)造出來,因?yàn)榭梢宰杂傻纳啥噙呅?,那么就可以在地面上生長出草的多邊形,或者讓3D角色生長出毛發(fā)等是最基本的使用方法。

在游戲中,還可以把不需要做邏輯交互處理的例如火花等特效的表現(xiàn),使用Geometry Shader來生成。

注:Geometry Shader通常是在display driver中實(shí)現(xiàn)的,也就是說其實(shí)是由CPU負(fù)責(zé)計(jì)算,當(dāng)重新返回GPU的VS時(shí),對流水線的影響很大,所以Geometry Shader的實(shí)際效能并不高,甚至是非常低

投影:分為透視投影與正交投影;在眼空間將模型從三維空間投影到二維平面(D3D投影平面為z=1.0,OpenGL為z=-1.0;為了便于理解,可將其定義為視景體近裁截面)

注:上圖為眼空間,D3D為左手系,OpenGL為右手系

投影完成后,會得到歸一化的設(shè)備坐標(biāo)(Normalized Device Coordinates,NDC),方便下一步進(jìn)行硬件裁剪

歸一化x、y分量到[-1.0, 1.0]

歸一化z深度值(D3D:[0.0, 1.0] OpenGL:[-1.0, 1.0])注:近裁截面為最小深度、遠(yuǎn)裁截面為最大深度;

裁剪:將那些不在攝像機(jī)視野內(nèi)的頂點(diǎn)裁剪掉,并剔除某些三角圖元面片

屏幕映射:將每個(gè)圖元的x、y坐標(biāo)從NDC轉(zhuǎn)換到屏幕空間

注:D3D將屏幕左上角作為原點(diǎn),x軸向右,y軸向下;OpenGL將屏幕左下角作為原點(diǎn),x軸向右,y軸向上

Rasterizer(光柵化):對上個(gè)階段得到的圖元各頂點(diǎn)進(jìn)行插值(z深度值、法線方向、紋理坐標(biāo)、顏色等)來產(chǎn)生屏幕上的像素,并渲染出最終的圖像。

光柵化的任務(wù)主要是決定每個(gè)渲染圖元中的哪些像素應(yīng)該被繪制在屏幕上

三角形設(shè)置:對三個(gè)頂點(diǎn)插值計(jì)算三角形邊上的像素

三角形遍歷:掃描三角形邊上的像素來插值計(jì)算整個(gè)三角形內(nèi)的像素

片元著色器:逐片元的進(jìn)行著色計(jì)算(即逐像素光照)。該階段可以完成很多重要的渲染技術(shù) 如:紋理采樣

逐像素、逐頂點(diǎn)光照差異性主要體現(xiàn)在對于非精細(xì)模型,在執(zhí)行逐頂點(diǎn)光照時(shí),由于點(diǎn)距較大,在進(jìn)行顏色線性插值的過程中,無法精細(xì)平滑過渡,導(dǎo)致效果變差。

另外逐像素光照可以在渲染時(shí)添加并不存在的表面細(xì)節(jié)。如通過bump貼圖或normal貼圖,在原本平坦的表面表現(xiàn)出近似的凹凸效果。

當(dāng)然,逐像素的計(jì)算量要比逐頂點(diǎn)要大

逐片元操作:有時(shí)也被稱為光柵操作(raster operations ,ROP)或混合操作(blend operations),通過設(shè)置來淘汰一些不合格的片元以及如何合并問題

如果一個(gè)片元通過了所有的測試,新生成的片元才能和顏色緩沖區(qū)中已存在的像素顏色進(jìn)行Alpha混合,并寫入顏色緩沖區(qū)

? Alpha測試:

注1:并非所有顯卡都支持Alpha測試特性,使用前需要檢查顯卡是否有該能力

注2:由于大量片元會在該階段舍棄,Alpha測試可提高含大量透明物件場景的性能

? 模板測試:

注1:若建立模板緩沖區(qū)為8bits,則模板值的范圍為:[0, 255]的整數(shù);其初始值為清理模板緩沖區(qū)的所設(shè)置的值

注2:若在模板測試時(shí),關(guān)閉了深度測試,則深度測試始終通過

? 深度測試:

注1:深度值范圍(D3D:[0.0, 1.0] OpenGL:[-1.0, 1.0]),建立深度緩沖區(qū)位數(shù)越多,則深度值的精度就會越高;其初始值為清理深度緩沖區(qū)的所設(shè)置的值

注2:關(guān)閉了深度測試,意味著該片元始終通過深度測試

? Alpha混合:

FrameBuffer(幀緩沖)

幀緩沖器(frame buffer):在顯卡中硬件實(shí)現(xiàn),用于存放渲染的最終結(jié)果。分為:單緩沖、雙緩沖(double buffering)、三重緩沖(Triple Buffering)

單緩沖:各個(gè)物體的渲染會直接畫在屏幕上,效率比較低,由于能看到中間繪制過程,會導(dǎo)致屏幕不斷閃爍。一般只用于顯示非動(dòng)態(tài)的圖像

雙緩沖(double buffering):繪制是在一個(gè)后備緩沖器(backbuffer)中以離屏的方式進(jìn)行的。一旦在后備緩沖器中完成繪制,

通過交換指令(D3為Present、OpenGL為SwapBuffer)就可將后備緩沖器中的內(nèi)容與已經(jīng)在屏幕上顯示過的前臺緩沖器(frontbuffer)中的內(nèi)容進(jìn)行交換,使得一個(gè)完整的幀顯示在屏幕上。

完成交換后,后備緩沖器變?yōu)榍芭_緩沖區(qū),而前臺緩沖區(qū)變?yōu)楹髠渚彌_區(qū),為下一幀的繪制工作提前做好準(zhǔn)備。

我們將前后緩沖區(qū)功能互換的行為成為提交(Presenting)。

由于只是將前臺緩沖區(qū)的指針和后備緩沖區(qū)的指針做一個(gè)簡單的交換,提交是一個(gè)運(yùn)行速度很快的操作。

// OpenGL單緩沖glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glFlush(); //單緩沖的刷新模式;// OpenGL雙緩沖glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutSwapBuffers(); //雙緩沖的刷新模式;

三重緩沖(triple buffering):一個(gè)前臺緩沖區(qū),兩個(gè)后備緩沖區(qū)。

在開啟了VSync垂直同步時(shí),若游戲的FPS低于顯示器刷新頻率,三重緩沖可緩解卡頓現(xiàn)象,然而由于存在2個(gè)后備緩沖區(qū),三重緩沖會導(dǎo)致畫面有一幀的延遲。(見下文說明)

顯示器

以CRT顯示器為例(液晶顯示器原理類似),CRT的電子槍從左到右,從上到下進(jìn)行逐行掃描,掃描完成后顯示器就呈現(xiàn)一幀畫面,隨后電子槍回到初始位置繼續(xù)下一次掃描。

為了把顯示器的顯示過程和系統(tǒng)的視頻控制器進(jìn)行同步,顯示器(或者其他硬件)會用硬件時(shí)鐘產(chǎn)生一系列的定時(shí)信號。

當(dāng)電子槍換到新的一行,準(zhǔn)備進(jìn)行掃描時(shí),顯示器會發(fā)出一個(gè)水平同步信號(horizonal synchronization),簡稱 HSync;

而當(dāng)一幀畫面繪制完成后,電子槍回復(fù)到原位,準(zhǔn)備畫下一幀前,顯示器會發(fā)出一個(gè)垂直同步信號(vertical synchronization),簡稱 VSync。

顯示器通常以固定頻率(如60HZ)進(jìn)行刷新,這個(gè)刷新率就是 VSync 信號產(chǎn)生的頻率。

將顯卡與顯示器的刷新頻率通過一個(gè)稱為VSync的信號同步起來,保證顯示器上顯示的是一幀完整的畫面,來解決Tearing(撕裂)現(xiàn)象(多幀畫面同時(shí)繪制在顯示器上)。

假設(shè)游戲的FPS是100,顯示器的刷新頻率是75Hz,顯卡將比顯示器快1/3;這意味著,在1個(gè)顯示器刷新周期內(nèi),顯卡將寫入4/3的幀數(shù)據(jù),也就是說,下一幀的1/3覆蓋在前一幀之上;

當(dāng)然,隨著系統(tǒng)運(yùn)行,1/3這個(gè)比例會發(fā)生變化,1/3,2/3,1,1/3,循環(huán);這種幀與幀之間的不完全覆蓋重合現(xiàn)象就是撕裂現(xiàn)象。

D3DPRESENT_PARAMETERS md3dPP;md3dPP.PresentationInterval = D3DPRESENT_INTERVAL_ONE; // 開啟垂直同步

當(dāng)開啟了垂直同步,若游戲FPS高于顯示器刷新頻率時(shí),顯卡會將一部分時(shí)間浪費(fèi)在等待上,顯卡必須等待VSync信號的到來才能將繪制好的畫面推送給顯示器,這也使得游戲的最大FPS下降為顯示器的刷新頻率

這避免了顯卡做一些無用的工作,降低顯卡的功耗;然而,VSync技術(shù)也有缺點(diǎn),會導(dǎo)致玩家輸入的響應(yīng)出現(xiàn)延遲;另外,若游戲的FPS低于顯示器刷新頻率,那么系統(tǒng)的FPS將迅速下降為顯示器刷新頻率的分?jǐn)?shù)倍上,加劇畫面卡頓(Shutter)

Triple Buffering(三重緩沖)可以緩解這一問題,示意圖如下:

然而,從上圖可以看出由于存在2個(gè)后備緩沖區(qū),三重緩沖會導(dǎo)致畫面有一幀的延遲。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11080

    瀏覽量

    217062
  • 攝像機(jī)
    +關(guān)注

    關(guān)注

    3

    文章

    1705

    瀏覽量

    61404
  • 三維
    +關(guān)注

    關(guān)注

    1

    文章

    518

    瀏覽量

    29482

原文標(biāo)題:三維圖形渲染管線

文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    二維三維Gauss隨機(jī)粗糙面的Monte Carlo仿真

    二維的推導(dǎo)方法擴(kuò)展到三維,建立了三維Gauss隨機(jī)粗糙面模型。【關(guān)鍵詞】:高功率微波;;Monte Carlo方法;;隨機(jī)粗糙面;;仿真【DOI】:CNKI:SUN
    發(fā)表于 05-28 13:41

    二維數(shù)組轉(zhuǎn)換為RGB圖像問題

    大家好,我現(xiàn)在是通過建立個(gè)512×512的二維數(shù)組生成一幅黑白圖像,但是現(xiàn)在我又要通過這個(gè)二維數(shù)組生成
    發(fā)表于 09-17 14:21

    三維動(dòng)畫制作過程之間的聯(lián)系

    ,動(dòng)畫始終繚繞這風(fēng)格進(jìn)行發(fā)展變化,從二維走到三維,動(dòng)畫師們始終在盡力堅(jiān)持動(dòng)畫的個(gè)性。絕大多數(shù)的三維動(dòng)畫都屬于這作風(fēng)作品。(3)采取
    發(fā)表于 11-15 14:28

    二維傅里葉變換后怎樣求波數(shù)?

    我有一幅海浪的遙感圖像,圖像分辨率為2.5m,裁出其中個(gè)512像元*512像元的區(qū)域,對其做二維傅里葉變換,想求該區(qū)域海浪的波數(shù)K。(有文
    發(fā)表于 10-20 18:43

    三維逆向工程的成果及應(yīng)用案例

    `三維逆向工程的成果及應(yīng)用案例何為逆向工程?為適應(yīng)現(xiàn)代先進(jìn)制造技術(shù)的發(fā)展,需將實(shí)物樣件或手工模型轉(zhuǎn)化為Sence數(shù)據(jù),以便利用快速成形系統(tǒng)、計(jì)算機(jī)輔助系統(tǒng)等對其進(jìn)行處理,并進(jìn)行修改和優(yōu)化。逆向工程
    發(fā)表于 03-02 15:12

    三維觸控技術(shù)突破“向箔”的束縛

    `| 突破向箔的束縛:三維觸控然而,人們對觸摸屏交互方法的探索并沒有到此為止。這里不妨再梳理下手機(jī)與用戶交互方式的進(jìn)化過程。最初,用戶只能通過按手機(jī)上若干位置固定的按鍵來操作手機(jī),
    發(fā)表于 12-19 15:53

    二維數(shù)組怎么轉(zhuǎn)化為

    二維數(shù)組怎么轉(zhuǎn)化為
    發(fā)表于 05-04 17:04

    如何用labview程序?qū)?b class='flag-5'>二維圖片轉(zhuǎn)化為比特序列?

    如何用labview程序?qū)?b class='flag-5'>二維圖片轉(zhuǎn)化為比特序列?
    發(fā)表于 05-16 11:13

    在LABVIEW中怎么將二維數(shù)組轉(zhuǎn)化為數(shù)組

    `在LABVIEW中怎么將二維數(shù)組轉(zhuǎn)化為數(shù)組并且如何將數(shù)據(jù)顯示到波形圖中... 并且如何將數(shù)據(jù)顯示到波形圖中在“數(shù)組”中有“重排數(shù)組數(shù)
    發(fā)表于 02-14 16:56

    三維設(shè)計(jì)應(yīng)用案例

    CAD是目前工業(yè)制造產(chǎn)品設(shè)計(jì)的重要軟件之,廣泛應(yīng)用于機(jī)械、建筑等領(lǐng)域。而常用的CAD軟件,也就是所謂的三維制圖軟件,較二維的圖紙和二維的繪圖軟件,
    發(fā)表于 07-03 07:06

    安徽三維動(dòng)畫制作和二維動(dòng)畫有哪些區(qū)別呢?(

    三維動(dòng)畫制作中,“”這個(gè)字,是個(gè)幾何學(xué)和空間理論的基本概念。構(gòu)成空間的每個(gè)要素,如長度、寬度、高度,被稱之為
    發(fā)表于 01-22 10:02

    安徽三維動(dòng)畫制作和二維動(dòng)畫有哪些區(qū)別呢?(

    二維動(dòng)畫制作制作和三維動(dòng)畫制作除了按照在制作過程中攝像機(jī)或者虛擬攝像機(jī)是否可以任意進(jìn)行旋轉(zhuǎn)的區(qū)別外,主流的二維動(dòng)畫制作(不包括平面材料動(dòng)畫制作)和
    發(fā)表于 01-25 10:34

    基于二維激光測距儀的三維模型配準(zhǔn)研究

    在自主移動(dòng)機(jī)器人上安裝二維激光測距儀和內(nèi)置室內(nèi)小型電機(jī)云臺。將激光的平面信息和電機(jī)云臺的高度信息結(jié)合構(gòu)建個(gè)三維模型。通過RANSAC算法從三維點(diǎn)云陣中提取平面。并在
    發(fā)表于 09-16 14:46 ?70次下載
    基于<b class='flag-5'>二維</b>激光測距儀的<b class='flag-5'>三維</b>模型配準(zhǔn)研究

    二維、三維電機(jī)的性能分析

    根據(jù)電機(jī)試驗(yàn)項(xiàng)目的不同,般會獲得不同的測試結(jié)果圖表。這些圖表可以根據(jù)涉及的電機(jī)參數(shù)變量,簡單劃分為種:/二維/
    發(fā)表于 03-24 09:36 ?3980次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>維</b>、<b class='flag-5'>二維</b>、<b class='flag-5'>三維</b>電機(jī)的性能分析

    卷積、二維卷積、三維卷積具體應(yīng)用

    由于計(jì)算機(jī)視覺的大紅大紫,二維卷積的用處范圍最廣。因此本文首先介紹二維卷積,之后再介紹卷積與三維卷積的具體流程,并描述其各自的具體應(yīng)用。
    發(fā)表于 05-08 10:29 ?5225次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>維</b>卷積、<b class='flag-5'>二維</b>卷積、<b class='flag-5'>三維</b>卷積具體應(yīng)用