818這些年我所遭遇過的游戲中間件
生活中總有些之前從沒想過的東西,卻出現在自己以后的生活中.比如,上中學時我從沒想過自己能上大學.在學校時多次路過一家公司,看它的大樓很是個性,從沒想過自己畢業后會坑在這家公司.第一次聽說中間件,是我讀研時的一個舍友,他的研究方向就是中間件.我問他什么是中間件,他滔滔不絕地講了一大坨我聽不懂也記不住的話.沒想到我工作之后卻和中間件有着難解之緣.什么是中間件,百度上的解釋如下:
"中間件是一種獨立的系統軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源。中間件位於客戶機/服務器的操作系統之上,管理計算機資源和網絡通訊。是連接兩個獨立應用程序或獨立系統的軟件。相連接的系統,即使它們具有不同的接口,但通過中間件相互之間仍能交換信息。執行中間件的一個關鍵途徑是信息傳遞。通過中間件,應用程序可以工作於多平台或OS環境。"
上述語句我也看不懂,因為這不是我所搞的中間件,大概是我那舍友所搞的中間件吧.還有另外一種中間件,百度上的定義如下:"中間件(middleware)是基礎軟件的一大類,屬於可復用軟件的范疇。顧名思義,中間件處於操作系統軟件與用戶的應用軟件的中間。"這個定義意思上大概差不多有那么點合乎我的理解.我對中間件的定義是:為編程中某一功能提供具體實現的軟件開發工具包.中間件和SDK差不多是一個東西."軟件開發工具包(Software Development Kit, SDK)一般是一些被軟件工程師用於為特定的軟件包、軟件框架、硬件平台、操作系統等創建應用軟件的開發工具的集合." 它或許只是簡單的為某個程序設計語言提供應用程序接口的一些文件,但也可能包括能與某種嵌入式系統通訊的復雜的硬件。一般的工具包括用於調試和其他用途的實用工具。SDK還經常包括示例代碼、支持性的技術注解或者其他的為基本參考資料澄清疑點的支持文檔。
中間件是由第三方為實現某一功能開發的,較為成熟並且可復用的lib庫或dll庫.開發者可以通過其提供的接口來實現其功能.中間件所實現的功能有多有少,其復雜程度有大有小.復雜的如一些游戲引擎:osg,ogre.簡單的如一些圖像格式解析的庫,jpglib,pnglib.其特點就是可以嵌入其他的程序中.之所以定義它為中間件是因為,它不是具體的執行程序,無法執行,但它為具體的執行程序提供服務.好吧,按照我的定義,中間件和軟件開發工具包就是一個東西.通常我們將一些比較低層的東西叫做軟件開發工具包,如openGL,D3D,openCL,也會把一些功能全面又復雜的東西叫軟件開發工具包,如:VTK,ogre,osg.而中間件則多指功能具體而且單一的東西,如:用於物理的Havok,PhysX,Bullet,用於界面的Scaleform,用於人工智能尋路的Kynapse,Navigation.
這種中間件並不是處於操作系統與應用軟件的中間,而是處於開發環境與開發程序之間.如果要問"STL算中間件嗎?",我更傾向於它屬於開發環境的一部分.但如果你又寫了一套STL,並發布出去,這就算是中間件了.
你若是問我:"中間件靠譜嗎?",我會毫不猶豫地回答:"靠".一方面,中間件為開發者提供現成的功能,我們可以簡單調用其接口實現一些很復雜的算法.但另一方面,中間件大多不開源,開源的又大多看不懂,一旦出有問題或有了新需求將很難維護.總之,中間件在降低開發成本的同時,會提高維護成本.你可能只需要花幾星期或是幾天寫出一個看上去很有技術含量的DEMO,但當將這個DEMO移植到具體的游戲中時,總會出現這樣那樣的問題.Shit often happens.幾乎所有我遭遇過的中間件都會有奇葩的事情出現.而這些出現問題中,大約三分之一能得到完善解決,有三分之一可以通過別的方式繞過去,剩下的就只能將就着用吧.有時會發現某款中間件就如同雞肋,欲罷不能,欲進無力.然而有些東西我們只能用中間件來解決,例如物理,這個要獨立開發的話,坑實在是太大了.
下面的將所有我遭遇過的游戲中間件列舉出來,打算將對每一款都寫個小文章,記錄下自己的親身經歷.
(1)VTK:一款圖形開發包.http://www.cnblogs.com/WhyEngine/p/3473713.html
(2)Havok:物理中間件.http://www.cnblogs.com/WhyEngine/p/3469600.html
(3)Speedtree:用於場景植被渲染的中間件.http://www.cnblogs.com/WhyEngine/p/3504198.html
(4)Physx:物理中間件.http://www.cnblogs.com/WhyEngine/p/3474035.html
(5)Scaleform:用於Flash界面的中間件.http://www.cnblogs.com/WhyEngine/p/3489953.html
(6)FlashOcx:Adobe提供的Flash界面插件.http://www.cnblogs.com/WhyEngine/p/3491132.html
(7)Kynapse:用於人工智能的中間件.http://www.cnblogs.com/WhyEngine/p/3494743.html
(8)HumanIK:用於反向動力學的中間件.http://www.cnblogs.com/WhyEngine/p/3504189.html
(9)Substance Redux:用於紋理壓縮與合成的中間件.http://www.cnblogs.com/WhyEngine/p/3484408.html
(10)dxtlib:用於DXT格式轉化,DDS文件生成的開發包.http://www.cnblogs.com/WhyEngine/p/3504197.html
(11)Apex:對PhysX的擴展中間件.http://www.cnblogs.com/WhyEngine/p/3474313.html
(12)Bullet:物理中間件.這個由於還沒有將它用於具體的項目,而且這是一個開源的中間件尚未進行太深入的研究,所以還沒寫.先提供個我用Bullet寫的Demo:http://www.cnblogs.com/WhyEngine/p/3428311.html
(13)MaxSDK: 3D Max的開發包.http://www.cnblogs.com/WhyEngine/p/3541698.html