DirectCompute tutorial for Unity 簡介 1

Unity3D從4的版本開始支持了DirectX 11。也就是說浅侨,在Unity3D中可以直接調(diào)用經(jīng)過封裝的DirextX API來使用DirectCompute進行并行計算盗扇。最近做了一段,發(fā)現(xiàn)還是挺好用的嘹裂,當然也有很多bug在其中。目前google的話摔握,單純講Unity3D中如何使用DirectCompute的文章特別少(可能本來這樣的需求就少)寄狼,有的文章又比較獨立而且沒有深度,大概介紹一個例子就完事兒盒发。邊學邊做的過程中盡管找到了合適的教程例嘱,但還是免不了很多問題。打算先把好的教程翻譯過來宁舰,這是第一篇拼卵。:)

DirectCompute tutorial for Unity 簡介 1

我使用Unity大約有兩年了。在這之前我都是用C++寫程序蛮艰,并且手動創(chuàng)建圖形上下文腋腮。我首選的圖形API是OpenGL,關于如何寫GLSL的shader積累了不少經(jīng)驗壤蚜。剛開始使用Unity的時候即寡,我選擇Cg著色語言。GLSL和Cg差別并不大袜刷,要轉換也很容易聪富。Unity雖然支持GLSL,但是用的并不多著蟹。

現(xiàn)在Unity開始支持微軟的DirectX 11墩蔓,并且?guī)в蠨irectCompute API梢莽。DirectCompute API通過寫compute shader開辟了一條使用GPU的新道路。主要問題是奸披,非常缺乏關于怎樣使用DirectCompute的教程和文檔昏名。Google搜索,微軟文檔都很少阵面,Amazon上也鮮有關于這個主題的書轻局。如果你正好知道一些好的資源,歡迎在評論的地方發(fā)個鏈接來样刷。

過去幾年我嘗試收集關于怎樣使用這個強大的API方面的信息仑扑,但是很少類似信息。所以我覺得自己寫個系列教程來介紹怎樣在Unity中使用DirectCompute颂斜。我會從為什么需要DirectCompute講起夫壁,它和傳統(tǒng)的圖形管線有什么不同拾枣,怎樣通過compute shader寫kernel函數(shù)沃疮,GPU內(nèi)部線程分塊怎樣工作,怎樣訪問紋理梅肤,怎樣使用不同類型的buffer司蔬,怎樣使用線程同步、共享內(nèi)存以及最優(yōu)化性能姨蝴。

這些教程不要求對Cg shader有任何經(jīng)驗俊啼,但是我強烈推薦在開始compute shader之前對Cg shader有一個很好的理解。主要原因是使用compute shader處理出來的數(shù)據(jù)很可能需要進行可視化左医,這時候就需要使用Cg shader了授帕。我會講到怎么去做。compute shader是使用微軟的HLSL寫的浮梢,在此教程中你不需要知道這個語言跛十,當然至少有一種shader語言的基礎最好(GLSL/Cg/HLSL)。幸運的是秕硝,HLSL和Cg很相似芥映,你設置可能感覺不出來兩者區(qū)別。首先推薦配置一下compute shader語法高亮的插件远豺,因為Monodevelop默認并沒有奈偏。

圖形管線

要理解為什么要使用DirectCompute,理解一下默認圖形管線及其歷史是很有幫助的躯护。它起始于90年代早期惊来,當時3D圖形越來越流行,GPU也逐漸成為計算機中的標配棺滞,開發(fā)者需要一個圖形API來利用這些強大的設備裁蚁。1992年内狸,OpenGL1.0發(fā)布了,它是SGI公司為其圖形工作站開發(fā)的IRIS GL厘擂。微軟最初是OpenGL ARB中的一員昆淡,該組織負責OpenGL標準的開發(fā),還包括了SGI刽严,Digital Equipment Corp昂灵,IBM,Intel舞萄。后來微軟離開了ARB眨补,開始開發(fā)自己的圖形系統(tǒng)Direct3D,作為DirectX API的一部分倒脓。后來ARB被Khronos工作組接管侄刽,現(xiàn)在的成員還有3Dlabs, ATI, Discreet, Evans & Sutherland, Intel, NVIDIA, SGI and Sun Microsystems.

開發(fā)者需要做的是把他們要渲染的幾何體送入GPU逝薪,OpenGL會把它傳入圖形管線直到最終輸出為屏幕上的像素。盡管開發(fā)者可以開關某些特定的部分,配置一些參數(shù)柠辞,但是這種管線是固定的绞惦,可以改變的并不多易核。這種情況持續(xù)了一段時間狼电,隨著開發(fā)者開始進一步推進GPU,對更高級特性的需求越來越明顯盆均,這種管線也要更加靈活塞弊。解決方案是使管線的特定部分可編程。開發(fā)這可以編寫自己的程序來執(zhí)行管線特定的部分泪姨。這些程序就被稱之為shader游沿。

新的可編程管線開啟了新的可能性,隨之而來的是更高質量的圖形肮砾,這是前一代游戲不具備的诀黍。盡管圖形管線最初是用來開發(fā)圖形,新的靈活性意味著GPU可以用來處理多種類型的算法唇敞。很多研究迅速展開蔗草,修改算法使之在多線程的GPU上執(zhí)行。物理疆柔、財經(jīng)咒精、數(shù)學、醫(yī)療等眾多領域開始使用GPU處理他們的數(shù)據(jù)旷档。GPU原始的能力并不好用模叙,因此GPGPU(General Purpose Graphical Processing Unit)編程誕生了。

General Purpose Graphical Processing Unit

GPGPU迅速成為了主流并進入行業(yè)領域鞋屈。然后還有一個問題范咨。圖形API仍然與圖形管線綁定故觅。shader的靈活性帶給你的只是圖形管線的一個階段,他們?nèi)匀皇艿焦芫€的限制渠啊。頂點shader需要輸出頂點输吏,片元shader需要輸出像素。然而大量的工作需要GPGPU必須改變替蛉。需要一個API把開發(fā)者中圖形管線的束縛中釋放出來贯溅,并且提供一個在與圖形無關的設置中使用GPU的環(huán)境。

接下來的幾年躲查,GPGPU的API開始出現(xiàn)它浅,現(xiàn)在的開發(fā)者還能夠在CUDA,OpenCL镣煮,DirectCompute中進行選擇姐霍。這些新的API開辟了使用GPU的新道路,再也不需要與傳統(tǒng)圖形管線綁定了典唇。盡管還有一些限制镊折,但是與在一個多線程環(huán)境中工作相比,太微不足道了蚓聘。

游戲產(chǎn)業(yè)最渴望使用GPU這種新能力腌乡。隨著游戲越來越真實,他們開始模擬真實世界中的物理現(xiàn)象夜牡。這些計算通常很復雜,需要很多的處理侣签。GPGPU提供的能力和靈活性可以是這些計算做的更細塘装、范圍更大。原始的圖形API為我們習以為常的3D游戲開創(chuàng)了新的世界影所,而新的GPUGPU API也在游戲行業(yè)中開辟了新紀元蹦肴。當代的游戲將會被這些API的使用所統(tǒng)治,將會有更真實的圖形和物理效果猴娩。

你需要做的就是學會如何使用它們阴幌。下一篇將會告訴你怎樣建立kernel函數(shù)以及線程塊是怎樣工作的。

dx11_pipeline

原文鏈接

  1. http://scrawkblog.com/2014/06/24/directcompute-tutorial-for-unity-introduction/ 感謝作者的博文:)
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卷中,一起剝皮案震驚了整個濱河市矛双,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蟆豫,老刑警劉巖议忽,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異十减,居然都是意外死亡栈幸,警方通過查閱死者的電腦和手機愤估,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來速址,“玉大人玩焰,你說我怎么就攤上這事∩置” “怎么了震捣?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長闹炉。 經(jīng)常有香客問我蒿赢,道長,這世上最難降的妖魔是什么渣触? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任羡棵,我火速辦了婚禮,結果婚禮上嗅钻,老公的妹妹穿的比我還像新娘皂冰。我一直安慰自己,他們只是感情好养篓,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布秃流。 她就那樣靜靜地躺著,像睡著了一般柳弄。 火紅的嫁衣襯著肌膚如雪舶胀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天碧注,我揣著相機與錄音嚣伐,去河邊找鬼。 笑死萍丐,一個胖子當著我的面吹牛轩端,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逝变,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼基茵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了壳影?” 一聲冷哼從身側響起拱层,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎态贤,沒想到半個月后舱呻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年箱吕,在試婚紗的時候發(fā)現(xiàn)自己被綠了芥驳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡茬高,死狀恐怖兆旬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怎栽,我是刑警寧澤丽猬,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站熏瞄,受9級特大地震影響脚祟,放射性物質發(fā)生泄漏。R本人自食惡果不足惜强饮,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一由桌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧邮丰,春花似錦行您、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斗蒋,卻和暖如春捌斧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吹泡。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工骤星, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爆哑。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像舆吮,于是被迫代替她去往敵國和親揭朝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容