Upgrade to Pro — share decks privately, control downloads, hide ads and more …

3Dモデル作成から販売までを行うWebアプリケーションの裏側 BuriKaigi 2025

ugo
March 24, 2025
380

3Dモデル作成から販売までを行うWebアプリケーションの裏側 BuriKaigi 2025

BuriKaigi2025での発表資料を一部修正したものです。
3Dグッズ作成ツール:https://lp.suzuri.jp/3d-t-shirt

ugo

March 24, 2025
Tweet

Transcript

  1. 2 ⾃⼰紹介 GMOペパボ株式会社 メタバース推進室 エンジニアリングリード 深野 悠吾 Fukano Yugo •

    2022年: GMOペパボ株式会社へ新卒⼊社 • 〜2024年:SUZURI事業部にてSUZURIの開発 • 2025年〜:メタバース推進室へ異動 • SNS ◦ X:@yukyu30 ◦ https://yukyu.net • 3DCG、映像作成などをはじめとした 創作全般が好き
  2. 3Dモデル作成ツール 12 • 🙆 VRChatをはじめとしたVRSNSの拡⼤ ◦ 3Dアバター、3D⾐装といった3Dモデルの需要 • 󰢄 3Dモデルの作成にはハードルがある

    背景 「画像をアップロードしてグッズ販売できる」という SUZURIの体験を3Dモデルにも拡張したい
  3. 3Dモデルの⽣成を⾏うシステムの構築 20 • FBX Python SDK、FBX Python バインディング ◦ 最新のバージョンが2020.3.7

    ◦ 今後更新されるかがわからない • Blender ◦ オープンソース3DCGソフトウェア。FBXを書き出すことができる ◦ 開発も活発に⾏われている ◦ Pythonでスクリプトを書いて処理も実⾏もできる ◦ GUIアプリケーションだが、CLIからヘッドレスモードで実⾏できる FBXの⽣成にBlenderを利⽤
  4. 3Dモデルの⽣成を⾏うシステムの構築 23 テクスチャを差し替えるコードの例 import bpy # 画像を読み込み image = bpy.data.images.load(f"{dir}/texture.png")

    # main_matはMaterial # テクスチャを差し替え tex = main_material.node_tree.nodes.new('ShaderNodeTexImage') tex.image = image principled = main_mat.node_tree.nodes.get('Principled BSDF') main_mat.node_tree.links.new(tex.outputs['Color'], principled.inputs['Base Color'])
  5. 3Dモデルの⽣成を⾏うシステムの構築 28 • Lambda関数のHTTP エンドポイント • 標準 HTTP メソッドがサポートされている ◦

    https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/urls-configuration.html • API Gatewayでも同様なことを実現できるがシンプルに 使えるLambda関数URLを利⽤ Lambda関数URL
  6. 3Dモデルの⽣成を⾏うシステムの構築 29 • Ruby AWSベースイメージに BlenderとPythonをインス トールし、コンテナイメージを作成 • コンテナイメージをLambdaにデプロイ •

    エフェメラルストレージに⼀時データを保存 ◦ /tmpディレクトリ内に提供される⼀時的なストレージスペース ◦ 512MBから10GBまで設定できる ◦ zipに圧縮する前のFBXなどを保存 LambdaでBlenderを動かすために
  7. 処理の流れ 34 3Dモデル 生成アプリ 3Dモデル 生成アプリ 3Dモデルのobject key、画像のobject key 画像やblendファイルなどをリクエスト

    必要なファイルをダウンロード S3 • テクスチャの画像合成 • Blenderでテクスチャの差し替 え、FBXの書き出し • zipに圧縮
  8. 処理の流れ 35 3Dモデル 生成アプリ 3Dモデル 生成アプリ 3Dモデルのobject key、画像のobject key 画像やblendファイルなどをリクエスト

    必要なファイルをダウンロード zipファイルを指定されたobject keyでアップロード object keyを返す object keyを返す S3 • テクスチャの画像合成 • Blenderでテクスチャの差し替 え、FBXの書き出し • zipに圧縮
  9. 3Dモデルの作成、販売の統合 44 • ❌ 3Dモデルを⽣成した後に、Contentレコードを作成 • ⭕ Contentレコードによってobject keyが決まり、その object

    keyでアップロードする 3Dモデル⽣成アプリもContentレコードによって決まる object keyでファイルを保存することにした
  10. 処理の流れ 45 3Dモデル 生成アプリ 3Dモデル 生成アプリ 3Dモデルのobject key、画像のobject key 画像やBlendファイルなどをリクエスト

    必要なファイルをダウンロード zipファイルを指定されたobject keyでアップロード object keyを返す object keyを返す S3 3Dモデル⽣成アプリもContentレコードによって決まる object keyでファイルを保存することにした
  11. 実際のコンテンツアップロードの流れ 48 3Dモデルの生成リクエスト User SUZURI SUZURI DB DB 3Dモデル 生成アプリ

    3Dモデル 生成アプリ Materialレコードを取得 Materialレコードを返す ユーザーが事前に アップロードした画像
  12. 実際のコンテンツアップロードの流れ 49 3Dモデルの生成リクエスト Contentレコードを追加 Contentレコードを返す User SUZURI SUZURI DB DB

    3Dモデル 生成アプリ 3Dモデル 生成アプリ Materialレコードを取得 Materialレコードを返す ここでS3のobject key が一意に決まる
  13. 実際のコンテンツアップロードの流れ 50 3Dモデルの生成リクエスト object keyを返す User SUZURI SUZURI DB DB

    3Dモデル 生成アプリ 3Dモデル 生成アプリ 生成リクエスト Materialレコードの取得 Contentレコードの追加 Materialのobject key、保存時の object keyなどを送信
  14. 実際のコンテンツアップロードの流れ 51 3Dモデルの生成リクエスト object keyを返す User SUZURI SUZURI DB DB

    3Dモデル 生成アプリ 3Dモデル 生成アプリ 生成リクエスト 生成完了を通知 Materialレコードの取得 Contentレコードの追加