ラベル 3D棒グラフ の投稿を表示しています。 すべての投稿を表示
ラベル 3D棒グラフ の投稿を表示しています。 すべての投稿を表示

2024年7月11日木曜日

有吉北貝塚北斜面貝層 土器・土製品出土数のグリッド別分布 3D棒グラフ

Ariyoshikita Shell Mound North Slope Shell Layer  Grid distribution of pottery and earthenware artifacts  3D bar graph

There are 20,733 pottery and earthenware artifacts listed in the artifact register of the Ariyoshikita Shell Mound North Slope Shell Layer. The grid distribution of these 20,733 items was displayed and observed in a 3D bar graph. You can see how the pottery and earthenware artifacts moved toward the gully channel.

有吉北貝塚北斜面貝層の遺物台帳に記載されている土器・土製品は20733件あります。この20733件のグリッド別分布を3D棒グラフに表示して観察しました。ガリー流路に向かって土器・土製品が移動した様子が観察できます。
1 有吉北貝塚北斜面貝層 土器・土製品出土数のグリッド別分布 3D棒グラフ
有吉北貝塚北斜面貝層 土器・土製品出土数のグリッド別分布 3D棒グラフ
土器・土製品出土件数 総件数20733件、グリッド別最大件数716件、最小件数1
出典:有吉北貝塚北斜面貝層遺物台帳

貝層分布と土器・土製品分布
3DF Zephyr v7.531でアップロード

3Dモデルの画像

3Dモデルの動画
2 観察メモ
土器・土製品出土件数が多いグリッドはガリー主流路沿いであることがわかります。ガリー谷頭や西岸(左岸)の台地斜面との境界から、ガリー主流路に向かって土器・土製品出土件数が増える傾向が特徴的です。ガリー谷頭縁やガリー西岸縁から土器・土製品が投棄され、ガリー主流路に流れ込んだ様子が推察できます。
詳しい観察は別の機会に行います。
3 遺物台帳データから3D棒グラフをつくるまでの主な作業
遺物台帳データから3D棒グラフをつくるまでの主な作業項目をメモします。今後この作業を効率化して、分析活動に使う時間のメインを内容検討に振り向けられるようにします。
3-1 グリッド別土器・土製品件数データ作成(Excel)
土器・土製品だけを抜き出した遺物台帳データからグリッド別土器・土製品件数データ(Excel)を作成します。名寄せPythonスクリプトを使います。
3-2 グリッド座標を追加する
グリッド別土器・土製品件数データファイル(Excel)にグリッド座標(XY座標)を追加します。グリッド-座標対応表(辞書)をつかって当該グリッドの座標を記入するPythonスクリプトを使います。
3-3 土器・土製品件数をグラフ表示に適した単位にする
今回は土器・土製品件数を1/100倍した値をm単位の棒で表現しました。棒の底面の高さが揃い、棒の長さが件数を表現するようなZ座標と棒長さ数値をExcelに追記します。手作業です。
3-4 csvファイル出力
Excelファイル(グリッド名、X座標、Y座標、Z座標、棒の長さ)をUTF-8形式のcsvファイルで書き出します。
3-5 Blenderにおける3D棒グラフ造形
3D棒グラフ造形用BlenderPythonスクリプトにcsvファイルのパスを書き込み、Blenderで走らせて、3D棒グラフを造形します。
3-6 3Dモデル完成のためのBlender作業
・3D棒グラフにテクスチャを貼り付けます。
・説明プレートをオブジェクトとして作成配置します。
・棒長さの凡例をオブジェクトとして作成配置します。
3-7 3D棒グラフのSketchfab投稿、動画作成
3D棒グラフをBlenderからWabefront(.obj)ファイルで出力して、3DF Zephyr Liteにインポートして3Dモデルの動画を作成します。また、3DF Zephyr LiteからSketchfabに投稿します。
4 感想
遺物台帳電子化ファイルの内容を分析して、その結果をグリッド別情報整理すれば、それを3D棒グラフとして表現できる道筋ができたことは自分にとって一つの画期です。今後この細い道筋を拡げていきたい、つまり効率的に作業できるようにしたい思います。

2024年6月17日月曜日

メモ 視認性の良い3D棒グラフの作成方法

 Memo: How to create a 3D bar graph with good visibility


I sometimes create 3D models with bar graphs on a grid using Blender's CUBE. I made a note of how to create them and how to improve their visibility. I use a BlenderPython script to create them, and Photoshop to improve visibility.


BlenderのCUBEを活用して、グリッドに棒グラフを立てる3Dモデルを時々作成しています。その作成方法と視認性向上策をメモしました。作成はBlenderPythonスクリプトで行い、視認性向上はPhotoshopを活用します。

1 3D棒グラフの作成方法

1-1 データの作成

次の順番で情報を並べたテキストファイルを作成します。

グリッド番号、グリッド中央X座標、グリッド中央Y座標、変数

【例】

Ⅲ-23,5,27,0.835,1.67

Ⅲ-24,5,29,0.01,0.02

Ⅲ-30,7,21,8.335,16.67

Ⅲ-31,7,23,7.28,14.56

Ⅲ-32,7,25,13.48,26.96

Ⅲ-33,7,27,2.995,5.99

Ⅲ-34,7,29,0.24,0.48

グリッド平面は2m×2mです。変数は遺物件数/100の値です。

1-2 BlenderPythonスクリプトによる3Dモデル作成

次のBlenderPythonスクリプトにデータテキストファイルを書き込んでBlenderテキストエディターで走らせると、テクスチャ無しの棒グラフ3Dモデルが造形されます。

# 正確完成版

import bpy

# ファイルからデータを読み込む
file_path = "E:/test/遺物件数分布.txt"
with open(file_path, "r") as file:
    lines = file.readlines()

# CUBEを配置する関数
def create_cube(name, x, y, z, height):
    bpy.ops.mesh.primitive_cube_add(size=1.8, location=(x, y, z))
    cube = bpy.context.object
    cube.name = name
    bpy.ops.transform.resize(value=(1, 1, height))

# データからCUBEを作成
for line in lines:
    data = line.strip().split(',')
    if len(data) == 5:
        name, x, y, z, height = data
        x, y, z, height = float(x), float(y), float(z), float(height)
        create_cube(name, x, y, z, height * 0.5555555555) 
棒グラフ作成のBlenderPythonスクリプト


造形されたテクスチャ無しの棒グラフ3Dモデル

2 3Dモデルの調整

3Dモデルを3DF Zephyr LiteやSketchfabで扱いやすくするために辺の細分化と面の三角化を行います。

オブジェクトモードで棒グラフ全部を指定して、編集モードで辺の細分化(例5)、面の三角化を行います。

3 視認性向上策

棒グラフにそのままテクスチャ画像を貼り付けると視認性が良くないので、UVEditing画面で得られるUV展開画面に合わせたテクスチャ画像をPhotoshopで作成します。今回作成棒グラフのUV展開画面は全て同じなので、1枚のテクスチャ画像を全ての棒に適用できます。


テクスチャ画像の元となる画像をスクリーンショットで作成する


視認性向上を目指したテクスチャ画像の作成(Photoshop作業)


3Dモデルの画像

3Dモデル