e-tipsmemo

ごった煮

レイトレーシング

Rust レイトレーシング

e-tipsmemo.hatenablog.com 書きながら再び書き直した。 Thu Aug 20 20:06:12 JST 2020 Hello World 1600x800 thread : 12 ss : 100 ________________________________________________________ Executed in 143.56 secs fish external usr time 1384.58 sec…

Rust レイトレーシング ⑩ 三角形

ポリゴンの衝突判定のためにレイと三角形の衝突を実装した。 球と同様にHITトレイトを実装する。 三角形との交差判定は risalc.info にある通り。 面内のベクトルは、三角形の法線と直行するのでそこからがわかる。 ベクトルを求め、三角形を張る、を基底と…

Rust レイトレーシング ⑨ 金属・ガラス

金属とガラスを実装した。 それぞれMaterial Traitを実装し、光が当たったときのその光のゆく方向を計算する。 再帰の呼び出しに条件を付けることで、不必要なほどの反射光の計算を適当に減らす。 fuzzは反射時のランダム要素 ガラスの球と屈折率 わかりにく…

Rust レイトレーシング ⑧ 素材準備

今更このようなサイトを発見してしまったのでここも参考にしていこうと思う。 レイトレーシング入門1「光線の基本と反射」 - Qiita色々な素材を利用できるようにするために、Material Traitを定義してこれを持つ構造体を各素材とする。 このTraitを実装する…

Rust レイトレーシング ⑦床

http://e-tipsmemo.hatenablog.com/entry/2018/02/17/000000e-tipsmemo.hatenablog.com複数の物体を表示できるようにする。 とりあえず複数の球体をvecに入れる。 shapelistにもHITトレイトを実装することで前と同じようにhitを呼ぶだけ。 t0 ~ closest間の…

Rust レイトレーシング ⑥ スーパーサンプリング

Rustでの演算子オーバーロードを行うために、構造体にAdd/Mul/Div Traitを実装する。これを用いることで足し算、掛け算、割り算の演算子を使える。 スーパーサンプリングは光線の方向にランダムな要素を加えて、その方向から得られた色から平均をとることで…

Rust レイトレーシング ⑤ 法線

http://e-tipsmemo.hatenablog.com/entry/2018/02/05/000000e-tipsmemo.hatenablog.com 法線を用いて球に色を付ける。 交差した点の座標が必要。あとは前回のものを微修正するだけでOK 法線を計算をしてHitRecordに詰める。 matchではSomeの中に引数のような…

Rust レイトレーシング ④ 球体

sphereとshape_opを追加した。shpereは色を持つ。ついでにColorにnewメンバ関数を追加ておく。 光が当たったところを記録する。hit関数によって返される。当たった点pと法線ベクトルnと光源からの距離t。 後々のためにHIT Traitを定義。「HIT Traitを実装し…

Rust レイトレーシング ③ マルチスレッド

e-tipsmemo.hatenablog.com続き。見通しをよくするためにcolor構造体を利用することにした。各色は0.0~1.0しか取らないので適当にclampしてやる必要があるのでそういった細かい関数は へ書くことにした。 色は基本的にシーン内で計算することにした。 マルチ…

Rust レイトレーシング ② レイを飛ばす

e-tipsmemo.hatenablog.com 前回は画像を表示することが可能になったのでRayを飛ばす。 必要なものはカメラとスクリーンとそれらをまとめるシーンとレイレイトレーシングをいろいろと検索すると何故かz軸正の方向から原点を見下ろすシーンが多いようだが理由…

Rustでレイトレーシング 1.5 画像出力

e-tipsmemo.hatenablog.comの補足。後々にレイトレーシングをマルチスレッド化していこうと思っているので まずは画像出力をマルチスレッド化した。階層はこのような感じ 実行結果は以下の様になる 上から3つのスレッドがそれぞれ画素を計算している事がわか…

Rustでレイトレーシング ① 画像出力

e-tipsmemo.hatenablog.com何はともあれ画像を出力しないと何もできないので image crateについて軽くメモ 左上が原点のようだこのcargoとcrateの組み合わせで非常に簡単にライブラリの導入ができるのが頼もしい。Ray Tracing in One Weekend (Ray Tracing M…

Rustでレイトレーシング 0 準備

レイトレーシングを常々やってみようと思っていていた。 ちょうどよくRustという言語が波に乗り始めているらしいので ついでにRustでレイトレーシングを書くとは言っても0から何も見ずに書くのは学習も進まないのでRay Tracing in One Weekend (Ray Tracing …