littlewing

人間とコンピューターとメディアの接点をデザインするために考えたこと

Unity Bolt Tips1.FlowGraph編集画面の使い方

UnityのBoltを触っていて、日本語の情報も少なく、編集画面の項目の意味がマニュアルにもちゃんと書かれてないので調べたメモ。

Bolt Tipsとして連続記事 になっています。


ショートカット

ショートカットもうちょっと充実してくれるといいのですが、ここに一通り載っています。 Windows and Shortcuts | Bolt Visual Scripting | 1.4.12

だいたいは一般的なショートカットなのですが、覚えておくと便利なのが

  • Ctrl +D で複製(これはUnityのお作法)
  • Shift + Space で全画面表示On/Off (これもUnityのお作法)
  • SuperUnit 上で Ctrl 押しながらダブルクリックで別WindowでFlowを開く
  • Ctrl + ドラッグで複数のノードを選択すると、グループ化してコメントをつけることができます。

f:id:pigshape:20200904112551g:plain
Ctrl + ドラッグでグループ化


Unit 同士をつないだ線を消す

また、一度接続した Unit は、実行ピンを右クリックする事で 線を消すことができます。

複数から接続されている場合は、接続先を右クリックすることで、まとめてflowを消すことができます。

f:id:pigshape:20200911174038g:plain
右クリックで線を消す


ヘッダメニュー

f:id:pigshape:20200904103313p:plain
上部メニュー

f:id:pigshape:20200904103818p:plain Lock

  • チェックすると、表示するFlowGraphを固定できます。
  • Projects で他のFlowAssetを選択しても、ロックしたFlowを表示し続けます。
  • デバッグ時に特定のFlowを表示し続けたい時などに便利

Zoom

  • 表示比率を拡大、縮小します。
  • マウスホイールでも拡大、縮小可能

Relations

  • ノード内のフローの流れを可視化します。 (下はチェックを入れた状態) f:id:pigshape:20200904110627p:plain

Values

  • チェックを入れるとEditor上でPlay実行時に実際に流れている値を可視化できます。 f:id:pigshape:20200904110140p:plain

Dim

  • チェックをいれると、他のノードとつながっていないなど無効なノードを薄暗く表示します
    f:id:pigshape:20200904113423g:plain

  • Unity Editor のPreferenceにも関連する項目があります。 f:id:pigshape:20200904113731p:plain

Carry

  • チェックを入れると、あるノードの場所を移動した際に、つながっているノードも一緒に移動します。

Align

  • 複数のノードを選択して、整列させます (左寄せとか)   f:id:pigshape:20200904105352p:plain

Distribute

  • 複数のノードを選択して、ノード間の間隔をそろえます    f:id:pigshape:20200904105651p:plain

Overview

  • Flow全体が表示されるようにパンとZoomを自動調整します

FullScreen

  • タブをフルスクリーン表示します

Unreal EngineのBPに比べるとまだまだ、機能が貧弱で、大規模コード作成は大変そう。 けど、UnrealModeもあるので、UE経験者は直観的には動かせるかも。ストレスは発生しそうですが。

また、いろいろ触ってみます。

続き

littlewing.hatenablog.com

MagicLeap の「Social」(オンラインミーティングアプリ)の使い方

MagicLeapOneにはオンラインミーティングができる「Social」というアプリがあります。 これを使うと、友達同士で、空間を生かしたオンラインミーティングができます。

使えるようにするために必要な内容をまとめてみました。 www.magicleap.com

事前準備

  1. OSを最新版にする(私は0.98.10で試しました)一応0.93.0から対応しているらしいですが、念のため、最新にしといた方が良いかも。
  2. Wifi等でインターネットに接続する
  3. 連携させるGoogleアカウントを準備しておく(必須ではありません)
  4. 広い場所。(オクルージョンがかかるので、広い場所がおすすめ 最低2x2m できれば3x3mくらいの床に何もない場所が欲しいかも)

「Social」の起動~初期設定(30分くらいはかかるかも)

  1. Home 画面から、Socialを起動します。こんな感じのアイコンです。

    f:id:pigshape:20200406113138p:plain
    Social

  2. 空間にアプリを配置します。

    f:id:pigshape:20200406113800p:plain
    Place

  3. 利用規約等に同意します。

  4. SocialのHome画面。右上の名前などの部分から、自分のNickName(ユーザID)やアバターの見た目を変更できます。

    f:id:pigshape:20200406113949p:plain
    Social Home
    アバターの見た目は結構細かく変更できますが、時間がかかるのでほどほどに。 ランダムにアバターの見た目を切り替えることもできます。

  5. 自分のNickNameは最初はランダムな文字列が設定されていますが、人から探しにくいので、わかりやすい名前に変えておくと良いです。

    f:id:pigshape:20200406114148p:plain
    Input Nickname

  6. Find Friends メニューから友達を探します。

    • 設定したNickNameやメールアドレスから検索できます。
      f:id:pigshape:20200406114430p:plain
      Find Friends
  7. Googleアカウントの連携(必須では無い)

    • Manage AccountからGoogleアカウントのContactと連携が可能です。
    • Googleアカウント連携の際、「許可」ボタンが1画面に表示されず、スクロールが必要です。コントローラのタッチバッドの下端にタッチするとブラウザ画面を下にスクロールすることができます。(これが最初わからなくて苦労しました。。)

「Social」を使ったミーティングの開始

Start a meetingからミーティングを開始することができます。

ミーティング開始の方法は2種類あって

  1. 4桁のミーティングキーを発行して、参加者に通知する。
  2. 友達リストから選択して、ミーティングに招待する

という方法が使えます。

Meetingが開始される際に、部屋の中心になる位置を指定します。この位置を中心にメンバーが集まる感じです。

f:id:pigshape:20200406121027p:plain
position setting

書き足したり、修正していく可能性があります。

ミーティング中にLandscapeのアプリを呼び出すと、コンテンツの共有ができます。

  • Gallaryアプリの 2D画像や3Dモデル
  • Helioブラウザのコンテンツ

が一応共有できました。(不安定ですが)

声も3Dサウンドで位置を特定できるので、実在感があります。

HoloLens2向けのカメラマウントの3Dプリントデータを作りました。

HoloLens2のセンサー上部(おでこ付近)にいろいろ載せれるアダプタを3Dプリントデータとして作成しました。

f:id:pigshape:20200202193840j:plain
HoloLens2

3つのパーツに分解可能。 真ん中のプレートは今後用途によって、いろいろカスタマイズ予定。 折りたたむことも可能です。 押し込むと、ツメでカチッと入るので、着脱も簡単。

f:id:pigshape:20200202193931j:plain

RealSenseを載せた状態 f:id:pigshape:20200202193956j:plain


3DプリントデータはThingverseでCreativeCommonsで無償公開しています。

www.thingiverse.com

MagicLeap用にUnity Native Pluginをビルドする(libjpeg-turbo)

Unity で作成したMagicLeapアプリでturbojpegライブラリを利用したくて、試行錯誤したのでメモ。

概要

背景

  • MagicLeapでNativePluginを利用するにはAArch64(ARM 64bit)でビルドした共有ライブラリ(.so)が必要となります。
  • Third-Partyライブラリにおいてビルド済みバイナリが配流されていることはほぼないので、自分でビルドする必要があります。
  • Android用として配布されているバイナリがそのまま使えることもあるが、ダメな場合もある(その辺よくわからない)

環境の説明

  1. Windows 10
  2. Unity 2019.1.14f
  3. MagicLeap SDK 0.21
  4. CMake 3.15.3
  5. make-3.81
  6. nasm-2.14.02 ※これはlibjpeg-turboが必要とするものなので、通常はいらないかも。
  7. libjpeg-turbo (実施時点では2.0.3 masterブランチ)
  8. WSLのUbuntu 18.4 LTS ※最後に確認に使ってるけど無くても良い

ビルド手順

  • 環境は以下を想定.
名前 実際のパス(例)
{MLSDK_DIR} C:\User\hoge\MagicLeap\mlsdk\0.21.0\
{libjpeg-turbo_DIR} C:\GitHub\libjpeg-turbo\
  • MINGW64 とコマンドを使い分けてるのでパス表記は適宜読み替えてください。

1. 「環境の説明」の内容を諸々インストールして準備する

  • CMake とMakeはパスを環境変数に登録しておくと便利

2. magicleap.toolchain.cmake を作成する。

$ cd  {MLSDK_DIR}

$ ./mabu -t lumin --create-cmake-toolchain magicleap.toolchain.cmake

mabu: Generated a cmake toolchain file to magicleap.toolchain.cmake.
This toolchain is entirely independent of mabu, but, depends on the current SDK location;
override the MLSDK cmake variable as needed.
mabu: Example usage:
        del CMakeCache.txt
        cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=magicleap.toolchain.cmake [-DMLSDK=...] ...

3. CMakeの実行

  • クローンしたリポジトリ配下に Build (任意の名前)フォルダを作成して、その中でCMakeを実行
#Buildフォルダを作成/移動
$ cd  {libjpeg-turbo_DIR}
$ mkdir Build
$ cd Build

#Cmake実行
$ cmake -G"Unix Makefiles"   \
-DCMAKE_TOOLCHAIN_FILE="{MLSDK_DIR}magicleap.toolchain.cmake"\
 "{libjpeg-turbo_DIR}"

4. CMakeCache.txt の調整

  • これは通常必要ないかもですが、CMakeが生成した、CMakeCache.txtを一部編集しました。(必要ないと思います)
//Build static libraries
ENABLE_STATIC:BOOL=OFF  //静的ライブラリの生成をOFFに

//Generate a fatal error if SIMD extensions are not available for
// this platform (default is to fall back to a non-SIMD build)
REQUIRE_SIMD:BOOL=OFF //SIMD extensionsをOFFに

5. Makeの実行

BuildフォルダにてMakeを実行する

C:\GitHub\libjpeg-turbo\builds\ARM64-lumin>make
-- CMAKE_BUILD_TYPE = Release
-- VERSION = 2.0.3, BUILD = 20191016
-- 64-bit build (arm64)
-- CMAKE_INSTALL_PREFIX = /opt/libjpeg-turbo
-- CMAKE_INSTALL_BINDIR = bin (/opt/libjpeg-turbo/bin)
-- CMAKE_INSTALL_DATAROOTDIR =  (/opt/libjpeg-turbo)
-- CMAKE_INSTALL_DOCDIR = doc (/opt/libjpeg-turbo/doc)
-- CMAKE_INSTALL_INCLUDEDIR = include (/opt/libjpeg-turbo/include)
-- CMAKE_INSTALL_LIBDIR = lib64 (/opt/libjpeg-turbo/lib64)
-- CMAKE_INSTALL_MANDIR = man (/opt/libjpeg-turbo/man)
-- Shared libraries enabled (ENABLE_SHARED = 1)
-- Static libraries disabled (ENABLE_STATIC = 0)
-- 12-bit JPEG support disabled (WITH_12BIT = 0)
-- Arithmetic decoding support enabled (WITH_ARITH_DEC = 1)
-- Arithmetic encoding support enabled (WITH_ARITH_ENC = 1)
-- TurboJPEG API library enabled (WITH_TURBOJPEG = 1)
-- TurboJPEG Java wrapper disabled (WITH_JAVA = 0)
-- In-memory source/destination managers enabled (WITH_MEM_SRCDST = 1)
-- Emulating libjpeg API/ABI v6.2 (WITH_JPEG7 = 0, WITH_JPEG8 = 0)
-- libjpeg API shared library version = 62.3.0
-- Compiler flags =  -O3 -DNDEBUG
-- Linker flags = -Wl,--start-group -Bdynamic -lc -lm -lc++_shared -landroid_support -Wl,--end-group --sysroot=C:/Users/hayas/MagicLeap/mlsdk/v0.21.0/lumin -pie -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--build-id -LC:/Users/hayas/MagicLeap/mlsdk/v0.21.0/lumin/stl/libc++/lib
-- Compiler supports pointers to undefined structures.
-- INLINE = __inline__ __attribute__((always_inline)) (FORCE_INLINE = 1)
-- Linker supports GNU-style version scripts
-- CMAKE_EXECUTABLE_SUFFIX =
-- CMAKE_ASM_FLAGS =   -O3 -DNDEBUG
-- GAS is working properly
-- SIMD extensions: arm64 (WITH_SIMD = 1)
-- FLOATTEST = 64bit
-- RPM architecture = aarch64, DEB architecture = arm64
-- Configuring done
-- Generating done
-- Build files have been written to: C:/GitHub/libjpeg-turbo/builds/ARM64-lumin
Scanning dependencies of target simd

6. 生成されたライブラリをUnityにコピー

Buildフォルダに libturbojpeg.soが生成されていると思います。 これをUnityのPlugins フォルダにコピーしてLumin向けの設定にします。 f:id:pigshape:20191016125016p:plain

尚、Androidもそうですが、C#呼び出す時、ライブラリの名称からlibは省略するので注意。 あと、この辺のC#からの呼び出し方法の記載は省略します。

    [DllImport("turbojpeg")]   //libturbojpegじゃないので注意!!
    public static extern IntPtr tjInitDecompress();

何度かライブラリを生成して入れ替えてmpkをビルドしていたら、mpk内の.soファイルが入れ替わってないときがあった。 同じmpkファイルに対して、ビルドする場合は注意。消した方が良いかも

7.プラットフォームの確認

  • ちゃんと、目的としたプラットフォーム向けに、ライブラリが作成されているかは readelf コマンドで確認できます。Windowsで使えるのか知らないですが WSLでインストールしたUbuntu18.4で実行できます。

特に、Class ,OS/ABI, Machine: がどうなっているか確認してください。

  • 以下のようになっていればOK。Machineが x86 とかだとダメです。
littlewing@:ARM64-lumin$ readelf -h libturbojpeg.so
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           AArch64
  Version:                           0x1
  Entry point address:               0x2c30
  Start of program headers:          64 (bytes into file)
  Start of section headers:          368824 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         5
  Size of section headers:           64 (bytes)
  Number of section headers:         25
  Section header string table index: 22
  • ちなみに、32bit-ARMのAndroid版だと、以下のようになります。
littlewing@:armeabi-v7a$ readelf -h libjpegturbo.so
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          176736 (bytes into file)
  Flags:                             0x5000200, Version5 EABI, soft-float ABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         9
  Size of section headers:           40 (bytes)
  Number of section headers:         27
  Section header string table index: 26

所感

  • 最初Ubuntu上にAndroidNDKとか入れて、Android64bit版を作成してそれを使ってやろうとしたけど、だめで、 結局あきらめて、Windows上でやったらうまくいきました。
  • こうやって書くと、簡単そうだけど、ここまでが大変だった。。
  • こういうことするなら、Macのが楽だな。※MagicLeapSDKはWin/Mac用しかなくてLinux/Ubuntu用が無い

[おまけ] magicleap.toolchain.cmakeの中身はこんな感じだった。

  • magicleap.toolchain.cmake
set(LUMIN TRUE)

set(MLSDK "C:/Users/hoge/MagicLeap/mlsdk/v0.21.0" CACHE PATH "Path to Lumin SDK")

# canonicalize
string(REPLACE "\\" "/" LUMIN_SDK "${MLSDK}")

set(LUMIN_SDK_SYSROOT "${LUMIN_SDK}/lumin/")

set(CMAKE_SYSTEM_NAME    Linux)
set(CMAKE_SYSTEM_VERSION 1)

SET(TOOL_OS_SUFFIX "")
IF(CMAKE_HOST_WIN32)
  SET(TOOL_OS_SUFFIX ".cmd")
ENDIF()

set(CMAKE_SYSTEM_PROCESSOR "aarch64")
set(CMAKE_SYSROOT          "${LUMIN_SDK_SYSROOT}")

set(CMAKE_MAKE_PROGRAM     "${LUMIN_SDK}/tools/mabu/tools/mingw/msys/1.0/bin/make" CACHE PATH "make executable" FORCE)
set(CMAKE_C_COMPILER       "${LUMIN_SDK}/tools/toolchains/bin/aarch64-linux-android-clang${TOOL_OS_SUFFIX}"  CACHE PATH "C compiler" FORCE)
set(CMAKE_CXX_COMPILER     "${LUMIN_SDK}/tools/toolchains/bin/aarch64-linux-android-clang++${TOOL_OS_SUFFIX}" CACHE PATH "C++ compiler" FORCE)
set(CMAKE_AR               "${LUMIN_SDK}/tools/toolchains/bin/aarch64-linux-android-gcc-ar.exe" CACHE PATH "C/C++ archiver" FORCE)

# Configure the behaviour of the find commands
set(CMAKE_PROGRAM_PATH "${LUMIN_SDK}/tools/toolchains/bin")
set(CMAKE_FIND_ROOT_PATH "${LUMIN_SDK}/lumin/")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

set(CMAKE_CXX_FLAGS "--sysroot=${LUMIN_SDK}/lumin -march=armv8-a -mcpu=cortex-a57+crypto -fPIE -nostdinc++ -I${LUMIN_SDK}/lumin/stl/libc++/include" CACHE INTERNAL "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--start-group -Bdynamic -lc -lm -lc++_shared -landroid_support -Wl,--end-group --sysroot=${LUMIN_SDK}/lumin -pie -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--build-id -L${LUMIN_SDK}/lumin/stl/libc++/lib" CACHE INTERNAL "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--start-group -Bdynamic -lc -lm -lc++_shared -landroid_support -Wl,--end-group --sysroot=${LUMIN_SDK}/lumin -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--build-id -L${LUMIN_SDK}/lumin/stl/libc++/lib" CACHE INTERNAL "" FORCE)
set(CMAKE_STATIC_LINKER_FLAGS "" CACHE INTERNAL "" FORCE)
set(CMAKE_LIBRARY_PATH "${LUMIN_SDK}/lumin/stl/libc++/lib" CACHE INTERNAL "" FORCE)

include_directories(SYSTEM )

参考

逆引きMeshLab

MeshLabの使い方をすぐ忘れるのでメモ

ウインドウ操作

操作内容 操作方法
レイヤーパネル On/Off Ctrl +L
全画面表示 Alt +Enter
Quick ヘルプの表示 F1

カメラ/視点の操作

操作内容 操作方法
カメラの回転 ドラッグ
カメラの移動 Ctrl+ドラッグ or 中ボタンドラッグ
カメラのズーム Shift+ドラッグorマウスホイール
カメラの中心を移動 ダブルクリック
カメラのリセット Ctrl+H
パースの強弱 Shift+マウスホイール
光源の移動 Ctrl+Shift+ドラッグ
Near Clipの変更 Ctrl+ドラッグ

3Dモデル操作

操作内容 操作方法
モデルのインポート Ctrl +i
個別のモデル(レイヤー)の移動 Filters > [Normals,Curvatures and Orientation] > [Transform : Translate,Center, set Origin]
個別のモデル(レイヤー)の回転 Filters > [Normals,Curvatures and Orientation] > [Transform : Rotate]
個別のモデル(レイヤー)の拡縮 Filters > [Normals,Curvatures and Orientation] > [Transform : Scale,Normalize]

メッシュ編集

Merge(結合)

操作内容 操作方法
Mesh のレイヤーを結合する Layerの上で右クリック > Flatten visible layers

Filter (スキャンデータをきれいにする)

操作内容 操作方法
穴埋め Filters > [Remeshing simpleification and Reconstruction] > [Close Holoes]
Manifoldのエラーが出る場合は事前に、[Cleaning and Repairing] > [Remove faces from Non Manifold Edges]などを実施
孤立したMeshを除去 Filters > Cleaning and Repairing > Remove Isolated Pieces (Diameter)
形状を保ったままメッシュの数を減らす Filters > [Remeshing, Simplification and Reconstruction]-[Simplification: Quadric Edge Collapse Decimation] を実行
詳細1
詳細2
頂点と法線からMeshを生成する Filters > [Remeshing simpleification and Reconstruction] > [Surface Reconstruction : Ball Pivoting]
Scale変更 Filters > [Normals,Curvatures and Orientation] > [Transform : Scale] ※1

※1 ScaleはXの値だけ変えれば倍率が変わる。Measure Tool の単位はUnityでいうと1 Unity( メートル)っぽい。

MeshLabで点群データ処理

位置合わせ

"Global Registration" というのが、MeshLab 2020.07から増えている。openGRを利用しているっぽい。


コマンドラインで利用する

  • ply から daeへ変換
meshlabserver -i input.ply -o output.dae
  • 変換時には含めるデータをオプションで指定可能
meshlabserver -i input.ply -o output.dae -m vc #頂点カラー付きで出力

 [-m <opt>]  the name of the file where to write the current mesh of the MeshLab document.
 If -m is specified  the specified mesh attributes will be saved in the output file. the param <opt> can be a
 space separated list of the following attributes:
     vc -> vertex colors,  vf -> vertex flags,
     vq -> vertex quality, vn-> vertex normals,
     vt -> vertex texture coords,
     fc -> face colors,  ff -> face flags,
     fq -> face quality, fn-> face normals,
     wc -> wedge colors, wn-> wedge normals,
     wt -> wedge texture coords
  • Windowsのバッチで連続して処理する(事前に作成したフィルター処理 filter.mlx をかける)
set PATH=%PATH%;C:\Program Files\VCG\MeshLab

  for %%V in (*.ply) do (
    meshlabserver -i %%V -o %%~nV.obj  -s filter.mlx
  )
  pause
  • コマンドのヘルプ全文
C:\Program Files\VCG\MeshLab>meshlabserver

Usage:
meshlabserver [logargs] [args]
  where logargs can be:
    -d filename             dump on a text file a list of all the
                            filtering functions
    -l filename             log of the filters is ouput on a file
  where args can be:
    -p filename             meshlab project (.mlp) to be loaded
    -w filename [-x]        output meshlab project (.mlp) to be saved.
                            If -x flag is specified a 3D model meshfile.ext
                            contained in the input project will be overwritten,
                            otherwise it will be saved in the same directory of
                            input mesh as a new file called meshfile_out.ext.
                            All the mesh attributes will be exported in the
                            saved files
    -i filename             mesh that has to be loaded
    -o filename [-m <opt>]  the name of the file where to write the current mesh
                            of the MeshLab document.
                            If -m is specified  the specified mesh attributes will
                            be saved in the output file. the param <opt> can be a
                            space separated list of the following attributes:
                                vc -> vertex colors,  vf -> vertex flags,
                                vq -> vertex quality, vn-> vertex normals,
                                vt -> vertex texture coords,
                                fc -> face colors,  ff -> face flags,
                                fq -> face quality, fn-> face normals,
                                wc -> wedge colors, wn-> wedge normals,
                                wt -> wedge texture coords
    -s filename                   the script to be applied

   Examples:

    'meshlabserver -i input.obj -o output.ply -m vc fq wt -s meshclean.mlx'
           the script contained in file 'meshclean.mlx' will be applied to the
           mesh contained into 'input.obj'. The vertex coordinates and the
           per-vertex-color, the per-face-quality and the per-wedge-texture
           attributes will be saved into the output.ply file

    'meshlabserver -i input0.obj -i input1.ply -w outproj.mlp -x -s meshclean.mlx'
           the script file meshclean.mlx will be applied to the document
           composed by input0.obj and input1.ply meshes.
           The mesh input1.ply will become the current mesh of the document
           (e.g. the mesh to which the filters operating on a single model will
           be applied). A new output project outproj.mlp file will be generated
           (containing references to the input0.obj an input1.ply).
           The files input0.obj and input1.ply will be overwritten.

    'meshlabserver -l logfile.txt -p proj.mlp -i input.obj -w outproj.mlp -s meshclean.mlx'
           the mesh file input.obj will be added to the meshes referred by the
           loaded meshlab project file proj.mlp. The mesh input.obj will become
           the current mesh of the document, the script file meshclean.mlx will
           be applied to the meshes contained into the resulting document.
           the project file outproj.mlp will be generated
           A 3D model meshfile.ext contained in the input project proj.mlp will
           be saved in a new file called meshfile_out.ext
           (if you want to overwrite the original files use the -v flag after
           the outproject filename) all the attributes of the meshes will be
           saved into the output files; the log info will be saved into the
           file logfile.txt.

   Notes:
   There can be multiple meshes loaded and the order they are listed matters because
   filters that use meshes as parameters choose the mesh based on the order.
   The format of the output mesh is guessed by the used extension.
   Script is optional and must be in the xml format saved by MeshLab.

参考

【OpenFOAM】点群処理や点群の編集をするには・・MeshLab、Meshmixerなどを使う【3D】

MeshLabのスクリプトについてのメモ: メモブログ

MeshLab

http://keisawada.com/MeshLab/meshlab.html

MeshLab の基本的な操作 - XSim

Meshlab スクリプトによるメッシュフィルター操作を自動化する方法

Magic Leap Remote を Wifi経由で利用する

すぐ、忘れちゃうのでメモ。 充電しながら開発するにはWifi経由で接続したい。

USBでつないだ状態で以下を実行

$ mldb wifi status
.....  IpAddr=192.168.1.31 .....

$ mldb tcpip -p 5555
restarting in TCP mode port: 5555

$ mldb connect 192.168.1.31 
connected to 192.168.1.31:5555

# 確認
$ mldb devices
List of devices attached
192.168.1.31:5555       device

# USBに戻す
$ mldb usb

関連