レイトレ合宿10参加記

2024/10/11から2024/10/13の期間に行われていたレイトレ合宿10に参加してきました.今年は熱海の初島という島で行われており,去年のお寺での厳かな感じと比較するとすごく𝑳𝒖𝒙𝒖𝒓𝒚な感じでした.現地参加者も多く,非常に良い合宿でした.運営の皆さん本当にお疲れ様でした.

レイトレ合宿とは?

レイトレ合宿を詳しく知らない方もいらっしゃると思いますので私の現在の感覚を簡単に説明すると,CGの作品データを自作のCGレンダラと共に提出し,決められた計算機でレンダリングされた結果を鑑賞するという本戦と,他に色々なセミナーやレクリエーション等々がある合宿です.他の方の記事も読んでみると雰囲気がより何となく分かるかもしれません.

レイトレ合宿まで

……時は2023年の夏,レイトレ合宿9が行われました.初参加の私のレンダラは本番でクラッシュし,作品を提出することが出来ませんでした.当時はCUDAを書き始めたばかりで,慣れてないことを色々やろうとグルグルしてたら空中分解した感じでした.その後,それまでぼんやりとやりたいと思ってたNeRFの実装を行い,この時に実装したFully Fused MLPが良いCUDAの勉強になりました.以降はLBVHを実装して……ImGUI導入してGUIデバッガ書いてデバッグしやすくしたり……交差判定書き直したり……などとしていたら2024年の春でした.

私はレイトレにおいて交差判定処理は非常に重要であると考えており,ここを高速化するということを今年のレンダラの最低要件としていました.特にBVHについてゆる~く色々とサーベイしておりました.また,FPGAを大学のサークルから借りて自作ハードウェアレイトレしたい!とも思っておりました(未実現).アレやりたいコレやりたい!とか言ってたら夏前になりました.

夏前は競技プログラミングの国際大会であるICPCの国内予選に参加するためにチームで集まったり個人で練習,勉強したりすることが増え,あまりレンダラを書いておりませんでした.ICPCの参加記は以下に残しております.

tetrisyoshi.hatenablog.com

さて,大学の期末試験で大爆発を起こした後,ようやくレンダラを書き始めるぞ!と実装に取り掛かりました.毎回毎回ゼロから書くのもメンドクサイので,GUIレンダラの最低限構造を作成してテンプレート化したところで,インターンが始まりました.インターンは月曜から金曜フルタイムなので,実装に取り組める時間は夜でした.勤務開始時間が遅めだったのもあって案外時間は工面できました.

レンダラ実装!

実装の話をしましょう.今回もやはりOptiXやVulkanなどのレイトレAPIを使用せずにすべて書いてやる!という意気込みで実装を始めました.
最初の頃は「やろうと思えば実装できるけど面倒」ということで実装していなかった処理を書いておりました.例えば2-Levelのシーン表現(シーン→オブジェクト単位→プリミティブ単位)です.2-Levelのシーン表現は結構苦労しました.なるべくコードを共通化させるためにC++のtemplateを使って実装したのですが,この時にちゃんと纏めずに雑に実装したので今のコードはかなり汚いです.また,オブジェクト単位ごとにBVH構築処理を読んでいるので構築も遅いですし,部分的にBVHの構造が制限されるので性能も少し落ちます.改善しないといけない.
他にも,上で述べた「交差判定の高速化」をするために引き続き色々資料を読んでいました.いわゆるBVH STAR論文(D. Meister, S. Ogaki, et.al, A Survey on Bounding Volume Hierarchies for Ray Tracing, EUROGRAPHICS 2021)はBVHの勉強に非常に役立ちました.Ogaki先生は今回のレイトレ合宿にいらっしゃいました.新たなBVH構造を考えてやるぐらいの気持ちで色々やっていましたが,どれも上手くいきませんでした(今後も要検証).また,直近のHPGでH-PLOCというBVH構造が発表されており,パフォーマンスも結構良い感じなのでこれを実装しようと思いました.

詳しい話は書きませんが,結構手こずりました.というのも,動画や論文だけ見ても「言いたいことは分かるけど,このままだと実装しても動かないな」に陥るためです(あと多分論文内の疑似コードのpIDはparent IDではない気がする……).勉強のために論文内で参考文献にあげられているLBVHとPLOC++の論文を読んでコードを書いて色々頑張っていたらこんなBVHが出来ました.

たのしそう.原因は分かれば単純で,shared memoryに乗せて処理をするときに,近傍探索したときはコンパクションを行ってglobal memoryに書き直すのですが,近傍探索しない時にこの書き戻しを忘れており,結果としてデータの整合性を取れず変なバグになっていました.修正結果はこんな感じです.

直りました.大体三角面数150万のオブジェクトもBVH構築時間は18ms程度です.結構速いですが,恐らくもっと速くなる?

他にも色々実装はしているのですが,特に今回は音響処理をしてみたい!ということで音響処理周りのサーベイもしていました.ネットで資料を探そうとしても全然何もないことを知り,とりあえず本を買いました.

www.coronasha.co.jp

www.coronasha.co.jp

www.coronasha.co.jp

特に今回特に参考にしていたのは『音場再現』と『FDTD法で視る音の世界』です.前者は理論寄りで,後者は計算機上で扱うことに重きを置いております.後者を読みながら理論の確認に前者を読んでいました.とはいってもまだまだちゃんと読み進められていないので今後も勉強しようと思います.そもそもの音の伝搬のほかに,それを可聴化する方法も調べておりましたが,これもまだよく分かっておりません.これもTODOです.ていうかレイを飛ばしてください.

直近の大学の電磁界解析演習で使った数値解析ソフトの中身を実装したいなとは少し思っていたので,じゃあFDTD法やるか~~~って勉強し,とりあえず2次元のFDTD法は実装しました.

左は粒子速度で,右は音圧です.これに関しては「本当にこれでいいの?」で雑に書いただけなので,それっぽい挙動してるな~~~ぐらいで定量的評価はしてないです.ごめんなさい.

その後いろいろ勉強しており,CE-FDTD法という手法を知りました.サーベイ中に音空間解析におけるFDTD法を解説している論文を見つけて,そこに書いていました.

www.jstage.jst.go.jp

斜め方向の境界条件どないなっとる?って思ってましたが(普通に離散化すればいいのですが),次の論文にまとめられておりました.

Osamu Yamashita, et al, Reflective boundary condition with arbitrary boundary shape for compact-explicit finite-difference time-domain method, Japanese Journal of Applied Physics. 2015

う~~~ん,やっぱり同じ時間ステップ内部で音圧の値に依存関係生じるの嫌だな~~~でも嘘つきたくないな~~~と言いながらイイ感じに実装しました.これはshared memoryを活用して速く処理できるタイプのアルゴリズムです.

とりあえずボリュームレンダリングを実装して(レイを飛ばした!),スリット実験を実装して波の様子を見ました.3次元波なので少し見にくいですがイイ感じの波動性が確認されてます.

さて,じゃあ可聴化するぞということで,カメラの左右にマイクを設定し,そのマイクのある座標の音圧を取ることでステレオ2ch音源としました.そしてその音圧値をwavファイルに書き出すということをしていました.最初の方は実装ミスでこの世の物とは思えない凄い音が記録されていました.文字通り耳が痛かった.

……この方法は非常に単純な実装で,まったく定位感はありません.本当はカメラのボクセルモデルや人の頭部ボクセルモデルを置いておく,もしくは頭部伝達関数みたいなものを考える方が良いのでしょうが,これらに関しては今後のTODOです.ていうかレイを飛ばしてください.

FDTD法には安定条件があり,高周波数信号を正確に計算するためにはグリッドの解像度を上げる必要があります.こうするとメモリも足りず,計算も遅くなります.そのため,高周波成分に関しては直線近似してレイトレをしてあげる必要がありました(音線法).しかし,実装する時間が無かったため,これに関しては実装してません.レイトレ合宿なのに!?

なんやかんやあってレンダラを一通りまとめて提出しました.シーンも締め切り2日前くらいから本腰を入れて作成しました.

自前の環境で240秒弱で終わることを確認して提出しました.流石に間に合うだろ……w

TLE(Time Limit Exceeded)……!?お前……まさか……
AC,そのまさかだよ

本番環境の計算速度を甘く見積もっておりました.かなしい

レイトレ合宿開始!

前日は普通に大学の講義があるので大学への行き帰りでスライドを作成していました.実はレイトレ合宿の初日は普通に講義があり,しかもそれは専門の必修の実習科目であるため,色々と大変でした.

初日

朝から新幹線で熱海まで行きました.集合時間の30分前に到着したのでセミナー資料を書いていました.最初にうでめがねさんと合流し,そこからishiyamaさん,そして新幹線組と合流し,一旦熱海駅周りで昼ご飯を食べることにしました.昼ごはんの写真を撮り忘れたのですが,ラーメンと半チャーハンのセットを食べました.美味しかった.昼ごはんではレンダラの準備に関連する話題が多かったように覚えています.その後売店でみかんサイダーなるものを購入し,移動のバスの中で頂きました.みかんサイダーの味がしました.

バスを乗り終えると熱海の港に到着します.ここからは船での移動です!船での移動は20分ぐらいでした.一番上の階から海の景色を眺めておりました.

コースティクス
みゃーお
止まってる水は固体に見える.液体の本質は動きでは
意外とそうでもないかも

船が到着し,一歩踏み出すと初島へようこそのゲートが.そこをくぐって再びバスで移動し,合宿会場のホテルに到着しました.

ホテルはこれまで泊った中で一番豪華で,空間の使い方が凄い構造物でした.こんなところに自分が泊っていいのか……?という気持ちで移動すると何やら怪しげな看板が

なんだここはッ……!怪しいことが中で起きているに違いない!

wow......

凄い景色の会場です.ここがセミナーなどをする場所で,背景に海が見えます.良すぎる.いったん集まった後に各々の部屋に移動しました.

マジか,良すぎる.ここで荷物を整理し,また先ほどの会場に戻りました.開会式を終えて早速セミナーが始まりました.

最初のセミナーはushioさんによる3D Gaussian Splattingの解説で,個人的に3DGSのモチベが高まって論文を読んでいたので凄く興味深い発表でした.多分近い未来にNeRFと同様にフルスクラッチ?実装すると思います.

次はkugiさんによる蛍光に関するセミナーで,蛍光に関する性質がまとめられておりました.私は電気電子工学の人(とは?)で,半導体などの材料の発光などに関する勉強を大学でやってるのでこれも凄く自分の専門に近いなあと感じました.

次はSomatic Cellさんによるニューラルネットワークを用いたBRDFの評価に関する論文の解説でした.これも一回やってみたい~~とぼんやり思っていた手法で一回も試していなかったものだったので,実際に論文として発表されてて,良い精度を出しているのを見ると面白いです.想定以上に学習時間が長いのも驚きました.

休憩をはさんで,OgakiさんによるARMでのSIMDを用いた最適化に関するセミナーでした.結構抽象的な内容ですが,ビット操作処理が特に面白かったです.この時間帯は丁度夕方で,セミナー室から見える後ろの海も夕暮れに染まっていきます.

次はPocolさんによるハードウェア最適化の恩恵を受けるフォトンマッピング法に関するセミナーです.フォトンの密度推定時の半径探索を改善してASを使用してGPUの専用コアで解くというアイデアです.基本的な手法から段階を踏んで説明されており分かりやすいセミナーでした.

次はがむさんによる,つぶやきGLSLの解読でした.つぶやきGLSLというものはTwitter(!)で140字以内270字以内(つまりTwitterのツイートにおさまる範囲)(2024/10/23 22:15更新)でGLSL作品を作るコードゴルフみたいなもので,その制限ゆえに非常に難解な記述がされており,それを読み解くセミナーでした.実際にその場で変更を加えながら出力の変化も見えて面白かったです.

次はこの日の最後のセミナーで,holeさんによるNaNに関する解説でした.NaNの発生条件,qNaNやsNaN,規格などの話があり,コンパイラによっても挙動が違うのはマジか,って感じでした.

セミナーが終わり,さて夕食!というわけで移動の準

「NaNの歌を作りました!」

おもむろに配られるサイリウム

気づけばサイリウムを焚き,腕が動いていた……

備をして,夕食に向かいます.夕食はコース料理で,一品ずつ料理の説明がなされるのが凄い……でした.料理も十分な量で,味もとても良かったです.

夕食の後,入浴を済ませてセミナーの準備をしていましたが,せっかくなので部屋のメンバーと星を見に行きました.屋上に出ると自分たちの他には誰もおらず,涼しい風が吹いてました.遠くには熱海港の街並みが小さく見え,反対方向は真っ暗でした.肉眼でもたくさんの星が夜空に見えており,星空そのものでした.

スマホで空を撮ってみました.

……
NaNが出てるわけじゃないです.一回部屋に戻り,デジカメをもってSomatic Cellさんともう一度屋上に上がりました.Somatic Cellさんの三脚と星空撮影用機材をお借りして何枚か撮ってみました(カメラ: Canon PowerShot G7X).

右下にオリオン座!

真ん中にオリオン座!

必要十分オリオン座

真ん中少し左にカシオペア座

一通り満足したので部屋に戻りました.3時になっており,皆寝てるか……と思ったらまだ起きていました.セミナー資料つくらないといけないけどまあ正味最終日だし間に合う……と思ってました.まさかあんなことになるなんて……

2日目

朝は皆の動く音で目覚めました.夜型なので......
朝食も豪華で,8品の小鉢が来たときはビックリしました.

さて,朝ごはんを食べると早速セミナーのお時間です.最初はhamityさんの,レンダラ作成記でした.NEEを実装出来ているのであればMISはすぐ出来そうだなと思いました.

次はyumcyawizさんのReSTIRの理論説明と実装の話でした.今回のレイトレ合宿もですが,ReSTIRを実装してみようとは思っているのでこのセミナーを元に勉強していこうと思います.

次はKiuchiさんのレイトレとVRに関するセミナーでした.途中で音響の話になったときに自分の今回のセミナーテーマ(空間音響処理)とまさか重複する内容が出るとは,と思いました(こちらは音線法に関する話だったのでちゃんとレイトレである……)

次はishiyamaさんのレイトレで解ける問題に関するセミナーでした.こちらも音線法の話になり,こんなに被ることある?と思っていました.光の幾何近似の妥当性の説明も書いていて,少し前に勉強したときの内容を思い出しました(左貝 潤一『光学の基礎』1997.を途中まで読んで放置しているのを思い出した……).

次はshockerさんのGPGPUでのOne Sweep Radix Sortアルゴリズム,Decoupled Look Backについてのセミナーです.現在Sortの実装をすべてthrustに任せっきりなので今後は自分で書き直そうと思っていたところでした.内容も丁寧に書かれています.

次は午前の最後のセミナーで,elcmistさんのリアルタイムなポータルエフェクト(BRDF?)に関するセミナーでした.最近BlenderBRDFに追加されたポータルBRDFを見たばかりだったのですが,リアルタイムで出来るとは思ってませんでした.

さて,昼ご飯はホテルの外で食べることになりました.どこに行こうか……ととりあえずご飯屋が沢山ある港のあたりまで皆と(!)歩いていく途中でイイ感じの坂があり,良い景色が見えました.

ご飯屋についたものの,これが混んでました.とりあえず全部見て時間的にも良さそうなところでご飯を食べました.

刺身の身が厚くて美味しかったです.本当は少しだけプールに入りたかったのですが時間的に厳しそうだったので諦めました.

午後のセミナーです.最初はたたさんの……音線法に関するセミナーです.そんな,私のセミナーで話せる内容が遂に波動解析だけになってしまった.もっとも音線法のスライドは用意していなかったのですが(ええ).事前に打ち合わせたわけでも無いのに音に関連した話があったセミナーが3つもあったのは驚きでした.

次に,kiNaNkomotiさんのProjective Geometric Algebra入門でした.これは射影幾何代数という数学の分野らしく,幾何的な操作を代数的に扱う数学みたいです.私はこの分野を知らなかったのですが,代数演算によるブール演算や交差判定の表現は非常に面白かったです.

次に,NishikiさんによるHash Tableの話でした.Hash Tableは大学の講義で扱われており,(結構忘れていたのですが)復習になりました.記憶が混じっていなければ応用先の話についても書かれており,InstantNGPで使われているHashTableの話を質問しておけば良かったと思っています(スライドが公開されたらもう一度読み返してみます)

次に,elkさんによる光源のサンプリングの話でした.これは点光源の話なのですが,私がNEEで面光源をサンプリングするときには光源の強さ(と面積の積)で重みづけしていました.BVHのサンプリングの話は初めて知りました.

次に,ykozwさんの,逆数2重根の近似の話で,そこに現れる非常に不思議なマジックナンバー0x5F3759DFについて考察するという話でした.簡単なモデルを置いてニュートン法でパラメータを探索すると良いマジックナンバーを得ることが出来るっぽいのですが,このタイトルの値は結局のところ不明らしいです.調べてみると1700年ごろにはニュートン法という概念は存在していたらしく,では指標を変えたらこうなったのかもしくは本当に良い感じの値を選んだのか……

次がこの日の最後のセミナーで,Pentanさんによる最適化によるRay-AABBの交差判定(の嬉しくなかった話)でした.概念としては今まで頭になかったもので,個人としては斬新ではあったのですが,やはり遅いらしく無念……です.ただ他に何か応用先があるかなあとは考えてみようと思います.

セミナーが終わり,レクリエーションのお時間です.わいわい.昨年度の雰囲気を知っているので今年はどんなものが出てくるんだろうと思っていたら突然配布される箱,蓋を開けると……

なんだこれは.とんでもないことが始まりそうです.中身は500ピースのCrytek Sponzaで,これを時間内にどれだけ組めるかというバトルでした.制限時間が短いため,もう右端を組むことは難しいと判断し,左側の色がついているところを組もうということで,2人が色で分類し,1人がパズルを解いていくという構造で進めていきました.人数も3人であり,何となくICPCを彷彿とさせました.

グワーッ

時間切れです.私のチームは確か3位か4位だったと思います.優勝したチームにはなんと!あの!

(ここに画像を貼り付けたかったが,写真を取り忘れていた)

Cornell Boxのお手軽ジグソーパズルでした.これならいつでも遊べて何なら外出のお供にも出来ると思うのでとても良い景品だなと思いました.

さて,レクリエーションが終わったら遂に本戦です.今回は22個のレンダラが提出されたそうです.てか普通に自作レンダラが22個集まる合宿って凄すぎるな.どれも面白い発表でした.発表を聴いて初めて気づくような技術が組み込まれていたりして,自分の目もまだまだだと思いました.今回はeclmistさん,shockerさん,Ogakiさんの作品を特に高く評価しました.

eclmistさんの作品はそもそもレンダリング結果が綺麗なのもですが,映像の世界観が凄く好きでした.環境テクスチャの途中で切り替えるところや,発表で話されていたGUIエディターもですが,これは内部構造がしっかりと整理されていないと途中で壊れて投げ出してしまいそうだ……と思いました.

Ogakiさんの作品を見たときの純粋な感想ですが,CPUでこんなことできるんだ……でした.Ogakiさんが話されるレンダラ実装の哲学には凄く共感できるので,より一層精進したいと思いました.

shockerさんの作品は純粋に画が綺麗でした.まず私はコースティクス大好き人間なのですが,それが時間方向に安定して見えていて,さらに疑似的ではなくスペクトラルレンダリングによる分光模様が見えているのが凄く良かったです.さらにはこれを側面から見てボリュームレンダリングで光路を可視化するというものは視覚的にも凄く良いものでした.

色々な発表を聴いていると私の名前が呼ばれました.私は11位のようでした.昨年度はバグでクラッシュしており順位が付かなかったので,今年はちゃんとこういう形で順位が決まるのは嬉しかったです.来年はもっと良い順位を取れるポテンシャルを持たせたいです.私のレンダラ紹介スライドは次のリンクにあります.

speakerdeck.com

ちなみに自分のレンダラには8点を付けました(満足度としては90%程度だと思っていたので,補正をして8点).来年の自分は何点を付けるでしょうか.

本戦が終わり,晩御飯でした.和食で,どれも美味しかったです.最後の氷菓子も非常に濃厚で良かったです.

氷菓

さて,晩御飯が終わり,部屋へ戻って自由時間でした.私に自由などなく,セミナーの資料を書いていました.どうして毎日チョットずつやらなかったんですかァァァ…ッッ

その私の隣では例の500ピースジグソーパズル Round2が繰り広げられていました.たまに覗きに行ったら少しずつ進んでて面白かったです.さて,諸々の後,再び部屋に戻ってセミナー資料を書いていたのですが,なんだかんだでここ6日ぐらい睡眠時間4時間半とかで暮らしていたので流石に体力の限界が来たみたいです.途中で視界が揺れ始めたあたりで限界を感じて仮眠をとることにしました.揺れの周期は0.4秒ぐらいでした.文字を読むのが結構大変だったのでここで止めたのは結果的に良かったと思います.アラームを大量に付けてソファで仮眠しました.

起きないと終わる……という気持ちでアラームに起こされました.起きた自分はまずアラームを全部止めるところまでは順調だったのですが,なぜかソファに再吸収されていきました.ヘテロ接合構造でもあったんですかね.

最終日

……

……

んっ……外が明るい……

明るい!?

終わった____

起きたら6時でした.流石にヤバいということで急いでスライドの続きを作り始めました.……そして時間は8時,流石に発表に行かないといけない.

ということで凄く散らかっている資料のまま発表が始まりました.表紙に私の名前さえも書いていない.

(がむさんのツイートを引用)

本当はちゃんと全部説明したかったのですが,凄く表面的な説明に終わってしまったのはかなり悔やまれます.セミナー資料自体はクオリティの面で公開しませんが,いずれにしてもこの分野はネットで見える記事が少なすぎて取り掛かりが難しいので,よりロバストな実装が出来たらいつか記事にしようと思います.

私の発表が終わり,次のセミナーはうでメガネさんによる,レンダラ間での単位の話でした.この辺は実装者目線では結構重要な問題で,たまにアーティスト目線のパラメータ名(「強さ」みたいな)があると(直観的に操作は出来ますが)デバッグ時に困ることがあります.

次はZinさんによるHierarchical Sample Warpingの精度に関するセミナーでした.私はこれは恐らくちゃんと理解は出来ていないのですが,誤差の分布を見ていたいなと思っていました.記憶が正しければdoubleで計算されているので数値精度に関してはある程度は問題ないとは思うのですが,数値精度的に難しい非常に大きな値が入りうる場合があったのかとかはセミナー資料をもう一度じっくり読み返してみないと分からないです......

次はPheemaさんによるリー代数による3次元回転でした.数学第二弾ということで,回転操作を扱える代数演算の話でした.私は回転といえば行列でのアフィン変換やクォータニオンしか知らなかったのですが,いろんな方法があるんだと勉強になりました.この行列のことは覚えています.

次が最後のセミナーで,ハガさんによるマイコンでのレイトレです.電気電子工学科の私は歓喜しました.実際にデモも提示され,このハードウェア上で計算されているんだなあと感慨深い気持ちになりました.私も最初の方に書きましたがFPGAでレイトレをしたいです(現時点で何で詰まっているかというと,通信です).

全てのセミナーが終わり,片づけです.この片付けの時に,例の500ピースジグソーパズルを私が持ち帰ることになりました.

片付けを済ませてセミナー室へ行き,閉会式が始まりました.

セミナー賞や本戦の順位などが発表されました.本戦の順位によって景品が与えられます.本戦1位はshockerさん,セミナー1位はholeさんでした.おめでとうございます!
私は11位で,Monte Carloと書かれたポーカーのコインを頂きました.

モンテカルロ法の本質が詰まっている

見た目に寄らず意外と重いです.これを集めると,装備しなくてもサンプリング戦略スキルが向上しそうです.最後にいくつか写真を撮ってホテルを後にしました.

景品を組み合わせた系
景品を組み合わせた系その2

港に到着しましたが,やはり3連休というのもあり,混んでました.ご飯を食べるのは諦めて,船を待っている途中にお土産を買いました.ほかにもアイスクリームを買いました.

海!
アイス!

船に乗るか~~って向かうとすごい列があり,乗れるか不安でしたが何とか乗れました.行きの時には最上階で載ったので今度は最下階で乗ろうと思ったのですが,外が全く見えずただ揺れているだけで,ここにいたら僕でも普通にきついかもになったので外に出ました.

みゃーお
みゃあみゃあ

港に着いたらバス移動をして熱海に到着しました.そこで解散しました.本当は伊豆の方に行ってみたいと思っていたのですが,意外と遠くて厳しいなあという結論に至り,寄り道せずにそのまま帰宅しました.途中でレンダリング結果を簡単な説明と共にツイートし,これでひと段落だと思いました.

......

まだやることがあります.

対戦!500ピースのCrytek Sponzaパズル!

私は部屋の皆の意思を受け継いでパズルを持ち帰りました.これを済ませないことには.

帰宅して晩御飯を食べて,机の上を掃除してスペースを作り,そこに持ち帰ったパズルを広げました.結構崩れてしまっており,マジか~~って感じでしたが,やるしかないという気持ちで始めました.

最初の方はまあ普通にパズルなのと,一回やってるのもあって結構スムーズに行きました.一旦ここで寝ました.

昼に起き,早速取り組み始めました.微妙に見える赤いカーテンの模様を頼りに組み合わせていきました.

合計7時間で完成しました.右半分はマジで情報が少なくて,形状でグループ分けしてその中身を探索してました.Top-down型のクラスタリングですね.

倒すことを想定されていないゲームのボスを,無理やり倒し切った感覚でした.楽しかったです.

……

もうひとつやるべきことがあるかも!

対戦!昨年度のレンダラ

記事を書いている時点での今年のレンダラと,昨年度提出したレンダラの比較をざっくりしてみようと思いました.シーンは昨年度の提出したシーンで,アニメーションは当時はハードコードで今回はBlenderからの出力なので,両者は完全に一致しませんが何となく比較しました.レンダリング自体の設定は同じで,レンダリング時間が昨年度の規定(300秒)を超えない最大のサンプル数で比較しました.

[昨年度の結果]

[今年度の結果]

明らかに違いますね.正直なところ昨年度はフィルタリングを強烈に掛けて無理やりノイズを消してるので見た目が(これはレイトレ……?)って感じです.今年は軽めにフィルタリングしてるのでちゃんと影などが保持されています.そもそもの話ではフィルタリングをしない方がまあ好ましいので……

さて,前回は1sppが上限で色々頑張ってましたが,今年のレンダラでは29sppまで回せました.単純計算では29倍の速度向上となります.また,前回のレンダラはCPU側でSAH-basedのBVHをTop-downで愚直構築しているので,構築に2秒かかってました.今回はH-PLOCをGPU上で構築しており,構築に要した時間は1.64msでした.レンダラの速度性能向上の理由はBVHもありますが,交差判定の処理を大きく書き直したのも影響していると思います.まあ昨年度が遅すぎたのもありますが,交差判定処理はレイトレの実行時間にクリティカルに影響するのでこんなことになります.ここは今後も自分で書きたい.ほかにもレイトレのLaunch部分の処理を書き直していることによる数十%程度の処理性能向上があります.ここもより良い処理方法を考えているので今後も改善していきます.

来年の自分が今年度の私のレンダラを大批判してくれることを期待してます.余談ですが,OBJファイルでのカメラのアニメーション出力は,三角面を設定し,カメラにconstraintを追加してこの三角面に設定し,この三角面情報をOBJ読み込みしてその三角面情報からカメラの姿勢を設定しました.

最後に

とても3日間とは思えないボリュームの合宿でした.運営の皆さん,本当にありがとうございました.来年はもっと強くなって帰ってこようと思います.自分で新しい手法を作り出すぐらいの勢いで色んなアルゴリズムやデータ構造を貪欲(一般用語)に使って高速化していこうと思います.また,高速化を今年はメインで考えましたが,やはり表現力が少し乏しいと感じたので新たなマテリアルなどを追加する方向性も再び持とうと思います.これからも頑張ります!