差分

ナビゲーションに移動 検索に移動

レイトレーシング

202 バイト除去, 2021年7月2日 (金) 04:55
編集の要約なし
大雑把にいえばレイトレーシングは[[レイキャスティング]]([[ボリュームレイキャスティング]])の発展系であり、[[レイキャスティング]]では最短で最速でまっすぐに一直線に接触があれば単純に色を拾うというものであったが、レイトレーシングでは物体と接触した際に「反射」の処理が入り、さらに光源に到達するまでの距離なども考慮される。
[[ファイル:レイトレーシング.png|なしnone|サムネイル640px]]
===計算量が桁違いに多い===
レイトレーシングは[[レイキャスティング]]に「反射」と「拡散」の概念を入れただけの非常にシンプルなアルゴリズムである。「レイトレーシングは重い」というイメージがあるが、その根底にあるに「反射」の概念を入れただけの非常にシンプルなアルゴリズムである。「レイトレーシングは重い」というイメージがあるが、その根底にある[[レイキャスティング]]自体は非常に軽いものである。
1回の処理こそ軽いわけだが、そこに「反射」の処理を入れるとレイキャスティングの回数が反射する回数だけ増えることになる。さらに「拡散」の処理を入れると反射するごとに「1つのレイが複数に分裂する」ことになるので数十倍から数百倍に跳ね上がるのである。 つまり、やっていること自体はシンプルだが強烈な回数のループ処理になるのである。レイトレーシングでそこそこ綺麗な画像を得ようとした場合、最低でも画像(画面)の解像度と同じだけの数のレイを飛ばさなければならない。1回の処理こそ軽いわけだが、そこに「反射」の処理を入れるとレイキャスティングの回数が反射する回数だけ増えることになる。つまりやっていること自体はシンプルだが強烈な回数のループ処理になる。レイトレーシングでそこそこ綺麗な画像を得ようとした場合、最低でも画像(画面)の解像度と同じだけの数のレイを飛ばさなければならない。
たとえば画面の[[解像度]]が[[フルHD]](1920x1080)であれば約200万[[画素]]([[ピクセル]])もの[[レイ]]を投げることになる。この各レイが平均5回ほど反射するとしたら1000万レイになる。これをリアルタイムレンダリングで秒間60フレームを出そうと思ったら1秒間に6億回もレイを飛ばさなければならない。さすがに1回の計算量が少なくてもこれだけあると重くなる。[[C言語]]で単純にforループを空回しただけでも重たいね。
;3D
* [[ボリュームレンダリング]]*[[ボリュームレンダリングパストレーシング]]

案内メニュー