CES2025で発表されたSPAR3Dを使ってみた

# はじめに
こんにちは、しゅんです。

この記事では、**CES2025**で**NVIDIA**と**Stability.ai**によって発表された、次世代の3D生成ツールである**SPAR3D (Stable Point Aware 3D)** を試してみた体験をご紹介します。

SPAR3Dは、単一の画像から3Dメッシュと点群データをリアルタイムで生成する機能を提供する画期的なツールです。この記事では、そのセットアップ方法や実行手順、生成された結果について解説します。

## SPAR3Dとは？
公式の記事

https://stability.ai/news/stable-point-aware-3d?utm_source=x&utm_medium=social&utm_campaign=SPAR3D

公式のgithub

https://github.com/Stability-AI/stable-point-aware-3d

公式のHuggingface

https://huggingface.co/stabilityai/stable-point-aware-3d

SPAR3Dは、以下の特徴を持つ最新のAIベースの3D生成ツールです：

1. **単一画像からの3D生成**
   - 入力画像から1秒未満で3Dメッシュと点群データを生成。

2. **完全な構造予測**
   - 360度のビューを補完し、隠れた部分も正確に再現。

3. **リアルタイム編集機能**
   - 点群データを削除、複製、ストレッチ、特徴追加が可能。

SPAR3Dは、**NVIDIA RTX AI PC**での実行に最適化されており、ゲーム開発や製品デザインにおいて新しい基準を提供します。


## 環境構築

SPAR3Dを使うには以下の環境をセットアップします。

### 自分の環境
- **OS**: Ubuntu 24.04
- **GPU**: NVIDIA RTX3080

### セットアップ手順

1. 仮想環境を作成：
   ```bash
   python3 -m venv .venv
   source .venv/bin/activate
   ```

2. 必要なライブラリをインストール：
   ```bash
   pip install -U setuptools==69.5.1
   pip install wheel
   git clone https://github.com/Stability-AI/stable-point-aware-3d.git
   cd stable-point-aware-3d/
   pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
   pip install -r requirements.txt
   pip install gpytoolbox pynanoinstantmeshes==0.0.3
   pip install trimesh
   pip install "pyglet<2"
   pip install pillow matplotlib open3d
   ```

3. Hugging Faceトークンを設定：
   ```bash
   huggingface-cli login
   ```

4. 環境変数を設定：
   ```bash
   export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
   ```


## 実行手順

以下の手順でSPAR3Dを使用します。

### SPAR3Dを実行
単一画像から3Dメッシュを生成するには、以下のコマンドを使用します：
```bash
python run.py demo_files/examples/fish.png --output-dir output/
```

### 残念。。。自分はVRAM不足でした
### VRAM不足時の対応
- **低VRAMモード**:
  ```bash
  python run.py demo_files/examples/fish.png --output-dir output/ --low-vram-mode
  ```
- **CPUモード**:
  ```bash
  python run.py demo_files/examples/fish.png --output-dir output/ --device cpu
  ```

## Code

生成された出力ファイルは以下の通りです：

1. **入力画像 (`input.png`)**
   - 背景が除去された入力画像。

2. **3Dメッシュ (`mesh.glb`)**
   - 3Dモデルデータとしてエクスポートされたメッシュ。

3. **点群データ (`points.ply`)**
   - 点群形式で出力された3Dデータ。

以下のスクリプトを使って結果を可視化できます：

```python
import os
from PIL import Image
import matplotlib.pyplot as plt
import trimesh
import open3d as o3d

output_dir = "./output/0"
image_path = os.path.join(output_dir, "input.png")
mesh_path = os.path.join(output_dir, "mesh.glb")
ply_path = os.path.join(output_dir, "points.ply")

# 入力画像の表示
def display_image(path):
    img = Image.open(path)
    plt.imshow(img)
    plt.axis("off")
    plt.show()

# 3Dメッシュの表示
def display_mesh(path):
    mesh = trimesh.load(path)
    mesh.show()

# 点群データの表示
def display_point_cloud(path):
    point_cloud = o3d.io.read_point_cloud(path)
    o3d.visualization.draw_geometries([point_cloud])

display_image(image_path)
display_mesh(mesh_path)
display_point_cloud(ply_path)
```

---

## 使ってみた感想

SPAR3Dを試してみた感想を以下にまとめます：

1. **速さ**
   - 単一画像から1秒未満で結果が生成され、驚きのスピード感。
   - 昔OpenAI、openai point-eの生成より早い

2. **高品質な生成結果**
   - 隠れた部分も補完される360度構造が特に印象的。

3. **操作の簡単さ**
   - コマンドラインだけで簡単に使用でき、セットアップもスムーズ。

# 結果

こういう感じです
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">CES2025で発表されたSPAR3Dを試して表示してみた。<br>画像 →点群のデータ→ 3D <br>画像を入力: 2D画像を入力<br>点群データの生成: AIモデルが画像からobjectの構造を解析し、点群データを生成<br>3Dmehの生成: 点群データをもとに、最終的な3Dメッシュを生成<a href="https://twitter.com/hashtag/CES2025?src=hash&amp;ref_src=twsrc%5Etfw">#CES2025</a> <a href="https://twitter.com/hashtag/SPAR3D?src=hash&amp;ref_src=twsrc%5Etfw">#SPAR3D</a> <a href="https://t.co/8W2vxcZLSc">pic.twitter.com/8W2vxcZLSc</a></p>&mdash; SYUN (@syun88AI) <a href="https://twitter.com/syun88AI/status/1877198656299814972?ref_src=twsrc%5Etfw">January 9, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

## おわりに
面白いおもちゃたくさん出てきて、困ります。最後まで見てくれてありがとうございます。