
With作品解説~IKEBANA(ReBuild)編②~
展示会『With』を開催しました
2023年9月にメディアアート集団「WONDEMENT」を立ち上げました。
↓下記noteで設立の細かい話をしています。
そして2024年3月23〜24日の2日間に渡ってWONDEMENTとして2回目の展示となる『With』を代官山のギャラリー「UPSTAIRS GALLERY」で開催しました。

本展示では4つの作品を展示し、自分が全体のプロデュースと2つの作品制作に携わっています。
今回はその『With』で展示し、自分が制作に携わった「IKEBANA(ReBuild)」の作品解説続編です。
前回は作品の制作経緯から肝となるマイコン"Arduino"のセッティングまで解説してきました。
今回はArduinoで取得した重量の数値をTouchDesignerで取り込む方法や、3Dモデルの話などをしていきます。
TouchDesignerで処理する
数値をTouchDesignerへ持ってくる
Arduinoと重量センサーであるロードセルを用いて重量を計測することが出来ましたが、これをTouchDesignerに持っていく必要があります。
これにはシリアル通信を使用します。
既にArduinoから出力するシリアルポートは設定済みなので、TouchDesigner側でそれを受け取る準備を行います。
Serial DATを使うことでArduinoとTouchDesignerをシリアル通信させることができます。
「Connect」タブの「Port」にArduinoで指定したシリアルポートを選択します。

「Active」をONにすればしばらくすると取得した数値が出てくるようになります。
値を調整する
①で「取得した値がグラムではないように見える」と言いましたが、
これを実際の重量になるように調整を行います。
まずはSerial DATからDAT to CHOPを使って最新の数値のみ引っ張ってきます。

自分は250gのものを使いましたが、重さが判明しているものをロードセルに置いてその数値が実際の重さになるようにmath CHOPで値を調整します。
①数値がマイナスで取得されるのでmath CHOPで"-1"をかけて修正

②もし何も乗っていないのに数値が"0"にならない場合は
値をオフセット出来る様にconstant CHOPで調整出来るようにしています

③最後に"実際に乗せているものの重さ"÷"取得されている値"で出た答えを入力して出力される値が実際に乗っている重量と等しくなるように調整

この3段階の処理をして正確な重量を計測・取得出来るようになりました。
3Dで花瓶と花を作る
ここからは少し話が変わってTouchDesignerでの3Dの話です。
本作では3Dで花瓶と花のモデルを表示してアナログのデジタルの融合を表現しています。
そのための3Dモデルの制作過程について解説していきます。
空間を作る
当初は棒を花瓶に生けると3D上の花瓶の上空に花が浮かび、それが落ちてきて花瓶の中に刺さるという流れを考えていました。
そのため以前も使用したBullet Solver COMPを利用しました
しかし、制作を進める中で当たり判定がおかしくシミュレーションを開始した瞬間に花々が吹き飛んでいく現象が発生しました。
これが中々解決出来なかったので、本作品ではBullet Solver COMPによる物理演算は一切使用していません。
花瓶を作る
現実世界の花瓶とバーチャルの花瓶をリンクさせたいと考えました。
そこで実際に使うリアルの花瓶をスキャンして3Dモデル化することを考えました。
OpenAIの「Shap-E」やRealityCapture等が有名な「フォトグラメトリ」、LiDARセンサーを活用したスキャンなど、スキャンして3Dモデル化出来る手法は様々存在します。
そんな中で今回使用したのは「Luma AI」です。

Luma AIは「NeRF」という複数の写真から3Dシーンを生成する技術を使ったアプリケーションです。
「複数の写真から3Dシーンを生成する」と聞くとフォトグラメトリを思い浮かべますが、NeRFはフォトグラメトリよりも生成にかかる時間が短いとされています。
NeRFを使ったサービスはいくつかありますが、その中でもLuma AIはiPhoneアプリという手軽に利用出来る点で採用することにしました。
ちなみにフォトグラメトリも検証を兼ねて検討しましたが、
無料で手軽に試せるソフトがあまりなく諦めました。
※本note公開時点ではRealityCaptureが無料で使えるようになっています!
最終的に花瓶をLuma AIを使ってスキャンし、USDZ形式でエクスポートしました。
TouchDesignerではUSDファイルを直接読み込めますが、USDZはそのままでは無理なのでファイル拡張子を.usdzから.zipに書き換えでzipファイルを解凍し中のUSDファイルを読み込むことでTouchDesignerにテクスチャ付きでインポートすることが出来ました。

テキスチャ「0」というフォルダに分かれます

そこにLuma AIでスキャンしエクスポートした.usdcをインポートします。
花のモデル
花も同様に造花をスキャンすることを考えましたが、花瓶よりも複雑な形状で難しいことと、あえて現実の花瓶に挿すのは花には見えないものにしようという考えの下、花のモデルは別途用意することにしました。
最初はモデリングすることも検討しましたが、3D初心者の自分には難易度が高く。
今回は商用利用OKのフリーのモデルを利用しました。
テキスチャやマテリアルについても基本知識がほぼないこともあり、別途作成したりする必要がないモデルを選んでいます。

ただそのままTouchDesignerにインポート出来ないものもあるため、そう行った場合は一度blenderに取り込んだ上で調整を行って再度FBXで書き出してTouchDesignerへインポートしています。
例えばこれはバラのFBXモデルですが、花瓶があったり横に倒れているモデルがあったり、そもそも花は一本だけで良いので他の花を消す必要があります。
こういったものをblenderで手動で削除して行きました。
今回はここまで
今回も長くなってしまったので此処までです。
第二回はArduinoで取得した重量の数値をTouchDesignerで取り込む方法や、3Dモデルの話などをしてきました。
次回は重量の数値を使った重量差の計算と、それを用いて棒を特定する仕組みの制作過程や2Dエフェクトの作成などについて書いていきます
それではまた!