「レイトレーシング」の版間の差分
imported>Administrator |
Administrator (トーク | 投稿記録) |
||
| (2人の利用者による、間の7版が非表示) | |||
| 6行目: | 6行目: | ||
一方、レイトレーシングではそれとは逆に目から視線が出て、その視線が物体に当たることで反射を繰り返し、最終的に光源に到達した場合に、光の強さを計算して色を算出し物体を描くというものである。ようするに現実の世界とは逆方向に光をシュミレーションしているのである。 | 一方、レイトレーシングではそれとは逆に目から視線が出て、その視線が物体に当たることで反射を繰り返し、最終的に光源に到達した場合に、光の強さを計算して色を算出し物体を描くというものである。ようするに現実の世界とは逆方向に光をシュミレーションしているのである。 | ||
大雑把にいえばレイトレーシングは[[レイキャスティング]]([[ボリュームレイキャスティング]])の発展系であり、[[レイキャスティング]] | 大雑把にいえばレイトレーシングは[[レイキャスティング]]([[ボリュームレイキャスティング]])の発展系であり、[[レイキャスティング]]では最短で最速でまっすぐに一直線に接触があれば単純に色を拾うというものであったが、レイトレーシングでは物体と接触した際に「反射」の処理が入り、さらに光源に到達するまでの距離なども考慮される。 | ||
[[ファイル:レイトレーシング.png|none|640px]] | |||
==長所== | |||
===シンプル=== | |||
レイトレーシングは[[レイキャスティング]]に「反射」の概念を入れただけの非常にシンプルなアルゴリズムである。反射や透過、屈折、影の効果などをシンプルな[[アルゴリズム]]で実装できる。 | |||
==短所== | |||
===計算量が桁違いに多い=== | |||
レイトレーシングは[[レイキャスティング]]に「反射」の概念を入れただけの非常にシンプルなアルゴリズムである。「レイトレーシングは重い」というイメージがあるが、その根底にある[[レイキャスティング]]自体は非常に軽いものである。 | |||
1回の処理こそ軽いわけだが、そこに「反射」の処理を入れるとレイキャスティングの回数が反射する回数だけ増えることになる。つまりやっていること自体はシンプルだが強烈な回数のループ処理になる。レイトレーシングでそこそこ綺麗な画像を得ようとした場合、最低でも画像(画面)の解像度と同じだけの数のレイを飛ばさなければならない。 | |||
たとえば画面の[[解像度]]が[[フルHD]](1920x1080)であれば約200万[[画素]]([[ピクセル]])もの[[レイ]]を投げることになる。この各レイが平均5回ほど反射するとしたら1000万レイになる。これをリアルタイムレンダリングで秒間60フレームを出そうと思ったら1秒間に6億回もレイを飛ばさなければならない。さすがに1回の計算量が少なくてもこれだけあると重くなる。[[C言語]]で単純にforループを空回しただけでも重たいね。 | |||
===影にノイズが出やすい=== | |||
出力画像の解像度とレイの数が同程度の場合に影にノイズが出やすいという特徴がある。 | |||
ノイズを低減するには[[スーパーサンプリング]]を行う必要がある。 | |||
手っ取り早いのが「1ピクセルを作るのに微妙に角度を変えた複数のレイを飛ばしてその[[平均値]]を取る」という方法だ。 | |||
ただこの方法はレイの数が飛躍的に増える[[諸刃の剣]]だ。 | |||
==アルゴリズム== | ==アルゴリズム== | ||
そのうち書く | そのうち書く | ||
| 46行目: | 52行目: | ||
;3D | ;3D | ||
* [[ボリュームレンダリング]] | |||
*[[ | * [[パストレーシング]] | ||