はじめに
11回目の今回は、11/14、11/15、11/16の三日間、高尾山で開催されました。3日間とも素晴らしい天気でした。会場のタカオネという施設は駅から近く、温泉も徒歩圏内という恵まれた立地です。
![]() |
立派な駅舎です。
![]() |
目の前には温泉施設。
![]() |
到着してタカオネの1Fのカフェで食事をとります。タカオネの食事はどれもとてもおいしかったです。
![]() |
早速セミナーが始まります。参加者(ほぼ)全員が5分から30分のセミナーをやるのですが、年々皆のレベルやプレゼンテーションのスキルが上がってきており、仕事でもすぐ使えそうなものが盛りだくさんでした。これだけの参加者がいて、複数回開催されているにもかかわらず、全員違うテーマで驚きました。ユーモアにあふれるものも多く、どれも非常に面白かったのですが、個人的に特によかったのは折登さんのOpenUSDの解説とshockerさんの物理シミュレーションの説明でした。自分はMidiコントローラをつかって何かやろうかと思っていたのですが、@gam0022さんがすごいことをやっていたので、違うテーマにしておいてよかったです。
1日目の夜はBBQをしてから皆で焚火を囲みます。
![]() |
2日目の朝は高尾山を登りました。
本戦
本戦は2日目に行われました。例年通り、参加者がそれぞれ自身の作ったレンダラで作った映像作品を提出し、互いに点数をつけあって総合得点で順位を競います。私は仕事でレンダラを作っているので、上位でないと恥ずかしいだろうかという気持ちと、面白いものが作れればあとは別にどうでもいいという気持ちが半々くらい混じった状態での参加です。
実行環境およびルールは前回から大きく変わりません。今回は180秒でアニメーションを生成して、例年同様に技術と作品の出来栄えを競います。私はいつもどおりWin+CPUインスタンスを選択しました。今回は、ほとんどの参加者がGPUのインスタンスを用いていました。Linux+ARMのインスタンスも選択できるようになっていたのですが、普段はWindows on ARMとMacでしか自分のレンダラを動かしていないため、ARMのインスタンスの使用はあきらめました。開催前にRyzenでPCを一台組み、x64の実行ファイルを用意しました。
私は仕事でやったことや、今後やりそうなことはこの合宿で話すことはできません。ですので、今年は3次元でなく、ひとつ次元を下げ、2次元で勝負することにしました。またGPU勢と渡り合うには何かしらの工夫が必要となります。CPUでのメリットは使用できるメモリが潤沢にあることですので、これを生かすためにTransient Renderingを使うことにしました。
ちなみに、以前こちらの動画を見た時は綺麗で感動したのを覚えています。
また、最近Hans Chiuさんのこちらの動画を見て、FDTDに似たことがパストレーシングだけでできたらいいな、とちょうど思っていたところでした。
Transient Renderingはper light AOVsのように時間ごとの照明計算の結果を別のバッファに書き出します。時間ごとの照明計算の結果というのは、光がたどったパスの総長をもとにして得ることができます。例えば、0-0.00000001秒の間の照明計算の結果は光がたどったパスの総長を光の速さで割った値が0-0.00000001の場合だけ寄与を足すことで求めることができます。この性質を応用すると、アニメーションの全フレームがたった一度のレンダリング(パストレーシングなど)を行うだけで得られるわけです。生成したいフレーム数の画像を保存しておけるだけのメモリを事前に確保しておく必要がありますが、今回のインスタンスでは全く問題ありません。
しかし、これだけであると技術的に何にも面白くありませんので、ひとひねり加えます。今回は以下の3つを採用しました。
- 動く物体
- 固定端反射
- ガラスの中で遅くなる光
ネットで見かける多くのTransient Renderingを行ったアニメーションは、光の伝播はおこなわれているものの、シーンはスタティックであることがほとんどです。
それでは面白くないので、今回はライトを動かしてみることにします。ライトが動くとドップラー効果を自然に再現することができるようになります。動く物体が入ってくると、一度のレンダリングだけですべてのフレームを生成するためにはひと工夫必要になりますが、興味がある人は考えてみてください。
次に固定端反射。反射には自由単反射と固定端反射がありますが、光が反射面に当たった時には、固定端反射を行うようにしました。Rayのクラスに位相を持たせ、反射時にはπずらします。
| 自由単反射 | 固定端反射 |
|---|---|
![]() |
![]() |
最後に光はガラスなどの中では速度が遅くなります。波が圧縮されたように見えますが、この効果を加えます。
| 光の圧縮 |
|---|
![]() |
これらをすべて行うと以下のような作品ができます。
繰り返しますが、これは単方向パストレーシングだけで生成したアニメーションです。(ライトからではなく、各画素からレイを投げています。フラットランドといわれる2d global illuminationの可視化と同じ)
解像度は1600x1600、1ピクセル当たり1024サンプルにしました。レイの平均追跡深度は4でした。128フレームを128秒ほどで生成しましたが、これは、まともに行うと10.5G rays/secというCPUには厳しいパフォーマンスを達成する必要があります。しかし、先述のようにTransient Renderingをうまく使うと計算量は激減します。レギュレーションの180秒よりもかなり少ない時間で処理を済ませ(まだ60秒ほど余裕がある)、NUMAもケアしていなかった(おそらく半分のコアしかつかっていない)ので、本来は3倍ほど高品質なアニメーションが生成できたことになります。まだまだCPUで行けますね![]()
唯一残念だったのは、無限ループするアニメーションを生成したのですが、作品紹介で動画をループした際に、最後のフレームと最初のフレームの間でhiccupが生じていてうまくつながって再生されなかったことでしょうか。
ほかの方の作品も力作ぞろいです。DOFやコースティクスがテーマとして人気があるようです。私が高得点をいれたのは以下の作品です。
技術的に難易度が高かったこちら。
アセットと作品としての完成度が異常に高かったこちら。アニメーションまで全部一人で作ったとは信じられません。すごいです。
仕事をしながらなので、皆時間の確保が課題となりますが、体調管理が大切ですね。あとは、難しいことをしすぎない、身の丈にあったことをきちんと理解してしっかりこなす、というのも上位に行くコツだと思います。
さいごに
今回はセミナーの進行や、食事、焚火といったイベントがすべて滞りなく行われていました。運営の皆さん、準備等を含め大変だったと思います。ありがとうございました。参加者の皆さんも謙虚で面白い人が多く、非常に楽しい回でした。いまから次回が楽しみです。







