3D タイル
編集権限のあるチーム管理者が使用できます。
概要
3DCG による時系列データの可視化 UI です。
例)
- 開閉センサの開 (1)/閉 (0) に応じてドアの 3DCG を 90 度回転させる。
- 温度センサが 28 ℃以上のとき部屋の色を赤く表示する。
動作に必要なファイル
- 3D モデルファイル
- 3D 設定ファイル
3D モデルファイル
3D モデルファイルの対応形式は以下のとおりです。
- COLLADA ファイル (*.dae)
- Google Earth ファイル (*.kmz)
- glTF 2.0 ファイル (*.gltf)
- glTF 2.0 binary ファイル (*.glb)
Blender などの 3D モデリングツールを使ってエクスポートできます。
3D モデリングの注意点
Blender などのツールで 3D モデリングをする際の注意点について説明します。
3D モデルのポリゴンデータは、複数のノードのツリーで構成されています。
例)
- House
- LivingRoom
- Door1
- Door2
- TV
- Table
- Chair1
- Chair2
- LivingRoom
RealBoard は時系列データのポイントとノードを関連付け、時系列データの変化に合わせてノードを移動・回転・拡大縮小するといったアニメーション機能を提供します。 3D 設定ファイル上で、アニメーション対象のノード名を指定する必要があります。
- 例:開閉センサのポイント値が 0 から 1 に変化したとき、ノード Door1 を X 方向に 100 移動
ポリゴンを適切なノード単位に分割し、わかりやすいノード名を命名することを推奨します。
3D 設定ファイル
時系列データと 3DCG をマッピングするための設定ファイルです。 ファイルは JSON 形式のテキストファイルです。 カメラ位置、背景色、アニメーションなどの設定を記述します。
{
"camera": { 省略 ... },
"clearColor": "909090",
"animations": [ 省略 ... ],
"messages": [ 省略 ... ],
"staticMessages": [ 省略 ... ]
}
以下、3D 設定ファイルのフォーマットについて説明します。
camera
カメラ設定は 3D モデルの見え方に影響します。 3D モデルをどこから撮影してどれくらいの範囲を 2D キャンバスに描画するかを決めます。 オブジェクト型 で記述します。省略可能です。
"camera": {
"position": { "x": 0, "y": 0, "z": 0 },
"target": { "x": 0, "y": 10, "z": 0 },
"fov": 50,
"near": 0.1,
"far": 2000
}
項目 | 内容 |
---|---|
position | カメラ位置の XYZ 座標を表す オブジェクト型 です。 座標は 数値型 で記述します。 3Dモデルをどの視点から見るかを決めます。3D モデルに近ければ大きく、遠ければ小さく見えます。 デフォルトは 3D モデルの中心座標からY軸方向上部にずらした位置になります。3D タイル編集ページでカメラ位置の 3D 座標を確認できます。 初期値を変えたい場合、編集ページの内容を設定ファイルにコピー&ペーストしてください。 |
target | ターゲットの XYZ 座標を表す オブジェクト型 です。 座標は 数値型 で記述します。 カメラ位置からどの方向を見るかを決めます。基本的に 3D モデル内から適当な位置を選択します。 デフォルトは 3D モデルの中心座標になります。3D タイル編集ページでターゲットの 3D 座標を確認できます。 初期値を変えたい場合、編集ページの内容を設定ファイルにコピー&ペーストしてください。 |
fov | カメラの視野角(度単位)を 数値型 で記述します。 デフォルトは 50 です。 |
near | カメラ前方面の位置を表します。数値型 で記述します。 有効な値は 0 より大きい数値です。 デフォルトは 0.1 です。 |
far | カメラ後方面の位置を表します。数値型 で記述します。 有効な値は 0 より大きい数値です。 デフォルトは 2000 です。 |
near と far はカメラが撮影する範囲を決めるパラメータです。 near から far までが撮影され 2D キャンバス上に描画されます。
3D モデルによっては寸法が小さすぎて撮影範囲に入らないケースがあります。その場合は near を小さくして前方面をカメラに近づけてください。
clearColor
背景色の RGB カラーコード(16 進表記)です。文字列型 で記述します。省略可能です。デフォルト "909090" です。
"clearColor": "909090"
animations
アニメーション の 配列型 で記述します。省略可能です。デフォルトは空です。
"animations": [ 省略 ... ]
アニメーション
アニメーション設定です。オブジェクト型 で記述します。 3D ノードにポイントを関連付けます。 ポイント値が変化したとき、3D ノードのプロパティ(位置、大きさ、色など)が連動して変化します。
{
"pointId": "/demo/sensor/001/value",
"nodeName": "TargetNode",
"property": "scale",
"init": { "x": 0.01, "y": 0.01, "z": 0.01 },
"keyframes": [
{
"in": 0,
"out": { "x": 0.01, "y": 0.01, "z": 0.01 }
},
{
"in": 100,
"out": { "x": 100, "y": 100, "z": 100 }
}
],
"relative": false,
"linear": true,
"duration": 500,
"yoyo": false
}
項目 | 内容 |
---|---|
pointId | 3D ノードに関連付けるポイント ID です。 文字列型 で記述します。 チームで読込権限があるポイント ID のみ有効です。 時系列データの最新値が入力されます。 |
nodeName | アニメーションの対象となる 3D ノードの名前です。文字列型 で記述します。 名前付けされたノードのみアニメーション可能です。3D モデルは 3D ノードのツリー構造を持ちます。 例えば家屋なら根ノードが家で、その中にリビングや寝室があり、またその中に調度品がある、といった構造です。 これらの 3D ノードには 3D デザインツールを使って名前がつけられています。3D ノードの名前は RealBoard では変更できません。デザインツールで調整し再アップロードしてください。3D タイル編集ページでダブルクリックするとノード名を確認できます。 デザインツールで設定していなかったり、3D ファイル変換時に情報が失われている場合は表示されません。 |
property | アニメーションするプロパティの種類を 文字列型 で記述します。 有効な文字列は"position"、"scale"、"rotation"、"color" です。 それぞれ 3D ノードの位置、大きさ、回転角度、色を表します。大きさの拡大縮小と回転は、3D ノード原点を中心に計算されます。3D ノード原点は RealBoard では変更できません。デザインツールで調整し再アップロードしてください。 |
init | プロパティ値の初期値です。 XYZ 座標値または RGB 値の オブジェクト型 です。"position"、"scale"、"rotation" の場合は XYZ 座標値です。例:{ "x": 5, "y": 10, "z": 12 } 。 "color" の場合は RGB 値のみ有効です。RGB 値は 0 から 1 の範囲の数値です。例:{ "r": 0.25, "g": 1.0, "b": 0.5 } 。アニメーションを Y 軸だけ動かしたい場合や、色の赤成分だけを変えたい場合は、他のプロパティ X、Z 値や G、B 値を省略できます。 |
keyframes | アニメーションのキーフレームのリストです。 キーフレーム の 配列型 で記述します。 配列内の キーフレーム 条件を満たさなければプロパティ値は init に変化します。 |
キーフレーム | in(ポイント値)に対するout(プロパティ値)を決めます。例:{ "in": 0, "out": { "x": 0.01, "y": 0.01, "z": 0.01 } } 。in は 数値型 または 文字列型 です。 out は init と同じ形式で、XYZ 座標または RGB 値を表します。 in の条件を満たしたとき out からプロパティ値が算出されます。in が 数値型の場合、 入力がin 以上で条件を満たします。in が 文字列型の場合、 入力がin と一致すれば条件を満たします。他に out を使ったプロパティ値の計算方法は、relative と linear のパラメータに影響を受けます。 |
relative | out からプロパティを計算するとき、相対値か絶対値かを決めます。 bool 型 で記述します。 true にすると out を加算してプロパティ値に出力します。 false にすると out をそのままプロパティ値に出力します。 |
linear | out の数値を線形補間するか決めます。bool 型 で記述します。 true にすると線形補間するか条件判定します。入力が数値で keyframes 配列の要素数が 2 以上のとき有効です。入力がキーフレーム in 以上かつ次のキーフレーム in 未満のとき有効です。上記の条件を満たすとき 2 つの out を線形補間してプロパティ値を算出します。 false にすると out をそのまま使用してプロパティ値を算出します。 |
duration | アニメーションの時間(ミリ秒)です。数値型 で記述します。 ポイント値が変化した瞬間にプロパティ値のアニメーションを開始します。 duration の時間をかけて out の算出結果に変化します。 アニメーション中のプロパティ値は補間されます。 |
yoyo | アニメーションを繰り返すかどうか決めます。 bool 型 で記述します。 true にするとアニメーションを無限に繰り返します。 プロパティ値は変化前から変化後へ、変化後から変化前へと切り替わります。 |
messages
メッセージ の 配列型 で記述します。省略可能です。デフォルトは空です。
"messages": [ 省略 ... ]
メッセージ
ポイント ID と連動するメッセージの設定です。オブジェクト型 で記述します。
最終的にメッセージとして出力される文字列は各パラメータによって調整されます。 switch の条件分岐による置換、decimal の小数点桁数設定、textFormat の表示形式設定の順に評価されます。
{
"pointId": "/demo/sensor/002/value",
"switch": [
{
"case": [0, 25],
"to": "入力は 0 以上 25 未満"
},
{
"case": [25, 50],
"to": "入力は 25 以上 50 未満"
},
{
"case": ["A", "B", "C"],
"to": "入力は文字列 A or B or C"
},
{
"case": [-1, 100, 999],
"to": "入力は数値 -1 or 100 or 999"
},
{
"case": [1234],
"to": "入力は数値 1234"
},
{
"case": [],
"to": "どの条件にも当てはまらない (default)"
}
],
"decimal": "2",
"textFormat": "出力テキスト: ${value}",
"position": { "x": 5, "y": 2, "z": 10 },
"fontFace": "Arial",
"fontSize": 90,
"textHeight": 5,
"color": "000000",
"backgroundColor": "ffffff"
}
項目 | 内容 |
---|---|
pointId | メッセージに関連付けるポイント ID です。 文字列型 で記述します。 チームで読込権限があるポイント ID のみ有効です。 時系列データの最新値が入力されます。 |
switch | 条件式 の 配列型 で記述します。 省略可能です。 |
条件式 | 入力を条件分岐で置換します。例:{ "case": [25, 50], "to": "入力は 25 以上 50 未満" } 。case は入力に対する条件です。数値または文字列の 配列型 で記述します。 case の条件を満たしたとき、入力は to に置き換えられます。case 配列の要素数が 2 かつ要素が数値の場合、 入力が 1 番目の数値以上かつ 2 番目の数値未満で条件を満たします。case 配列の要素数が 2 以外の場合、入力が配列要素のいずれかと一致すれば条件を満たします。case 配列が空の場合、他の case 条件を満たしていなければ、この条件を満たします。 |
decimal | 入力が数値の場合、小数点桁数を決めます。数値型 で記述します。 |
textFormat | メッセージのテキストフォーマットを決めます。文字列型 で記述します。例:"textFormat": "出力テキスト: ${value}" 。テキストフォーマット内の ${value} は入力の数値または文字列で置き換えられます。 |
position | メッセージの XYZ 座標を表す オブジェクト型 です。 座標は 数値型 で記述します。 |
fontFace | メッセージのフォントを決めます。文字列型 で記述します。 |
fontSize | メッセージのフォントサイズを決めます。数値型 で記述します。 このフォントサイズは描画用に作成される 2D 画像のピクセル単位です。 小さ過ぎると文字のピクセルが粗くなります。 3D シーン上の大きさには影響しません。 見た目の大きさを変える場合は textHeight を変更してください。 |
textHeight | メッセージテキストの高さサイズを決めます。数値型 で記述します。 数値は 3D シーン上の単位で指定します。 |
color | テキスト色の RGB カラーコード(16 進表記)です。文字列型 で記述します。 |
backgroundColor | テキスト背景色の RGB カラーコード(16 進表記)です。文字列型 で記述します。 テキストを矩形で囲んだ背景が表示されます。 |
staticMessages
静的メッセージ の 配列型 で記述します。省略可能です。デフォルトは空です。
"staticMessages": [ 省略 ... ]
静的メッセージ
固定の文字列を表示する静的メッセージの設定です。オブジェクト型 で記述します。
{
"text": "静的なメッセージ",
"position": { "x": 5, "y": 2, "z": 5 },
"fontFace": "Arial",
"fontSize": 90,
"textHeight": 10,
"color": "ffffff",
"backgroundColor": "000000"
}
項目 | 内容 |
---|---|
text | メッセージのテキストです。 文字列型 で記述します。 |
position | メッセージの XYZ 座標を表す オブジェクト型 です。 座標は 数値型 で記述します。 |
fontFace | メッセージのフォントを決めます。文字列型 で記述します。 |
fontSize | メッセージのフォントサイズを決めます。数値型 で記述します。 このフォントサイズは描画用に作成される 2D 画像のピクセル単位です。 小さ過ぎると文字のピクセルが粗くなります。 3D シーン上の大きさには影響しません。 見た目の大きさを変える場合は textHeight を変更してください。 |
textHeight | メッセージテキストの高さサイズを決めます。数値型 で記述します。 数値は 3D シーン上の単位で指定します。 |
color | テキスト色の RGB カラーコード(16 進表記)です。文字列型 で記述します。 |
backgroundColor | テキスト背景色の RGB カラーコード(16 進表記)です。文字列型 で記述します。 テキストを矩形で囲んだ背景が表示されます。 |