こんにちは。廣本です🪑。今回は、TableauでOBJファイルを使って3Dの椅子モデルを可視化する方法を紹介します。
はじめに
Tableauは優れたBIツールとして知られていますが、立体的な3D表現に関しては必ずしも得意としているわけではありません。しかし、適切な方法を用いることで、3D表現を実現することも可能です。
今回は3D表現に使用されるデータ形式のひとつであるOBJ形式のファイルを用いた、Tableauのビジュアライズに挑戦してみました。
OBJファイルについて
まず、今回使用するOBJファイルについてです。OBJファイルはWavefront社が開発した3Dモデルフォーマットの1つで、以下のような特徴があります:
- テキストベースのフォーマットで、人間が読み取りやすい
- 3Dモデリングソフトウェア間での互換性が高い
- 頂点(vertex)、面(face)、テクスチャ座標などの基本的な3D情報を含む
- 初心者にも扱いやすい単純な構造
今回はこちらのOBJファイルを使ってTableauで3D表現をつくってみたいと思います。
なお、OBJファイルは様々なサイトで提供されています。無償で使用可能なものもありますので、ぜひ調べてみてください(ただし利用規約はしっかりと確認するようにしましょう)。
実装手順
それでは、具体的な実装手順を見ていきましょう。
1. データの確認
まず、OBJファイルの中身を確認してみましょう。
テキストエディタでOBJファイルを開くと、1番左の列には「v」や「f」といった文字列、それ以外の列には数字が並んでいることが確認できます。
「v」は英語のVertexの略で頂点の座標を意味しています。左からX座標・Y座標・Z座標の値を持ちます。
| v | 0.003135 | 0.389389 | -0.007866 |
|---|---|---|---|
| v | 0.002715 | 0.387833 | -0.00801 |
| v | 0.002715 | 0.390942 | -0.007723 |
「f」は英語のFaceの略で面を意味します。「/」区切りで数字がそれぞれ入っていますが、「/」の前の数字が「v」のどの座標番号と対応するかが定義されています。
| f | 5885/1 | 2650/2 | 2647/3 |
|---|---|---|---|
| f | 2650/2 | 2666/5 | 401/6 |
| f | 2660/7 | 2656/8 | 789/9 |
2. データの準備
次にOBJファイルをTableauで読み取れるよう、CSV形式のデータを2つ準備します。なお、以下はExcelを使用した準備手順を記載しています。
v.csv
- OBJファイルをテキストエディタで開く
- ファイル内容をExcelに貼り付ける ※日付形式に置き換わってしまう場合はあらかじめセルの表示形式を「文字列」に固定しておきましょう
- 不要なヘッダーを削除し、「v」のレコードのみ残す
- 各行に対して上から連番を振り(下記では「Vertical_Id」という列名にしています)、最終的に以下のような形式に整形する
| Vertical_Id | x | y | z |
|---|---|---|---|
| 1 | 0.003135 | 0.389389 | -0.007866 |
| 2 | 0.002715 | 0.387833 | -0.00801 |
| 3 | 0.002715 | 0.390942 | -0.007723 |
| … | … | … | … |
- データをCSVファイルとして保存
f.csv
- OBJファイルをテキストエディタで開く
- ファイル内容をExcelに貼り付ける ※日付形式に置き換わってしまう場合はあらかじめセルの表示形式を「文字列」に固定しておきましょう
- 不要なヘッダーを削除し、「f」のレコードのみ残す
- 各行に対して上から連番を振り(下記では「Face_Id」という列名にしています)、最終的に以下のような形式に整形する ※下記だと1~4の列になっていますが、データによって必要となる列数は異なるので、データに応じて増減させてください。
| Face_Id | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| 1 | 5885/1 | 2650/2 | 2647/3 | 5884/4 |
| 2 | 2650/2 | 2666/5 | 401/6 | 2647/3 |
| 3 | 2660/7 | 2656/8 | 789/9 | 788/10 |
| … | … | … | … |
- データをCSVファイルとして保存
3. Tableauでの作業
次に、Tableauで以下の手順を実行します。
- f.csvをTableauで読み込む
- Face_Id以外の列をピボットする

4. 3D変換の計算式
3D表示を実現するために、以下の計算式とパラメーターを準備します。これにより、3次元空間での回転を表現することができます。
<計算式>
x_rotated (xy)
[X]*COS([XY - Angle (Radians)])-[Y]*SIN([XY - Angle (Radians)])
x_rotated
INT(([x_rotated (xy)]*COS([XZ - Angle (Radians)])-[Z]*SIN([XZ - Angle (Radians)]))/[Round Factor])*[Round Factor]
y_rotated (xy)
[Y]*COS([XY - Angle (Radians)])+[X]*SIN([XY - Angle (Radians)])
y_rotated
-[z_rotated]*SIN([YZ - Angle (Radians)])+[y_rotated (xy)]*COS([YZ - Angle (Radians)])
z_rotated
[x_rotated (xy)]*SIN([XZ - Angle (Radians)])+[Z]*COS([XZ - Angle (Radians)])
<パラメーター>
XY - Angle (Radians)

XZ - Angle (Radians)

YZ - Angle (Radians)

5. Tableauでのビジュアライズ
4で作成した計算式とパラメーターを使用してデータをビジュアライズします。
- 列にディメンション化した[x_rotated]、行にディメンション化した[y_rotated]を配置
- マークを「線」または「多角形」に設定し、[Face Id]を詳細、[ピボットのフィールド名]をパスに追加
- 色やサイズ、パラメーターの値を調整して完成!

完成したダッシュボードは下記をご覧ください!
まとめ
今回はOBJファイルを元にTableauで3D表現を作成してみました。必ずしもTableauで表現するのがベストとは限りませんが、工夫次第でこういった表現も実現できますので、ぜひお試しください!
