投稿

1月, 2021の投稿を表示しています

レンズを置いてみる8

イメージ
 メニスカスレンズを置いてみる。 構成としては、撮像対象→凸凹メニスカス→両凹となる。凸凹は曲率がそれぞれ5.15,10といれている。当然ながらこれらのパラメータは、それらしい画像が得られる位置にしただけなので、計算等は全くしていない(ある意味シミュレータの良いところかもしれない… もちろん裏付けは必要だけどね)。両凹レンズは曲率10にしている。 どういうわけか歪みがなくなった。理屈が分からないことが増えてきたので、これ以上は、やっぱりレンズ光学を学ぶ必要がありそう。レンズ光学の基礎というドキュメントがダウンロードできたので、ちょっと見てみようと思う。

レンズを置いてみる7

イメージ
 凹レンズの挙動を確認した。 構成としては、撮像対象→両凸→両凹として、両凸を焦点距離の3倍の位置におき、その先に両凹を置いて1倍の像を結像しているが、凸レンズのみの時より歪曲しているように見える。 系全体を俯瞰してみた画像 この調子で、一通りレンズ系をそろえた上で、レンズ設計について勉強してみるのが良いかもしれない。今は、適当に置いているせいで、なぜこの配置で結像するのか考察できない。

レンズを置いてみる6

イメージ
 凸凹凸のトリプレットを再現できないかなと試行しているが、うまくいっていない。 トリプレットの前玉になっている平凸レンズを単体でおいてみると、下記のように歪曲が少なくなる。ただし、焦点距離は両凸レンズの2倍になる。 平凸のマクロは、以下の通り。 #macro lens_plano_convex(lens_radius,lens_curv1,lens_width,lens_res,lens_ior,position)     #local lens_cnt    = (lens_radius / lens_res);     #local lens_x      = 0.0;     #local lens_y      = 0.0;     #local lens_offset1 = sqrt(pow(lens_curv1,2) - pow(lens_radius,2));     #local cnt = 0;     lathe{ linear_spline         (lens_cnt + 2),         #while(cnt < lens_cnt)             #if( cnt < (lens_radius/lens_res))                 #local lens_y = sqrt(pow(lens_curv1,2) - pow(lens_x,2)) - lens_offset1 + (lens_width/2);                 <lens_x, lens_y>,                ...

レンズを置いてみる5

イメージ
 レンズを作るマクロと、焦点距離を計算するマクロを作成した。前回までは、エクセルで小数点以下5桁までの数字をコピペしていたため、球面が粗く、像に円形の線が現れていたが、POV-Rayマクロで計算しているので、精度が良い。 レンズを像面から焦点距離の2倍離して、撮像対象をレンズから焦点距離の2倍離した形にすれば、その映像は、等倍の撮像対象が見えるはず。光は、平行光を用いている。 レンズ無しの像。前回同様、片側の空いた格子を光源側に配置し、透過光観察している lens(2.0,10.0,10.0,0,0.01,1.5,<0,0,lens_focal(0,2.0,10.0,10.0,0,1.5)*2>) ほぼ等倍に見えるが、線がボケているように見える。次に、焦点距離にレンズを置いてみる。焦点距離の場合、もっとも絞った光点が見えるはずだが、妙に大きい光点になっている。 lens(2.0,10.0,10.0,0,0.01,1.5,<0,0,lens_focal(0,2.0,10.0,10.0,0,1.5)>) そこで、焦点距離に係数をかけて位置を微調整した。 lens(2.0,10.0,10.0,0,0.01,1.5,<0,0,lens_focal(0,2.0,10.0,10.0,0,1.5)*0.955>) この係数を2倍した場合の像が以下になる。先ほどよりも等倍にみえ、ボケが少ないように見える。 lens(2.0,10.0,10.0,0,0.01,1.5,<0,0,lens_focal(0,2.0,10.0,10.0,0,1.5)*0.955*2>) もっとも絞れる光点のサイズが、レンズの解像力を決めることを考えると、ボケが改善するのは納得する。像の歪曲・湾曲は相変わらず、すごい。単純レンズの収差が大きいのは当然といえば当然だ。ここまできたら、非球面レンズなどを再現してみて、収差や解像力を改善できるか検討してみたい。 マクロを以下に記載する。 #macro lens(lens_radius,lens_curv1,lens_curv2,lens_width,lens_res,lens_ior,position)     //#debug "\n Lens Calcuration \n"  ...

レンズを置いてみる4

イメージ
 下図のような構成を作り、どういう画面が見えるか確認した。 4x4のスクリーンとレンズの距離は、焦点距離の2倍をとっている。latticeは下図に示すような格子模様となる。図は、レンズを外して見たものとなる。4x4スクリーンに黒色で格子が表示されている。lensとlatticeの距離も焦点距離の2倍である。 レンズを挿入すると、下図のようになる。 すこしボケているのと、レンズの歪曲収差(糸巻型)が現れている。表示されている格子は、本来のサイズよりやや小さく表示されている。

レンズを置いてみる3

イメージ
 フォトンマッピングという機能があり、これを使うと光の集光を正確にシミュレートできるとリファレンスマニュアルに記載があったので、中身を確認した。 マニュアルには、屈折や反射のコースティック(ガラスコップに光が透過すると、光が集光したり散乱したりしてできる光の模様)をリアルにレンダリングできる機能とあり、ミラーが反射し、レンズがフォーカスするとあった。 仕組みとしては、フォトン(光の粒みたいなもの)を発射して、それが物体から反射したり透過した結果、どこかにぶつかったら、そのぶつかった場所にフォトンが当たった事を記憶しておいて、最終的に何個のフォトンが当たったかで、その場所の光の量を決定する。 なので、レンズなら、焦点に向かって大量のフォトンがぶつかるので、中心の一点が明るくなり、そこから離れると暗くなるはずである。 POV-Rayでは、コースティックが投影される物質(カテゴリ1)と、コースティックを出す原因となる物質や光源(カテゴリ2)がある。 カテゴリ1は、特に何もしなくても自動的になる。投影されないようにするには、photons {collect off}をオブジェクトに追加て、フォトンを収集しないようにする。カテゴリ2は、photons {target}を追加する事で、ここを通過・反射した光は、カテゴリ1の物質にぶつかると、その物質にぶつかったことが記録されるようになる。 フォトンマッピングを使うには、グローバルセッティングでphotonsを指定する必要がある。必要なパラメータは以下の通り。 spacing あるいは count フォトンをカウントする物体面上の間隔(spacing)か、放射するフォトンの数(count)のどちらかは必ず指定する必要がある。spacingは数値を下げると細かくなるのでフォトンの数が増える。countは、数字を上げるほど細かくなる。 autostop  フォトンは通常、カテゴリ2の中心から外側に向かって、スパイラル状に放射される。その放射は境界ボックス(カテゴリ2の物体を囲むような箱状の境界線)全体を覆うまでスパイラルが広がり続けるが、境界ボックスより物体が小さくて、スパイラルが1回転しても何にも当たらない状況なら、そこで放射を止めたい。そこでautostopという機能を導入したが、そうすると、ドーナツのようなもの...

レンズを置いてみる2

イメージ
前回の像は実は実像だったとわかった。チェッカーパターンを使ったのが間違いだった。チェッカーパターンの片側だけ赤色のブロックを置くと、ちゃんと反転していることが分かる。 ただ、見え方がちょっと違う。焦点距離の2倍の位置に物を置き、焦点距離の2倍の位置から観察した場合、実像の大きさは、物体と同じになる。しかし、実際のところ、大きく拡大されている。 interior{ior 1.5} interior{ior 1.0} 焦点距離で見ると、反転していない虚像になっている。   考えてみたが、下記のようなことが起こっているのかもしれない。 上の図では、locationからのびた光線を追跡すると、最終的には物体の頂点部分にたどり着く。ただ、光線が曲がらないことを前提としている場合、結果的に像の見え方は、点線で描いた矢印のように見えることになるのではないかと考える。 結局、レンズからの光をView screenに投影するというような、カメラと同じ動作ではないため、実像のような振る舞いをするが、実質的に虚像を見ているのではないかと考える。いずれにしても、光学系そのものをシミュレーションするのは難しいようだ…。

レイトレーシングでLED光を再現する

イメージ
たとえば、ロームのSML-E12UWを再現するとしたら、どのようにできるか考える。 ・波長は、624nm(typ.) ・光度は、85mcd(typ.) レイトレーシングにおいて、光の色は波長ではなく、RGBで指定している。波長からRGBへの変換は、等色関数を用いるhttps://ja.wikipedia.org/wiki/CIE_1931_%E8%89%B2%E7%A9%BA%E9%96%93 等色関数の数値データは、下記サイトのエクセルを用いた。 https://www.rit.edu/cos/colorscience/rc_useful_data.php 問題は、LEDのデータシートを見るとピーク波長しか記載されておらず、スペクトラム分布が不明という点である。スペクトラム分布が分からなければ、積分値を計算できず、ピーク値だけのrgb値しかでてこない。ピーク値だけだと、以下の値になる。 rgb <0.3654,0.0125,-0.0001> レイトレーシングにおいて、光の減衰はfade_distanceとfade_powerで設定する。これをLEDの光度から逆算する。まず、カンデラ[cd]という単位は照度[lx]x距離[m]の2乗であらわされる。ここで、照度の下限を0.1lx程度と決めたとすると、85mcdの光源が0.1lxになる距離は、√(85mcd / 0.1lx) =0.9mとなる。 周辺減光は、半値角からtightnessパラメータを設定する。70°で50%なので、tighntessはおよそ0.9あたりと考える(リファレンスマニュアルの3.4.4.1.2 Spotlightsの最後の図から目測で推定)。 上記をすべて入れた設定が以下となる。距離単位はmmと考えて、100mmの位置に光源を置いた。 light_source{<0,0,100> color rgb<0.3654,0.0125,-0.0001> spotlight radius 0 falloff 90 tightness 0.9 point_at <0,0,0>  fade_distance 900 fade_power 1} スペクトラム分布が分かれば、ちゃんとした色と輝度で見えるのだろうか…?引き続き調べていこうと思う。