プログラミングで世界を変える

ゲームプログラミングと技術のこと

株式会社サイバーエージェントを退職しました

はじめに

2018年9月28日をもって、株式会社サイバーエージェントを退職しました。

退職に至った経緯と、今後について記したいと思います。

TL;DR

  • 評価に関してミスマッチを感じた
  • 新しい環境でもxRをやっていく

このエントリの目的

個人的な考えですが、退職エントリにはエンジニアの価値観が表れやすいと思っています。

退職エントリというとネガティブな面が注目されがちですが、その人にとって何が許容できなくて、何を大切にしているかを知ることができるという意味で、非常に有用です。

僕の場合は、有名なこちらのエントリを読んだ時に強い共感を感じ、影響を受けました。 hiroki-uemura.hateblo.jp

拙筆ですが、このエントリも誰かの役に立てると幸いです

サイバーエージェントについて

株式会社サイバーエージェントには2017年4月に新卒として入社しました。

就活中はサイバーエージェントがゲームを作っていることすら知らなかったのですが、インターンや選考を通して社員の熱量の高さや風通しの良さを知りました。若手でも活躍出来る文化があり、頑張り次第で評価もされると思って入社を決めました。

入社後にしたこと

初めは約2ヶ月間の技術研修がありました。 3,4人のチームになって、前半1ヶ月はSlackのクローン、後半はInstagramのクローンを作るという内容でした。結構良い研修で、50人くらいいる同期エンジニアは皆すでに技術力があるので、それぞれの得意分野を活かしつつチームで協調して開発を行うことが主軸として置かれていました。

僕のチームはゲームエンジニアが2人いたので、Unityを使った派手で愉快な感じのSlackを作りました。ツールとしての要点を満たしつつ、自分たちの持ち味を最大限活かした素晴らしいプロダクトだと自負していたのですが、最終発表では怒られて社会の難しさを感じました。

それからはVR Agentという子会社に配属され、AbemaTVのVR版クライアントの開発を立ち上げから担当しました。少人数のチームながらも開発リーダーを任せてもらい、なんとかリリース出来ました。

エンジニアリングはまだしも、タスクやスケジュールのマネジメントみたいな部分は未経験だったので相当に苦戦しました。開発をしつつ、開発を進めるための色々な調整をするスキルが身についたので、とても良い経験になったと思います。

並行して、部署や子会社を跨いだ横断的な活動もしていました。サイバーエージェントは社内での技術交流が盛んなイメージがあり、そういった点にも魅力を感じていたので積極的に参加しましたし、時には開催することもありました。LTや、定期勉強会の講師、Qiita:Team1への投稿など、アウトプットもたくさんしました。社内の技術コミュニティの活性化にはかなり貢献できたんじゃないかと思っています。

退職前の半年間は、また新規開発をしていました。途中で抜ける形になってしまったのですが、かなり面白いサービスなのでリリースが楽しみです。

入社してよかったこと

やりたいことをやらせてもらえる

本人がモチベーションを感じる領域で仕事をするのことが成果になりやすく、それが本人的にも会社的にもwin-winという考えが浸透しています。大きな会社だと入社後に希望通りの配属がされない懸念があると思うのですが、少なくとも会社の都合だけで配属先が決まることはありません。2

僕の場合、実は入社を決めたタイミングではソーシャルゲームの開発をするつもりでいました。しかしその約半年後にVRの事業部が立ち上がったことで、VRをやりたい気持ちが生まれました。そこで配属ではVRに希望を出したところ、有難いことにVRの開発が出来ることになりました。

他にも社内でカジュアルに異動できるシステムがあったり、不満を定期的に汲み取るGeppo3という仕組みなど、社員のモチベーションを尊重する文化はかなり根付いていると思います。

風通しがいい

xRやゲームだけじゃなく、メディアサービスからアドテクまで幅広い領域の人がいるので、社内だけで色々な技術の話ができます。Androidの質問をSlackで質問したら5秒で解決したり、描画の話をコンシューマー出身のエンジニアに教えてもらえたりしました。 自分から動けば社内に無限の知見があるのは、メガベンチャーらしい強みだと思いました。

成長できる

社内での勉強会やスキルアップのための機会がたくさんあります。3DのプロがMayaという3Dモデリングツールの使い方を教えてくれたり、レッドコーダー4がアルゴリズム教えてくれたり、Microsoft MVPの方がC#最適化を教えてくれたりします。外部から講師を呼んで勉強会を行うこともできます。少しの積極性があればかなり成長の可能性がある環境だったと思います。

退職に至った経緯

評価のミスマッチ

勢いのある若手が活躍する会社というイメージがあったのですが、思うような評価を得られなかったことが要因です。

決定的だったのが3月にあった査定でした。評価と給与はある程度比例するはずなので、このタイミングでの査定は入社してから1年間の評価が分かる機会という認識でした。 自己評価としては、1つのプロダクトを立ち上げからリリースまでやりきりましたし、社内の技術コンテストでは3位に入賞するなどスキルも十分に示せていると思っていました。また、積極的に社内活性化のために様々な取り組みもしてきました。

しかし、査定結果は2018年度新卒入社エンジニアの最低年俸と同額5でした。

某エントリの一文が頭を過ぎりました。

これまで3年間、自分なりに会社をより良くしよう、自分の実力を向上させようと努力してきたのは、何の評価もない今年新卒で入ってきた彼らと全く同じ評価なのだ。

ドワンゴは大量退職に関する印象操作をやめろ - hiroki-uemuraのブログ

まさにこの状況でした。

入社から約1年は会社のためになることを考えて積極的に行動してきたつもりでしたが、全く評価されなかったように感じました。額面はそう低いわけではないですが、相対的には後輩エンジニアの下限と同じです。 もちろん自分に至らなかったことはあるとはいえ、この結果に納得はできませんでした。

評価者の方にその旨は伝えてみたのですが、結果が変わることはありませんでした。理由は色々あると思いますが、何にせよ僕と会社の評価に関するミスマッチは埋まらないことを確信しました。

無理に留まる必要もないと思った

そんな査定があってモヤモヤしているタイミングで、ある転職エントリが公開されました。

negipoyoc.com

すごく大雑把に言うと、前職は良い環境だったけど、より本人に合った会社に転職したという内容でした。Negipoyocさんが社会人3年目で2回転職していることもあって、転職という選択肢もありなのか〜と思うようになりました。

その1ヶ月後くらいに同期のエンジニアがサイバーエージェントから退職する旨を聞きました。学生時代から切磋琢磨してきた関わりの深い同期だったので、これもかなり衝撃でした。

そうして転職という選択肢が身近に感じられるようになったことがきっかけで他の会社も見てみたいと思うようになり、自分も転職することを決意しました。

あとから思ったこと

サイバーエージェントはエンジニアを大切にしようとする会社だといいますが、待遇というよりも「やりたいことを大切にしてくれる」という言い方が適しているように思いました。入社前に内定者としてアルバイトをしていた時も、時給は950円くらい1000円6でしたがやりたいと言ったことはやらせてもらえていました。

あと、社員はみんなモチベーションが高く、技術力が高い人もたくさんいます。熱意を持って仕事に取り組むのにはかなり良い環境だと思います。実際一緒に仕事させていただいた人は魅力的な方ばかりでした。

結果として退職することにはなりましたが、入社できたことはすごく良かったと思っています。VR開発の機会をもらえたことでxR領域に進む決断ができましたし、仕事を通してたくさんの出会いや学びも得られました。また、転職を考える過程で、自分が大切にしていることやモチベーションを感じることを改めて考える良い機会になりました。会社にも社員の方にもたくさんお世話になったので、何かの形で還元していけたらいいなと思っています。

次の会社について

転職を考え始めてから、いくつかの気になる会社にお話を聞きにいきました。 その中でご縁があった株式会社メルカリにお世話になることになりました。

メルカリではR4Dという組織の中でxRに関する取り組みをしていきます。 r4d.mercari.com

直近だとVTuber関連の技術やサービスに興味があったのですが、R4Dの@ikkouさんとお話する中で、xRでもっと先を見据えた社会デザインをしていきたいという想いが強くなりました。まだ新しい組織だったので、正直不安も大きかったです。しかし、折角新しい領域でやるのであれば、誰かの作った船に乗るより自分で船を作るくらいの気持ちで挑んだ方が絶対に面白いと思い、この決断をしました。

あとはコミュニティに貢献していく意識が強い所にも共感しました。ビジネスも大切ですが、僕の場合はそこに対してのモチベーションが低いので、それよりもxRでどんな世界にしていきたいかを考えることに集中して取り組んでいきたいと思います。

かなり自由に色々やらせてもらえそうな環境に魅力を感じつつも、ジョインするからにはしっかりと価値を生み出していきたいと思います。

最後に

メルカリのR4Dに興味ある人とか、就活相談とかあればお気軽にご連絡ください。 僕も相当悩んだので、力になれることがあると思います。

連絡先(DMにて): @kohki_nakaji

あと例のリストも貼っておくので、応援していただける方はぜひお願いします。 Amazon.co.jp


  1. 社内限定版のQiita

  2. 主観的な認識なので、そうでないと感じている人はいるかもしれないです。

  3. 真面目に不満を書いていたけど退職まで音沙汰なかったので、少し懐疑的です

  4. Topcoderという競技プログラミングサービスで上位の人をさす言葉

  5. サイバーエージェントは2018年度新卒からエンジニアの最低年俸が引き上げられています(参考)。そのタイミングで既存社員の給与見直しがあり、上記の査定結果はそれを踏まえた結果になります。つまり、昇給はしているが結果的には新卒と同額の評価に落ち着いたということです。

  6. 2018/09/28 23:25修正しました

【イベントレポート】CEDEC2018に3日間 参加してきました。

f:id:splas_boomerang:20180901155744j:plain

あまり盛れてないトップ画

はじめに

CEDEC2018に行ってきました。 今年は20回目となる節目の年で、任天堂の宮本さんによる基調講演などがありました。 テーマは『空想は現実になる』ということで、VRやVTuber、AI系のセッションが注目されていた気がします。

この記事では、聴講した各セッションの感想をまとめたいと思います。 VRやインディーゲーム、描画系に興味がある人には役に立つと思うので、ぜひ参考にしてみてください。

基本的に感想は全部ツイートしたので、ツイートの埋め込みメインです。

続きを読む

Googleカレンダーの過去の予定を全て非公開にする

TL;DR

  1. Export hoge.ics
  2. sed -e 's/TRANSPARENT/OPAQUE/' hoge.ics
  3. sed -e 's/^CLASS:.*?$\n//' hoge.ics
  4. sed -e 's/(^UID:.*?$)/$1\nCLASS:PUBLIC/' hoge.ics
  5. Import hoge.ics

はじめに

f:id:splas_boomerang:20180817223521p:plain

誰かと予定を調整する時にいちいち空いてる日時のホワイトリストを作らなくても済むように、共有Googleカレンダーを作りたいと思いました。

そこで、折角なのでこの機会に自分の予定をすべてオープンにすることにしました。 Googleカレンダーには全体の共有範囲を、「非公開」「時間のみ公開」「全て公開」というように設定することが出来るので、「全て公開」に変更しようと思いました。

support.google.com

ここで一つ問題がありました。 今後登録する予定については公開前提ということを踏まえた上で登録できるし、もし差支えがある場合は個別に非公開に設定すれば良いです。しかし今までの予定は公開することを踏まえずに登録してきたものばかりです。そう大したことが書いてある訳ではないですが、公開することには抵抗があり、とはいえ削除してしまうのも可逆性の観点から微妙です。

そこで掲題のようにGoogleカレンダーの過去の予定を全て非公開設定に書き換えることにしました。

解説

手順としてはTL;DRの通りですが、もう少しかみ砕いて説明していきます。 参考にする場合は自己責任でお願いします。(バックアップがあれば何とかなるはず)

まずGoogleカレンダーを開きます。 Google Calendar

設定から登録されているカレンダーをすべてエクスポートします。 落ちてくるzipファイルに登録されているすべてのカレンダーが.ica形式で含まれていると思います。

次に、中身を置換していきます。 xmlとかじゃないので読みづらいのですが、英語なので全然読めます。

f:id:splas_boomerang:20180817222856p:plain

(こんな感じ。芳ばしい感じのキャプションがついてる…。)

.icaの構造についてはこのページが参考になりました。 hacknote.jp

先頭にヘッダー情報があり、以降は数行単位で個別の予定が含まれています。 BEGIN:VEVENTEND:VEVENTで挟まれたブロックが一つの予定であることが分かりました。

ここで状態の整理をします。

Googleカレンダーでは2つのパラメータがあります。

TRANSP CLASS 外からの見え方
予定あり(OPAQUE) 公開(PUBLIC) 全て表示
予定あり(OPAQUE) 非公開(PRIVATE) 時間のみ表示
予定なし(TRANSPARENT) 公開(PUBLIC) 全て表示
予定なし(TRANSPARENT) 非公開(PRIVATE) 非表示

CLASSは設定されていないこともあり、その場合は全体の公開設定に準拠します。

今回の要件でいうと、過去の予定は全て「予定あり」かつ「非公開」にしたいと思います。

正規表現を使って一気に書き換えていきます。

全ての「予定なし」を「予定あり」に書き換えます。

sed -e 's/TRANSPARENT/OPAQUE/' hoge.ics

全ての「公開」もしくは「未設定」を「非公開」に書き換えます。 状態の判別をすると面倒なので、まずは全てのCLASSを削除し、その後それっぽい位置に「非公開」を設定していきました。順番が関係あるのか分からなかったのですが、特に問題にはならなかったです。

sed -e 's/^CLASS:.*?$\n//' hoge.ics
sed -e 's/(^UID:.*?$)/$1\nCLASS:PUBLIC/' hoge.ics

ちなみにTL;DRではsedコマンドを書きましたが、実際はSublime Text 3でプレビューしながら慎重にやっています。書き換えた後にdiffツール(https://www.diffchecker.com/)で余計な変更していないか確認までやりました。

最後に、書き換えた.icaをインポートしていきます。 予定毎にUIDが振られているので重複は上書きしてくれるはずなのですが、なぜかメインカレンダーの場合のみ以下のエラーが表示されました。

指定されたカレンダーにアクセスできないため、予定をアップロードできませんでした。

仕方ないので一度メインカレンダーを削除します。メインカレンダーなので実際には初期化のような挙動です。綺麗な状態になったので、再度インポートすると今度は全件インポートに成功しました。

ナカジのスケジュール

ということで僕のスケジュールです。ぜひ活用してください(?)

Hugo + GitHub Pagesでポートフォリオを作る

出来たもの

Nakaji Kohki https://nkjzm.github.io/

[f:id:splas_boomerang:20180610230627g:plain

urlの先の内容が変わって趣旨が伝わらなくならないようにするためのgif

github.com

はじめに

知り合いがGitHubにResume(職務経歴書)をまとめていて良さそうに見えた。

土曜日を1日使ってポートフォリオを公開してみた。

公開まで

技術選定

  • サーバー: GitHub Pages
  • 静的サイト生成ツール: Hugo (+ Academic)

なるべく手軽に公開できて、かつマークダウンに対応している技術という軸で選びました。

GitHub Pagesで正式サポートされているJekyllも検討しましたが、使いませんでした(後述)。

GitHub Pages

  • 自分でサーバーをホスティングしなくて良い
  • GitHubに対する操作だけで完結できる
  • 独自ドメインにも対応

サーバーの知識がないので、自分でホスティングしなくて良いのはかなりよいです。 また、ホスティングサービスは手軽さ故に放置しちゃう傾向にあると思うのですが、普段から使うGitHubならその心配も少なさそうだと思いました。あと、標準のurlはユーザーidでドメインを発行してくるところも気に入りました。(https://[user_id].github.io/)

Jekyll (不採用)

  • GitHubが開発してる静的サイト生成ツール
  • GitHub Pagesで正式サポート
  • Markdownにも対応

一見良さそうで、ブラウザ上でGithubを操作するだけでもページが作成できてしまうほどしっかりとしたサポートがありました。

Adding a Jekyll theme to your GitHub Pages site - User Documentation

しかし、少しカスタマイズをしようとすると設定が煩雑になり、また反映まで毎回待たされるのがストレスでした。かなり広く使われているツールなので、使いこなせれば便利だと思うのですが、僕の場合後述するhugoの方が使いやすかったです。

Hugo

  • 静的サイト生成ツール
  • Markdownにも対応
  • 静的ファイルの生成速度が早い

そこまで大きな差はないのですが、導入の容易さと生成速度の速さが良かったです。 ただ、Jekyllと違い正式なサポートがないため、一部だけ手間がかかる部分がありました。

Github Pagesの仕様の話

2016年くらいに導入されてからいくつか仕様の変更があったので簡単にまとめようと思います。

gh-pagesブランチの情報がいくつか出てきますが、現状だと使う必要がないので参考にしない方ことをおすすめします。

ページの分類

GitHub Pagesには『ユーザーページ』と『プロジェクトページ』の2種類の仕様が存在します。

      ユーザーページ プロジェクトページ
用途 ポートフォリオやResume プロジェクトのWebページ
リポジトリ名 [user_id].github.io [user_id].github.io/[repository_name]
付与されるurl https://[user_id].github.io/ https://nkjzm.github.io/[repository_name]/
公開対象 masterブランチ直下 masterブランチ直下のフォルダ、もしくは指定ブランチ直下のdocsフォルダ

プロジェクトページは、プロジェクトのソースコード管理と同じリポジトリで管理できるよう、docsフォルダ以下にファイルを置けば良い点が大きく異なると思います。

ユーザーページは直下のファイルしか公開できない制約があるので、今回のような生成元ファイルがある場合の管理が難しかったです(後述します)

利用方法

上記の公開対象にファイルを置いたら、リポジトリのSettingタブから、GitHub Pagesの項目を見つけます。 Sourceで公開対象にするブランチを設定し、Saveします (ユーザーページは自動的にmasterが設定されている模様)

一点注意があって、公開対象に更新があった場合、反映までに少し時間がかかります。

push直後は以下のようなメッセージが表示されます。

Your site is ready to be published at https://nkjzm.github.io/

反映されたら、

Your site is published at https://nkjzm.github.io/

というメッセージに変わります。ミニマム30秒くらい。

失敗すると失敗のメッセージが表示され、メールで通知がきます。その場合公開済みのページが壊れることはなく、失敗前のバージョンが表示され続けます。

参考: qiita.com

Hugoの導入

以下のページを見て導入しました。

qiita.com

簡単にまとめると、

(Macでbrewインストール済みの場合)

brew install hugo
hugo new site hugo-test
cd hugo-test

# サーバー起動
hugo server 

# 静的ファイル生成
hugo

上記の状態だと何も表示されませんが、themeを設定してカスタマイズすることで独自のページを作っていけます。

ローカルサーバーでのプレビュー

http://localhost:1313

からプレビューができます。

これがかなり優秀で、起動しておけばファイルの変更のたびに自動的に更新をしてくれます。

サーバーを落とすときは Controll + C をしないとプロセスが残ることがあるので気をつけましょう。

Github Pagesに向けた設定

hugoコマンドで、public以下に静的ファイルが生成され、これを公開対象に設定することでGitHub Pagesとして表示がされます。 しかし、GitHub Pagesの場合公開対象に選べるのはdocsフォルダなので、その設定をしてあげましょう。

config.tomlpublishDir = "docs"を追記してください。

参考: Host on GitHub | Hugo

雑なカスタマイズのイメージ

使用するテーマによって異なる部分もあるので、詳細は各テーマのREADMEやドキュメントを参照してください。

テーマ毎のサンプルページをコピーしてから必要な部分を書き換えていく方法が分かりやすいように思いました。

  • サイト全体に関するメタ情報などは config.tomlに記述していきます。
  • 画像はstatic/img以下に格納していきます。
  • 各要素やページの内容はcontent以下に記述します。
    • content/homeにトップページの各要素の内容を記述します。
    • content/postなどに記事の内容などを記述します。

Academicテーマ

広く利用されているオープンソースのテーマです。

  • MITライセンス
  • レスポンシブデザイン

themes.gohugo.io

書き方に困ったら僕のリポジトリを参考にしてください。 github.com

Hugoの生成元ファイルと公開対象ファイルを同じリポジトリで管理する

GitHug Pagesのユーザーページはmasterブランチ直下のファイルしか公開できない制約があるため、そのままでは実現できません。

そこで以下の記事が参考になりました。

qiita.com

更新したい場合は、以下の操作を行えばokです。

git push origin source
git subtree push --prefix docs/ origin master

余談ですが、2行目の操作をgitのhooks機能を使い、pre-pushで自動化しようと考えました。

参考: gitのpre-push hookでmasterブランチにpushする際にプロンプトで確認するようにする

参考: git/hooks--pre-push.sample at master · git/git · GitHub

しかし、while read local_ref local_sha1 remote_ref remote_sha1が動作せず、断念しました。

whileより前の行でecho "hello"を記述するとpush時にhelloが出力されるが、while内の処理が呼ばれない

どなたか原因思い当たる方がいましたらぜひご教授くださいmm

最後に (ポエム)

Github PagesとHugoを使い、手軽に自分のポートレートサイトを作成することができました。

最近思ったのですが、こういった自分の情報を俯瞰して参照できるページはかなり意義があるのではないでしょうか。

僕は普段から技術研鑽やアウトプットをしていると自負していて、Twitterなどで出来るだけ周りに発信するように心がけています。しかし、そういった発信を後から参照することは難しいです。実際ある程度交流がある人でも、その人が過去に何をしていたかよく知らないことは多いと思います。そこで、自分の実績やスキル、指向性などがまとまった場所の必要性を改めて感じたのです。

僕はクリエイター気質なので、直接の対話でなくアウトプットを通じて自分を理解した欲しいという想いがあるのですが、そのためにも自分のアウトプットしてきたことを人に伝える努力は怠ってはいけないと思うので、これからも随時更新していきたいと思います。

謝辞

デバッグに協力してくれた@pagu0602に感謝🙏

ARKitのFace Trackingを使った『私、転がります。』を作った

この記事はOculus Rift Advent Calendar 2017の11日目の記事です。

qiita.com

元ネタ

www.youtube.com

ポノスさんの『私、転がります。』という生首を転がして遊ぶゲームからインスピレーションを得ました。

作ったもの

www.youtube.com

※ ぜひ音量を出してご覧ください!

解説

ARKitのFace TrackingはiPhone Xで追加された前面のTrueDepthカメラ(depthセンサー)を使った機能で、顔の各部位を認識や追跡を行うことができます。

今回はその機能を利用し、自分の口の動きを認識して画面上の生首を操作するゲームを作りました。

開発環境

MacBook Pro (Retina, 13-inch, Early 2015) macOS High Sierra Unity 2017.2.0p2 XCode 9.2

作り方

まず、AssetStoreからUnity ARKit Pluginをインポートしておきます。 https://www.assetstore.unity3d.com/jp/#!/content/92515 (ProjectSettingが上書きされるので、はじめにインポートした方が良さそう)

f:id:splas_boomerang:20171212000512p:plain

Assets/UnityARKitPlugin/Resources/UnityARKitPlugin/ARKitSettings.assetsでチェックを入れないと実機で動かないので注意してください。

インゲームを作る部分は省略します。 マウス押下で生首が飛ぶようなシステムを作りました。 小さな力で右回転をかけてあげるところがポイントです。

f:id:splas_boomerang:20171211234532p:plain

口の状態を取得するためには、Blendshapeを利用します。

UnityARSessionNativeInterface.ARFaceAnchorUpdatedEvent にイベントを登録することで、Dictionaryから約50個ほどの状態を取得することができます。

ARFaceAnchor.BlendShapeLocation - ARFaceAnchor | Apple Developer Documentation

今回はjawOpenというキーを利用して口の動きを取得しています。 これは顎の状態を取得するイベントですが、今回の用途には合致していました。

jawOpen - ARFaceAnchor.BlendShapeLocation | Apple Developer Documentation

ちなみに当初はmouthClosemouthFunnelを利用しようと考えていましたが、うまく値を拾えませんでした。

mouthFunnel - ARFaceAnchor.BlendShapeLocation | Apple Developer Documentation mouthClose - ARFaceAnchor.BlendShapeLocation | Apple Developer Documentation

最後に

今回作成したプロジェクトは以下のリポジトリにpushしてあります。 github.com

ちなみに

ARKitRemoteという実機を繋ぐとUnityのEditor上でテストをできる仕組みが用意されていますが、遅延が酷すぎてビルドしちゃった方が効率がいいように思いました。(今回の規模なら1分くらいで実機ビルドできるので)

最後に

できればリアルタイムに今の自分の顔を転がすところまで作りたかったです。 ちなみに実際に声を出す必要もありませんが、出した方が楽しかったです。

以前DK2で頭を振り回すゲームを作ったのですが、今回のようにセンサーが増えると色々なインプットができるようになって幅が一気に広がるように思いました。

www.youtube.com

参考

ARKit+Unity ARKit PluginでFace Tracking - Qiita https://qiita.com/mybdesign/items/65a11d289c8fb5c4ae57

UnityARKitPlugin FaceTracking FaceBlendshapeで取得できるパラメーター - Qiita https://qiita.com/A_kkie/items/94c6cb0c290f04d55755