Aizu-Progressive xr Lab blog

会津大学のVR部であるA-PxLの部員が持ち回りで投稿していくブログです。部員がそれぞれVRに関する出来事やVRにちなんだことについて学んだことを書いていきます。

「面白法人カヤックVR分室」としても活動しています。詳細はこちら

面白法人カヤックインターン体験談

こんにちは学部2年(新3年)の森口です

本日はタイトルにもある通りインターンシップで経験したことの話をしたいと思います。
今週1週間(3/25~3/29)鎌倉にある面白法人カヤックさんのインターンシップに参加させていただきました。 私はクライアントワーク事業部に所属し、課題としてヒューマノイドモデル絡みのことをしました。(以降ある程度はコンプライアンス的に伏せさせていただきます)

1週間のざっくりとした流れとインターンシップに参加してみての感想を述べていきたいと思います。

1日目

 1日目は主に課題のための下調べでした。どんな機能を盛り込めばいいか、どうすればそれを実現できるかなどについて調べました。その過程で人間の体の構造について調べたりしたこともあり、普段目にしないような分野にまで踏み入ったのである意味面白かったです。

2日目

 2日目から本格的に実装に入りました。 いくつかタスクがあったのですが、一応簡単にするためにこれ以降やった作業はタスクn(nはタスク番号)といった形で記事は書かせてもらいます。

タスク1はヒューマノイドモデルの目を人間ぽく回転させるというものだったのですが実際これが一番苦戦した内容でした。個人的Unityで内容がよくわかんないものランキングで上位に来るQuaternionにとても苦しめられました。回転をいじるときに出てくるものなんですがPositionなどとは違いベクトルではなく4元数と呼ばれるものなので扱いが若干違ったりオイラー角に直して扱うときの範囲が0~360だったりと何かと厄介者でした。

3日目

 しれっと3日目に入りました。なぜかというと全部で5日間あるインターンシップの日程の中でタスクの割り振りは以下のように結果的になりました。

1日目:下調べ

2日目:タスク1

3日目:タスク1

4日目:タスク1、タスク2、タスク3

5日目:タスク3、タスク4

はい。ご覧の通りほとんどを件のタスク1もといQuaternionにやられていました。なぜそこまで苦戦したのか、それはUnityではオイラー角が0~360度の間で取り扱われることが主な原因だと思っています。例えば-30度は330度と同じ角度ですが計算や判別処理を-30度でやるのと330度でやるのは全然違います。また、-30度というのは内部的に330度として処理されるので改めて値をとってくると前回と違う値になってたりします。また、人間の目は回転可能な角度が決まっているので閾値を設けて制限をかけるようにしたのですが、人間の目は球体ですので(当たり前)どちらか一方向に回転を続ければ反対側から戻ってきます。つまり正の方向にオーバーしたのか、負の方向にオーバーしたのかというのを判定させる必要もありました。そのような理由でこのあたりの実装に苦戦していました。

後この日は飛び入りでしたがブレストにも参加させていただきました。私は緊張などで全く発言できなかったんですが自分が今まで経験とは全く違うどんどんアイデアが膨らんでいくブレストで、社員の方々皆さんが「あれが実現できたらおもしろい」「やっぱりこれがやりたい」と互いの意見を尊重しつつもしっかりとまとまりのある素晴らしいブレストを見させていただきました。これが本来のブレストなんだと思いさすがはカヤックと感じました。

4日目

 よくわかりませんがこの日は異様に頭がさえてました。3日目ずっと考えても出なかった解決案が午前中の数時間で出ました。まずは0~360の範囲で扱われるオイラー角を-180~180の間に変換してあげます。そうすることで判定処理や計算過程で負の角度を用いることができるようになります。角度の変更は以下の式でできます

float angle; //使いたい角度
angle=(angle>180)?angle-360:angle; //0~360を-180~180に

//諸々の処理

angle=(angle<0)?angle+360:angle // -180~180を0~360に

後は諸々の処理のところに正の方向の閾値をオーバーしてたら~みたいな処理を書いてあげればOKです。
ここまでたどり着くまでにだいぶQuaternion関係の記事を漁ったのでだいぶ成長できたと思います。
タスク1が完了した後は次のタスクへ進むわけですが割とこの辺はサクサク進みました。

タスク2,3を簡単に説明すると、2はまた目関係ですがこれはカヤックさんにあったものを1で作ったものとかみ合うようにしたというものなので詳細は省かせていただきます。

3は呼吸に合わせて肩や胸が動く機能を実装しました。適度なスパンでボーンに回転を加えてあげるといい感じです。

5日目

 最終日です。ここでは3の調整とオプションみたいな立ち位置で時間があったらやってと言われていた4をこなしました。4は感情を表現するといったもので、人間の感情には流れがあるというものを目にしたのでそれの実装を行う予定でした。構想はできていたものの実装で詰まったところがあり時間が足りず納得のいくところまでは実装ができませんでした、

 この日まで本当にあっという間で体感的に1日前に出てきて次の日に戻ってきたくらいでした

感想&まとめ

 長くなってきたのでこの辺でまとめますね。

 自分自身がっつりコードが書けるほど技量があるわけではないので、もしかしたらできる人ならサクサクこなしてしまう課題だったのかもしれませんがそれでも学習することは非常に多くてためになった課題だと感じました。判定処理の方法や回転の取得方法についても様々な考え方やアドバイスをいただけたので処理手順の勉強にもなりました。

 また、オフィスでエンジニアの一人として働く雰囲気というのも体験できたと感じています。カヤックの社員さんは非常に和気あいあいと仕事をしていて面白く仕事をしているのがよく感じられました。

 繰り返しにはなりますがこの1週間は自分にとって大きく成長できる機会でとても内容の濃い1週間だったと思います。今回のインターンシップにてお世話になった面白法人カヤックの皆さん、本当にありがとうございました!お世話になりました!

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!