レイトレ合宿７参加レポート

# 合宿会場
9/7-8と行われたレイトレ合宿に参加してきました。今年は7回目で、会場は猪苗代湖でした。参加できるのは原則としてレンダラを作っている人のみだそうです。また、企業名は伏せますが、レンダラを書いて給料を得ている、プロの参加者が年々増えてきているようです。

猪苗代湖は非常にきれいな場所でした。またA●Dの方々からチョコレートの差し入れがありました。

![IMG_2105.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56484/6ae843f1-a364-0f4d-a4ec-435f650ff85e.jpeg)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56484/3180badf-2e66-8841-23fc-b3663ee3fdb5.png)

# 徒競走
さて、今年は合宿の本戦のほかに徒競走と呼ばれる、交差判定の速度を競い合うイベントがありました。AVX-512を使われた方、LBVHを使われた方と様々でしたが、Binningで構築したOBVHが多かったのではないでしょうか。私の提出したdllもOBVHで構築を並列化したものになっていました。メモリの節約を行うためにリーフ・ノードのマージを行ったり、速度を上げるためclangを試したり、インテル・コンパイラを試したり、AVX-512のエミュレータでコードを走らせたりといろいろ行いましたが、結果としてAVX-512は使用せず、AVX2を使ったコードをインテル・コンパイラでコンパイルしたものを提出し、1位をとることが出来ました。こちらは景品です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56484/efab8f70-64f6-455f-9ae5-7c99c3b07f4b.png)

他にもTreeletのRestructuringを試している方がいるなど、興味深かったです。最も衝撃的だったのは、AVX-512を使ってリニアで交差判定をしたもので、1万ポリゴンくらいまでは他のアルゴリズムと十分渡り合えていたことです。

初戦では、[こちら](https://github.com/shinjiogaki/bvh)で配っているLBVHを試してくれた方と当たり、自分との闘いのようになりました。配布していたコードは36コアという多コアの環境で実テストできていなかったことから、きちんと動作するということが分かり、思わぬ収穫となりました。LBVHはBinningよりも構築が速く、交差判定が遅い、という期待される結果となりました。

# 本戦
アセットの読み込みから、レンダリング、画像の保存までを60秒以内で行うもので、各々自身のレンダラとともにアセットを提出します。この持ち時間は年々半分になるそうです。今年の結果画像と順位は[こちら](https://sites.google.com/site/raytracingcamp7/)です。

GPU vs CPUの様相を呈しており、GPU勢は8kの画像を出す方が増えるなど、解像度の著しい上昇がみられました。私はレンダリングする対象がそれほど高周波のテクスチャを含んでいなかったことから、皆が投票時に利用するであろうLaptopできれいに見えるよう画像サイズは2kの正方形にとどめました。

技術的には布のWeavingやBRDFのEnergy Compensation、Adaptive Tree Splittingなど色々実装も行っていましたが、今年は主に基礎部分の改善に時間を費やしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56484/ae00d0b7-1dad-05c4-bba1-acb765da060a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56484/c7947d97-3b70-2bf4-e1ed-656041607ebd.png)

シーンについてですが、今年は漠然とHoudiniの神様、堀川淳一郎さんが配布してくださっているcircle packingを使いたいと思っていて、最初は次のようなものを考えていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56484/459af5d7-0f10-c9f6-58a5-0771b7c3c612.png)

しかし、複雑な形状だと見せたい部分がいまいちわからなくなるなど悩んだので、結局次のようにシンプルなシーンを用意しました。ポリゴン数は400万弱、輝度のクランピングやデノイザーは一切利用していません。

![IMG_2095.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56484/f0d2930c-aac0-84df-ce1c-82cbe9f3b494.png)

結果1位となり、個人的に購入しようか悩んでいたポラロイドを景品として頂きました。堀川淳一郎さんのおかげです。ありがとうございます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56484/60c92a4c-a1a9-82f0-0ff0-c7b9af759957.png)

こちらは、おまけで薄膜干渉無しのものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56484/2c8f6321-949e-2c8b-b5ed-bb98456dfed6.png)

# 所感
今回はCEDECでの発表もあり、スライド、徒競走、本戦の3つの準備をするのが負担となって体調を崩してしまいました。元気がなければ何もできないことを身にしみて感じました。

毎回、技術があるだけでは高得点は得られない、というのがこの合宿の面白いところだと思います。技術をアピールしたくなるのは、私も他の皆さんもきっと同じなのですが、これまでの経験で、未熟な状態で出してしまうと逆に印象が悪くなることもあるということ、技術を正しく評価してもらうにはそれなりの見せ方が必要であるということを痛感しています。これは実際に商品を売る場合でも同じなので、この会の評価制度はうまく機能しているのではないかと思います。得点について1位と2位が僅差でしたが、私は自身の作品より2位の方に高い点を入れたので、それに関してはフェアであったと明言できます。

CPU vs GPUについてですが、GPUはスタートアップにかかる時間が馬鹿にできないなど、8枚GPUが使える環境でもごく短時間で性能を引き出すのが難しかったようです。ただ、CPUとの計算リソースの違いは明白なので、これが適度なハンディとなり、勝負がおもしろくなったのではないでしょうか。最近はプロの参加者が増えてきたので、手加減は全くの無用であると思えるようになりました。今回はCPUの半分のコアしか使いませんでしたが、次回は遠慮なく全コア使います。いつまでCPUでいけるのか想像はつきませんが、正直なところ、次くらいで限界であるような気もします。

技術以外の点でいえば、Substance PainterやHoudini、Blenderなど使うツールも広がり、参加者の作品がプログラマーズ・アートから少しずつ進歩しているのも素晴らしいことのように思えました。実際アーティストの気持ちが分からなければ、良いツールを作れるはずなどないからです。

さいごに、こういったイベントは他にもたくさんあるかと思うのですが、レイトレ合宿の運営の素晴らしさは群を抜いていると思います。スムースで人を不快にさせる点が全くありません。本当に感謝しています。職場では話せない技術の話が出来る場所、また、私は少し年齢を重ねてきましたが、知識を伝えられる場所として、参加者の質も含め、この合宿は大変貴重であると思います。

みなさん、ありがとうございました！