2023年6月29日木曜日

有吉北貝塚北斜面貝層 土器分布平面図・立面図から3D座標を取得した方法

 North Slope Shell Layer of Ariyoshi Kita Shell Mound


Method of obtaining 3D coordinates from pottery distribution plan/elevation

Make a note of how the 3D coordinates were obtained from the pottery distribution plan and elevation shown in the excavation report. I was able to improve work efficiency by using Python scripts extensively.


発掘調査報告書に掲載されている土器分布平面図・立面図から3D座標を取得した方法をメモします。Pythonスクリプトを多用することにより作業効率化を図ることができました。

1 3D座標取得方法

1-1 土器分布平面図・立面図の確認及び表示土器の把握

1-1-1 土器分布平面図・立面図の確認

発掘調査報告書には平面図5枚、立面図5枚が掲載されています。


土器分布平面図・立面図をBlender3Dに配置した様子

【参考】

2022年にはBlender3D空間に配置された平面図・立面図について、クリックするとその場所にCUBEを生成するBlenderPythonスクリプトを作成しました。このスクリプトを利用して、対応する同一土器破片のCUBEを平面図と立面図で作成し、その座標値を利用して3D空間にCUBEを配置する作業を行いました。Blenderではこの手の作業にインターフェイスが対応していないためとても面倒な作業となりました。個別土器単位の作業はできなくて、平面図における分類(≒型式)単位の作業となりました。

1-1-2 平面図・立面図別表示土器の把握

平面図・立面図5枚それぞれについて、Excelで表示土器番号リストをY座標2mピッチ毎に作成し、土器番号がわかれば、図面のどの部分にそれが表示されているのか迅速に判断できるようにしました。


表示土器番号リスト(Excel画面、一部)

今回3D座標計測する土器数は全部で173です。破片数は結果的に643となりました。

1-2 平面図・立面図から座標計測するPythonスクリプト作成

平面図5枚、立面図5枚について土器出土地点をクリックするとBlender3Dの座標を取得できるPythonスクリプトを作成しました。

平面図h3用の座標計測Pythonスクリプト

import cv2
def onMouse(event, x, y, flags, params):
    if event == cv2.EVENT_LBUTTONDOWN:
        print('{:.03f}'.format((y-97)/95.111+2), '{:.03f}'.format((x-36)/94.125+20), 0)
img = cv2.imread('h3e.png')
cv2.namedWindow('gazo', cv2.WINDOW_NORMAL)
cv2.imshow('gazo', img)
cv2.setMouseCallback('gazo', onMouse)
cv2.waitKey(0)

h3.pyをコマンドラインで走らせると計測用画像(平面図)が画面に出て、計測ポイントをクリックするとblender3D空間対応座標(x座標、y座標)が画面に表示されます。


h3.pyを走らせた様子(実際の作業は別画面に平面図を大伸ばしして行います。)

1-3 作業フォルダー作成

3D座標計測作業は173土器別フォルダーをパソコン内に作成して行いました。173フォルダーの作成、各ホルダーに必要な図面とPythonスクリプトのコピー、作業を記録するテキストファイル作成などはすべてPythonスクリプトを自前で作成して、効率的に行いました。

173フォルダーにフォルダー名称を名称とするテキストファイルを生成するPythonスクリプト

import os

# スクリプトが実行されているフォルダーのパスを取得
current_folder = os.path.dirname(os.path.abspath(__file__))

# input.txtのパス
input_file = os.path.join(current_folder, "inputall.txt")

# フォルダーのパスとファイル名の対応辞書を作成
folder_file_mapping = {}

# input.txtを読み込んで対応辞書を作成
with open(input_file, "r") as file:
    for line in file:
        folder_name = line.strip()
        folder_path = os.path.join(current_folder, folder_name)
        file_name = folder_name + ".txt"
        folder_file_mapping[folder_path] = file_name

# フォルダーごとにテキストファイルを生成
for folder_path, file_name in folder_file_mapping.items():
    file_path = os.path.join(folder_path, file_name)
    with open(file_path, "w") as file:
        # 何かしらのテキストをファイルに書き込む(ここではフォルダー名を書き込んでいます)
        file.write(folder_name)

1-4 3D座標計測と記録

平面図の座標計測用Pythonスクリプトを起動してx座標とy座標を、立面図からはy座標とz座標を読み取り、y座標の対応性を利用して各個別土器破片の3D座標を取得記録しました。この作業はコマンドラインとエディター(テキストファイル)で行います。


3D座標のテキスト記載

1-5 3D座標の集成とBlenderプロット

3D座標を集成したテキストを作成し、自作PythonスクリプトによりBlenderにプロットします。3D座標には土器番号がありますから、土器型式に関する変更とか、別の分類などをテキストで編集すれば、それにより小分けした(分類した)プロットが可能です。

3D座標をBlenderにプロットするBlenderPythonスクリプト

import bpy

# テキストファイルのパス
file_path = "I:\\20221214有吉北貝塚北斜面貝層プロジェクト\\■20230520土器破片3D座標\\273~335 E2新\\e2sin.txt"

# プリミティブな立方体のスケール
cube_scale = (0.15, 0.15, 0.15)

# テキストファイルの読み込み
with open(file_path, 'r') as file:
    lines = file.readlines()

# 行ごとに処理を行う
for line in lines:
    # 行をスペースで分割して各値を取得
    symbol, x, y, z = line.strip().split(",")

    # 座標値を数値に変換
    x = float(x)
    y = float(y)
    z = float(z)
    
    # 立方体を生成
    bpy.ops.mesh.primitive_cube_add(scale=cube_scale, location=(x, y, z))
    cube = bpy.context.object
    
    # 立方体の名前を設定(記号を含む)
    cube.name = symbol

2 【参考】3D座標から構成した分布図


3D座標から構成した分布図

3 感想

・ChatGPTと対話して必要なPythonスクリプトを生成する活動を5月から始めましたが、そうした世の中の画期との連動がなければ今回の土器3D座標取得は半年とか1年は遅れた可能性があります。

・発掘調査報告書の刊行は1998年で北斜面貝層現場調査は1985年です。40年前から25年前までの活動で土器出土位置を3D座標で把握できるような精細資料を作成したことに感動します。当時の関係者はどのような見通しを持って土器分布平面図・立面図を作成したのでしょうか。とてつもない労力を投入しています。



2023年6月28日水曜日

3D空間におけるオブジェクト密度を表現する初歩的BlenderPythonスクリプト

 A rudimentary BlenderPython script to represent object density in 3D space


I wrote a rudimentary BlenderPython script that expresses the distribution density of a mesh object (CUBE) in Blender3D space. Backed by ChatGPT. Creating 3D heatmaps is no longer a dream.


Blender3D空間におけるメッシュオブジェクト(CUBE)の分布密度を表現する初歩的BlenderPythonスクリプトを作成しましたので、メモします。ChatGPTの支援を受けました。3Dヒートマップ作成が夢ではなくなりました。

1 オブジェクト密度表現の初歩的BlenderPythonスクリプト

このスクリプトは次の要件を満たすBlenderPythonスクリプトです。

1 Blenderで多数のCUBEが密集して配置され、それらが選択されています。

2 1つ1つのCUBEについて、他のすべてのCUBEとの距離を計測し、その距離の逆数をもとめ、さらにその逆数の合計をもとめ、その値をr値とします。

3 全CUBEのr値の平均値(s値)と標準偏差値(t値)を求めます。

4 1つ1つのCUBEに新たに区分値(u値)を与えます。区分値(u値)は次の式に示すとおり、平均値(s値)と標準偏差値(t値)から計算します。

r>(t+s)あるいはr=(t+s)の時 u=0

(t+s)>r>sあるいはr=sのときu=1

s>r>(t-s)あるいはr=(t-s)のときu=2

(t-s)>rのときu=3

5 全CUBEに新しいマテリアルを作成し、そのマテリアルにノードを追加してベースカラーを設定します。

6 ベースカラーの設定は

u=0のときRGB値(1,0,0,1) 赤

u=1のときRGB値(0.8,0.2,0.2,1) 薄赤

u=2のときRGB値(0.1,0.2,0.8,1) 薄青

u=0のときRGB値(0,0,1,1) 青

とします。

7 全CUBEのr値、平均値(s値)と標準偏差値(t値)、全CUBEの区分値(u値)をprintします。


import bpy
from mathutils import Vector
import statistics

def calculate_r_value(cube_obj):
    r_value = 0.0
    all_cubes = bpy.context.selected_objects

    for other_cube in all_cubes:
        if other_cube != cube_obj and other_cube.type == 'MESH':
            distance = (other_cube.location - cube_obj.location).length
            if distance != 0:
                r_value += 1 / distance

    return r_value

# 選択されたオブジェクトがCUBEであることを確認
selected_objects = bpy.context.selected_objects
cube_objects = [obj for obj in selected_objects if obj.type == 'MESH']
if not cube_objects:
    print("No CUBE objects selected.")
else:
    r_values = []
    for cube in cube_objects:
        r_value = calculate_r_value(cube)
        r_values.append(r_value)
        print(f"r value for {cube.name}: {r_value}")

    # 平均値と標準偏差値の計算と表示
    mean_value = statistics.mean(r_values)
    std_deviation = statistics.stdev(r_values)

    print(f"Mean value (s value): {mean_value}")
    print(f"Standard deviation (t value): {std_deviation}")

    for cube in cube_objects:
        r_value = calculate_r_value(cube)

        if r_value > (mean_value + std_deviation) or r_value == (mean_value + std_deviation):
            u_value = 0
        elif (mean_value + std_deviation) > r_value > mean_value or r_value == mean_value:
            u_value = 1
        elif mean_value > r_value > (mean_value - std_deviation) or r_value == (mean_value - std_deviation):
            u_value = 2
        elif r_value < (mean_value - std_deviation):
            u_value = 3

        print(f"u value for {cube.name}: {u_value}")

        # マテリアルの作成とベースカラーの設定
        material = bpy.data.materials.new(name=f"{cube.name}_Material")
        material.use_nodes = True
        principled_bsdf = material.node_tree.nodes.get("Principled BSDF")

        if u_value == 0:
            principled_bsdf.inputs["Base Color"].default_value = (1, 0, 0, 1)
        elif u_value == 1:
            principled_bsdf.inputs["Base Color"].default_value = (0.8, 0.2, 0.2, 1)
        elif u_value == 2:
            principled_bsdf.inputs["Base Color"].default_value = (0.1, 0.2, 0.8, 1)
        elif u_value == 3:
            principled_bsdf.inputs["Base Color"].default_value = (0, 0, 1, 1)

        if cube.data.materials:
            cube.data.materials[0] = material
        else:
            cube.data.materials.append(material)
 
2 3Dモデル例
オブジェクト密度表現の初歩的BlenderPythonスクリプト 3Dモデル例

オブジェクト密度表現の初歩的BlenderPythonスクリプト 3Dモデル例画像

オブジェクト密度表現の初歩的BlenderPythonスクリプトでprintされた情報

オブジェクト密度表現の初歩的BlenderPythonスクリプト 3Dモデル例の動画
3 メモ
このBlenderPythonスクリプトを踏み台にして、色分けをするための統計的手法、区分の仕方、配色はいくらでも精緻化、展開応用が可能です。
3DヒートマップをBlenderPythonスクリプトで作成することが射程圏内に入ったと感じます。
このBlenderPythonスクリプトはChatGPTとのやりとりの中で生成しました。ChatGPTを活用することによって趣味活動のPython化が急加速しています。

2023年6月27日火曜日

有吉北貝塚北斜面貝層 土器3D座標取得完了

 North Slope Shell Layer of Ariyoshi Kita Shell Mound

Completion of pottery 3D coordinate acquisition activity


As a hobby activity, the acquisition of 3D coordinates of pottery, which has been the biggest concern since December last year, has finally been completed. 3D coordinates were obtained using Python from the graph published in the excavation report. In the future, I will carefully develop the 3D space analysis activities for pottery.


趣味活動における昨年12月以降の最大懸案事項であった土器3D座標取得活動がようやく完了しました。発掘調査報告書掲載グラフからPythonを活用して3D座標を取得しました。今後じっくりと土器3D空間分析活動を展開していくことにします。

1 土器3D座標取得結果

有吉北貝塚北斜面貝層における出土土器の3D座標取得結果は次の通りです。


有吉北貝塚北斜面貝層 土器3D座標取得状況

実際の3D座標は次のようなテキストになっています。


3D座標のテキスト記載

2 加曽利EⅡ式土器114点(545破片)3D分布モデル

加曽利EⅡ式土器114点(545破片)3D分布モデル

加曽利EⅡ式土器114点(545破片) 赤CUBE

(CUBEの大きさは30㎝×30㎝×30㎝で表示)

加曽利EⅡ式土器の3D座標は発掘調査報告書グラフから計測

ガリー侵食地形面及び一般地形面は貝層断面図、貝層平面図から作成

等高縞模様は等高線に見立てるとおおよそ60㎝間隔

剥ぎ取り断面図は展示物3Dモデル及び上守秀明氏提供画像から構成


有吉北貝塚北斜面貝層 加曽利EⅡ式土器114点(545破片)3D分布モデル画像 1


有吉北貝塚北斜面貝層 加曽利EⅡ式土器114点(545破片)3D分布モデル画像 2


有吉北貝塚北斜面貝層 加曽利EⅡ式土器114点(545破片)3D分布モデル動画

3 今後の分析活動について

3D座標取得という基礎作業が一段落しました。これからはこの作業を整理記録するとともに、3D座標をつかった分析活動を展開することにします。つぎのような項目について順次取り組みます。

3-1 3D座標取得活動の整理記録、課題

今回の3D座標取得では計測のみならずデータの整理など多様な曲面でPythonスクリプトを活用して効率化を図りました。その様子を詳しく整理記録して、類似作業が生まれた際にすぐに出来るように備えることにします。また、より精度の高い土器3D座標取得方法を検討します。

・3D座標取得方法の記録

・利用Pythonスクリプトの整理格納

・発掘調査報告書掲載グラフの精度や問題点

・収蔵土器及び発掘原票を使った土器3D座標取得方法の検討

3-2 土器3D座標による分析

3-2-1 加曽利EⅡ式土器新分類に基づく型式別分布分析

加曽利EⅡ式土器の型式新分類に基づく3D分布を比較して分析します。

2023.01.29記事「有吉北貝塚北斜面貝層の土器新分類の整理理解

土器新分類による土器3D分布により、貝層発達、利用状況に関する新たな情報獲得を期待しています。

3-2-2 個別土器破片3D分布分析

個別土器破片3D分布を比較して、何か判ることがあるか、検討します。

破片が広範に分布する土器とそうでない土器の違いは何を意味するのか、興味があります。

3-3 3D空間分析手法の開発

平面分布モデルでは分布の密-粗を色で表現するヒートマップ分析など多様な分析手法が存在します。


平面分布のヒートマップ例

同様に3D空間における密-粗を色で表現する3Dヒートマップ分析などの手法について情報収集し、既存手法があれば入手利用することにします。見つからなければ、初歩的なレベルにならざるをえませんが、自分で開発することにします。一般的なweb検索では3Dヒートマップ分析手法は見つけていませんが、気体、天体、肉体、地震などを扱う専門分野には必ず類似手法があると想像します。



2023年6月22日木曜日

有吉北貝塚北斜面貝層 加曽利EⅠ式土器13点(17破片)3D分布モデル

 North Slope Shell Layer of Ariyoshi Kita Shell Mound

Kasori EI type 13 pieces (17 pieces) 3D distribution model


3D coordinates of 13 pieces (17 fragments) of Kasori EI type pottery on the northern slope shell layer of Ariyoshi Kita Shell Mound were obtained from the map published in the excavation survey report, and a 3D distribution model was created. A negligible amount. However, since the distribution is similar to ornaments (shellfish products), I am looking forward to a comprehensive analysis at a later date.


発掘調査報告書掲載図から有吉北貝塚北斜面貝層の加曽利EⅠ式土器13点(17破片)の3D座標をもとめ、3D分布モデルを作成しました。無視できるような量です。しかしその分布が装飾品(貝製品)と類似するので後日総合分析が楽しみです。

1 加曽利EⅠ式土器3D座標


加曽利EⅠ式土器3D座標

2 有吉北貝塚北斜面貝層 加曽利EⅠ式土器13点(17破片)3D分布モデル

有吉北貝塚北斜面貝層 加曽利EⅠ式土器13点(17破片)3D分布モデル

加曽利EⅠ式土器13点(17破片) 赤CUBE

(CUBEの大きさは30㎝×30㎝×30㎝で表示)

加曽利EⅠ式土器の3D座標は発掘調査報告書グラフから計測

ガリー侵食地形面及び一般地形面は貝層断面図、貝層平面図から作成

等高縞模様は等高線に見立てるとおおよそ60㎝間隔

剥ぎ取り断面図は展示物3Dモデル及び上守秀明氏提供画像から構成


有吉北貝塚北斜面貝層 加曽利EⅠ式土器13点(17破片)3D分布モデル画像 1


有吉北貝塚北斜面貝層 加曽利EⅠ式土器13点(17破片)3D分布モデル 2


有吉北貝塚北斜面貝層 加曽利EⅠ式土器13点(17破片)3D分布モデル動画

3 メモ

有吉北貝塚の集落最盛期は加曽利EⅠ式期です。


有吉北貝塚の時期別竪穴住居数

加曽利EⅡ式土器集中投棄をかんがみると、集落最盛期(加曽利EⅠ式期)には北斜面貝層に土器投棄は一言でいうと「皆無に近い」と言っていい状況です。

しかし、そのわずかに残された加曽利EⅠ式土器破片分布をみると、それが加曽利EⅠ式期集落リーダーが装着した腰飾りを含む貝製装飾品分布と類似します。

「取るに足らない」と最初考えた加曽利EⅠ式土器分布は、貝製装飾品などを埋納した活動に関連していわば非意識的、非意図的に持ち込まれたと考えると、重要な指標になるかもしれません。

後日の総合検討が楽しみです。

加曽利EⅠ式土器までの3D座標取得が終わりました。作業の10%が終わり、ウォーミングアップはここまでです。いよいよ本丸の加曽利EⅡ式土器3D座標取得に取り組みます。


2023年6月20日火曜日

有吉北貝塚北斜面貝層 中峠式土器34点(69破片)3D分布モデル

 North Slope Shell Layer of Ariyoshi Kita Shell Mound

34 pieces of Nakabyo-style pottery (69 small pieces) 3D distribution model


I obtained the 3D coordinates of 34 pieces (69 small fragments) of Nakabyo-style pottery from the pottery fragment distribution map (plan and elevation) published in the excavation report, and created a 3D distribution model. A detailed analysis will be done at a later date, but it is noteworthy information that excavation from collapsed soil can also be seen.


発掘調査報告書土器破片分布図(平面図、立面図)から中峠式土器34点(69破片)の3D座標をもとめ、3D分布モデルを作成しました。詳しい分析は後日行いますが、崩落土からの出土も見られ、特筆すべき情報です。

1 中峠式土器3D座標


中峠式土器3D座標

2 有吉北貝塚北斜面貝層 中峠式土器34点(69破片)3D分布モデル

有吉北貝塚北斜面貝層 中峠式土器34点(69破片)3D分布モデル

中峠式土器34点(69破片) 赤CUBE

(CUBEの大きさは30㎝×30㎝×30㎝で表示)

中峠式土器の3D座標は発掘調査報告書グラフから計測

ガリー侵食地形面及び一般地形面は貝層断面図、貝層平面図から作成

等高縞模様は等高線に見立てるとおおよそ60㎝間隔

貝層断面図は発掘調査報告書から塗色の上引用

剥ぎ取り断面図は展示物3Dモデル及び上守秀明氏提供画像から構成

有吉北貝塚北斜面貝層 中峠式土器34点(69破片)3D分布モデル画像 1

有吉北貝塚北斜面貝層 中峠式土器34点(69破片)3D分布モデル画像 2


有吉北貝塚北斜面貝層 中峠式土器34点(69破片)3D分布モデル動画

3 メモ

中峠式土器に引き続き加曽利EⅠ式土器の3D座標取得を急ぐことにし、中峠式土器3D分布検討は後日におこなうこうとにします。中峠式土器34点(69破片)3D分布モデルを瞥見するとガリー侵食基底面付近出土、「崩落土」出土のものがかなり観察できて、加曽利EⅡ式期以前、おそらく中峠式期に投棄されたと想像できそうです。詳しい検討が楽しみです。

2023年6月19日月曜日

有吉北貝塚北斜面貝層における全出土遺物の3D座標取得活動について

 Acquisition of 3D Coordinates of All Excavated Artifacts in the North Slope Shell Layer of Ariyoshi Kita Shell Mound


I am working on acquiring the 3D coordinates of excavated pottery in the shell layer on the northern slope of the Ariyoshi Kita Shell Mound.

After this activity, I wanted to acquire the 3D coordinates of relics other than pottery, so I examined the procedure (batch acquisition) and made a note of the effect.


有吉北貝塚北斜面貝層における出土土器3D座標取得活動を進めています。座標取得方法は発掘調査報告書掲載分布グラフ(平面図、立面図)の計測で行っています。この方法で取得できる土器3D座標数は約800です。

この活動後に土器以外遺物の3D座標を取得したいと考えていますが、この記事ではその手順について検討しました。

1 土器以外遺物で3D座標を取得したいもの


土器以外の遺物で3D座標を取得したいもの

2 土器以外遺物の3D座標取得手順

当初、土器以外遺物の3D座標取得順番は興味の強い遺物→そうでもない遺物の順番で行うイメージでした。しかし、よく考えると、遺物種別毎に何回も遺物分布図と遺物台帳の閲覧を申請し、その回毎にそれらの紙資料をスキャンするのは大変非効率であることは目に見えています。教育委員会ご担当者にも不必要なご迷惑をかけることになります。そこで、遺物分布図と遺物台帳のスキャンは一気に一度に実施し、スキャン資料から作る遺物別3D座標データベースは、時間をかけてじっくり行うことが常道であると感じるようになりました。

このような思考に基づいて、土器以外遺物の3D座標取得は次のような手順で行うことにします。

●土器以外遺物の3D座標取得手順

1 北斜面貝層に関する全遺物分布図、全遺物台帳のスキャン申請、許可によるスキャン実施

2 スキャン資料の整理と使いやすい格納

3 スキャン資料から遺物種別や特定メッシュ全遺物の3D座標を取得する。

3 北斜面貝層の遺物分布図、遺物台帳一括スキャンの利点

遺物分布図、遺物台帳を一括スキャンすると、発掘調査報告書リストに掲載されていない出土物3D座標を知ることができるという大きな利点が生まれます。

4 一括スキャン利点を活かした興味ある検討

一括スキャンで生まれるリスト非掲載遺物3D座標取得を活かして次のような興味ある検討が可能となります。

4-1 「崩落土」から土器出土があるのかどうか確かめることができる

土器の3D座標はおそらく10000以上取得できると思います。土器型式は遺物分布図と遺物台帳からはわかりません。しかし「崩落土」のどのような部位から土器出土があるのかということが判るだけでも、貝層発達判断の有力な情報となることが考えられます。


全出土遺物の3D分布密度 斜面貝層と崩落土の関係に興味がある

4-2 最下部遺物の座標からガリー侵食基底面の高さを推定できる

ガリー侵食域では、最下部に位置する遺物の座標からガリー侵食基底面の概略の高さを知ることができます。貝層断面のないガリー侵食谷頭部ではガリー侵食基底面の高さを知るうえで有力な情報となります。

一方、貝層の発達しない一般地形面では最下部に位置する遺物の座標から当時の地形面を推定する手がかりになります。


遺物の3D分布下限からガリー侵食基底面を想定する

4-3 3D空間における遺物分布密度を知ることができる

北斜面貝層のある特定メッシュ、あるいはある特定区域、あるいは全体を対象にして3D空間における遺物分布密度を知ることができます。全遺物の3D分布密度がわかれば、貝層発達判断の重要な指標となります。この情報に遺物種別の分布密度が一緒に判れば、貝層発達だけでなく、貝層利用の様子が手に取るように判るようになることが期待できます。


仮想的な遺物分布密度の違い

左は下部で2層で分布密度が2倍となっている創作事例です。3D分布密度を表現する3Dヒートマップなどの開発も必要だと考えます。

5 一括スキャン活動のイメージ

まず、現在活動中の土器3D座標取得活動を完成させます。

次に、メッシュ20ヶ所(遺物分布図10枚分)程度を対象に一括スキャンのテスト活動を1日間の予定で行い、作業時間や作業課題に関する情報を得ます。このテスト活動を踏まえ、残りの作業を本作業として数日かけて行います。

2023年6月17日土曜日

干渉色生成BlenderPythonスクリプトを作成して干渉色を楽しむ

 Enjoy interference colors by creating a BlenderPython script that generates interference colors


I created a Python script to play the interference color set for map art developed by Koji Yamada in Blender. I used this script to apply interference colors to the sloped shell layer terrain and enjoyed the micro-terrain interference color art.


やまだこーじさんが開発した地図アート向け干渉色を、Blenderで生成するPythonスクリプトを作成しました。このスクリプトで干渉色を斜面貝層地形に適用して、微地形干渉色アートを楽しみました。

1 やまだこーじさん開発干渉色セットを生成するBlenderPythonスクリプト

ChatGPTの支援も受けて、やまだこーじさんが開発した干渉色セットをBlenderColorRampセットとして生成するBlenderPythonスクリプトを作成しました。

●やまだこーじさん開発干渉色セットを生成するBlenderPythonスクリプト

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

#やまだこーじさん開発干渉色セット(テクスチャ座標、マッピング、グラデーションテクスチャ、カラーランプ)の生成。メッシュオブジェクトを1つ選択してからこのスクリプトを走らせる。

import bpy

# 選択されたオブジェクトを取得

selected_obj = bpy.context.object

# オブジェクトに関連付けられたマテリアルを取得

material = selected_obj.active_material

# マテリアルが存在しない場合は新しいマテリアルを作成

if material is None:

    material = bpy.data.materials.new(name="interference_color")

    selected_obj.active_material = material

    material.use_nodes = True

    material.blend_method = "BLEND"

# テクスチャ座標設定

ndtc = material.node_tree.nodes.new("ShaderNodeTexCoord")

ndtc.location = -800, 350

# マッピング設定

ndmp = material.node_tree.nodes.new("ShaderNodeMapping")

ndmp.location = -630, 350

# グラデーションテクスチャ設定

ndgr = material.node_tree.nodes.new("ShaderNodeTexGradient")

ndgr.location = -450, 350

# カラーランプノードの追加と設定

ndvr = material.node_tree.nodes.new("ShaderNodeValToRGB")

ndvr.location = -260, 350

ndvr.color_ramp.color_mode = "RGB"

ndvr.color_ramp.interpolation = "LINEAR"

# やまだこーじさん開発 干渉色カラーグラデーションの設定

ndvr.color_ramp.elements[0].position = 0.0

ndvr.color_ramp.elements[0].color = 0.888,0.991,0.965,1

ndvr.color_ramp.elements.new(position=0.042).color = 1,0.922,0.578,1

ndvr.color_ramp.elements.new(position=0.083).color = 0.913,0.578,0.112,1

ndvr.color_ramp.elements.new(position=0.125).color = 0.597,0.175,0.002,1

ndvr.color_ramp.elements.new(position=0.167).color = 0.205,0,0.352,1

ndvr.color_ramp.elements.new(position=0.208).color = 0,0.138,0.839,1

ndvr.color_ramp.elements.new(position=0.250).color = 0,0.533,1,1

ndvr.color_ramp.elements.new(position=0.292).color = 0.238,0.913,0.730,1

ndvr.color_ramp.elements.new(position=0.333).color = 0.716,1,0.235,1

ndvr.color_ramp.elements.new(position=0.375).color = 1,0.761,0,1

ndvr.color_ramp.elements.new(position=0.417).color = 1,0.342,0.198,1

ndvr.color_ramp.elements.new(position=0.458).color = 0.880,0.040,0.665,1

ndvr.color_ramp.elements.new(position=0.500).color = 0.323,0.054,0.965,1

ndvr.color_ramp.elements.new(position=0.542).color = 0,0.366,0.847,1

ndvr.color_ramp.elements.new(position=0.583).color = 0,0.753,0.440,1

ndvr.color_ramp.elements.new(position=0.625).color = 0.076,0.947,0.114,1

ndvr.color_ramp.elements.new(position=0.667).color = 0.672,0.839,0.141,1

ndvr.color_ramp.elements.new(position=0.708).color = 1,0.521,0.474,1

ndvr.color_ramp.elements.new(position=0.750).color = 1,0.212,0.791,1

ndvr.color_ramp.elements.new(position=0.792).color = 0.905,0.120,0.831,1

ndvr.color_ramp.elements.new(position=0.833).color = 0.337,0.275,0.584,1

ndvr.color_ramp.elements.new(position=0.875).color = 0,0.552,0.301,1

ndvr.color_ramp.elements.new(position=0.917).color = 0,0.768,0.223,1

ndvr.color_ramp.elements.new(position=0.958).color = 0.147,0.791,0.392,1

ndvr.color_ramp.elements.new(position=1.000).color = 0.624,0.638,0.631,1

# ノード間のリンク設定

material.node_tree.links.new(ndtc.outputs[0], ndmp.inputs[0])

material.node_tree.links.new(ndmp.outputs[0], ndgr.inputs[0])

material.node_tree.links.new(ndgr.outputs[0], ndvr.inputs[0])


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


このBlenderPythonスクリプトで生成するノードセット

2 有吉北貝塚北斜面貝層ガリー侵食基底面地形への干渉色の適用

有吉北貝塚北斜面貝層ガリー侵食基底面地形へ干渉色を適用すると次のような画像になります。


有吉北貝塚北斜面貝層ガリー侵食基底面地形へ干渉色を適用した様子

干渉色で染めた地形表現をより深めるために、干渉色と等高縞模様をカラーミックスノードでミックスして楽しみました。


Blenderカラーミックスノードによる干渉色と等高縞模様のミックスの様子

14種のミックスをテストしました。図の上の3つ(焼き込みカラー、ミックス(係数0.5)、リニアライト)は個性が強すぎて使う場面はなさそうです。しかし、それ以外の11種は面白い、楽しい、美しいモノばかりで、楽しみ場面だけでなく学習場面でも使いたくなります。

特に乗算、覆い焼きカラー、差分、スクリーンの4つは気に入りました。


乗算


覆い焼きカラー


差分


スクリーン

3 メモ

3-1 BlenderRGB値について

BlenderではRGB値を0-1の間の数で表示しています。この値と通常のRGB値(0-255)の値の関係は線形ではなく、ガンマ曲線の関係になっています。通常のRGB値(0-255)を255で除した数のBlenderRGB値(0-1)をガンマ補正2.2すると通常のRGB値(0-255)に戻ります。

3-2 Blenderの実際の色味

理論は3-1のようですが、実際のBlenderの色味はもう少し複雑になっているようです。

やまだこーじさんの干渉色セットは16進数あるいはそれに対応した通常のRGB値(0-255)で表示されています。今回はこの値が対応するBlenderRGB値(0-1)をBlenderカラー表示で1つ1つ確かめて入力しました。一方、やまだこーじさんの値を通常のRGB値(0-255)で整理して、それを255で除して、さらにガンマ補正2.2をしました。この二つを比べると、ガンマ補正した色の方がやまだこーじさん本来の色味に近いです。今回作成した干渉色は少し薄い色味になっています。このあたりの学習を今後深めることにします。

4 感謝

この記事の干渉色セットは次のページから取得させていただきました。

地図アート研究所 干渉色・抽出色地図アート作成ツール(試作版)

干渉色セットを開発して公開しているやまだこーじさんに感謝します。


2023年6月16日金曜日

有吉北貝塚北斜面貝層 阿玉台式土器12点3D分布モデルの作成

 Creation of a 3D distribution model of 12 pieces of Atamadai-style pottery on the northern slope of the Ariyoshi Kita Shell Mound


I read the 3D coordinates of 12 points of Atamadai-type pottery from the graph published in the excavation report, displayed them in Blender 3D space, and conducted a preliminary examination. 3D coordinate reading was done with my own Python script.


発掘調査報告書掲載グラフから阿玉台式土器12点の3D座標を読み取り、Blender3D空間に表示し、予備検討しました。3D座標読み取りは自作Pythonスクリプトで行いました。

1 グラフから3D座標を読み取るPythonスクリプト

次はPythonスクリプトh3.pyの例です。

…………………

import cv2

def onMouse(event, x, y, flags, params):

    if event == cv2.EVENT_LBUTTONDOWN:

        print('{:.03f}'.format((y-97)/95.111+2), '{:.03f}'.format((x-36)/94.125+20), 0)

img = cv2.imread('h3e.png')

cv2.namedWindow('gazo', cv2.WINDOW_NORMAL)

cv2.imshow('gazo', img)

cv2.setMouseCallback('gazo', onMouse)

cv2.waitKey(0)

…………………

h3.pyをコマンドラインで走らせると計測用画像(平面図)が画面に出て、計測ポイントをクリックするとblender3D空間対応座標(x座標、y座標)が画面に表示されます。


h3.pyを走らせた様子(実際の作業は別画面に平面図を大伸ばしして行います。)

別のスクリプトで立面図から同じ対象のy座標、z座標を取得し、合わせて3D座標(x、y、z)を取得します。

この方法により個別土器毎の3D座標を正確に取得することができます。

昨年同じ作業をしましたが、そのときはBlender3D空間の中で図学的方法で手作業で同じ作業を行いました。作業が煩雑であるためグループ毎一括の作業となり、個別土器毎の作業とはなりませんでした。

2 阿玉台式土器12点の3D座標読み取り結果と3D空間プロット

2-1 阿玉台式土器12点の3D座標読み取り結果


阿玉台式土器12点の3D座標読み取り結果

2-2 有吉北貝塚北斜面貝層 阿玉台式土器12点3D分布モデル

有吉北貝塚北斜面貝層 阿玉台式土器12点3D分布モデル

阿玉台式土器12点…黄色CUBE

(CUBEの大きさは30㎝×30㎝×30㎝で表示)

阿玉台式土器の3D座標は発掘調査報告書グラフから計測

ガリー侵食地形面及び一般地形面は貝層断面図、貝層平面図から作成

等高縞模様は等高線に見立てるとおおよそ60㎝間隔

貝層断面図は発掘調査報告書から塗色の上引用

剥ぎ取り断面図は展示物3Dモデル及び上守秀明氏提供画像から構成

注記

No.1,阿玉台Ⅲ式,第4群土器,土器番号28

No.2,阿玉台Ⅲ式,第4群土器,土器番号25

No.3,阿玉台Ⅰb式,第2群土器,土器番号3

No.4,阿玉台Ⅲ式,第4群土器,土器番号24

No.5,阿玉台Ⅲ式,第4群土器,土器番号27

No.6,阿玉台Ⅲ式,第4群土器,土器番号20

No.7,阿玉台Ⅱ式,第3群土器,土器番号15

No.8,阿玉台Ⅱ式,第3群土器,土器番号14

No.9,阿玉台Ⅲ式,第4群土器,土器番号34

No.10,阿玉台Ⅰb式,第2群土器,土器番号4

No.11,阿玉台Ⅲ式,第4群土器,土器番号26

No.12,阿玉台Ⅳ式,第5群土器,土器番号51


有吉北貝塚北斜面貝層 阿玉台式土器12点3D分布モデルの画像1


有吉北貝塚北斜面貝層 阿玉台式土器12点3D分布モデルの画像2


有吉北貝塚北斜面貝層 阿玉台式土器12点3D分布モデルの動画

3 予備検討

No.1~4はガリー侵食谷頭急斜面に位置することから、谷頭上部から急斜面に向かって投棄されたものと解釈できます。No.5、6は谷頭から投棄された土器が重力と流水の営力で流されたものと解釈できます。No.6は谷底基底面から出土していて、集中出土する加曽利EⅡ式土器はこれより上の貝層から出土しています。この様子から阿玉台式土器の投棄は加曽利EⅡ式土器集中投棄以前に投棄されたことが示唆されます。No.1土器は想定した谷頭急斜面より下から出土していて、谷頭急斜面の3D復元が間違っている可能性があります。

No.7は斜面貝層とその下の「崩落土層」の境付近から出土しているように観察できます。

No.8は貝層の最下部から出土しています。

No.9~12は貝層堆積域の外からの出土です。貝層が形成していた頃、あるいはそれ以前の頃の陸域からの出土です。No.12は地形面の下からの出土であり、この付近の地形面表現が曖昧であることを突きつけられます。この付近のガリー侵食基底面地形はわかりませんし、堆積地形も時間経過の中で変化し続けていると考えられます。この付近の地形面表現はしない方がよいのかもしれません。


2023年6月15日木曜日

空間視認性の良い地形面3Dモデル カラー段彩と等高縞模様のミックス

 Terrain surface 3D model with good spatial visibility of the slope shell layer Mix of color gradation and contour striped pattern


As an effective method of expressing topographical surfaces that serve as a spatial framework for observing shell layers on the north slope of the Ariyoshi Kita Shell Mound, I examined a mixture of color gradation and contour striped patterns. In the future, I will find a combination that makes it easy to understand the 3D spatial distribution of the relics shown in CUBE, and use it.


有吉北貝塚北斜面貝層観察の空間的枠組みとなる地形面の効果的表現方法として、カラー段彩と等高縞模様のミックスを検討しました。今後、CUBEで示す遺物の3D空間分布が判りやすい組合わせを見つけて、活用することにします。

1 カラー段彩と等高縞模様のミックス


カラー段彩と等高縞模様のミックス

有吉北貝塚北斜面貝層の3D地形面モデル(ガリー侵食基底地形及び周辺一般地形の3Dモデル)のテクスチャ画像を合計15種作成しました。その内訳はカラー段彩と等高縞模様をそれぞれ3種、その組合わせ9種です。

この資料は、ガリー侵食地形(箱形にえぐられた地形。その地形を埋めて斜面貝層が発達する。)の3D空間にCUBEで遺物分布をプロットしたとき、遺物分布や遺物と地形との関係が視認しやすいテクスチャ画像を探すために作成したものです。

結果として15種のうち8種が実用性があると判断し、赤枠で囲みました。またそのうちの1種は特に使い勝手がよさそうだと判断し、赤枠を2重にしました。


実用性があると判断した中で最も使い勝手がよさそうだと判断したミックステクスチャ画像

2 カラー段彩と等高縞模様ミックステクスチャ画像の地形3Dモデル

カラー段彩と等高縞模様ミックステクスチャ画像の地形3Dモデル

有吉北貝塚北斜面貝層の3D地形面モデル(ガリー侵食基底地形及び周辺一般地形の3Dモデル)

CUBEは阿玉台式土器3D空間プロット


3モデルの動画

3 メモ

・カラー段彩の配色は国土地理院のデジタル標高地形図を参考に設定しました。

・等高縞模様は縞模様画像をBlenderで地形面に投影して作成しました。縞模様を等高線に見立てると、おおよそ60㎝間隔等高線になります。

・BlenderのColorRampではカラーストップ設定数上限が32であり、ColorRampを使った等高縞模様作成は困難です。

・カラー段彩と等高縞模様のミックスはカラーミックスノードで「スクリーン」設定で行いました。

・Blender画面で作成した画像をベイクして(書き出して)画像ファイルにして使うのですが、ベイクした時Blender画像より鮮やかに変化しており、当初の想定と少し異なった結果になりました。


2023年6月14日水曜日

BlenderのColorRampノードをBlenderPythonで遊ぶ

 Playing with Blender's ColorRamp node in BlenderPython


I played with Blender's ColorRamp node by getting its information with BlenderPython and generating a node set with BlenderPython. Operating ColorRamp has become fun.


BlenderのColorRampノードについて、その情報をBlenderPythonで取得したり、BlenderPythonでノードセットを生成したりして遊んでみました。ColorRampの操作が楽しくなってきました。

遊び 1 平面メッシュに干渉色カラーを塗るBlenderPythonスクリプト

2023.06.10記事「Blenderでカラーグラデーションを塗るPythonスクリプト」で、ChatGPTに「Blenderで新たな平面メッシュに赤~燈~黄~緑~青~藍~紫のカラーグラデーションを塗るPythonスクリプト」を作ってもらいました。

その回答に続けて、さらに次の質問をChatGPTにして回答を得ました。

【ChatGPT質問】

このBlenderPythonスクリプトを参考にして、Blenderで新たな平面メッシュに干渉色カラーのグラデーションを塗るスクリプトを教えてください。

【ChatGPT回答】

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

import bpy

# 平面メッシュ生成とマテリアル設定、ノードを使用、ブレンドモードをアルファブレンドに設定

bpy.ops.mesh.primitive_plane_add()

obj = bpy.context.object

mat = bpy.data.materials.new(name="interference_color")

obj.active_material = mat

mat.use_nodes = True

mat.blend_method = "BLEND"

# テクスチャ座標設定

ndtc = mat.node_tree.nodes.new("ShaderNodeTexCoord")

ndtc.location = -800, 250

# マッピング設定

ndmp = mat.node_tree.nodes.new("ShaderNodeMapping")

ndmp.location = -630, 250

# グラデーションテクスチャ設定

ndgr = mat.node_tree.nodes.new("ShaderNodeTexGradient")

ndgr.location = -450, 250

# カラーランプ設定

ndvr = mat.node_tree.nodes.new("ShaderNodeValToRGB")

ndvr.location = -260, 250

ndvr.color_ramp.color_mode = "RGB"

ndvr.color_ramp.interpolation = "LINEAR"

# 干渉色カラーグラデーションを設定

ndvr.color_ramp.elements[0].position = 0.0

ndvr.color_ramp.elements[0].color = 1, 0, 0, 1

ndvr.color_ramp.elements.new(position=0.25).color = 1, 0.4, 0, 1

ndvr.color_ramp.elements.new(position=0.5).color = 0, 1, 0, 1

ndvr.color_ramp.elements.new(position=0.75).color = 0, 0, 1, 1

ndvr.color_ramp.elements.new(position=1.0).color = 1, 0, 1, 1

# プリンシプルBSDF設定

ndpb = mat.node_tree.nodes["Principled BSDF"]

ndpb.inputs[0].default_value = 0, 0, 0, 1

ndpb.inputs[7].default_value = 0

ndpb.inputs[9].default_value = 1

ndpb.inputs[17].default_value = 0

ndpb.inputs[18].default_value = 1

# ノード間のリンク設定

mat.node_tree.links.new(ndtc.outputs[0], ndmp.inputs[0])

mat.node_tree.links.new(ndmp.outputs[0], ndgr.inputs[0])

mat.node_tree.links.new(ndgr.outputs[0], ndvr.inputs[0])

mat.node_tree.links.new(ndvr.outputs[0], ndpb.inputs[0])

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

【ChatGPT説明】

このスクリプトは、干渉色カラーグラデーションを作成するために、いくつかのノードを追加し、カラーランプの要素を調整しています。干渉色カラーグラデーションは、赤、橙、黄、緑、青、紫の色相で構成されます。

新たな平面メッシュを作成し、その上に干渉色カラーグラデーションが適用されます。干渉色カラーグラデーションは、物体の位置に依存しないため、平面メッシュのサイズや形状に関係なく同じグラデーションが得られます。

このスクリプトを実行すると、新しい平面メッシュが作成され、その上に干渉色カラーグラデーションが塗られます。


干渉色に塗られた平面

やまだこーじさん開発の干渉色とはだいぶ趣が違いますが、ChatGPTなりに干渉色の事例を作ったことは楽しいできごとです。

関連して、次のような追加質問をしてみました。

【ChatGPT質問】

このスクリプトで表現した「干渉色」の定義や説明を教えてください。

【ChatGPT回答】

「干渉色」とは、物理的な干渉現象に基づいて生じる色のことを指します。光は波動の性質を持っており、波長や振動数の異なる光が干渉することで、特定の色の組み合わせが生じます。

干渉色は、光の波長や周波数によって変化し、視覚的な色の現象として観察されます。一般的に、光の干渉は2つの波が出会って相互作用する場合に起こります。

例えば、薄い膜の上を透過した光が反射して戻ってくる場合、波の干渉によって一部の波長の光が強められたり減衰したりすることがあります。この干渉によって生じる光の波長の組み合わせが、干渉色として観察されます。

具体的な例としては、オイルや水の薄い膜の上に光が反射して干渉色が現れる現象や、CDやDVDの表面の微細な凹凸が光の干渉によって虹色の光を生じる現象などがあります。

干渉色は一般的には虹色に似た色相を持ち、複数の色が連続的に変化するグラデーションを形成します。このスクリプトでは、赤、橙、黄、緑、青、紫の干渉色のグラデーションが平面メッシュに塗られるように設定されています。

…………………

ChatGPTとコミュニケーションが成り立ったことは楽しいことです。

遊び 2 ColorRampノードの情報取得スクリプト作成

遊び1でChatGPTに作ってもらった干渉色グラデーションのColorRampノードをテスト事例として、そのノードから詳細情報を取得するBlenderPythonスクリプトをChatGPTの支援を受けて作りました。

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

#選択されたカラーランプノードのcolor_mode,interpolation,各要素の番号,position,color(BlenderにおけるRGB表記、0.0-1.0の範囲で表示)をprintする

import bpy

# カラーランプノードを取得

selected_node = bpy.context.active_object.active_material.node_tree.nodes.active

# カラーモードを出力

color_mode = selected_node.color_ramp.color_mode

print("Color Mode:", color_mode)

# 補間方法を出力

interpolation = selected_node.color_ramp.interpolation

print("Interpolation:", interpolation)

# カラーランプの各要素の情報を出力

elements = selected_node.color_ramp.elements

for i, element in enumerate(elements):

    position = element.position

    color = element.color

    # BlenderにおけるRGB表記に変換

    color_blender = (

        color[0],

        color[1],

        color[2]

    )

    print(f"Element {i} - Position: {position}, Color: {color_blender}")

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


スクリプトを走らせた結果得られたColorRampノード情報

複雑で手の込んだColorRampノードをアナログで作成した場合、positionやcolor(RGB値、0.0-1.0の範囲)の数値は桁の多い少数点表示になりますからその記録をする上で、このBlenderPythonスクリプトがあると便利です。ColorRampをアペンドしなくても、数値でColorRampを再生できます。色をRGB値(0-255)表示と16進数表示のスクリプトも別に作成しました。

遊び 3 ColorRampノードセット生成スクリプト作成

遊び2で得られたColorRampノード情報をテスト事例として、ColorRampノードと関連ノードをセットで生成して、シェーダーエディター画面に配置するBlenderPythonスクリプトをChatGPTの支援を受けて作成しました。

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

#ColorRampノードセット(テクスチャ座標、マッピング、グラデーションテクスチャ、カラーランプ)の生成

import bpy

# 選択されたオブジェクトを取得

selected_obj = bpy.context.object

# オブジェクトに関連付けられたマテリアルを取得

material = selected_obj.active_material

# マテリアルが存在しない場合は新しいマテリアルを作成

if material is None:

    material = bpy.data.materials.new(name="interference_color")

    selected_obj.active_material = material

    material.use_nodes = True

    material.blend_method = "BLEND"

# テクスチャ座標設定

ndtc = material.node_tree.nodes.new("ShaderNodeTexCoord")

ndtc.location = -800, 350

# マッピング設定

ndmp = material.node_tree.nodes.new("ShaderNodeMapping")

ndmp.location = -630, 350

# グラデーションテクスチャ設定

ndgr = material.node_tree.nodes.new("ShaderNodeTexGradient")

ndgr.location = -450, 350

# カラーランプノードの追加と設定

ndvr = material.node_tree.nodes.new("ShaderNodeValToRGB")

ndvr.location = -260, 350

ndvr.color_ramp.color_mode = "RGB"

ndvr.color_ramp.interpolation = "LINEAR"

# 干渉色カラーグラデーションの設定

ndvr.color_ramp.elements[0].position = 0.0

ndvr.color_ramp.elements[0].color = 1, 0, 0, 1

ndvr.color_ramp.elements.new(position=0.25).color = 1, 0.4, 0, 1

ndvr.color_ramp.elements.new(position=0.5).color = 0, 1, 0, 1

ndvr.color_ramp.elements.new(position=0.75).color = 0, 0, 1, 1

ndvr.color_ramp.elements.new(position=1.0).color = 1, 0, 1, 1

# ノード間のリンク設定

material.node_tree.links.new(ndtc.outputs[0], ndmp.inputs[0])

material.node_tree.links.new(ndmp.outputs[0], ndgr.inputs[0])

material.node_tree.links.new(ndgr.outputs[0], ndvr.inputs[0])

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


ColorRampノードセット生成スクリプトを走らせてセットを生成し、メッシュオブジェクトにリンクした様子


BlenderPythonスクリプトで生成したノードセット

このスクリプトがあれば、数値情報があれば、直ぐにColorRampノードを実戦投入できます。生成するノードセットはテクスチャ座標ノード、マッピングノード、グラデーションテクスチャノード、ColorRampノードです。

遊び 4 ColorRampノードのプロパティ画面でノードを拡大出来ることを知る

シェーダーエディター画面の中に通常のColorRampノードは拡大に限度があります。しかしシェーダーエディター画面右に生成できるColorRampノードのプロパティ画面ではColorRampをいくらでも拡大できます。多数のストップを配置する場合などに便利であることに気が付きました。


拡大したColorRampノードのプロパティ画面

感想

干渉色はやまだこーじさんが素晴らしいものを開発していますから、それを使わせていただくことにします。自分が学習している考古事象(考古学的地形、考古遺物など)を見やすくしたり、分析しやすくするのにふさわしいカラーグラデーションを開発して楽しむことにします。


2023年6月12日月曜日

日本学術会議公開シンポ「最終氷期以降の日本列島の…」の聴講と感想

 Attending and Impressions of the Public Symposium of the Science Council of Japan “The Japanese Archipelago after the Last Glacial…”


I attended the Science Council of Japan Public Symposium "Climate/environmental changes in the Japanese archipelago and human response after the last ice age" (2023.06.11) via zoom. It was a very interesting talk, and I made a note of my impressions.

日本学術会議公開シンポジウム「最終氷期以降の日本列島の気候・環境変動と人類の応答」(2023.06.11)をzoomで聴講しました。とても興味深い話しばかりであり、その感想をメモしました。

1 シンポジウム概要


シンポジウム概要

Twitterでその開催を知り、聴講を応募し、2023.06.11にzoomで聴講しました。9先生からそれぞれ20分の話しがありました。webサイト(事務局島根大学)には説明趣旨及び9先生の講演資料が掲載されダウンロード出来るようになっています。

2 講演内容と感想

2-1 開会挨拶・説明趣旨 斎藤文紀(日本学術会議連携会員、島根大学エスチュアリー研究センター長・特任教授)


シンポジウムが対象とする12.9万年前以降(資料)

2-2 「過去15万年間の気候変動」 阿部彩子(日本学術会議連携会員、東京大学大気海洋研究所・教授)

地球の気候を変動させる日射量変化などの外的な力に基づく気候モデルと氷床力学モデルを組み合わせて、シミュレーションにより、更新世と完新世の氷期と間氷期の繰返しを再現した研究と理解しました。ヤンガードリアス期の存在を気候の自励的振動であると解釈する研究はとても興味深いものです。なぜヤンガードリアス期という寒冷イベントが存在したのか、常日頃疑問としていたことを理解できるかもしれないという糸口を見つけることができました。


退氷期中の気候変化のシミュレーション(講演資料)

2-3 「現生人類がたどってきた道」 海部陽介(日本学術会議連携会員、東京大学総合研究博物館・教授)

次の3点についての講演です。

・最終氷期前半のアジアの人類

・ホモ・サピエンス(=私たち)の進化

・ホモ・サピエンスのアジア進出

ブルーバックス「図解 人類の進化」(斎藤成也、海部陽介、他)という本を最近読んでいますので、講演の理解が深まり、興味も深まります。


10万年前頃の世界(講演資料)

2-4 「アイスエイジから現在までの海水準:ヒトは歩いて海峡を渡れたか?」 横山祐典(東京大学大気海洋研究所教授)

LGM(最終氷期最盛期)頃の海水準変動を検討していて、海峡が閉塞した日本海の表層塩分の低下や、11000年前の対馬暖流流入による東シナ海有機物流入など、ホットな最新情報の話しが興味深いものでした。


白熱するかつての海水準の議論(講演資料)

2-5 「最終氷期における日本周辺の海洋環境」 郭 新宇  (愛媛大学沿岸環境科学研究センター長・教授)

最終氷期の黒潮が琉球列島の内側に入り込んでいた様子をシミュレーションで明らかにした研究の紹介です。


現代と最終氷期の黒潮の様子(講演資料)

2-6 「年縞から見た「暴れる気候」と人間の歴史」 中川 毅  (立命館大学古気候学研究センター長・教授)

年縞分析から気候変動が激しい時期と穏やかな時期が弁別出来て、気候変動が激しい時期は人類の農業開始や定住にふさわしい時期でないことがわかり、それを「暴れる気候」と表現しています。これまでの温暖-寒冷弁別では農業開始や定住開始を説明できないとしています。

とても説得力ある説明で、腑に落ちる説明です。年縞分析という地道な作業の大成果だと感じました。このシンポジウムで私が最も面白かった講演です。


「おだやかな時代」の到来(講演資料)

2-7 「日本列島の現生人類文化の出現、定着、変化」 出穂雅実(東京都立大学人文社会学部・准教授)

上部旧石器時代の人類の拡散過程での日本列島の様子を詳しく説明しています。その後期に沿岸ルートでアメリカ大陸に進出した際、その本源地が北海道であったかもしれないという示唆は、私ははじめて聞いた話しで、とても興味を深めました。北東アジアという観点でみると上部旧石器時代後期では北海道が重要な地理的キーポイントであったということです。


研究の枠組みと意義(講演資料)

2-8 「古代ゲノムから見た日本列島の現生人類」 太田博樹(東京大学大学院理学系研究科・教授)

日本列島に進出した後期旧石器時代人のゲノムを伊川津縄文人(2500年前)ゲノムから推察して、ユーラシア南ルート人のゲノムであり、北回り人のゲノムはほとんど含まれていないことを結論として得た研究成果の話しです。とても興味深い話しです。


東ユーラシア大陸の人類集団史の概略(講演資料)

2-9 「樹木年輪から見た年から十年単位の気候変動」講演資料 中塚 武  (名古屋大学大学院環境学研究科・教授)

樹木年輪を用いた古気候復元とそれによる歴史事象解釈の講演です。古気候変動と歴史事象がぴたりと一致する様子はとても小気味いい話しです。昔は年輪幅を指標としていましたが、今は年輪酸素同位体比という指標を使います。この指標から数十年単位の降水量振幅変化を知ることができ、その様子と歴史事象がよく対応します。予想できない水害や冷害が頻発する時期になると生活・生産破壊が生まれ、難民が生まれ、人の移動が活発化し、それが集落数増、戦争増として記録されるとしています。

弥生~古墳時代まで遡って社会の様子をみるデータとして利用できるそうです。


作業仮説(講演資料)

2-10 「縄文・弥生社会の環境構築」 松本直子(岡山大学文学部教授)

縄文・弥生社会で人が環境に働きかけて環境を構築してきた様子を総合的に説明する話しでした。


縄文社会の環境構築(講演資料)

2-11 討論

討論はなく、講演者毎に質問に答えるコーナーとなりました。

アイヌは北回り人系のゲノムではないかという質問がありましたが、太田博樹先生の回答では今後の課題みたいな答えであり、すっきりせず、興味(疑問)が深まりました。

3 感想

どの講演も面白く、興味深いものばかりで、シンポジウムはアッという間に終わってしまいました。これらの中で、自分の学習参考として最も注目したのは次の講演です。

●「年縞から見た「暴れる気候」と人間の歴史」中川 毅

関連して次の講演も注目しました。

●「樹木年輪から見た年から十年単位の気候変動」中塚 武

次の講演は自分の知りたい事柄の情報が多く、特段に面白いものでした。

●「日本列島の現生人類文化の出現、定着、変化」出穂雅実

また、次の講演内容はシミュレーション研究の面白さや有用性がよく理解できて、強い刺激を受けました。

●「過去15万年間の気候変動」阿部彩子

いつか自分の学習活動でもシミュレーション分析のマネゴトを行い、楽しみたくなりました。