Apple Engine

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

SceneKit の検索結果:

iOS で SceneKit を試す(Swift 3) その88 - SceneKit で SpriteKit の SKVideoNode を使用して動画のテクスチャを適応してみる

書き忘れていたが、SceneKit では SpriteKit の SKScene シーンを SCNMaterialProperty の各 contents に渡すことができる。 やり方としては作成した SKScene をジオメトリの firstMaterial.diffuse.contents を渡すだけ。 2D描画処理のコストはかかるが、複雑なテクスチャを作成できる。 ちなみに、SpriteKit 側も SK3DNode でイニシャライズして scnScene に設定した …

iOS で SceneKit を試す(Swift 3) その87 - SceneKit でマルチパスレンダリングを行う SCNTechnique を試す

SceneKit では他のゲームエンジンと同様にシーンを複数回レンダリングし画像を合成するマルチパスレンダリングを行うことができる。 内容的には結構複雑なので、こんなことができるよというのがわかってもらえれば良いかと。 マルチパスレンダリングの使用用途は? 主に2タイプある。 レンダリングされたカラーバッファを入力として使用し、それをフラグメントシェーダーで処理するポストプロセッシング カラーグレーディングやディスプレースメントマッピングなどに使用。 もう一つは、最初にレンダ…

iOS で SceneKit を試す(Swift 3) その86 - SceneKit のカスタムシェーダーについて

SceneKit でのカスタムシェーダーは主に3つ SCNProgram でプリコンパイルしたものを使う SCNShadable の shaderModifiers に Metal / GLSL のスニペットであるテキストデータを使う SCNTechnique で設定し主にポストプロセスのように画面全体の変更する際に使う 基本、シェーダーは導入の説明を書くだけで、 何個か記事を書くことになりそうだから shaderModifiers を今回、SCNTechnique を次回軽…

iOS で SceneKit を試す(Swift 3) その85 - SceneKit で 2D ライブラリ SpriteKit の SKTexutre をテクスチャとして使用する

…e テンプレートで SceneKit を選択し作成。 GameViewController.swift を開く。 以下のコードを追加して、宇宙船のマテリアルの Normal に SKTexutre としてしたの画像を適応してみた let shipMesh = scene.rootNode.childNode(withName: "shipMesh", recursively: true)! let normalTexture = SKTexture(imageNamed: "…

iOS で SceneKit を試す(Swift 3) その84 - SceneKit の画面上の UI (HUD) を 2D ライブラリ SpriteKit で実装してみる

SceneKit には、SCNView には overlaySKScene というプロパティがあり、SCNView の最前面に 2D ライブラリ SpriteKit のシーンである SKScene を貼り付けることができる。 そのため、UIKit にはない パーティクルや派手な演出のある UI を作成できる。 SpriteKit の詳細についてはネットや書籍で多く語られているので割愛。 Swift の バージョンが古いので手直しが必要だが、SpriteKit の書籍ならこちら…

iOS で SceneKit を試す(Swift 3) その83 - 画面全体の色調整(カラーグレーディング)を行う LUT 画像ファイルの作成、編集を試す

…トもしくは、既存の SceneKit のプロジェクトに、 先ほどの lut.png をドラッグ&ドロップなどでインポートし、以下のコードのカメラのノードに適応する。 let camera = SCNCamera() camera.colorGrading.contents = UIImage(named:"lut.png") camera.colorGrading.intensity = 1.0 以前、説明しているように intensity は適応具合。 1.0 が 100%…

iOS で SceneKit を試す(Swift 3) その82 - キューブマップを設定する

…の機能だったはず) SceneKit ではシーンの background や lightingEnvironment、または Blinn や Phong マテリアルの Reflective プロパティ で使用可能。 lightingEnvironment は Physically Based のシェーダーで効果を表す。 シーンの background や lightingEnvironment にテクスチャを適応したもの。 キューブマップ使用できる画像配置と画像サイズ ドキュ…

iOS で SceneKit を試す(Swift 3) その81 - シーンに音楽や効果音をつける。

…が使用できるので、 SceneKit のオーディオ再生機能を使用する必要はないけどご紹介。 SceneKit でのオーディオ再生の特徴としては、VR や HoloLens と同様に 3D 空間の位置に対して音源を再生(ミキシング)させることができる。 SceneKit では音を鳴らす方法は2つ。 ノードの addAudioPlayer に SCNAudioSource (AVAudioNode) を設定した SCNAudioPlayer で再生する SCNAction の p…

iOS で SceneKit を試す(Swift 3) その80 - ジオメトリにフィルター効果(Core Image Filter)をつける

SceneKit ではジオメトリなどノードに Core Image Filter を使用してエフェクトをつけることができ、Metal Shader で行うより簡単にできる。 多分、他のゲームエンジンではこれほど簡単にエフェクトをかけるのは難しいと思われる。 とりあえず、試した感じだと、Metal Shader の方がパフォーマンスが良さそう。 コードを書いてみる いつも通り、Xcode で Game のテンプレートで SceneKit を選択。 ship の下らへんに以下のコ…

iOS で SceneKit を試す(Swift 3) その79 - 画面操作などからオブジェクトを探し出すヒットテストについて

…sult を返す。 SceneKit で用意されているヒットテスト ヒットテストの検索を実行できるメソッドは3つ。 レンダリング画像 (SCNSceneRenderer)、SCNNode、物理シミュレーションを使用した PhysicsWorld 内で調べることができる。 hitTest(_:options :) hitTestWithSegment(from:to:options :) rayTestWithSegment(from:to:options :) hitTest…

iOS で SceneKit を試す(Swift 3) その78 - パーティクルシステムのパラメーターをみてみる

パーティクルシステムのパラメーターをみてゆく。 ちなみに、画像を設定しないと Scene Editor 上で、何も表示されない場合があるので注意。 Scene Editor の Attributes Inspector での表示 Δ=0 となっているものは、コードでは Variation と呼ばれているもの。 ここで設定した値は、時間に応じてその値の幅をプラスマイナスの値でランダムに加算する。 Image Size を 5、Birth rate の Variation 8 に…

iOS で SceneKit を試す(Swift 3) その77 - パーティクルシステムを scn ファイルの Scene Editor で確認してみる

パーティクルシステムを scn ファイルの Scene Editor で確認してみようと思うが、 カメラ、ライト、ジオメトリ、アクションなどと特に変わりはない。 scn ファイルを開いた状態で Object Library (Command + Option + Control + 3) を開き、 Particle System をドラッグ&ドロップするだけ。 Scene Graph View にもパーティクルシステムが適応されたノードが配置され、 Attributes In…

iOS で SceneKit を試す(Swift 3) その76 - パーティクルの障害物判定と新しいエミッターの派生

SceneKit の パーティクルシステムは他のゲームエンジン同様に、パーティクルの障害物判定と新しいパーティクルのエミッター派生させることができる。 パーティクルの処理自体軽いわけではないので多用は禁物。 今回の流れ 雨のパーティクルを落とし床に衝突 衝突の際にパーティクルの削除 削除した場所から新しいパーティクルのエミッター(パーティクルシステム)を派生させる プロジェクトファイルを作る いつも通り、Xcode の SceneKit の Game テンプレートを作成。 G…

iOS で SceneKit を試す(Swift 3) その75 - SceneKit Particle System File と パーティクルシステム の emitterShape

SceneKit Particle System File (scnp) は Particle System 専用のファイル。 Scene Editor 上で、Particle System の確認ができる。 scnp ファイルは Particle System のファイルではあるが、scn では参照ができないため、コード場で行う。 scnp ファイルを Scene Editor で見た場合 パーティクルシステムの情報しかないので、Scene Graph View は存在せず…

iOS で SceneKit を試す(Swift 3) その74 - SceneKit のパーティクル、SCNParticleSystem について

…。 パーティクルは SceneKit で存在するオブジェクトで唯一 Scene Graph と切り離され存在となっており、 数千、数万と描画される可能性があるため、内部的に処理している。 ちなみに他のゲームエンジンと異なりパーティクルをジオメトリに設定することはできないので自力で頑張る。 パーティクルシステムの流れ パーティクルの画像設定 各パーティクルにテクスチャ画像を適応し、色合い、ブレンディングモードなどのパラメータを調整し外観を設定する。 また、アニメーション用にシー…

iOS で SceneKit を試す(Swift 3) その73 - 物理シミュレーションとパーティクルの空間に影響を与える PhysicsField について

…することができる。 SceneKit で用意されている物理フィールド 名称 機能 Drag 動きを減速させる流体摩擦や空気抵抗のフィールド Vartex 指定した軸を中心に力が循環する渦のフィールド Radial Gravity 中心に向かって加速する重力フィールド Linner Gravity 特定の方向に加速する重力フィールド Noise ランダムな力を適用するフィールド Turbulance オブジェクトの速度に比例した大きさでランダムな力を適用するフィールド Spri…

iOS で SceneKit を試す(Swift 3) その72 - 物理シミュレーションでのジョイントアニメーションと SCNPhysicsBehavior

SceneKit の物理シミュレーションでは、2つのノードを接合しその個所を考慮した物理アニメーションが用意されており、 設定されたジョイントは PhysicsWorld が持つ SCNPhysicsBehavior で設定することで物理シミュレーションが適応される。 また、ジョイントの稼働位置ごとに設定するため、ノードでの位置設定は意味がなくなる可能性あり。 SCNPhysicsBehavior はコードでしか設定できないため、 ジョイント設定は Scene Editor …

iOS で SceneKit を試す(Swift 3) その71 - SCNPhysicsContact と SCNPhysicsContactDelegate

…り、XCode で SceneKit の Game テンプレートプロジェクトを作成。 今回は GameViewController.swift のみ修整。 その1 GameViewController.swift を開き、13行目に UIViewController の隣に SCNPhysicsContactDelegate を追加。 class GameViewController: UIViewController, SCNPhysicsContactDelegate {…

iOS で SceneKit を試す(Swift 3) その70 - PhysicsBody にある3つのビットマスク

PhysicsBody には SCNNode のビットマスクとは別に、 以下のビットマスクが存在している。 Category mask Collision mask Contact mask Physics Inspector (Command + Option + 6) でも、 同様のパラメーターがある Category mask PhysicsBody の Category mask となり、AND演算の結果が 0 以外であれば同じカテゴリーに所属することとなる。 Col…

iOS で SceneKit を試す(Swift 3) その69 - PhysicsBody の振る舞い 3

…メントを変更する。 SceneKit では形状と質量に合わせて自動設定されるが usesDefaultMomentOfInertia を false にして、 momentOfInertia を設定すると独自の慣性モーメントを付加できる。 例えば、X 軸回転方向に制限をかける let ball = SCNSphere(radius: 1) let ballNode = SCNNode(geometry: ball) ballNode.position.y = 10 ballN…

iOS で SceneKit を試す(Swift 3) その68 - PhysicsBody の振る舞い 2

もう1つの項目 Velocity について。 Static は力が加えられることはないのでこの項目はない。 Physics Inspector (Command + Option + 6) の Velocity には以下のパラメーターがある Velocity Linear velocity 物理アニメーション時に現在の移動に加え指定した方向へ力を与える。 デフォルト値は x: 0.0 y: 0.0 z: 0.0 x を 1 にすると、プラス方向に メートル/秒 で移動の力が働…

iOS で SceneKit を試す(Swift 3) その67 - PhysicsBody の振る舞い 1

…を受けていない場合、SceneKit の物理シミュレーションによって自動的に true に設定され停止状態になる。 Allows resting のチェックをオンにすることで自動的に isResting を false に戻してシミュレーションさせるか否かを決める。 デフォルト値はオン(true)。 コード let ball = SCNSphere(radius: 1) let ballNode = SCNNode(geometry: ball) ballNode.posit…

iOS で SceneKit を試す(Swift 3) その66 - PhysicsBody の当たり判定 PhysicsShape について

まず、最初にあたり判定から。 Scene Editor のデフォルト、もしくはコードで SCNPhysicsBody 設定の際 nil を渡すと、 そのジオメトリの形状が当たり判定となる。 また、当たり判定のジオメトリが荒いほど物理シミュレーションの演算が軽くなる。 Scene Editor での表示 Scene Editor では当たり判定が緑色のワイアーフレームで表示される。 デフォルトの場合、その形状になるため、 球を配置すると、球の当たり判定となる。 Scene Ed…

iOS で SceneKit を試す(Swift 3) その65 - 物理シミュレーションについて

…見ていこうと思う。 SceneKit での物理シミュレーションの種類 大きく分けると以下のもの PhysicsWorld PhysicsBody PhysicsField PhysicsWorld は物理シミュレーションは全体についての設定。 PhysicsBody は物理シミュレーションをさせる対象物。 PhysicsField は風などの外部からの力を指す。 その他 物理シミュレーションにはこれ以外にも PhysicsBody の当たり判定を決める PhysicsShap…

iOS で SceneKit を試す(Swift 3) その64 - SCNSkinner と Bone について

人型のキャラクタなどに稼動できる骨を入れて、骨を動かすと該当箇所のジオメトリが変化する 所謂、Skinning と Bone を使用してアニメーションを SCNSkinner が行う。 公式ドキュメントの画像を参照 正直、コード上で書くのは手間がかかり、Scene Editor で編集ができないため、 他のゲームエンジンと同様に 3DCG のオーサリングツールで Bone を入れ、 アニメーションを設定したオブジェクトファイルを作成した方が速い。 使い方 コードで設定する場合…

iOS で SceneKit を試す(Swift 3) その63 - Scene Editor で Light Map のテクスチャを作成する

Scene Editor ではライトを当てたジオメトリに対して、光を当てた表面情報を画像として Light Map を作成することができる。 内容的には Ambient Occlusion と同じような操作。 Light Map のパラメーター Scene Editor でジオメトリを選択し、 Attributes Inspector (Command + Option + 4) を開き、一番下に Baking の項目がある。 Scene Editor では以下のパラメーター…

iOS で SceneKit を試す(Swift 3) その62 - Scene Editor で Ambient Occlusion のテクスチャを作成する

…アルに見せる技術。 SceneKit では Model I/O フレームワークの機能から呼び出す。 光学的に Ambient Occlusion は、実際の世界では起こらないため擬似的なものである。 Ambient Occlusion のパラメーター Scene Editor でジオメトリを選択し、 Attributes Inspector (Command + Option + 4) を開き、一番下に Baking の項目がある。 Scene Editor では以下のパラメ…

iOS で SceneKit を試す(Swift 3) その61 - Xcede の Scene Editor でのメニューバー

…onvert to SceneKit scene file format (.scn) Enable default lighting 4つ目の .scn への変換は以前紹介済みなので割愛。 Selection Focus Selected Node Scene Editor で選択したノードが、Scene Editor の操作画面に入るようにズームイン、またはズームアウトする。 Scene Graph View でノードをダブルクリックした時と振る舞いは同じ。 Object…

iOS で SceneKit を試す(Swift 3) その60 - SCNMorpher でモーフィング

SceneKit では SCNNode に SCNMorpher が紐づけられており、1つまたは複数のジオメトリを配列として渡すと、各ジオメトリへ変形させることができるモーフィングというものが使える。 (3DCG のオーサリングツールでは Blend Shape と呼ばれているものある) A のジオメトリから B のジオメトリへポリゴンの頂点が変形させられるため、ジオメトリの頂点の数が一致していないとアニメーションできない。 また、頂点に位置がおかしいとジオメトリの面がおかし…

iOS で SceneKit を試す(Swift 3) その59 - Blender で Collada (.dae) をエクスポートし Scene Editor で読み込む

…Blender と SceneKit では座標系が異なる。 エクスポート時に軸の変換ができないため、読み込んだジオメトリを-90度回転させる必要がある。 うっかりミス Blender 上でマテリアルを設定していないため、Scene Editor でからになっている。 Material Inspector (Command + Option + 5) から「+」ボタンで新規で作成してみる。 コードで DAE を読み込む オブジェクトデータは Xcode 上では Scene Fi…