2022年9月22日木曜日

遺物出土座標計測システムの構築

 Construction of a coordinate measurement system for excavated relics


I built a system in Blender to measure the coordinates (X, Y, Z) of the excavated pottery from the excavated pottery distribution map (plan, elevation) of the north slope shell layer of Ariyoshi Kita Shell Mound. This system enables pottery 3D distribution analysis.

In addition, as the next step, it will be possible to identify the excavated shell layer of pottery by correlating the excavated coordinates with the shell layer cross-section.


有吉北貝塚北斜面貝層の土器片出土分布図(平面図、立面図)から個別土器片の出土座標(X、Y、Z)を計測するシステムをBlenderの中で構築しました。このシステムにより個別土器片の出土座標を計測すれば、次のステップとして、出土座標を貝層断面図と対応させることにより個別土器片の出土貝層を突きとめることが可能になります。

1 土器片出土分布図(平面図、立面図)のBlender3D空間配置

土器片出土分布図(発掘調査報告書では「北斜面貝層土器出土状況」)(平面図、立面図)をBlender縮尺実寸に合わせて3D空間配置しました。Blender原点に北斜面貝層2mメッシュⅡ00の左上隅を対応させました。


土器片出土分布図をBlender3D空間に配置した画面


平面図配置の様子 Blender画面


立面図配置の様子 Blender画面

2 座標計測指標(赤小立方体)の3Dカーソル位置生成

3D空間に配置した土器片出土分布図(平面図、立面図)から土器片出土座標を正確に計測するために、出土位置に座標計測指標(赤小立方体)を生成させます。具体的には出土位置で3Dカーソルをクリックして、その3Dカーソル位置に座標計測指標(赤小立方体)を生成させます。3Dカーソルの3D座標及び赤小立方体の3D座標はBlender機能で取得できますから、座標計測指標(赤小立方体)を残すことによりいつでも作業を検証することができます。


3Dカーソル位置に生成した座標計測指標(赤小立方体)

X座標を手前にした場合、3Dカーソル位置に赤小立方体左下奥の頂点が対応します。赤小立方体の大きさは10㎝×10㎝×10㎝です。ちなみに、このBlender画面のメッシュは1m×1mです。

3Dカーソル位置に座標計測指標(赤小立方体)を生成するPythonスクリプトは次の通りです。

……………………………………………………………………

#一辺0.1mの色付きキューブをカーソル位置に生成する

#このスクリプトは、https://qiita.com/masterkeaton12/items/3d8245d1f301baf4c126の「立方体を生成する」スクリプトを引用一部改変したものです。


import bpy


#立方体を形成する頂点と面を定義する

verts = [(0,0,0),(0,0.1,0),(0.1,0.1,0),(0.1,0,0),(0,0,0.1),(0,0.1,0.1),(0.1,0.1,0.1),(0.1,0,0.1)]

faces = [(0,1,2,3), (4,5,6,7), (0,4,5,1), (1,5,6,2), (2,6,7,3), (3,7,4,0)]


#メッシュを定義する

mesh = bpy.data.meshes.new("Cube_mesh")

#頂点と面のデータからメッシュを生成する

mesh.from_pydata(verts,[],faces)

mesh.update(calc_edges=True)


#マテリアル、色を設定する 赤=1001、青=0011、緑=0101、黒=0001、薄緑=0111、灰=1110、黄=1101

ma = []

ma.append(bpy.data.materials.new('color'))

ma[0].diffuse_color = (1, 0, 0, 1)

mesh.materials.append(ma[0])


#メッシュのデータからオブジェクトを定義する

obj = bpy.data.objects.new("Cube", mesh)   


#オブジェクトの生成場所をカーソルに指定する

obj.location = bpy.context.scene.cursor.location


#オブジェクトをシーンにリンク(表示)させる

bpy.context.scene.collection.objects.link(obj)

……………………………………………………………………

このスクリプトは、https://qiita.com/masterkeaton12/items/3d8245d1f301baf4c126の「立方体を生成する」スクリプトを引用一部改変したものです。原著作者に感謝します。

実際にBlender画面でこのPythonスクリプトを適用すると次のようになります。


218土器の1つの土器片の出土位置で3Dカーソルをクリックして座標計測指標(赤小立方体)を生成させた様子(立面図)


同上拡大

z座標の値が4.3831mとなっています。z座標=0を標高20mに対応させていますから、この土器片の標高は24.3831mになります。x座標値、y座標値は同じ方法で平面図から求めます。

3 メモ

・土器片出土分布図(平面図、立面図)のBlender3D空間貼り付けは、Blender3D空間の座標がしっかりしているので、個別図面の各種誤差累積がなく、想定以上に高精度で出来ました。

・Pythonスクリプトを見様見真似で活用しました。Pythonスクリプト活用はBlender活用に必須であることを思い知らされました。Pythonスクリプトに習熟すれば、今回作成したスクリプトをアドオン化して、より効率的に活用できるようになると考えます。

・3D分析前半のための分析インフラ構築ができましたので、早速データ計測してみることにします。


0 件のコメント:

コメントを投稿