Shadows

Chapter 8

この章で扱う内容は今までの道具立てを利用して実現できることから、そんなに書くことがない。

FLOAT 型の導入

今までは浮動小数点に f32 を用いてきた。だがこの章で self intersection を回避するために intersection 位置から法線ベクトル方向に少しだけ offset して shadow ray を生成するところで問題が発生した。
この本で acne と呼んでいる現象が offset を追加しても消えない。

原因は f32 の精度が足りないことで、これを f64 にするだけで問題は解決する。とはいえ、壁として用いている Sphere はかなり極端な scaling をしているためにこのようになってしまっただけで、そうでなければ f32 でも充分使える。

というわけで FLOAT という新しい型を導入して f32 と f64 を切り替えられるようにする。

pub type FLOAT = f64;

本来ならビルド時にオプションで切り替えられるようにすべきではあるが、とりあえずはこのようにしておく。

結果

f:id:mtXTJocj:20201222201702p:plain

f:id:mtXTJocj:20201222121134p:plain