「レイトレーシング」の版間の差分
ナビゲーションに移動
検索に移動
(→概要) |
|||
1行目: | 1行目: | ||
'''レイトレーシング'''([[英語]]:raytracing)とは、[[3DCG]]を描画する[[アルゴリズム]]のひとつである。 | '''レイトレーシング'''([[英語]]:raytracing)とは、[[3DCG]]を描画する[[アルゴリズム]]のひとつである。 | ||
− | == 概要 == | + | ==概要== |
現実の世界では太陽などの光源から光が出て、その光が物体に当たることで反射を繰り返し、最終的に人間の目に入った場合に物体が見える。 | 現実の世界では太陽などの光源から光が出て、その光が物体に当たることで反射を繰り返し、最終的に人間の目に入った場合に物体が見える。 | ||
17行目: | 17行目: | ||
*計算量が桁違いに多い | *計算量が桁違いに多い | ||
+ | *影にノイズが出やすい | ||
「レイトレーシングは重い」というイメージがあるが、[[レイキャスティング]]に反射などの処理を加えても1回あたりの処理はそんなに重たいものではない。ただレイトレーシングでは画面の解像度と同じだけレイを飛ばさなければならない。たとえば画面の[[解像度]]が[[フルHD]](1920x1080)であれば約200万[[画素]]([[ピクセル]])もの[[レイ]]を投げることになる。これで秒間60フレームを出そうと思ったら1秒間に1億2000万回もレイを飛ばさなければならない(計算しなければならない)。さすがに1回の計算量が少なくてもこれだけあると重くなる。[[C言語]]で単純にforループを空回しただけでも重たいね。 | 「レイトレーシングは重い」というイメージがあるが、[[レイキャスティング]]に反射などの処理を加えても1回あたりの処理はそんなに重たいものではない。ただレイトレーシングでは画面の解像度と同じだけレイを飛ばさなければならない。たとえば画面の[[解像度]]が[[フルHD]](1920x1080)であれば約200万[[画素]]([[ピクセル]])もの[[レイ]]を投げることになる。これで秒間60フレームを出そうと思ったら1秒間に1億2000万回もレイを飛ばさなければならない(計算しなければならない)。さすがに1回の計算量が少なくてもこれだけあると重くなる。[[C言語]]で単純にforループを空回しただけでも重たいね。 |
2018年11月29日 (木) 05:40時点における版
レイトレーシング(英語:raytracing)とは、3DCGを描画するアルゴリズムのひとつである。
概要
現実の世界では太陽などの光源から光が出て、その光が物体に当たることで反射を繰り返し、最終的に人間の目に入った場合に物体が見える。
一方、レイトレーシングではそれとは逆に目から視線が出て、その視線が物体に当たることで反射を繰り返し、最終的に光源に到達した場合に、光の強さを計算して色を算出し物体を描くというものである。ようするに現実の世界とは逆方向に光をシュミレーションしているのである。
大雑把にいえばレイトレーシングはレイキャスティングの発展系であり、レイキャスティングでは最短で最速でまっすぐに一直線に接触があれば単純に色を拾うというものであったが、レイトレーシングでは物体と接触した際に「反射」や「拡散」の処理が入り、さらに光源に到達するまでの距離なども考慮される。
レイトレーシングは次のような特徴がある。
- 長所
- 反射や透過、屈折、影の効果をシンプルなアルゴリズムで実装できる
- 短所
- 計算量が桁違いに多い
- 影にノイズが出やすい
「レイトレーシングは重い」というイメージがあるが、レイキャスティングに反射などの処理を加えても1回あたりの処理はそんなに重たいものではない。ただレイトレーシングでは画面の解像度と同じだけレイを飛ばさなければならない。たとえば画面の解像度がフルHD(1920x1080)であれば約200万画素(ピクセル)ものレイを投げることになる。これで秒間60フレームを出そうと思ったら1秒間に1億2000万回もレイを飛ばさなければならない(計算しなければならない)。さすがに1回の計算量が少なくてもこれだけあると重くなる。C言語で単純にforループを空回しただけでも重たいね。
アルゴリズム
そのうち書く
関連項目
- 1D
- 2D
- 3D