「レイトレーシング」の版間の差分
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
7行目: | 7行目: | ||
大雑把にいえばレイトレーシングは[[レイキャスティング]]([[ボリュームレイキャスティング]])の発展系であり、[[レイキャスティング]]では最短で最速でまっすぐに一直線に接触があれば単純に色を拾うというものであったが、レイトレーシングでは物体と接触した際に「反射」の処理が入り、さらに光源に到達するまでの距離なども考慮される。 | 大雑把にいえばレイトレーシングは[[レイキャスティング]]([[ボリュームレイキャスティング]])の発展系であり、[[レイキャスティング]]では最短で最速でまっすぐに一直線に接触があれば単純に色を拾うというものであったが、レイトレーシングでは物体と接触した際に「反射」の処理が入り、さらに光源に到達するまでの距離なども考慮される。 | ||
+ | [[ファイル:レイトレーシング.png|なし|サムネイル]] | ||
+ | ==長所== | ||
− | + | ===シンプル=== | |
− | |||
− | === シンプル === | ||
レイトレーシングは[[レイキャスティング]]に「反射」と「拡散」の概念を入れただけの非常にシンプルなアルゴリズムである。反射や透過、屈折、影の効果などをシンプルな[[アルゴリズム]]で実装できる。 | レイトレーシングは[[レイキャスティング]]に「反射」と「拡散」の概念を入れただけの非常にシンプルなアルゴリズムである。反射や透過、屈折、影の効果などをシンプルな[[アルゴリズム]]で実装できる。 | ||
− | == 短所 == | + | ==短所== |
− | === 計算量が桁違いに多い === | + | ===計算量が桁違いに多い=== |
レイトレーシングは[[レイキャスティング]]に「反射」と「拡散」の概念を入れただけの非常にシンプルなアルゴリズムである。「レイトレーシングは重い」というイメージがあるが、その根底にある[[レイキャスティング]]自体は非常に軽いものである。 | レイトレーシングは[[レイキャスティング]]に「反射」と「拡散」の概念を入れただけの非常にシンプルなアルゴリズムである。「レイトレーシングは重い」というイメージがあるが、その根底にある[[レイキャスティング]]自体は非常に軽いものである。 | ||
26行目: | 26行目: | ||
たとえば画面の[[解像度]]が[[フルHD]](1920x1080)であれば約200万[[画素]]([[ピクセル]])もの[[レイ]]を投げることになる。この各レイが平均5回ほど反射するとしたら1000万レイになる。これをリアルタイムレンダリングで秒間60フレームを出そうと思ったら1秒間に6億回もレイを飛ばさなければならない。さすがに1回の計算量が少なくてもこれだけあると重くなる。[[C言語]]で単純にforループを空回しただけでも重たいね。 | たとえば画面の[[解像度]]が[[フルHD]](1920x1080)であれば約200万[[画素]]([[ピクセル]])もの[[レイ]]を投げることになる。この各レイが平均5回ほど反射するとしたら1000万レイになる。これをリアルタイムレンダリングで秒間60フレームを出そうと思ったら1秒間に6億回もレイを飛ばさなければならない。さすがに1回の計算量が少なくてもこれだけあると重くなる。[[C言語]]で単純にforループを空回しただけでも重たいね。 | ||
− | === 影にノイズが出やすい === | + | ===影にノイズが出やすい=== |
出力画像の解像度とレイの数が同程度の場合に影にノイズが出やすいという特徴がある。 | 出力画像の解像度とレイの数が同程度の場合に影にノイズが出やすいという特徴がある。 | ||
2021年7月2日 (金) 04:53時点における版
レイトレーシング(英語:raytracing)とは、3DCGを描画するアルゴリズムのひとつである。
概要
現実の世界では太陽などの光源から光が出て、その光が物体に当たることで反射を繰り返し、最終的に人間の目に入った場合に物体が見える。
一方、レイトレーシングではそれとは逆に目から視線が出て、その視線が物体に当たることで反射を繰り返し、最終的に光源に到達した場合に、光の強さを計算して色を算出し物体を描くというものである。ようするに現実の世界とは逆方向に光をシュミレーションしているのである。
大雑把にいえばレイトレーシングはレイキャスティング(ボリュームレイキャスティング)の発展系であり、レイキャスティングでは最短で最速でまっすぐに一直線に接触があれば単純に色を拾うというものであったが、レイトレーシングでは物体と接触した際に「反射」の処理が入り、さらに光源に到達するまでの距離なども考慮される。
長所
シンプル
レイトレーシングはレイキャスティングに「反射」と「拡散」の概念を入れただけの非常にシンプルなアルゴリズムである。反射や透過、屈折、影の効果などをシンプルなアルゴリズムで実装できる。
短所
計算量が桁違いに多い
レイトレーシングはレイキャスティングに「反射」と「拡散」の概念を入れただけの非常にシンプルなアルゴリズムである。「レイトレーシングは重い」というイメージがあるが、その根底にあるレイキャスティング自体は非常に軽いものである。
1回の処理こそ軽いわけだが、そこに「反射」の処理を入れるとレイキャスティングの回数が反射する回数だけ増えることになる。さらに「拡散」の処理を入れると反射するごとに「1つのレイが複数に分裂する」ことになるので数十倍から数百倍に跳ね上がるのである。
つまり、やっていること自体はシンプルだが強烈な回数のループ処理になるのである。レイトレーシングでそこそこ綺麗な画像を得ようとした場合、最低でも画像(画面)の解像度と同じだけの数のレイを飛ばさなければならない。
たとえば画面の解像度がフルHD(1920x1080)であれば約200万画素(ピクセル)ものレイを投げることになる。この各レイが平均5回ほど反射するとしたら1000万レイになる。これをリアルタイムレンダリングで秒間60フレームを出そうと思ったら1秒間に6億回もレイを飛ばさなければならない。さすがに1回の計算量が少なくてもこれだけあると重くなる。C言語で単純にforループを空回しただけでも重たいね。
影にノイズが出やすい
出力画像の解像度とレイの数が同程度の場合に影にノイズが出やすいという特徴がある。
ノイズを低減するにはスーパーサンプリングを行う必要がある。
アルゴリズム
そのうち書く
関連項目
- 1D
- 2D
- 3D