TRELLIS による画像から3Dアセットへの変換(ソースコードと実行結果)

概要

TRELLISは、1枚の画像から3Dアセット(3次元の形状と見た目のデータ)を生成する学習済みモデルである。このページでは、Windows上でTRELLISを動かす手順、WebUI(ブラウザで操作する画面)の使い方、Pythonプログラムからの実行方法を示す。生成した3DモデルはGLB形式(形状とテクスチャを1つにまとめた3Dファイル形式)で保存する。

目次

関連する外部ページ

サイト内の関連情報

1. TRELLIS による画像から3Dアセットへの変換

概要

TRELLISは、Microsoftが開発した3Dアセット生成モデルであり、テキストや画像のプロンプト(生成の手がかりとなる入力)から3Dアセットを生成する。Structured LATent(SLAT:構造化潜在表現)という統一された表現を使用して、Radiance Fields(輝度場)、3D Gaussians(3次元ガウシアン)、メッシュ(三角形網)など様々な形式で出力することができる。

主な特徴

インストール

IgorAherne氏によるTRELLISのフォーク版(派生版)「trellis-stable-projectorz」を使用する。

このフォークの特徴

管理者権限コマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。

次のコマンドを実行する。

curl -L -o v40_py311_trellis_stableprojectorz.zip https://github.com/IgorAherne/trellis-stable-projectorz/releases/download/latest/v40_py311_trellis_stableprojectorz.zip
mkdir C:\TRELLIS
tar -xf v40_py311_trellis_stableprojectorz.zip -C C:\TRELLIS
cd C:\TRELLIS
run-gradio-fp16.bat

WebUIの使用

run-gradio-fp16.bat の実行後、ブラウザで http://127.0.0.1:7860 を開き、Gradio(Pythonで作るWeb画面の仕組み)のインターフェースにアクセスする。

参考文献

  1. 公式論文: Xiang, J., et al. "Structured 3D Latents for Scalable and Versatile 3D Generation" (2024) - arXiv:2412.01506
  2. Microsoft公式リポジトリ: https://github.com/microsoft/TRELLIS
  3. Microsoft公式プロジェクトページ: https://microsoft.github.io/TRELLIS/
  4. Hugging Face公式モデル: https://huggingface.co/JeffreyXiang/TRELLIS-image-large
  5. IgorAherne フォーク版: https://github.com/IgorAherne/trellis-stable-projectorz

2. TRELLIS による画像から3Dアセットへの変換プログラム

実行手順

環境のセットアップとコードの実行

次のソースコードを C:\TRELLIS\a.py という名前で保存し、コマンドプロンプトで次を実行する。1行目でインストール先へ移動し、2行目でTRELLIS専用のPython環境(仮想環境)を有効にする。

cd C:\TRELLIS
code\venv\Scripts\activate.bat
python a.py

出力フォーマット

TRELLISは以下の形式で3Dアセットを生成する。

ソースコード

import os
import sys
import torch
from PIL import Image

# Windows向けの環境設定
os.environ['SPCONV_ALGO'] = 'native'
os.environ['ATTN_BACKEND'] = 'xformers'

# TRELLISのパラメータ
SEED = 42
SPARSE_STRUCTURE_SAMPLER_PARAMS = {
    "steps": 12,
    "cfg_strength": 7.5,
}
SLAT_SAMPLER_PARAMS = {
    "steps": 12,
    "cfg_strength": 3.0,
}

# TRELLISがインストールされていない場合に備えてパスを追加
sys.path.insert(0, './code')

def main():
    from trellis.pipelines import TrellisImageTo3DPipeline
    from trellis.utils import postprocessing_utils

    device = 'cuda' if torch.cuda.is_available() else 'cpu'
    print(f'使用デバイス: {device}')

    # 学習済みモデルの自動ダウンロードと読み込み
    print('モデルを読み込み中...')
    pipeline = TrellisImageTo3DPipeline.from_pretrained("JeffreyXiang/TRELLIS-image-large")
    if device == 'cuda':
        pipeline.cuda()
    print('モデルの読み込み完了')

    # 入力画像の読み込み
    image_path = input('画像ファイルのパスを入力: ')
    image = Image.open(image_path)

    # 3Dモデルの生成
    print('3Dモデルを生成中...')
    outputs = pipeline.run(
        image,
        seed=SEED,
        sparse_structure_sampler_params=SPARSE_STRUCTURE_SAMPLER_PARAMS,
        slat_sampler_params=SLAT_SAMPLER_PARAMS
    )

    # 結果の保存
    glb = postprocessing_utils.to_glb(
        outputs['gaussian'][0],
        outputs['mesh'][0],
        simplify=0.95,
        texture_size=1024
    )
    glb.export('output_3d_model.glb')
    print('3Dモデルを output_3d_model.glb に保存しました')

if __name__ == "__main__":
    main()