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

こんにちわ、Pocolです!
毎年恒例のレイトレ合宿に参加してきました。
ついに第1回合宿から連続で作品提出しているのは,ykozwさんと私だけになってしまったので,どんなにへぼくても何とか来年も作品提出できるように頑張ろうと思いました。

本戦

今年は最多の22作品+1エクスビジョンという結果になりました。

さて、今年の私の提出作品ですが,下記のような作品を作りました。


ソースコードは下記にて公開しています。
https://github.com/ProjectAsura/ponzu/tree/rtcamp_2025

実装概要ですが,下記のような感じです。

今年はブリキのおもちゃ感をテーマにレンダリングしてみました。
まぁ、実装の方は大したことやっていないのですが,RISを導入してみました。
気持ち収束が早くなったかな?という感じがしていますが、ちゃんと比較していないので気のせいかもしれません。

昨年までは乱数生成にPCGを使っていたのですが,今年はAndanteさんのブログで紹介されているIbuki Hashに変更してみました。サクッと差し替えできるのでお勧めです。

あと、去年まではお手製デノイザーを使っていたのですが、このデノイザー内でクロスバイラテラルフィルタを使用していたのですが,この関係で最終出力結果がボケボケな絵になってしまうということが分かったので,今年は思い切ってクロスバイラテラルフィルタを一切使わないという割り切った実装にしてみました。そのおかげでスペキュラーがいい感じの見た目になるようになりました。

アセット作成にはAsset Forgeを使用しました。


Kenneyさんのサイトで配布しているキットバッシュとAsset Forgeを使って,レベルを作りました。
Asset Forgeを初めて使う状態でしたが,操作が簡単なので2時間ぐらいでレベルを作成しました。何とか間に合ってよかったです。お手軽にシーンが作成できるようになったので、来年も使おうかなとおもっています。おススメです。
 ちなみにAsset Forgeは下記から購入できます。日本円で約3000円ちょっとでそんなにお高くないので,自分で配置シーンツールとか作るのがかったるい人には良いと思います。
https://kenney.nl/tools/asset-forge

セミナー


今年も、非常に盛りだくさんの内容でした。
また、皆さんのセミナー資料がアップされたら、順次取り上げていこうと思います。

今年度は本当に時間がなかったので、比較的に誰にも分かる内容かつ知らない人には役立つ内容ということで,DXR 1.2の機能紹介をちらっとやりました。
以下に資料を上げているので,興味ある人は見てやってください!

…ということで本業で忙しい状態でしたが、今年も何とか参加できて良かったです。
このあと、参加者の方から続々とレポートが上がってくると思われるので,そちらも楽しみです。
みなさん、レイを飛ばしましょう!では。

レイトレ合宿の季節ですね!

こんばんわ、Pocolです。
レイトレ合宿の季節になりましたね。

そういえば,去年のレイトレ合宿については何も書いていないような気がしたので,書いておきます。
昨年の結果は下記ページから確認できます。
https://sites.google.com/view/rtcamp9

私の去年のテーマは「GGXで描画する!」というものでした。
完全な鏡面反射では面白みがないので,すこしグロッシーな反射を描画したい。…と思いレンダラーを書いてみました。

ソースコードは下記にあります。
ponzu


実装としては,DirectX RayTracingを用いています。
デノイザーはクロスバイラテラルフィルタを使う単純なものです。
アセットはKenny Blaster Kitを拝借しています。

プログラム作成はかなりトライアルアンドエラーを繰り返すので,昨年からシェーダリロードに対応するようにしました。
今年はもうひとつ進めてblinkを用いたC++側のホットリロード対応しようかなって思います。

PNG出力はやっぱりfpngが圧倒的に速いので,昨年も用いました。恐らく今年も用いると思います。
https://github.com/richgel999/fpng

シーンデータはFlatBuffersを利用しており,デシリアライズの時間が短くなるようにしています。
https://github.com/google/flatbuffers

さて,今年開催されるレイトレ合宿10ですが,ルールや実行環境は下記の通りだそうです。
https://github.com/shocker-0x15/rtcamp10_setup/blob/main/exec_env_spec.md
今年は,256秒で描画しないといけないそうです。出来るだけ無駄なくプログラムを組まないといけないですね。
今年の参加エントリーはもう締め切られているため,レイトレ合宿への参加に興味がある人は,日頃からレイトレのプログラム画像をX(旧Twitter)などにあげると良いかもしれません。

ReSTIRがサッパリ解からない。

この記事はレイトレ合宿9のアドベントカレンダー2023 7/13の担当分の記事です。

こんにちわ,Pocolです。
最近,ReSTIRを調べているのですが,未だにサッパリ解かりません(特にGRIS周辺)。

今回は,自分の理解を促すために自分なりにまとめたスライドを作ってみました!
しかし,内容をサッパリ理解していない人が作っているスライドなので内容が盛大に間違えている場合があります。
間違いがあった場合は,間違い箇所の指摘とその修正例を教えて頂けると大変ありがたいです。あるいは,「そういう説明よりもこういう説明の方がいいよ」とか「この項目の説明抜けてる!」とか,アドバイスも貰えると嬉しいです。
または,有識者が分かりやすい解説記事を書いてもらえると大変助かります。
あと,論文の内容を切り貼りしている関係で,数式の表記ゆれがあります。予め注意してください。

レイトレ合宿8に参加してきました!

こんにちわ。Pocolです。
先週,レイトレ合宿8に参加してきました!

今年の開催地は沖縄ということで,台風11号が迫る中参加してきました。
台風が来ているせいで,まず現地に行くのが通常よりも難度が高いw。

金曜日到着の前泊組は問題なかったそうなのですが,自分は土曜日到着組だったので,
羽田空港から出発する便が,条件付き飛行になってました。

空港でも,「機長が着陸が難しいと判断した場合は羽田空港に引き返す恐れがありますので,予めご注意ください。」とアナウンスされている状況。
台風だからだと思うのですが,乗客も非常に少なかったです。でも,こんな中でも乗る人意外といるんだなと思ってびっくりしました。

現地についた瞬間はあまり雨が降っていませんでした。

しかし,タクシー載るころには豪雨状態。
さらに風も強くなってきたので,傘だと風でひっくり返ってしまってダメですね。
レインコートも持って行ったのですが,山用のやつだったので,夏だと暑いですし,上下セパレートしているので装着も面倒で結局着ずじまいでした。
ポンチョみたいな簡単に着れるやつを今後常備しておこうと思います。

さて、今年のレイトレ合宿の宿はVilla VALISOAで,これが滅茶苦茶良かったです。
詳細はWebページ見て欲しいのですが,写真詐欺も無く本当にこのままで,非常に綺麗でした。水着を持っていけばジャグジーやプールも入れます。
バスとトイレ・洗面所が隣同士なので,誰かが風呂に入っている最中はトイレを利用できなくなるというのが唯一の不便なところでした。2階にもバス・トイレ・洗面所があるので,そちらを利用することで回避も可能です。

ちなみに1階はガラス張りで外が見えます。ブラインドもついているので,下げた方がいいです(浴室隣の部屋から見えてしまいます)。
朝食等は2階にキッチンがついているので,各自で作るという感じのスタイルだそうです。食器等も一式揃っています。

2階から見える景色も非常に良かったです。台風が来ていなければ素晴らしい景色だったんだろうなと想像されます。
また,沖縄に行く機会があれば,再度利用したいなと思いました。
宿の話はこれぐらいにして…

今年はセミナーが非常に多く充実していました。

…などなど。

ちなみに自分は,キャラクターレンダリングについてお話させて頂きましたが,大した内容ではないので一般公開する予定はありません。もうちょい話せるネタが溜まったら,どこかのイベントで話せるときが来るといいなーって思っています。
飛行機に乗っている時間にあったセミナーについては聴くことが出来なかったので,Zinさん,うしおさん,Shockerさんの生のプレゼンを見れなかったのが非常に悔やまれます。あとで資料をじっくりみたいと思います。
今回,セミナーで収穫があったのは,きなこ餅さん,PathtracingにおけるCausticsレンダリングについての資料で,Manifold Next Event Estimationの説明があったことです。これ論文見てもよーわからんなーって思っていたのですが,非常にわかりやすい説明で,そういうことだったのか!と納得できました。これで一気に論文が読みやすくなりました。

昼飯は車で少しいったあたりにある タコライスcafe きじむなぁ恩納村店 でタコライスを頂きました。

昼飯を食べ後は,デノイズ部門と本戦です。
まず,今年新設されたデノイズ部門でしたが,人によって異なる特徴を持つデノイズ結果が出ており,非常に興味深くそこが面白かったです。自分は余力が無かったため,エントリーしなかったのですが,次回開催するときもデノイズ部門があるようであれば,エントリーしてみたいなと思っています。

デノイズ部門参加者はみんな機械学習系が来るだろうと構えていたみたいですが,意外とみんな普通に書いていたみたいです。
決勝はykozwさんとholeさんとyumcyawizさんの戦いでした。
ちなみに,holeさんとyumcyawizさんは,ベース手法としてNL-Means (Non Local Means)フィルタを使用していて,接戦でした。
ykozwさんの手法は,明るさなどが他の二人と比べていてリファレンスに近い明るさが出ているなど,優れている部分もあり決勝は投票が非常に難しかったです。
今回のデノイズ部門はみんな投票悩んでいる感じで,会場にいて全体見るとこっちがよさげなんだけども,部分的にみるとなぁとか,自分も同じ感じで悩んだりしていて,その雰囲気も面白かったです。

今年の本戦ですが,色々な作品があって面白かったです。
意外とみんなカットとか変えないだろうなと予想していたのですが,やはりレンダリング野郎の集いなので,色々と凝っていてレベルが高かったです。
自分は今年は,GPUレンダラー作ったことが無かったので,とりあえず動くものを作れれば順位とか気にしないという,スタンスでレンダラー書きました。
テクスチャアニメーションとかリアルタイムっぽいのを使う人はいないだろうと予想したので,特徴としてテクスチャスクロールするだけのテクスチャアニメーションを入れました。本当は綺麗なコースティクスを出したいなぁと思ったのですが,提出2日前に全然バグの原因がわからず,そのまま提出したのであんまりレイトレ感が無いので,次回はちゃんとレイトレ感がある作品を提出したいなぁと思います。
あと,提出間際にシーンを変更したりとか色々とやっていた関係で,もとのIBL画像がバグって表示されるという残念な結果になるのを全然確認できていなかったので,このあたりもきちんとデバッグしておこうと思います。
とりあえず,GPUレンダラーのベースがある程度できたので,バグを取り除いて来年も使えるレンダラーに育てていきたいなと思っています。

Shcokerさんとかうしおさんとかの作品見ていると新しい技術取り入れていていいなぁーって思いました。新しい技術は積極的に取り入れていきたいです。

今年ビビったのが,holeさんの作品で見ると分かるのですが,ノイズが無いです。これが一番,驚きがありました。しかも書いたのが提出日当日とかって化物じみていてすげぇなぁっていう感想しかないです。

今年の結果見ると,次回のレイトレ合宿の本戦はどんなハイレベルな戦いになるのか予想が全くつきませんね。
次回も非常に楽しみです!
こうした楽しいイベントに参加できるもの,きちんと運営してくださる方があってのことなので,非常に有難いです。いつも本当にありがとうございます!

もし,レイトレ合宿の次回開催に参加したい人はTwitterで自作レンダラーの画像をいっぱいアップロードしておくと良いかもしれません。
レイトレ合宿楽しいぞ!! 君もレンダラーを書いてみないか?

以上です。

レイトレ合宿6に参加しました。

こんにちわ。
Pocolです。

今年もレイトレ合宿に参加しました。

今回の開催地は神津島で,海がもの凄く青くてとてもよかったです。

昼はholeさん達とバーガー食いに行きました。


バケツポテトは残念ながら上げ底されています。
夕方になると,ホテルからは夕陽が見られ,とても綺麗でした。

さて,レンダリングの方ですが
順位はブービーでしたが,エースコンバット5好きなので,ブービーでもいいかなと思っています。…というのもの、今年準備が間に合いませんでした。個人的には順位はどうでもいいんです。参加することに意義がある!!
ちなみに描画はこんな感じです。

いくつかのフレームで黒画面が出るのはレンダリングが間に合っていないという仕様です(設計バグ)。

本当はボリュームレンダリングをする予定でしたが,間に合わず提出日当日になって,急遽方針を転換してパストレで行くことにしました。
最終提出日にエラーが発生してレンダリングされないなどの不具合があったので,レンダリングされただけもでも御の字かなと個人的には思っています。(本当黒い画像しか表示されないと思っていました)
Next Event Estimationの実装や交差判定処理箇所の設計見直しなど,1日で出来そうなことはとりあえずやりました。所々バグがあるのはまあ実力無さなので,そんなものでしょう。

今年はアニメーション部門に応募しました。
1フレーム12秒でレンダリングして60枚を出力することに目標にしました。
他の静止画部門の方々と比べるとレンダリング時間は1/10程度なので,ノイズまみれだし,特に何にもやっていないので汚いっちゃ~汚いです。(むしろ,こっちは10倍近くサンプルが少ないので,他の人の方が10倍近く綺麗じゃないとそもそもおかしい)
アニメーション部門に応募してみて,色々と課題とか問題があって難しいなと感じる部分を「面白いな」と錯覚してしまったので,来年もアニメーション部門に応募してみようかと思います。人と同じことをしていても面白みがないので,他の人がやらない分野には積極的に力を注ぐひねくれた人ですね。何よりも静止画よりも動画の方が個人的には血が騒ぎます。やりがいがあるし,やっぱり動くものは面白い。

あと今年はシークレットイベントとして,「レイトレ検定」が行われました。

特に難しかったのはサンプリングを選ばせる問題です。皆さん,これ分かります?

自分は,6問中3問正解できたようでした。まだまだ勉強が足りませんね。
検定の最終結果は77点で,何とか赤点は免れることができました!

来年はもう少し落ち着いてレイトレ合宿に時間を割けると思うので,来年こそは頑張りたいなぁと思います。GPUレイトレーサー書きたいなぁ…
日々是精進ですね。

来年も是非参加したい!
レイトレ合宿運営の皆さん,どうもありがとうございました。

レイトレ合宿6Ω

こんにちわ。
Pocolです。

明日からレイトレ合宿6です。
今年の開催地は神津島ということで,ワクワクしています。

合宿終了後にレポートを上げる予定なので,
楽しみにしていてください。

毎年忘れるので

レイトレ合宿の季節ですね。
毎年,提出する際にDLLの同梱を忘れて実行できないことが多々あるので,忘れないようにメモっておこうと思います。

基本的にDependency Walkerで依存を見つけておきます。
次に,動作確認ですが自分の場合はまっさらなマシンで確認します。
さすがに物理マシンを用意するのは面倒なので,仮想PCを用意してWindowsをインストールした直後の状態で起動するかどうかチェックしています。

今回ハマったのは,dllを持ってくる場所。
最初はWindows/SystemWow64あたりから持ってきていたんですが,どうも起動しない。
ググってみたところ,VC直下から持ってこないとダメっぽいです。

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.CRT
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.OpenMP

からDLLを持ってきたところ正常に起動するようになりました。

起動に必要だったのは
msvcp140.dll
vcomp140.dll
vcruntime140.dll
の3つでした。

来年からは実行の際に忘れないように…。

レイトレ合宿に行ってきます。

今年もやってまいりました。
そうです,レイトレ合宿です。

今日・明日と2日間参加してきます。
今年は作品と呼べるものは作れなかった。
今年の失敗を忘れないようにメモとして残しておこうと思う。

そもそも,レイトレに関しての知識がゼロに等しいので,
去年まで作ってきたプログラムはバグが多く,今年は捨てて来年に向けたベースコードを作成することにした。

…でも提出3日前で下記のような状態。

何も表示されなくなって,かなり焦る。
原因はわかっているので,そのまま放置して実装を進める。

あと今年の提出2週間前のテストで,起動できない問題にハマった。たぶんDLLが問題。
OpenMP使っているとdllとか必要になるらしいので,脱OpenMP化した。

これで絵がでるはず!

…と思って,試しにレンダリングさせてみる。
何か絵は出たが,どうもおかしい。その時の描画結果が下図。

OpenMPの時はグローバル変数で参照していたのだが,流石にまずいだろうと思ってスレッドごとに別データにするようにしたら,上記のようなバグが出た。
で,上にも書いてある通りに乱数の更新をしないため,ずっと同じ値を参照していたようで変な結果になっていた。
乱数更新を計算後に入れ忘れていたので,更新するようにしたら解決。焦る焦る。

この時点で,まだメッシュは未対応。これが提出前日です。
ヤバい感じが出てきたので,そろそろメッシュを表示しようと思って対応を始める。
メッシュフォーマットを大きく変えるとめんっどちいので,昨年まで使っていたやつに修正を加えて,表示を試みる。

絵が出た!

よくみると,ちゃんと表示されている。
…が,たぶん普通の人には分からないだろうと思って,ネタとして投稿した。
ご覧のように,全く最適なしていないため計算がゲロ重くてレイが全然飛ばない。
結局前日は,BVHを8割ぐらい実装したところで,力尽きて寝た。

提出当日。
実家から自宅に帰る前にBVHを実装。いざ実行!

「…スタックオーバーフローだってさ」

またもや,バグる。
あぁもう!!なんで~

デバッグ時間が取れないまま実家を後にして,自宅に向かう。
移動時間で2時間をロス。
夜飯を買いに行く時間が無いと思ったので,帰り際にコンビニで昼食と夕食を購入し,自宅に到着。
BVHのデバッグを開始。

「うん!さっぱりわからない…」

時間をものすごく使いそうだったので,SAHの実装は諦め中間分割の実装に切り替え。こっちのほうが実装楽だし,時間が無いということで。
で,ようやくBVHが入る。

メッシュの位置を直すのもめんどいので,そのまま。
実装終えたところで,もう時間が5時間を切っている。
ここから,QBVHの実装に入る。
QBVHは一度躓いているので,サクッと実装できた。
で,実行してみると…

「なんか,普通のBVHよりも遅い」

以前実装したときは,BVHよりも確実に速かったのだが,どうも体感的に何も感じない。
で, またバグっていた。衝突判定の実装ミス。
無駄な計算をかなりやっているコードになっていた。焦ってコード書くとろくなことにならないね。皆さん落ち着いて書きましょう。
直したところで,実行。
時間計測するコードを書く時間も惜しいので,レンダリング画像を目視して確認。とりあえず,速くなっているっポイ。
続いて,OBVHの実装に移る。
こちらも,すんなり終わるかと思いきや…。

「なぜかビルドエラーが出る」

なんか,_mm256_cvtss_f32() が無いって怒られる。なぜだ?clangのドキュメントには書いてあるのに。
残り時間も3時間ぐらいになってきたので,ネットの情報を元に自前で関数追加してビルドエラーに対処。
自宅のメインPCがAVXサポートしていないので,サブに使っているノートPCで動作チェック。
とりあえず,絵は出るっポイ。

ここで,残り時間が2時間。
流石に,IBLをMISを入れるのは無理と判断。
最終レンダリング用のアセットをここから探し始める。一応,用意していたアセットはあるんだけども,あんまり見栄えしないのでボツにした。
で,もう時間もなく探している時間もないので適当に基本形状を配置することに。

プログラムが起動できない問題が解決できていないので,ようやくチェックすることに。

Visual Studioでexe起動時にログ出力されるdllを取り合えず片っ端から,batでコピーして実行ファイルに同梱してみたのだが,上の結果。
とりあえず,エラーを再現するために,Virtual BoxにWindows 7をインストール。
VirtualBoxで動作させてみたら,案の定同じエラーが出た。
で,結局DLLが問題っぽいので,DLLを使わないようにVCのビルド設定で「マルチスレッドDLL」になっている設定を「マルチスレッド」に変更して,軌道を試みる。

「お、出た」

これで,めでたく起動した!
この時点で,残り時間が既に1時間を切っている。

流石にそろそろzip用意しないとまずいので,提出用スライドの作成に入る。
前日に力尽きて寝る前に,色々とページ作っていたけど時間が無いし,今年は負け戦なのでアピールするべきことも無いのでバッサリ省略。
スライド作成中にレンダリングをさせておいて,最新のレンダリング画像を添付。

exeの起動を確認して,急いでzipに固めて提出。
残り時間20分。

レンダリング画像を見ると,やっぱり背景がどうも気に入らないので
HDR画像を差し替えて,シーンファイルも更新。
起動して,1枚目の画像が出力されるところまで確認して,大慌てでzip化して再び提出。

残り4分だった。

来年はこういうことが無いように,ちゃんと準備したい。

上記で書いた以外にも,画像サイズを変えると描画結果がおかしくなるバグとか色々とあって,
そのあたり直したので,来年はもう少しまともなレンダリングで出来るはず

…であってほしいなぁ。