夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

MixedRealityModelingToolsのβ版をリリースしました。

本日はMRMT枠です。

前々から開発を進めていたMixedRealityModelingToolsのβ版をリリースしましたので紹介をします。

〇リリースページ

github.com

なお本日時点でデモを想定しているバージョンであり、バグが多々含まれている可能性があります。

またUI等も不完全であり今後新機能開発に合わせて改善予定です。

〇動画

こちらはHoloLensアプリに組み込んだ例になります。

youtu.be

〇概要 MixedRealityModelingToolsとは?

MixedRealitlingTools(MRMT)とは冒頭の説明通り筆者が開発しているMixedRealityソリューション内での3DCGに関しての送受信を行うパッケージです。

BlenderのパッケージをコアとしてBlenderとMixedRealityアプリケーションを連携させることを目的としています。

msgpack.org

BlenderPythonコードとして開発を行っており、特徴としてMessagePackを使用してバイナリデータの作成、デシリアライズを行っています。

MessagePackは幅広い言語に対応しているため、フォーマットとして採用することでソフトウェアによる依存関係を減らし、マルチプラットフォーム、マルチデバイスでの動作を実現します。

現時点でβ版としてまだ整備ができていないものではありますが、コアな実装部をOSSとしてリリースし、他の開発者は自由に使い、開発者である筆者自身は開発者ではない方々に向けMRMTを組み込んだアプリケーションのリリースを計画しています。

〇目的

MRMTの目的は『3D情報を2Dではなく3Dとして扱うことを実現する』ことにあります。

Blenderではモデリングツールとして3Dモデルの作成ができますが、あくまでPCという2Dの画面を通して3Dのデータを扱っています。

MRMTはお手軽にはiPhoneのARアプリ、ハイエンドにはHoloLensやMagicLeapなどのヘッドセット型デバイスを使用しBlenderとMixedRealityアプリケーションを連携させ、3Dデータを現実空間やVR空間などの空間上で扱うことを目的としています。

 Blenderから他のソフトウェアに通信をするという点だけでいえばMixedRealityなソリューションにかかわらず使用することができますが、あえてMixedRealityにこだわって名付けました。(+筆者が大好きなMixedRealityToolkitやMixedReelityGraphicsToolsに並ぶものを作りたいという思いもあります。)

 

〇対応(予定)プラットフォーム

Blender 3.4(コア)

・Unity 2021以降

・UE5

・Babylon.js

・StereoKit

※Unity以外は今後の予定

対応デバイスプラットフォーム

iOS

・HoloLens

Android

・PC

〇できること

本日時点でできることをまとめると次のようになります。

BlenderからUnityに対してメッシュ、テクスチャ、マテリアル情報を送信し、Unity側でオブジェクトとして構築する

・UnityからBlenderに対してカメラ位置の情報を送信してBlender側でカメラ位置をビューとして反映させる。

前述のとおり、Blender-Unity(今後は別のプラットフォームも)間でのデータ送受信を目的としており、開発を行っています。

〇なぜBlender?

DCCツールは例えばMaya、AutoCAD、Cinema4Dなど多々あります。

その中でBlenderは無料で使用することができ、Pythonを使用して自由に拡張機能を開発することができます。 そのうえモデリングツールとしても優秀で近年では業務アプリとして使用される例も増えています。

初心者から上級者まで使用することができるツールという点に加え筆者自身が愛用しているためBlenderをコアに開発することにしました。

〇使い方

①ファイルエクスプローラーからUnityのPackage.フォルダ内のManifest.jsonを開きます。

②次のようにMRMTのパッケージを追加します。

{ "dependencies": { ---追加--- "com.holomoto.blender_mr_view": "https://github.com/HoloMoto/BlenderMRViewForHoloLens.git?path=BlenderMRView/com.holomoto.blender_mr_view", ----------- "com.microsoft.mixedreality.openxr": "file:MixedReality/com.microsoft.mixedreality.openxr-1.8.1.tgz", "com.microsoft.mixedreality.toolkit.examples": "file:MixedReality/com.microsoft.mixedreality.toolkit.examples-2.8.3.tgz",  ・・・ "com.unity.modules.xr": "1.0.0" } }

③Unityを起動します。 シーンに適当なオブジェクトを作成しTCPCliantコンポーネントをアタッチします。

また必要に応じてBlender側と任意のタイミングで接続するConnectionStarterコンポーネント、Unityのカメラ情報をBlenderに送信するUnitySendDataコンポーネントをアタッチします。

Blender側はScriptingウィンドウでmixedrealitymodelingtoolsv0.9.pyを開きスクリプトを実行します。なおBlender3.4以外のバージョンではエラーが出る可能性があります。また、BlenderにMessagePackを導入している必要があります。

Blenderスクリプト実行後、UnityでTCPClientもしくはConnectionStarterで関数を呼び、Blenderと接続します。

この状態で送信したいオブジェクトを選択するとオブジェクトプロパティタブにMixedRealityModelingToolsのタブが現れます。

SendMeshを押すとUnity側にメッシュデータが送信できます。

〇なぜ?

 現状送信データの容量などの確認のために毎フレームの自動送信機能などはありません。 今後の開発で実装されます。

〇今後の計画

〇全般

・Unity側からBlenderのUI操作や表示切替

モデリング機能

・バグ UIの改善

・Unity以外のプラットフォームに向けての開発

iOSアプリケーションのリリース

〇メッシュ

・UV情報の送信

・サブメッシュの送信とマルチマテリアル対応

・データの自動送信

・Unity側からのメッシュデータの送信機能

〇マテリアル

・スムースやメタルなどの情報の送信