以下の内容はhttps://kugi-masa.hatenablog.com/entry/rtcamp10より取得しました。


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

はじめに

10月11日(金)から10月13日(日)に初島で開催されたレイトレ合宿10に参加してきました! こちらはレイトレ合宿までの準備と当日の振り返り記事になります。

レイトレ合宿に参加するまで

レイトレ合宿は自作レンダラーで描画されたレンダリング結果(動画作品/画像作品)の美しさを競うオフライン集会です。 参加者は事前にレンダラーを提出し、合宿当日は作品の発表やセミナー、レクリエーションなどを行います。

今年は初島で開催されました!

カモメが出迎えてくれました

私はレイトレ合宿8レイトレ合宿9と参加し、今回で3回目の参加となりました。

過去の参加レポート

まずは「今回の目標」から共有したいと思います。

今回の目標

今回の目標は、『ハードウェアレイトレーシングに入門する』でした。

レイトレ合宿8では、

レイトレ合宿9では、

CPU 、GPU (ComputeShader) ときたので、 今年はレイトレーシングパイプラインに挑戦してみたいと思い、 DirectX Raytracing(DXR)を用いてハードウェアレイトレーシングに入門しました。

制作の過程

今回も制作までの記録をNotionにメモ書きとして残していきました。

Notionで制作の過程を記録

前回、前々回と比べると若干スロースタートでした...

レギュレーションとしては制限時間256秒。

今回は静止画も提出可能ではありましたが、 今回も動画を作りたかったので、レギュレーション最高枚数である画像600枚(10秒 60fps)を目指し進めました。

DirectX Raytracing Programming Vol.1

まずは技術書典12で購入したtechbitoさんの『DirectX Raytracing Programming Vol.1』を読みながらサンプルを動かしつつ入門し始めました。

booth.pm

とはいえ、DirectX12に触れるのも初めてだったため、序盤はドキュメント、DirectX12の参考書やブログ記事を参考にまずはレイトレでの三角形の描画を目標に進めていきました。

三角形描画まで

初めて触れる内容が多かったこともありCMakeでシェーダーコンパイルするための記述やGPUハンドルのオフセット忘れなど、つまづくことが多かったです。

ようやく三角形描画までのパイプライン実装まで終わったと思った矢先、 背景は描画されているのに、三角形が描画されないという状況に陥ってしまいました...。

NVIDIA Nsight Graphicsでサンプルプロジェクトと自作レンダラーをキャプチャし比較してみたところ、

自作レンダラーをNsight Graphicsでキャプチャした内容

TLAS作成時に、作成済みのBLAS用バッファに再度セットしていました。

この時点で 2024/9/14 (残り26日) ...

また、以前までの開発はMac環境でWindowsアプリケーション周りの実装に慣れていなかったため、 オフスクリーンレンダリングの対応にも時間を取られました。 提出するレンダラーはEC2の実行環境で実行される際、ウィンドウやダイアログを出してはいけないため、 Windowsアプリケーションのウィンドウを出さずに描画する必要がありました。

今回はReleaseビルドだった場合、ShowWindow関数に渡すnCmdShowの値をSW_HIDEに設定することで対応しました。

#ifdef _DEBUG
        int nCmdShow = SW_SHOWNORMAL;
#else // _DEBUG
        // Release版ではウィンドウを出さない
        int nCmdShow = SW_HIDE;
#endif
        ShowWindow(m_hWnd, nCmdShow);

モデル描画まで

レイトレ合宿8、9とプリミティブなモデルしか描画できなかったので、 techbitoさんの書籍を参考にglTFを用いたモデル描画に対応しました。

※ glTFローダーにはtinygltfを使用しました。

モデルには今年のSIGGRAPHのReal-Time Live!で紹介されていた、Rodinという画像1枚からマテリアルと3Dモデルを生成できる生成AIを用いてglTFデータを作成しました。

Rodinで3Dモデルとマテリアルを生成

www.youtube.com

複数オブジェクト描画のテストとしてBlenderで作成した机もシーンに加え、 ひとまず頂点法線を表示し、imguiを導入しカメラ調整機能を実装しました。

この時点で2024/9/30 (残り9 日)...

いよいよ1週間を切りそうというタイミングでしたが、 この時点ではまだパストレや光源、マテリアル実装が間に合っていませんでした...。

提出作品『Chill in the Box』

残り日数が短かったため、マテリアルはLambert Diffuseと割り切り、表現したいシーンを考えアニメーション実装に時間を割きました。

せっかくglTFを使っているのでアニメーションをBlenderで作成して読み込めるようにしたかったですが、 時間もなかったので、下の画像のような構成のものをハードコーディングしました。

絵コンテのようなもの

パストレ、IBL(Image Based Lighting)、アニメーションの実装が大体出来上がり、 残りの時間で過去の作品では実装できていなかったNEE(Next Event Estimation)の実装に取り掛かりましたが、 なぜかモデルでの反射成分の色味が薄くやや薄暗い感じになっていました。

2024/10/6 (残り3 日)時点での提出物

朝の通勤電車で参考にさせていただいたkiNaNkomotiさんの記事を再度読み直しながら、

GitHub Mobileでコードを見直していると、

NEEの処理で衝突点から光源方向へレイトレースし、光源と接続できた場合に寄与の計算をした後、次の衝突点への移動をせずに終了してしまっていることに気がつきました。

/// 光源サンプリング
/// 光源方向へレイトレースして、光源と接続できた場合
if (!TraceShadowRay(worldPos, lightDir, lightDist, payload.seed))
{
   /// 寄与の計算
   ///トレースを終了←してはだめ
}
else // ← ここのelseが不要だった
{
   /// 方向をサンプリング
   /// throughputの計算
   /// 次の衝突点に移動
}

NEEで光源と接続できた場合、早々にトレースを終了してしまい、 throughputの計算もできていなかったため、反射成分が少なくなってしまっていたのだと思います。

帰宅後すぐさま修正し、無事に最終版を提出しました。

無事に提出!🎉

最終日はスライドをひたすら作っていました。

そして提出した作品がこちらになります。

また、今回のレンダラーについては下記のリポジトリに公開しています。

github.com

レイトレ合宿当日

前回のレイトレ合宿9はお寺で開催され座禅体験や精進料理など非日常を体験できましたが、 今年は今年で初島でリゾート気分な非日常を楽しめました。

月明かりや星空がとても綺麗でした。

お食事も絶品でした

本戦

今年は22個ものレンダラが提出されました。

私が本戦で使用した説明スライドはこちらになります。

毎年ながら他の方の作品は圧倒されるものばかりでした。

Gaussian Splattingを実装されたうしおさんがご自身で小舟に乗りドローンを飛ばして撮影したと聞いた時は驚きました。 すごすぎる...!

本戦の結果としては15位でした。 景品にはWeta Digitalの商用レンダラーMaunkaにちなんで、「たたかうマヌカハニー」を頂きました!

セミナー

セミナーに関しても皆さん幅広い内容の発表をされていて、どれも興味深かったです。

X(Twitter)で話題になっている#つぶやきGLSLを解読する内容についてがむさんが発表されていて、 発表の中で、実際にtwigl.appを開いて解読される様子も見せていただきました。

マジックナンバーを変えた際の変化を見ながら、その部分の記述が何の処理をしているかを推測したり、 パターンを覚えることで解読への足掛かりになるとのことでした。

ベストプレゼンター賞はholeさんでNaNやInfについての発表をされていました。

度々悩まされるNaNですが、 Quite NaNとSignaling NaNという2種類のものに分類されるということを初めて知りました。 また、NaNが絡む演算のコンパイラごとの挙動の違いについても調査されていてとても面白かったです。

私は蛍光現象について15分枠で発表しました。

(今回も蓄光石や蛍光マーカーを忍ばせていました)

レクリエーション

Sponza ジグゾーパズル対決

今年のレクレーションは部屋対抗Sponzaのジグゾーパズル対決でした。

がむさん、Samuelsさん、私のチームは最後の2チームまで残りましたが、惜しくも最後のEvaluationで敗退... 優勝チームにはCornell Boxのジグゾーパズルが贈られました!

レクレーションで使用したパズルはチームの誰かが持って帰って良いとのことだったので、 私たちのチームでは私が頂くことになりました。

なお、現状は...

帰宅後完成されていたYoshi's Dreannさんは7時間かかったそうです....!

Silent NaN の歌のライブ

ジグゾーパズル以外には、holeさんとykozwさんでAI生成されたNaNを称える歌のライブがありました。

サイリウムも配られ、会場は大盛り上がりでした。

とてもいい写真。

まとめ

レイトレ合宿10について振り返りました。

今回はDXRでハードウェアレイトレーシングに入門し、これまでのプリミティブな形状からも脱出できました。 そろそろLambertDiffuseからは卒業して、Specularな材質もレイトレしていきたいです。

毎年刺激が多く、皆さんのレベルの高さに圧倒されるばかりです。 私もできることを一つ一つ増やしていきたいです。

運営の皆さん、参加者の皆さんありがとうございました!




以上の内容はhttps://kugi-masa.hatenablog.com/entry/rtcamp10より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14