SlideShare a Scribd company logo
http://www.kke.co.jp
株式会社 構造計画研究所
〒164-0012 東京都中野区本町 4-38-13 創造工学部 TEL:03-5342-1125 FAX:03-5342-1225
Copyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
09. artisocレシピブック
3Dモデルを作成しよう
本ドキュメントについてのご質問、『複雑系勉強会』の
お問合せは、下記までご連絡ください。
(株)構造計画研究所
社会デザイン・マーケティング部
artisocマーケティング担当 玉田
Tel: 052-222-8461
E-mail: tamada@kke.co.jp
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
2
ボイドモデルを3D化しよう
ボイドモデルは鳥の群れのシミュレーションです。
artisocをインストールすると、ボイドモデルがサンプルとして付いてきます。
サンプルで群れの行動は確認できますが、二次元平面上を動くため、鳥っぽくあ
りません。
そこで、サンプルモデルを3Dモデル化する手順を説明します。
・ボイドモデルの拡張
① ボイドモデルとは?
② 空間を三次元にする
③ 3次元空間を出力する
④ いろいろな視点から三次元空間を見る
⑤ 建物に高さを与える
⑥ 鳥に高さを与える
⑦ 鳥の視点で飛んでみる
⑧ カメラ位置を指定する
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
① ボイドモデルとは?
簡単なアルゴリズムで鳥の群れをシミュレーションしたい
ボイド(Boids)は、アメリカのアニメーション・プログラマ、クレイグ・レイノルズが考案・作製した人工
生命シミュレーションプログラムである。名称は「鳥もどき(bird-oid)」から取られている。
出典: https://ja.wikipedia.org/wiki/ボイド_(人工生命)
ボイドモデルの3つの行動ルール
1. 分離(Separation)
鳥オブジェクトが他の鳥オブジェクトとぶつからないように
距離をとる。
2. 整列(Alignment)
鳥オブジェクトが他の鳥オブジェクトと概ね同じ方向に
飛ぶように速度と方向を合わせる。
3. 結合(Cohesion)
鳥オブジェクトが他の鳥オブジェクトが集まっている群れ
の中心方向へ向かうように方向を変える。
3
ボイドモデル (▲が鳥、■が建物)
09-1.model ※artisoc同梱のBoid.modelと同じ
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
② 空間を三次元にする
空間(country)のプロパティを開き、「3D表示対応」にチェックを入れます。
ツリーにて、「bird」「barrier」の変数として、「Z」「Angle」が追加されます。
「Z」は高さ方向の座標です。「X」「Y」は二次元座標のときと同じく横、縦方向の座標です。
「Angle」はエージェントの上下方向の傾きです。
カメラの向きを指定するときに利用し、詳しくは後述します。
4
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
③ 三次元空間を出力する
設定メニューの「出力設定」にて、「3Dマップ」を追加します。
3Dマップ設定ダイアログが表示されるので、「3D出力空間リスト」の
「追加」をクリックします。
マップ名: 3Dマップ
3D出力空間設定ダイアログが表示されるので、「3D出力エージェ
ントリスト」の「追加」をクリックします。
名称: 3Dマップ
罫線表示: ON
3D出力エージェント設定ダイアログが表示されるので、
「bird」「barrier」を追加します。
名称: bird
エージェント: bird
表示オブジェクト: 三角柱
表示色: 赤
名称: barrier
エージェント: barrier
表示オブジェクト: 四角柱
表示色: 緑
5
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
④ いろいろな視点から三次元空間を見る
シミュレーションを実行します。09-2.model
初期状態では、3Dマップはやや遠くに表示されます。
<マウス操作>
左ボタンを押しながら、前後左右に移動
右ボタンを押しながら、上下に移動
中ボタンを押しながら、アングルを上下に移動
<キーボード操作>
↑キー: 上方向を見る(アングル+)
↓キー: 下方向を見る(アングル-)
←キー: 左方向を見る(Direction-)
→キー: 右方向を見る(Direction+)
Sキー: X軸方向に-
Dキー: X軸方向に+
Eキー: Z軸方向に+
Xキー: Z軸方向に-
Wキー: Y軸方向に+
Qキー: Y軸方向に-
6
SPACEキー:Y軸方向に+[高速]
RETURNキー:初期位置に戻る 鳥の動きを近づいて見ることができる
初期位置はやや遠い視点
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
⑤-1 建物に高さを与える
シミュレーションを実行すると、三次元で表示できるものの、高さを与えてないので(Z=0)、
鳥が地面を這うような動きになります。
まずは、建物に高さを与えます。
建物の高さ: 1~10
ツリーの「Universe」を右クリックして、「ルールエディタ」を選択します。
7
Univ_Init{
Dim Total as Agtset
Dim One as Agt
Dim Two as Agt
Dim Three as Agt
Dim i as Integer
Dim j as Double
Dim k As Integer
Dim baseX As Integer
Dim baseY As Integer
Dim baseZ As Integer
・・・建物の位置と高さを格納するための変数を定義する
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
⑤-2 建物に高さを与える
8
For i = 0 to 20
baseX = Int(rnd()*40) + 6
baseY = Int(rnd()*40) + 6
baseZ = CInt(Rnd() * 10) + 1
j = Int(rnd()*2)
For k=0 To baseZ - 1
One = createagt(Universe.country.barrier)
One.X = baseX
One.Y = baseY
One.Z = k
Two = createagt(Universe.country.barrier)
Two.X = One.X + j
Two.Y = One.Y + 1 - j
Two.Z = k
Three = createagt(Universe.country.barrier)
Three.X = One.X + j/2
Three.Y = One.Y + (1 - j)/2
Three.Z = k
Next k
Next i
}
・・・建物の高さを1~10でランダムに決める
・・・建物の高さまで
barrierを積み上げる
建物の高さが確認できる
09-3.model
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
⑥-1 鳥に高さを与える
次に、鳥を空に飛ばします。
鳥の高さ: 1~5
ツリーの「bird」を右クリックして、「ルールエディタ」を選択します。
9
Agt_Init{
My.X = rnd()*50
My.Y = rnd()*50
My.Z = CInt(Rnd() * 5) + 1
My.destin = rnd()*360
My.speed = 0.2 + rnd()*0.3
}
・・・鳥の高さを1~5でランダムに決める
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
⑥-2 鳥に高さを与える
Agt_Step {
※省略
For Each obj in Temp
T = GetDirection(My.X, My.Y, obj.X, obj.Y, Universe.country)
T = (T - My.Direction + 360) mod 360
If 30 > T or 330 < T then
If obj.Z - 1 <= My.Z Or My.Z <= obj.Z + 1 Then
AddAgt(Objset, obj)
End If
End if
Next obj
If 0 < CountAgtset(Objset) then
obj = GetAgt(Objset, Int(rnd()*CountAgtset(Objset)))
If My.speed < obj.speed then
My.destin = obj.destin
My.speed = obj.speed
My.Z = obj.Z
End if
・・・自分の高さ±1の鳥のみ
判定対象とする
・・・周りの鳥の高さに合わせる
10
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
⑥-3 鳥に高さを与える
Elseif 0 == CountAgtset(Temp) then
My.destin = My.destin + rnd()*30 - 15
My.speed = 0.2 + rnd()*0.3
change_Z()
End if
※省略
}
・・・周りに鳥がいないときは高さを変える
11
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
⑥-4 鳥に高さを与える
Sub change_Z()
{
If Rnd() < 0.1 Then
If Rnd() < 0.5 Then
My.Z = My.Z - 1
Else
My.Z = My.Z + 1
End If
End If
If My.Z < 1 Then
My.Z = 1
ElseIf My.Z > 5 Then
My.Z = 5
End If
}
・・・確率0.1で、上下方向に移動する
12
・・・鳥の高さ(1~5)を
チェックする
建物の高さが確認できる
09-4.model
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
⑦ 鳥の視点で飛んでみる
鳥が空を飛ぶようになりましたが、手動で視点を移動させるのは面倒です。
鳥の視点でカメラを自動で切り替えます。
ツリーの「Universe」を右クリックして、
「変数の追加」を選択します。
変数名: CameraPointer:エージェント型
ツリーの「Universe」を右クリックして、「ルールエディタ」を選択します。
設定メニューの「出力設定」から「3Dマップ」の「編集」を選択します。
カメラ位置指定: 指定エージェント位置: CameraPointer
シミュレーションを実行します。09-5.model
鳥の視点で飛ぶことができます。
13
Univ_Init{
※省略
Universe.CameraPointer = Universe.country.bird(0)
}
・・・鳥(ID=0)の視点をカメラ位置とする
※カメラ位置はUniverse直下のエージェント型変数が選択できます。
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
⑧-1 カメラ位置を指定する
鳥は視点だとせわしなく画面が切り替わってしまいます。
カメラ位置をいくつか指定して、切り替えられるようにします。
ツリーの「country」を右クリックして、「エージェント型の追加」を選択します。
エージェント型名: Camera
生成エージェント数: 1
ツリーの「Universe」を右クリックして、「変数の追加」を選択します。
変数名: CameraPosition
変数の型: 文字列型
ツリーの「Universe」を右クリックして、「ルールエディタ」を選択します。
設定メニューの「コントロールパネル設定」を選択し「追加」をクリックします。
コントロール名: カメラ位置
設定対象: CameraPosition
インタフェース: ドロップダウンリスト:リスト項目: 真上,ななめ,横
14
Univ_Init{
※省略
Universe.CameraPointer = Universe.country.Camera(0)
}
・・・カメラ(ID=0)をカメラ位置とする
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
⑧-2 カメラ位置を指定する
ツリーの「Camera」を右クリックして、「ルールエディタ」を選択します。
15
Agt_Step{
If StrComp(Universe.CameraPosition, "真上") == 0 Then
update_camera(25,10,80,90,80)
ElseIf StrComp(Universe.CameraPosition, "ななめ") == 0 Then
update_camera(25,-20,20,90,30)
ElseIf StrComp(Universe.CameraPosition, "横") == 0 Then
update_camera(25,-30,1,90,0)
End If
}
Sub update_camera(oneX As Double, oneY As Double, oneZ As Double, oneDirection
As Double, oneAngle As Double)
{
My.X = oneX
My.Y = oneY
My.Z = oneZ
My.Direction = oneDirection
My.Angle = oneAngle
}
・・・コントロールパネルで指定した
視点に切り替える
・・・カメラの状態を更新する
http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
⑧-3 カメラ位置を指定する
シミュレーションを実行します。09-5.model
コントロールパネルで「真上」「ななめ」「横」の視点に切り替えられます。
update_camera関数に与えている引数を変更してみて、好きな視点を見つけてください。
16
真上 ななめ 横

More Related Content

What's hot

02. artisocレシピブック 描画ツールを使って道路を作成し、歩くモデルをつくろう
02. artisocレシピブック 描画ツールを使って道路を作成し、歩くモデルをつくろう02. artisocレシピブック 描画ツールを使って道路を作成し、歩くモデルをつくろう
02. artisocレシピブック 描画ツールを使って道路を作成し、歩くモデルをつくろう
Masaki Tamada
 
かんたんベジェ曲線
かんたんベジェ曲線かんたんベジェ曲線
かんたんベジェ曲線
Yu(u)ki IWABUCHI
 
G2o
G2oG2o
GREE Creators' Meetup #2 session B Manryo
GREE Creators' Meetup #2 session B ManryoGREE Creators' Meetup #2 session B Manryo
GREE Creators' Meetup #2 session B Manryo
Shiho Manryo
 
2017 0721 サーバレスアーキテクチャを勉強する会
2017 0721 サーバレスアーキテクチャを勉強する会2017 0721 サーバレスアーキテクチャを勉強する会
2017 0721 サーバレスアーキテクチャを勉強する会
t-moritsugu
 
ROSでロボット開発中
ROSでロボット開発中ROSでロボット開発中
ROSでロボット開発中
ssuser2144b2
 

What's hot (7)

02. artisocレシピブック 描画ツールを使って道路を作成し、歩くモデルをつくろう
02. artisocレシピブック 描画ツールを使って道路を作成し、歩くモデルをつくろう02. artisocレシピブック 描画ツールを使って道路を作成し、歩くモデルをつくろう
02. artisocレシピブック 描画ツールを使って道路を作成し、歩くモデルをつくろう
 
かんたんベジェ曲線
かんたんベジェ曲線かんたんベジェ曲線
かんたんベジェ曲線
 
G2o
G2oG2o
G2o
 
GREE Creators' Meetup #2 session B Manryo
GREE Creators' Meetup #2 session B ManryoGREE Creators' Meetup #2 session B Manryo
GREE Creators' Meetup #2 session B Manryo
 
2017 0721 サーバレスアーキテクチャを勉強する会
2017 0721 サーバレスアーキテクチャを勉強する会2017 0721 サーバレスアーキテクチャを勉強する会
2017 0721 サーバレスアーキテクチャを勉強する会
 
Code iq interpretation_futatsugi
Code iq interpretation_futatsugiCode iq interpretation_futatsugi
Code iq interpretation_futatsugi
 
ROSでロボット開発中
ROSでロボット開発中ROSでロボット開発中
ROSでロボット開発中
 

Similar to 09. artisocレシピブック 3Dモデルを作成しよう

20131206 shina monolab#5 - Autodesk's Design Tools for MAKERS
20131206 shina monolab#5 - Autodesk's Design Tools for MAKERS20131206 shina monolab#5 - Autodesk's Design Tools for MAKERS
20131206 shina monolab#5 - Autodesk's Design Tools for MAKERS
Yutaka Shiozawa
 
AWS歴2週間で IoT に挑戦してみた。
AWS歴2週間で IoT に挑戦してみた。AWS歴2週間で IoT に挑戦してみた。
AWS歴2週間で IoT に挑戦してみた。
Shogo Matsuda
 
動的計画法の並列化
動的計画法の並列化動的計画法の並列化
動的計画法の並列化
Proktmr
 
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみたIoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
Koichiro Oki
 
最適化計算の概要まとめ
最適化計算の概要まとめ最適化計算の概要まとめ
最適化計算の概要まとめ
Yuichiro MInato
 
3D Printing 2016 レポート
3D Printing 2016 レポート3D Printing 2016 レポート
3D Printing 2016 レポート
Teruki Obara
 
ロボコンの為のFusion360講座 #CAD編
ロボコンの為のFusion360講座 #CAD編ロボコンの為のFusion360講座 #CAD編
ロボコンの為のFusion360講座 #CAD編
電大 ヒュー研
 
Si2017 チームイエスマン 発表スライド
Si2017 チームイエスマン 発表スライドSi2017 チームイエスマン 発表スライド
Si2017 チームイエスマン 発表スライド
Robotics Engineer
 

Similar to 09. artisocレシピブック 3Dモデルを作成しよう (8)

20131206 shina monolab#5 - Autodesk's Design Tools for MAKERS
20131206 shina monolab#5 - Autodesk's Design Tools for MAKERS20131206 shina monolab#5 - Autodesk's Design Tools for MAKERS
20131206 shina monolab#5 - Autodesk's Design Tools for MAKERS
 
AWS歴2週間で IoT に挑戦してみた。
AWS歴2週間で IoT に挑戦してみた。AWS歴2週間で IoT に挑戦してみた。
AWS歴2週間で IoT に挑戦してみた。
 
動的計画法の並列化
動的計画法の並列化動的計画法の並列化
動的計画法の並列化
 
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみたIoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
 
最適化計算の概要まとめ
最適化計算の概要まとめ最適化計算の概要まとめ
最適化計算の概要まとめ
 
3D Printing 2016 レポート
3D Printing 2016 レポート3D Printing 2016 レポート
3D Printing 2016 レポート
 
ロボコンの為のFusion360講座 #CAD編
ロボコンの為のFusion360講座 #CAD編ロボコンの為のFusion360講座 #CAD編
ロボコンの為のFusion360講座 #CAD編
 
Si2017 チームイエスマン 発表スライド
Si2017 チームイエスマン 発表スライドSi2017 チームイエスマン 発表スライド
Si2017 チームイエスマン 発表スライド
 

More from Masaki Tamada

artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろうartisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
Masaki Tamada
 
【MASの教材】ホタルの光
【MASの教材】ホタルの光【MASの教材】ホタルの光
【MASの教材】ホタルの光
Masaki Tamada
 
【MASの教材】シェリングの「分居モデル」
【MASの教材】シェリングの「分居モデル」【MASの教材】シェリングの「分居モデル」
【MASの教材】シェリングの「分居モデル」
Masaki Tamada
 
【MASの教材】水槽の中のプランクトン
【MASの教材】水槽の中のプランクトン【MASの教材】水槽の中のプランクトン
【MASの教材】水槽の中のプランクトン
Masaki Tamada
 
【MASの教材】病気の流行
【MASの教材】病気の流行【MASの教材】病気の流行
【MASの教材】病気の流行
Masaki Tamada
 
【MASの教材】ターミナル駅の通勤客の流れ
【MASの教材】ターミナル駅の通勤客の流れ【MASの教材】ターミナル駅の通勤客の流れ
【MASの教材】ターミナル駅の通勤客の流れ
Masaki Tamada
 
【MASの教材】立ち話モデル 人間関係が見えるように
【MASの教材】立ち話モデル 人間関係が見えるように【MASの教材】立ち話モデル 人間関係が見えるように
【MASの教材】立ち話モデル 人間関係が見えるように
Masaki Tamada
 
【MASの教材】飛ぶ鳥モデルからボイドモデルへ
【MASの教材】飛ぶ鳥モデルからボイドモデルへ【MASの教材】飛ぶ鳥モデルからボイドモデルへ
【MASの教材】飛ぶ鳥モデルからボイドモデルへ
Masaki Tamada
 
第2回 artisoc Cloud勉強会
第2回 artisoc Cloud勉強会第2回 artisoc Cloud勉強会
第2回 artisoc Cloud勉強会
Masaki Tamada
 
第1回 artisoc Cloud勉強会
第1回 artisoc Cloud勉強会第1回 artisoc Cloud勉強会
第1回 artisoc Cloud勉強会
Masaki Tamada
 

More from Masaki Tamada (10)

artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろうartisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
artisoc Cloudレシピブック_06. 描画ツール2を使って歩くモデルをつくろう
 
【MASの教材】ホタルの光
【MASの教材】ホタルの光【MASの教材】ホタルの光
【MASの教材】ホタルの光
 
【MASの教材】シェリングの「分居モデル」
【MASの教材】シェリングの「分居モデル」【MASの教材】シェリングの「分居モデル」
【MASの教材】シェリングの「分居モデル」
 
【MASの教材】水槽の中のプランクトン
【MASの教材】水槽の中のプランクトン【MASの教材】水槽の中のプランクトン
【MASの教材】水槽の中のプランクトン
 
【MASの教材】病気の流行
【MASの教材】病気の流行【MASの教材】病気の流行
【MASの教材】病気の流行
 
【MASの教材】ターミナル駅の通勤客の流れ
【MASの教材】ターミナル駅の通勤客の流れ【MASの教材】ターミナル駅の通勤客の流れ
【MASの教材】ターミナル駅の通勤客の流れ
 
【MASの教材】立ち話モデル 人間関係が見えるように
【MASの教材】立ち話モデル 人間関係が見えるように【MASの教材】立ち話モデル 人間関係が見えるように
【MASの教材】立ち話モデル 人間関係が見えるように
 
【MASの教材】飛ぶ鳥モデルからボイドモデルへ
【MASの教材】飛ぶ鳥モデルからボイドモデルへ【MASの教材】飛ぶ鳥モデルからボイドモデルへ
【MASの教材】飛ぶ鳥モデルからボイドモデルへ
 
第2回 artisoc Cloud勉強会
第2回 artisoc Cloud勉強会第2回 artisoc Cloud勉強会
第2回 artisoc Cloud勉強会
 
第1回 artisoc Cloud勉強会
第1回 artisoc Cloud勉強会第1回 artisoc Cloud勉強会
第1回 artisoc Cloud勉強会
 

Recently uploaded

NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 

Recently uploaded (6)

NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 

09. artisocレシピブック 3Dモデルを作成しよう

  • 1. http://www.kke.co.jp 株式会社 構造計画研究所 〒164-0012 東京都中野区本町 4-38-13 創造工学部 TEL:03-5342-1125 FAX:03-5342-1225 Copyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 09. artisocレシピブック 3Dモデルを作成しよう 本ドキュメントについてのご質問、『複雑系勉強会』の お問合せは、下記までご連絡ください。 (株)構造計画研究所 社会デザイン・マーケティング部 artisocマーケティング担当 玉田 Tel: 052-222-8461 E-mail: tamada@kke.co.jp
  • 2. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. 2 ボイドモデルを3D化しよう ボイドモデルは鳥の群れのシミュレーションです。 artisocをインストールすると、ボイドモデルがサンプルとして付いてきます。 サンプルで群れの行動は確認できますが、二次元平面上を動くため、鳥っぽくあ りません。 そこで、サンプルモデルを3Dモデル化する手順を説明します。 ・ボイドモデルの拡張 ① ボイドモデルとは? ② 空間を三次元にする ③ 3次元空間を出力する ④ いろいろな視点から三次元空間を見る ⑤ 建物に高さを与える ⑥ 鳥に高さを与える ⑦ 鳥の視点で飛んでみる ⑧ カメラ位置を指定する
  • 3. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ① ボイドモデルとは? 簡単なアルゴリズムで鳥の群れをシミュレーションしたい ボイド(Boids)は、アメリカのアニメーション・プログラマ、クレイグ・レイノルズが考案・作製した人工 生命シミュレーションプログラムである。名称は「鳥もどき(bird-oid)」から取られている。 出典: https://ja.wikipedia.org/wiki/ボイド_(人工生命) ボイドモデルの3つの行動ルール 1. 分離(Separation) 鳥オブジェクトが他の鳥オブジェクトとぶつからないように 距離をとる。 2. 整列(Alignment) 鳥オブジェクトが他の鳥オブジェクトと概ね同じ方向に 飛ぶように速度と方向を合わせる。 3. 結合(Cohesion) 鳥オブジェクトが他の鳥オブジェクトが集まっている群れ の中心方向へ向かうように方向を変える。 3 ボイドモデル (▲が鳥、■が建物) 09-1.model ※artisoc同梱のBoid.modelと同じ
  • 4. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ② 空間を三次元にする 空間(country)のプロパティを開き、「3D表示対応」にチェックを入れます。 ツリーにて、「bird」「barrier」の変数として、「Z」「Angle」が追加されます。 「Z」は高さ方向の座標です。「X」「Y」は二次元座標のときと同じく横、縦方向の座標です。 「Angle」はエージェントの上下方向の傾きです。 カメラの向きを指定するときに利用し、詳しくは後述します。 4
  • 5. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ③ 三次元空間を出力する 設定メニューの「出力設定」にて、「3Dマップ」を追加します。 3Dマップ設定ダイアログが表示されるので、「3D出力空間リスト」の 「追加」をクリックします。 マップ名: 3Dマップ 3D出力空間設定ダイアログが表示されるので、「3D出力エージェ ントリスト」の「追加」をクリックします。 名称: 3Dマップ 罫線表示: ON 3D出力エージェント設定ダイアログが表示されるので、 「bird」「barrier」を追加します。 名称: bird エージェント: bird 表示オブジェクト: 三角柱 表示色: 赤 名称: barrier エージェント: barrier 表示オブジェクト: 四角柱 表示色: 緑 5
  • 6. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ④ いろいろな視点から三次元空間を見る シミュレーションを実行します。09-2.model 初期状態では、3Dマップはやや遠くに表示されます。 <マウス操作> 左ボタンを押しながら、前後左右に移動 右ボタンを押しながら、上下に移動 中ボタンを押しながら、アングルを上下に移動 <キーボード操作> ↑キー: 上方向を見る(アングル+) ↓キー: 下方向を見る(アングル-) ←キー: 左方向を見る(Direction-) →キー: 右方向を見る(Direction+) Sキー: X軸方向に- Dキー: X軸方向に+ Eキー: Z軸方向に+ Xキー: Z軸方向に- Wキー: Y軸方向に+ Qキー: Y軸方向に- 6 SPACEキー:Y軸方向に+[高速] RETURNキー:初期位置に戻る 鳥の動きを近づいて見ることができる 初期位置はやや遠い視点
  • 7. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ⑤-1 建物に高さを与える シミュレーションを実行すると、三次元で表示できるものの、高さを与えてないので(Z=0)、 鳥が地面を這うような動きになります。 まずは、建物に高さを与えます。 建物の高さ: 1~10 ツリーの「Universe」を右クリックして、「ルールエディタ」を選択します。 7 Univ_Init{ Dim Total as Agtset Dim One as Agt Dim Two as Agt Dim Three as Agt Dim i as Integer Dim j as Double Dim k As Integer Dim baseX As Integer Dim baseY As Integer Dim baseZ As Integer ・・・建物の位置と高さを格納するための変数を定義する
  • 8. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ⑤-2 建物に高さを与える 8 For i = 0 to 20 baseX = Int(rnd()*40) + 6 baseY = Int(rnd()*40) + 6 baseZ = CInt(Rnd() * 10) + 1 j = Int(rnd()*2) For k=0 To baseZ - 1 One = createagt(Universe.country.barrier) One.X = baseX One.Y = baseY One.Z = k Two = createagt(Universe.country.barrier) Two.X = One.X + j Two.Y = One.Y + 1 - j Two.Z = k Three = createagt(Universe.country.barrier) Three.X = One.X + j/2 Three.Y = One.Y + (1 - j)/2 Three.Z = k Next k Next i } ・・・建物の高さを1~10でランダムに決める ・・・建物の高さまで barrierを積み上げる 建物の高さが確認できる 09-3.model
  • 9. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ⑥-1 鳥に高さを与える 次に、鳥を空に飛ばします。 鳥の高さ: 1~5 ツリーの「bird」を右クリックして、「ルールエディタ」を選択します。 9 Agt_Init{ My.X = rnd()*50 My.Y = rnd()*50 My.Z = CInt(Rnd() * 5) + 1 My.destin = rnd()*360 My.speed = 0.2 + rnd()*0.3 } ・・・鳥の高さを1~5でランダムに決める
  • 10. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ⑥-2 鳥に高さを与える Agt_Step { ※省略 For Each obj in Temp T = GetDirection(My.X, My.Y, obj.X, obj.Y, Universe.country) T = (T - My.Direction + 360) mod 360 If 30 > T or 330 < T then If obj.Z - 1 <= My.Z Or My.Z <= obj.Z + 1 Then AddAgt(Objset, obj) End If End if Next obj If 0 < CountAgtset(Objset) then obj = GetAgt(Objset, Int(rnd()*CountAgtset(Objset))) If My.speed < obj.speed then My.destin = obj.destin My.speed = obj.speed My.Z = obj.Z End if ・・・自分の高さ±1の鳥のみ 判定対象とする ・・・周りの鳥の高さに合わせる 10
  • 11. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ⑥-3 鳥に高さを与える Elseif 0 == CountAgtset(Temp) then My.destin = My.destin + rnd()*30 - 15 My.speed = 0.2 + rnd()*0.3 change_Z() End if ※省略 } ・・・周りに鳥がいないときは高さを変える 11
  • 12. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ⑥-4 鳥に高さを与える Sub change_Z() { If Rnd() < 0.1 Then If Rnd() < 0.5 Then My.Z = My.Z - 1 Else My.Z = My.Z + 1 End If End If If My.Z < 1 Then My.Z = 1 ElseIf My.Z > 5 Then My.Z = 5 End If } ・・・確率0.1で、上下方向に移動する 12 ・・・鳥の高さ(1~5)を チェックする 建物の高さが確認できる 09-4.model
  • 13. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ⑦ 鳥の視点で飛んでみる 鳥が空を飛ぶようになりましたが、手動で視点を移動させるのは面倒です。 鳥の視点でカメラを自動で切り替えます。 ツリーの「Universe」を右クリックして、 「変数の追加」を選択します。 変数名: CameraPointer:エージェント型 ツリーの「Universe」を右クリックして、「ルールエディタ」を選択します。 設定メニューの「出力設定」から「3Dマップ」の「編集」を選択します。 カメラ位置指定: 指定エージェント位置: CameraPointer シミュレーションを実行します。09-5.model 鳥の視点で飛ぶことができます。 13 Univ_Init{ ※省略 Universe.CameraPointer = Universe.country.bird(0) } ・・・鳥(ID=0)の視点をカメラ位置とする ※カメラ位置はUniverse直下のエージェント型変数が選択できます。
  • 14. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ⑧-1 カメラ位置を指定する 鳥は視点だとせわしなく画面が切り替わってしまいます。 カメラ位置をいくつか指定して、切り替えられるようにします。 ツリーの「country」を右クリックして、「エージェント型の追加」を選択します。 エージェント型名: Camera 生成エージェント数: 1 ツリーの「Universe」を右クリックして、「変数の追加」を選択します。 変数名: CameraPosition 変数の型: 文字列型 ツリーの「Universe」を右クリックして、「ルールエディタ」を選択します。 設定メニューの「コントロールパネル設定」を選択し「追加」をクリックします。 コントロール名: カメラ位置 設定対象: CameraPosition インタフェース: ドロップダウンリスト:リスト項目: 真上,ななめ,横 14 Univ_Init{ ※省略 Universe.CameraPointer = Universe.country.Camera(0) } ・・・カメラ(ID=0)をカメラ位置とする
  • 15. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ⑧-2 カメラ位置を指定する ツリーの「Camera」を右クリックして、「ルールエディタ」を選択します。 15 Agt_Step{ If StrComp(Universe.CameraPosition, "真上") == 0 Then update_camera(25,10,80,90,80) ElseIf StrComp(Universe.CameraPosition, "ななめ") == 0 Then update_camera(25,-20,20,90,30) ElseIf StrComp(Universe.CameraPosition, "横") == 0 Then update_camera(25,-30,1,90,0) End If } Sub update_camera(oneX As Double, oneY As Double, oneZ As Double, oneDirection As Double, oneAngle As Double) { My.X = oneX My.Y = oneY My.Z = oneZ My.Direction = oneDirection My.Angle = oneAngle } ・・・コントロールパネルで指定した 視点に切り替える ・・・カメラの状態を更新する
  • 16. http://www.kke.co.jpCopyright © 2016 KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved. ⑧-3 カメラ位置を指定する シミュレーションを実行します。09-5.model コントロールパネルで「真上」「ななめ」「横」の視点に切り替えられます。 update_camera関数に与えている引数を変更してみて、好きな視点を見つけてください。 16 真上 ななめ 横