Rhino Inside Revit, Revit上でRhino/Grasshopperを走らす

最近Rhinoが6から7にバージョンアップされた。Rhino7に標準装備された評判(?)の「Rhino Inside Revit」を使ってみたので紹介する。

そもそもRhinoとは?動物の「サイ」と名付けられた「Rhinoceros 3D」(以下Rhino またはライノ)は、学生からプロまで世界中のデザイナーに愛用されている3D CADソフトである。特に曲面のデザインに優れている。さらにGrasshopperを始めとしてさまざまなプラグインが公開されており、コンピューテーショナルデザイン、パラメトリックデザインの世界共通のツール / 言語となっている。20年ほど前、アメリカ留学中の友人に、ロンドンAAスクール出身でFOAのデザインアーキテクトの一人だった優秀なキプロスの建築家がいた。彼は当時からRhinoを使っており、FOA時代には横浜大さん橋のコンペにデザインチームの一人として参加した。当時(さらに5年程遡るので25年ほど前)は、Rhinoも普及されておらず(日本ではほぼゼロであったろう)、FOAが発表した客船ターミナルの地形のようなサーフェスデザインはまさに衝撃であった。さて本題から脱線し過ぎないうちに、デモを始めよう。

Rhino Inside Revit

「Rhino Inside Revit」はRevitのプラグインである。Rhinoceros 3Dの公式サイトからダウンロードできる。https://www.rhino3d.com/inside/revit/beta/getting-started

ダウンロードするとRevitのアドインリボンにRhinoのお馴染みのサイのアイコンが追加される<図01>。インストールしてから最初にRevitを起動する際に、アドインを追加して良いか聞かれるので、もちろんOKする。(いったんOKすると次回の起動からは常にインストールされる。)またRevitのショートカットとしてRを「Rhino Inside Revit」に勝手に割り当てる。

<図01>Rhino Inside Revitアドイン

Rhino Inside Revitアドインを開けると、以下のようなリボンとなる<図02>。ここからRhinoに入る、Rhino Inside Revitというわけである。Rhino Inside Revitは、単独でRhinoを操作しているのではないので、Revit無しでRhino+Grasshopperを立ちあげてもGrasshopper(以下GH)のRevitのコンポーネントは使用できない※。

※Rhino Inside RevitのGHで作成したドキュメントを、Revitを介さず開くとRevitコンポーネントが読み込めないと警告が出る。警告は無視しドキュメントを開くことは出来るが、Revitコンポーネントは全て真っ白となり、GH単独でRevitコンポーネントは使用できない<図03>。

<図02>Rhino Inside Revitのリボン

<図03>Rhino Inside RevitのGHで作成したRevitコンポーネントはGH単独では機能しない。

それではRhino Inside Revitを開いてみよう。まずRhinoボタンを押してRhinoを立ち上げる<図04>。するとRhinoの画面がポップアップする。繰り返すが、これはRhinoではなくRevitの中のRhinoである。(まるで禅問答。。。)

つぎにGrasshopper(以下GH)ボタンからGHを立ち上げる<図05>。Rhinoを介さず直接GHだけ使用することもできる。これで準備完了。

<図04>Rhino Inside RevitのRhinoの画面(右)

<図05>Rhino Inside RevitのGHの画面(中央)

Grasshopperによるスパイラルタワーのデザイン

GHでシンプルなスパイラルタワーをデザインしてみよう。今やこの造形は世界中の都市で出現しているが、まさにRhino + Grasshopperの産物と言ってよい。GHの操作はネットや書籍でさまざまなチュートリアルや動画があるので、おさらい程度に。(筆者も思い出しながら。)

ステップ1, 楕円のフロア

まずXY平面(1階)に楕円フロアを生成し、それを最上階に移動する<図06>。Ellipse, Move, Unit Z

<図06>Ellipse, Move, Unit Z

ステップ2, 最上階回転

最上階の楕円を回転する<図07>。Rotate ※

※1階と最上階の2平面の場合、回転角度は60度くらいまでが限度、それ以上回すと次のステップでサーフェスが破綻する。さらに回転させたい時は中間階が必要。

<図07>Rotate

ステップ3, Loft

そして1階と回転した最上階の楕円をつなげる/スィープする。ここでRhinoのもっともポピュラーで強力なコマンドLoftの出番<図08>。このようにねじれた楕円のシームレスな押し出しサーフェスをインスタントに生成できるのである。このコマンドは世界中の建物のデザインを変えてしまった。

<図08>Loft

このロフトのモデルはRevitにも同期されている<図09>。つまりRevitの中で直接GHが使えるようになったということ!「Rhino Inside Revit」以前は、GHをRevitにプッシュさせるには特別なツールを必要としていた。ザハ事務所はそのスペシャルツールを駆使しているとのこと。

<図09>RevitとGHの同期

ステップ4, パネリング

ここから先はエンベロップの作成。まずはロフトサーフェスをUVグリッドに分割する<図10>。Isotrim(Sub Surface), Divide Domain 2

<図10>Sub Surface

さらにパネルを面(Face)、エッジ線(Edge)、頂点(Vertice)に分解する。Deconstruct Brep

ステップ4, 三角パネル

ここでは三角パネルを割り付ける。無数の四角のリストから、3点の頂点のセットを抽出するには、Cull(摘み取る)というコンポーネントCull Patternを使うと便利<図11>

<図11>Cull Pattern

パネルのパターンを確認するためにPoly Lineを使う。ポリラインはCloseすることを忘れずに(Closeしないとせっかく3点抽出しても三角形にならない)。Patternの端子に3つのBoolean Toogleボタンを接続し、ボタンのON、OFFで摘み取りのパターンを確認する。True, True, Trueだと4点のまま<図12>。True, True, Falseだと1点が摘み取られ3点が抽出される<図13>。

<図12>Cull Pattern : True, True, True

<図13>Cull Pattern : True, True, False

筆者も含めなんだか訳が分からないが、Boolean Toogleボタンを複数付け、ON-OFFを適当に組み合わると、パターンが切り替わるので実験するべし。

ステップ5, Revit Familyの読み込み

最後に割り付けるパネルは、RevitのAdaptive Component Family で作成する<図14>。マリオンの太さは後で調整できるようにパラメーターとして設定。これをプロジェクトの中にロードする。

※アダプティブファミリーの作成は最初は少々とっつき難いので、YouTubeにアップしました。↓

<図14>三角形のパネル、Adaptive Component Family(解説動画)

次にGHでこの三角形パネルファミリーを読み込む。Model Categories Picker, Element Type Picker でプロジェクトにロードしたAdaptive Componentを読み込むことができる<図15><図16>。ちなみにRevitを使用しているので、最後はRevitのファミリをロードしてこないと、Revitを使っている意味が無いのである。

<図15>Model Categories Picker

<図16>Element Type Picker

最後にAdd Component (Adaptive)に先にCullで抽出した3点セットのリストと接続すると、パネルが割付られる<図17>。パネル数が多くなると、割り付けられるまで少し時間がかかるが、じっと我慢。計算している間に下手に触るとフリーズのもと。

<図17>Add Component (Adaptive)

もちろんRevitのモデルも更新される!<図18>

<図18>GHのコードからRevitのファミリを呼び出す

最後に、先に設定した三角パネルのマリオンの太さのパラメーター(mullion width)をGHの中で調整できるようにする。Revitのタイププロパティで変更すれば同じことだが<図19>、せっかくここまでGHで生成したので100%GHのスクリプトで実行しようということである。

<図19>Revitのファミリパラメーターの設定画面

Set Element Parameter を使う<図20>これでマリオン太さをGHの中で調整できるようになった。GHの中でこのタワーの形状を決定するすべてのパラメーター「楕円平面の半径」「タワーの高さ」「パネリンググリッドの数(UV)」「回転角度」「マリオンの太さ」を設定調整し、直接Revitに反映できるようになっている。パネリングの計算は高負荷なので、筆者のパソコンのような「普通の」スペックのPCの場合は、いったんAdd Component (Adaptive)Disableにしてから、ポリラインで成果を確認・検討するのが良い。繰り返すが、計算中はむやみにキーボードやマウスをいじらない。我慢しない筆者は何度フリーズしたことか。。「Revit上でRhino/Grasshopperを走らす」と銘打ったが、結局「走る」じゃなくて「歩く」って感じでした。そんなことに気をつけながら、RevitでGrasshoppingしてみてください!

<図20>Set Element Parameter

追記:上の楕円のスパイラルタワーをRevitで作成するとこうなります。↓

2021.03.13 HN

Revitはアメリカ人, インチとメートル

インチ系とメートル系

アメリカでは長さの単位はメートル系でなく、フィート-インチ系(feet-inch)である。1 inchは  25.4 mmで、1 feet = 12 inch = 304.8mm である。ご承知のように、日本を含め現在では世界中のほとんどでメートルを使用しているので、初めてアメリカの設計事務所で仕事をやり始めた頃は、慣れない12進法の単位と縮尺のシステムに苦戦したものである。

フィート-インチ系 表記法 メートル系
1 inch 1” 25.4 mm
1 feet = 12 inch 1’ – 0” 304.8 mm

メートルは10進法なので、縮尺はシンプルに1/50、1/100、1/200などと分かりやすいが、インチ系での縮尺は以下のように十進法に変換すると端数が出てくるので、メートル系の物差しやサンスケ(三角スケール)は使えない。ただし1/8” = 1’ – 0”などは1/100のスケールで代用できたりする。

インチ系縮尺例 スケールファクター デシマル
1/32” = 1’ – 0” 1 / 384 0.0026041666
1/16” = 1’ – 0” 1 / 192 0.0520833333
3/32” = 1’ – 0” 3 / 384 0.078125
1/8” = 1’ – 0” 1 / 96 0.0104166666
1/4” = 1’ – 0” 1 / 48 0.0208333333

始めは手すりの高さ3′-6″は1,066mmなどと、いちいちメートル換算して理解していた。まるで英語を使うのに、いったん日本語で考えてから英語に翻訳する(ぼくのような)典型的な日本人のようである。慣れてくると、インチ系の建物の方が3’、6’、12’、15’などとシンプルかつ身体スケールに即した寸法体系を持っていることを認識できる。例えば背の高いアメリカの男性の平均身長は6’、歩道の幅は12’などと分かり易い。逆に「チリ3mm(約1/8″)」などと言うとそんなに微細な寸法はアメリカの建設現場では無意味(制御不能)とボスに笑われてしまう。メートル系はサイエンティフィックでメカニカルであり、インチ系はヒューマンである。日本でも尺が使われていたが、人間的な寸法体系であることは言うまでもない。一間(6尺)は1.81818mなので、6フィート(1.8288m)とほぼ同じ寸法ある。

補足:日本の場合、畳や襖のモジュールは柱や梁の内法でとるので、畳の大きさは、地域によるが、6尺ない。江戸間の大きさは、5 尺8 寸(176cm)×2 尺9 寸(88cm)。

AutoCADの単位(Unit)の仕組み

さて、話を戻す。アイフォンもまだ世に出ていない20年以上前は、もちろんBIMなどなくAutoCADで設計していた。AutoCADの単位(Unit)は、インチ系とメートル系の互換性が無い。分かり易く例えると、米国のAutoCADの図面と、日本で使うAutoCADの図面はまさしく世界が異なる。以下にAutoCADでの実際の操作によって説明する。AutoCADにはインチ系のテンプレート「Tutorial-iArch.dwt」などが入っているので、それを使うと便利。[図1]のように27フィート角の平面を作図する。27’は8,229.6mmである。

[図1]インチ単位系でのCAD図

次にそのインチ単位のデータをコピーし、メートル単位のモデルスペースにペーストすると、27′-0″の寸法が、324となる。すなわち27 x 12 = 324 で、27′-0″角の平面が、324mm角の平面に縮小されてしまったということ。これをメートルの世界に変換するためには、1 inch = 25.4 mm なので25.4倍する必要がある。

追記:初めてインチ系の環境でCADを使う時のよくある間違いは、モデルスペースでインチユニットで作図し、ペーパースペースで印刷するときに、インチ系の図面をA3(420mm x 297 mm) などのメートル系のペーパースペースにレイアウトするとスケールが合わない。A3(420mm x 297 mm) は A3(16.5354″ x 11.6929″)であることを忘れているのである。

[図2] 左のインチ単位系のCADデータを、右のメートル単位系にコピーしたもの

Revitの単位(Unit)の仕組み

一方、Revitの場合は異なるシステムを持つ。当然日本語版のRevitは初期設定では単位はメートル系である。しかし、AutoCADと違ってメートルとインチのデータの長さは絶対寸法を持っている。

上のAutoCADと同様の操作で理解してみよう。日本語版のRevitの基本テンプレートはメートル単位だが、インストール時のライブラリにインチ単位のものも入っている。「Default_I_ENU.rte」 [図3] を使う。IはImperialのI。インチシステムの日本語の名称は「帝国単位」と少々威圧的である。

[図3] インチ系のテンプレート「Default_I_ENU.rte」

このテンプレートで、27’角の箱をつくる。フィート単位のプロジェクトの中にいるので、27と入力すれば自動的に27’となる。寸法を入れて確認する。[図4]

[図4] インチ系テンプレートでの作図

次に通常のメートル系のテンプレートを開き、[図4]のモデルをコピーしてメートル系の白紙のモデルにペーストする。するとこの場合は、寸法は8230となっている[図5]。すなわち27’角の箱が8,229.6mm(27 x 12 x 25.4)角の箱としてコピーされたということを示す。

[図5] 左:インチのモデル 右:メートルテンプレートにコピペしたもの

Revitはアメリカ人

ここからが本題である。すなわち、RevitのUnitは絶対的な長さのプロパティを持っているということである。「Revitはアメリカ人」とは、ファミリだのプロファイルだのインプレイスなど訳の分からないカタカナ満載の日本語版Revitのインターフェースを指しているいるのではなく(そういう皮肉もこめているが)、ここでは「メートル系のテンプレートの中でインチ入力できる」ということである。

インチ寸法の作成

まずインチ対応の寸法タイプを作成する。寸法スタイルの一つをコピーして名前をフィートなどの名前を付けて別タイプとする。単位書式がmmになっているので、この単位を変更する[図6]。

[図6] 長さ寸法のプロパティ画面

すると以下のような設定画面となる。ここで「プロジェクト設定を使用」のチェックをオフにすると、単位をフィートインチ変更できる。「フィートと分数表記インチ」とする。[図7]。すなわち、デフォルトではプロジェクトの単位系はmmということ。

[図7] 寸法単位の変更

これで準備完了。この寸法タイプで先ほどの箱を測ると、27′-0″の寸法を記入できる。[図8]

[図8] インチ寸法の入力

インチ入力での通り芯の作成

さらにメートルのユニットの世界で、インチ入力で通り芯を作成する。まず27’を三等分し9′-0″の通り芯を入力する。プロジェクトの単位設定がメートルなので通り芯をコピーしようとすると、2000などのようにmmの青い作図寸法が出てくるが[図9]、無視し、「9’」と数値入力をする[図10] 。フィートの記号「’」は「シングルクォーテーション」という。すると9′-0″のスパンで通り芯を入力できるのである。長年そのことに気が付かなかった筆者は、これを知った時は、「なるほどRevitはアメリカ生まれなんだ」と感慨深く(?)妙に納得したものである。

[図9] コピーによる通り芯入力

[図10] フィートの数値入力「9’」

インチは「”」「ダブルクオーテーション」を付ければ良い。たとえば4′-6″「4’6″」と入力する。この場合6″はちょうど半分なので「4.5’」でも良い。このようにRevitではメートルの世界でも、バイリンガルにインチの世界が使えるようになっているのである。ちなみにAutoCADのメートル単位系の中で「4’6″」と入力しても単位として認識することはできないので試してみてください。

[図11] Revitではメートルもインチもバイリンガルに入力できる。

HN 2021.01

 

 

 

 

 

 

 

 

 

LumionからVRコンテンツをつくりWebで見る

せっかくLumionを持っていたら、ぜひVRコンテンツを作成したい。もちろんGearVRやOculusなどの本格的なコンテンツも作成できるが、ゴーグル(ヘッドマウントディスプレイ)を持って無くても見ることのできる便利なメディアが 、

Google VR View

Google VR View である。java scriptを埋め込むだけで、Lumionで作成した360°パノラマイメージをwebページ上で体験することができる。

SketchUpからLumionへ

それではLumionからコンテンツを作ってみよう。今回は下のSketchUpモデルを使う[Fig01]。

[Fig01] Lumionと同期させるSketchUPのモデル

LumionではSketchUpのファイル.skpをネイティブに開くことができるようになっている。前回のRevitからLumionへと同様、SketchUpでもLiveSyncを使うこともできるが、今回はLumionに.skpファイルを直接開く(インポートする)やり方でデモ。直接取り込むのとLiveSyncを使用して取り込むのも何も変わらない。(結局の所、筆者の遅いPCではLiveSyncを付けたまま作業できないし。。)取り込みには緑のインポートボタンを押す。

[Fig02] IMPORT

インポートはSketchUpのレイヤや表示などの設定がそのまま反映される。すなわち、SketchUpで例えば「レイヤ1」を非表示の状態でインポートするとLumionに「レイヤ1」は取り込まれない。Revit+LiveSyncと同様、SketchUpのマテリアルはLumionでそのまま有効。ガラスが不透明でインポートされるかもしれないが、その場合はLumionでまとめてアサインできるので問題ない(Revit+LiveSyncの時と同じ)。SketchUpの場合は、面で作成した木や人の要素や、ガラス以外のマテリアルやからマッピングテクスチャもすべてSketchUpと同じように取り込まれる[Fig03]。「ネイティブ」なので。

[Fig03] LumionではSketchUpモデル(.skpファイル)を直接インポートすることができる。

木や人はLumionで新たに入れ直し、SketchUpの不必要なレイヤは消して、.skpファイルを同期し直す。先の緑のIMPORTボタンを押すと、もう一つ同じモデルがインポートされてしまう。同期するには以下の手順で行う。まずモデルを選択すると、下のモデルの情報パネルが出てくるので[Fig04]、

[Fig04] インポートモデルの情報パネル

左の同期ボタンを押す[Fig05]。 モデルが大きいと同期に少し時間がかかる。少し待つとSketchUpの平面の木や人が消える。同期なのでLumionでアサインしたガラスなどの設定は変わらないので安心ください。これでモデルの準備が完了です。

[Fig05] 同期ボタン

Lumion 360°パノラマビュー

いよいよVRコンテンツの書き出し。360°パノラマビューを使う。設定は、カメラや動画と同じ。

[Fig06] 360°パノラマビュー

[Fig07] パノラマビューモード

モノラルモード

レンダリングボタンを押すと、保存するファイル形式の設定画面となる。Target DeviceはGeneric(汎用デバイス)。Stereo(立体的)はOn/Offの設定があるが、まずはOffでレンダリングすると

[Fig08] レンダリング設定画面、モノラルモード(立体的オフ)

モノラルモードでは以下のようなレンダリング結果。

[Fig09] 360°パノラマビュー、モノラルモードでのレンダリング

ステレオモード

一方、ステレオモード(立体的)オンでレンダリングすると

[Fig10] レンダリング設定画面、ステレオモード(立体的オン)

左目と右目用の画像が上下にレンダリングさる。

[Fig11] 360°パノラマビュー、ステレオモードでのレンダリング

モノでもステレオでもどちらのレンダリングでもGoogleVRで見ることができるが、もちろんより臨調感のあるVRコンテンツはステレオです。これでコンテンツを書き出し完了。静止画(jpg)ですが、360°パノラマ画像はレンダリングに非常に時間がかかる。ちなみに著者の遅いPCでは上のレンダリングで半日かかる。おそらく5分程度の動画なら2~3時間でレンダリングできるはずです。

htmlの設定

ここからはサーバーにアップするためのhtmlのページの設定。以下の手順はGoogleVRの公式ページの通り。まずは、VRViewのjavaコードの埋め込み。htmlの中にGoogleのサーバのリンクを貼る。

<script src="https://storage.googleapis.com/vrview/2.0/build/vrview.min.js"></script>

次にBodyの中にvrviewを貼る。

<div id='vrview'></div>

最後にVRコンテンツのロード。

window.addEventListener('load', onVrViewLoad);

function onVrViewLoad() {
  // Selector '#vrview' finds element with id 'vrview'.
  var vrView = new VRView.Player('#vrview', {
    video: '/url/to/video.mp4',
    is_stereo: true
  });
}

上の例ではvideo:を読み込むことなになっているが、上のデモのような静止画(jpg)の場合は、「video: ‘/url/to/video.mp4’, 」の部分を 「image: ‘ファイル名.jpg’,」

に変えるだけ。以下はhtmlの例。幅と高さは適宜設定してください。

==============================================

<html>

<HTML>
<HEAD>
<TITLE>タイトル</TITLE>

<script src=”https://storage.googleapis.com/vrview/2.0/build/vrview.min.js”></script>

<script>
window.addEventListener(‘load’, onVrViewLoad);

function onVrViewLoad() {
var vrView = new VRView.Player(‘#vrview’, {
image: ‘ファイル名.jpg’,
is_stereo: true,
width: ‘100%’,
height: 500
});
}
</script>
</head>

<body>
<div id=”vrview”></div>
</body>

</html>

==============================================

サーバへのアップロード

htmlファイルをPC上で直接開くが、読み込むことがでない[Fig12]。

[Fig12] PC上(ローカル環境)ではGoogleVRが読み込めません。

PCのローカル環境ではGoogleVRが読み込めないようです。筆者はここでつまずく。サーバにアップして確認する。

[Fig13] GoogleVR

サーバにアップロードしたら無事に見れるようになりました。

簡単でしょ。試してみてください。

2020.11.22 HN

※動画(3分:1,280 x 720)のレンダリング時間は、360°パノラマイメージ(4,096 x 4,096)の半分。