game community summit 2015

45
3D フフフフフフフフフ フ FBX フフフフフフフフフフフUnity で MMD ででででで でででGCS2015 Unity で MMD ででででで 1

Upload: takebuchi-eiichi

Post on 06-Aug-2015

520 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Game community summit 2015

3Dフォーマットの現状脱 FBXをどうやって実現するか?

UnityでMMDを動かす会 竹渕瑛一

GCS2015   Unity で MMD を動かす会 1

Page 2: Game community summit 2015

コミュニティの自己紹介• UnityでMMDを動かす会• その名の通り, UnityでMMDを動かす• MMD for Unityの開発がメイン

•開発は OSDN (旧 Source Forge)と GitHUBでやっています• http://osdn.jp/projects/mmd-for-unity/• http://mmd-for-unity-proj.github.io/mmd-for-unity/

GCS2015   Unity で MMD を動かす会 2

Page 3: Game community summit 2015

発表者の自己紹介•竹渕瑛一(@GRGSIBERIA)• 博士課程の学生です• 3DCGツール同士の融合をテーマに研究• 2013年度未踏に採択されてました

GCS2015   Unity で MMD を動かす会 3

MMD TransporterMMD for Unity

ニコニ立体でも使われてますhttp://3d.nicovideo.jp/works/td20818

Page 4: Game community summit 2015

発表の流れ•だいたい 3部構成• 各種フォーマットの背景• 各種フォーマットの問題点• 解決策の検討

GCS2015   Unity で MMD を動かす会 4

Page 5: Game community summit 2015

各種フォーマットの背景

GCS2015   Unity で MMD を動かす会 5

Page 6: Game community summit 2015

Autodesk FBX

• Autodesk社が提供しているフォーマット• 元は Filmbox(現Motion Builder)で使われていた• 1996年に Kaydara社が FBXを使いはじめる• 2004年に Kaydara社が Alias社に買収される• 2005年に FBX SDKがリリース• 2006年に Alias社が Autodeskに買収される

GCS2015   Unity で MMD を動かす会 6

実は意外と歴史のあるフォーマット

Page 7: Game community summit 2015

Autodesk FBX

•どのようなフォーマットか?• バイナリ /テキストで 3Dデータを表す• 1つのファイルで様々なデータを扱える

• 2005年当時は, DirectX9.0全盛期• スキニングを扱えるフォーマットは Xファイルしかない• それ以外は全部,自前のフォーマットが利用されていた

GCS2015   Unity で MMD を動かす会 7

当時を鑑みると大変革新的なフォーマット

Page 8: Game community summit 2015

Autodesk FBX

• FBX SDKとは?• FBXの書き出し /読み込みをするための開発キット• これがないと, FBXをほぼ扱うことができない• なぜか毎年バージョンアップしている

GCS2015   Unity で MMD を動かす会 8

Page 9: Game community summit 2015

MikuMikuDance

• 3種類のフォーマットがあります• PMD形式

• 古いMMDモデルデータ• コリジョンと頂点モーフがあります

• PMX形式• PMD形式を拡張したもの• コンストレインや UVモーフなどが扱えるようになる• 最近はこちらが多く使われている

• VMD形式• アニメーション用のデータ• 今でも使われている

GCS2015   Unity で MMD を動かす会 9

PMDで作られたミクさん

PMXで作られたミクさんhttp://blogs.yahoo.co.jp/fairlady432432/9181448.html

Page 10: Game community summit 2015

MikuMikuDance

MMD PMDE2008年 2月

2012年 7月

MMDの初版リリース8月

12月

2009年 9月

2011年 3月4月7月

PMD形式の初出PMDEの初版リリース

PMDの編集に必要な機能が全て実装

PMXの実装が開始されるPMDの開発完了PMXに初めて対応

PMXの機能 FIX版がリリースされる

GCS2015   Unity で MMD を動かす会 10

Page 11: Game community summit 2015

MikuMikuDance

• PMD/PMXの特徴• 固定長のバイナリフォーマット• MMDで動くことが大前提

• 座標系や単位系などがあらかじめ決まっている• MMDとの互換性を考える必要がある

• PMXでリグのセットアップができる• MMDでは,多段ボーンと呼ばれている• 要するにコンストレインが使える

GCS2015   Unity で MMD を動かす会 11

Page 12: Game community summit 2015

各種フォーマットまとめFBX PMD PMX VMD

ジオメトリ ○ ○ ○

マテリアル ○ ○ ○

スキニング ○ ○ ○

頂点モーフ ○ ○ ○

コリジョン ○ ○

コンストレイン

アニメーション

○ ○

GCS2015   Unity で MMD を動かす会 12

ちょっとずつ機能が豪華に

Page 13: Game community summit 2015

各種フォーマットの問題点

GCS2015   Unity で MMD を動かす会 13

Page 14: Game community summit 2015

FBXの問題点• BlenderからMayaにデータを納品するぞ!

GCS2015   Unity で MMD を動かす会 14

Armatureがグチャグチャになる

Page 15: Game community summit 2015

FBXの問題点•実は Blender側の事情が……• ライセンスの関係で FBX SDKが使えない• 仕方ないので有志が解析して FBXを再現している• でも,Motion Builderや Cinema4Dはうまく読める

GCS2015   Unity で MMD を動かす会 15

ツールに関係なくトラブルが発生しやすい

Page 16: Game community summit 2015

FBXの問題点• SDKがほぼ毎年更新される• SDK 2008• SDK 2010.2• SDK 2010.10• SDK 2012• SDK 2013• SDK 2014• SDK 2015• SDK 2016

GCS2015   Unity で MMD を動かす会 16

Page 17: Game community summit 2015

FBXの問題点• SDKのバージョンによって相性がある• 例えば,

• Lightwaveで Unityアセット作るときは SDK 2010で書き出す

• BlenderとMayaは相性が根本的に悪い• Motion Builderは公式だけにゆとりがある

GCS2015   Unity で MMD を動かす会 17

失敗しないとわからない

Page 18: Game community summit 2015

FBXの問題点•ツール側でちゃんと実装されてない• FBXの 100%の基準で正しく実装されてない

GCS2015   Unity で MMD を動かす会 18

Max60%

Maya70%

Blender30%

30%のデータしか移行できない10%損失する

Page 19: Game community summit 2015

FBXの問題点•ライセンスが厳しい• オープンソース禁止• 静的ライブラリ禁止• 指定箇所で FBX SDKを宣伝• サンプルコード公開禁止• リバース・エンジニアリング禁止• 登録者以外, APIの使用禁止• 迂回利用の禁止

• ライセンス違反を回避するため,他の方法で実装を試みること

GCS2015   Unity で MMD を動かす会 19

大杉

Page 20: Game community summit 2015

PMXの問題点• PMXは最強なのか?• 後方互換性が高い• FBXよりも機能が豊富• フォーマットも公開されている

GCS2015   Unity で MMD を動かす会 20

実はエディタとフォーマットの商用利用が禁止されている

問題ほぼコレだけ

Page 21: Game community summit 2015

問題点のまとめ• 2種類の普及しているフォーマットを検討• ライセンスが厳しい(共通)• SDKのバージョンによっては相性問題が起こる• ツール側の実装がうまくいかない

GCS2015   Unity で MMD を動かす会 21

なるべくコレらを解消することでデータ交換が凄くやりやすくなるのでは?

Page 22: Game community summit 2015

解決策の検討

GCS2015   Unity で MMD を動かす会 22

Page 23: Game community summit 2015

解決策を検討しています

GCS2015   Unity で MMD を動かす会 23

Page 24: Game community summit 2015

フォーマットの機能要件• Fixed Model Data( .fmd)• 現在, GitHUBで開発中

• クラス設計等を JSONで行っています• https://github.com/GRGSIBERIA/FixedModelData• 現在は fmd-compilerで作業中

• Fixed(固定された)• 単位系の狂いを少なくしたい• いろいろなツールで使えるようにしたい

GCS2015   Unity で MMD を動かす会 24

Page 25: Game community summit 2015

フォーマットの機能要件•なぜ作ろうと思ったのか?• FBXの互換性の問題• 緩いライセンスで使いたい• 開発しやすいフォーマットが欲しい

GCS2015   Unity で MMD を動かす会 25

Page 26: Game community summit 2015

フォーマットの機能要件•開発しやすいとは,• 使う側の意図を反映させる

GCS2015   Unity で MMD を動かす会 26

想定ユーザ代表ツール開発者

読み込みと書き込みが保証されて欲しい

バージョン・アップで再実装する手間がない

フォーマットの全てを実装しなくてもいい

Page 27: Game community summit 2015

フォーマットの機能要件•読み込みと書き込みの保証• FBXの場合ではどうなったか?

GCS2015   Unity で MMD を動かす会 27

Aツール BツールFBX

書き出し 読み込み

Page 28: Game community summit 2015

フォーマットの機能要件•読み込みと書き込みの保証• データが壊れずに,交換できるようになって欲しい

GCS2015   Unity で MMD を動かす会 28

Aツール BツールFMD

書き出し 読み込み

Aツールと Bツールで同じ見え方になっていて欲しい

Page 29: Game community summit 2015

フォーマットの機能要件•バージョン・アップで再実装する手間がない• FBX SDKは,更新するたびに対応する手間がある

GCS2015   Unity で MMD を動かす会 29

FBX SDK2008

FBX SDK2009

FBX SDK2010

FBX SDK2011

FBX SDK2012

FBX SDK2013

FBX SDK2014

FBX SDK2015

FBX SDK2016

1年に2回更新することもあるよ

Page 30: Game community summit 2015

フォーマットの機能要件•バージョン・アップで再実装する手間がない• 更新されても無視したって問題ない

GCS2015   Unity で MMD を動かす会 30

ばーじょんたくさんあるよ! 見かけ上

一つのバージョン

Page 31: Game community summit 2015

フォーマットの仕様

フォーマットの機能要件•フォーマットの全てを実装できなくてもいい• 全部実装できてないとか言われる心配がない

GCS2015   Unity で MMD を動かす会 31

開発者

モデルビュワーを作りたい

ジオメトリ

ジオメトリだけインポートする

剛体

スキニング

多言語対応

許される

Page 32: Game community summit 2015

フォーマットの機能要件•データのバリデーション(おまけ)• Aツールで作ったファイルが中途半端で読み込めない• Aツールが Zアップ使うせいでモデルが寝てしまう• Aツールの回転順が ZYXで(ry

GCS2015   Unity で MMD を動かす会 32

書き出し時にデータの検証を走らせて検証に通らないと書き出しができない

Page 33: Game community summit 2015

フォーマットの実装

GCS2015   Unity で MMD を動かす会 33

ヘッダ

ボディ(圧縮JSON)

モデルデータのメタ情報

モデルデータの本体

•圧縮した JSONがベース

Page 34: Game community summit 2015

フォーマットの実装• JSONとは,• テキストベースで連想配列を表現するための表記法• JavaScript由来で, XMLの遠い親戚

GCS2015   Unity で MMD を動かす会 34

{ “yamada”: { “money”: 100, “name”: “tarou” }, “suzuki”: { “money”: 500, “name”: “takashi” }}

山田(太郎)君は100円持っている

Page 35: Game community summit 2015

フォーマットの実装•ヘッダ情報• ファイルの概要やメタ情報を示すための部分• これも JSONで表現• メタ情報の例

• 著作者• モデル名• 暗号化鍵(公開鍵方式)• データ本体のハッシュ値• ライセンスなどなど

GCS2015   Unity で MMD を動かす会 35

データが盗まれるのを

ある程度は防ぎたい

Page 36: Game community summit 2015

フォーマットの実装•ボディ(データ本体)• JSONを使う理由

• JSONを解釈できる言語がとても多い• データを簡単に扱うことができる• Webサーバで標準的に使われている

GCS2015   Unity で MMD を動かす会 36

バイナリデータを直接扱うとちょっと読み取りたい時に手間がかかる

Page 37: Game community summit 2015

ライブラリの実装•なるべく多言語対応やりたい• しかし,全部手塩をかけると膨大な量になる• テストとバリデーションで地獄を見てしまう

GCS2015   Unity で MMD を動かす会 37

JSONでクラス定義書いて全部自動生成してみよう

Page 38: Game community summit 2015

ライブラリの実装•実現する方法• 構文機を作って自動生成

GCS2015   Unity で MMD を動かす会 38

JSONクラス定義

C++

Ruby

Python

JavaScript

C#

Ruby

C++構文機

Ruby構文機

Python構文機

JavaScript構文機

C#構文機

テストとバリデーションも自動生成するので多言語への対応の手間を削減

Page 39: Game community summit 2015

ライブラリの実装• JSONクラス定義• 定義の詳細については下記のところで

• ただし,ブランチがコロコロ変わるかも……• https://github.com/GRGSIBERIA/FixedModelData/tree/fmd-co

mpiler/lib/template• もし,興味のある人がいましたら,チャンクの定義等をレビューしていただけると幸いです

GCS2015   Unity で MMD を動かす会 39

Page 40: Game community summit 2015

ライブラリの実装• JSONのクラス定義の例

GCS2015   Unity で MMD を動かす会 40

"Vertex": { "comment": "頂点を表すクラス ", "variables": { "position": { "type": "UnitVector3", "comment": "頂点座標の位置 " } } },

# 頂点を表すクラスclass Vertex < ChunkBase # 頂点座標の位置 def position @position end

def initialize(json) # コンストラクタ @position = UnitVector3.new(json) endend

自動生成

Page 41: Game community summit 2015

今後の展望•最初にMaya, Unityの順番で対応• 自分が一番使っているツールなので• Max, Blender等々は有志の人らでお願いします……

• PMD, PMXの読み込みと書き出しに対応

GCS2015   Unity で MMD を動かす会 41

Page 42: Game community summit 2015

本日のまとめ• FBXと PMXの問題点を提示• FBX

• バージョンが多すぎて互換性がない• ツールごとに実装のばらつきがある• SDKのライセンスがキツく,開発者が使いづらい

• PMX• 基本的に商用利用不可

GCS2015   Unity で MMD を動かす会 42

Page 43: Game community summit 2015

本日のまとめ•解決方法• 互換性を解消する• ライブラリのライセンスを緩くする• 開発者的に使いやすいライブラリを提供する

• 多プログラミング言語対応• データのほとんどを JSONで管理する• 読み込みと書き込みの保証• バージョンの隠蔽• バリデーションとテストがちゃんとできる

GCS2015   Unity で MMD を動かす会 43

Page 44: Game community summit 2015

ご清聴ありがとうございました

GCS2015   Unity で MMD を動かす会 44

Page 45: Game community summit 2015

質疑応答

GCS2015   Unity で MMD を動かす会 45