【Grasshopper】GHからRhinoのテクスチャマッピングを触ってみる

皆様こんにちは。
AMDlabの齋藤です。
今回は形態創生コンテストで利用したかった技術の1つ、
GHからRhinoのテクスチャマッピングを触る方法を紹介します。
こちらを利用することで、複数のモデルに対しテクスチャマッピングを自動で設定することができます。

それでは始めましょう。

今回のデータはこちらに挙げております。
https://github.com/AMDlab/TechBlog-Auto-Adjust-Textures

利用するマテリアル


今回利用するマテリアルはProcedural Wood Collection for Rhinoです。
https://www.food4rhino.com/en/resource/procedural-wood-collection-rhino
このマテリアルは木目を再現することができるものです。

このマテリアルは、画像付きの分かりやすいマニュアルが付属するので、それを元に設定ができます。
設定方法を簡単に説明すると、

①適応させたいRhinoファイルを開き、テクスチャファイルをドラッグアンドドロップ

②適応させたいRhinoモデルのマテリアル設定を先ほど入れたテクスチャに

③テクスチャマッピングのタイプを「平面(UVW)」に、マッピングを表示し、サイズXYZを全て500にし、位置と角度を木目を見ながら調整

④より良いマテリアル、テクスチャマッピングに微調整

このようにすればテクスチャをつけられます。
しかし、複数のモデルに設定するのは骨が折れるので、
今回はGHでテクスチャマッピングの設定を行います。

準備


まず、準備としてテクスチャを設定します。
ここの自動化をしない理由は、GH側の負担や処理を減らしたい、GHよりRhinoで設定した方が簡単だと思ったためです。

準備としては、前に記載した①、②を行えばOKです。

GHでテクスチャマッピングの設定を触る


次にGHでテクスチャマッピングの設定を触ります。
プログラムとしては、Rhinoのモデルを取得し、面積の小さい面を木の木口と考えその木目となるよう平面を作成し、その平面にランダムに位置・方向調整を与えて、テクスチャマッピングを設定します。
先にGrasshopperのプログラムを組みます。

まず、Geometry Pipelineでテクスチャの位置を修正したいモデルを入力します。
次に最小表面積の平面取得では、モデルを分解した面から最小の面を抽出し、平面を取得します。
そしてテクスチャを、指定した移動範囲、方向範囲内でランダムに配置できるようにし、最小表面積の平面と合わせます。
このようにして、テクスチャマッピングの平面を作ります。

※SymDomはC# Scriptで、入力された数値をxとすると、-x To xのようなDomainを作成するコンポーネントです。
https://github.com/Saito40/MiniHopper

次に、Python 3 ScriptでRhinoモデルの平面を調整します。

ここで、Runは bool で、guidは GUID 、planeは Plane のParameter Hint、全てItem Accessでの入力となっています。
プログラムは以下のようになっています。
Rhinoモデルの触り方はいろいろありますが、今回はrhinoscriptsyntaxで行いました。

このプログラムの説明をします。

 

ここではライブラリへのアクセスを行っています。

 

rhinoscriptsyntaxを利用するためにscriptcontextの doc をRhinoの ActiveDoc にします。
終わったら ghdoc に戻します。

 

guid よりRhinoのモデルへアクセスします。

 

ここで TextureMapping を設定します。
TextureMapping.CreatePlaneMapping は以下の関数です。
https://developer.rhino3d.com/api/rhinocommon/rhino.render.texturemapping/createplanemapping#(plane,interval,interval,interval,bool)
cappedTrue にすることで、平面(UVW)に指定できます。

これでGHの作成は終わりです。
実際に動かしてみましょう。

ちゃんと動きました!
より大きいものへ実装すると以下のようになります。

おわりに


今回はGHからRhinoのテクスチャマッピングを触る方法を紹介しました。
複数のモデルに対して一括でできるようになっています。
紹介した方法ではモデルの取得や木目の方向等簡単に設定しましたが、より相応しい方法を取れば実務でも利用できるかもしれません。
ぜひ、実装してみてください!


AMDlabでは、開発に力を貸していただけるエンジニアさんを大募集しております。
少しでもご興味をお持ちいただけましたら、カジュアルにお話するだけでも大丈夫ですのでお気軽にご連絡ください!
中途求人ページ: https://www.amd-lab.com/recruit-list/mid-career

カジュアル面談がエントリーフォームからできるようになりました。
採用種別を「カジュアル面談(オンライン)」にして必要事項を記載の上送信してください!
エントリーフォーム: https://www.amd-lab.com/entry

ARTICLES