私の散歩論

ページ

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モデル

0 件のコメント:

コメントを投稿