WWDC15 iOS游戲開發3個新框架全解
簡介
在此次WWDC的游戲相關視頻中,蘋果再一次展現了它非凡的技術整合和持續創新能力。除了繼續完善已有的2D游戲框架SpritKit, 3D游戲框架SceneKit和全新的圖形渲染API Metal 外,今年還新增加了GamePlayKit, ReplayKit和Model I/O三個新框架。
- GamePlayKit給游戲開發者帶來了全新的游戲架構(“實體組件系統”)和一些通用模式(比如:狀態機, Goal-agent-behavior 系統等),同時它還提供了大量游戲算法,比如尋路算法,模糊邏輯和規則系統等。
- ReplayKit可以讓玩家在游戲中錄制游戲視頻,并且可以添加語音評論,然后通過社交網絡分享出去。
- 而Model I/O框架,主要是用來處理3D資源和數據,同時可以給一些資源做離線處理,提高游戲運行時性能。 </ol>
- 資源分類( Asset catalog )支持,開發者可以更精確地控制不同設備使用的資源分辨率,最重要的是,玩家在下載游戲到設備里面時,只會下載與其設備分辨率匹配的資源。
- 按需加載資源,通過給不同的資源設備Tag,可以指定某些場景和關卡只加載特定Tag的資源。
- XCode快速預覽:支持在Playgound里面使用Swift編寫一些測試代碼,然后快速預覽效果。不需要額外的編譯,立馬就可以看到API的使用效果,這對于測試一些API和驗證一些想法非常有幫助。
- 2D時間軸動作編輯器:這個應該算是SpriteKit的大殺器了,它是一個功能完善的2D動作編輯器,可以支持實時預覽動作效果,并且同時支持2D和3D。
- 數據驅動:SKReferenceNode可以讓可重用的游戲組件數據化,讓玩家可以用更少的代碼來完成游戲開發。 </ol>
- 支持更多的3D文件格式: DAE,OBJ,Alembic, STL和PLY文件格式。
- 新的原生文件格式,使用NSKeyedArchiver來存取
- Shader修改器和環境光遮蔽(Ambient Occlusoni)
- 天空盒(Skybox)和幾何修改器
- SCNTechnique 支持
- 支持聲音節點
- 支持Model I/O(后面會具體介紹Model I/O是什么) </ol>
- 新的內存模型:它一共支持3種內存模型,分別是共享內存模型,私有內存模型和托管內存模型。
- 新的紋理壓縮格式(ASTC):
- 設備GPU 類型判斷:自動根據設備的GPU類型來判斷支持的特性集合。
- MetalKit框架:讓Metal應用開發更加簡單方便。
- Metal performance shader框架:提供了一系列數據并行算法。
- Metal調試工具:更方面地調試Metal圖形應用。
- Metal應用程序瘦身:這一點和上面介紹的SpriteKit瘦身原理是一樣的。 </ol>
- 要盡早分析和經常分析代碼
- 在最合適的時機去獲得Drawable對象。
- 盡可能基于GPU去考慮多線程渲染。
- 提前創建好一些耗時的對象并盡可能地重用這些對象,提前編譯好著色器程序。 </ol>
- GKEntity 在實體組件系統里面,所有的游戲對象都被組織成游戲實體(GKEntity),它只是一個組件(GKComponent)容器,可以在游戲過程中動態地添加和刪除游戲組件。并且可以通過組件類型來訪問組件并更新所有組件。
- GKComponent GKComponent是所有游戲組件的基類,它負責存儲游戲數據,同時會隨著實體的Update方法來更新自身的狀態。所有的游戲邏輯被放置在
updateWithDeltaTime
方法中。 - GKComponentSystem 組件系統是處理組件的容器,它包含了所有同種類型的組件,并通過統一的邏輯來處理這些組件。組件系統并不關心實體,它會透明地對象所有同種類型的組件并更新其狀態。 </ul>
- 支持多種3D文件格式的
- 可以對資源進行修改和Bake
- 支持3D模型三維像素化(Voxels)
- 集成Playground, Swift和Finder,并且能夠在Finder的Quick look里面預覽資源。
- 支持基于物理的材質和光照 </ol>
- What's New in SpriteKit
- Enhancements to SceneKit
- Going Social with ReplayKit and Game Center
- Introducing GameplayKit
- Deeper into GameplayKit with DemoBots
- Managing 3D Assets with Model I/O
- Metal Performance Optimization Techniques
- What's New in Metal, Part 1
- What's New in Metal, Part 2 </ol>
SpriteKit新功能
SpriteKit是蘋果在2013年推出來的2D游戲開發框架,它最初的設計很多來自Cocos2D-iPhone項目,特別是API方面,幾乎和Cocos2D-iPhone沒有差別。得益于此,Cocos2D用戶可以用很小的成本轉到SpriteKit上面來。
在去年的WWDC中,蘋果推出了一系列重磅級功能特性:物理集成,XCode資源打包、實時編輯器,SceneKit 3D框架,Metal圖形API等,這讓SpriteKit成為了開發iOS/OS X平臺上的游戲的首選游戲框架。
今年,蘋果繼續發力,添加了3個新的節點類型,同時還完善了整個游戲開發流程和工具鏈支持。
此類模擬游戲里面的照相機,它可以定義游戲的可見視圖,同時它也是一個node,可以對它進行縮放,旋轉和平移等操作。此類是開發者繼去年 WWDC后最希望實現的功能,對于實現一些大地圖的冒險類游戲和RPG游戲非常有幫助,可以給主角添加一個SKCameraNode子節點,然后游戲視角 就會跟隨主角的移動而移動了。另外,游戲里面可以支持多個SKCameraNode.
此類可以實現基于位置的音效,環境音效和沉浸性音效。可以想像一下,一顆導彈向你的主角飛過來,聲音由遠及近,當導彈離你的主角很近時,甚至可以聽到導彈尾部噴氣的聲音,這種游戲音效會給玩家帶來非凡的聽覺感受。
此類是SpriteKit的一個亮點,它可以實現已有組件的序列化,支持數據驅動式的游戲開發。
配合XCode,序列化的組件可以被當作游戲資源在各個不同的工程和游戲里面重用。
而且它會自動Cache,同樣的文件不會被加載多次。對于一些復雜的場景和組合動作序列,當需要重用它們的時候,SKReferenceNode是個大殺器。
Metal支持
目前iOS 9全面支持Metal,已有的SpriteKit游戲跑在iOS 9上面,不需要做任何修改即可享受Metal帶來的性能提升。如果你的設備支持Metal,那么它就會使用Metal,反之則切換到OpenGL ES.
SpriteKit 相關工具
一個好的游戲框架離不開一個好用的工具支持,游戲開發者可以通過工具快速地進行迭代式開發。蘋果一直致力于完善SpriteKit的工作流,讓開發者可以更快速地開發游戲,同時讓玩家可以不用關心技術細節,只需要專心游戲玩法即可。
今年WWDC XCode工具支持方面主要有以下幾點:
小結
整個SpriteKit在性能,工具和易用性方面都有了較大的提升,另外,配合SceneKit,開發者可以更容易地開發3D休閑類游戲了。
SceneKit新功能
SceneKit是蘋果為了讓游戲開發者更方便地開發3D游戲而推出來的,它支持iOS和MacOS X。
同時,它還完美支持粒子系統,物理集成和SpriteKit。今年,蘋果改進了場景編輯器,同時對Metal的支持也更加完善了。
新的場景編輯器
新的場景編輯器的功能總結如下:
除了這7點以外,還有諸如compute shader, relfective cub map等功能。
Metal支持和 SKTransitions
新的SceneKit可以根據設備類型自動匹配是否使用OpenGL或Metal作為渲染后端,同時它支持SpriteKit的切換場景切換,制作SceneKit場景切換效果更容易了。
Metal 新功能及性能優化
今年WWDC游戲相關視頻中,蘋果用了3個視頻介紹了Metal的新特性以及性能優化方法,同時SpriteKit和SceneKit在iOS 9中都是默認使用Metal作為渲染API。Metal作為蘋果生態圈的高性能圖形渲染API,大有可能在將來某一天取代OpenGL的趨勢。
新功能介紹
這里簡單給大家介紹一下Metal的新功能,具體的細節還需要查看相關文檔和視頻。
MetalKit框架
MetalKit對于一些常見的應用場景提供了高效的實現,開發者可以用更少地代碼來開發應用,并且開發出來的應用性能和穩定性會更高。
MetalKit提供了一個 MTKView 類,它統一處理了渲染一個Metal場景所需要的設置代碼,另外,它提供了一個紋理加載器,它可以從一個圖片文件中創建一個Metal紋理。最后,MetalKit完美支持Model I/O,讓3D模型的處理更加簡單。
Metal performance shader框架
Metal performance shader是一個為GPU提供數據并行算法的一個框架,目前只支持A8處理器。
它定義了一些類似操作CPU風格的API,這樣可以讓GPU編程變得更加簡單。它提供了很多內置的并行算法,比如蘭索斯重新取樣(Lanczos resampling),卷積函數(比如高斯濾鏡等),直方圖等。
Metal調試工具和最佳實踐
眾所周知,圖形應用是非常難以調試的,而Metal在設計之初就考慮了多線程,而多線程的調試也是很困難的。因此,如果沒有好用的工具支持,調試Metal應用將會變得非常困難。
此次,蘋果圍繞Metal提供了一系列好用的工具。比如:一個可視化的幀調試器,一個資源和狀態查看器,shader性能分析工具,集成的離線Metal編譯器等。
讀者可以根據WWDC中關于Metal性能優化的視頻去了解更多詳細的信息。
另外,蘋果給我們定義了一些最佳實踐:
小結
Metal已經成了蘋果在3D圖形渲染的一張王牌,它的性能遠超OpenGL,開發者應該全面擁抱它,利用它來開發出性能更好的圖形應用和游戲。同時,使用Metal,也可以用更少的代碼來編寫圖形應用,另外,它也會讓你的程序會更容易維護。
GamePlayKit介紹
GamePlayKit是今年WWDC游戲開發方面最大的亮點,它提供的實體組件系統將直接改變之前以繼承為主的開發游戲方式。另外,還為游戲開發提供了大量實用的算法與設計模式,iOS游戲開發從未如此簡單。
實體組件系統
實體組件系統是一種非常流行和先進的組織游戲邏輯的方式,采用它編寫的游戲代碼,更容易維護,更容易擴展,同時也更加靈活。
尋路算法
尋路算法可以讓你指定一些節點生成一個雙向連接圖,然后可以通過簡單的API調用找到任意兩個點之間的最優路徑。所有的有向圖的基類是GKGraph,它是一個抽象類。它提供一些共用的邏輯,比如動態地添加和刪除節點,連接這些節點并找到任意兩個節點之間的路徑。
此外,GamePlayKit還提供了兩種特殊類型的圖節點: GKGridGraph 和 GKObstacleGraph 。GKGridGraph非常適合2D游戲里面的路徑查找。而GKObstacleGraph則可以設置一些障礙物,節點在尋路的時候,這些障礙物是無法穿越的。SKNode的邊界,物理剛體和紋理都可以當作障礙物。
狀態機
狀態機是游戲玩法的骨架,游戲本身就是由一系列的狀態機組成的。比如主角動畫,AI狀態,UI切換,關卡切換等,這些都可以使用狀態機巧妙地解決。
GamePlayKit通過封裝了 GKStateMachine 和 GKState 類,把一些共用的邏輯全部抽象出來了,開發者再也不用為每一個游戲去開發單獨的狀態機了。
Agent指的是會自已移動的游戲實體,它們通過Goal和Behavior來驅動自身的邏輯。Behavior是由一系列的Goal組成的,每一個Goal都包含有相應的權重。Agent在與玩家進行游戲交互的時候,可以表現得更像人類,因為它們也會做決策。
以往只有在一些很復雜的游戲里面才會看到的AI,如今通過GamePlayKit,我們可以非常輕松地給自己的游戲也添加了。通過給游戲里面的怪物添加一些AI,能夠極大地增強游戲的趣味和粘性。
AI 策略(MinMax AI)
MinMax AI主要用于一些回合類游戲,比如象棋,圍棋,Tic-Tac-Toe等。它還能給人類玩家提供一些建議,比如告訴你下一步棋該怎么下。另外,通過計算時間的設置,AI可以定義不同的難度等級。
規則系統
規則系統可以讓你制作更加復雜的游戲AI,游戲世界的交互不再是“黑即是黑,白即是白”,而是以事先定義好的一定的規則去交互。游戲AI可以實現所謂的模糊邏輯,游戲怪物的活動可以根據定義好的規則系統去動態地調整和評估自己的行為。
隨機數發生器(Random Sources)
每個游戲都有一些特別的隨機數生成需求,而rand()函數只能生成一些偽隨機數,并且可能跟平臺實現還有一些出入。作為開發者,我們需要一個與具體平臺無關的隨機數生成器,另外這個隨機數生成器還能產生符合一定數學分布的隨機數。
Demobots示例
這是一個非常有價值的游戲demo,里面幾乎涉及了GamePlayKit里面的大部分技術,是一個值得深入學習的游戲示例。這里是 下載鏈接
小結
實體組件系統不是蘋果的原創,但是這一次GamePlayKit巧妙地整合了已有的游戲開發框架,iOS游戲開發變得從未如此簡單和有效。配合強大的Swift和Xcode支持,更加如虎添翼。
ReplayKit和 Game Center
ReplayKit可以讓玩家在游戲中錄制游戲視頻,并且可以給這些視頻添加語音評論并且通過社交網絡分享出去。另外Game Center允許訪客模式,并且整合了產品服務器和沙盒服務器,這樣測試和開發基于Game Center的游戲就變得更加簡單了。
ReplayKit只有在iOS 9才能使用,另外開發者可以定制是自動在某些游戲場景開啟視頻錄制還是讓玩家自己選擇錄制時機。錄制完的視頻還可以被編輯和預覽,從此玩游戲不再孤單。
另外,訪客模式是不需要取得認證即可參與游戲的,訪客不會取得任何游戲成就,也不可以發布游戲得分。開啟訪客模式的游戲,玩家只能與其它運行iOS 9的玩家進行游戲。
Model I/O模塊介紹
Model I/O是用處理3D資源和數據的框架,我們可以通過Model I/O快速地加載和導出3D資源文件。另外,它集成在Xcode里面并且和可以非常容易地與GameKit API配合.它的主要功能特性如下:
總結
從本次蘋果對游戲開發所做的改進來看,休閑社交游戲仍然是其主推的游戲類型。不過有了Metal的支持,在MacOS X開發AAA游戲也是完全有可能的。另外,主流的游戲廠商Unity和Unreal都聲稱直接了Metal,相信以后蘋果生態圈里面會出現更多高品質的游 戲。
另外,隨著虛擬現實和現實增強的火爆,相信在不久的將來,蘋果也可能推出自家的VR設備。到時候,這些游戲開發框架和工具必將是您開發蘋果VR游戲的首選。
參考鏈接