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

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

sobaya007

どうも、そばやです

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

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

レイトレーシングとは?

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

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

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

kwsk

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

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

L(x,ω0)=Le(x,ω0)+S2fs(x,ω0,ωi)Li(x,ωi)ωindωiL(x, \overrightarrow \omega_0) = L_e(x, \overrightarrow \omega_0) + \int_{\mathcal S^2} {f_s(x, \overrightarrow \omega_0, \overrightarrow \omega_i) L_i(x, \overrightarrow \omega_i) | \overrightarrow \omega_i \cdot \overrightarrow n| d \overrightarrow \omega_i}

これが

L(x,ω0)Le(x,ω0)+E[L(x,ω)ωn]L(x, \overrightarrow \omega_0) \approx L_e(x, \overrightarrow \omega_0) + E[L(x, \overrightarrow \omega) | \overrightarrow \omega \cdot \overrightarrow n|]

こうなります。




は?わからんが




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

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

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

レイと平面の当たり判定を実装し、とりあえず部屋を出してみる。
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

東工大工学部の異端児

この記事をシェア

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

関連する記事

2018年3月23日
大学生向け同人ゲーム発表イベントの紹介
mabo
2017年11月17日
そばやのワク☆ワク流体シミュレーション~MPS編~
sobaya007
2015年12月13日
シェーダ†入門†2
sobaya007
2015年12月7日
シェーダ†入門†
sobaya007
2018年11月3日
ERC20トークンを用いた宝探しゲーム(真)の提案【アドベントカレンダー2018 10日目】
Azon
2018年11月1日
Crystal lang
MENTOS

活動の紹介

カテゴリ

タグ