ドアスクリプト

以前に作ったドアスクリプトを書きなおしました。
今度はオプションをたくさんつけてみましたが、ドアチェックだけはさすがに面倒でやめました...。
formZはVectorWorksみたいにドラッグ&ドロップでドアを挿入したりできないけど、このスクリプトがあればいくらか楽です。
Door_zip.txt
切妻スクリプト

こんどは切妻用です。妻面のふさぎも作れます!
入母屋は無理でした...。(とりあえず部品だけ)
ちょっと中途半端な感じだけど、設計事務所レベルなら十分かな...。
Rectangle_to_KIRIZUMA_zip.txt
寄棟スクリプト

必要に迫られてとうとう作りました...。
すげー便利!もっと早く作ればよかった。
ディテールは要らないけど、"とりあえず屋根をかけたい" って時に便利です!
ちなみにテクスチャの向きも屋根に沿うようになってます!
Rectangle_to_YOSEMUNE_zip.txt
引き戸作成スクリプト

線分から横引きのサッシを作るスクリプトです。
木製建具に出来るようにテクスチャの向きも調整済み!
とりあえずサッシが欲しい時に重宝します!
グローバル変数でマテリアル名を設定しておけば、マテリアルも設定済みで出来上がります!
スクリプトの中は思いっきりスパゲッティコードだけど、一応動くのでUpしますね。
Sliding_Sash_from_Line_zip.txt
Pylon Light Sync

Pylon Light Sync
これはライトと視点をシンクロさせるためのツールです。
視点をライトに合わせたり、ライトを視点に合わせたりできます。
それほど利用頻度は多くないと思いますが、ちょっと面白いツールではあります。
これでレビューは終了です。
玉石混淆といった感じですが、全体としてはすばらしいと思います。安いし "買い" ですね。(貰ったけど...。)
ただでさえツールが多くて煩雑なformZですが、これなら増えてもいいと思います。
初心者はパレットが増えて混乱するかもしれないけど、ライトコンソールなんか絶対便利ですよ!
今のところ英語版しかないけど、使用に際しては特に問題はないはずです。
マニュアルなんか読めなくても使えるのでぜひ使ってみてください。
あと、こんなの作れるメーカーがあるんだったら、リクエスト出したいところですね...。「こういうの作って!」
って。
Pylon Light Kit

Pylon Light Kit
これはライトの向きや影などをインタラクティブにコントロールするためのプラグインです。
モードを選んだら、あとはマウスドラッグで調整できます。
使用にはちょっと慣れが必要ですが、室内など細かいライトコントロールが必要なシーンでは重宝すると思います。
Pylon Daylight

Pylon Daylight
これは太陽光をコントロールするためのプラグインです。
黄道上を動く太陽を、マウスドラッグで時刻を進めたり戻したりできます。
OpenGL表示で影を表示させるとその様子がよくわかります。
"北"を正確に合わせられれば精度も出ると思います。
住宅など、日の当たり方にうるさい物件では特に重宝すると思います。
Pylon Light Console

ここからはLighting Collection 1のツールです。
Pylon Light Console
これは、見ての通りのユーティリティで、複数のライトを1つのパレットで調整できます!
細かい調整をやりたいときにはかなり便利ですね。ぜひ標準ツールに入れて欲しい!
特にライティングに慣れていない人ほど必要だと思います。
たぶん、仕事が10倍早くなります。 星5つ!
Pylon Smart Plane

Pylon Smart Plane
うーん...。これはちょっと、果たして便利なのだろうか...。
オブジェクトや面、セグメントを選択しておいてから実行すると、 "もっとも垂直に近い表示平面がアクティブになる" というものらしいのですが、自分のスタイルでは要らないかな...。
自分は2次元の視点(上とか右とか)を多用するのですが、表示平面は自動でアクティブになるし、3次元の視点の時でもXY平面と垂直スイッチがあれば大抵は事足りますから。
これにショートカットを割り当てるくらいなら、 "任意の表示平面の設定ツール" にあてたほうが便利な気がします。
Pylon View Target

Pylon View Target
これも視点を作るためのものです。(エクステンションメニューです)
名前の通り、見たいものに視点を合わせてくれます。
自分も昔、線分に視点を合わせるスクリプトを作ったことがありますが、それのもっと豪華版ですね。
複雑で重いプロジェクトや、高低差があって視点作成が面倒なプロジェクトなどでは特に便利だと思います。
Pylon Navigator

Pylon Navigator
これはビューナビゲーションとグリッドセッティングのためのユーティリティです。
自分の場合、グリッドはあまり使わないんでどうでもいいんですが、一番上のクイックビューはちょっと便利かもしれないと思いました。
Views
視点を登録するには、丸いアイコンをCtrl+Alt+クリック(Win)します。
視点パレットにQuickViewという視点が追加されるのですが、作り直してもその都度上書きされるだけで無駄な視点が増えることはありません。
複雑なプロジェクトの場合、視点が増えすぎてエライことになりますが、これは作業用の一時的な視点を保存するのにぴったりですね。
あと、プラス、マイナスのアイコンは視点パレットに保存されている視点を順次切り替えて見ることが出来ます。ちょっとしたパラパラアニメみたいなことができます。
Focus
選択オブジェクトに順次視点を合わせることができます。
オートフォーカスモードだと、クリックした瞬間に移動します。
大量にある建具を1つずつチェックするとか、そういう使い方ができるかもしれません。
Grid
solidThinkingに似たような機能がありますが、数値入力よりもグリッドメインに作業する人向けですね。
Pylon Underlay Tool

Pylon Underlay Tool
これは文字通り下絵設定用のツールですが、標準ツールと違うのは、インタラクティブに位置合わせ、サイズ合わせができるということです。
正直言って、「なんでこれ、標準ツールに無いの?」っていう便利さ!
formZの下絵の設定ってかなり面倒で、自分も自作のスクリプトでフォローしたりしてましたが、このツールがあれば自分のスクリプトはもう要らないですね。
Pylon Live Section

Pylon Live Section
これはリアルタイムで断面位置を動かせるツールです。
標準ツールだと、ウォークスルーツールで似たようなことが出来ますが、こちらは視点固定で断面だけ移動できます。
仕様としては、単純にカメラのクリッピング平面を移動しているだけです。
クリップレンダリングなんて普段は断面パースを作るときや、壁の向こうの部屋を見たい時にしか使わないですよね? 設定も結構面倒くさいし、第一、そんなに使うもんじゃないです。
でも、このツールがあればもっと気軽に断面を見ることができます。
うまく使えば設計上のさまざまな検討に良い影響を与えると思います。
なにより、模型じゃ出来ない検討方法ですよね。
Plugin Collections for formZ by Pylon Technical

今日からformZの外部プラグインを開発しているPylon Technical社の製品を紹介していきます。
宣伝です。というか貰ったので...。(このブログ初の利益!?)
Pylonのプラグインには現在、2つのコレクションがあります。
それぞれ、ビューナビゲーション用とライトコントロール用のツールセットです。
(※リンクはデモムービーです。)
Views + Navigation Collection ($69.95)
Pylon Live Section
Pylon Underlay Tool
Pylon Navigator
Pylon View Target
Pylon Smart Plane
Lighting Collection 1 ($49.95)
Pylon Light Console
Pylon Daylight
Pylon Light Kit
Pylon Light Sync
特徴は、ライブセクションやデイライトなどインタラクティブな操作ができるツールを備えていることです。
マウスドラッグで断面位置をリアルタイムに動かしたり、太陽の位置を時刻通りに移動したりできます。
formZの標準ツールは少々インタラクティブ性に欠けるのでちょっと新鮮ですね。


興味のある方は、まずデモムービーをご覧になってくださいね。
何ができるかよくわかります。
次回から各ツールの紹介をしていきます。
FSL基本講座09
FSL基本講座08

今回は編集系ツールの超基本!移動、回転、スケールなどのジオメトリック変換についてです。
ジオメトリック変換の方法は2つあります。
fz_objt_edit_move_objt() など専用の関数を使う方法と、fz_objt_edit_transform_objt() を使う方法です。
方法1.
移動、回転、スケールにはそれぞれ専用の関数があります。
fz_objt_edit_move_objt()
fz_objt_edit_rotate_objt()
fz_objt_edit_scale_objt()
サンプル1

test1_zip.txt
これらの関数の使い方は非常に簡単ですが、 "回転" と "スケール" に関して "任意の基点" を指定できないという問題があります。(問題というか仕様です...。)
サンプルをテストしてみればすぐわかりますが、これだと使い方が限定されてしまいます。
FSL基本講座07
FSL基本講座06

読み方
プログラミングに慣れていない人のために基本を少しだけ。
for文(繰り返し)
for(i=1;i<=10;i++){
result=result+i;
}
iは1。iが10以下の間、iを1つずつ増やす。
if文(条件分岐)
if(n == 0){
a();
}else{
b();
}
nが0なら a() を実行する。nが0でないなら b() を実行する。
test1_zip.txt
最低限この2つをマスターしてれば大抵のことができます。
ほか、while文やswitch文などもよく使いますが、初心者は混乱するので、とりあえずいいです。(上の2つでも代用できるし...。)
もう少し勉強したい人はGoogle様に訊いてください。CとかC++と文法一緒です。
いよいよ次から少し実用的な応用をやります!
FSL基本講座05

だいたい大枠は説明したので少し細かいところも見ていきましょう。
今回はプログラム内で使う基本的な "アイテム" について説明します。
変数(variable)
変数というのは値をやり取りするときの "入れ物" です。
データタイプ(変数の型)によって専用の入れ物があります。
これらを使う場合ははじめに宣言しなければなりません。
たとえば、数値を扱うもの、文字列を扱うもの、論理値を扱うものなどがあります。
サンプルでは変数名の型がわかりやすいような名前が付けられています。
long lval(整数)
double dval(実数)
fz_string_td str," hellow "(文字列)
fzrt_boolean TRUEかFALSE (論理値)
etc...
FSLの場合、他にも専用の型がいろいろあります。
fz_xy_td
fz_xyz_td
fz_rgb_float_td
fz_xyz_mm_td
etc...
(※ _td は "type data" の略)
enum(enumeration)
これはあらかじめ定められた特定の値しか取れない変数です。
最後に _enum が付きます。
たとえば、fz_objt_model_type_enumなら取れる値は以下の3つ。
FZ_OBJT_MODEL_TYPE_UNSPEC
FZ_OBJT_MODEL_TYPE_FACT
FZ_OBJT_MODEL_TYPE_SMOD
ポインタ(pointer)
ポインタというのは、どのデータを処理しているのかを指し示すマーカーみたいなものです。
ポインタ用の変数はデータタイプを示す名前の最後に _ptr が付きます。これも変数の一種です。
fz_objt_ptr
fz_layr_ptr
fzrt_floc_ptr
関数(function)
関数というのは、何らかの処理をする機能を提供するものです。
たとえば、fz_objt_cnstr_cyln() は円柱を作るための関数です。
名前の頭に "fz_" が付いて、だいたい意味がわかるような名前になってます。
fz_objt_attr_get_objt_layer()
fz_objt_alys_get_objt_centroid()
fz_view_new_camera()
算術関数や文字列用の関数は
"FZ_MATH_" や、 "fz_std_" などが付いています。
FZ_MATH_3D_MID_PT()
FZ_PI
fz_std_sin()
fz_std_strcat()
fz_std_strlen()
ユーザー関数
複数の機能をまとめて1つにしたものをユーザー関数といいます。
ユーザー関数には大きく分けて2つの種類があります。
"値を返すもの" と "返さないもの" です。
返すものには、頭に返す値のデータタイプを示し、最後にreturn (返す)します。
返さないものにはvoidをつけます。(あるいはlongで代用したりします。)
ユーザー関数の名前は自由に付けられます。
double ichikaranmadetasu(long n)
{
long i,result=0;
for(i=1;i<=n;i++){
result=result+i;
}
return result;
}
呼び出すときは、ichikaranmadetasu(10);
この場合は1から10まで足して55を返します。
他にもいくつかありますが、このへんのことがわかってれば大抵のことは出来ます。
もっと細かいことはAPI Referenceを参照してください。
次回はfor文やif文などの基本文型を少しやります。
FSL基本講座04

スクリプトの体裁
プラグラミングコードというのは、細かい "部品" の集合体です。
その細かい部品を集めて何らかの処理をおこなうものです。
たとえば、スクリプト全体を1つの "工場" と見立てると、処理するデータはその工場で作っている "商品" といったところです。
1つひとつの工程は関数そのもの。( fz_objt_cnstr_line() だとか fz_objt_cnstr_rectangle() などです。)
複数の工程をまとめたものがユーザー関数。( たとえば "塗装" なら、下地調整、マスキング、下塗り、中塗り、仕上げ塗装、乾燥など複数の工程を経るわけです。)
"組み立て作業" あたりがメインルーチンでしょうか。
たとえば、もっともシンプルなものだとこうです。
サンプル1

test1_zip.txt
円柱を作るスクリプトですが、短いのでメインルーチンだけで済みます。
町工場で "一品" だけなにかを製造しているイメージでしょうか...。
FSL基本講座03

サンプルファイルの見方
formZのSDKにはサンプルがたくさん付いています。
"細かく解説するよりもコードを読ませたほうが早い!" ということなのでしょう...。
サンプルを見るには、API Referenceからリンクを開くか、Scriptフォルダ内のSamplesフォルダ内の.fslファイルを直接エディタで開きます。
ただし、初心者がこれを見るとちょっと混乱してしまうかもしれません。
たとえば、util_objt_cnstr_simple.fsl を見てみましょう。

util_objt_cnstr_simple.txt
プロが書いたものなのでちゃんと "エラー回避コード" が入っているのです...。そのせいで少し読みにくくなっています。
さらに、ユーザー関数を使って機能を分離してあったりして少し複雑に見えます。(自分もはじめは「なんかゴチャゴチャ書いてあってよくわからん!」って思ってました...。)
なのでそのへんを頭に入れて読む必要があります。
ちなみに自分の場合、読みにくい時はテキストエディタにコピペしてエラー回避コードを全部削除してしまいます。わかりづらいので。(個人が自分のために作るスクリプトなので最低限動けばいいんです...。)
FSL基本講座02

準備 〜スクリプトを作るのに必要なもの〜
・SDK(Software Development Kit)
付属のDVDからインストールします。
・API Reference(HTML形式のformZ API Documenation)
・マニュアル(formZ SDK.pdf)
どちらも英語ですが、とりあえずAPI Referenceは必須!
自分はブラウザにブックマークして、いつでも見れるようにしてあります。
・テキストエディタ
formZにも専用のエディタがありますが、遅いし使いにくいのでおすすめしません...。
MacならMiがおすすめ。
ちなみに自分はWinなので、EmEditorを使ってます。
自分が使ってる構文ファイルをアップしますので、Em使ってるひとは試してみてください。
EmEditor用の構文ファイル (※Zip圧縮してあります)
・C言語の文法知識
FSLはC言語ライクなスクリプトなので、そういう知識が必要です。
自分の場合、JavaScriptの知識が役に立っています。(C言語と文法一緒なので)
"プログラミングは初めて" って人はネットをチラっと検索してみてください。(いくらでも出てきます)
まず、for文、if文は必須です。そのほか while文や Switch文もよく使いますが、
for文とif文がわかってれば大抵のことは出来ます。
・しつこさ
いい意味での "しつこさ" が無いとやっぱりおぼえられません。トライ&エラーの繰り返しこそ大事です。
・好奇心
あとは、「面白い!」と思うかどうかだけ。
FSL基本講座01

今日からformZ Script Language(FSL)講座やります。
といっても、全部を完璧に解説できるほど自分もよくわかっているわけではありません...。
とりあえず、 "お題" を提示してそれを解説しながらやっていきます。細かいことはその都度やりましょう。
点を作るスクリプト
formZの場合、MAXScriptなどと違って、一行書いただけでは全く動きません。
必要最低限の体裁は整えなければなりません。(初心者がとっかかりにくい原因のひとつですよね...。)
最初は一番簡単な体裁のスクリプトから。

test1_zip.txt (※右クリックしてリンク先を保存>解凍)
これは点オブジェクトを作るスクリプトです。
どの部分が何を表しているのか、じっくり見ればだいたい想像つくと思いますが、最低でもこれだけは必要です。(※画像リンクの先に解説画像あります)
formZ : スクリプトの使い方

ちょっとまとめてみました。
■起動方法
エクステンションメニューの "ユーティリティーの起動..." からスクリプトファイル(.fsl)を選んで実行します。
(※実行すると.fsbという拡張子のファイルが作られますが、これはコンパイル済みのファイルです。
そのままにしておいてください。次ぎに実行するときは、.fslでも.fsbでもどっちでも同じ動作をします。)
■保存場所
スクリプトファイルの置き場所は、formZが入ってるフォルダにある "Script" フォルダ内がデフォルトです。
(※パスの設定さえしてあればどこでもいい...)
■解凍
このブログにアップしてあるスクリプトはほとんどがZip圧縮してあります。
ですが、ブログにアップできるファイル形式に制限があるので、とりあえず.txtにしてあります。
解凍して使ってください。
(※ブラウザによりますが、そのまま開いてしまうと文字化けしたテキスト画面になります...。
その場合は右クリック保存して、デスクトップ上で解凍。)
■注意・その他
・たいていのスクリプトは何かオブジェクトを先に選択しておく必要があります。
・取り消しできないのもあります。ご自分の責任でお使いください。
なんかあっても、作者は責任取りません。
・ここにアップされているものはちゃんと勉強したプロのプログラマーが書いたものではありません。
素人が独学でおぼえたもので、テキトーに書いてます。
例外処理とか書いてませんので、なるべく余計な条件が入らない状態でお使いください...。
・自由に改変していいですが、いいのが出来たら教えてください...。
・スクリプトにはいくつか種類があります。自分が書いたのは"ユーティリティースクリプト" と "コマンドスクリプト" の2つだけです。
"ユーティリティースクリプト" はファイルを選んで実行します。
"コマンドスクリプト" の場合はエクステンションメニューにコマンドが並びます。(ファイル名の頭に "cmnd_" をつけてあります。)
シンボルの一覧を作る

シンボルパレットのアイコンはちょっと小さいので、もっと見やすいカタログ的なのを作ろうと思って、ずらーと並べてみました。スクリプトで。
昔作ったものほどショボイのがよくわかります...。
Symbol_Catalog_zip.txt
ロードされているシンボルを全部並べます。
インターフェースはありません。
配列ピッチとか変えたい人は自分でコードをいじってください...。
はしごのセンターをトレースする

道路をスウィープで作ったとき、後から白線(センターライン)を入れたい思ったことありませんか?
"それ" をスクリプトにしてみました。
といっても完璧なものではないので、運が良ければ成功します...。
注意:
1.はしご状のスウィープオブジェクトが最適。
2.オブジェクトのポイントインデックスを順に拾っていくという仕様なので、ポイントインデックスがキレイに並んでいないと成功しません。
3.編集を重ねたオブジェクトだとインデックスがバラバラになっているので無理...。
使えねー!...。
Trace_midpoint_of_Ladder_zip.txt
RealityServer by mentalimages !

先日、Luminovaというちょっと変わったCG屋さんのプレゼンを見ました。
この会社はさまざまな産業で使われるCGを作っています。
細密に作ったモデルを、独mental images社のRealityServerというレンダリングサーバを使ってリアルタイムレンダリングして、WebベースのAPIと一緒に提供しています。
http://www.luminova.net
http://www.mentalimages.com
ここが普通のCG屋さんと違うのはただのビジュアライズではなく、3Dモデルをもっと様々なシチュエーションで使えるようなサービスを提供しているという点です。
たとえば自動車産業にはモックアップの代わりにリアルタイムでGIレンダリングされたCGを提供しています。
RealityServerによってリアルタイムで色を変えたり、パーツを置き換えたりという検討ができます。
もちろん、モックアップは必須なのですが、たとえば今まで5台作っていたものを1台に出来れば、かるく数億円のコスト削減ができるわけです。
3Dモデルの価値をうまくビジネスに活かしているパターンです。
まあ、RealityServerあってこその商売なんですけどね...。
今回はうちが建築設計事務所ということで、ロンドンのヒースロー空港の新ターミナル5で活用された例を挙げて説明してくれました。
表層だけでなく、構造材や設備配管、果てはボルト・ナットまで入った "オールインワン" の巨大モデルが作られていました。(50GB近いとか...。)
デザインや設計のフォローだけでなく、商業スペースのクライアント誘致や、今はオープン前の従業員教育にも使われています。バックヤードをアニメーション化して、中の通路や休憩場所などをおぼえさせるわけです。
このモデルは空港がオープンした後も、設備のメンテナンスなどにずーと活用されていきます。
つまりここでは3Dモデルは "財産" となるわけです。
簡単にいえばBIMの発展形です。
BIMもそうだけど、"巨大なプロジェクトだからこそできるのでは?" って正直思いましたが、意外とお金は安いそうです。*1
設備投資さえできれば、中小規模のCG屋さんでも似たようなことができるかもと思いました。
たとえばマンションなんかだと設計士や不動産屋さんより、お客さんが欲しがるかもしれないですよね。
モデルを預かっておいて、問い合わせに応じて建材や設備の製作メーカーを調べたり、耐用年数から交換時期を調べることも可能ですし、もちろん、改築・改装時のシミュレーションもできます。
古い青焼きをトレースしてリフォーム用の図面を描いたりする作業を、3Dモデルからはじめることができるようになるかもしれません。
新しい不動産管理のひとつの形式として広まれば、新たなビジネス市場が開きます。
住宅くらいだとコスト的に無理だけど、お施主さんとしては欲しいかもしれないですね。
建築会社とは別に請けて、隅々まで作り込んだ3Dモデルを提供するサービスは "あり" かもしれないです...。
安くRealityServerの力を提供する会社がそのうち日本にも出来るでしょうし、モデルをアップすればWebベースのブラウザでリアルタイムGI+ウォークスルーができるような時代はすぐそこなのかもしれないです。
*1:Luminovaのこのサービス、月単位の契約で提供されています。
規模によりますが、数百万/月 程度ということで、内容を考えると結構安いです。
だいたい "全部入り" の巨大モデルだと、普通のPCじゃ絶対ハンドリングできないし、そのへんのCG屋には作れないはずです...。
(※Luminovaでは完全な64bit環境のもと、インハウスツールとデータバンクを駆使して膨大なデータ量を落とし込み巨大なモデルを作っています。それをRealityServerを使ってリアルタイムレンダリングしています。)
Attach last light

以前に作ったAttach Lightスクリプトを少し改良しました。
ライトのオフセットを数値入力出来るようにしました。
あと、前のはオブジェクト原点に合うようなってましたが、今回は中心にしました。
それと、線分が選ばれているときは、始点と終点にライトの中心と先が合います。
まあ、シンボルにライトを含めればいいだけの話なんですが...。
Attach_Last_Light_zip.txt








