第2回 KLab Expert Camp「テーマ:シェーダー」のメンターをしました

ネームカード

9/8~9/12に開催されたKLab Expert Camp(KEC)の第2回にメンターとして参加しました。

今回のKLab Expert Campは「シェーダー」がテーマでした。

5日間(平日4日間+土曜日に成果発表&懇親会)の日程でひたすらシェーダーを書き続けるという、エクストリームかつ珍しい内容の技術系インターンです。

当日の様子はハッシュタグ #KLabExpertCamp から確認できます。

開催の経緯

メンターとして、私(@gam0022)とかねたさん(@kanetaaaaa)、運営スタッフとして人事のKの27乗さん(@oktillion27)の3名で今回のイベントを企画・運営しました。

私はデモパーティ(デモを鑑賞したり完成度を競ったりして楽しむイベント)が好きなので、デモパーティを意識して企画を考えました。

大画面で自分たちの作品を上映して、参加者でワイワイするのがすごく楽しいので、そのような雰囲気をデモパーティに参加したことのない学生にも感じて欲しいという思いがありました。

そして、優秀な若人にもデモシーンに参入してもらい、国内のデモシーンをもっと盛り上げたいと思っていました。

当初は3月にオフラインで開催する予定だったのですが、昨今の感染症に関する状況を鑑み、オンラインでの開催となりました。

オンライン開催だったので、大画面で上映はできませんでしたが、デモパーティの楽しさを少しでも参加者に感じ取ってもらえたのならば、とても嬉しいです。

昨今の感染症の影響もあって、残念ながら国内のデモパーティは開催の見通しが立たない状況になってしまったので、参加者にとって代替イベントのひとつになっていれば幸いです。

開催の経緯については、かねたさんの参加レポートを合わせて読むことで、内容を補完できると思います。

インターンの内容について

オンライン開催ということで、Google MeetとSlackを利用しました。

メンター2人で約1時間の講義を合計4つ行い、講義のない残りの時間はひたすら参加者の制作時間としました。

参加した学生は13名でした。全国からシェーダーに強い優秀な学生が集まりました。

少なくともメンターの1人は常時Google Meetに待機して、Slackでも随時質問を受け付ける体制にしました。

そして、最終日には成果発表&懇親会を行いました。

オンライン開催となってしまった分、少しでも参加者に楽しんでいただけるような工夫として、5日分のノベルティやお菓子を郵送しました(Kの27乗さんのアイデアで、郵送などの準備も全部してもらった)。

講義

運営内で協議した結果、講義の資料の公開については、参加者のみにしました。

この記事では、講義の内容について可能な範囲で概要を紹介します。

担当講義1「シェーダー芸のプロダクション利用」

KLabはモバイルゲームを開発・運用している会社です。

そこで、「シェーダーがモバイルゲームにどのように活用されているか?」について、実践的な内容を紹介しました。

モバイル端末の性能はかなり幅広く、性能が低いGPUの端末もたくさん存在します。

レイマーチングのようなフラグメントシェーダーを酷使する高負荷なシェーダーの利用は難しいため、一般的にはシェーダー芸を活用するイメージは沸かないかもしれません。

しかし、シェーダー芸をうまく活用すれば、むしろレンダリングの負荷を削減できます!

たとえば、頂点シェーダーでアニメーション計算やスキニング計算をCPU計算からGPU計算に置き換えば、アプリの負荷がCPUバウンドの場合は性能向上ができます。

また、商業用のタイトルでどんなシェーダーが利用されているのかについて、具体的な事例を紹介しました。

担当講義2「シェーダー芸で役立ちそうな知識の詰め合わせ」

3DCGのための行列(導出方法や重要な特徴)、ノイズ、イージング関数など、個人的に「これだけは知っておきたい」という知識をピックアップして紹介しました。おまけとして、便利なツールの紹介もしました。

行列は3DCGにおいては必須科目ですが、3DCGに特化した分かりやすい資料や説明が少ないと以前から感じていました。

そこで、行列について「3DCGに特化」した直感的で分かりやすい説明を目指して講義を行いました。

基底ベクトルから視覚的かつ直感的に、「回転行列、拡大縮小の行列、せん断」などの線形変換の行列を生成できることを示して、よくある変換行列の定義は覚える必要がないことを説明したり、 回転行列の転置が逆行列となる直交行列の性質を説明したりしました。また、線形変換やアフィン変換などの用語についても説明しました。

さらに、ノイズやイージング関数で映像作品の品質を向上するテクニックを具体例を踏まえながら紹介しました。

最後に、Shadertoyの再生時間をシークしたり、連番でPNG保存するChromeの拡張機能、連番画像からffmpegでmp4に変換する方法、YouTubeにアップロードするための最適なビットレート調整のパラメーターなど秘伝のタレ的な知識も公開しました。

感想

まず、参加者のレベルが非常に高いことに驚かされました。

インターンの選考をしている時点で、技術力の高い優秀な学生ばかり集まっていることは分かっていたので「どうしたら満足してもらえる講義になるか?」とメンターとしてはかなりプレッシャーを感じていました。 たとえば、レイマーチングの基礎などを説明をしたとしても、知っていることばかりで何も持ち帰ってもらえずに終わってしまう可能性が高いと考えました。 紆余曲折があって、最終的に上記のような講義内容になりました。 アンケート結果によると、いずれの講義も参加者の満足度がとても高かったので、講義の難易度や内容のバランス調整は概ね成功だったと思っています。 また、どの講義もとても真剣に聞いていただけて、質疑応答でも本質を突くような鋭い質問が多かったので、メンターとしてもやりやすくて大満足でした!

さらに、最終日の成果発表では、メンターたちの予想を遥かに上回るレベルの高い作品が次々に発表されて、驚きと興奮の連続でした!!

講義やオリエンテーションの時間を含めると、実質3日弱の期間だったので、かなり厳しいスケジュールだったと思うのですが、参加者のみなさんは本当にすごいと思いました。

また、インターン期間中はGoogle MeetやSlackでシェーダーに関する雑談や疑問について参加者と語り合うことができ、参加者からも刺激をたくさんもらって、メンターという立場を忘れそうになるくらいに楽しかったです!

今回はメンターという立場で参加しましたが、これからもシェーダーが好きな仲間として参加者の方々と交流していきたいと思いました!

参加者の方々、本当にお疲れさまでした!そして、ありがとうございました!

参加レポートのリンク

大変ありがたいことに参加レポートを書いてくださった参加者がいるので、こちらにリンクを貼ります。

発見したら、随時更新します。

※投稿時間順

成果発表の作品リンク

成果発表の作品のリンクを貼ります。とてもクオリティの高い作品ばかりです!

発見したら、随時更新します。

※投稿時間順

comments powered by Disqus

gam0022.net's Tag Cloud

gam0022.net

Qiita