LoginSignup
15
13

More than 5 years have passed since last update.

Goで3Dモデル変換してプレビュー

Last updated at Posted at 2015-12-21

Go その2 Advent Calendar 2015 の22日目です。

はじめに

仕事で作ったGoで3Dモデルデータを変換処理するマイクロサービスをGoで書いた話です。

どんなもの?

  • Sketchfabみたいに3DモデルファイルをアップロードしてWebGLで描画するものです。
  • OBJやFBX, DAE, 3DS, MA, BLEND, ZIPをアップロードし、Web上で見ることができます
  • 社内のマイクロサービスとして自社内の様々なWebサービスから利用することを想定しています。

例: GitHubで公開されているGopherモデル
https://gyazo.com/0ac8db86c8c66ad1b681a97c282bbd44

The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) The gopher 3D model was made by Takuya Ueda (http://u.hinoichi.net). Licensed under the Creative Commons 3.0 Attributions license.

作るきっかけ

「制作時に他人の作った3Dモデルをツールを立ちあげなくてもWebでサクッと確認したい」「ツール持ってない人でも確認できるようにしたい」ユーザーのニーズに応えるためです。
似たようなサービスはあるのですが、toB向けじゃなかったりアップロードしてから見れるまで遅かったりで苦しみがありました。
※ UnityWebPlayerでも良いのですが、主要なブラウザでNPAPIが無効化されてしまいます。

プライバシーが担保されて高速な3D変換処理が必要だったわけです。
また、せっかく作るなら、というわけで他のサービスで使えるようにAPIエンドポイントを設定したマイクロサービスにしました。

使った技術

  • go1.5 Go
  • Revel GoのMVCフレームワーク
  • GORM GoのORマッパ
  • three.js 3DモデルをWebGL表示する
  • assimp2json 3DファイルをAssimp形式のJSONへ変換する

やること

  1. 3dファイルをアップロードする
  2. 3dファイルをAssimpに変換する
  3. S3に送る
  4. WebGLPlayerで表示

提供API
1. ファイルをアップロードするPOST API
2. 対象ファイルのワンタイムパスを取得するGET API
3. 対象ファイルをロードしたPlayerのiframeを取得するGET API

結果

  • アップロードから表示まで10MB程度なら2秒ぐらいで表示できる
  • メモリ使用量15MB〜80MB程度

実際のサービス画面
https://gyazo.com/23b143556a11553fafa28e999790f4ac
The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) The gopher 3D model was made by Takuya Ueda (http://u.hinoichi.net). Licensed under the Creative Commons 3.0 Attributions license.

その他

  • zip内にテクスチャ画像があったら貼るようにした。StringユーティリティやZip再帰当たりは自作
  • マイクロサービスするぐらいは1週間でできるが、本体のWebサービス(Rails)に組み込むのに3週間ぐらいかかった。
15
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
13