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 を起動。
Create New Project (command + Shift + N) でプロジェクト作成
iOS の「Game」を選択して「Next」ボタンを押す。
Product Name に適当な名前をつけて、
Game Technology のセレクタから「SceneKit」を選択して、「Next」ボタンを押す。
ビルド(command + R) でシミュレーターか実機にビルドされる。
スペースシャトル的なものが表示され、タップやピンチで画面操作可能。
iOS シミュレーターでは処理落ちするかもしれないが、実機では 60 fps で滑らかに表示される。
もし早く表示を確かめたいのであれば、macOS のアプリとしてビルドした方が良いかもしれない。
また、iOS シミュレーターでは現状では Metal が動作しない。
macOS、tvOS でも動かす
プロジェクト作成時に、macOS か tvOS を選ぶだけであとは同じ。
今後、iOS、macOS、tvOS、watchOS を1つのプロジェクトの動作する方法を書くかも。
画面下の統計情報の軽い説明
- 詳細表示用の「+」ボタン
- フレームレート(ゲージ)
- 使用しているライブラリ名 OpenGL(ES) or Metal
- プレームレート(文字)
- ドローコール(フレーム毎)
- 表示全体のポリゴン数
「+」ボタンの内容に関してはプラットフォームごとに異なるのでまた後で。
フレームレートは 60 fps 以上を最良としており、ゲージが緑色である事が望まれる。(40 fps ぐらい?)
ライブラリの選択はデフォルトだと自動になっているが、Metal Shader を使用する際は GL ではなく Mt と表示されていなければ動かないので注意。
ドローコールは描画するものが画面に現れると1カウントされ、
その隣は画面上のポリゴン数。
フレームレートのゲージが描画されるとドローコールが1、ポリゴンが38増える。
そのため、このプロジェクトをビルドすると
- フレームレートのゲージで 1
- 宇宙船で 1
合計 2 のドローコールが走る。
ドローコールが無駄に多い場合は効率的に表示されていない可能性がある。
今回はここまで。