轉(zhuǎn)的文章 感覺有點老了 不過還是說明了問題 這里應(yīng)該是指的2008年左右的opengl 隨著移動化浪潮現(xiàn)在主流都是opengl了
反而是dx少了
Shader Language
Shader Language的發(fā)展方向是設(shè)計出在便攜性方面可以和C++、Java等相比的高級語言,“賦予程序員靈活而方便的編程方式”,并“盡可能的控制渲染過程”同時“利用圖形硬件的并行性,提高算法效率”。
Shader Language目前主要有3種語言:基于OpenGL的OpenGL Shading Language,簡稱GLSL;基于DirectX的High Level Shading Language,簡稱HLSL;還有NVIDIA公司的C for Graphic,簡稱Cg語言。
OpenGL簡介
OpenGL(全寫Open Graphics Library)是一個定義了跨編程語言、跨平臺的編程接口規(guī)格的專業(yè)圖形程序接口。它用于三維圖像(二維亦可),是一個功能強(qiáng)大,調(diào)用方便的底層圖形庫。OpenGL是行業(yè)領(lǐng)域中最為廣泛接納的2D/3D圖形API,其自誕生至今已催生了各種計算機(jī)平臺及設(shè)備上的數(shù)千優(yōu)秀應(yīng)用程序。它獨立于視窗操作系統(tǒng)或其他操作系統(tǒng)的,亦是網(wǎng)絡(luò)透明的。在包含CAD、內(nèi)容創(chuàng)作、能源、娛樂、游戲開發(fā)、制造業(yè)及虛擬現(xiàn)實等行業(yè)領(lǐng)域中。OpenGL是一個與硬件無關(guān)的軟件接口,可以在不同的平臺如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之間進(jìn)行移植。因此,支持OpenGL的軟件具有很好的移植性,可以獲得非常廣泛的應(yīng)用。
OpenGL的發(fā)展一直處于一種較為遲緩的態(tài)勢,每次版本的提高新增的技術(shù)很少,大多只是對其中部分作出修改和完善。1992年7月,SGI公司發(fā)布了OpenGL的1.0版本,隨后又與微軟公司共同開發(fā)了Windows NT版本的OpenGL,從而使一些原來必須在高檔圖形工作站上運行的大型3D圖形處理軟件也可以在微機(jī)上運用。1995年OpenGL的1.1版本面世,該版本比1.0的性能有許多提高,并加入了一些新的功能,其中包括改進(jìn)打印機(jī)支持,在增強(qiáng)元文件中包含OpenGL的調(diào)用,頂點數(shù)組的新特性,提高頂點位置、法線、顏色、色彩指數(shù)、紋理坐標(biāo)、多邊形邊緣標(biāo)識的傳輸速度,引入了新的紋理特性等等。OpenGL 1.5又新增了“OpenGL Shading Language”,該語言是“OpenGL 2.0”的底核,用于著色對象、頂點著色以及片段著色技術(shù)的擴(kuò)展功能。
DirectX簡介
DirectX(Direct eXtension,簡稱DX)是由微軟公司創(chuàng)建的多媒體編程接口。由C++編程語言實現(xiàn),遵循COM。被廣泛適用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE電子游戲開發(fā),并且只能支持這些平臺。最新版本為DirextX 12,創(chuàng)建在最新的Windows 10。DirectX是這樣一組技術(shù):它們旨在使基于Windows的計算機(jī)成為運行和顯示具有豐富多媒體元素(例如全色圖形、視頻、3D動畫和豐富音頻)的應(yīng)用程序的理想平臺。DirectX包括安全和性能更新程序,以及許多涵蓋所有技術(shù)的新功能。應(yīng)用程序可以通過使用DirectX API來訪問這些新功能。
DirectX加強(qiáng)3D圖形個聲音效果,并提供設(shè)計人員一個共同的硬件驅(qū)動標(biāo)準(zhǔn),讓游戲開發(fā)者不必為每一品牌的硬件來寫不同的驅(qū)動程序,也降低了用戶安裝及設(shè)置硬件的復(fù)雜度。從字面意義上說,Direct就是直接的意思,而后邊的X則代表了很多意思,從這一點上可以看出DirectX的出現(xiàn)就是為了眾多軟件提供直接服務(wù)的。
舉例來說,以前在DOS下玩家玩游戲時,并不是安裝上就可以玩了,他們往往首先要設(shè)置聲卡的品牌和型號,然后還要設(shè)置IRQ(中斷)、I/O(輸入和輸出)、DMA(存取模式),如果哪項設(shè)置不對,那么游戲聲音就發(fā)不出來。這部分的設(shè)置不僅讓玩家傷透腦筋,對游戲開發(fā)者來說就更為頭痛,為了讓游戲能夠正確運行,開發(fā)者必須在游戲制作之初,把市面上所有聲卡硬件數(shù)據(jù)都收集過來,然后根據(jù)不同的API(應(yīng)用編程接口)來寫不同的驅(qū)動程序。這對于游戲制作公司來說,是很難完成的,所以在當(dāng)時多媒體游戲很少。微軟正是看到了這個問題,為眾廠家推出了一個共同的應(yīng)用程序接口——DirectX。只要游戲是依照DirectX來開發(fā)的,不管顯卡、聲卡型號如何,統(tǒng)統(tǒng)都能玩,而且還能發(fā)揮最佳的效果。當(dāng)然,前提是使用的顯卡、聲卡的驅(qū)動程序必須支持DirectX才行。
Cg
GLSL與HLSL分別基于OpenGL和Direct3D的接口,兩者不能混用,事實上OpenGL和Direct3D一直都是冤家對頭,爭斗良久。OpenGL在其長期發(fā)展中積累下的用戶群龐大,這些用戶會選擇GLSL學(xué)習(xí)。GLSL繼承了OpenGL的良好移植性,一度在Unix等操作系統(tǒng)上獨領(lǐng)風(fēng)騷。但GLSL的語法體系自成一家。微軟的HLSL移植性較差,在Windows平臺上可謂一家獨大,這一點在很大程度上限制了HLSL的推廣和發(fā)展。但是HLSL用于DX游戲領(lǐng)域卻是深入人心。
Cg語言(C for Graphic)是為GPU編程設(shè)計的高級著色語言,Cg極力保留C語言的大部分語義,并讓開發(fā)者從硬件細(xì)節(jié)中解脫出來,Cg同時也有一個高級語言的其它好處,如代碼的易重用性,可讀性得到提高,編譯器代碼優(yōu)化。Cg是一個可以被OpenGL和Direct3D廣泛支持的圖形處理器編程語言。Cg語言和OpenGL、Direct3D并不是同一層次的語言,而是OpenGL和DirectX的上層,即Cg程序是運行在OpenGL和DirectX標(biāo)準(zhǔn)頂點和像素著色的基礎(chǔ)上的。Cg由NVIDIA公司和微軟公司相互協(xié)作在標(biāo)準(zhǔn)硬件光照語言的語法和語義上達(dá)成了一致開發(fā)。所以,HLSL和Cg其實是同一種語言。
總結(jié)
Unity官方手冊上講Shader程序嵌入的小片段是用Cg/HLSL編寫的,從“CGPROGRAM”開始,到“CGEND”結(jié)束。所以,Unity官方主要是用Cg/HLSL編寫Shader程序片段。Unity官方手冊也說明對于Cg/HLSL程序進(jìn)行擴(kuò)展也可以使用GLSL,不過Unity官方建議使用原生的GLSL進(jìn)行編寫和測試。如果不使用原生GLSL,你就需要知道你的平臺必須是Mac OS X、OpenGL ES 2.0以上的移動設(shè)備或者是Linux。在一般情況下Unity會把Cg/HLSL交叉編譯成優(yōu)化過的GLSL。因此我們有多種選擇,我們既可以考慮使用Cg/HLSL,也可以使用GLSL。不過由于Cg/HLSL更好的跨平臺性,更傾向于使用Cg/HLSL編寫Shader程序。
轉(zhuǎn)載自:
http://www.cnblogs.com/maple-share/p/5415811.html