• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      API的—小步圖形工業(yè)的一大步管窺Directx?。保迸c通用計(jì)算技術(shù)

      2009-10-27 10:22:14
      微型計(jì)算機(jī) 2009年16期
      關(guān)鍵詞:著色器開發(fā)者頂點(diǎn)

      陳 可

      從Directx 9到DirectX 10,微軟幾乎將API打破重來以構(gòu)建全新的渲染體系,Directx 10也成為了第一種影響硬件設(shè)計(jì)的圖形API——統(tǒng)一渲染架構(gòu)代替?zhèn)鹘y(tǒng)的分離渲染,從而賦予GPU更高的渲染效率和可編程能力,也為通用計(jì)算提供良好的基礎(chǔ),之后的DirectX10.1就屬于功能上的小升級(jí)。而到DirectX 11,微軟引入了更多的新技術(shù),但同時(shí)又保有DirectX 10.1的全部特性,換句話說,DirectX 11實(shí)際上就是DirectX 10.1的擴(kuò)展集,所有DirectX 10.1硬件所遵循的API對于DirectX 11同樣適用。

      對用戶而言,這樣的設(shè)計(jì)在兼容方面很有好處:無論軟件還是硬件,都可以完美地向后兼容。現(xiàn)行的Directx 10游戲,在Directx 11環(huán)境下都可以正常運(yùn)行。而對軟件開發(fā)者來說,包容的設(shè)計(jì)使他們能夠非常平滑地過渡到DirectX 11,而不需要像DirectX 9到DirectX lO過渡那樣突兀和漫長。這樣一來,軟件廠商可以直接轉(zhuǎn)入DirectX 11技術(shù)體系,這對于后續(xù)產(chǎn)品開發(fā)是非常有利的。不過,DirectX 11不僅只是簡單的升級(jí),它帶來相當(dāng)多的新穎特性,比如引入通用計(jì)算著色器(Compute Shader),允許GPI以事更多的通用計(jì)算工作,而不僅僅是3D運(yùn)算,這可以鼓勵(lì)開發(fā)人員更好地將GPU作為并行處理器使用。還有就是引入多線程渲染、提高GPU的工作效率t新增的鑲嵌技術(shù)(tessellation)可以幫助開發(fā)人員創(chuàng)建出更為細(xì)膩流暢的模型,實(shí)現(xiàn)高質(zhì)量實(shí)時(shí)渲染和預(yù)渲染場景。

      首先我們來看DirectX 10體系的渲染架構(gòu),DirectX 10加/LGeometry Shader(幾何著色器,簡稱GS單元)設(shè)計(jì)'讓GPU可以直接處理模板陰影特效(Stencfl Shadows)、動(dòng)態(tài)法向量圖(Dynamic cube maps)及位移貼圖(Displacement mapping)等操作——過去這些操作是由CPU來完成的。此外,Geometry Shader最高可支持1024個(gè)頂點(diǎn)處理,同時(shí)可把不必要的頂點(diǎn)數(shù)據(jù)刪除,這兩項(xiàng)功能使得繪圖運(yùn)算將較以往更具效率。除了納入幾何著色器外,DirectX 10的渲染流程其實(shí)并沒有改變,頂點(diǎn)渲染與像素渲染依次進(jìn)行,只是在硬件層級(jí)上,渲染工作不再由獨(dú)立的頂點(diǎn)著色器、像素著色器進(jìn)行,而交給通用的統(tǒng)一著色器(或者說統(tǒng)一渲染單元)。

      現(xiàn)在我們接著來看看DirectX 11的渲染管線。最引人注目的變化就是:在頂點(diǎn)渲染之后,DirectX 11新增了外殼著色器(Hull Shade~簡稱HS)、鑲嵌器(Tessellator)和域著色器(Domain Shader)三個(gè)新的管線;而在像素渲染環(huán)節(jié),DirectX 11則新增了計(jì)算著色器(Computer Shade,簡稱CS),這些新增的部分也就是DirectX 1l的關(guān)鍵所在。

      在DirectX 11中,新增的Compute Shader(Cs)計(jì)算著色器擁有核心地位。與DXl0中引入的GSYh何著色器不同的是,CS并不是渲染管線的一部分,它的主要用途在于增強(qiáng)GPU的通用計(jì)算能力。

      我們知道,現(xiàn)在的GPU能夠被應(yīng)用于某些通用計(jì)算工作,譬如在高并行計(jì)算應(yīng)用中,GPU就表現(xiàn)出十倍于CPU的卓越能力。對游戲開發(fā)者而言,經(jīng)常出于某種需要希望GPU能執(zhí)行通用計(jì)算指令,但以往的渲染結(jié)構(gòu)卻對GPU制造了諸多障礙——比如說,程序員可以在一個(gè)像素著色程序中強(qiáng)行加入通用算法,但卻無法隨意利用諸如樹形結(jié)構(gòu)之類的數(shù)據(jù)結(jié)構(gòu),這就給程序員帶來很大的麻煩。因?yàn)橐谙袼亻g共享數(shù)據(jù)的過程非常繁瑣,先繪制三角數(shù)據(jù)結(jié)構(gòu)、再加入貼圖是唯一的解決方案,但這將嚴(yán)重影響GPU的渲染性能。而在DirectX 11和CS著色器的幫助下,未來的游戲開發(fā)者將不再受困于此,他們可以直接越過復(fù)雜的數(shù)據(jù)結(jié)構(gòu)、并在這些數(shù)據(jù)結(jié)構(gòu)中運(yùn)行更多的通用算法。而這些算法將由CS著色器專門負(fù)責(zé),不會(huì)給渲染單元帶來額外的負(fù)擔(dān)。

      CS代碼可以做到高度靈活,它們可以支持隨機(jī)讀寫、不規(guī)則列陣(而不是簡單的流體或者固定大小的2D列陣)、多重輸出,并可根據(jù)程序員的需要直接調(diào)用單線程或多線程應(yīng)用。CS體系中擁有32Kb容量的共享寄存器和線程組管理系統(tǒng),具備可執(zhí)行無序Io運(yùn)算的能力??傊?,CS可以帶來幾乎無限的新型應(yīng)用,關(guān)鍵在于開發(fā)者能夠在多大程度發(fā)揮它的功效。

      在獲得靈活性的同時(shí),CS也會(huì)帶來一些性能損失。由于單線程任務(wù)現(xiàn)在無法以像素為單位,所以這些線程將會(huì)喪失幾何集合功能。從技術(shù)上講:雖然CS程序依然可以利用紋理取樣功能,但是原本的“自動(dòng)三線LOD計(jì)算”將會(huì)喪失自動(dòng)功能,程序員必須指定LOD指令。另外,一些并不重要的普通數(shù)據(jù)的深度揀選l(depthculling)、抗鋸齒(anti-aliasiug)、a混合(aIpha blending)和其它運(yùn)算不能在一個(gè)CS程序中被執(zhí)行。

      CS可以為開發(fā)者帶來多種多樣的靈活渲染,這項(xiàng)先進(jìn)技術(shù)應(yīng)該正中游戲開發(fā)商們的下懷:它們的興趣大多是尋求先進(jìn)技術(shù)來增強(qiáng)游戲引擎,比如增強(qiáng)抗鋸齒性能或無規(guī)則透明度的性能,帶來更先進(jìn)的DeferredSh8ding(延遲著色)技術(shù)、后處理效果(post processing effect)等等,CS都可以大放異彩。除T_k述這些特殊的渲染應(yīng)用,游戲開發(fā)者可能還希望讓GPU完成諸如IKnnversekinematics,逆運(yùn)動(dòng)學(xué))、物理計(jì)算、人工智能計(jì)算等過去由CPU完成的通用計(jì)算,而利用CS在GPU I-執(zhí)行這些算法時(shí),可以獲得非常理想的效率。

      早在XBOX 360平臺(tái)上,ATI就帶來了一項(xiàng)名為“Tessellation(鑲嵌化)”的新技術(shù)。這項(xiàng)技術(shù)的用途就是提升硬件的利用效率、用最低的資源獲得最好的渲染效果——簡單點(diǎn)說,我們可以將它比作數(shù)據(jù)傳輸中的壓縮技術(shù)。

      Tessellator可以將原始的圖形分成很多更小的圖形,然后它還可以將這些小圖形組合到—起、形成一個(gè)新的幾何圖形,這種幾何圖形更復(fù)雜,當(dāng)然也更為逼真。打個(gè)比亢Tessellator技術(shù)可以讓某個(gè)圖形變成立方體,并通過旋轉(zhuǎn)讓其從底部看起來像是個(gè)球形,而這兩者實(shí)際上都使用相同的數(shù)據(jù),達(dá)到節(jié)省資源的目的。

      在DirectX 11系統(tǒng)中,Tessellation處理過程包括外殼著色器(Hull Shader,簡稱HS)、鑲嵌器(Tessellator)和域著色器(DomainShader)三個(gè)組件,其中HS外殼著色器負(fù)責(zé)接收瑣碎的圖形數(shù)據(jù)和資料,鑲嵌器(Tessellator)只負(fù)責(zé)分塊處

      理,它根據(jù)HS的指令要求生成大批量的、確定數(shù)量的點(diǎn),然后將數(shù)據(jù)傳送給域著色器(Domain Shader),再由它來將這些點(diǎn)轉(zhuǎn)換成3D處理中的頂點(diǎn),最終就生成了相應(yīng)的曲線和多邊形。

      如果開發(fā)者能夠嫻熟地運(yùn)用鑲嵌化技術(shù),那么就能夠極大程度提升游戲性能、或者說在保有當(dāng)前性能的條件下顯著提升畫面品質(zhì)。這一點(diǎn)我們可以從下面的對比中看出來:在采用傳統(tǒng)高細(xì)節(jié)模型渲染時(shí),原始模型需要?jiǎng)佑镁蘖康娜切?,?shù)據(jù)量十分之大,最終獲得354fps的渲染性能。而采用低細(xì)節(jié)模型和Tessellation技術(shù)來生成相同的效果,所需的數(shù)據(jù)量與前者簡直不成比例,渲染性能可達(dá)到821.41fps,兩者對比非常懸殊。然而,鑲嵌化技術(shù)也不是萬能的:其使用的是一項(xiàng)完全固定的單元,不具備任何可編程能力,這就意味著開發(fā)者沒有絲毫回旋余地。這一點(diǎn)看起來與圖形技術(shù)的發(fā)展方向背道而馳。微軟之所以在DirectX 11中納入這項(xiàng)技術(shù),很大原因就是因?yàn)門essellation確實(shí)具有顯著的效果,以至于微軟無法拒絕。

      雙核處理器早已經(jīng)成為PC系統(tǒng)的標(biāo)準(zhǔn)配備,三核、四核更是進(jìn)入主流市場,然而,現(xiàn)在只有為數(shù)不多的游戲產(chǎn)品能夠?qū)Χ嗪似脚_(tái)提供良好的支持,原因在于為多核平臺(tái)編程十分困難,只有高水準(zhǔn)的開發(fā)者才能夠勝任,但顯然并不是所有的游戲公司都有這樣的一流好手。因此,直到今天為主,仍有很多數(shù)游戲都還只能在單線程下工作,即只能支持CPU的單核運(yùn)作,其它核心的計(jì)算力無法得到充分發(fā)掘。

      只要開發(fā)者采用DirectX 11作為開發(fā)平臺(tái),那么代碼本身就能直接支持多核平臺(tái),DirectX ll在底層接管了多核平臺(tái)的資源分派問題。DirectX 11預(yù)示著多線程游戲真正步人現(xiàn)實(shí),我們才可以說多核心處理器被真正派上了用場。對于一套四核游戲平臺(tái),當(dāng)某個(gè)渲染場景中有^像和它的三個(gè)鏡像,DirectX 11就會(huì)啟動(dòng)四個(gè)線程進(jìn)行并行處理,效率顯然要比目前單線程處理的方式快上數(shù)倍!而更令人興奮的是:多線程技術(shù)不僅適用于DirectX ll平臺(tái),它同時(shí)也能夠讓現(xiàn)有的DirectX10硬件受益。比如說基于DirectX 11開發(fā)的新款游戲,可以很好支持多線程,而當(dāng)它在DirectX 10硬件平臺(tái)上運(yùn)行時(shí),多核優(yōu)化的機(jī)能依然有效,前提是AMD和NVIDIA必須為各自的DXl0硬件開發(fā)出相應(yīng)的驅(qū)動(dòng)軟件才行——就目前看來,這項(xiàng)工作的進(jìn)展非常順利。

      猜你喜歡
      著色器開發(fā)者頂點(diǎn)
      過非等腰銳角三角形頂點(diǎn)和垂心的圓的性質(zhì)及應(yīng)用(下)
      基于UE4 實(shí)時(shí)射線追蹤技術(shù)的研究與探討
      基于Unity Shader石油泄漏現(xiàn)象模擬的研究
      基于IMx6的opengl圖形著色器開發(fā)研究
      中國新通信(2020年2期)2020-06-24 03:06:44
      關(guān)于頂點(diǎn)染色的一個(gè)猜想
      16%游戲開發(fā)者看好VR
      CHIP新電腦(2016年3期)2016-03-10 13:06:42
      iOS開發(fā)者調(diào)查
      電腦迷(2015年8期)2015-05-30 12:27:10
      iOS開發(fā)者調(diào)查
      電腦迷(2015年4期)2015-05-30 05:24:09
      安卓開發(fā)者之煩惱
      數(shù)學(xué)問答
      通化县| 阳新县| 山阳县| 高阳县| 历史| 门源| 阳江市| 乐清市| 夹江县| 三门县| 将乐县| 南投市| 五莲县| 股票| 江源县| 祁连县| 界首市| 沙河市| 安庆市| 封开县| 西安市| 黄大仙区| 松溪县| 成都市| 民勤县| 冀州市| 崇明县| 含山县| 岐山县| 万荣县| 方山县| 突泉县| 乡宁县| 宜春市| 虹口区| 城市| 观塘区| 色达县| 长沙市| 普定县| 昆山市|