為什麼遊戲行業的開源做得如此之差?
相關問題:為什麼國內遊戲開發的社區做的如此之差? - 遊戲設計
不問是不是就問為什麼的問題都是耍流氓,題主說的不是 遊戲代碼 的開源,我們主要拿遊戲引擎和工具和Web領域做對比,現在開始舉例子:
1. 從遊戲公司角度:EA,育碧,騰訊,任天堂等世界級的遊戲公司幾乎沒有為遊戲開發相關的開源界做出任何貢獻,無論是伺服器框架,客戶端引擎,還是中間件和工具,對比facebook,Google等,差之千里。
2.從引擎提供商角度:引擎提供商虛幻的引擎都是在U3D和cocos的緊逼下才迫不得已開源。僅有的OGRE等,也都不能算通用的解決方案,只能算是完成了渲染一個功能。而Web伺服器框架一般都是主動開源,但從python來講,Web伺服器框架django,web.py,tornado,flask個個開源,在社區力量下不斷改進。
3.從GitHub上的搜索結果的角度: 在GitHub上搜索遊戲相關的開源項目非常稀少,相比之下,在GitHub上,Web領域的開源項目卻比比皆是。即使找到一些開源項目
問題補充:
大家很多人都誤解了題主的意思了,題主說的不是 遊戲代碼 的開源,同樣的,知乎,淘寶的業務邏輯代碼是不可能開源的,那是屬於商業秘密啊。所以多媒體資源自然不需要發布,或者可以儘可能少的發布。
題主說的是:遊戲框架, 遊戲工具, 遊戲中間件的開源,比如:Spine(2d骨骼動畫),HumanIK(3D骨骼),Havok(碰撞引擎)還有行為樹,狀態機等AI框架等等。
在同樣的條件下,Google開源了Protobuf,Facebook開源了Tornado,而EA和育碧開源的碰撞,AI中間件在哪裡呢?對不起,我沒看到。。。
先列一些各方面的著名遊戲相關的開源項目。
商業遊戲- id Software · GitHub:歷來各個遊戲的完整代碼
- Unreal Tournament :用開源方式開發
遊戲引擎/框架
- Unreal Engine 4:If You Love Something, Set It Free
- cocos2d/cocos2d-x · GitHub(@王哲):長期佔領GitHub C++的Trending榜。
- cloudwu/skynet · GitHub (雲風)
渲染引擎
- KlayGE遊戲引擎(@龔敏敏)
- OGRE – Open Source 3D Graphics Engine
物理引擎
- Box2D | A 2D Physics Engine for Games:Blizzard 的程序員的個人項目
- bulletphysics/bullet3 · GitHub:作者曾是Havok、Sony、AMD和現在Google的程序員。
- PhysX Source on GitHub
其他
- paulhodge/EASTL · GitHub
我司的遊戲部門近半年也在策劃把一些公共組件開源,現時有我負責的 miloyip/rapidjson · GitHub(算是protobuf那個類別),另一個是同組同事的 TencentOpen/behaviac · GitHub 行為樹組件(就是題主說沒有的AI組件)。現在還有一些組件在準備中。但其實要把內部項目開源,需要做很多工作,而且還有之後的維護、更新工作。
像遊戲引擎這麼大型的軟體項目,開源所需的成本是具大的。以Cocos2D-x來說,單是要管理上萬個pull requests,也是讓人敬佩。對於像UE4這種近二百萬行代碼級別的高端引擎,維護的成本就更大更複雜。
撇開遊戲引擎這種巨物,物理、動畫、人工智慧等模塊算是更獨立一些,較容易整合到不同的遊戲中。另一種是插件,例如在GitHub上開源的Unity組件就有很多。
其實遊戲開發相關的開源很多,歷史很久,我估計單單引擎就有上百個。問題是,能做出商業品質遊戲的引擎不是很多。一些遊戲開發公司,例如id Software,他們開源的目的並不是希望通過社區而提升引擎的品質,或是帶來什麼商業利益,而僅僅是在於一種分享,供他人學習。
----
補充一點,傳統上Web都是通過社區方式建立標準(如IETF RFC),然後也有開源的伺服器和瀏覽器。然而,遊戲開發從來沒有什麼標準,甚至連文件格式的標準化也不太成功(如Collada)。原因可能是各種遊戲本身的需求差異很大,以前曾有人想標準化引擎各部分的介面,來做到能靈活替換各組件,但都沒成功。這些問題有可能阻礙開源發展,
我們開源了: ShortTailLab/ph-open · GitHub
開源之後感覺反響也不明顯,可能遊戲項目畢竟不如工具型項目適用性廣泛吧,對很多人來說不光難改,而且難用。我們沒有開源伺服器代碼,因為架設過程太繁瑣了,需要導入大量策劃文檔,單獨寫教程又很麻煩,如果不寫,開源了估計也沒人能運行的起來。
題主反覆強調說不是遊戲邏輯,但是行為樹,狀態機這種,都是強依賴於遊戲邏輯的,剝離出來又想弄得很好用還是很麻煩,而且相較於遊戲邏輯,其框架的代碼基本上trivial,開源的價值不大,即便如此,網上搜搜也能找到一些。專用物理引擎倒是不少開源了,比如bullet,PhysX,box2d,chipmunk。如果說開源編輯器的話,很多公司自己的編輯器寫的都是一坨屎,只要遊戲能ship就行,誰還管編輯器,別說開源了。不過獨立的編輯器也有,tiled地圖編輯器,索尼開放的LevelEditor等。還有題主說的spine,它的runtime都是開源的,大概因為維護十幾個不同語言不同引擎的runtime藉助社區的力量會容易一些。
美術資源也有很多開源的,網上搜搜能找到不少。大廠美術很難開源,尤其是有延續性的產品,雖然遊戲過時,但是創造的IP並沒有,這類美術資源是不可能開源的。即便沒有延續性,人家沒準也想著哪天復活IP呢。
cocos2dx也是個開源大頭,雖然我老黑cocos,但是不得不說這東西做了80分還是90分還是100分,只要存在了,都是件功德無量的事,比開源幾個flask有分量多了。還有網易的pomelo也是開源的。還有就是很多開源項目跟遊戲沒啥關係,但是在遊戲中經常用到。
還有我能想到的大型開源的遊戲項目,微軟的&
還有就是github並不是一個好的參考,它只是開源世界的一部分。
總的來說web的前後台開源是比較容易的,因為這東西的複雜度真的不高,整理一下就可以開源了。遊戲更複雜更難些,開源的就少一些。還有就是遊戲生命周期相較於很多工具型項目更短,並不需要持續的維護,所以就算開源了也就是掙個karma,實際價值不大。遊戲工具又經常強依賴於項目,很多是能湊合用的程度就行,單獨進行剝離成本比較高。
但我整體感覺遊戲相關的東西開源的並不少,可能是題主看的太少了。
Wikipedia上的一些遊戲開源項目列表:
List of open-source video games
List of commercial video games with available source code
List of game engines
沒有人說我們公司啊,我們是國內為數不多的鼓勵開源的遊戲公司!除了業務邏輯外,題主所說的底層的引擎和工具都盡量開源,並且保證開源版本和公司項目使用的版本一致。
主要有
所有項目使用的伺服器框架:cloudwu/skynet · GitHub
2D項目使用的渲染引擎:ejoy/ejoy2d · GitHub
一個protobuf的替代品:cloudwu/sproto · GitHub
其實這些都有開源的,只不過遊戲組件不像Node.js之流,通用性那麼強烈,開發一個Express就一統江湖,舉世膜拜了。在遊戲開發的過程中,這些東西反而不那麼常用,而一些常用的又會習以為常的使用,而不認為這個是專門給遊戲開發使用的。 比如,我們做一個鬥地主,或者是開心消消樂,難道還會用到物理引擎或者行為樹嗎?當我們做小鱷魚愛洗澡的時候,自然會想到流體模擬liquidfun,但是絕大多數開發又不可能用上。
下面列舉一些出名的,或者是我感興趣的,具體地址等我能上google的時候再補上,渣度搜東西噁心到死。
完整遊戲:
The Battle For Wesnoth
0 A.D
FreeCiv
Quake
Doom
TA Spring
第二人生Second Life
基本上戰棋類、策略類、fps、rpg、rts、沙盒類、單機、mmo全面覆蓋
稍微不怎麼出名,但是很經典的東西也都有,比如開源的仙劍 金庸群俠傳(手機上的非官方版本都是基於這個移植的,完成度非常高)
遊戲引擎:
Ogre KlayGE Irrlicht Torque3D/2D Unreal4 cocos2dx libgdx SDL
其實引擎代碼不開源也可以在網上找到,比如UE3的源代碼,真要想學的話,沒什麼學不到的。反而直接拿來用的話,這些反而不如不開源的好用,從功能性、開發效率、運行效率、發布平台支持等等因素考慮,反而是不開源的Unity成為了多數團隊的首選。
實用組件:
Box2d 2d物理引擎,據說Unity中的2d物理就是用的這個
Bullet 3d物理引擎
liquidfun 流體物理模擬
CEGUI MyGUI GUI系統
Drangon Bones 2d骨骼動畫
3d骨骼動畫跟遊戲引擎、模型格式綁定的太深了,不太好獨立開源,不過我記得有一個開源的支持各種模型格式的載入庫。
行為樹: Tencent/behaviac 這個是騰訊開源的。不過如果是使用Unity的話,其實它的很多行為樹插件做的更棒,而且購買(or 破解版)插件後,代碼基本上就算是開源的了。
有可能的原因是因為工程師在遊戲行業中的地位不如在互聯網行業中的地位。遊戲比互聯網產品複雜得多,而程序只是其中的一個部分,也不是最重要的部分,沒辦法形成互聯網企業的工程師文化,推動開源。
我來小小地為題主所說的幾家大公司鳴不平。
(本人記憶力實在有限,也就能記住近1年左右的新聞吧)
首先是索尼。在去年開源了一個用來做遊戲工具的框架ATF,以及用ATF開發的LevelEditor
可以在這裡找到:Sony Computer Entertainment, Worldwide Studios · GitHub
然後是EA旗下的部門BioWare ,開放了一個伺服器框架Orbit electronicarts/orbit · GitHub
還有微軟的一個遊戲伺服器項目Orleans ,在去年宣布即將開源之後,也在今年如約開源了 dotnet/orleans · GitHub
上述三家公司的這三個項目都處於活躍維護狀態。
至於題主說的育碧和任天堂,我這一時還記不起來,不知道其他人是否能補充呢?
4.從開發者社區的角度:和不開源相對應的,學習資料雜亂無章,社區比較混亂,並且社區中的同學都傾向於不開源,許多遊戲開發論壇還用zip壓縮包打包供大家下載,遊戲開發社區充滿了各種破解XX插件,有3DM的優良傳統。 主要對比:遊戲蠻牛(unity3d,unity3d教程下載首選【遊戲蠻牛】u3d,unity3d官網)和CNode(CNode:Node.js專業中文社區)
關於這點,題主說到我心坎里去了。我也很無奈,特別是當我走過同事身邊,無意中看到他們屏幕上這些社區影子的時候。有一種痛心疾首的感覺。
不請自來,這個問題我來回答一下
1. 遊戲公司不願意開源的主要原因在於沒有利益可得,和操作系統或者平台性質的產品不同,遊戲產品大部分都是獨立的個體,很難發展成一個生態系統,在這種情況下,開源不會給開發公司帶來任何利益。
2. 開源會有安全隱患,一款成功的遊戲有極強的流量變現能力,一旦一家遊戲公司擁有一款賺錢的遊戲,首先考慮的一定是如何保護這款產品,開源代碼無疑會帶來私服、外掛之類的威脅。其實在國內,為了保護源碼不被泄漏,很多遊戲開發公司都有封閉的內網系統,甚至連機箱都會被鎖進鐵皮箱子內,源碼設有嚴格的許可權控制,不同項目之間都無法互相查看源碼,更別說開源了。
3. 隨著移動遊戲的盛行,這種情況已經再逐漸改觀了,樓主提到的Unreal開源就是跡象。這是由於遊戲逐漸由原先的重度產品逐變為快消品,遊戲產品的生命周期變短,開發技術門檻降低,Unity這樣的成熟引擎替代了原先的自研引擎,相信未來開源之光會逐漸降臨遊戲領域。
4. 無論國內外,還是優一些優秀的個人和公司在積極推動遊戲領域的開源文化的,比如cocos2dx,雲風開源的風魂以及skynet,暢遊在國內率先使用ogre作為《天龍八部》的引擎,雖然沒有開源,但有一版天龍的源碼泄漏被很多小公司使用,無意中也推動了國內遊戲領域和開源文化之間的融合
針對題主的補充說明的補充:如果說遊戲中間件、遊戲框架這類代碼,我想說的是,普通的遊戲公司一般都是沒有的,大部分遊戲的開發過程都是產品導向的,也就是遊戲製作人來把控進度,除非製作團隊有著較高的技術水準,否則很難有精力去把AI之類的代碼提煉成框架,這類代碼都是夾雜在遊戲代碼中的,自己都整不清楚,更別指望著開源了。
你看我的 KlayGE遊戲引擎。本來就是自己做了玩玩,開源後發現有不少人也想拿來研究,就繼續開源做下去了。結果呢,總有神經病衝進來說,你低端支持不好(廢話,老子只有一台非低端機器) ,你依賴庫boost(廢話,你行你上,不行別BB),你速度慢(廢話,你有種別跑debug測速),你沒編輯器(廢話,有也不給你用)。。。
開源遊戲都會面臨一個很大的問題:龐大的多媒體資源怎麼發布?
現在GTA5有60G+的容量,你想想背後的各種文件要佔多少地方,代碼才多少。就算給你開源了又如何?
又比如Blender基金會下面的開源電影和遊戲項目,方法是直接給你寄工程文件的DVD了(順便賺外快)。ToS是用F65拍的,但4K DPX Linear上T的內容也給不了你,最後還不是轉成了1080p。。。當然FTP上還是提供了MXF Raw下載。
你說到GitHub,我平時隨便一張4K 16bit的紋理保存為psd就500M左右(|||?Д?)
現在開源的遊戲引擎不少,Unreal,Unity也都可以通過特定的渠道(比如付錢)獲得源碼。
而我個人認為一個遊戲的精髓是美工(模型、立繪),劇情(邏輯交互腳本),音樂(音效、BGM),而這幾塊都是製作組的核心競爭力,怎麼會開源?
遊戲界生存這麼殘酷,大家都是以賺錢為目標的,根本不是開源社區那種Donate via Paypal或者Buy Me A Coffee的狀態。老實講,我實在看不到遊戲引擎開源帶來的好處到底有多少。
大家都是商人,沒時間不談錢的。
遊戲引擎的開源,對於開發這個引擎的遊戲商而言有神馬好處涅?是能夠有社區來一起把引擎做好?還是可以在Linux下開展業務?抑或是增加引擎的市場份額?
抱歉,這三方面都很扯淡。
做遊戲引擎的社區真不叫大,遊戲引擎是一個專業程度極高的領域,能參與進來的人本來就不多,開源社區可以提供的貢獻相當有限。
Linux?噢,你是凱蒂嗎?(Oh, are you kidding?)
增加引擎的市場份額?
啊哈,可以爭取一些獨立遊戲開發者加入進來把,但是這對於引擎而言又有什麼好處呢?好處極其有限,畢竟現在獨立遊戲開發者的小作品總會有那麼一兩款現象級的作品,但總體上還是拼不過大廠的流水線生產和3A大作。
事實上近年來獨立遊戲的大熱我想正是開源遊戲引擎的發展動力。
Web領域的開源,你套一下上面三個原因自然就知道了。
Web開發社區大,Linux領域非常活躍,市場份額有很多好處。1. 如果題主你指望遊戲公司開源內部工具,那配套的培訓誰來做?互聯網公司開源的工具是針對程序員居多,但遊戲公司的in house的東西很多是針對美術、策劃這種非程序員職位的~這種東西不是說開源了就包治百病,更何況不同公司的東西都是成工作流的,難道要全套開放出來么?那人家就成公益組織了……
從另一個方面來說,如果你指望遊戲公司開源遊戲代碼,那別人靠啥賺錢呢?google的bigtable不也一直閉源么,或者說ms會開放最新windows/office代碼出來?更何況互聯網公司部分是靠數據吃飯的,遊戲公司除了資源和代碼還能靠啥...
當然了,還是有全套放出的,doom3什麼的...
2. 你比對了Ogre和伺服器框架,你可以再比對下工程大小和代碼量。。。引擎這玩意兒真不是好剝離的,就像你說的ogre是「也都不能算通用的解決方案,只能算是完成了渲染一個功能」...商業化引擎,諸如unreal就更龐大了。。。
就目前開源的這麼多你用得過來么-。-
3. 或者你可以同時比對下遊戲行業相關從業者和web行業從業者數量?
4. 社區這個我不吐槽。。。我一般都看官方論壇和問答區...或者gamedev啥的
因為遊戲源碼值錢
圖形演算法都有開源實現和論文可以看,你見著adobe開源ps之類了么?
商業產品化的項目開源只有4個原因,第一這個代碼不值錢了,第二這個代碼不那麼值錢了,第三這個代碼沒有競爭對手值錢了,第四這個代碼馬上沒有競爭對手值錢了。
雖然有點偏頗,但是我知道的很多熱衷於分享和開源的個人是包含很多個人宣傳目的在裡面的,賣體力不如賣名氣嘛。
天下沒有免費的午餐,真的騰訊有一個遊戲開發者論壇Gad-騰訊遊戲開發者平台,裡面有很多開源的遊戲組件。樓主說的開源AI組件就有behaviac,地址: TencentOpen/behaviac · GitHub.而且一直都在更新,上周低調的更新到了2.1.6。如果感興趣可以去看看。
這裡是github官方列出的遊戲引擎相關showcases:
Game Engines因為沒有找到利益點,這裡不僅僅指經濟,也包括影響力什麼的。開源有時不僅不會給公司帶來利益,有時可能會損害公司利益。假如夢幻西遊、LOL開源,不知道會有多人玩私服,公司怎麼賺錢。公司存在的的唯一目的是盈利。問一下題主,如果你是公司CEO或者CTO,你花費幾百萬耗時幾年開發的遊戲或者引擎或者工具鏈,你會開源么?
觸控是一個特例,因為它找到了利益增長點。Unity沒有開源。
http://www.fastbuild.org/docs/home.html是個前育碧的架構師做的。網上開源版本和育碧內部項目用的幾乎一模一樣。這裡幫他做個廣告:品質保證,有人想用的儘管拿去用。
覺得用不上不要緊。我可以負責任的說,大型遊戲公司內部用的引擎流程工具等絕大多數都和這差不多,送給你都沒用(或者不會用)。遊戲(尤其是主機遊戲)的需求獨特,和互聯網行業太不一樣了。
索尼,任天堂,SEGA,微軟這些做硬體的公司,某種意義上說都是開源的。你成為開發者,只要他有的都會給你,因為你做的遊戲差他們必然會少賺錢。遊戲界最早的開發工具就是任天堂自己掏錢請HUDSON做的,然後免費發給其他廠商。
至於對大眾開源就沒必要了,人家硬體是加盟制的,開源給你也沒用啊。
有人可能覺得任天堂除了開發工具外還應該公開自己遊戲的代碼,其實你有源代碼參考也沒用,因為遊戲機玩的就是優化,而且都是一些非常極端的方式,這就決定了每一行程序都是為這個遊戲定製的,MARIO1代的代碼一點都沿用不到3代。一直到21世紀初,遊戲機領域每個遊戲都是從頭開始的,沒有通用引擎之類的概念,所以真沒功夫去搞通用資源。
這也是為什麼同樣的硬體,1995年的遊戲和1998年的遊戲看上去天壤之別,PC遊戲與之完全沒有相似性。開源了就可以多幾個3A大作了嗎?遊戲的瓶頸有不在開源。
就算真的開源又怎麼樣,遊戲行業在天朝事實上早就等價於開源了,還不是只出爛遊戲。
我認為一種框架的開源跟其發展程度有關,當一項東西的發展程度打到一定水準,消費者(用戶)的數量將非常龐大;這時,將會有大量的生
產者(開發者)參和進來淘金,導致了大量生產者的競爭,從而提高整個業界水準。這時,競爭非常激烈,壟斷政策難以討好,便是另一種方式的誕生:擴大影響
力,以此提高競爭力(如:廣告)。如何擴大影響力呢?在生產者的產品質量已經挖掘到極致的情況下,以降低獲取代價的方式來增加自己產品的競爭力是
一種非常有效的手段,所以大量的免費軟體產品出現。免費軟體產品的盈利方式不在此贅述。然而,好景不長,免費軟體的方式如今也被開發的淋漓盡致;在此基礎
上,再想擴大影響力,便出現了軟體行業獨有的一種新的方式:開源!
開源對於其使用者和軟體本身都是一件非常好的事情,如:
1.了解源代碼對其的使用有著很大的好處。
2.便於學習與討論交流。
3.便於軟體的改進與提高。
以此,開源軟體的影響力急劇擴大,快速的佔有了市場,利益什麼的自然有的是方法來獲取。
再舉個Web框架的例子
現
在Web的開源框架遍地都是,因為Web的發展程度已經達到了一個非常高的水準,好的框架遍地都是,而且開始免費開源的,這時,一個新的框架要進入市場,
如何讓眾多使用者(程序員)認可和學習並放棄已學的「流行的」框架呢?靠的是天天吹自己的框架性能多好,開發多簡單,多易學,多兼容?若非你有革命性的變
化,史詩級的改善……還是別吹牛了吧,當市面上那麼多大公司都是腦殘嗎?以現在Web框架發展的程度,基本你能做的別人都能做,你有比別人好的地方,肯定
也有比別人差的地方,想要有同等的競爭力,首先要把自己的門檻(收費,不開源)降下去。故:Web框架基本開源。
再來說說遊戲框架的市場問題
游
戲行業的發展確實是經過了很多年了,比Web還長。然而,遊戲的受眾群體確遠比Web小,現在什麼東西不用Web,年齡從小孩到老人,行業……基本沒有哪
個行業不用Web的(網站);說個更明確的對比,玩過遊戲的肯定上過網,上過網的不一定玩遊戲。那麼:遊戲的受眾群體就必然比Web小,開發者的數量,質
量也就比Web少,發展也就比Web慢了。細數市面上的遊戲引擎,Unity3D,虛幻,寒霜……是不少,可比起Web,就捉襟見肘了。這時,大多數開發者的思想便是:現在我是壟斷的,所以我賺錢,要是開源了,你拿去跟我競爭怎麼辦?
因為遊戲成不成功,技術不是重點吧。
再者,題主覺得開源動畫物理碰撞AI才算開源,才算有貢獻的開源?EA的(部分)stl實現就不算貢獻?你怎麼知道人家引擎那些模塊可以獨立為中間件,而不是跟遊戲項目藕合度很深的東西?
另外題主說的那些雜亂無章的社區,我也有所了解。因為從我畢業兩年的經驗來講,遊戲程序員,尤其是做客戶端的,跟互聯網程序員還是有蠻大區別的,首先他們不擅長架設網站,其次他們沒那麼唯Github是瞻,再次很多人也確實不信開源,再再次國內遊戲圈加班那麼嚴重他們哪有時間寫自己的開源項目…好吧我承認上述理由都是瞎扯淡,具體這兩種程序員為什麼有這麼大差別我也不太清楚ˊ_&>ˋ。
ˊ_&>ˋ沒在國外混過就只能針對國內問題瞎扯了。
推薦閱讀: