feature image

2018年4月1日 | ブログ記事

そばやのウキ☆ウキ物理ベースレンダリング〜パストレ編〜

どうも、そばやです

大学生活がスタートすると、一度は「レイトレしてみたいなぁ」と思うこともあるでしょう。
そこで、そんな新入生の皆様のために人肌脱いでやってみました。

さっそくですが、パストレーシングとは何なのかをご紹介。
する前に、まずレイトレーシングというのをご紹介。

レイトレーシングとは?

レイトレーシング(ray tracing)とは3DのCGを作るときの技法で、カメラから仮想的な光線(ray)を飛ばして、その光線と物体が当たっているかどうかを調べることで少しずつ画面に出す色を決定するものです。

じゃあパストレーシングとは?

パストレーシング(path tracing)とは、レイトレーシングの一種です。
レイトレーシングの中でも、物体に当たった光線の反射方向を確率的に扱い、大量のシミュレーションの平均値を以て画面に出す色を決定する手法です。

kwsk

大変わかりやすく、かつ詳細な説明は各所にありますので、ここでは端的に説明します。

まず、レンダリング方程式があります。

これが

こうなります。




は?わからんが




私なりに調べたり理解したりしてみたところ、レンダリング方程式とはある点()において、ある方向()に向かう光の量()がどんなもんかを記述したもので、曰くそれは

それはそれでいいんですが、当然上記式に出てくるような複雑な代物を解析的に積分するのは(少なくとも一般には)難しいと思います。
積分ができないときは諦めてモンテカルロ積分をしろ、とおばあちゃんに教わった人も多いのではないでしょうか?
私もそんな一人です。
ということで、「あらゆる方向から来た光」というのを乱数で作り、その分布を上記式のに比例するかんじに設定しておけば、あとは残った式を平均化するだけで真の積分値に漸近していくはずです。

原理はわかったので実際にやってみます。

レイと平面の当たり判定を実装し、とりあえず部屋を出してみる。
test
一応部屋っぽい何かは出ました。
色は法線をRGBに変換して出しています。

では実際にレイを反射させてみる。
照明は天井に一箇所だけ設置し、レイがそこに当たるまで反射させてみる。
色はレイが当たった物体の色をいいかんじに混ぜ合わせたものを出してみる。
test-1
謎の情景が浮かび上がる。
レイを反射させるときは、適当にノイズをかけてやらないとダメっぽい。
(完全鏡面反射だと、部屋の壁が全部文字通り鏡になってしまう。乱反射させるためには反射ベクトルに適当にノイズを乗せる必要がある。)

ということがわかったので適当にノイズをかけてみます。

test-3
ゴミが出来上がりました。
よく考えたらモンテカルロ積分をするためには平均をとらなきゃいけないと気づく。
とりあえず平均とってみる。
test-4
なんか惜しいかんじ。
test-5
時間が経つとどんどん良くなっていきます。


(ここで5分ほど待つ)


できあがったものがこちらになります。
Cornel
思ったよりそれっぽい何かが描かれていますね。

概ね方針は合ってそうなので、とりあえずモノを増やしてみます。
Box
「コーネルボックス」で検索すると上のほうに出てくるやつをとりあえずパクってみる。

ボールも出してみる。
test-6
影がいいかんじにソフトになるのがいいですね。

調子に乗って屈折させてみる。

test-7

それっぽいですねぇ。
曲面がガラスっぽくなったおかげでレンズ効果で光が集中するのも出ていてキレイです。
です。

最後に凝った形を出してみます。

まずはただの直方体。
test-11
これを彫ります。

とある神デザインのロゴを用意します。
traP_Black

distance fieldを生成します。
traP2_hoge

ヌンッ!
test-10
形ができましたね。

あとは適当にマテリアルを充てると...
test-12
おや?このロゴは一体...?

あっ!!
このロゴはあの東工大でデジタル創作を中心に活動していてゲームやWebサービスを作ったり競プロ・CTF・LT・イベントなどなどを行っている最近公認化した東工大デジタル創作同好会traPのロゴじゃないか!!!!おめでとうございます!!!!




ということでご入学おめでとうございます。

明日はmds_boyくんの記事です。おたのしみに。

sobaya007 icon
この記事を書いた人
sobaya007

東工大工学部の異端児

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2017年11月14日
IBIS2017参加報告
Keijan icon Keijan
ERC20トークンを用いた宝探しゲーム(真)の提案【アドベントカレンダー2018 10日目】 feature image
2018年11月3日
ERC20トークンを用いた宝探しゲーム(真)の提案【アドベントカレンダー2018 10日目】
Azon icon Azon
2021年5月19日
CPCTF2021を実現させたスコアサーバー
xxpoxx icon xxpoxx
2023年4月27日
Vulkanのデバイスドライバを自作してみた
kegra icon kegra
2021年12月8日
C++ with JUCEでステレオパンを作ってみた【AdC2021 26日目】
liquid1224 icon liquid1224
2019年4月22日
アセンブリを読んでみよう【新歓ブログリレー2019 45日目】
eiya icon eiya
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記