読者です 読者をやめる 読者になる 読者になる

未踏作業日誌――余計なもの作るよ!

未踏の作業日誌的なものを書きましょうということで書くことにしました.余計なことばっかりしています.

MMD Fukuwarai 2リリースしました

以前,かなり微妙なUIでMMD Fukuwaraiなるものをリリースした記憶がありますが,それのバージョン2.0をリリースしました.

Unity Web Player | MMD Fukuwarai

f:id:grgsiberia:20140325143208p:plain

さすがのミクさんもあのUIで呆れ顔といった感じなのですが,バージョンアップして少しだけUIがマシになったのと,以前までは頂点ブレンドを自作していたところを,素直にMMDの表情モーフで制御するようにしました.このため,眉毛などの動かす頂点を選択してCSVに吐き出したりなんだり,という面倒くさいことがなくなりました.

一方で,表情の自由さがなくなりました.MMDではいくつかの表情モーフがバンドルされているわけですが,さすがにミクさんの眉毛を鼻に突っ込むなどの仕事を選ばない感じは出せなくなっています.

 

MikuMikuDance for Unityでは,頂点ブレンドをBlendShapeで制御していません.頑張ればどうにかなりそうなのですが,MMDにはUVやマテリアル,ボーン等のモーフも実装されているため,頂点ブレンドの部分だけBlendShapeにするとたぶん非常にわかりにくい構造になるだろうなと思っています.

そのため,しばらくの間はMMD for Unityの頂点ブレンド対応は様子見といった感じです.

その代わりと言ってはなんですが,今までのMMD for UnityはPMD/PMXファイルをUnity Editor経由でインポートしていたのを,バイト列からのインポートもサポートしようかと思います.

これにより,Web上から引っ張ってきたZIPファイルを読み込んで,動的に描画することが可能になります(かなり今更感はありますが……).もちろん,書き出しもバイト列でできるようにもするため,アプリケーション上でモデルデータを作ってPMD/PMXを書き出す,なんてことも将来できるかもしれません????

 

一応,直近の予定としてはMMD for Unityのモーションファイル(VMD)をバイト列で書きだそうと思っています.

MMD Fukuwaraiのバージョン3では,作った表情モーフをモーションファイルとしてダウンロードできるだけではなく,Web上に投稿できるみたいなシステムを考えています.このシステムができると,今まで静画や動画等で確認しないと中身がわからなかったわけですが,WebPlayer上ですぐに確認できるようになります.

当然,将来的にはUnity上でMMDなんてことも考えているので,作ったモーションをボタン一発でインタラクティブな形で公開できるようになるかもしれません(物理エンジンの差はどうしたものかと思いますが……).

 

まだまだじゃんじゃん作りたいものがたくさんあるので,締め切りを意識しながらのんびり作っていきたいと思います()

 

補足(2014/03/25追記)

MMMでZIP読み込みが一時期問題になったことがありますが,MMMとMMD for UnityがそれぞれZIP読み込みを実装した場合,何が違うのか,という声を頂きました.

MMMとMMD for Unityで,ZIP読み込みをした場合の問題の本質はどこにあるのかについて少し補足したいと思います.

 

まず,現状について説明します.

まずZIPとは,フォルダを梱包して一つのファイルにする技術のことを指します.また,フォルダが梱包されたものをZIPファイルと呼んだりします.

コンピュータ上では,フォルダもファイルの一つの単位として扱われています.「フォルダですよファイル」には「このフォルダの中にはこのファイルが入ってますよ」と書いてあります.

アプリケーション開発者の多くは,フォルダ単位でデータを読み込むとき,このファイルをとりあえず読み込んで,フォルダの中に入っているファイルをすべて読み込んだりします.

 

一方で,中にはファイルを一つしか開けない,そんなにたくさんのファイルをやりとりするのが難しい,という環境が稀にあります.それがWebアプリケーションです.

Webアプリケーションはサーバ上で動きます.ブラウザはサーバ上で動いた結果を受け取っているに過ぎません.

さて,このブラウザですがセキュリティの関係でフォルダのファイルを読み込むことができません.フォルダのファイルを読み込んだら,フォルダの中に入っているファイルを全部アップロードできるのに,と思いますがセキュリティ的にとても危険です.

例えば,コンピュータウイルスに感染してしまった人がいます.このウイルスはフォルダのファイルが読み込まれた時,そこに書かれているファイルの情報を書き換えてWindowsのシステムファイルを送信するように仕向けるかもしれません.

クラッカーという人は何をしでかすかわからない人たちで,アプリケーション名に36万文字ぐらい突っ込んでスマホのデータを全消去したりする人たちです.やれることが多いほどクラッカーが自由に活動できる幅も広がるわけなので,余計な操作は極力できないようにしたいのがブラウザ開発者の心境です.

そういう事情もあって,無闇矢鱈とフォルダ単位でアップロードできない仕組みになっていたりします(だいたいの理解の範疇なのでブラウザとかOSの人がいたら詳しい説明お願いしますorz).

でも,やっぱりフォルダ単位でデータ送りたいということがあるので,そういう時にZIPを使います.ファイルを1つしか送れないような環境でZIPファイルは役に立つわけですね.

 

ここで勘の良い人は,「MMMは別にZIPじゃなくてフォルダ投げればよかったんじゃね?」と思います.フォルダの中からPMD/PMXファイル本体を探し出せばそれで済むわけですね.れどめも圧縮されていないですし,ビュワーでちゃんと開けるので一石二鳥です.

なぜZIPにしたのかは開発した人本人にインタビューしないとわからないので,心境を代弁することはできないのですが,ここまで書いて凄く歯切れが悪いので「作ると凄く面白そうな気がしたから作った!」ということにしておきましょう^^;

なので,このMMMの問題の本質はZIPファイルを読み込むのではなく,ディレクトリ単位で読み込むところにあるんじゃないかと僕は思っています.

 

さて,じゃあMMMでZIPを読み込むのと,MMD for UnityでZIPを読み込むのとでどのような差があるかについてです.

 

MMMはデスクトップアプリです.なので,MMMの操作はユーザに委ねられます.

MMMのユーザはそもそも何を行うにも自由です.動画作るのもいいし,モーションを鑑賞するのもいいし,時にはれどめを読まずに動画を投稿することもあるかもしれません.

こういうことがあるから,れどめに極力目を通せるようにしましょう,ということでZIPファイルの読み込みが廃止になったんじゃないかな,と思います.

*1

 

一方,MMD for Unityはいわゆる開発者向けのツールです.開発者がMMD for Unityを使って何かアプリケーションを作るわけですね.どのようなアプリケーションを作るかは開発者に委ねられるわけです.

 基本的に開発者が自由にアプリケーションを作ることができます.そのため,MMMと比べるとユーザのできることの幅が極めて小さいです.

ここで恐らく,一番の焦点となるのは,開発者が利用規約を破るようなアプリケーションを作ることだと思います.

 

利用規約を破るケースは3種類です.

  1. 開発者がアプリケーションで使う際に利用規約を破った
  2. 開発者がアプリ利用者が意図せず利用規約を破れるような設計にした
  3. MMDをぶっ潰すぜヒャッハー!

1番目はMMDやMMMを使っているときに,うっかり(意図的に)やってしまったケースと似ています.一応,MMD for Unityでも利用規約にモデルとかモーションの利用規約守ってね,ってことを難しく書いているので問題無いと祈りたいです.

 

2番目は例えば,勝手にどこかからZIPをダウンロードして展開して描画するような形式です.ですが,こちらの方法はそう簡単にはできません.

 

ZIPファイルをダウンロードするには事前にZIPファイルのURLを把握してなければなりません.アプリケーションがそのURLにリクエストを送って,ZIPファイルをダウンロードしに行きます.

この,URLを知る方法は3種類あります.1つ目はユーザが入力してくれること.2つ目はアプリケーション開発者があらかじめリストを作成すること.3つ目はWebクローリングと呼ばれる方法でリストを自動生成することです.

 

1つ目については,ユーザが普通にモデルを鑑賞する目的でZIPファイルを引っ張ってくるのはいいと思います.MMDのWebクローンみたいなソフトで動画作れる仕組みなら,利用規約を表示させる必要があると思います.そのコンテンツで何を生み出すかが重要になってくると思います.

2つ目も結局は利用規約を守る範囲でリスト化してねってことだと思います.

 

で,3つ目ですが,Webクローリングってなんなのかと言いますと,例えばアップローダに0番から9999番までのファイルがあります.これを,マクロみたいなのを組んで全部ダウンロードするような強引な方法です.通常のアップローダはこれを検知するとIPアドレスを遮断します,迷惑なので.

一方,Bowlrollの場合,ほとんどのファイルに鍵がかかっていて,おまけにリファラー制限も行っています.20件に1件より酷い精度でダウンロードできるか否かの話なので,これをやる意味ほんとにあるのと思います.

 

という訳で,本当にBowlrollでWebクローリングできるかどうか調査してみました.結論を書くと技術的に少し難易度が高めなので,それ相応の技術力のある人じゃないとリスト化することはおろか,ZIPファイルを1つもダウンロードすることができないと思います.

 

見た感じ,あるPHPに対してPOSTリクエストを投げて,その結果を受け取ってる感じになってます.

RubyだとMechanizeと呼ばれる仮想ブラウザのようなものがあるのですが,これを使えばリストを作成するのも可能かと.UAリファラも偽装できるので,どのようなものをPOSTで投げているのかわかればできるかと思います.ただ,サーバでトークンを生成して,これをリクエストに含めないとダメ,みたいな仕組みになっていると,たぶん技術的に難易度が跳ね上がります.

と言うのも,URLを生成している部分が完全にJSで組まれています.URLから推測できないようなリクエストを投げられると,JSの実行環境が必要になります.Mechanizeでそれあったかどうか覚えてないです.

この方法だとリストはサーバに置いといて,適宜そのリストをブラウザへダウンロードさせる形になるんじゃないかなと思います.

 

ここまで苦労してるのに取得できるリストなんて雀の涙程度です.しかも取得したリストはバニラに近い状態です.ここで例えば,Bowlrollにめちゃくちゃ詳しくタグを付けられる機能があればそのリストの利用価値は極めて高いものとなりますが,ほとんどがNO IMAGE,しかもタグが曖昧です.たぶん,ユーザから見てもこんなリストどうやって使うんじゃーって話になると思います.

既にここまでやれるとなると,もはやBowlrollさんとこのZIPファイル根こそぎダウンロードして,別のサーバにアップするみたいな斜め上の発想をしてると思います.

 

ここまで書いたんですけれども,途中からMMD for Unityとは関係ない話をしていましたね()

Webクローリングでリストを集める方式ですけれども,Bowlrollさんから集める方法はとても難しいかと.直リンでダウンロードは少なくともできない仕組みになっています.これは他のアップローダも同じです.

だので,勝手にダウンロードされる心配はほとんどありません.むしろ,勝手にダウンロードされるような状況になった場合,セキュリティ的に皆さんが登録している個人情報のほうがはるかに危ないと思うのでBowlrollさんのほうから自主的に対応してくれると思います.

 

いろいろとこういう可能性とか考えるのは,なかなかおもしろい議論ではあると思いますが,考えるだけ全くキリがないということに気がついたので,論点がまとまったらまた別のところで書こうと思います.

いずれにせよ,Bowlrollさんはニコ動と親和性が高い存在で,他所から使うっていうのは完全にぶっこ抜いて転載目的か,あるいはアタックしてサーバ落とすとか,そういうかなり悪い方向にベクトル向くと思うんですね.

ここはむしろMMDのコミュニティのあり方に話が広がってしまって収集つかなくなってしまうので,今日はこれでおしまいです.