2018年10月21日(日) 00:13 JST

GDLでアニメーション -GDLメモ vol.7

  • 2015年5月 8日(金) 19:57 JST
  • 投稿者:
    ゲストユーザ

GDLでは動画が作れない、そう思っていませんか?こちらの記事ではOpenSCADで組木が組みあがるアニメーションをお見せしました。今回はGDLでのアニメーションについて紹介します。もちろん、決して手軽ではありませんが、ArchiCAD本体とうまくやりとりすることで、GDLスクリプトで動画の作成も可能です。

このアニメーションはArchiCADのフライスルーを使って作っています。ArchiCADでシーンをレンダリングしているので、影やテクスチャなども綺麗に表現できます。詳しくは続きを読むからご覧ください。


ArchiCADではフライスルーを利用してアニメーションを作成します。図面上にカメラを配置すると、カメラ間にカメラパスが定義されます。フライスルーはそのカメラパスを指定されたフレームレートで分割した分だけ移動しながらシーンを作成していきます。それでは、カメラ設定やフライスルーの作成方法を簡単に紹介していきます。


フレイスルーを作成するための準備として、まずカメラの配置、カメラの設定、パスオプションの設定を行います。カメラ設定では位置や太陽光の当て方を、パスオプションではカメラの移動制御やフレームレートなどを設定できます。今回は、注視点が固定されているので"目標点"をポリゴンに、カメラを滑らかに動かしたいのでカメラ位置でのパスのスムージング及びパスをベジェ曲線に設定します。


カメラの設定が終わったら、スクリプトをフライスルー仕様に変えていきます。GDL講習会の記事で掲載したものと変わっている部分は赤く表記しています。組みあがるアニメーションのため、フレーム番号が格納されているグローバル変数のGLOB_FRAME_NRを用いてパーツを移動させていきます。この例では、1フレームごとの移動量とフレーム番号からパーツがどれだけ動いているかを算出し、IF文でそれを評価することで動かすパーツを区別しています。

d = 1	!! 部材厚み
w = 2*d	!! 部材高さ
a = d/2	!! 部材に空く穴のオフセット(高さ)
x = 2

ofset = x + w	!!スタート位置
path = 11	!!カメラパスの数
frame = path*10	!!フレームの総数

delta = 2*ofset /frame	!!1フレームでの移動量

IF (glob_frame_nr-1)*delta < ofset - 2*a THEN
	parts1Pos = ofset	!!parts1のz座標
	parts2Pos = ofset  - (glob_frame_nr-1)*delta	!!!!parts2のx座標
ELSE
	IF ofset - 2*a <= (glob_frame_nr-1)*delta AND (glob_frame_nr-1)*delta < 2*ofset - 2*a THEN
		parts1Pos = (2*ofset - 2*a) - (glob_frame_nr-1)*delta
		parts2Pos = 2*a
	ELSE
		IF 2*ofset - 2*a <= (glob_frame_nr-1)*delta AND (glob_frame_nr-1)*delta < 2*ofset THEN
			parts1Pos = 0
			parts2Pos = 2*ofset - (glob_frame_nr-1)*delta
		ELSE
			parts1Pos = 0
			parts2Pos = 0
		ENDIF
	ENDIF
ENDIF


!!!穴が閉じている部材
ROTY 90
ADDZ -w/4
PRISM_ 10, d,
	-(x+w/2), -w/2,15,
	-(x+w/2), w/2,15,
	x+w/2, w/2, 15,
	x+w/2, -w/2, 15,
	-(x+w/2), -w/2,-1,
	-w/2, -d/2, 15,
	-w/2, d/2, 15,
	w/2, d/2, 15,
	w/2, -d/2, 15,
	-w/2, -d/2, -1

DEL 2

!!!コの字の部材(parts1)
ROTZ 90
ADDZ - w/4 + parts1Pos 
PRISM 12, d,
	-(x+w/2), -w/2,
	-(x+w/2), w/2,
	-d/2, w/2,
	-d/2, d/2,
	-w/2, d/2,
	-w/2, -d/2,
	w/2, -d/2,	
	w/2, d/2,
	d/2, d/2,
	d/2, w/2,
	x+w/2, w/2,
	x+w/2, -w/2 

DEL 2

!!!L字の穴の部材(parts2)
ROTX 90
ADDZ -w/4
ADDX parts2Pos

PRISM 10, d,
	-(x+w/2), -w/2,
	-(x+w/2), w/2,
	-a, w/2,
	-a, -d/2,								
	2*a, -d/2,
	2*a, d/2,
	0, d/2,
	0, w/2,
	x+w/2, w/2,
	x+w/2, -w/2

DEL TOP


準備が整ったら、[ドキュメント] ―> [レンダリング] ―> [フライスルーの作成]から作成します。このアニメーションでは、レンダリングウィンドウ、フレームごとにモデルを再構築、フレームレートを10に設定します。レンダリングウィンドウにすると、フライスルー作成に時間がかかりますが、今回は簡単な形状なのでこちらを選択します。また、フレームごとにモデルを再構築にチェックを入れ、フレーム番号をモデルの座標に反映させます。最後にファイル形式を指定したら保存を押すとレンダリングが開始されます。

images

以上でGDLでアニメーションが完成します。今回はカメラがモデルの周囲を回るようにしましたが、カメラ位置を一定にするとOpenSCADで見たようなアニメーションを作成することもできます。普段はモデルを作るだけで終わってしまいますが、このようなアニメーションを作って遊んでみたりするのも楽しいですね。