第1回 VTuberハッカソン(バーチャルYouTuberハッカソン)参加してきたwrite up

概要

2018/2/24-25 で開催された VTuberハッカソンで当日結成した「肉1.5倍」という6人チームに参加してきました。得られた知見とか考えていたこととかを書きます。

peatix.com

作った動画はこちら

www.youtube.com

(で、出来れば暇を見つけてもう少しアップデートしたい!) → 一週間後の03/03でアップデートしました。

チームメンバーにも恵まれ、充実した二日間の開発を経て動画を出して、 アユート賞とCGCG賞と玉置P賞を頂くことが出来ました。嬉しいです!

チームビルディング+企画

結構事前にチームを作ったり一人でやると覚悟を決めていたりした人が多い感じでした。 僕は何も考えてなかったので当日結成のチームです。

企画案は 暁ゆ~き さん 暁ゆ~き@C94 3日目 西ね04b (@AkatsukiWorks) | Twitter が考えたパルクール系YouTuberです。
この企画は以下の3点で技術的にチャレンジングでしたが、まあ暁ゆ~きさん(スゴウデ)とナカジさん(スゴウデ)が同じチームだったし、ナントカなるやろ…って感じでいきました。

チャレンジングな点は

  • 当日ゼロベースのキャラモデリング
  • 広いエリアを使った動画(つまりモーキャプ流し込みでは無理)
  • 360動画出力

です。ハッカソンの勢いじゃなければマジで工数を頂きたい…w

企画のコンセプトアートを暁ゆ~きさんが書いて、 f:id:izm_11:20180225235025p:plain それに併せてYouTube出力時のサムネイメージをナカジさんが作って f:id:izm_11:20180225235150p:plain

全体の方向を決めます。 (このタイミングでslackチームを作って、githubリポジトリを立ててます)
現代世界を舞台にするか荒廃したポストアポカリプスで行くか悩みましたが、ポストアポカリプス良いよね、良い。という気持ちで後者になりました。
企画台本をgoogle documentにワイワイとみんなで書いていきます。

余談ですがこの時に40インチモニタを会場であるアカツキ社さんが貸してくれたおかげでスムーズな台本作業が出来ました。ハッカソン会場に大きいモニタは便利ですね。持って行くのはつらいですが…

特に今回は依頼した声の方が日曜日に対応が出来ないので、土曜日中に台本fixをしなきゃいけない。という点で、割と普通の動画製作案件みたいな進め方になります。(台本→コンテ→モーション→モーションに合わせてシーン調整)

こんな感じの台本というかコンテというか仕様書が1日目の夕方に出来上がってます。 f:id:izm_11:20180226001236p:plain

モデリング+実装

モデリングは ガチンコの方が2名いたので分担して2キャラ(ライムさんとお供ロボットのデコポンさん)を作ってもらってます。この辺りは僕詳しくないので、また適宜追記します。 デコポンさん(このお供ロボット)はCADが得意なスゴウデメンバーがラフスケッチを描いてものすごい速度でモデリングしてくれました。すごい… f:id:izm_11:20180226002023p:plain

普通は2日間のハッカソンでゼロからキャラモデリングしない方が良い、とのことです。

実装です。

1日目の内に要素技術をガシガシ検証していきます。

  • PerceptionNeuron環境セットアップ(会場は結構ノイズ厳しかったですが、別室の会議室はノイズが少なかった!ありがたい)
  • 広いエリアを作って決まったルートを歩かせる(スプラインエディタとfollow splineのコンポーネント+mecanimセットアップ芸)
  • 360度動画出力 (Unity2017.3で、AVProのムービー出力のアセットを使いました。パノラマ出力とPostProcessing Stack v1との相性を危惧していましたが、まあ、ギリギリ使える印象です。ブルームが誤爆したりはしなかったです。つなぎ目は目立ちます)

後はモデルが来ることを信じてユニティちゃんで仮のシーンセットアップを作っておいて、各カット毎のシーンを作ってあまりプレハブ使わない運用でいきます(短時間での共同作業を可能にするための措置で、ハッカソンでなければお勧めしません)

最低限の歩き回り+障害物乗り越えジャンプのmecanimステートを作って、上半身をアバターマスク切っておきます。今回は歩く下半身はmecaimのモーションブレンドセットアップで、上半身はセリフに当てた決め打ちのモーキャプ流し込みを使う事にしました。また、後々使いそうなFinalIKの各種セットアップ+パラメータ調整をユニティちゃんを使って、ここでやっておきます。

こうしておくことでモーキャプデータが綺麗に取れなくても、マスクブレンドを使って(例えば無難そうな胴体周りの微動だけモーキャプを当てるとか)逃げられるようにしつつ、最低限のアニメーションを担保できます。

1日目の深夜に台本音声ファイル+何かあった時に備えて汎用っぽい台詞集を受領。これで決め打ちモーキャプを2日目朝に取れます。 ここまでが一日目っていうか二日目の早朝です。

f:id:izm_11:20180226003713p:plain

気合いで完成まで

2日目 モデルが2日目の昼くらいに1stで上がってきました!素敵!かわいい! というわけでモデル差し替えをしてガーッと実装していきます。

1st:ウェイト適当+仮マテリアル
2nd:ウェイト塗り+仮マテリアル
3rd:ユニティちゃんシェーダーセットアップ
4th:口パクモーフ追加

と、計4回のモデル更新がありましたが、うまいこと差し替えます、1stを出来るだけ早く貰うことで、足幅の矛盾やアニメーションの変なところが無いかを確認出来ます。(実際この1stモデル差し替えタイミングで、シーンの建物配置の調整が入っています) 分かる人向けのハマりポイントとして、ブレンドシェイプ(口パクとか)を追加したタイミングでmeta無しfbxのみ書き換えでの差し替えが破綻するので注意です。

そこから先は根性で出来るだけ頑張るという世界なので、Unity上で手をいっぱい動かすだけです。

うう、記憶が無い…

動画をカット単位で出来たシーンから出力する前に、台本ベースで字幕を用意しておいてもらって、Premiereで連結+出力+Youtubeにアップロード。 をしたところで17:00で開発終了です。

担当範囲と感想

こんな感じで手を早く動かしてUnityでガーっとやってました。実装の見切りとかもやってます。

相当に時間ギリギリまでUnityを触ってて(たぶん参加チームのうち、動画出力が一番最後だったはず)割とヘロヘロになりましたが、審査員の方から感想や賞も頂けて、とても楽しかったです。

特にサマーレッスンの玉置Pさんから褒めて頂けたのは、とてもうれしいです!

企画の時点でビビっと来る素敵な案で、初期にコンセプトアートや雰囲気をチーム内で共有できたことで、残り時間を見ながらの取捨選択もスムーズに行えて、結果的に限られたリソースで良い物が作れたのではないか、と思います。

第二回があるかはわかりませんが、工数は修羅場でも、和気あいあいとした雰囲気のチームでとても楽しかったです。

以下、ハッカソン中のチーム名言(?)集

https://speakerdeck.com/izm/shui-wu-yue-raimufalseri-ke-woshao-jie-simasutuspeakerdeck.com

Unity2017 Game Optimization 2017 Second edition読んだ& 最初の100ページくらいの粗訳

概要

Unity 2017 Game OptimizationというUnityの最適化にフォーカスした本が出ています。ちょうど年末年始休みだったこともあり、ざっと読んでいました。 結構読み応えのある本で、知らなかったことも多くて役に立ちました。

https://www.amazon.co.jp/exec/obidos/ASIN/B076T4TW9G/

  • 1章: プロファイル計測
  • 2章: MonoBehaviourの最適化
  • 3章: Bathingの最適化
  • 4章: Artの最適化
  • 5章: 物理演算の最適化
  • 6章: 動的なグラフィックス最適化
  • 7章: XR向け最適化
  • 8章: C# メモリマネジメント
  • 9章: 他のtips集

という量で350ページです。日本語版無いの?と聞かれることもあったので冒頭2章までくらいの粗訳を書いてみました。読んで面白そうだと思ったら是非皆様の本棚にも加えてみてはどうでしょうか。個人的なおすすめは7章のXR向けパフォーマンスチューニングと8章のメモリ最適化です。

続きを読む

2017年12月現在Oculus Rift DK2は使えるのか

概要

使えます。ただし操作をするためにはXBOXコントローラを買いましょう。

セットアップ

OculusのSetup.exe を起動して、セットアップ時にこの画面でHDMIを探してずっとクルクルが回るので、 skip setupします。 f:id:izm_11:20171206024244p:plain

すると、home画面などはDK2のディスプレイには映りませんが認識はされています。
デスクトップ上のOculusからLucky Taleを起動してからDK2を覗き込めば、無事起動しているのが確認できます。(Lucky Tale 1.05で動作確認済)
XBOX コントローラを使うアプリケーションであれば動作するものがある。という感じで覚えておきましょう。

Oculus App上では以下のように認識されていればOKです。(ver 1.20.0.474906で確認)
常に上の方に「Setupがまだだよ!!」という警告が出ますが、気にしなくてOKです。

f:id:izm_11:20171206024547p:plain

Unity上での開発

エディタ実行でもDK2上にプレビューが出来ます。
また、ビルドした実行ファイルを起動すればDK2に映すことが出来ます。

何が出来ないか

あまり詳しくは確認していませんが

  • そもそも古いGPUやOptimus付きのノートPCなどは動作保証外なので動かない可能性が高いです。要スペック確認です。

  • Riftを被っているか判定するセンサがDK2には無いので、市販のアプリでHMDを被ったらゲーム開始、みたいな仕組みが入っているとDK2では遊べない予感です。

  • OculusHome画面は見られません。アプリ起動を切り替えるには都度Oculus Rift DK2を頭から外して、PCモニタ上でアプリを切り替えましょう。

  • また、将来にわたって動作を保証するものではありません。今から新規で購入する場合はOculus Rift CV1をお勧めします。

余談:もし友人などから「余ってるから使ってみる?」と言われたら1-2万円くらいなら買っても良いんじゃ無いでしょうか!

Insta 360Proをガーっと一週間くらい使った感想

概要

現時点のレビュー未満のメモです。

買いかどうか

45万円は、これまでの相場から考えると驚きのバーゲン価格、ステレオパノラマが必要なら現実的に第一選択肢だと思います。 NokiaのOZOとか先行事例より一桁安いし、GoPro2台の魚眼より横向いた時の破綻が少ないし、立体オーディオもいけるし…

微妙に気になった点

起動までの時間

電源入れてから撮影開始までが1分強掛かります。覚悟が必要です。

動画撮影中の電池の減り

大体1時間にバッテリー1本使います。大量購入推奨。

静止画の内蔵スティッチが遅い

特に8kステレオパノラマ。撮影開始してスティッチ終わって、次の絵が撮れるまで30秒くらい掛かります。全部6kステレオパノラマ動画で撮ってPC上で後処理してフレーム書き出しした方が良い気がします。

天頂付近がクシャッとなる

アップデートで修正予定だそうです。

ファンノイズ

これは静かな室内や、ペット撮影ではちょっとつらいかも。ただし内蔵マイクはデジタルノイズキャンセルがあるので、ファンの音はほとんど気になりません。素晴らしい。

スティッチ精度

付属ソフトウェアによるNew OpticalFlowスティッチはすごくスティッチ痕を消してくれます。しかし人工物(背景のビルとか)を人が横切ったりすると、荒れます。 ここら辺は現場で試し撮りして、ガッとOpticalFlowスティッチして確認した方が良いです。 例えば人混みのシーンなんかは、苦手です。

Androidクライアント無し

iOSおよびMacおよびWindows(x64)のみです。Androidで遠隔シャッターだけでも動くと嬉しいので、楽しみにしてます。

めちゃくちゃディスクの空き容量が減る

びっくりしました。ちょっと1週間遊んだだけでPCの空き容量が500GB程度減りました。

マニアックな気になった点

各カメラがシャッターシンクロしてない

ほとんど明かりが無い夜に車が走ってるのを道端で撮ると顕著ですが、各カメラはシャッターシンクロしていません。なのでステレオパノラマにしたときに左右のシャッタータイミング由来の奥行誤認が起きます。

//普通の日中や照明がある用途だと気にならないです

OpticalFlowスティッチ+ステレオパノラマで立体視が破綻する

左目画像と右目画像それぞれで、OpticalFlow計算結果が独立しているようです。なのでカットによっては左右の立体視が壊れます。まあ気にならない事の方が多いですし、多くの場合は左目画像と右目画像は同じようなスティッチをするので問題ないかもしれません。

最後に

重箱の隅を楊枝でほじくるような事ばかり書きましたが、これ45万円は本当にあり得ないほど安いんで、お勧めです。ただ、誰でもどんなシーンでも使える夢の万能機ではない、という事は念頭に置いておく必要がありそうです。

OpenPoseがどんどんバージョンアップして3d pose estimationも試せるようになっている

概要

今年のゴールデンウイークに公開されたCMUのOpenPoseはその推定精度の高さと、(Ubuntuなら)気軽に試せる依存ライブラリの少なさ、結果の分かりやすさから多くのサイトで話題になりました。

github.com

このエントリは、このOpenPoseについての最近(-2017/7)の情報をまとめておく、という備忘録的な意図です。

  • 手と顔の推定が正式追加
  • WindowsBuildが実用的に動く
  • 骨格の3次元座標が(セッティングすれば)取れる
  • 商用ライセンスが正式に発表

あたりがトピックになるかと思います。

手と顔の推定が正式追加

これは話題になった当時からビデオは公開されていましたが2017年7月にコードが公開されました。早速試された方がいるようです。(nnn112358さん凄い!最初のインストール記事も書かれた方です)

OpenPoseのFace Estimationを動かしてみた。 - Qiita

OpenPoseのHand Estimationを動かしてみた。 - Qiita

WindowsBuild済み実行ファイルが実用的に動く

1.0.1相当のビルド済みDemoがzipで配布されています。 github.com

Windows10環境(と、たぶん初期ビルドだとGeforceGTX900番台のGPU)でこの800MBくらいのデモ環境一式をダウンロードして http://posefs1.perception.cs.cmu.edu/OpenPose/OpenPose_demo_1.0.1.zip

bin\OpenPoseDemo.exe --video examples\media\video.avi

コマンドラインで実行するだけで、Windows上でOpenPoseを試すことが出来ます。

f:id:izm_11:20170801125449p:plain

もし、起動に失敗するようであれば以下のリンクを頼りに外部ソフトウェアのインストールやセットアップを行ってください。

openpose/installation.md at master · CMU-Perceptual-Computing-Lab/openpose · GitHub

手や顔の認識も同時に使いたい場合は

bin\OpenPoseDemo.exe --video examples\media\video.avi --face --hand

とfaceオプションやhandオプションを付けて実行すれば良いようです。

参考サイト OpenPoseのFace Estimationを動かしてみた。 - Qiita

骨格の3次元座標が(セッティングすれば)取れる

OpenPose公開時の反応で多かったのが、各関節の3次元座標が取得できるという誤解でした(僕も最初はそう思っていました) しかし、実際にOpenPoseが行っている処理では、画像内の関節の2次元座標(xyの位置)だけしか求めていません。 なのでモーションキャプチャシステムに使うとかの用途だと、そのままでは使いにくい面もありました。

しかし 2017年7月に3次元骨格推定 がコミットされています。

openpose/3d_reconstruction_demo.md at master · CMU-Perceptual-Computing-Lab/openpose · GitHub

現時点ではまだbeta扱いで、UbuntuWindowsでしか動作確認が無いですが、骨格の3次元座標が取得できるデモも作られています。(1.0.2で追加) カラクリとしては複数のカメラの内部行列(視野角とか歪みパラメータ)と外部行列(カメラ間の位置と姿勢)を予め求めておいた後、普通のOpenPoseを起動して、各カメラ上の関節座標の2次元座標を元に、3角測量的に3次元座標を求める、という仕組みです。

推奨カメラはPointGray社のFLIRで、たぶんこれはシャッタータイミングを同期させる事と、速くて高解像度のカメラの方が精度良く推定することが出来る為だと思います。もちろん理屈の上では機種がバラバラのUSBカメラを3台でも求めることは出来ます。

商用ライセンスが正式に発表

以前よりライセンスに「非商用、研究用に限る」と記載されていましたが、正式な商用利用の手段が公開されました。 商用利用の場合は年額25000ドル(約270万円)程度かかるようです。ちょっと高めなのでお財布と相談の上ご利用になれますね!

OpenPose - Realtime Multiperson 2D Keypoint Detection from Video | Flintbox