Graphでノードのパラメータをいじるなどといったこともできるようになっています。簡単に使い方を説明します。NDIのインストールiPhoneのカメラで移している映像をUnityに送るためにNDIを使っています。インストールする必要があります。メールアドレスを登録してしばらくするとSDKのダウンロード先URLが送られてきます。iPhone用にビルド。(iPhoneX以降〜)へインストールします。USBネットワークで接続したほうが遅延が少なく動作しました。再生するiPhoneの送信側と対応するシーンをUnityEditorでも開きます。Nameにセットしてください。Editorを再生開始するとiPhoneと同じ画面が表示されると思います。ARFoundationを中身を見てみようこの開発をするために、ARFoundationの中身を詳しく知る必要があったので、紹介します。Foundationを抽象化されたAPIの一個深いレイヤーにはSubsystemというものがあります。平面を検出する機能を例に取ると、こんな感じそれぞれのプラットフォームフォームがSubsustemを持っています。対応していないplatformではSubsystemがnullを返します。Manager側が何も動作しないので、シーン中にManagerコンポーネントが配置されていても問題ありません。UnityEditorで実行するときは、Subsystemは存在しないので、エラーは返さないものの、動作しません。Editor用のSubsystemを追加して、ARFoundationとは別の経路でiPhone実機から同等のデータを送信。FoundationのハイレベルAPIに同じデータを転送。上のレイヤーから見ると、動作は何も変わっていないので同じコードで動作する気がします。Subsystemの作り方ここまでがわかったいくつかのSubsystemを自分で作ってみました。GitHubのリンクはこちらですセッション管理をしているXRSesseionSubsystemをEditorで対応する例です。strippingでコードが消されないようにしてるっぽい。各サブシステムにはProviderと呼ばれる本体のクラスがいる。}}かなりシンプルに書いていますが、このようにRuntimeInitializeOnLoadMethodアトリビュートでSubsystemを管理しているようです。RuntimeInitializeOnLoadMethodは今回始めて使いましたが、UnityEngineネームスペースにあるので、ARFoundation以外にもSubsystemを使っているライブラリがあるのかもしれません。Foundationを使うと簡単にマルチプラットフォームなARアプリを作成できます。Editorでも一部の機能を動作させることができた。Unity開発チームが来年はじめに、Editorで動くやつを公開してくれる予定。PROもいいかもしれません。NDIとOSCで、ARKit3のいくつかの機能を送信できます。有料ですが、時間節約できるので一瞬で元取れます。他の日程に面白そうなタイトルが沢山並んでいます。Pluginの使い方。DetectorDeepLabPoseNetUnityでの実装で注意すること。PoseNetなどの基本的なものを動作させるサンプルを作りました。Piなどのデバイスで動かすことを目的としています。学習はTensorFlow本体のpythonなどでモデルを作り、それを*.tfliteというファイルに書き出すことで、色々なデバイスで推論部分のみを小さなプログラムサイズで動かせるようになっています。Pluginも非常に簡単に作ることができます。先日この記事を書きました。asus4.hatenablog.comその後、GPUで動かすことによる高速化。複数プラットフォーム対応、入力と出力の型が見えないなどの足りない機能を追加して、使えそうな感じになってきました。PRを送ってやり取り頑張っています。Pluginの使い方。MNISTと呼ばれる0から9の手書き数字識別するプログラムの使い方をサンプルコードで説明します。簡略化しているので実際に動作するコードはGitHubを見てください。}とてもシンプルにできています。サンプルでもコードの多くは、画像をinputsに変換する部分だったりします。次のコードの用に、コンストラクタのオプションで、マルチスレッドや、GPUを使った高速化などを設定できます。}Android/iOSで書かれた公式のExamplesのいくつかをUnityへ移植したので、それぞれのサンプルの説明をしていきます。World的存在MNISTです。9までのどれが書かれたの確率を教えてくれます。ネットワーク図ネットワーク図を見るとぎょっとしますが、レイヤーの機能は理解ぜずとも、inputs/outputsの部分に注目すれば大丈夫です。28x28のグレースケール画像です。1.0へ正規化します。Detector画像上の物体の名前と矩形範囲を推定する。サンプルに使ったモデルでは90種類の物体を認識します。300x300のRGB画像です。認識されたオブジェクト上位10種の情報を返します。それぞれの確率が入っています。全体で認識した物体の数DeepLabSSDと似て、画像の中の物体を推定しますが、矩形ではなく、ピクセル単位で推定します。257x257のRGB画像です。正規化しています出力すべてのピクセルを21種類のラベルに分類します。257x257のピクセル全てにどのラベルの可能性が高いかのスコアがはいっていますPoseNet画面上の人間の骨格を、2D座標で取得するプログラムです。直列のとてもシンプルなネットワーク図に見えます。その分ポストプロセスでやることがあります。257x257のRGB画像です。9x9のブロックに分割したエリアそれぞれに17個のパーツIDの可能性が入っています。使うモデルによってブロックの分割数、精度が変わります。出力したデータの整形が一番面倒なモデルです。このブログが一番わかりやすかったです。9に分割したブロックそれぞれに、体のパーツ17種の確率が入っている。確率が高いパーツにオフセット値を足して、正しいXY座標を得る17x17分割のモデルを使うことで精度を上げることが可能。Unityでの実装で注意すること。Liteの公式サンプルでは、Android/iOSネイティブは全く別の実装をしています。Editorを同じプログラムで作れるので便利です。今回使ったのは決して最新ではなく、ある程度こなれたモデルですが、Unityで使えるようになることで、ゲーム組み合わせたりするとまた可能性が広がりそうだと思いました。Texture2DのピクセルをC#上で直接触っているところなどがあり、まだ高速化できる余地があるので、もう少し触っていきます。実案件へは未投入ですが、仕事で使いたいって相談もお待ちしています。その2Tweet広告を非表示にするコメントを書くもっと読む2019-11-27NativeArray<T>を高速にシリアライズ/デシリアライズunity高速化TIPSです。以前、ARKitの顔の頂点のデータをUnityEditorに送るプログラムを書きました。この様なことができます。UnityEditorには毎フレーム以下のデータを送っています。uvs;頂点の数が多くシリアライズ、デシリアライズがパフォーマンスのネックになっていました。直接ポインタをゴニョゴニョすると行けるのではないかと調べているとNativeSliceにSliceConvertという型を変換できるメソッドがあることに気づきました。これを使うと以下の様なことができます。gist.github.com使い方です。LiteをUnityで動かしてみました。Unity上で学習するのはML-Agentで十分で。Windows)で動作可能なUnityのプラグインが必要でした。Liteはコア部分はシンプルなC言語のAPIで用途にあっていそうです。Pluginが隠されています。iOSで動作確認をしてみました。以下、MNISTとSSDの動作サンプルです。2019Barracudaとは別のMNISTモデルをつかったので、純粋な比較ではないのですが、Barracudaよりも高速でした。GitHubのリポジトリはこちら。プラグインは非常にシンプルで。*.tfliteモデルのInputs/Outputsの型を確認するAPIがないのですが、NetronというElectron製アプリでいろいろなモデルを読み込み確認できて便利でした。計算することができます。macOSでもMetalで行けるはずなのですが、ソースコード中にUIKitに依存する場所があり、ちょっと手直し中です。できたらお知らせします。Pluginはt-takasakaさんが作っていました。Delegate動かすことに成功しました。Learningについてリサーチしています。Unity上でMLというとUnity社が開発しているML-Agentsが最初に出てくると思います。Tensorflowとの連携ができ強化学習などのサンプルが多く見れます。Toolkitそのml-agentsの子プロジェクトとして最近Barracudaというものをハッケンしました。(*.pb)やONNXのモデルをBarracudaで読み込んで、Unityで動かしているようです。CPUもサポートしていますが、GPUは全部ComputeShaderで頑張っている模様。実際にMNISTを動作させるサンプルを作ってみました。パフォーマンスがでず...。ソースコード乗っけます。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。