[譯]兒時夢想成真: Spine背後的故事
- 譯序
- 譯文
- 一段小小的曆史, 改變我的人生
- 需求出現, 製作開始
- 人總是要吃飯的: Kickstarter
- 市場推廣? 什麼是市場推廣?
- Kickstater以後的生活: 客戶支援和Stretch Goals
- Spine用到的技術
- 生活是美好的
- 譯後感
譯序
Spine是一個2D的骨骼動畫編輯器, 因為其良好的UI設計及完整的功能, 在kickstarter上發布以後立即收到追捧, 作為一個幾乎只有遊戲開發人員才會使用的小眾工具, 募集了遠超目標5倍的資金, 共計6.7W多美元. 以前我寫過部落格介紹了一些Spine的基本用法. 官方的網站上有更詳細的介紹,
還有一段特性介紹的視頻.
Spine的作者最近(2013-08-13)在自己的部落格上寫了一些關於Spine背後的故事, 我感覺很有意思, 在這裡跟大家分享一下, 因為精力有限,
也不做全文的翻譯, 主要翻譯故事部分, 關於技術部分就不詳細翻譯, 只是寫個概要了.
譯文一段小小的曆史, 改變我的人生
我(Nate)從很久很久以前就想要製作Spine這樣一個骨骼動畫編輯器了. 我11歲剛開始學慣用QBasic編程時, 我的傑作是一個3D格鬥遊戲. 這個遊戲花費了我幾年時間, 但其實也不是那麼好玩, 但是它已經有骨骼動畫和一個非常簡單的編輯器了. 在我19歲離開學校進入公司後, 我又做了12年的軟體開發. 在那個時候, 我剛剛離婚, 並且還有房貸尚未還清, 那時候我的生活就是工作, 吃飯和睡覺. 枯燥的生活讓我決定要改變這一切, 我放棄了房子, 辭掉了在Mickey Mouse公司的穩定工作, 變成了一個無業游民.
在此後超過一年半的時間裡, 我就在我世界各地的朋友們那兒鬼混. 我愛編程, 所以我花了很多時間在開源項目(還有街霸)上.
需求出現, 製作開始
最後, 我的難兄難弟Soren和我決定做一個遊戲. 但序列幀動畫限制太大, 並且總是需要花費很多時間在美術製作上. Soren是一個美術, 並且精通Softimgae, 所以我寫了一個匯出指令碼和一個簡單的骨骼動畫庫. 它能夠正常工作, 但是工作的流程非常的不好. 因為它很難配置, 並且容易碰到不支援的Softimage的特性. 我們找遍了其他所有工具, 但是都沒有合適的, 而我們有清晰的目標, 我們知道我們需要製作一個什麼樣的工具, 所以我們開始自己動手製作這個工具. 在我做那個QBasic格鬥遊戲足足20年後,
我很高興的把全部的時間都投入到Spine上!
我們一直延遲著Spine的發布, 直到完成了所有基礎的工作以後. 我們有太多關於Spine的想法, 以致很難完成所有功能, 我們只能實現最基本的特性, 所以我們斃掉了很多想法, 我們總是告訴我們自己, “我們總是可以在以後再增加”, 任何複雜並且又不是核心功能的特性要被去掉, 而另外一些複雜但是很重要的特性又必須要實現. 困難就在於知道這兩者的不同. 還好Soren有很多實際的工程經驗, 並且知道這樣一個工具應該怎麼工作. 同時Soren也想在Spine中加入成千上萬的特性, 此時我就反過來拒絕那些特性, 除非它明顯很必要(或者很容易實現).
人總是要吃飯的: Kickstarter
我們在Spine的編輯器部分花了9個月, 並且只有libgdx一個執行階段程式庫. 我們和投資人沒有任何聯絡, 並且肯定我們正在花光我們的積蓄. 所以我們決定到Kickstarter上來試試, 一方面我們的確需要錢, 另一方面也是向大家宣傳一下Spine. 為了讓我們合作更方便, 我到了Denmark, 並且住在Soren的家裡. 我把My Phone粘在椅子的後面, 錄製了那段視頻.(譯者注: 指Kickstarter上用於宣傳的那段視頻)
這對我來說不是個容易的事情, 因為我必須嘗試很多遍才能達到想要的效果. 我現在做夢(可能還有你)都還能總是會夢到我在說”Hi, my name is Nate!”. Soren錄製了Spine的操作視頻, 並且做了寫視頻的後期工作. 我們的目標是在前20秒內吸引住觀眾, 使他們願意繼續看完剩下的內容.
我們擔心不能達到kickstarter的goal, 所以我們設定了一個我們感覺可以完成一些runtime的底限, 1.2萬美元. 而實際上我們只用了3天就達到了這個目標, 這是完全在我們意料之外的. 於是我們決定使用一個更好的方法來製作runtime, 那就是做一個通用的runtimes, 用這些runtime可以更加容易的製作目標遊戲套件的runtime. 我們在Kickstarter上寫了更多以前沒有寫的特性, 並且把他們都作為stretch goals.(譯者注: Kickstarter上達到基礎goal後,
通過募集更多資金去完成的更進一步的goal)
要想對Kickstarter上的使用者維持一個高水平的使用者支援是一個艱巨的任務. 好幾天, 我們把全部的時間都用在回複Kickstarter上的問題, 評論, 郵件和論壇文章上. 這個事情非常的耗費精力, 但是我們的確確保了每一個有問題的人都得到了回答. (譯者注: 就我最近使用Spine的經驗來看, 作者對提問的回答的確相當即時)
Kickstarter最終募集了67569美元, 是我們初始目標的563%. 我們完成了除最後一個goal外的所有goals. 非常, 非常多的stretch goals. 現在回想起來, 實在是太多goals了. 大部分Kickstarter stretch goals在我們全職工作了6個月後還沒有完成, 但是我們將會完成. 我們決定對每一個曾經支援過我們的人兌現我們的承諾.
市場推廣? 什麼是市場推廣?
我們從來沒有為Spine做過任何市場推廣, 主要可能是我們不知道該怎麼做. 我認為Kickstater可能算是一種市場推廣的形式吧. 我們的Twitter賬戶很活躍, 這可能也對Spine的推廣有較大的協助. 我認為肯定還有很多開發人員會很喜歡使用Spine, 但是還沒有發現它. 我們不得不寄希望於他們能通過Google或者從朋友口中得知Spine. 我知道這很天真, 但是市場推廣在我看來是個不可思議的事情, 為市場推廣花錢看起來非常的愚蠢, 因為你不會真的知道這個錢花的值不值.
Kickstater以後的生活: 客戶支援和Stretch Goals
本段為譯者寫的概要:
在Kickstater以後, 作者花費了相當多的時間回答使用者的問題, 並且Nate如期的完成了一些Kickstater中確保的Stretch Goals.
Ghosting, 在Spine中繪製動畫的過去和將來.
,
支援在一個project中同時操作多個骨骼動畫, 這樣可以讓Spine支援製作一些過場動畫(以前我們叫cinematic). 但是目前還需要完成多個骨骼動畫之間的繪製順序問題才能進入實用階段.
內嵌了一個圖片打包的工具, 這樣就可以在不需要類似Texture Packer等工具的情況下, 單獨匯出需要的動畫.
,
增加了event timeline功能, 這樣可以在特定的時間點放聲音, 粒子效果等. 這個功能很有用, 但是目前大部分runtime都不支援.
Spine用到的技術
本段為譯者寫的概要:
Spine使用的技術很特別, 語言使用Java, 但是UI使用的是libgdx, 因為作者本身就是libgdx的聯合作者. 作者還在這裡給libgdx做了下廣告, 告訴大家libdgx這個遊戲架構有多麼好用,
並且可以跨Windows, Mac, Linux, iOS, Android等平台, 甚至可以通過WebGL運行在瀏覽器中, 而Spine因為是用libgdx開發的, 所以Spine也可以在上述所有平台上使用. 另外, 這倒是解釋了為啥Spine一開始就跨那麼多平台, 並且主按鈕是那麼奇怪的放在左上方.
以下是Spine用到的一些開源庫列表:
- scene2d.ui, libgdx的一部分, 配合libgdx的2D UI庫.
- TableLayout, 作者自己寫的Java開源庫, 配合ligdbx使用的UI layout庫, 類似HTML的tables, 實際可以支援libgdx, Swing,
Android, TWL等其他UI架構.
- Scar, 作者自己寫的開源庫, java一些utilities功能的集合.
- Wildcar, 作者自己寫的Java開源庫, 用於使用’*'匹配檔案和目錄.
- Kryo, 作者自己寫的開源庫, 用於高效的序列化對象.
- JsonBeans, 作者自己寫的開源庫, 用於從json中序列化和還原序列化Java對象.
- TexturePacker, libgdx的一部分, 使用者處理圖片打包.
很不可思議的是, 上面的那些開源庫裡面都是Nate自己寫的(libgdx部分起碼是參與了), Nate為了寫遊戲積累的東西不是一般的多, 很讓我感歎.
另外, 作者還提到它使用了green threads, 這個在一個線程中類比出多個線程效果的庫,
使用者層級的多線程實現.
Spine有一個很好的構建系統, 並且在軟體中內建了一個自動升級系統, 作者可以一鍵自動部署到各個平台的所有使用者那裡. 這個也很牛掰~~(也許是從一個C++開發人員眼裡看來吧)
Spine的所有官方runtimes都在github上開源發布, 所以它自己雖然只官方支援了13個開發套件, 但是因為為C, C++, Objective-C,
C#, Java, ActionScript 3, Lua和JavaScript提供了通用的runtime, 該runtime僅僅是提供了一套API來操作骨骼和動畫,
但是不針對特定開發套件, 忽略了渲染部分, 使得更加容易完成, 因為這個作者認為正確的決策, 第三方的runtime已經超過20個了, 你幾乎可以在任何你想要的平台和引擎上使用Spine.
生活是美好的
以下為譯者寫的概要:
Spine賣的不錯, 作者得到了稅後6萬1千美元的收益, 作者說他還有很多增強Spine的想法, 比如增加包圍盒等, 作者甚至提到Spine的編輯器中已經有了一個IK(反向動力學)系統(還沒有加到runtime中).
以下為作者全文最後一段的翻譯:
回顧以往, 會感歎事情的發展太瘋狂了, 從一個糟糕的QBasic格鬥遊戲最後能發展成為自己熱愛的事業. 我在今年6月剛剛結婚, 並且住在我老婆的故鄉–克羅地亞, 我們住在一個8公裡(譯者注: 不知道原文這是表示寬還是周長)的小島上, 這裡沒有公路, 也沒有汽車. 雖然用的是很慢的3G網路, 但是生活成本非常的低, 而且克羅地亞的海灘很amazing. 我每天就是寫代碼, 遊泳, 並且養了一個小狗. 生活很美好~~
譯後感
最近看到吳軍寫的一篇關於喬布斯的文章, 對其中一句話印象深刻, 我覺得也很適合用於總結本文: 大多數產品經理之所以做不出改變世界的發明,
是因為他們只看見了成功者最後的臨門一腳, 而忽視了別人的長期思考.
writen by 九天雁翎(JTianLing) — www.jtianling.com