Apple Engine

Apple, iPhone, iOS, その周辺のことについて

iOS で SceneKit を試す(Swift 3) その1 - はじめに

もしかして、WWDC 2017 で AR 的なものが出るかもしれないので勉強ついでのメモ書き。
専用のフレームワークが用意される可能性が高いけど。

あと、WWDC の動画からの抜粋なので英語がわかる方はこちらを見た方が良い。
https://developer.apple.com/search/?type=Videos&q=SceneKit

 

SceneKit とは

SceneKit は iPhone, iPad, iPod Touch などの iOS、
Apple Watch の watchOS、
Apple TV の tvOS、
Mac などの macOS で使用できる 3DCG ライブラリ。

簡単に説明すると使いづらい Unity。

SceneKit での利点は、直接 Swift や Objective-C で動いているため、ネイティブ命令との親和性が高く、SceneKit の View の上に iOS の UIを配置する事が可能。

また、現状 Unity の Editor では Exstentions を作成できないため、watchOS のアプリがそのままつくる事ができない。
watchOS のアプリを 3D でつくる必要性があるかはあれだけど。

 

SceneKit でできる事

  • モーフィングアニメーション
  • ボーン/スキニングアニメーション(IK 可)
  • 位置、ルックアップ、IK などのコンストレイント (制限)
  • 物理アニメーション
  • SceneKit で用意されたアニメーション機能
  • パーティクル
  • ヒンジ/ボール/スライドジョイントアニメーション
  • 車を模した物理アニメーション
  • 物理ベースのシェーディング
  • マテリアルに SpriteKit や CALayer の適応
  • オブジェクトへのフィルター適応 (Core Image - CIFilters)
  • カスタムの Metal シェーダー
  • オブジェクトへ陰を落とす
    (初回描画のみ、ライトで動的に変化、ゲームでよくある画像の陰)
  • オブジェクトのヒットテスト
  • OpenSubdiv
  • Level Of Detail
  • 被写界深度
  • Fog
  • 複数のカメラ配置と切り替え
  • IES ライトなど物理ベースのライティング
  • アンビエントオクルージョン
  • グローバルイルミネーション
  • 画面全体のマルチパスエフェクト
  • 画面表示に SpriteKit のオーバーレイ(HUD 用)
  • オーディオ再生 (3D 音響)
  • シーンのノード階層の平滑化 (パフォーマンス向上の施策)
  • JavaScript ブリッジ
  • Xcode でタイムラインエディタを使用したアニメーション編集
  • Xcode でのパーティクルアニメーション編集

など

 

ひとまず動かす

Xcode を起動。

f:id:x67x6fx74x6f:20170529183729p:plain

 

Create New Project (command + Shift + N) でプロジェクト作成

 

iOS の「Game」を選択して「Next」ボタンを押す。

f:id:x67x6fx74x6f:20170529183801p:plain

 

Product Name に適当な名前をつけて、
Game Technology のセレクタから「SceneKit」を選択して、「Next」ボタンを押す。

f:id:x67x6fx74x6f:20170529183853p:plain

ビルド(command + R) でシミュレーターか実機にビルドされる。

 

f:id:x67x6fx74x6f:20170529184032p:plain

スペースシャトル的なものが表示され、タップやピンチで画面操作可能。
iOS シミュレーターでは処理落ちするかもしれないが、実機では 60 fps で滑らかに表示される。

もし早く表示を確かめたいのであれば、macOS のアプリとしてビルドした方が良いかもしれない。

また、iOS シミュレーターでは現状では Metal が動作しない。

 

macOS、tvOS でも動かす

プロジェクト作成時に、macOS か tvOS を選ぶだけであとは同じ。
今後、iOS、macOS、tvOS、watchOS を1つのプロジェクトの動作する方法を書くかも。

 

画面下の統計情報の軽い説明

f:id:x67x6fx74x6f:20170529184142p:plain

  • 詳細表示用の「+」ボタン
  • フレームレート(ゲージ)
  • 使用しているライブラリ名 OpenGL(ES) or Metal
  • プレームレート(文字)
  • ドローコール(フレーム毎)
  • 表示全体のポリゴン数

「+」ボタンの内容に関してはプラットフォームごとに異なるのでまた後で。

 

フレームレートは 60 fps 以上を最良としており、ゲージが緑色である事が望まれる。(40 fps ぐらい?)

ライブラリの選択はデフォルトだと自動になっているが、Metal Shader を使用する際は GL ではなく Mt と表示されていなければ動かないので注意。

ドローコールは描画するものが画面に現れると1カウントされ、
その隣は画面上のポリゴン数。

フレームレートのゲージが描画されるとドローコールが1、ポリゴンが38増える。
そのため、このプロジェクトをビルドすると

  • フレームレートのゲージで 1
  • 宇宙船で 1

 

合計 2 のドローコールが走る。
ドローコールが無駄に多い場合は効率的に表示されていない可能性がある。

 

今回はここまで。