2015年7月18日土曜日

SpriteKitとSceneKit


SpriteKitとSceneKitのお勉強を始めました。

両方ともiOSでゲームを作るときのフレームワーク。
SpriteKitは2Dのゲームを、SceneKitは3Dのゲームが作れます。

他、Metalというのがあるけど、これはもっと下位レベルのフレームワークでOpenGLと同じレベル。



WWDC15 : Enhancements To Scenekit より

Metalは、A7, A8チップに特化することでパフォーマンスを最大限に引き出すよ というもの。
A7より下位のチップは動かないし、シミュレータでも動かない。(El Capitan‎だったら動くのかもしれない?)

SpriteKit, SceneKitを使ったらMetalでは動かないの?
というのが最初の疑問だったのですが、

iOS9ではMetalで動く環境であればMetalで動く。
SceneKitであれば指定も可能
ということらしい。

iOS9のリファレンスで、
New Featuresとして Metal Rendering Support
と記述されているので、iOS8ではMetalでは動かず、OpenGLで動いていたのかな?

SceneKitのSCNViewのInitialization Optionsで、SCNPreferredRenderingAPIKey が指定できる。
Storyboardにもこの設定がある。


Defaultにしておけば、よさげに動いてくれる。
SCNSceneRenderer#renderingAPI  から結果をデバッグしてみたら、
シミュレータではOpenGLES2
iPhone6 iOS9 beta3では Metal
にちゃんとなっていた。

SpriteKitはリファレンスに "metal rendering is automatically used" とあるので、自動的に選択....逆にいうと指定はできない という理解でいいのかな。

知らないって怖い。こんな最初のところからつまずいた。

プロジェクト作成するときの設定で、

と、横並びで選択がでてくるのも良くないと思うんだけどな!


今のところの次の疑問は、3Dモデルのファイル形式。

3Dの情報には、モデルデータ、テクスチャ、シェーダー、アニメーションなどが含まれていて、dae などの拡張子になっているのですよね。
daeは、SceneKitで読み込めるのですが、Appleのサンプルプロジェクトでは scn というファイル拡張子になっている。
scnファイルであれば、XCode上のEditorで修正できるよということだと思うのだけど、どこまでモデリングツールで作って、どのようにXCodeに持ってるくと手軽に作れるのだろう....

ModelIO.framework というのが使えるのだろうか。

The Model I/O framework provides a system-level understanding of 3D model assets and related resources. You can use this framework to import and export assets from and to a variety of industry standard file formats supported by popular authoring tools and game engines. You can also use Model I/O to generate or process model and texture data—for example, to create subdivision surfaces, bake ambient occlusion textures, or generate light probes. Model I/O can share data buffers with the MetalKit, GLKit, and SceneKit frameworks to help you load, process, and render 3D assets efficiently.

とリファレンスにあるので...?

あーー 何から何まで疑問だわー



• • •