2025年5月12日月曜日

遺物データベースの3D空間表示用Blenderアドオン自作

 I made a Blender add-on for displaying relic databases in 3D space.


I made an add-on for a database of relics with 3D coordinates that displays relics by classification in the Blender3D viewport. It feels like the database itself is imported into Blender, which is more convenient than importing data using BlenderPython scripts.


3D座標付遺物データベースについて、その分類毎に遺物をBlender3Dビューポートに表示するアドオンを自作しました。データベースそのものをBlenderに取り込んだ感覚になり、BlenderPythonスクリプトを使ったデータ取り込みより便利です。

1 遺物データベースの3D空間表示用Blenderアドオン Artifact Class Importer


遺物データベースの3D空間表示用Blenderアドオン Artifact Class Importer の説明

・ID、XYZ座標、分類から構成される5列のcsvファイルを読み込みます。

・ブラウザからcsvファイルを選択できます。

・遺物IDを名称とするオブジェクト(5㎝×5㎝×5㎝立方体)が3D空間に生成され、アウトライナーの特設コレクションに格納されます。

・全て表示および14分類のボタンにより、それぞれの分類毎にオブジェクトが3D空間に配置されます。


アドオンのパネル画面


アドオンのプロパティ


アドオンファイルの記述

2 ボタン別表示の様子


土器・土製品


石器・石


貝製品


骨・歯

3 感想

Blenderにデータベース情報を格納する能力があることを実感しました。

アドオン作成はChatGPTの支援を活用して、数回の修正を繰り返して実現しました。その途中で、本当にデータベース情報を格納できるのだろうかと疑問になり、ChatGPTに次の質問をしたほどです。

今後アドオンパネルを有効活用することにより、データベースソフト(postgreSQLなど)ではなく、Blenderで直接分析して、即3D空間表示するという新しい展望が開きました。

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

(この記事のアドオンの元となった別アドオンでのやりとりです。)

●私

再度試す前に、教えてください。今回読み込むcsvファイルにはIDと座標以外のデータベース情報が含まれています。その情報をBlenderが受け取り内部に格納することができると考えて間違いないか確認したいです。

●ChatGPT

はい、その認識で問題ありません。

Blender のオブジェクトには “カスタムプロパティ” として任意のキー/値ペアを内部に保持できます。今回のアドオンでも、以下のようにして

obj["class"] = class_v

obj["size"]  = size_v

obj["color"] = color_v

と書くことで class・size・color をオブジェクト内に格納していますが、CSV の他の列(例えば「発見年」や「遺跡名」など)があれば、同様に

for key, val in row.items():

    if key not in ("ID", "X", "Y", "Z"):

        obj[key] = val

とすれば、すべてのデータベース情報を obj["発見年"]、obj["遺跡名"] として取り込めます。

取り込んだプロパティは Python コンソールから bpy.data.objects["ID名"]["発見年"] のようにアクセスできますし、プロパティパネルに表示させることも可能です。

──つまり、ID/座標以外の列もカスタムプロパティとして完全に保持できます。追加で取り込みたいフィールドがあれば教えてください。

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


0 件のコメント:

コメントを投稿