画像から3Dモデルを生成できるツールが増えています。プロトタイプや検証用途ではかなり便利ですが、生成したモデルをそのままゲーム、Web 3D、3Dプリントに使えるとは限りません。
この記事では、画像から生成した3Dモデルを使う前に、最低限チェックするためのスクリプト案をまとめます。
やりたいこと
-
生成済みの3Dモデルをフォルダに置く
-
ファイル形式とサイズを一覧化する
-
GLBの場合はmesh数やface数をざっくり見る
-
CSVでチェック結果を出す
-
人間が見るべき項目をメモする
前提
| 項目 | 内容 |
|---|---|
| 入力 | 白背景のオブジェクト画像、またはAI生成画像 |
| 生成 | Image-to-3Dツールでモデル化 |
| 出力 | GLB、OBJ、STL、FBXなど |
| 用途 | ゲーム、Web 3D、AR、3Dプリント、プロトタイプ |
| 考え方 | 完成品ではなく、確認・修正する底模として扱う |
環境
今回はPythonで軽く確認するだけなので、最小構成は以下です。
Windows 11 / macOS
Python 3.10+
trimesh
openpyxl または csv標準ライブラリ
GLBのmesh情報を読む場合は、trimeshを入れておきます。
python -m venv .venv
.\.venv\Scripts\activate
pip install trimesh
ディレクトリ構成
model_check/
input_images/
chest.png
chair.png
generated_models/
chest.glb
chair.glb
robot.stl
reports/
check_models.py
まず見るチェック項目
| 確認項目 | チェック内容 | 自動化しやすさ |
|---|---|---|
| format | GLB、OBJ、STLなど想定形式か | 高 |
| file size | 重すぎないか | 高 |
| mesh / face count | GLBなどで概算を取る | 中 |
| texture | 伸び、にじみ、影の焼き込み | 低 |
| silhouette | 元画像らしさが残っているか | 低 |
| printability | 厚み、穴、接地面 | 低 |
チェック用Pythonスクリプト
以下は、generated_models配下のモデルを走査して、形式、ファイルサイズ、GLBのmesh/face数をCSVに出す例です。
from pathlib import Path
import csv
try:
import trimesh
except ImportError:
trimesh = None
MODEL_DIR = Path("generated_models")
REPORT_DIR = Path("reports")
OUT_CSV = REPORT_DIR / "model_check.csv"
TARGET_EXTS = {".glb", ".gltf", ".obj", ".stl", ".fbx", ".usdz"}
def inspect_glb(path: Path):
if trimesh is None:
return "", "", "trimesh not installed"
try:
scene = trimesh.load(path, force="scene")
geometries = list(scene.geometry.values())
face_count = 0
for geo in geometries:
if hasattr(geo, "faces"):
face_count += len(geo.faces)
return len(geometries), face_count, ""
except Exception as e:
return "", "", f"failed to inspect: {e}"
def main():
REPORT_DIR.mkdir(parents=True, exist_ok=True)
rows = []
for path in sorted(MODEL_DIR.iterdir()):
if path.suffix.lower() not in TARGET_EXTS:
continue
size_mb = path.stat().st_size / 1024 / 1024
mesh_count = ""
face_count = ""
note = ""
if path.suffix.lower() in {".glb", ".gltf"}:
mesh_count, face_count, note = inspect_glb(path)
if size_mb > 50:
note = (note + "; " if note else "") + "large file"
rows.append({
"file": path.name,
"format": path.suffix.lower().replace(".", ""),
"size_mb": round(size_mb, 2),
"mesh_count": mesh_count,
"face_count": face_count,
"note": note,
})
with OUT_CSV.open("w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(
f,
fieldnames=["file", "format", "size_mb", "mesh_count", "face_count", "note"]
)
writer.writeheader()
writer.writerows(rows)
print(f"wrote {OUT_CSV}")
if __name__ == "__main__":
main()
CSV出力例
file,format,size_mb,mesh_count,face_count,note
chest.glb,glb,12.4,3,185432,
chair.glb,glb,38.7,5,642001,
robot.stl,stl,55.2,,,large file
手動で見るべき項目
スクリプトで見られるのは一部だけです。以下は最終的に人間が目視確認したほうがよいです。
-
元画像のシルエットが残っているか
-
側面や背面に不自然な補完がないか
-
テクスチャが伸びていないか
-
3Dプリントする場合、薄すぎるパーツがないか
-
ゲームやWebで使う場合、ファイルサイズが重すぎないか
ツール例:Hi3D
今回のように画像から3Dモデルを作る場合、Hi3D のようなImage-to-3Dツールを使うと、画像入力からモデル生成、形式出力まで試しやすいです。GLB、OBJ、STL、FBX、USDZなど複数形式で出力できる点は、後工程の確認に向いています。
まとめ
3Dモデル生成AI は、画像から3Dモデルの底模を作るには便利です。ただし、生成結果の見た目だけで判断せず、用途ごとのチェックをしてから使うのが安全です。
まずはファイル形式、サイズ、face数など自動化しやすい項目をCSV化し、最後に人間が見た目と用途適合性を確認する流れが扱いやすいです。
