2017年9月
C#でレイトレーシングのレンダラを書いた。単に球体を1つ描くだけのもの。目的はここから。いかにして減色するか。
ということで、オーダードディザ(Bayer配列に基づいた減色)と誤差拡散ディザ(Floyd-Steinberg ditheringに基づいた減色)を実装した。
ダウンロード RayTracingTest.zip
左から「減色なし」「配列ディザ」「誤差拡散ディザ」。減色後はRGB各2階調(0x00か0xFF)、すなわち8色で描かれている。
元の球体はオレンジ色なのだが、減色後は黄色っぽく見えてしまう。これは、オレンジ色が赤色・黄色の分布で表現されたところ、
赤色より黄色の方が輝度が高く、人の目には赤色がかき消されてしまうからだと思う。
試しに画像をぼかしてみると(中間色が生成され)期待通りのオレンジ色に見える。ということで計算上は間違っていないだろう。
▼ぼかし加工
グレースケール画像は2値化される。白っぽく見えるのは上記同様の理由だろう。
これも、ぼかしてみると期待通りの灰色になった。
上でも触れた通り、マイコン+モノクロ画面でレイトレーシングをやってみようと思い、まずはPCで描画と減色を実験した。
マイコンの開発環境にVector3構造体はないが、特に苦労せず移植できるのではないかと思う。
▼後日。マイコンでレイトレーシングの結果
(ATmega328P/1MHz、96x64ドット、描画時間は約100秒)