Getting artistic inspiration from technology


Keijiro Takahashi


keijiro.github.io/unite-asia-2019-deck

まず話を始める前に、今日のこのスライドの情報から。今から使うこのスライドは、 GitHub 上のこの URL で公開しています。後で見返したい部分があったら、こちらを参照してください。 それでは自己紹介から。僕の名前は高橋啓治郎です。 Unity Technologies Japan でエバンジェリストをやっています。元はコンソールゲーム業界の人間で、ソニーで10年間、プレイステーション用のゲームを作るゲームプログラマーとして働いていました。ずっとゲームを作る仕事をしていた反動なのか、 Unity 社に入ってからは、ゲーム以外のプロジェクトに多く関わっています。仕事で関わることもあれば、個人活動として関わることもあったり、とにかく様々なかたちで Unity を使い続けています。
また、こうした作ってきたプロジェクトのほぼすべてを GitHub 上で公開しています。現在 500 個ぐらいのプロジェクトがこの上で公開されています。時間に余裕のあるときに覗いてみてください。
いくつかの面白いプロジェクトを紹介してみたいと思います。
これは DMM VR Theater という施設でパフォーマンスしたときの映像です。いわゆる pepper’s ghost illusion と呼ばれるトリックを使って、ホログラムのように宙に浮かぶ映像を作り出しています。下のは OBA というダンサーさんとのコラボレーションでパフォーマンスを行ったときのものです。こういう風に、実在の演者と CG との融合を見せることのできる、とても面白い施設です。
これは同じ施設です。ノイズ・ミュージックで有名な MERZBOW (メルツバウ)とコラボレーションしたときの映像ですね。 MERZBOW は、とにかくすごい強烈なノイズサウンドを作り出す方なので、映像の方もとにかく強烈なものになりました。これは自分で操作していても頭がクラクラするような体験だったことを覚えています。
こちらは、さきほどのとは違って普通のライブハウスでのパフォーマンスになります。上は RHC という二人組の EDM アーティストとのコラボレーションです。下は FEMM という二人組の女性アーティストとのコラボレーションです。これらのアーティストとはライブビジュアルの提供という形でよくコラボレーションを行ってます。
こんな感じでいろんなプロジェクトに関わっているのですが、それらの原動力となっているのが、テクノロジー、技術の存在です。僕は常に何らかのプロジェクトを始めるとき、そこで何か新しい技術を使ってみよう、新しい技術を試してみよう、と考えるようにしています。その新しい技術を試していく過程で、新しい可能性を見つけ出していき、表現として仕上げていく、というアプローチです。こうして口で言うと何か偉そうなことをやっているように聞こえてしまいますが、実際にやっているのはとても簡単なことです。 ここでは、実際に僕が関わった2つの事例を紹介します。その過程でどんなことを考えていたのか、どのようにして発想を膨らましていったのか、その背景を解説していきます。
Case 0. Live Performance at Unite Shanghai と、その前に……本題を始める前に、 "Case 0" として、 Unite Shanghai で行ったライブパフォーマンスについてのお話をしたいと思います。
僕は先々週、中国で開催された Unite Shanghai にも登壇しました。その冒頭で、中国琵琶とのコラボレーションによるライブパフォーマンスを行いました。演奏しているのは上海音楽学院の琵琶の先生です。それに僕がリアルタイムでビジュアルを付けました。
今回のこのデモでは、2つの技術を使いました。ひとつは Intel の RealSense カメラ、もうひとつは Unity の新機能 Visual Effect Graph、通称 VFX Graph です。 RealSense カメラは、今ここにも持ってきているんですが……この三脚の上にある、これですね。このデバイスは、いわゆるデプスカメラと言うやつで、カメラから見た絵の色情報だけでなく、カメラからの距離の情報、デプスも取得できるというものです。
ちょっとツールを立ち上げてみましょう。 (デモンストレーション) これは RealSense SDK に付属のツール画面です。このように普通に平面の絵が撮れるだけでなく、このように三次元的な奥行きを持った3Dのボリュームデータとして映像を取得できます。精度は完璧ではありませんが、こんなに小さなデバイスで簡単に3Dのボリュームデータが取れるため、とても重宝しています。
そして、もうひとつの技術、 VFX Graph ですが、これは現在開発中の、 Unity の新しいエフェクトシステムです。 これが VFX Graph を編集するためのツール、 VFX Editor の画面です。こんな感じで、ノードを線で繋いでいき、グラフを構築することでエフェクトをデザインできます。こうして作られたエフェクトは GPU を使って実行されるため、パフォーマンスも非常に優れています。従来のパーティクルシステムと比較して、使いやすいだけでなく性能も良いという優れものです。 今回新たに作ったのは、この RealSense から得た3Dのボリュームデータを VFX Graph に入力するための仕組みです。ちょっと実際に動かしてみましょう。
(デモンストレーション) こんな感じで、 RealSense と VFX Graph を組み合わせることで、様々な表現が可能になります。それではどうやって、この RealSense から得たデータを VFX Graph に取り込んでいるのか。その仕組みについて簡単に説明したいと思います。
VFX Graph には、テクスチャに焼き込まれた、いわゆる「ベイク」された、位置や色の情報を使うためのノードが用意されています。この “Set Position from Map” や “Set Color from Map” がそれです。この仕組みを使うことで、大量の位置や色の情報をビジュアルエフェクトに流し込むことが可能になります。
そこで今回僕は、この RealSense から取得したポイントクラウドの色情報と位置情報を、リアルタイムにテクスチャにベイクする仕組みを作りました。一度テクスチャにベイクしてしまえば、あとは VFX Graph に内蔵の仕組みで簡単に扱うことができます。
github.com/keijiro/Rsvfx この仕組みを使ったサンプルプロジェクトを、こちらの GitHub のリポジトリで公開しています。詳細について興味のある場合は、こちらを参照してみてください
このように今回は、 RealSense から取り込んだ色や位置の情報をテクスチャに焼き込んで VFX Graph に取り込むという仕組みを作りました。このアプローチは RealSense 以外でも使うことができると思っています。
例えば、サーモグラフィーを使って温度の情報を取り込んで VFX Graph で視覚化する、なんて面白そうですね。あるいは気象情報を取り込んで視覚化するなんてのもいいかもしれません。人口密度などの地図情報の視覚化なんかも面白そうです。などなど。
Data visualization とにかく何でも、大量のデータを Unity に取り込んで視覚化、いわゆるデータ・ビジュアライゼーションを行いたいという場合に、このアプローチは役に立ちます。エフェクトアーティストだけでなく、データの視覚化に Unity を使いたいと考えてる人にも、この VFX Graph は、ぜひ使ってみて欲しい機能だと思います。
もう一つ、今回のデモで使っていた要素があります。それは「音」です。マイクを使って琵琶の演奏の音を拾い、その強弱によってエフェクトにニュアンスを与えるようにしました。
左の写真に見えるのが今回使用したマイクです。三脚の上に RealSense と並べるかたちで配置しました。右の動画は実際の使用例ですね。指を鳴らす音を検出してエフェクトを発動しています。 ちょっと実際に試してみましょうか。
(デモンストレーション) このように、音に連動したエフェクトが存在することによって、音と映像の一体感が作り出されています。この一体感を実現するには、音と映像の間に発生する遅延を最小限に抑える必要があります。音と映像がズレていたら、一体感は生じませんからね。これを Unity の標準機能だけで実現するのは難しかったため、専用のプラグインを作成しました。
github.com/keijiro/Lasp このプラグインは、こちらの GitHub のリポジトリで公開しています。興味のある方はこちらを覗いてみてください。
Unite Shanghai の話は以上です。それでは、ここから本題に入ります。僕自身が関わった、2つの事例についてお話していきます。
Case 1. Geometry Shader Effects まず最初にお話しするのは、ジオメトリシェーダーを使ったエフェクトの事例です。 この会場にも、 Unity のシェーダーを使ったことのある人は、少なからずいると思います。でも、ジオメトリシェーダーを使ったことのある人というのは、なかなかいないかもしれません。このジオメトリシェーダーというのは、他のシェーダーと比較するとちょっとマイナーな機能なんですが、これを使うことでとても面白いエフェクトが作れるんです。その話をしたいと思います。
まずはシェーダーの基礎についてのおさらいです。 シェーダーを使ったことのある人ならば、まずバーテックスシェーダーというものがあって、次にフラグメントシェーダーというものがあって……というような、基本的な構造を理解していると思います。
で、実は、この図のここに、ジオメトリシェーダーというのを挟むことができるんです。それで、ここに挟まったジオメトリシェーダー、いったい何をするものなんでしょう? その疑問に答える前に、まずはバーテックスシェーダーとフラグメントシェーダーについて復習しておきましょう。
ざっくり簡単に説明します。バーテックスシェーダーは頂点を処理するシェーダーです。 CPU から与えられたメッシュの各頂点に座標変換を適用したり、ライティング処理を行ったりします。
フラグメントシェーダーはピクセルを処理するシェーダーです。いわゆるラスタライズの処理が行われた後に、画面上を1ピクセルずつ塗り潰していくわけですが、ここで使われるのがフラグメントシェーダーです。ピクセルごとのライティング処理や、テクスチャマッピング処理などがここで行われます。
と、こんな形で頂点ごとの処理、ピクセルごとの処理が、各シェーダーで行われるのですが……
これらのシェーダーに特殊なエフェクトを加えることもできます。
これは、バーテックスシェーダーの中で頂点の位置をいじってみた例です。バーテックスシェーダーは頂点を処理するシェーダーなので、このように頂点を移動して形状を変化させるようなエフェクトを作れるわけです。
これは、フラグメントシェーダーのエフェクトの例です。左のは、ピクセルの明るさを変化させたもの、右のは、一部分のピクセルを消すことで物体が透けて見えるようにしたものです。フラグメントシェーダーはピクセルを処理するシェーダーなので、このように物体の一部分の色を変えたり消したりするエフェクトを作れるわけです。
整理しましょう。バーテックスシェーダーは、頂点を処理の単位としていました。細かい表現はできませんが、頂点を移動して変形させるのとかは得意です。フラグメントシェーダーは、ピクセルを処理の単位としていました。変形などはできませんが、細かい模様の変化などは得意です。
そしてジオメトリシェーダーはと言うと、三角形を処理の単位とします。頂点1個1個でもなく、ピクセル1個1個でもなく、三角形を入力として受け取り、三角形を出力します。そして、ジオメトリシェーダーの中では、この三角形に対してエフェクトを加えることができます。 では、三角形を処理の単位とすると、どんなエフェクトが作れるのでしょうか?
例えば、シェーダーに入力された三角形を変形してキューブにする、なんていうアイデアはどうでしょうか? ジオメトリシェーダーでは三角形の頂点を移動させるだけでなく、新しく三角形を追加することも可能です。三角形を四角形に変形したり、それに厚みを与えてキューブにする、なんてこともできるんです。
実際に、三角形をキューブに変形する、というアイデアをもとに作ってみたエフェクトがこれです。物体を異世界に転送するようなエフェクトですね。 このように、2つの平面をパラメーターとして与えます。それらの間にある三角形について、先ほど説明したような変形処理を適用しています。 実際には単純な変形ではなく、三角形のまま拡大してから、キューブに膨らんでいって、最後は縦に伸びて消える、というような、ちょっと複雑な動きをしています。また、変形と同時にキューブの縁(エッジ)を発光させることによって、見た目の豪華さを与えています。発光の処理はフラグメントシェーダーの中で行ってますので、ジオメトリシェーダーとフラグメントシェーダーの合わせ技、ということになりますね。 こんな感じで、ジオメトリシェーダーという技術は、僕に新しい発想を与えてくれました。バーテックスシェーダーでウネウネと変形する、とか、フラグメントシェーダーでピカピカ光らす、などとは違う可能性です。物体の形状を分解して、変形し、再構成する、ということを可能にしてくれたわけです。
同じように、物体を分解し再構成する、という方向性で、いろんなエフェクトを作ってみました。上のは、三角形をキューブではなくリボン状の形状に変形させるものですね。物体が分解されていく様子がよく表現できていると思います。 下のは、三角形を短いリボンに変形させてから、特定の座標に向かって移動させる、というものですね。このエフェクトを逆再生させたものと組み合わせることによって、物体が別の座標へ転送されたような表現を作り出すことができます。
こちらは Unity の新しいグラフィクス機能である HDRP と組み合わせて、いろいろ作ってみたものです。物体を四角形の破片に分解するエフェクト、物体を崩壊させて再構築するエフェクト、竜巻のような渦に変換するエフェクト、物体をスライスして消すエフェクト、などなど。 このように、ジオメトリシェーダーを使うことで、これまでには作れなかったようなタイプのエフェクトを作れることが分かりました。こういう新しいもの発見をしたタイミングというのが、開発の中でいちばん楽しいです。
github.com/keijiro/TestbedHDRP こちらの HDRP 上のジオメトリシェーダーの実装例は、こちらのリポジトリで公開しています。興味のある場合は覗いてみてください。
github.com/keijiro/StandardGeometryShader また、 HDRP ではない、 Legacy render pipeline 上のサンプルもこちらにあります。 HDRP の実装は複雑なので、ジオメトリシェーダーに初めて触れるという場合は、こちらを参考にしたほうが良いかもしれません。
こうして作成したエフェクトは実際のプロジェクトでも使用しました。上のは FEMM のビジュアルで使用した例ですね。下のはイベントで展示されたインスタレーションに使用した例です。ユーザーのアクションに合わせてモデルが切り替わるという、簡単な操作が組み込まれています。こんな簡単な操作でも派手なエフェクトが発生すると、とても気持ちいいです。
Geometry Shader Instancing ジオメトリシェーダーには、さらにもうひとつ面白い機能があります。 Geometry shader instancing と呼ばれるものです。簡単に説明すると、ジオメトリシェーダーを繰り返し実行するというものです。たったそれだけの機能ですが、これによって、大きな負荷をかけることなく、より複雑な形状を生み出せるようになります。
僕は、この geometry shader instancing を使えば、キャラクター1体の外見をまるまる生成することも可能ではないかと考えました。実際に試してみたのがこれです。 シェーダーに入力しているのは、この左に見える、骨格を構成するラインの形状だけです。その単純なラインを、ジオメトリシェーダーを使って、ウネウネと動くリボンのような形状に変換しています。それをインスタンシングによって増殖させることで、このようにキャラクター1体をカバーする複雑な形状へと発展させているわけです。
github.com/keijiro/SkeletalGeometricEffects この geometry shader instancing の例は、こちらのリポジトリで公開しています。興味のある場合はこちらを覗いてみてください。
このエフェクトも実際のプロジェクトで使用しています。これは RHC のイベントの VJ に使用したときの映像です。 OLED を使った透過ディスプレイにこのエフェクトを映し出しています。このような透過ディスプレイは、コントラストの高い絵が非常に綺麗に見えます。このエフェクトとの組み合わせは、まさにピッタリでした。
まとめをしましょう。
バーテックスシェーダー、ジオメトリシェーダー、フラグメントシェーダーには、それぞれ異なった役割があり、それぞれ異なる種類の要素を扱います。 バーテックスシェーダーなら頂点をいじることができます。フラグメントシェーダーならピクセルをいじることができます。それぞれ異なる表現が可能です。そして、ジオメトリシェーダーでは三角形をいじることができる。そこではどんな表現が可能だろう? そう考えたところから、新しい可能性が広がっていきました。まさにインスピレーションを受けた瞬間が、そこにあります。
このように、ちょっとした機能の違い、役割の違いが、異なった表現の可能性を与えると言うことは、新しい技術を触っていると度々起こります。ですから、何か新しい技術が現れた時に、とにかくまずそれに触れてみて、何ができるのか確かめてみる、と言うのは、とても大切な姿勢であると思います。
Case 2. Deep Learning (Neural VFX with pix2pix) 次は、ディープラーニングをビジュアルエフェクトに使ってみたという事例です。 ディープラーニングや機械学習は、現在日本でも最も人気のある研究分野の一つです。これについては韓国でも同じような状況ではないかと思います。みなさんの中にも機械学習の技術を実際に使っている人がいるかもしれません。あるいは、機械学習についてこれから勉強してみたいと考えてる人もいるかもしれません。 僕も機械学習の技術を何かしらビジュアルエフェクトに使ってみたいと考えていたのですが、なかなかきっかけが掴めないでいました。
pix2pix phillipi.github.io/pix2pix そんな時に、ふとしたきっかけで出会ったのが、 pix2pix と呼ばれる技術でした。
pix2pix は、ある種類の画像を、別のある種類の画像に変換するというディープ・ニューラルネットワークの一種です。
pix2pix の使用例として有名なのが、この、線画のスケッチをリアルな猫の画像に変換するというデモです。ウェブブラウザ上で試すことのできるデモが有名になりました。これを実際に遊んでみたことのある人もいるのではないかと思います。
これは実際の使用例を画像検索で拾ってきたものです。まあ真面目に猫を描いて試してる人もいれば、ぜんぜん関係無いものを描いてる人もいますね。ぜんぜん関係無いものを描いても、無理やり猫っぽいものに変換してくれます。そこに、今までの技術には無かった新しさがあると思います。不思議な人間臭さというか、知性のかけらのようなものが感じられます。
この、線画をリアルな猫に変換するというモデルは、このように「線画の画像データ」と「猫の写真の画像データ」のペアを大量に用意し、それを学習させることによって実現されています。
同じ要領で画像のペアを大量に用意すれば、別の使い方も可能です。これは色を使った単純な塗り潰しの画像から、リアルな街の風景を生成するモデルですね。これは航空写真から地図を生成するモデル。これはリアルな建物を生成するモデル。これは白黒写真に色を付けるモデル。これは昼間の写真を夜に変換するモデルですね。などなど。何か決まり切った特定の用途だけでなく、データさえ用意できれば様々な種類の問題に適用できます。そこが機械学習の素晴らしいところですね。
この pix2pix は、それなりに処理負荷の高いニューラルネットワークです。ですが、最新の GPU を利用すればリアルタイムに動かすことも可能らしい、という噂を耳にしました。もしこれを Unity 上でリアルタイムに動かすことができれば、これまでにない、劇的に見た目を変化させるようなエフェクトを作ることができるかもしれません。そこで僕は実際に挑戦してみることにしました。
まず手始めに、前の猫のデモを、単純に Unity 上の C# スクリプトで実装してみることにしました。いちおう動くことには動いたのですが、一枚の絵の変換に5分ぐらいかかるという、非常に低速なものでした。この時点では、まだ実用的ではないですね。 ただ、これを実装した時点で、ディープニューラルネットワークの仕組みは非常に単純なものであるというのが分かりました。簡単に言ってしまえば、ディープニューラルネットワークとは、膨大な数の掛け算と足し算をひたすら繰り返しているだけです。 GPU はその手の計算が非常に得意ですから、うまく実装すれば大幅に高速化できるはずです。
で、まずは単純に GPU 化してみました。左のがそれなんですが、これだけで約3秒まで高速化されています。5分から3秒まで縮まったんだから、すごいですよね。さすが GPU です。 その後、細かな最適化のテクニックを加えていって、最終的には0.04秒にまで高速化することができました。ここまでくれば、もうリアルタイムに動いたと言ってもいいでしょう。
ちなみに、どういう高速化のテクニックを使ったのか、ここで詳しくは説明しませんが、資料だけ紹介しておきます。これは NVIDIA による Direct Compute を使った際の最適化のテクニックについて解説したスライドです。ここで紹介されているようなテクニックを中心に最適化を施して行きました。興味のある方はこちらを参照してみてください。
github.com/keijiro/pix2pix このデモはこちらの GitHub のリポジトリに上げてあります。実際に試してみたいという方は、こちらを覗いてみてください。
これで pix2pix のランタイム部分は完成しました。次は、新しいモデルの学習に挑戦してみることにしました。

Google Colaboratory

colab.research.google.com

学習については Unity 上ではなく Google の Colaboratory というサービスを使ってクラウド上で動かすことにしました。
Colaboratory は Google が無料で提供している開発環境です。クラウド上の Jupyter インスタンスを無料で利用することができます。 GPU や TPU を使用することもできるので、負荷の高い機械学習の処理も難なく動かすことができます。面倒なセットアップは必要なく、誰でもすぐに機械学習を始めることのできる素晴らしいプラットフォームです。機械学習を始めてみたいと考えている方には、これを試してみることを強くおすすめします。
それで、 Colaboratory をフルに活用して、いろんなモデルを学習させてみました。猫のモデルを作り直してみたり、同じ要領で犬のモデルを作成してみたりしました。人の顔なんかも試してみました。完璧ではないのですが、人の顔の形状を捉えて変換していることがわかりますね。最後のは、イラスト素材集を学習させて、線画からイラスト風の画像を生成できるようにしたものです。
ここまでのデモは、人の手で書いた線画を変換するものでした。次に、 Unity でレンダリングした絵も同じように変換することができるのではないかと考えました。それで作ってみたのがこのデモです。 Unity でレンダリングした画像を線画に変換して、そこから pix2pix で最終的な画像を生成しています。 こう、言葉で表すとなんとなく上手くいきそうなアイデアなんですが、実際には、なかなかうまくいかなかったです。ただ、普通の人間の感性では生まれてこないような絵が、次々に機械から生み出されてくるというのは、なかなか面白いです。この胸像を無理やり猫に変換する例などは、まるで悪夢か幻覚か見ているような感じです。 下の例は、猫の3Dモデルのアニメーションを、リアルな猫に変換する、というのを試してみたものです。これはなかなかうまくいっていると思います。もしかしたらこの手法に実用性があるのかもしれない、と感じさせてくれます。
pix2pix Next Frame Prediction 次は、さらに別の pix2pix の応用を試してみることにしました。 pix2pix を next frame prediction 、つまり、あるフレームの次のフレームを予測するためのモデルとして使用する、というものです。
仕組みについて簡単に説明します。まずは任意のビデオをフレームに分解します。いわゆるイメージ・シーケンスですね。そして、連続する2つのフレームをペアにして、 pix2pix に学習させます。こうして出来たモデルは、任意の画像を与えると、その次のフレームを予測して生成してくれる、というものになります。
あるフレームを pix2pix に与えると、次のフレームを作ってくれる。そのフレームを再び pix2pix に与えると、次の次のフレームを作ってくれる。というようにフィードバックを繰り返すことで、無限に続くアニメーションが生成できるのです。
このモデルの面白いところは、元の映像とは関係無い画像を与えたとしても、無理やり次を予測していってくれるというところです。 例えば、さきほどの花火の映像を生成するモデルがあります。ここに花火とは何の関係もない人の顔の画像を与えたとします。そうすると、人の顔を無理やり花火として解釈して、花火の動きへと繋げていってくれるわけです。 このように、ある画像に本来とは異なる解釈を与えて加工していくというのは、今までは人間にしかできなかった仕事です。それを機械的に実現することができて、しかもリアルタイムで動くというのは、新しい可能性であると思いました。
これは実際に僕が作ってみたモデルを動かしたものになります。この水面の映像や、海の波の映像などは、かなりリアルに再現できていることが分かります。初期状態として画像を一枚与えているだけなんですが、そこから無限に続く映像を作ってくれます。 左上のは、電車の先頭にカメラを置いて録った映像を学習させたものです。これはまったくリアルではありませんが、動きの特徴を捉えて無理やり再現しようとしている様子が面白いと思いました。 これは爆発の映像、これは花火の映像、これは色のついた煙が混ざり合う映像ですね。どれもリアルというわけではないのですが、動きの特徴を捉えて映像にできているのが面白いです。 最も奇妙な結果を得られたのが右端の例です。これはダンサーが踊っている映像を学習させたものです。なんだか得体のしれないモヤモヤを生成し続けるモデルになりました。こういう、何の絵なのか分かりそうで分からない状態を作り出せるのも面白いです。
こうして作ったモデルをリアルタイムに操作して、ライブビジュアルとして使えるシステムを構築してみました。スライダー操作によって2つのモデルを混ぜ合わせて繋ぐことができます。また、ノイズを混ぜることで映像に不規則な変化を与えることができます。 このようにインタラクティブなインターフェースを作ることで、人の手の動きや、人間の持つ感性を、このシステムの中に組み込むことができます。そうすることで、ライブビジュアルのための表現の装置として使うことが可能になるわけです。
実際にライブパフォーマンスの中で使ってみた映像です。音楽に合わせて手動で映像を操作しています。 僕が AI を使ったアートとして、イメージしていたのはまさにこのような感じです。 AI が全自動で何かを生成するのではなく、人間による操作の先に AI が存在している、と言う構図です。 これは実際に使ってみて分かったことなのですが、この体験はこれまでにないとてもユニークなものでした。スライダーを手で動かすだけで、画面上の絵が絶え間なく無限に変化していくのです。このような単純な操作系で pix2pix を制御することができる、と発見できたのは、このプロジェクトの最大の成果かもしれません。
github.com/keijiro/Ngx このプロジェクトはこちらの GitHub のリポジトリで公開しています。興味のある方は覗いてみてください。
さて、そろそろまとめをしましょう。この事例を通して伝えたかったことは2つあります。
Find a way to learn a new technology まず最初は、新しい技術を学ぶ方法についてです。僕は以前から機械学習の技術を勉強してみたい、機械学習の技術を自分で使ってみたい、と考えていました。ですが、なかなかその機会をつかめずにいました。 それが、 pix2pix という技術と出会ったことによって、一気に道が開けていきました。それは、 pix2pix が、僕が普段活動しているビジュアルエフェクトの分野との接点を多く持っていたからです。僕が元から持っている知識や経験を生かして、勉強を効率的に進めることができたのです。また、僕の普段の活動の中ですぐ使うことができたので、やる気を維持しやすかった、というのもあります。 このように、なかなか勉強することのできなかった技術について、自分と身近な部分での接点を得たことによって、一気に自分のものになっていく……というこの流れ、僕は何度も経験したことがあります。 ここにいる皆さんもそれぞれ、本当は勉強してみたいと思っていることがあるんだけれど、なかなか手をつけることができない……そんな悩みを、なにかしら持っているんじゃないでしょうか。 そういったときに、いきなり分厚い教科書を買って、最初から最後まで読んでみようとしても、なかなかうまくいきません。自分の知識や経験、自分の活動との接点を見つけ、まずはその領域から自分のものにしていく。これは新しい技術を学ぶ際に使える、強力な戦略のひとつです。
Neural VFX can be realtime! もう一つ伝えたかったのは、機械学習技術を使ったビジュアルエフェクトがリアルタイムに動くということです。それを使える時代が既に来ています。 僕は今回、 pix2pix の最適化に取り組んだことによって、これが既に実用的な技術であるという確信を得ました。特別に強力なコンピューターを用意しなくても、そこそこの性能のコンピューターがあれば、そこそこの速度で動いてくれます。今後 GPU のスペックが進化を続ければ、それは更に使いやすいものになるでしょう。 この、機械学習を使ったビジュアルエフェクトという分野には、新しい可能性がまだまだたくさん残されています。もし、今日この話を聞いて面白そうだと思ったならば、ぜひこの新しい分野に挑戦してみてください。新しい才能がここに現れることを世界は期待していると思います。