「レイトレーシング」の版間の差分

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

2021年7月2日 (金) 05:51時点における最新版

レイトレーシング英語:raytracing)とは、3DCGを描画するアルゴリズムのひとつである。

概要[編集 | ソースを編集]

現実の世界では太陽などの光源から光が出て、その光が物体に当たることで反射を繰り返し、最終的に人間の目に入った場合に物体が見える。

一方、レイトレーシングではそれとは逆に目から視線が出て、その視線が物体に当たることで反射を繰り返し、最終的に光源に到達した場合に、光の強さを計算して色を算出し物体を描くというものである。ようするに現実の世界とは逆方向に光をシュミレーションしているのである。

大雑把にいえばレイトレーシングはレイキャスティングボリュームレイキャスティング)の発展系であり、レイキャスティングでは最短で最速でまっすぐに一直線に接触があれば単純に色を拾うというものであったが、レイトレーシングでは物体と接触した際に「反射」の処理が入り、さらに光源に到達するまでの距離なども考慮される。

レイトレーシング.png


長所[編集 | ソースを編集]

シンプル[編集 | ソースを編集]

レイトレーシングはレイキャスティングに「反射」の概念を入れただけの非常にシンプルなアルゴリズムである。反射や透過、屈折、影の効果などをシンプルなアルゴリズムで実装できる。

短所[編集 | ソースを編集]

計算量が桁違いに多い[編集 | ソースを編集]

レイトレーシングはレイキャスティングに「反射」の概念を入れただけの非常にシンプルなアルゴリズムである。「レイトレーシングは重い」というイメージがあるが、その根底にあるレイキャスティング自体は非常に軽いものである。

1回の処理こそ軽いわけだが、そこに「反射」の処理を入れるとレイキャスティングの回数が反射する回数だけ増えることになる。つまりやっていること自体はシンプルだが強烈な回数のループ処理になる。レイトレーシングでそこそこ綺麗な画像を得ようとした場合、最低でも画像(画面)の解像度と同じだけの数のレイを飛ばさなければならない。

たとえば画面の解像度フルHD(1920x1080)であれば約200万画素ピクセル)ものレイを投げることになる。この各レイが平均5回ほど反射するとしたら1000万レイになる。これをリアルタイムレンダリングで秒間60フレームを出そうと思ったら1秒間に6億回もレイを飛ばさなければならない。さすがに1回の計算量が少なくてもこれだけあると重くなる。C言語で単純にforループを空回しただけでも重たいね。

影にノイズが出やすい[編集 | ソースを編集]

出力画像の解像度とレイの数が同程度の場合に影にノイズが出やすいという特徴がある。

ノイズを低減するにはスーパーサンプリングを行う必要がある。

アルゴリズム[編集 | ソースを編集]

そのうち書く

関連項目[編集 | ソースを編集]

1D
2D
3D