ARとVRが主流になりつつあり、すべての主要なハイテク企業がそれらを追求しています。AppleにはARKitがあり、GoogleにはARCoreがあり、Microsoftには独自のHoloLensがあります(もちろん、Unityもあります)。そして、多くの注目を集めているいくつかのアプリケーションで、 拡張現実アプリの開発 モバイル開発者にとって非常に望ましいスキルになりつつあります。
この記事では、回転する立方体だけでなく、シンプルでありながら意味のある小さなアプリを紹介します。とにかく回転する立方体が必要なのは誰ですか?マトリックスを作りましょう。
ARKit iOSデバイス用のARアプリを作成するためのAppleフレームワークです。いくつかのレンダラーを使用できます。 SpriteKit 2Dオブジェクトの場合、 SceneKit 3Dの場合、および 金属 カスタムレンダラーを実装する場合。
いくつの異なる出会い系サイトがあります
このデモでは、SceneKitを使用して、完全にレンダリングされた3Dオブジェクト(ナイフ)をレンダリングして配置します。
ARKit v2から、5種類の構成がARKitでサポートされます。
AROrientationTrackingConfiguration –デバイスの向きのみを追跡する場合(たとえば、星座アプリケーションの場合)。この構成では、サイドステッピングなどの物理的な動きは追跡されず、シーン上のオブジェクトの位置や方向に影響を与えません。
ARWorldTrackingConfiguration –これは、ほとんどの人が拡張現実と見なすものをサポートするため、おそらくARで最も頻繁に使用される構成です。例としては、仮想ペットやポケモンの狩猟アプリケーションがあります。
ARFaceTrackingConfiguration –この構成は、TrueDepthカメラ(Face IDなど)を必要とするため、現在iPhoneXでのみサポートされています。この構成は、顔の特徴とニュートラルな表情からの相対的なオフセットを追跡します(たとえば、ユーザーが注文する前にファッションサングラスを試すことができるアプリケーション)。
ARImageTrackingConfiguration –マーカーのセットがあり、動物がマーカーから飛び出すのを見せたい場合は、この構成が適しています。これらはカードのようなマーカーである必要はありませんが、2D画像である必要があります。カメラをモナリザに向けると、彼女は頭を向けて何かを話します。欠点は、画像マーカーの物理的なサイズを事前に言わなければならないことです。
ARObjectScanningConfiguration –この構成は、ARImageTrackingConfigurationの3Dバージョンです。
再帰コンポーネントをデコレータと反応させる
このデモでは、シーンにナイフと弾丸を追加します。6自由度が必要なので、適切なツールはARWorldTrackingConfigurationです。
マトリックスを見た人なら誰でも、ネオ(キアヌ・リーブス)が弾丸をかわして空中で止めたことを思い出すことができます。私たちのアプリケーションは、ライブカメラフィードからこのシーンを再現するのに役立ちます。したがって、Neoのような力を示すカスタムビデオを作成できます。
私たちのアプリには、弾丸とナイフの3Dモデルが含まれます。映画に必要な弾丸やナイフの数はユーザー次第です。時間をかけて他のモデルを追加したい場合は、アプリコードがオープンソースであり、GitHubで入手できます( https://github.com/altaibayar/toptal_ar_video_maker )。これは完全なARチュートリアルではありませんが、iOSでARアプリの開発に取り掛かろうとしている場合は、デモとソースが貴重なリソースになるはずです。
使用目的のシナリオは次のとおりです。
前述のように、シーンの360度すべてを記録しながら自由に移動できるようにし、弾丸とナイフでカメラの動きを適切に追跡できるようにします。
デモンストレーションの目的で、仮想オブジェクトにはナイフとショットガンの弾丸の2種類しかありません。
ナイフは詳細なオブジェクトであり、からの無料モデルを使用します https://poly.google.com/view/3TnnfzKfHrq (Andrewに感謝します)。
ただし、ショットガンの弾丸は単純な球形のオブジェクトであり、簡単にコード化できます。さまざまな種類の金属製で真っ赤なものにします。ショットガンをエミュレートしているので、グループ化されたクラスターとしても生成します。あまり面倒なことなくクラスタリングを意味のあるものにするために、GamplayKitのガウス乱数ジェネレーターを使用できます。
GameplayKitは、ランダムノイズの生成、ステートマシン、AI、または確率ベースの意思決定が必要な場合に便利な便利なツールです。
override init() { super.init(); // generate 50 gaussian distributed position around [0, 0, 0] let positions = Randomness.gaussian(center: SCNVector3Zero, count: 50); for pos in positions { let node = SCNNode(geometry: sphereGeometry()); node.position = pos; self.addChildNode(node); } } private func sphereGeometry() -> SCNGeometry { // radius of one projectile sphere is 5mm/0.2inch let sphere = SCNSphere(radius: 0.005); // sphere is reddish sphere.firstMaterial?.diffuse.contents = UIColor.red; // reflection on light is gray/silver sphere.firstMaterial?.reflective.contents = UIColor.gray; // metalness is 0.3 sphere.firstMaterial?.metalness.contents = 0.3; // shading should be realistic sphere.firstMaterial?.lightingModel = .physicallyBased; return sphere; }
同様のランダムオフセットロジックをナイフに使用できますが、それらはクラスターとして動作しないため、単純なランダム分布を使用できます。
どのアーキテクチャパラダイムが最適であるかについての議論を掘り下げることは、このデモの範囲を超えています。そのトピックを掘り下げた記事はたくさんあります。
誰かのクレジットカード情報を取得する方法
代わりに、リンクされたGitHubプロジェクトを回避するためのガイドとして、プロジェクトの構造をレイアウトします。主要なコンポーネントとは何か、それらがどのように接続されているか、なぜそれらが選択されたのかです。
アプリケーションには3つの画面しかありません。
PermissionViewController –必要なモバイル機能へのアクセスをアプリケーションに許可するようにユーザーに求める画面。
ExportViewController –この画面には、録画されたビデオが表示され、ビデオを共有または保存するためのオプションが提供されます。
MainViewController –すべての魔法はここで起こります。
私の経験から、ARSession、ARConfiguration、およびすべての一意のタイプのSCNNodeなどの必要なすべてのARKitクラスをラップするのが最善です。そうすれば、コードは自明です。
ARSessionはApeeScapeARSessionに継承され、新しいセッションクラスには3つのメソッドしかありません。必要なものすべてをセットアップするクラスコンストラクターと、resetTrackingメソッドとpauseTrackingメソッドです。
アプリケーションは、4つの固有のタイプのSCNNodeを認識します。
BulletsNode –このノードは、ショットガンシェルのセットを表します。ランダムガウスノイズ、色、および物理照明モードが自動的に設定されます。
KnifeNodeまたはBulletsNodeを使用するクラスでは、特別な作業や追加の作業は必要ありません。これらは、アプリケーションをカスタマイズしてより多くの種類の3Dオブジェクトを追加するためのテンプレートとして使用できます。
ナイフモデル: https://poly.google.com/view/3TnnfzKfHrq
SCNSceneからの記録: https://github.com/svtek/SceneKitVideoRecorder
旅行するコンピュータサイエンスの仕事
ボタンアイコン、ARKitデモアプリケーション: https://developer.apple.com/documentation/arkit/handling_3d_interaction_and_ui_controls_in_augmented_reality
ARKitは、iOSデバイス用の拡張現実アプリを作成するためのAppleフレームワークです。
SceneKitは、Apple環境で3Dグラフィックスを開発するためのフレームワークです。これは、レンダラーなどの低レベルAPIへの抽象的なインターフェースとして機能します。