Apple Engine

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

開発

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

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

USDZ を手軽に作成できる Reality Converter Beta がリリース

obj、glTF、USD ファイルをドラッグ&ドロップで USDZ へ変換できる Reality Converter の Beta 版がリリースされた。 開発者アカウントが必要になるが以下の URL からダウンロード可能。 https://developer.apple.com/news/?id=01132020adeveloper.apple.com…

Swift 5.1 で追加された SIMD の機能

忘れていたのでまとめてみる。 Swift でビルトイン実装されている SMID の機能と Swift Standard Library で SMID を引数として持つ関数が追加された。 SIMD Vector Types Swift Standard Library Functions Swift-Evolution - SIMD Additions (元ネタ) 追加…

iOS 13 で Custom Fonts の API を使ってみる

今までの iOS では自前のフォント(カスタムフォント)の使用はアプリ内に制限されていたが、iOS 13 からは OS 機能として、自前のフォントのインストールと使用ができるようになり、 他のアプリでも自前のフォントが使用できるようになった。 フォントのイ…

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 のプロパティ…

Xcode 11 の Scene Editor から USDZ ファイルを作成する

Beta 版から記事を起こしているため今後変更される可能性あり。 WWDC 19 のセッションで行なっていたように、Xcode 11 の SceneKit のシーンファイル (.scn) などを閲覧、編集を行う Scene Editor から USDZ ファイルを書き出すことができるようになった。 …

ARKit 3 の変更点 (Xcode 11 beta 4)

変更は大まかに 4 つだが、 ARView は RealityKit の機能なので割愛して 3 つ。 ARCamera ARCamera.TrackingState.Reason 以下のプロパティ、メソッド、演算子が追加。 var hashValue: Int func hash(into: inout Hasher) static func == (ARCamera.Tracking…

iOS 13 からの UI / UX

追記: SwiftUI での UISplitViewController の様な表示方法Multiple Windows 対応アプリでの閉じたウインドウ(アプリ)の復元 iOS 13 からシステムがかなり変更されるため、UI / UX について考えてみる。 大まかな変更が行われるのは以下のものだが、 現状、2…

ARKit 3 の変更点 (Xcode 11 beta 3)

ARSession stopTrackedRaycasts ドキュメント説明がないため詳細不明。 レイキャストを止めたか調べるものだと思われる。 static var stopTrackedRaycasts: ARSession.RunOptions { get } ARSession.CollaborationData ドキュメント説明がないため詳細不明。…

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>…

GameplayKit の変更点 (Xcode 11 beta 3)

変更されたクラスは2つ。 simd framework から Swift Standard Liblary の SIMD Vector Types に変更された。 GKPolygonObstacle float2 から SIMD2 に変更された。 convenience init(points: [SIMD2<Float>]) convenience init(points: [float2]) GKPath init(poin</float>…

ARKit 3 の更新内容(Xcode 11 Beta 2)

Beta 2 では AR の機能変更はない。 変更 / 追加 RealityKit の ARView なので厳密には ARKit ではないのだが、 ARView の Scene で Combine の Publisher 関連の関数が増えた。 Combine の Publisher で追加されたものがこちらでも適応されている。 publish…

SceneKit の変更点 (Xcode 11 Beta 2)

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

ARKit 3 で追加された ARCoachingOverlayView

iOS 13 から ARKit に ARCoachingOverlayView が実装された。 ARCoachingOverlayView は AR でのセッション初期化中やリミテッドトラッキング状況で、ユーザーに視覚的な指示を表示する UI を提供する。 これまでは自力で実装していたものだが、iOS 13 では…

アプリ開発から見る ARKit 3 の新機能

WWDC 2019 で ARKit 3 が発表された。 ARKit 3 に関する他の記事は Keynote と SwiftStrike を体験した範囲で書かれているものが多いため、アプリ開発側からどのような機能が増えたか公式ドキュメントとセッション動画から調べて書いてみた。 ARKit 3 で端末…

ARKit 3 の更新内容(Xcode 11 Beta 1)

ARKit 3 の API の更新内容を調べてみた。 API の翻訳であるため新機能の詳しい説明はない。 新機能の概要に関しては別記事を参照。 ARView について 今回は書く量が多いので、ARView に関しては RealityKit の API を調べる際に書くかもしれないので割愛。 …

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 の場合、現実空間と仮想のジオメトリを合成するため、平面認識後アンカーノードとしてジオメトリを…

Swift 5 で導入された SIMD Vector Types

単体の simd や Accelerate フレームワークの simd ライブラリなどの一部が Swift 5 で使用できる様になった。 ちなみにクォータニオンはなく、関数も一部しかないので、 あくまでもデータを保存する型の様なものだと思ってもらえれば良い。 SIMD とは 以前…

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 が働かず、 ドローコールが画像のピクセル分…