Apple Engine

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

SceneKit

Xcode 12.2 の SceneKit の Game テンプレートでビルドすると上下に黒い枠が出る

条件は iPhone の一部機種のみだが、Xcode 12.2 の SceneKit の Game テンプレートを新規作成し、ビルドすると上下に黒い枠が出る。 (ランドスケープは左右にでる) UIWindowScene のデフォルトサイズなので、なんかなと思っていたら、LaunchScreen.storybo…

SceneKit のこれから

RealityKit が AR 向けとして出ているが、SceneKit はこれかも続くだろうと淡い期待をしている。 RealityKit が AR 向けと書いているように、現状は SceneKit を置き換えるにはかなり機能が少ない。 そもそも SceneKit は汎用的な 3DCG を表示するためにつく…

Xcode 11 での SceneKit の変更点 その7 - マテリアルの新しいライティングモデル

Xcode 11 での SceneKit でマテリアルのライティングモデル (Lighting Model/Shading) では新しくShadow Only が追加された。 使用用途としては AR の際に影だけ描画したい場合など。 現状では AR の現実空間の表示は画像に過ぎないので、影を落とすことがで…

Xcode 11 での SceneKit の変更点 その6 - マテリアルの追加機能

マテリアルにクリアコートが追加された。 車のボディ、プラモデルの塗装やネイルなどで使用される通常の塗装の上に透明な塗料を塗ることで塗装の光沢が変わる見た目を表す。 光沢を足すため暗いマテリアルのカラーだったり、クリアコートの Intensity の数値…

Xcode 11 での SceneKit の変更点 その5 - カメラの機能追加

カメラで3つの機能が追加された。 Scene Editor で3つ目の機能を使用し操作すると現状では Xcode が 100% クラッシュするので注意。 プロパティやメソッドは過去記事参照。 Bloom の追加機能 Scene Editor 上でカメラの Bloom に Iteration と Spread のパラ…

Xcode 11 での SceneKit の変更点 その4 - スクリーンスペースリフレクション

スクリーンスペースリフレクション (Screen-Space Reflection) とは 前回のリフレクションプローブと異なりカメラから反射を推定する。 そのため正確な反射にならない場合が多いが、それっぽい感じの表現をすることができる。 リフレクションプローブはライ…

Xcode 11 での SceneKit の変更点 その3 - リフレクションプローブ

リフレクションプローブ(Reflection Probe)とは? ライトプローブ同様に周囲の光(色)をキューブマップとして焼き込み、周りの反射するマテリアルに適応する。設定方法はライトプローブと変わらない。 ARKit の environmentTexturing プロパティ、AREnvir…

Xcode 11 での SceneKit の変更点 その2 - エリアライト

エリアライト (Area Light) が追加された。 ライトタイプを area に変更するだけ。 let light = SCNLight() light.type = .area プロパティやメソッドなどは過去記事参照。 エリアライト いわゆる面光源。 diffuse に柔らかに光を当て、面光源の形状のハイラ…

Xcode 11 での SceneKit の変更点 その1 - 概要と Scene Editor

リリース版が出たので詳細を書いていこうと思う。 コードのプロパティやメソッドは過去記事参照。 Scene Editor の変更 エリアライトの追加 リフレクションプローブの追加 シーン全体のスクリーンスペースリフレクションの追加 カメラの Bloom のプロパティ…

SceneKit の変更点 (Xcode 11 beta 3)

変更されたものは2つ。 simd framework から Swift Standard Liblary の SIMD Vector Types に変更された。 SCNVector3 init が float3 から SIMD3 double3 から SIMD3 に変更された。 init(SIMD3<Float>) init(SIMD3<Double>) SCNVector4 init が float4 から SIMD4 double</double></float>…

SceneKit の変更点 (Xcode 11 Beta 2)

追加 SCNMaterial、LightingModel で shadowOnly が追加された。 多分、AR などで影だけ表示するためのジオメトリのマテリアル用に追加されたのだろうと思う。 developer.apple.com 変更 修飾子 が unowned(unsafe) から weak に変更されたもの。 SCNParticl…

SwiftUI でカスタムビューの SceneKit を表示する (Xcode 11 Beta 1)

以下の変更が行われた。 記事のままでは動かず、書き直すのが面倒なので、 リンク先のサンプルコードの ContentView.swift を参照。 Beta 4 BindableObject が ObservableObject に変更 BindableObject が didChange から willChange へ変更 List や ForEach…

SceneKit の変更点 (Xcode 11 Beta 1)

今回も SceneKit のセッションがなく、ドキュメントの説明もないのでメソッドやプロパティ名から予想。 間違っていたらすみません。 ちなみに、Scene Editor の変更がそれなりにありそうなのだが NDA 的に紹介できないのでそのうち。 長いので最初にまとめ …

RealityKit の説明と SceneKit との違いについて考える (Xcode 11.0 Beta 1)

3DCG レンダリングと AR 補助機能を持った RealityKit が発表された。 RealityKit の説明をしつつ、最後に SceneKit との違いを考えてみる。 今回はコードでの説明はないので注意。 現状 Beta 版であるため公開されている情報からのまとめ。 以下の情報に関…

SceneKit と Metal で片方のビューをキャプチャし、他のビューのジオメトリに貼り付ける

SCNView の snapshot() メソッドでシーン自体のスクリーンショットを取得できる。 スレッドセーフでいつでも呼べるとはドキュメントには書いてあるが処理時間がかかるので連続で呼ぶとフレームが落ちる。 そのため、別の方法を使い Metal の命令から SceneKi…

ARKit でジオメトリの影を描画する

今までに自分が作成してきたサンプルはジオメトリの影をテクスチャで表現してきたが、ライトを置きジオメトリの影を描画したい時があるかもしれない。 ARKit の場合、現実空間と仮想のジオメトリを合成するため、平面認識後アンカーノードとしてジオメトリを…

ARKit で Spider Verse の様な色ズレを表現する。

SCNCamera にフリンジの設定があるので、 colorFringeStrength と colorFringeIntensity を調整するだけ。 let mainCamera = sceneView.pointOfView?.camera mainCamera?.colorFringeStrength = 5 mainCamera?.colorFringeIntensity = 0.5 Strength はフリン…

ARKit / SceneKit でフォーカスが外れたジオメトリの位置を知らせる UI をつくる

上の画像の様な感じ。 カメラから対象物となるジオメトリがフォーカスから外れるとジオメトリがある方向に、端末を回転する様に促す矢印の UI が出る。 今回はサクッとつくったため、あまり精度はないのでご了承いただきたい。 流れ overlayScene に左右矢印…

SceneKit で画像の色情報を元にジオメトリを配置する

画像の色情報とともにジオメトリを配置 上の画像の様な感じでピクセル分だけジオメトリを複製してマテリアルに色を付ける。 各ジオメトリのマテリアルの色が変わる可能性があり、GPU による Geometry Instancing が働かず、 ドローコールが画像のピクセル分…

ARKit や SceneKit で寿司を回す

前回の横に流れる文字の続き。 SpriteKit の SKScene でラベルをアニメーションさせたものを円筒状のジオメトリのマテリアルにテクスチャとして貼り付けて を流すとARKit で寿司を回る。 寿司を回す ARBoardSK からの変更 ジオメトリ ジオメトリを平面から…

ARKit や SceneKit で電光掲示板的な横に流れる文字を表示する

横に流れる文字(SceneKit) AR 空間で文字数の多いテキストを表示する場合、 紙のように板ポリゴン一面や空間にするケースがあると思われる。 AR は現実空間と密接になっているため、サイズが小さいと近くに寄る必要があり、逆に大きいと全体を見る為に遠ざ…

SceneKit のテクスチャに SpriteKit の SKScene を貼り付けて複雑な動きをするマテリアルをつくる

以前の記事で SpriteKit の SKVideoNode を使用して SceneKit のテクスチャに動画をループ再生する記事を書いた。 SpriteKit のシーンを貼り付けているため、基本的には SpriteKit で使用している機能を使いアニメーションや インタラクションをテクスチャと…

Xcode 10 の Scene Editor で Metal のカスタムシェーダーを設定する

Xcode の多分 10.1 から Metal のシェーダーファイルを Material Inspetor > Propaties > Shading で設定できるようになった。 内容的には SCNProgram が Scene Editor でできるようになった感じ。 Metal のカスタムシェーダーファイルを作成する 新規ファイ…

Xcode 10.2 Beta 1 (iOS 12.2 など) での ARKit、SceneKit、SpriteKit の更新

今回、更新はない。 Swift の場合は、Swift 5 へのアップデートに伴い構造体のイニシャライズで変更 (Modified) があるため、ARKit、SceneKit、SpriteKit でも広範囲で更新がかかっている。 更新はかかっているが機能的な変更はない。 まとめ 多分、今回更新…

がんばって USD ファイルをテキストで書いてみる

SCNScene から USDA が書きだせたので調べながら手書きで書いてみる。 今回は Apple 製品で動くものなので、実際の USD の仕様と異なるので注意。 本来は公式ページから GitHub へ行きツール群をビルドしそこから振る舞いを調べるべきなのだが、自分の環境だ…

SceneKit アプリで使用しているシーンを Pixar USD として書き出す

Model I/O framework は Metal で使用する一連をアセット操作するものがああり、ファイルを読み込んでアセットにしたり、アセットを別のファイル形式に書き出すことができる。 アセットの設定は Model I/O の MDLAsset を使用するのだが、MDLAsset では Scen…

Xcode 10 系で scnassets フォルダにファイルを追加すると CodeSign failed エラーになる件

原因不明。 現象 Automatically manage signing で Team を設定し実機にビルド。 最初は実機で動作したが、scnassets フォルダにファイルを追加すると 「Command CodeSign failed with a nonzero exit code」でビルドが止まる。 対処法 scnassets フォルダを…

ARKit (SceneKit) で Unreal Engine や Unity のようなグローパーティクルをつくる

SceneKit でグローなパーティクルのサンプルがなかったのでつくってみることにした。 つくってから気がついたが Apple 謹製のサンプルファイル Fox 2 での背景の火の粉のパーティクルがそれに当たる。 パーティクルにグローができる原理 デフォルト / HDR + …

ARKit や SceneKit で使用している simd について - クォータニオンでの関数編 その2 -

今回はクォータニオンで使用する線形補間の関数について。 基本的には球状での回転の補間となる。 用意されている関数は以下のもの。 simd_slerp simd_slerp_longest simd_spline simd_bezier ちなみに線形補間に関しては iOS でサンプルアプリがあるのでそ…

ARKit や SceneKit で使用している simd について - クォータニオンでの関数編 その1 -

今回はクォータニオンで使用する関数について。 線形補間関連の関数はまたいずれ。 演算子と関数について書くが、基本的にはプロパティと関数が対になっている。 演算子 等価演算子と四則演算が可能。 +, - に関しては値が加算、減算されるため、正規化しな…