Unity Advent Calendarは当初,MMD for Unityで何か書こうと思ったけれども,さしあたって新しいことがない.Mecanimをスクリプトで強引にいじろうとすると,Avatarの Configureを触った瞬間,Unityが落ちるので解説してもしょうがない.あれはまだ直接いじらないほうがいいと思う.
気がついたらもう投稿日の日付が変わる3時間前だったりしてやばい.8時間前に2時間かけて別の虎の子記事書いてたけど,分量も長いしUnity関係ないし でやっぱやめた.Unityに関して技術的なことは最近弄っていないのでWebフレームワークの話ばかりになりそうだし,やっぱりUnity関係ない.
急いでなにか書かないとということで,未踏で何を取り組んでいるか書こうと思った.Unityと関係有るのかどうかわからなくてやばい.時間ばかり迫ってて焦る.
未踏でキャラメイク作ろうとした
足掛け2年ぐらいのんびりとMMD for Unityに取り組んできて,誰でも簡単にキャラクターを作れるようなシステムを作りたいと提案書を書いて未踏に応募したら,びっくりすることに採択されてしまった.最初はUnityを使ってオープンソースなキャラメイク(PSO2とか,3Dカスタム少女とか) を作ろうと思っていたけれども,よくよく考えると得をするのが使う人ばかりで,モデラーさんから見たらあまり面白くない.というのも,キャラメイク用のキャラクターのテンプレートをニコ動とかで公開しても,あまりにも地味で視聴数伸びなくてつまらなそうだな,と思ってしまった.
モデラーもなんだかんだ言って,誰かに使ってもらうのが一番嬉しいことだと思うので,自分のモデルがどこで使われてるのかわからないとつまらない.わざわざ専用ソフトのテンプレートなんか作るより,ミクさん作った方が普通に喜ばれる.汎用的なテンプレートを作れたとしても,やっぱりみんなミクさん好きなんだろうなと思った.
ブースト会議でコテンパンにされたこともあって,2ヶ月ほどモヤモヤしていた.本当は一度,ゼミで発表してからPMに相談しようと思ったのだが,そのゼミがいつまで経ってもやらない.進捗どうですか?
ゼミやってない間は3Dデータフォーマットを正規化して,どのフォーマットにも出力する仕組みをC++で作っていた.メモリ上のデータ構造をそのままファイルに出力し,メモリに戻すなんてことをやっていたら,void*で見事にハマってしまった.2週間,バグと付き合っていたがアクセス違反に何度もやられた.仕方ないのでC#のSerializeでやったら15分ぐらいで終わったため鼻血出た.
そして,半月ほど前にやっとPMに相談することができた.相談したら相談したらなんか速攻でOK貰ったので作り始めてる.
3DCG用の共有リポジトリのようなものを作ろう
ニコニコ動画だとかクリプトンだとか,一生懸命N次創作,N次創作と言っているけれども,昔からLinuxとかOSS系のソフトウェアはN次創作で,なおかつライセンスの仕組みがしっかりしているので,誰が何を使ったのかはっきりと分かる仕組みになっていた.MMDの欠点は誰が何を使ったのか一見してはっきりとわからない点にある.おまけにライセンスが複雑で,最近は3DプリントOK,ゲームOK,OculusOKも付け加えようとか,もっとひどくなりつつある.別にそれはいいんだけれども,ライセンスの標準が年中アップデートされていると,古いモデルデータが取り残されてトラブルの原因になる.
AssetStoreもやる気が無い.2年前はもっとたくさんフリーデータがアップロードされてみんな幸せになると思っていたが,有料アセットばかり増えてしまってどうにもならない.あそこできちんとした商売というか,有料アセットを切り売りしてUnityを便利にする方面へ固定されてしまった感が強い.それはそれで仕方ない.
その点,Google 3D Galleryは安定していてすごい.Google Sketchupは好きじゃないが凄いと思うし,まだいろいろな人がアップロードされていると思うとワクワクする.それらのモデルデータが全部無料で使えるだけじゃなくて,どのような条件でも使っていいライセンスが付与されている.別に「自分の作ったモデルデータがホモに使われるのは嫌だ」とか思わなくても,3Dデータがバンバンアップロードされる環境ができているのは羨ましい.
たぶん,Googleグラスのような近未来ガジェットがまた登場したら,その都度,MMDライセンスにこれ使っちゃダメ,あれ使っていいなんて気苦労が増えるばかりだろうし,ライセンス作るだけで敷居が高くなるので,物凄くつまんない場所になるんじゃないかなって思うようになった.
そういうわけで,3DCG用の共有リポジトリのようなものを作ろうと思った.別に3DCGに限らず,写真等のデータをコミットすれば,誰かがそれをフォークしてシームレステクスチャに変えたりする.誰かがそのシームレステクスチャを使って建物を作ったりする.その建物と家具を組み合わせてミクさんの部屋を作ったり,そのミクさんもいろんな人の手で作られている.
誰がどのようなものに使ったのか,どのようなものを作ったのかが相互に参照可能になれば,動画の再生数とかじゃなくて,どのような作品に使われて,いくつの作品に使われたのかが価値になるようになる.きっと凄いものができるぞ!
実際に作ってみてる
最初はわくわくしながらAWSでインスタンス作って,分散環境ができるようにストレージとコントローラ,ビューの部分を分離したり色々やっていたものの,笑えるぐらい見事にUbuntuが使えなくて詰んだ.また,当初の予定はGitHUBと連携して作ろうかなと思ったけど,フリーだと300MBしか扱えないので写真30枚アップロードして終わりになる.これはアカン.Gitもうまく動かすのに大変そうだし,別に細かい機能を使おうとも思ってないのでファイルシステムから自作することにした.
仕方がないので開発環境はWindows7 + Ruby + Sinatra + Slim + MongoDB + Mongo Mapperでやってる.Windowsで動いたんだからLinuxでも動くんでしょ?(適当)
最初はRailsでもいいかなと思ったけど,Railsが地味に面倒くさいこと多かった気がするので,やっぱりここはシンプルにSinatraでやったほうがいいかなと思った.Sinatraのいいところは,ほぼルーティングだけ決めればいいところで,Railsのようにやたらめったらマイグレーションとかシードとかやらなくていい.設定も面倒くさいし.
Slimを選んだのはHamlよりシンプルでわかりやすいからだった.あまりにも読みやすくてコードがすっかすか.ここまでシンプルだと逆に気持ち悪くなるぐらい.
データベースはMySQL使わずに何かしらKVSを使ってみたいと思っていたので,せっかくだからMongoDBを使ってみることにした.最初は超絶でかい,オンメモリ上で連想配列管理してるだけだろうと思ったけど違った.色々とKVSにも種類があって難しい.かろうじてMongoDBがRDBとKVSのいいとこ取りしたみたいでちょうどよかった.
O/RマッパーはMongoMapperを使っている.最初はMongoidだったけど,システムドライブじゃないとlocalhostで起動しているMongoDBサーバに繋げないので諦めた.こういうO/Rマッパーでテーブル設計するのが相変わらず難しい.
とりあえず頭のなかで画面遷移はできているので,テーブル設計をしたりコーディングをしたりの繰り返しをしている.POSTの仕組みが理解できずに強引にリダイレクトをしていたりして,かなり酷いものを書いていたものの,最近になってそういうのはPOSTじゃなくてSESSIONで管理するものとわかって涙目になる.
プロトタイプ版は別にすごくかっこよくて全体がJSで動いたりCSSが1000行だったりとか,そこまでキラキラにするつもりはない.とりあえず白い画面で.進捗としては20%ぐらいではあるものの,修論までにプロトタイプを完成させないとまずい.途中でスキー旅行へ3日ぐらい行く予定なので,年末年始はかなりヤバイ状態なんじゃないかなと思う.(未踏の作業報告書にこれコピペできないかな?)
実装する機能の妄想
基本的に共有リポジトリの中身は全部フリーでアクセスすることができる.ただし,プロジェクトの概念の上でなければならない.プロジェクトはいわゆる自分の作業スペースで,この中にゲームとか作るのに必要なアセットを登録していく.登録すると公開されてしまうのでしたくない人は別にしなくてもいい.
他の人のプロジェクトやアセットをダウンロードしたい場合は,まずプロジェクトにそれらをインポートする.インポートしてから初めてダウンロードができるようになる.つまり,誰がどこでどのような作品に使っているのか一目瞭然になる.
データを改造したいだけだったら,特定のアセットをプロジェクトにインポートすればいい.ダウンロードしたアセットを改造してアップロードし直せばそれでOK.
ライセンスは表示のみのライセンスになっている.使ったアセットを自分で管理するのは大変なので,もし,パブリッシュする件になれば,インポートしたアセットやプロジェクトを一覧化したファイルをダウンロードする.これを同梱すればいい.
この一覧化したファイルは逆変換も可能で,これをアップロードすると,使われたすべてのアセットを復元することができる.ゲーム中に気になるアセットがあったらこのファイルを開けば見つかるかもしれない.
どのように使われたのか完全にトラッキングされているので,モデラーにとってもどのようなゲーム,どのような動画で使われたのか一目瞭然になる.有名なタイトルに使われれば嬉しい.たくさん使って貰えても嬉しい.使って貰ったコンテンツを簡単に追うことができる.
また,自分はモデリングしかできない,キャラクターのセットアップは誰かに任せた,と投げる使い方もある.中にはツールの練習がてらに補完してくれる人がいるかもしれない.有名なあの人が続きをやってくれるかもしれない.
さすがに巨大なデータを運用することになるので,財源を確保しなければならない.基本的にフリーだけれども,年収1000万円以上のデベロッパーは1年間10万円,それ以下は1年間5000円ぐらいでいいかと思ってる.ちなみに,5000円プランは月額にするとPixivやニコ動よりも安い.
目標としてはプロの人も使ってくれる場にすることだろうか.自社アセットをオープンにしないのはケチなのもあるだろうけど,少なくとも自社でやらせたり外注で中国人にやらせたほうがクオリティ高いのは間違いないわけで,高いクオリティのものを簡単にサーチできればいいなとも思う.
そういう意味で,高いクオリティのものは自然と高い引用数になると思うので,普通にIF値を使うとかいいかもしれない.来年になるとまた論文のことを考える必要がありそうで困る…….
おわりに
そういうわけで,長ったらしい文章を書いたわけだけれども,デザイン以外は完成する目処が今のところ立っている.Webデザインやっている先輩がいるのでその時はまた仕事を投げようと思う.また,未踏も未踏でこれだけじゃ終わらせないぞ,というプレッシャーが凄いので,さらにもっと凄いものを考えなければならない.ただ,僕はこれに3Dデータのライブビューをつけるとかはつまらないと思う.現状ではプラットフォームとしてシンプルで完成していると思うので,適当に機能をくっつけてしまって整合性取れないようだとMac製品のように美しくならない.美しいは正義.
ただ作って終わりだと面白くないので,自分でしかあり得ない視点を持たなければと思う.これは未踏で何度も言われていることだけれども,思いついて作って終わりじゃつまらない.さらにそこで自分でしか得られない発見や発想をプラスしてこそ未踏っぽい,らしい.
イノベーションのジレンマではないだろうけど,既存の問題点をベースに何か考えても,結局は誰でも思いつけるような提案になってしまう(問題点を見つければ解決方法はいくらでも見つかるので).そこからまずは抜け出さないとダメなんだろうなぁ.
なんか日記になってしまった……ごめんなさい…….
どうでもいいけど,MMD for UnityのGitHUB Pagesのほうのホームページ,そのうちリニューアルします.ただ,コーディングがどうなるかという目処が立ってないのでしばらく時間かかりそう.やばい.