推しアイデア
あなたの顔が爆走!
―
あなたの顔が爆走!
自分の顔が爆走していたら面白い! unityを使いたい! 3Dスキャンで遊びたい!
ウェブから顔登録するためのサイトをReactを使って作成した。
「4年に一度」
で表現したい!
iPhoneで自分の3Dモデルをスキャンし、Unityでゲームを遊ぶ!
3Dヘッドスキャン(.glb/.gltf)をアップロードすると、キュー(Redis)経由でWorkerがBlenderをヘッドレス実行し、テンプレートアバターへ合成して成果物(.glb)をS3へ保存するパイプラインです。
後続の処理でUnityのオリンピックゲームに成果物を提供しユーザの顔でゲームを遊ぶことができる。
3Dヘッドスキャンの取得に、iOSアプリ Scaniverseを使用しています。3Dモデルの構築、ヘッドモデルの切り取りをこのアプリを使用して行っています。
hub/:API(FastAPI)
worker/:処理ワーカー(Python + Blender ヘッドレス)
web/:フロントエンド(Vite + React + Three.js)infra/:クラウド用Terraform(S3 + ElastiCache + EC2 など)
.glb/.gltf のアップロード(POST /scan)GET /scan/{scan_id}/status)GET /scans)GET /scan/{scan_id}/download)依存(Redis + MinIO)を含めてローカルで完結します。
jqdocker compose up --build
http://localhost:3000http://localhost:8000http://localhost:9001(user/pass: minio / minio123456)# 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"
infra/ のTerraformで、S3バケット/ElastiCache Redis/EC2(Docker)などを作成しますdocker-compose.cloud.yml を使い、hub と worker のみを起動します(S3/Redisはマネージド)手順は infra/README.md と infra/terraform.tfvars.example を参照してください。
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 未指定時に必須)BLENDER_BIN(default: /opt/blender/blender)TEMPLATE_FBX(default: /app/blender/template.fbx)HEAD_BONE(default: mixamorig7:Head)