NSS(ノンシーケンシャル面)は、面番号に依存しない光線追跡を行う際に利用します。
通常はこの用に面番号に依存しない光線追跡が必要な場合に利用しますが、不連続な面をモデリングする場合にも使えます。例えばレンズアレイや途中から曲率半径が変わる、というような面形状です。
ここでは、後者の「途中から曲率半径が変わる」面のケースで、継ぎ目をぴたっと一致させながら最適化を行う例をご紹介します。(集光するモデルを使ってしまいましたが、ご容赦下さい。)
len new epd 8 ins s2..5 !必要な面数だけ面を挿入します。 !NSSを使用する予定です。 s1 0 1 s2 5 0 !材質は後でまとめて入力します。 cir s2 edg 2 s3 10 5 cir s3 edg 5 cir s3 hol 2 s4 0 20 cir s4 edg 5 !実光線追跡を実施してみます。 RSI SO..I W1 F1 0 2 2 ^z2==(z s2) !S2,S3のサグ量を取得します。 ^z3==(z s3) ^idou==^z2-^z3 !S2,S3のサグ量の差を取り、 thi s2 ^idou !S3を配置することで継ぎ目を一致 !させることが出来ます。 nss s2..4 !NSS化します。(面番号順に光線が !ヒットしないためです) !材質を入力します。 gl2 s2 nbk7 gl2 s3 nbk7 gl1 s4 nbk7 tow vie;fan 0 31;nbr;go !描画してみます。 !(焦点が2つあるみたいです。) |
次に、継ぎ目を合わせ"ながら"、面形状の最適化を実行してみましょう。内側、外側の面形状別々に動かすと、継ぎ目は離れてしまいます。しかし、CODE Vの機能をうまく利用すると、継ぎ目が離れることなく最適化を実行することが出来ます。
CODE Vには、SAGFというマクロ関数が用意されています。
面番号、ズームポジション、(X,Y)座標を引数に持ち、これらを入力すると、その指定条件(面の位置)におけるサグ量を返してくれる関数です。継ぎ目を合わせながら最適化を実行する場合、このマクロ関数を使用します。
シンタックスは次の通りです。
SAGF(面番号,ズームポジション,X座標,Y座標)
^sag2==sagf(2,1,0,2) !継ぎ目における2面のサグ量 ^sag3==sagf(3,1,0,2) !継ぎ目における3面のサグ量 wri ^sag2 ^sag3 |
キープしたいのは継ぎ目ですが、この継ぎ目を合わせるには、第3面(外側の面)のZ方向の偏心量を逐一あわせ込む必要があります。
第3面のZ方向の偏心量は、データベースアイテム (zde s3) で取得することが出来ます。
従って、最適化のコンストレインツとして次のように入力すればOKです。
aut !ユーザー定義コンストレインツとして記述します。 @shi_shu_jouken == sagf(2,1,0,2)-sagf(3,1,0,2)-(zde s3) !これを常に0に保ちたい !ユーザー定義コンストレインツとして設定します。 @shi_shu_jouken = 0 go |
では、内側の面を通過する光線が像面(レンズ最終面から20mmの位置)に集光するよう最適化を実行してみます。
!メニューの 確認 > ノンシーケンシャル > 出力ポート NSP S4 GL2 FOR 0 !出力ポート面を定義します。 thi s5 10 tow vie;fan 0 31;nbr;dum blu;go !描画してみます。 asp s2 !S2を非球面へと変更し、 CCY S2 0 !曲率半径を変数化 AC S2 0 !4次の係数を変数化 ZDC S3 0 !S3のZシフトを変数化 epd 4 !光束を細く aut @shi_shu_jouken==sagf(2,1,0,2)-sagf(3,1,0,2)-(zde s3) @shi_shu_jouken=0 go epd 8 !光束を戻す tow vie;fan 0 31;nbr;dum blu;go !描画してみます。 !まあまあうまく集光できたようです。 |
今度は外側の面を最適化してみます。外側の面を通過する光線を、レンズ後面から20mm離れた位置に集光させてみましょう。
!S2面はこれ以上変更したくないので、 !パラメータを固定します。 CCY S2 100 !S2の曲率半径を固定 AC S2 100 !S2の4次の係数を固定 ASP S3 CCY S3 0 !S3の曲率半径を変数化 AC S3 0 !S3の4次の係数を変数化 ins si thi si-1 10 !像面をレンズ後面から20mmの !位置に変更します !では、S3(外側の)面を最適化してみましょう。 aut @shi_shu_jouken==sagf(2,1,0,2)-sagf(3,1,0,2)-(zde s3) @shi_shu_jouken=0 go tow vie;fan 0 31;nbr;dum blu;go !描画してみます。 !うまく集光してくれたようです |
継ぎ目をつなぎつつ、外側の面を最適化することが出来ました。
要領がつかめたら、3面以上からなる面も作成してみましょう。