3D タイル

編集権限のあるチーム管理者が使用できます。

概要

3DCG による時系列データの可視化 UI です。

例)

  • 開閉センサの開 (1)/閉 (0) に応じてドアの 3DCG を 90 度回転させる。
  • 温度センサが 28 ℃以上のとき部屋の色を赤く表示する。

動作に必要なファイル

  1. 3D モデルファイル
  2. 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

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 進表記)です。文字列型 で記述します。 テキストを矩形で囲んだ背景が表示されます。

results matching ""

    No results matching ""