Swift3
Swift 3 (Xcode 8) の SceneKit の解説に関してはここで一区切り。 カスタムの Action、ParticleSystem、PhysicsField、 シーンを管理する SCNSceneRenderer、 scn ファイルを読み書きする SCNSceneSource、JS で SceneKit を設定する SCNExportJavaScriptMo…
もう1つ忘れていたものノードのフラット化について。 Scene Graph でチルドノードが増えすぎたりするとドローコールが増えるため、パフォーマンスが落ちる可能性があり、 SceneKit の機能でノードのジオメトリをひとまとめにする Flatten Node の処理を行う…
書き忘れていたが、SceneKit では SpriteKit の SKScene シーンを SCNMaterialProperty の各 contents に渡すことができる。 やり方としては作成した SKScene をジオメトリの firstMaterial.diffuse.contents を渡すだけ。 2D描画処理のコストはかかるが、複…
SceneKit では他のゲームエンジンと同様にシーンを複数回レンダリングし画像を合成するマルチパスレンダリングを行うことができる。 内容的には結構複雑なので、こんなことができるよというのがわかってもらえれば良いかと。 マルチパスレンダリングの使用用…
SceneKit でのカスタムシェーダーは主に3つ SCNProgram でプリコンパイルしたものを使う SCNShadable の shaderModifiers に Metal / GLSL のスニペットであるテキストデータを使う SCNTechnique で設定し主にポストプロセスのように画面全体の変更する際に…
今まで SCNMaterial が持つ SCNMaterialProperty の content で UIImage を設定し、テクスチャを決めていたが SpriteKit の SKTexutre を設定することができる。 SKTexutre を適応してみる いつも通り、Xcode の Game テンプレートで SceneKit を選択し作成…
SceneKit には、SCNView には overlaySKScene というプロパティがあり、SCNView の最前面に 2D ライブラリ SpriteKit のシーンである SKScene を貼り付けることができる。 そのため、UIKit にはない パーティクルや派手な演出のある UI を作成できる。 Sprit…
以前、Scene Editor でのカメラのポストプロセス処理を行う際に、 色調整を行うカラーグレーディングで専用画像を使用した。 今回はその使い方とつくりかたについて説明していこうと思う。 編集に関しては Photoshop など、何らかの画像編集が必要になる。 …
立方体6面の内側に指定された画像を内側に貼り付ける360度の背景画像をキューブマップと呼び、 SCNMaterial の親玉である SCNMaterialProperty から使用する。 (内部的には Model I/O の機能だったはず) SceneKit ではシーンの background や lightingEnvi…
正直なところ、Core Audio など iOS 標準機能が使用できるので、 SceneKit のオーディオ再生機能を使用する必要はないけどご紹介。 SceneKit でのオーディオ再生の特徴としては、VR や HoloLens と同様に 3D 空間の位置に対して音源を再生(ミキシング)させ…
SceneKit ではジオメトリなどノードに Core Image Filter を使用してエフェクトをつけることができ、Metal Shader で行うより簡単にできる。 多分、他のゲームエンジンではこれほど簡単にエフェクトをかけるのは難しいと思われる。 とりあえず、試した感じだ…
今回は、特定のオブジェクトを SCNView から探し出すヒットテストをみていく。 Xcode の Game テンプレートではレンダリングされた画像から調べ、 宇宙船をタップするとマテリアルの色が赤く変わるアニメーションが実装されている。 (ドキュメントではレン…
パーティクルシステムのパラメーターをみてゆく。 ちなみに、画像を設定しないと Scene Editor 上で、何も表示されない場合があるので注意。 Scene Editor の Attributes Inspector での表示 Δ=0 となっているものは、コードでは Variation と呼ばれているも…
パーティクルシステムを scn ファイルの Scene Editor で確認してみようと思うが、 カメラ、ライト、ジオメトリ、アクションなどと特に変わりはない。 scn ファイルを開いた状態で Object Library (Command + Option + Control + 3) を開き、 Particle Syste…
SceneKit の パーティクルシステムは他のゲームエンジン同様に、パーティクルの障害物判定と新しいパーティクルのエミッター派生させることができる。 パーティクルの処理自体軽いわけではないので多用は禁物。 今回の流れ 雨のパーティクルを落とし床に衝突…
SceneKit Particle System File (scnp) は Particle System 専用のファイル。 Scene Editor 上で、Particle System の確認ができる。 scnp ファイルは Particle System のファイルではあるが、scn では参照ができないため、コード場で行う。 scnp ファイルを…
パーティクルシステムとは粒状のものに画像など使用し、振る舞いの設定を行い、 煙、雨、紙吹雪、花火の効果を再現する。 そして、その粒子の一つ一つをパーティクルと呼ぶ。 パーティクルは SceneKit で存在するオブジェクトで唯一 Scene Graph と切り離さ…
重力、電磁気、乱気流などの外部から与えられる力を領域内に反映させるオブジェクト、PhysicsField (物理フィールド) について見ていこうと思う。 PhysicsField は物理アニメーションとパーティクルに適応でき、 コード上からカスタムの PhysicsField を作成…
SceneKit の物理シミュレーションでは、2つのノードを接合しその個所を考慮した物理アニメーションが用意されており、 設定されたジョイントは PhysicsWorld が持つ SCNPhysicsBehavior で設定することで物理シミュレーションが適応される。 また、ジョイン…
PhysicsWorld 上で、2つ以上の PhysicsBody の接触が起こった場合に SCNPhysicsContactDelegate を呼ぶことができる。 注意点 PhysicsBody は contactTestBitMask が 0 以外でないと SCNPhysicsContactDelegate へ情報が送られないので注意。 当然だが、SCNP…
PhysicsBody には SCNNode のビットマスクとは別に、 以下のビットマスクが存在している。 Category mask Collision mask Contact mask Physics Inspector (Command + Option + 6) でも、 同様のパラメーターがある Category mask PhysicsBody の Category m…
コードでしか変更できない物理シミュレーション設定についてのご紹介。 momentOfInertia、usesDefaultMomentOfInertia PhysicsBody の慣性モーメントを変更する。 SceneKit では形状と質量に合わせて自動設定されるが usesDefaultMomentOfInertia を false …
もう1つの項目 Velocity について。 Static は力が加えられることはないのでこの項目はない。 Physics Inspector (Command + Option + 6) の Velocity には以下のパラメーターがある Velocity Linear velocity 物理アニメーション時に現在の移動に加え指定し…
今回は Scene Editor の Physics Inspector (Command + Option + 6) 部分の Settings のところを見てゆく。 このパラメーターは物理シミュレーション時にジオメトリがどのような特性を持っているか設定する。 次回に説明する Velocity を含め、設定するパラ…
まず、最初にあたり判定から。 Scene Editor のデフォルト、もしくはコードで SCNPhysicsBody 設定の際 nil を渡すと、 そのジオメトリの形状が当たり判定となる。 また、当たり判定のジオメトリが荒いほど物理シミュレーションの演算が軽くなる。 Scene Edi…
以前、軽く紹介していたが、何回かに分けては詳しく見ていこうと思う。 SceneKit での物理シミュレーションの種類 大きく分けると以下のもの PhysicsWorld PhysicsBody PhysicsField PhysicsWorld は物理シミュレーションは全体についての設定。 PhysicsBody…
人型のキャラクタなどに稼動できる骨を入れて、骨を動かすと該当箇所のジオメトリが変化する 所謂、Skinning と Bone を使用してアニメーションを SCNSkinner が行う。 公式ドキュメントの画像を参照 正直、コード上で書くのは手間がかかり、Scene Editor で…
Scene Editor ではライトを当てたジオメトリに対して、光を当てた表面情報を画像として Light Map を作成することができる。 内容的には Ambient Occlusion と同じような操作。 Light Map のパラメーター Scene Editor でジオメトリを選択し、 Attributes In…
Scene Editor ではジオメトリに対して Ambient Occlusion 用のテクスチャを焼き付け画像ファイルを作成することができる。 Ambient Occlusion とは? 周辺の光が塞がれて届かない隅のポリゴンに対して陰を着色することで物体をリアルに見せる技術。 SceneKit…
Scene Editor 表示時、Scene Editor でのみ変更されるのは「Editor」だけ。 ということで、Editor の紹介で項目は5つ。 Selection Display Edit Convert to SceneKit scene file format (.scn) Enable default lighting 4つ目の .scn への変換は以前紹介済み…