ワクチンの副作用結構重かったな~打てて良かったな~っていう話

これは何

まず、これは症状大変だから打つのやめといた方がいいよ的な文章じゃないよ。むしろ、僕個人的には推奨するくらいの気持ちだよ。でも、個人の選択だと思うので自由にすればいいよ、ワイワイ。

モデルナ製のコロナワクチンを職域接種で打った。いろいろ体験記見たけど、僕結構重い方引いたっぽいので書いとこっかなっていう話。

「副作用どうだった?」って話題も最近ありがちだったので、僕個人の体験に関してはこのブログで会話スキップできると楽だなっていう魂胆もある。

 

接種後経過反応

1回目

準備:何もなし
症状

ほぼほぼ何もない。確かに腕は痛いけど、そんな...。いっぱい腕立て頑張って筋肉痛起こした方が痛いくらい。発熱も何もない。めちゃ元気。

2回目

準備

発熱などの報告を多く見たので、準備をしておくことを考える。

準備したもの:頭痛薬、チューブ式で水飲めるやつ、しんどい時用の映画とかゲーム

11時ごろに打つ

何もない。1回目何もなかったし、腕痛いくらいをイメージ。

18時ごろ

体が怠いな~とは思うけど、別に行動阻害されるレベルではない。

19時ごろ

結構明確に体が怠い。お家に帰り始める。まだ家でご飯何作ろっかな~とか考えてるニコニコおじさん僕。

20時頃~21時ごろ

何か...ベッドで転がる以上の行動取るのきついな...体温図るか...

→38.2度くらいの温度

ここらが噂に聞く副反応か。大体みんなここらがピークだったな、インフルエンザに罹った時を思い出す、スマホで動画でも見ながらゆっくり過ごすか

21時ごろ~22時ごろ

自分がリーダのMTGがあったのでベッドの上からリモートで出る。

悪寒、きつい倦怠感、頭がぼーっとする感じ。

頭痛薬を飲む。

シンドイのはそうだけど、頭はわりと回らんでもない、寝転がりながらできるワークならできるかな。

図ると38.5度くらいの熱。

咳と鼻水がないインフルエンザみたいな感じ。

22時ごろ~23時ごろ

息がきつい、熱も39度を超えた。

全然まとめ切れてないけど、MTGは終了で止める。

もう今日は活動はできない状態だと悟る。

明日とか今後のスケジュール、諸々連絡は楽になったときにしよう。

風呂とか歯磨き、飯も後で楽になった時にしよう。

チューブ式で水飲めるやつを枕元に置く。

22時ごろ~23時ごろ

激しい倦怠感、頭ぼーっとする、悪寒凄い、汗びっしょり、ずっと酸欠みたいな感じ...座る立つはもう無理。スマホも持てん。

手足ちょっと動かしたり姿勢動かすくらいが限界。

水なくなった。

24時ごろ

さっきのシンドさの上があるってマジですか!?って感じ。

もう自分で熱測れないから体温分からん。

激しい倦怠感、頭ぼーっとする、悪寒凄い、汗びっしょりは純粋パワーアップしてるんだけどもうここまでくるとお前らはもう知ってるって感じだからまあええわ。

酸欠というか胸苦しい感じが知らない次元のシンドさを出してる、肉体的にも精神的にもむっちゃきつい。

別に意識して僕頑張ってないのに、体が勝手にすごい呼吸を頑張ってる。

これ自分の呼吸もうコントロールできてないわ、人間の生命維持活動すごい。

これが呼吸困難、過呼吸ってやつか。

地味に筋肉注射による腕の痛みが楽な姿勢を阻害してくる。それどころじゃないから君みたいなショボい症状はせめて大人しくしていて欲しい。

救急車呼ぼうかなって思い始めたけど、もう指一本動かないしどうにもならんねってなった。このレイヤーのシンドさ人生で初めて知ったわ。

解熱剤を飲もうとか、頭痛薬を飲もうとかもうできないよ、それ。

24時~26時ごろ

24時ごろと似たような症状のままちょっと楽になったり死にそうになりながらもがき苦しむ。

楽な状態が手足が動いてもがける状態、死にそうな状態がもはやもがくことすらな状態。

これが2時間だったことは後で気づいた話で、体感的には7時間くらい。何で朝日が出ないんだ・・・?って思ってた。

発熱でキツイとかシンドイとかの遥か上の次元にいる、この地獄何て表すんだろ。

27時ごろ

呼吸はわりと安定した。

一瞬スマホで時間を確認したらまだ深夜3時でびっくりした。朝までもがいてるもんだと思ってた。

とはいえ、激しい倦怠感、頭ぼーっとする、悪寒凄い、汗びっしょりみたいなのは相変わらずなのでベッドで転がってる状態以上は難しい。

でも、一回めちゃ頑張って水を取りに行った。めちゃくちゃ汗かいてるし、脱水症状起きるかもしれないとずっと考えていたので。

水取りにいくだけで決死みたいな覚悟になるとは....。

熱測ったら38.6度くらいだった、多分下がったんだろうな。

27時~29時ごろ(ワクチン打った次の日の深夜3時~深夜5時)

呼吸が安定したので本当に楽。メンタル的にも越えたわガハハってなってた。

まだまともに座ることも立つこともできないし、スマホを見る触るという行為すらめちゃキツイ体調なんだけど、呼吸が安定するともう色んな行動がめちゃ頑張ればできるようになる。

29時~31時頃(ワクチン打った次の日の朝5時~朝7時)

座る立つはまだ無理だけど、意識が結構しっかりしてて体調以外を考える余裕が少しある。

勝手に復調したつもりでいた(ワンチャン今日仕事もこなせるかなとか思ってた)けど、座ることすらまだできてないし、今思うとまだ地獄みたいな体調。

調子良いとちょっとスマホ触れる。

気が付いたら寝てたからよくわかんないけど多分31時ごろに寝てた。

 

~~ここから時間表記を次の日に変える。時系列的には繋がってる。~~
13時ごろ

起きる。

諸々無断欠席である。方々にごめんなさいメッセージを送る。

いくらか簡単にスケジュール調整を行う。

まだ座る立つはキツイ。スマホを触る見るくらいはできるけどやってると具合は悪くなる。

13時~22時ごろ

まだ座る立つはキツイ、37度後半~38度あたりの体調で上がったり下がったり。

キツイと思ったら頭痛薬飲んだり、水飲んだり自分で体調コントロールできるのでまだ楽。

22時頃

まだ倦怠感や頭にモヤがかかった感じがあるものの座れるようになる。

体温も37度台。

ずっと何も食べてなかったのもあり、猛烈に食欲を感じる。

ワンチャン普通にコロナ罹っているのではという気持ちもあったので、確認兼ねて味の濃いピザを頼む。

めっちゃ美味い、最高や。味覚も嗅覚も正常っぽそう。

ようやく体調悪い時に見ようと思ってた映画が見れると思ってウキウキし始める。

23時ごろ

倦怠感と頭痛がくる。何もできんわこれ...。

38度超えてくる。

頭痛薬飲む。

何もかも諦めて寝る。すぐ寝れた。

 

~~ここでまた時間表記を次の日に変える。~~
7時ごろ

起きる。この日は土曜で普通に休日。

まだ倦怠感と頭痛がある。頭痛薬飲む。

スマホは触れんでもないけど段々具合悪くなってくる。でも意識結構しっかりしてるので何もできないとただシンドイだけで暇。

暇って感じる余裕があるとも言える。

7時~16時ごろ

暇だな~頭と体怠いな~って思いながらごろごろしてたらいつの間にか寝てた。

16時

起きる。

倦怠感も頭痛も何もない。

立って動き回っても何も起きない、普通に座ってられる。

体温は37.1度くらいでちょっと37度超えてるくらい。

めちゃ元気、終戦

 

感想

やっぱコロナにかかるともっとキツイんだろうなって思ってるので罹る前に接種できて良かったと思ってる。

このシンドさがこれ以上の時間継続するとかこれ以上の地獄が来るとかやべえって。

 

「体調きつくなったら~」みたいなこと事思ってたけど、その時には行動不能になってる可能性がある。やっぱ一人暮らしって危うさもあるよね。

もっとちゃんと事前準備して適宜適切対処すればここまで悪化しなかったかもしれないし、少なからず事前に休み入れていれば周りの人への迷惑もまだ少ない。

結局、事前にちゃんと用意や連絡しとこうねに帰結するんだなぁ...。

 

KaikiofKaikiと2020年

はじめに

せっかくなのでそれとなく2020年を振り返ってみます。
NDAあたり確認とトラブル面倒なのでふんわり~プレスとか出てる奴は大丈夫そうなので貼ったりしとく
終盤駆け抜けた1年だったな~

1月

仕事はかなり落ち着いていた(コロナの影響とか響き始めた)ので、運用していたUnity製3Dシステムの便利機能を作ったり、自分の学びをチームへ一般化させていたりしていた憶えがある。
CGアニメーションあたりの勉強あたりをしていた。MotionBuilder、Maya、Brender、どれも使えると言えるほど使えはしないが触れんでもないって感じになった。

副業でMESONさんのお手伝いをしていて、ラスベガスのCES2020で展示されたPORTAL with Nrealの開発をお手伝いしていた。主にNrealの最新SDKの調査、壁の認識とイメージトラッキングみたいなことをしていた。 www.youtube.com

2月

ここも仕事が落ち着いていたので、モーションキャプチャ周りの技術をしっかり勉強していた。
80~90年代のVRや3D関係論文を漁ると、モーションキャプチャの仕組みを作るところから始まることが多くあり、モーションキャプチャ技術の理解に大いに役立った。本なんかで勉強できれば楽だったが、調べた限りモーションキャプチャの教科書と言えるようなものは世に存在していなそうだったので仕方ない。
モーションキャプチャ様々なドキュメントをひたすら隅々まで全部読み込み、ありがたいことに自分が管理していたモーキャプスタジオもあったので色々実験してた。

引き続きMESONさんにお世話になっていて、Docomo Open House2020での展示のお手伝いをしてた。僕はRealSense使って深度情報を取り、オクルージョンがいい感じになる仕組みを作っていた。 f:id:colaiiiyahhou:20210102230727j:plain

3月

グラビア系の撮影をVR技術で云々するという案件があり、360度カメラ、360度マイク、バイノーラル音声を勉強していた。これも調べても何も出ないと思っていたが、SODが結構インタビューなどで技術ネタバラシをしてくれており、大変参考になった。案外、画像検索すると撮影現場の写真もヒットし、機材構成の参考にした。
リサーチのために、仕事でAV一日中見て終わることもあったんですけど、人生何があるか分からないものですね。

VTuberの撮影は結構経験値があったが、実写の人間の撮影は初めてだったので特殊機材に限らず実写撮影機材を随分勉強した覚えがある。かなりコストパフォーマンスを攻めた撮影だったけど、結構うまく設計できたんじゃないかなぁ。

調光卓やDMX照明、Art-netの変換機材やら照明関係を家に揃え、本を読み漁りながら色々やって照明関係の勉強をした。あと舞台関係機材の勉強とかもしてた。 f:id:colaiiiyahhou:20210102225300j:plain www.youtube.com

4月

結局うまくいかなかったんだけど、プロシージャルにUVを作り替えてテクスチャを張り替える、みたいなことやスマホ向けの360度動画プレイヤーみたいなものを作っていた。
CGを体系的に学んできていなかったので、その弱さをかなり感じた。スマホで超高画質の映像を再生するのはなかなかにシビアでエンコーダやら何やら「動画」そのものの仕様の勉強を随分した。

あとiPadとペン買った。イラストの勉強でもしようと思ったが、秒で挫折した。でも現場機材構成やら工作の図の製作で大活躍してる。

本格的にリモートワークになっていたので、リモートワーク用にバ美肉システムを作ってチームに向けて配信しながら仕事をしてみた。
f:id:colaiiiyahhou:20210103003011g:plain

ARkitでははなく、普通のWebカメラからDlibで画像解析した割には結構表情にうまく落とし込めたと思ってる。
f:id:colaiiiyahhou:20210103003220g:plain

5月

コロナもあって色々仕込んでいたものも飛んでいた。仕事のやる気元気が地の底に落ちていた。
が、趣味ではそれとなく開発はしていた。

お家にスタジオを作ることを決意。時勢にも会社にも依存しない自分のための基地を作らねば。
ということで、たくさん家に転がっていたデバイスたちをまとめるように一旦整理した。 f:id:colaiiiyahhou:20210102001556j:plain

せっかく最新のiPad買ったし、ARkitのフェイストラッキング使いたかったのでVTuberシステムを手癖で一本作ってみた。 f:id:colaiiiyahhou:20210103004320j:plain www.youtube.com

6月

所属していた子会社がなくなった。
次どうしよっかな~と思いながら次の部署探ししたり、転職活動もしたりしていた。
ほぼ無所属みたいな状態ではあったがいくつか相談はあり、広告向けに360度3DCG映像を作ったり、アーティストのライブのAR演出を手伝ったりしてた。
prtimes.jp あと、会社が保有している機材を管理していたので、その子たちの行き先を諸々調整してた。

プライベートにも時間的余裕ができたので、お家のスタジオを強化した。
丁度いい感じの木材が見つからなかったので自分で加工して f:id:colaiiiyahhou:20210102000632j:plain 防音加工して、 f:id:colaiiiyahhou:20210102000848j:plain テレビ吊りました。 f:id:colaiiiyahhou:20210102225047j:plain 家電や照明をiFTTTやAlexa、Remoあたりで全部スマート化した。 www.youtube.com

vive trackerやPERCEPTION NEURONも揃えて業務用と比べて随分見劣りするが、家でもモーションキャプチャはできるようになった。

7月

行き先が決まった。結局、転職はせずに本部所属となり、CG関係のR&Dというポジションになった。
ミッション的にはリアルヒューマン寄りのモーションキャプチャ向けスタジオを作る(ワークフロー含めて)のと、バーチャルプロダクションの撮影を良しなにするという感じ。
個人的にはバーチャルとリアルを融合させることを目指していて、必要な要素を全部回収していつでも自分で実現できるポジションを狙おうとかここらへんで考えていた気がする。

声優さんがYoutuberデビューしていく流れがあり、そこらへんのお手伝いとかしてた。
家でマイクの検証してる様子。あって良かったお家スタジオ。 f:id:colaiiiyahhou:20210102230246j:plain

お家のスタジオには木工加工用のボードを作った。 f:id:colaiiiyahhou:20210102000944j:plain

クロマキー合成もできる環境を作った。2月あたりに作ってた深度情報と合わせてCG合成する技術と合わせてより高度なMR合成遊びができるようになった。 f:id:colaiiiyahhou:20210103001504j:plain f:id:colaiiiyahhou:20210103001538j:plain

8月

モーキャプは主に権利やお金周りの問題を良しなに調整しつつ、どのスタジオにどういう配置で設置しようか作戦を考えていた。
バーチャルプロダクションは今までより遥かに映像周りの機材の質が高く、ソフトもまるで分からなくて苦労した。テレビやシネマ向けの機材が多く、ゲーム開発やインターネット番組で使われる機材やソフトと思想が違うんだな~。

スイッチャーを買った。これで家でもリアルカメラも含めてバーチャルプロダクションごっこができる。 f:id:colaiiiyahhou:20210103004859j:plain

9月

バーチャルプロダクションでのオペレータとしてまだまだ頼りないながらも案件をこなしていた。
www.youtube.com

prtimes.jp

www.youtube.com 色々大変で結構エグい思いはしたけど、バーチャルプロダクションを進めていく上で負担分散のヒントをかなり見つけることができたと思う。現場オペレーションの分散、CGデータ用意においてエンジニアチームをどこに挿し込むかみたいなワークフローの原型を一部実施しながら今後に向けて提案できた。

10月

バーチャルプロダクションとしてゴリゴリ撮影を頑張る。

大型のクレーンカメラ入れて、ゴリゴリLIVEなカメラアクションしたらからカメラのトラッキングが大変だったなぁ~ www.youtube.com

www.youtube.com

prtimes.jp モーキャプの権利やお金周りの調整がひと段落したので、現物をスタジオに配置しながら最適な運用や置き方を模索する。 f:id:colaiiiyahhou:20210101235823j:plain f:id:colaiiiyahhou:20210101235858j:plain

LED STUDIOも新しくでき、使いたかったので混ざりに行ってた。 www.youtube.com

11月

モーキャプの設置方針が定めた。
精度と安定性が概ね自信持てるところまでいったので、会社のHPにページも出した。
www.cyberhuman-productions.co.jp

LED STUDIOの検証を色々やった。 f:id:colaiiiyahhou:20210102000205j:plain f:id:colaiiiyahhou:20210102000253j:plain

ゴリゴリバーチャルプロダクションとして撮影をこなしてた。
この月は企業のカンファレンスとか発表会とかばっかり作ってたから何も出せるものがないや。

会社からベストクリエイターとして表彰されたのと昇格した。

12月

バーチャルプロダクションの撮影を頑張る

www.youtube.com

www.youtube.com

prtimes.jp

仕事場拠点が素敵
f:id:colaiiiyahhou:20210103061446j:plain f:id:colaiiiyahhou:20210103061435j:plain

家に電子工作やら照明やら、メインPCが必要ない実験をするエリアを作った。
まだ電子工作で物を作ることはほぼないけど、分解して遊んでることはそれなりの頻度である。 f:id:colaiiiyahhou:20210103005144j:plain

一通り振り返って

書き出してみるとエンジニアと言うよりよりクリエイターという枠に近づいたなぁ...
それとなーく浅く広い知識、具体的には音響・映像・照明・CG・コンピュータハード・カメラ・配信・XR・プログラミング・モーションキャプチャあたりがある中途半端な奴なんだけど、全部使い切って一つのバーチャルプロダクションスキルを生み出してる感じがあってなかなか気持ちがいいです。
現場だと何でも聞かれるし、ある程度ディレクション的な動きも兼務すると全部何となくでも把握してないと難しいよね

バーチャル〇○みたいなことをするのがとっても得意ながらも、ぶっちゃけそんな金にならん技術だったんですが、最近凄まじくブームでして、これが時流か

これからの一年

まだ何もかも足りない。分からんものが多すぎる。
しっかり勉強して地力をつけていた領域が結構うまくいった実感はあったので、やはり理屈や仕組みからじっくり理解することを大切にしたい。車輪の再開発であろうと、プライベートでは0から作っていきたい。
強く強くもっと強くならねば。特に自分がマイルストーンとして敷いている25歳になる7月までは。

MVNの次回メジャーアップデートがなかなか熱そうだな~って話

はじめに

3月初めにMVN2019.2.1がリリースされ、いつも通りアップデートの知らせが代理店であるゼロシーセブンさんからメールで来ました。 そこでは次回メジャーアップデートであるMVN2020.0についての情報もあり、なかなか面白そうだな~!って話です。

まず以下が次回メジャーアップデートのお知らせとして受け取ったメールの文章抜粋です。

4月にメージャーアップデートになるMVN2020.0のリリースも予定しており、HTC Viveを使用したオフラインポジション補正・独立したオブジェクトのトラッキング機能の実装、またソフトウェアの日本語対応が行われる予定ですが、主に上記の2点をお使いの方にお勧めのアップデート版となります。

この中でも個人的に熱いなって思っているのは特にここ、わくわくしちゃうね~!

HTC Viveを使用したオフラインポジション補正・独立したオブジェクトのトラッキング機能の実装

HTC Viveとの連携サポートで何が嬉しいのか

位置ズレ補完

どうしてもMVNは慣性式のモーキャプなので位置ずれが発生していくんですよね。
それを光学式トラッキングであるHTC Viveの絶対位置を参考にすることで、位置を補正すると。
ミドル価格ながらもヒューマントラッキングは自然にできるMVNと低価格ながらも光学式トラッキングで正確に位置を把握できるHTC viveの良いとこ取りですね。

もちろんこの二つのデバイス相性が良いことは誰もが見ても明白で、誰もやってなかったわけではありません。
MVNと光学式トラッキングの組み合わせはわりと模索され、うまくいかなくて挫折したり、オレオレ実装により良い感じのいシステムを構築できたり、みんな苦労しながらもうまいことやってました。
もちろんこれまで通り個人や組織でもやれば全然できる範囲なのですが、公式でサポートされてると助かる~~~!っていうね!

propありのモーキャプ

これはOptiTrackやViconのような光学式トラッキングラッキングがない環境に嬉しいことかなと。 MVNはprop用に一つ余分にセンサーはあるのですが、切り離すことはできないし、用途は限られる...
HTC viveがサポートされて低価格でporpモーキャプが付け加えやすくなるのは純粋に嬉しい場面があるかも。

どういう時に嬉しくなりそうか

懐の余裕がないとき

viconやOtiTrackのような高額光学式モーキャプを買えば位置ズレも精度の問題も解決する。 でもやつらはMVNの10倍以上コスト(機材も人間も)がかかるので、そういうのを用意できない懐事情のとき。

イベント時

遅延や演出の関係上、現地でモーキャプせざるを得ないことがあるが、OPtiTrackやViconを設置するのはスペースの問題から厳しいことが多く、そういうときはMVNが大活躍する
けど、ライブだから位置関係は大事にしたい、みたいことはありがちで、そういう時にこのHTC viveとの相互補完はものすごい嬉しいことになりそう。

まとめ

いろいろ便利になるんじゃないかと勝手に盛り上がったけど、実際どうなるか分からん。
サポートするってのもどこまでどういう感じにするのか全く分からんからな!
他にも、バージョンアップで強化したところから市場での需要変化具合だとか色々想像できることがあって面白いんですけど、そこらへんはまたいつか。

技術書店で買った本を大体読んだ、軽いレビュー

東京に引っ越したウキウキ田舎民なので技術書展にワクワク初参加した。といっても、人混みはあまり好きではないので、お昼過ぎにゆっくり行った。結局人混みに埋もれることになったが、並ばずに済んだので良しというとこである。

f:id:colaiiiyahhou:20190504170806j:plain
join

読んだ本たち

ゼロからはじめる3Dオーディオ入門

booth.pm
3D音声って何?レベルの初心者でも機材からその使い方まである程度把握できる本。
XRにとても興味があり、常々音声が与えるプレゼンスの影響は大きいと感じていたため購入。今まではとても3D音源の収録機材にお金がかかったそうだが、革命レベルの安い機材が登場したようで、敷居が下がったらしい(3万円程度)。なるほど、これならまだ手が届く範囲で買えそうだ。とても親切に機材やソフトウェアの使い方が記されており、初心者の僕でも機材さえ手元にあれば、今すぐにでも山に音源を収録しに行けそうな勢いである。というか行きたい。しかし、ここ最近の新型HMDバイスの発売ラッシュでお金が足りない...無念だ...。

フリーランスを完全に理解できる本

booth.pm
フリーランスエンジニアのきりみんさんがフリーランスに至るまでの経緯と、その後の話。
自分はあまりフリーランスに興味ないのだが、フリーランスという生き方はどんなものなのか知ってみたかったので購入。「フリーランスになれば儲かる」と宗教染みたように語る若者達と、それに反抗するように頭ごなしに「フリーランスは低学歴の末路」と否定するおじさん達のバトルばっかり見るので、中立的に意見が述べられているこの本はとても貴重に思える。本の内容は、「他はどれであれ僕はこうだった」というリアル(お金とかも結構具体的に載っている)である。僕個人は事業にガッツリ関わりたい民なので、今の自分の立場は正解だったなーと再認識した。

技術をつたえるテクニック ~分かりやすい書き方・話し方~

booth.pm
技術を文章として書く上で何に気を付けるべきかが学べる。
僕は文章を書くことが多いので参考にするために購入。とても良い本だった。ユーザーファーストで何を意識するべきか具体的に述べられている。本著で述べられている内容は常に意識していたい。今時チーム開発を一切しないエンジニアはいないだろうし、エンジニアならみんな読んでいいと思う。

VRSF このVRがすごい!

www.melonbooks.co.jp
様々なVRコンテンツのレビューとVRに対するアカデミックな考察が述べられている。
XRエンジニアの端くれとしてできるだけ多くのXRコンテンツは体験するようにしているものの、お金も身も持たない...。なので、こういった本で一気に知れるのはとても助かる,,,(XRコンテンツは百聞は一見に如かずの側面が強いので甘えすぎるのも問題)。レビューとは異なるが、エイゼンシュタイン氏と今井氏の理論から、キズナアイの「キャラクター」を明らかにしようとする試論はとても興味深かった。これだけでも読んだ価値があると思える。

Colorful Hacks

techbookfest.org
アカツキさんの社員さんが、低レイヤーから組織作りまで、実業務等で培った様々なノウハウを詰め込んだ本。
個人的に冒頭にあったx64アセンブラの記事に惹かれて購入した。昔にその辺の技術で遊んでいたのでとても懐かしい気持ちになった。とても丁寧だったので、入門にとても良いと思う。アカツキさんが取り組んでいるエンジニア組織の取り組みも、チームとしての価値観を感じられてとても良かった。自由に本を買える福利厚生、羨ましい(技術書展で1万円ほど散財して財布が寂しくなった)。

VRM FANBOOK2

booth.pm
VRMのアプリ作成・モデルセットアップのテクニックがまとめられている。
実際のセットアップや試した経験則から書かれており、丁度欲しい情報に手が届く感覚がある。実際、VRMは公式のreadmeが相当作りこまれているため、理解はそこを見れば良いので、うまくそこを避けた内容で秀逸。特に3章のVRM の深淵」は技術同人誌ならではという感じで楽しい

ぷれぜんすっ!

booth.pm
メルカリのxRチームが各々興味あることについて書いたTips集。
わくわく楽しい最新デバイスがいっぱい載っていてとても嬉しい...。お金が足りなくて試せなかったんだよね...。個人的に最も面白かったのがLookingGlassの項。なぜ、3Dに見えるのかの理論がとても分かりやすく(特に文章内で紹介されているスライドが秀逸)良かった。あの透過LookingGlassの実装、あんな単純だったんですね。アイディア勝利だ。

mixi-tech-note

speakerdeck.com
mixiさんによる技術Tips集。
こちらも組織作りに対する考え方があり、学びがある。特に非エンジニアの人にSQLをたたく環境を整えた話は参考になった。僕はUnityを主に使っているが、これはGUIに優れたツールであるため、どの範囲までエンジニアが対応するかはよく考えるところである。場合によっては環境を整え、非エンジニアでもできるところを増やして効率化を図っていきたい。また、デバッグツールをUnity上で作った話もとても参考になった。規模の大きい開発ならば、デバッグツールを作った方が効率化されることは念頭に置いておきたい。

WebXRの現状確認 2019 Spring

taimen.jp
WebXRが今どのような状態にあるかまとめられている。
自分がWeb周りの技術に疎いのもあって、WebXRの知識も遅れていたが、この本のおかげでWebXRの現状をある程度把握することができた。超大手各社が仕様策定のために動いてたし、凄いクオリティのサンプルもあってヤバい...。自分、めっちゃ遅れてるじゃん・・?情報追わなきゃ....。

まとめ

何とかGW中に買った本は概ね読み終えることができた。技術同人誌は、肩の力入れずに読めるものが多くて良いですね。趣味全力投球な感じの技術文章とか見ていてとても楽しい。次くらいには、出展側で参加したいですね。

リップシンクで画像ベースと音ベースを組み合わせて使う

はじめに

Luppetのアップデートで画像ベースと音声ベースでリップシンクを切り替えれるっていうのがあって「いいな~これ~」ってバチバチに関心したのでこれをやっていき!っていうね。 www.pixiv.net

なお、本記事の僕が書いたプログラム部分に関してはCC0とするので、ご自由にどうぞ。

何で組み合わせて使うん?

リスク分散

音声ベース(OVRLipsync)の方が精度ええからそれだけでええやんけ!!そんな怒号が聞こえる気もするが、それは結構危ない時もあるのだよワトソン君。

Vtuberをよく見る皆さんは、突然Vtuberが口を動かさずに喋る腹話術師になる姿を結構見たことがあるのではないだろうか。あれ生放送とかでしばらく続くと、なかなか胸が苦しくなってくるよね。よく生放送開始が数十分程度延ばされることがあるけど、ワクワクしちゃう(嘘、ハラハラと応援)。

というのも、マイクはなかなか気まぐれな奴で突然音をうまく拾ってくれなくなるんです。これは本当。しかも、解決が面倒になることがある。ケーブルや配線、マイクがダメというハードウェア的問題(分配とかしてると怪しむところ多い)、windowsの設定で音がうまく拾えてないっていうOS的問題(バージョンアップとかイベントでマシンが貸出機とかであるある)、Unityの問題(いつUnityそういうとこやぞ案件に遭遇するかも分からない)、純粋にプログラムの問題(バグは出るもんさ)で、解決に思ったより時間がかかってしまうことが多い。そう、容疑者がいっぱいいる。しかも犯人も一人とは限らない。大変だね、ワトソン君。

だから、いざの時のリスク回避手段としての画像ベースリップシンクである。音が死んでるときは画像ベースに切り替えることでその場は乗り切れる。犯人探しは後でもできる。

平たく言うと、
音声ベースのリップシンクはだけでは不安定なので、画像ベースとスイッチングできるようにしてリスク分散を行う

追記
どうやら認識されない声もあるみたいですね。ちゃんと音が入っていてもどうやらロストすることがあるみたいです。やっぱり音声ベース100%ってのも不安ですね。

表現の拡張

いろんなVtuber見てて、画像ベースのリップシンクも素敵なところいっぱいあるなと(本間ひまわりさんとか画像ベースの良さが遺憾なく発揮されている)。口を動かすときって喋るときだと思ってたけど、全然そんなことない。声に出ない口の表現いっぱいあった。あくびとか声ほとんど出ないけど、口あんぐり開けるもんだし、それでアバターも口あんぐりあけてくれるとすごい可愛い。突然のアクシデントに「ハッ.....!!」ってリアクションで口を開けて止まってるリアクションとかある、可愛い。他にもいっぱいある、素敵。その素敵な表現を捨てるのは勿体ない。

なので、画像ベースのリップシンクも取り入れる。とはいえ、画像ベースのリップシンクに頼り切れるほどの精度は今使っているもので出せない(高い認識精度を持つものは機材やライセンスでお値段がすごい)し、音声ベースにもメリットはあるので、組み合わせて使うようにする。

平たく言うと、
画像ベースでしか出せない素敵な表現もあるのでそれもできるようにするが、画像ベースだけでは精度維持が大変なので音声ベースと組み合わせる

実装のお話

Vtuberシステムとして、以下の記事のようなシステムを使っている(この時からだいぶ変わってるけど)。雑に説明するとOpenCVとDlibによる画像認識、ovrLipSyncによる音素解析が動いている。
qiita.com

とりあえず、インスペクターからリップシンク方式の切り替えを自由にできると楽なのと、後々分かりやすくするために以下のようなenumを作っておく。

public enum  LipSyncType{
    OVRLipSync,
    OpenCV,
    Mix
}

それでできたのが以下のようなコード。LipSyncTypeがOVRLipSyncの時は音ベース100%で適応し、OpenCVの時は画像ベース100%で適応し、Mixのときは音と画像を組み合わせて使う。
getMouthOpenYRatio()は口の縦幅の開き具合、getMouthOpenXRatio ()は口の横幅の開き具合を取得できる。

if(lipSyncType == LipSyncType.OpenCV){
    float mouthOpen = getMouthOpenYRatio (points);

    if (mouthOpen >= 0.7f) {
        mouthOpen = 1.0f;
    } else if (mouthOpen >= 0.25f) {
        mouthOpen = 0.5f;
    } else {
        mouthOpen = 0.0f;
    }
    CVMouthOpenParam = Mathf.Lerp (CVMouthOpenParam, mouthOpen, mouthLeapT);
    Skin.SetBlendShapeWeight((int)OVRLipSync.Viseme.aa,CVMouthSizeParam*100);
    Skin.SetBlendShapeWeight((int)OVRLipSync.Viseme.oh,CVMouthOpenParam*100);
    float mouthSize = getMouthOpenXRatio (points);
    if (mouthSize >= 0.8f) {
        mouthSize = 1.0f;
    } else if (mouthSize >= 0.6f) {
        mouthSize = 0.5f;
    } else {
        mouthSize = 0.0f;
    }
    CVMouthSizeParam = Mathf.Lerp (CVMouthSizeParam, mouthSize, mouthLeapT);
    Skin.SetBlendShapeWeight((int)OVRLipSync.Viseme.ih,CVMouthOpenParam*70);
}else if(lipSyncType == LipSyncType.OVRLipSync){
    ovrLipSyncContext.DoOVRlipsync();
}else if(lipSyncType == LipSyncType.Mix){
    float mouthOpen = getMouthOpenYRatio (points);
    CVMouthOpenParam = Mathf.Lerp (CVMouthOpenParam, mouthOpen, mouthLeapT);
    float mouthSize = getMouthOpenXRatio (points);
    CVMouthSizeParam = Mathf.Lerp (CVMouthSizeParam, mouthSize, mouthLeapT);
    ovrLipSyncContext.DoMixLipsync(CVMouthOpenParam,CVMouthSizeParam);
}

音声ベース(LipSyncTypeがOVRLipSyncのとき)が選択されたときに実行される関数が以下のようなもの。ovrLipSyncでやってる処理ほぼそのままである。frame.Visemes[]に各音素の大きさが入っている。

public void DoOVRlipsync(){
        if((lipsyncContext != null) && (skinnedMeshRenderer != null)){
            OVRLipSync.Frame frame = lipsyncContext.GetCurrentPhonemeFrame();
            // get the current viseme frame
            if (frame != null)
            {
                SetVisemeToMorphTarget(frame);

                SetLaughterToMorphTarget(frame);
            }else{
                Debug.Log("frame null");
            }

            // Update smoothing value
            if (smoothAmount != lipsyncContext.Smoothing)
            {
                lipsyncContext.Smoothing = smoothAmount;
            }
        }
    }

void SetVisemeToMorphTarget(OVRLipSync.Frame frame)
    {
        for (int i = (int)OVRLipSync.Viseme.aa; i < visemeToBlendTargets.Length; i++)
        {
            if (visemeToBlendTargets[i] != -1)
            {
                // Viseme blend weights are in range of 0->1.0, we need to make range 100
                skinnedMeshRenderer.SetBlendShapeWeight(
                    visemeToBlendTargets[i],
                    frame.Visemes[i] * 100.0f);
            }
        }
    }

void SetLaughterToMorphTarget(OVRLipSync.Frame frame)
    {
        if (laughterBlendTarget != -1)
        {
            // Laughter score will be raw classifier output in [0,1]
            float laughterScore = frame.laughterScore;

            // Threshold then re-map to [0,1]
            laughterScore = laughterScore < laughterThreshold ? 0.0f : laughterScore - laughterThreshold;
            laughterScore = Mathf.Min(laughterScore * laughterMultiplier, 1.0f);
            laughterScore *= 1.0f / laughterThreshold;

            skinnedMeshRenderer.SetBlendShapeWeight(
                laughterBlendTarget,
                laughterScore * 100.0f);
        }
    }

画像ベースと音声ベースを組み合わせる場合(LipSyncTypeがMixのとき)が選択されたときに実行される関数が以下のようなもの。画像ベースと音声ベースの値で大きく差がある場合は、大きな値を出している方を信頼する(大体大きく差が出ていて小さい値を出している方はロストしている場合のため)。これで、普通に喋ってる場合は画像ベースと音声ベースによる相互補完で精度向上が見込め、不運にもマイクに音がのらなかった場合でも画像ベースに切り替わって口が動き、カメラに見切れてしまっても音声ベースに切り替わって口が動く。もちろん声を出さないリアクションを取っても口を開いていれば画像ベースのリアクションに切り替わって口が動く。

public void DoMixLipsync(float CVMouthOpenParam,float CVMouthSizeParam){
        if((lipsyncContext != null) && (skinnedMeshRenderer != null))
        {
            OVRLipSync.Frame frame = lipsyncContext.GetCurrentPhonemeFrame();
            // get the current viseme frame
            if (frame != null)
            {
                MixSetVisemeToMorphTarget(frame,CVMouthOpenParam,CVMouthSizeParam);

                SetLaughterToMorphTarget(frame);
            }else{
                Debug.Log("frame null");
            }

            // Update smoothing value
            if (smoothAmount != lipsyncContext.Smoothing)
            {
                lipsyncContext.Smoothing = smoothAmount;
            }
        }
    }

void MixSetVisemeToMorphTarget(OVRLipSync.Frame frame,float cvMouthOpenParam,float cvMouthSizeParam){
        for (int i = (int)OVRLipSync.Viseme.aa; i < visemeToBlendTargets.Length; i++)
        {
            if (visemeToBlendTargets[i] == -1){
                continue;
            }
            //アとオとイの口形状は画像からも判断しやすいので、この3つの母音要素は音声ベースだけじゃなく画像ベースの情報も混ぜる。
            if(i == (int)OVRLipSync.Viseme.aa){
                SetMixMouthMorph(frame.Visemes[(int)OVRLipSync.Viseme.aa],cvMouthOpenParam,visemeToBlendTargets[(int)OVRLipSync.Viseme.aa]);
            }else if(i == (int)OVRLipSync.Viseme.oh){
                SetMixMouthMorph(frame.Visemes[(int)OVRLipSync.Viseme.oh],cvMouthOpenParam,visemeToBlendTargets[(int)OVRLipSync.Viseme.oh]);
            }else if(i == (int)OVRLipSync.Viseme.ih){
                SetMixMouthMorph(frame.Visemes[(int)OVRLipSync.Viseme.ih],cvMouthSizeParam,visemeToBlendTargets[(int)OVRLipSync.Viseme.ih]);
            }else{
                skinnedMeshRenderer.SetBlendShapeWeight(visemeToBlendTargets[i],frame.Visemes[i] * 100.0f);
            }
        }
    }

void SetMixMouthMorph(float ovrMouthParam,float cvMouthParam,int morphNumber){
            //画像解析と音素解析の差
            float defference = ovrMouthParam-cvMouthParam;
            if(Math.Abs(defference) >= 0.5){
                //音素解析の方が圧倒的に大きい:音素解析結果を8割適応
                if(defference >= 0){
                    skinnedMeshRenderer.SetBlendShapeWeight(morphNumber,(((ovrMouthParam*1.8f)+(cvMouthParam*0.2f))*100));
                //画像解析の方が圧倒的に大きい:画像解析結果を8割適応
                }else{
                    skinnedMeshRenderer.SetBlendShapeWeight(morphNumber,(((ovrMouthParam*0.2f)+(cvMouthParam*0.8f))*100));
                }
            //差があまりない場合、同じ割合で適応する
            }else{
                skinnedMeshRenderer.SetBlendShapeWeight(morphNumber,(((ovrMouthParam*0.8f)+(cvMouthParam*0.2f))*100));
            }
        }

おわりに

やっぱ腹話術にならないのってとっても大事だなと。音がロストした時の処理はぜひみんなもしてほしい。とはいえ、僕の実装は雑にやってみたものなので、しっかり設計して作り直さないとなぁ...。(元々画像ベースのフェイシャル変更プログラムをovrLipSyncのリップシンクに無理やり繋げた感じになっているので、リップシンク用のプログラムが散らばった上に依存性が出てきてしまった。)

独習Gitを読んだ

丁度、翔泳社セールが行われており、安かったので購入して読み終わったので、振り返りかねてレビューっぽいものを書いておきます。 本記事で紹介する書籍はこちら www.shoeisha.co.jp

なんで読んだか

一応、読む前からGitを使ったチーム開発などは何度も経験があり、Gitの概念・利用方法はそれとなく把握はしていた。とは言っても、今まで本などで理論的に学んだことはなく、困る度に「〇〇 直し方」のように検索をかけて何とか解決したり、誰かに助けてもらったりして、経験的に何となく理解していたようなものである。この「何となく」の現状から脱却して「理解」して使いたいという考えから読み始めた。

本の概要

Gitの入門から基礎的な内容が書かれている。全20章で構成されており、各章1時間程度で読めるように構成されている。各章、解説・実践・課題が盛り込まれており、ハンズオン的に進めることができる。

1章~3章でGitの概念や環境構築、コマンドラインについて述べられ、4章~16章にGitの具体的な解説、17章~20章でGithubなど外部サービスなども用いた実用的な内容が述べられる。

感想

全体的に分かりやすく、スラスラ読めたので3日くらいで読むことができた。わりと飛ばしながら読んでも、最後に課題があるおかげで、自分がきちんと理解してるか試すことができる。Gitというと「やって初めて分かる」ものだと個人的に思うので、この本のように実際にコマンドを打たせて実践的に進むのはとても良かった。特にgit log コマンドを何度も用いて実際に読者に変化を確認させながら進むところがとても良かった。僕は本を読むまで、logを見て原因を特定することや何が起こっているかということをうまく把握できなかったので、とても嬉しい。全体的にユーザに自分で解決できる力を身に着けさせようとしているのが好印象だった。いちいち全部説明せず、--helpコマンドを使って自分で調べよう!といったものも多く、「分からないときにどうしたらいいか」を教えてくれる。

Gitがどのように動いているか、各コマンドを打つとどうなるかといった理論的な部分が学べる。ただ、どのように実装されているか、裏で何が起こっているか(.gitディレクトリで起こっているようなこと)といったより深い部分は触れられない。逆に、とりあえずGitを使えれば良い!といった内容でもない(Githubだとかの内容はほぼないので実用特化ならもっと良い本がありそう)。gitは触ったことがあり、もう少し踏み込んで理解したい初中級者くらいに丁度良い本だと思う。

読み始めた理由である「理解」するができたというと100%とは言えない。でも、大きく前進できたことは間違いないだろう。とりあえずpullとstashするマンを卒業して、logからSHA-1などを確認し、diffなどを用いて理論的に修正する行動を取ることができそうだ。

バーチャルリアリティ技術者試験セオリーコースに合格しました。感想とか。

バーチャルリアリティ技術者試験セオリーコースに合格しました。合格したのでかっこいい認定書をもらえました。嬉しい。

f:id:colaiiiyahhou:20190129204753j:plain

点数は75点で平均的な点数で合格となりました。

f:id:colaiiiyahhou:20190129210424j:plain

バーチャルリアリティ技術者試験とは

日本バーチャルリアリティ学会が実施している試験です。合格することでVRを正確に習得したことを証し、「VR技術者」と認めて貰えます。

詳細については以下の記事にて詳しく紹介されているのでそちらを参考にしてください。 qiita.com

上記リンクで基本的なことは分かと思うので以下に個人的な感想的とかを書いていきます。

難易度

そんなに難しくなかったと思います。実際、合格率も高い(マイナーな試験なので、記念受験という人が少ないというのもありそう)。

難易度を下げている要因として

  • 高度な数学力・プログラミング力が要求されない
  • マーク式テストである
  • 過去問がある

といったことがあげられるかと思います。

高度な前提知識はあまり要求されない印象を受けました。試験範囲で高度な数式が示されることはなく、プログラムの読み書きが登場することもないです。磁力や赤外線などは登場しますが、高度な物理学の知識が要求される場面も少ないです。偏見的な言い方ですが、いわゆる「理系力」は必要なく、「文系的」な試験だと思います。

また、日本バーチャルリアリティ学会より過去問が配布されており、試験の傾向を図ることもできます(過去問ほぼそのままの問題も出る)。

試験勉強

勉強には以下のサイトや本が参考になりました。

公式推奨・配布のもの

非公式

個人的試験勉強

参考になるかは分かりませんが僕はこう勉強したよって紹介です。だいたい1週間くらいしました。元よりVR関連のお仕事をしたり開発したりしていたので、多少知識がある状態からスタートしています。

  1. バーチャルリアリティ学を読み込む
  2. バーチャルリアリティ学」第1〜4章 学習用ドキュメントで復習
  3. 過去問を解く
  4. 分からなかった部分を重点的にバーチャルリアリティ学で復習
  5. 2~4を満足するまで反復

講習会
講習会は行きませんでした。講習会は東京でしか行っておらず、地方住み学生である自分には出費が痛すぎたためです。講習会で講義してくださる教授はVR業界において素晴らしい方々ばかりなので、行けるなら試験関係なく行きたかったです。ただ、試験合格においては行かなくても十分可能だと思います。

バーチャルリアリティ
バーチャルリアリティ学を読み込むのは大体2日くらいかけました。2章、3章は人間の構造的な話で普段の活動から馴染みが薄く、理解に苦戦しました。分からない単語が特に説明なく出てくることも多く、逐次調べながら読み進めました。逆に、1章、4章はVRの定義や作り方の話でかなり理解しやすかったです。おそらく、VR関連の仕事や開発に携わったことがある方なら1章、4章はすぐ理解できると思います。

その他
「「バーチャルリアリティ学」第1〜4章 学習用ドキュメント」は要点が簡潔にまとまっており、復習に非常に有用でした。何度も読み直し、各要点が自分の中で説明できるか確認していました。「一人VR技術者認定試験 Advent Calendar 2018」はまだ僕が学習時に絶賛更新中で、学習には利用できませんでしたが、かなり理解を手助けしてくれる良記事だと思います。全体の内容を網羅しており、複雑な内容は別途調べた内容と合わせて解説されているため、分かりやすいです。バーチャルリアリティ学と一緒に読むと効果的だと思います。

価値

取ったばかりで、まだ活用しておらず、まだ分からないですが個人的な主観で書いておきます。

知識

VRに関する基礎的な知識が手に入ります。特にVR関連の方々と会話のプロトコルを合わせていけるなと感じました。自分はアカデミックなVRには疎く、ハードウェア知識が弱かったので少しでも知識の補完ができたので嬉しく感じます。また、最近のVRの定義が曖昧ななかで一つ信頼できる定義を学べたのも議論する上で非常に大事だと思います。どれもVRに興味があるならぜひ知っておきたい内容だったと思います。

キャリア形成

自分は人事でもないので何とも言えませんが、バーチャルリアリティ技術者試験に合格したからといって、VR転職/就職においてそんな大活躍できるものでもないかなと思います。業界で活躍する方々でも持っていない方は多くいますし、この資格を必須条件に問われる求人も見たことがないです。新しい分野ゆえベンチャー気質のところが多く、熱量や行動力が好まれる傾向にあり、オリジナルの開発が非常に評価されます。もちろん、この資格を持っていることは知識や行動に対する説得力になり、必ずプラスに作用すると思います。VR転職/就職において必ずプラスに作用しますが、成功への決定打にはならないくらいの温度感です。

証明

信頼のおける第三者組織によってVR技術者であることを評価してもらえます。自称VRエンジニアではなくなるのはすごくありがたいです。形のある信頼できる実績となります。VR業界の人は成果物などで判断できますが、業界外の人はそうとも限らないので、こういう対外的な組織にもアピールできる実績は今後の活動において活躍してくれると考えています。こういう肩書はぶら下げておいて損はないかなと。

イキれる

「こんにちは、僕は日本バーチャルリアリティ学会公認のバーチャルリアリティ技術者です。」という挨拶ができます。俺は卍キリト卍だ、よろしくな。

おわりに

VRを仕事にしていきたいと少しでも思っているならば、持っておいて損はないと思います。挑戦に特別な前提知識や資格は要求されません。ぜひ挑戦してみてはいかがでしょうか。