RUNNER SIMULATOR

https://github.com/kubotadaichi/ubiquitous-chainsaw

React

AWS

Python

C#

Unity

あなたの4年後の姿をゲームを通してみてみよう!

kubotadaichi

松周

西野光貴

推しアイデア

あなたの顔が爆走!

作った背景

自分の顔が爆走していたら面白い! unityを使いたい! 3Dスキャンで遊びたい!

推し技術

ウェブから顔登録するためのサイトをReactを使って作成した。

プロジェクト詳細

https://youtu.be/Zfqx4ulJ2bA

テーマ

「4年に一度」

  • オリンピック-> ハードル
  • 細胞が全入れ替わり -> 体型の変化

で表現したい!

作ったもの

iPhoneで自分の3Dモデルをスキャンし、Unityでゲームを遊ぶ!

頭&体結合部分

3Dヘッドスキャン(.glb/.gltf)をアップロードすると、キュー(Redis)経由でWorkerがBlenderをヘッドレス実行し、テンプレートアバターへ合成して成果物(.glb)をS3へ保存するパイプラインです。

後続の処理でUnityのオリンピックゲームに成果物を提供しユーザの顔でゲームを遊ぶことができる。

Scaniverse

3Dヘッドスキャンの取得に、iOSアプリ Scaniverseを使用しています。3Dモデルの構築、ヘッドモデルの切り取りをこのアプリを使用して行っています。

構成

  • hub/:API(FastAPI)
    • スキャンデータ受け取り → S3へ保存 → Redisキュー投入
    • ステータス照会/成果物ダウンロード用エンドポイントを提供
  • worker/:処理ワーカー(Python + Blender ヘッドレス)
    • Redisキューからジョブ取得 → S3から入力を取得 → Blenderで変換 → S3へ出力
  • web/:フロントエンド(Vite + React + Three.js)
  • infra/:クラウド用Terraform(S3 + ElastiCache + EC2 など)

image

できること

  • .glb/.gltf のアップロード(POST /scan
  • ステータス確認(GET /scan/{scan_id}/status
  • 一覧取得(GET /scans
  • 生成物の取得(GET /scan/{scan_id}/download

ローカル起動(Docker Compose)

依存(Redis + MinIO)を含めてローカルで完結します。

前提

  • Docker Compose v2
  • (任意)jq
docker compose up --build
  • Web: http://localhost:3000
  • Hub API: http://localhost:8000
  • MinIO Console: http://localhost:9001(user/pass: minio / minio123456

動作確認(curl)

# 1) upload(scan_id を取得) SCAN_ID=$(curl -sS -F "head=@./path/to/head.glb" http://localhost:8000/scan | jq -r .scan_id) echo "$SCAN_ID" # 2) status(queued → processing → done を待つ) curl -sS "http://localhost:8000/scan/${SCAN_ID}/status" | jq # 3) download(done になったら) curl -L -o avatar.glb "http://localhost:8000/scan/${SCAN_ID}/download"

クラウド起動(AWS)

  • infra/ のTerraformで、S3バケット/ElastiCache Redis/EC2(Docker)などを作成します
  • EC2上では docker-compose.cloud.yml を使い、hubworker のみを起動します(S3/Redisはマネージド)

手順は infra/README.mdinfra/terraform.tfvars.example を参照してください。

環境変数

hub / worker 共通

  • REDIS_URL(例: redis://redis:6379/0 / redis://...:6379/0
  • S3_BUCKET(例: hack
  • S3_ENDPOINT(MinIO等を使う場合のみ。例: http://minio:9000
  • S3_ACCESS_KEY / S3_SECRET_KEY(MinIO等を使う場合のみ)
  • AWS_REGION(AWS S3を使う場合のみ。S3_ENDPOINT 未指定時に必須)

worker のみ

  • BLENDER_BIN(default: /opt/blender/blender
  • TEMPLATE_FBX(default: /app/blender/template.fbx
  • HEAD_BONE(default: mixamorig7:Head

kubotadaichi

@e1372bbbaa28a5f0