9/8~9/12に開催されたKLab Expert Camp(KEC)の第2回にメンターとして参加しました。
今回のKLab Expert Campは「シェーダー」がテーマでした。
5日間(平日4日間+土曜日に成果発表&懇親会)の日程でひたすらシェーダーを書き続けるという、エクストリームかつ珍しい内容の技術系インターンです。
当日の様子はハッシュタグ #KLabExpertCamp から確認できます。
開催の経緯
メンターとして、私(@gam0022)とかねたさん(@kanetaaaaa)、運営スタッフとして人事のKの27乗さん(@oktillion27)の3名で今回のイベントを企画・運営しました。
私はデモパーティ(デモを鑑賞したり完成度を競ったりして楽しむイベント)が好きなので、デモパーティを意識して企画を考えました。
大画面で自分たちの作品を上映して、参加者でワイワイするのがすごく楽しいので、そのような雰囲気をデモパーティに参加したことのない学生にも感じて欲しいという思いがありました。
そして、優秀な若人にもデモシーンに参入してもらい、国内のデモシーンをもっと盛り上げたいと思っていました。
当初は3月にオフラインで開催する予定だったのですが、昨今の感染症に関する状況を鑑み、オンラインでの開催となりました。
オンライン開催だったので、大画面で上映はできませんでしたが、デモパーティの楽しさを少しでも参加者に感じ取ってもらえたのならば、とても嬉しいです。
昨今の感染症の影響もあって、残念ながら国内のデモパーティは開催の見通しが立たない状況になってしまったので、参加者にとって代替イベントのひとつになっていれば幸いです。
開催の経緯については、かねたさんの参加レポートを合わせて読むことで、内容を補完できると思います。
#KLabExpertCamp でメンターをした感想などを書きました。
— かねた (@kanetaaaaa) September 16, 2020
参加者の皆様ありがとうございました。そしてお疲れ様でした。https://t.co/0pOSbv5xJN
インターンの内容について
オンライン開催ということで、Google MeetとSlackを利用しました。
メンター2人で約1時間の講義を合計4つ行い、講義のない残りの時間はひたすら参加者の制作時間としました。
参加した学生は13名でした。全国からシェーダーに強い優秀な学生が集まりました。
少なくともメンターの1人は常時Google Meetに待機して、Slackでも随時質問を受け付ける体制にしました。
そして、最終日には成果発表&懇親会を行いました。
オンライン開催となってしまった分、少しでも参加者に楽しんでいただけるような工夫として、5日分のノベルティやお菓子を郵送しました(Kの27乗さんのアイデアで、郵送などの準備も全部してもらった)。
4日目の箱の中には、こんなものをご用意しました!
— Kの27乗 (@oktillion27) September 11, 2020
(お菓子とノベルティグッズ(モバイルバッテリー)のセットです。開発に集中しすぎて、もしスマホの充電を忘れてしまったときにぜひ使ってくださいね!)#KLabExpertCamp pic.twitter.com/7ssZogITE4
講義
運営内で協議した結果、講義の資料の公開については、参加者のみにしました。
この記事では、講義の内容について可能な範囲で概要を紹介します。
担当講義1「シェーダー芸のプロダクション利用」
2日目の本日は、この後2つ目の講義を実施予定です。
— Kの27乗 (@oktillion27) September 9, 2020
外部非公開の内容の為、このツイートで詳細をご紹介できません…!参加者のみなさんに、本日の講義もワクワクしてもらえるような内容だと嬉しい限りです!#KLabExpertCamp
KLabはモバイルゲームを開発・運用している会社です。
そこで、「シェーダーがモバイルゲームにどのように活用されているか?」について、実践的な内容を紹介しました。
モバイル端末の性能はかなり幅広く、性能が低いGPUの端末もたくさん存在します。
レイマーチングのようなフラグメントシェーダーを酷使する高負荷なシェーダーの利用は難しいため、一般的にはシェーダー芸を活用するイメージは沸かないかもしれません。
しかし、シェーダー芸をうまく活用すれば、むしろレンダリングの負荷を削減できます!
たとえば、頂点シェーダーでアニメーション計算やスキニング計算をCPU計算からGPU計算に置き換えば、アプリの負荷がCPUバウンドの場合は性能向上ができます。
また、商業用のタイトルでどんなシェーダーが利用されているのかについて、具体的な事例を紹介しました。
担当講義2「シェーダー芸で役立ちそうな知識の詰め合わせ」
3DCGのための行列(導出方法や重要な特徴)、ノイズ、イージング関数など、個人的に「これだけは知っておきたい」という知識をピックアップして紹介しました。
— がむ CGWORLD 10月号に寄稿 (@gam0022) September 10, 2020
おまけとして、便利なツールの紹介もしました。#KLabExpertCamp https://t.co/VOoRInqMtO
3DCGのための行列(導出方法や重要な特徴)、ノイズ、イージング関数など、個人的に「これだけは知っておきたい」という知識をピックアップして紹介しました。おまけとして、便利なツールの紹介もしました。
行列は3DCGにおいては必須科目ですが、3DCGに特化した分かりやすい資料や説明が少ないと以前から感じていました。
そこで、行列について「3DCGに特化」した直感的で分かりやすい説明を目指して講義を行いました。
基底ベクトルから視覚的かつ直感的に、「回転行列、拡大縮小の行列、せん断」などの線形変換の行列を生成できることを示して、よくある変換行列の定義は覚える必要がないことを説明したり、 回転行列の転置が逆行列となる直交行列の性質を説明したりしました。また、線形変換やアフィン変換などの用語についても説明しました。
さらに、ノイズやイージング関数で映像作品の品質を向上するテクニックを具体例を踏まえながら紹介しました。
最後に、Shadertoyの再生時間をシークしたり、連番でPNG保存するChromeの拡張機能、連番画像からffmpegでmp4に変換する方法、YouTubeにアップロードするための最適なビットレート調整のパラメーターなど秘伝のタレ的な知識も公開しました。
感想
参加者の方々、5日間お疲れさまでした!
— がむ CGWORLD 10月号に寄稿 (@gam0022) September 12, 2020
レベルの高い作品だらけで驚かされました😍
この調子でデモパーティにもエントリーして欲しいです!
メンターという立場で参加しましたが、参加者のみなさんに刺激をたくさん貰いました!
とても楽しかったです!ありがとうございました!#KLabExpertCamp
まず、参加者のレベルが非常に高いことに驚かされました。
インターンの選考をしている時点で、技術力の高い優秀な学生ばかり集まっていることは分かっていたので「どうしたら満足してもらえる講義になるか?」とメンターとしてはかなりプレッシャーを感じていました。 たとえば、レイマーチングの基礎などを説明をしたとしても、知っていることばかりで何も持ち帰ってもらえずに終わってしまう可能性が高いと考えました。 紆余曲折があって、最終的に上記のような講義内容になりました。 アンケート結果によると、いずれの講義も参加者の満足度がとても高かったので、講義の難易度や内容のバランス調整は概ね成功だったと思っています。 また、どの講義もとても真剣に聞いていただけて、質疑応答でも本質を突くような鋭い質問が多かったので、メンターとしてもやりやすくて大満足でした!
さらに、最終日の成果発表では、メンターたちの予想を遥かに上回るレベルの高い作品が次々に発表されて、驚きと興奮の連続でした!!
講義やオリエンテーションの時間を含めると、実質3日弱の期間だったので、かなり厳しいスケジュールだったと思うのですが、参加者のみなさんは本当にすごいと思いました。
また、インターン期間中はGoogle MeetやSlackでシェーダーに関する雑談や疑問について参加者と語り合うことができ、参加者からも刺激をたくさんもらって、メンターという立場を忘れそうになるくらいに楽しかったです!
今回はメンターという立場で参加しましたが、これからもシェーダーが好きな仲間として参加者の方々と交流していきたいと思いました!
参加者の方々、本当にお疲れさまでした!そして、ありがとうございました!
参加レポートのリンク
大変ありがたいことに参加レポートを書いてくださった参加者がいるので、こちらにリンクを貼ります。
発見したら、随時更新します。
※投稿時間順
はてなブログに投稿しました #はてなブログ
— tonoshake🍶 (@TonoShake) September 13, 2020
KLabExpertCampに参加して作ったembraceの解説を語る - 覚え書きhttps://t.co/wl3MHcxtQr
#KLabExpertCamp の話を書きました~
— ブタジエン (@butadiene121) September 13, 2020
はてなブログに投稿しました #はてなブログ
KLab Expert Campに参加してきました - Butadiene Works https://t.co/zBV5bcEkZt
成果発表の作品リンク
成果発表の作品のリンクを貼ります。とてもクオリティの高い作品ばかりです!
発見したら、随時更新します。
※投稿時間順
#KLabExpertCamp
— 𝙎𝙖𝙣𝙩𝙖 (@santa_sukitoku) September 12, 2020
"metaball and hexagon ver.1.0" by "Santa" https://t.co/3UlZzelxro #NEORT
#KLabExpertCamp で流体シミュレーション作りました!
— Fᴇʏʀɪs💤VRC民 (@Feyris77) September 12, 2020
leapmotion使って自分の手で混ぜ混ぜできます😆#madewithunity #unity #shader #geometry pic.twitter.com/iEfugMgbCD
#KLabExpertCamp でLayered Materialを制作しました。
— Haruka Kjt (@kajitaj63b3) September 12, 2020
動画提出が規定なのでフレーク塗装/カーボンファイバー塗装の車にセットアップして、vaperwaveっぽい背景で走らせました。(音楽はvaperwaveっぽくはない?よね?) pic.twitter.com/0gTMFhH0fo
#KLabExpertCamp で初めてパストレーシングを勉強してそれを用いて動画作品を作りました!! 見ていってください!https://t.co/h31s5hK0YT
— ブタジエン (@butadiene121) September 12, 2020
#KLabExpertCamp でglslを使ってデモっぽいものを作成しました。良かったら見てね!https://t.co/3gmJkDlGJC pic.twitter.com/eV0CPbvdtB
— 避雷 (@lucknknock) September 12, 2020
FlashBack#klabexpertcamp での最終成果です!
— ukonpower (@UkskSan) September 12, 2020
レイマーチングとWebGLを混ぜ合わせました。https://t.co/kv3O0VksYe https://t.co/PJQk8rn9K8#threejs #webgl #glsl pic.twitter.com/O60mnFeGYZ
#KLabExpertCamp
— hibit (@hibit_at) September 12, 2020
投稿作品です! GLSLでフラクタル書きました!https://t.co/olmvCDfB7V
#KLabExpertCamp で作りました~ https://t.co/ckqwJojqlX #glsl pic.twitter.com/GEm63mdUEd
— 寝る前 (@nerumae3) September 12, 2020
#KLabExpertCamp で制作しました!
— 3yen (@3yen_CG) September 12, 2020
凄い人ばかりでめちゃくちゃ良い経験になりました!https://t.co/astTdcYc79
メンター賞を頂いたあの「embrace」がツイッター投稿版になりました!
— tonoshake🍶 (@TonoShake) September 13, 2020
ツイッター限定で、映画と同じフレームレートで書き出したバージョンになります
フレームレートを下げることで雰囲気も変わりました
ぜひ見てください!#KLabExpertCamp https://t.co/XE6wsLfws4 pic.twitter.com/47sXyr8FtL