マニュアル
Volume-CAD
プロジェクト
c
Copyright by RIKEN All Rights Reserved
作成日: 平成23年1月26日
ii 目 次
目 次
1. NagataパッチDLLの目的 1 2. Nagataパッチについて 1 3. VObj入力形式 2 3. 1. 頂点座標 . . . . 2 3. 2. 法線 . . . . 2 3. 3. 三角形 . . . . 2 4. DLLの使用準備 3 4. 1. Sequencialモード用 . . . . 3 4. 2. Non-Sequencialモード用 . . . . 3 5. Sequencial光線追跡チュートリアル(単レンズ問題) 4 6. Non-Sequencial光線追跡チュートリアル(反射光学系問題) 13 7. Non-Sequencial光線追跡チュートリアル2 (単レンズ問題) 22 8. Non-Sequencial光線追跡チュートリアル3 (ミラー/レンズ複合問題) 29 9. NagataパッチDLLの注意点 40 9. 1. SequencialとNon-Sequencialプラグイン共通 . . . . 40 9. 2. Sequencialプラグイン. . . . 41 9. 3. Non-Sequencialプラグイン . . . . 41Credit
2. NAGATAパッチについて 1
1.
Nagata
パッチ
DLL
の目的
光学系の設計において、レンズ/ミラー形状が関数形式で与えられていることがありますが、成形後には 熱変形で関数形式と異なる形状になるため、そのままの面表現で光線追跡計算をするとその結果は成形さ れたレンズでの光線経路と異なります。局所ごとに変形量が異なる一般的な成形レンズ/ミラー面を表現す るには、グローバル座標の関数形式はパラメータが少なすぎるため適しません。 Nagataパッチ形式は頂点、頂点の法線(複数可)、頂点の接続情報(三角形)から、頂点を通り曲率が最小に なるような滑らかな面(C0連続)を作ります(図1)。作成後のレンズ等の実測点群データ、もしくは成形シ ミュレーション結果を使いレンズ面を表現することで、光線追跡計算をより現実的なものにすることがで きます。ZEMAXには、SequencialとNon-sequencialモードがあり、それぞれのモードに対応するDLLがあります。 一般的に、追跡する光線が通るレンズ/ミラー面の順番が、1通りで固定されているような場合はSequencial モード、そうでない場合はNon-sequencialモードを使います。
2.
Nagata
パッチについて
Nagataパッチは頂点とそこでの法線ベクトル、頂点の接続情報(三角形メッシュ)を与えると、それぞれ の三角形内のローカル座標に関する2次補間を作ります。Nagataパッチには他の曲面パッチと比較し、以 下の利点があります。 • それぞれの頂点に、その頂点を参照する三角形と同じ数の法線ベクトルを与えることができる。つま り、表面の欠陥のような、面上の折れ曲がりを自然に表現できる。 • 隣接パッチ間で面が破れないことが数学的に保証されている。 • 光線との交差が解析式で求められるため、繰り返し解法で有り得る交差計算が収束しないということ が起こる心配が無い。 • 通常の三角形メッシュでも与えられる頂点での法線を使って、簡単に作ることができる。 • 計算量が少ない。 Nagataパッチについては論文1、Nagataパッチを使った光線追跡については論文2に詳しく書いてあります。 線形補間を使った場合に比べ、圧倒的に少ないパッチ数でスポット半径が収束することがわかっています。 (a)線形補間パッチ (b) Nagataパッチ 図1:それぞれ線形補間パッチ、Nagataパッチを使った場合の面の再構築。 1T. Nagata, “Simple local interpolation of surfaces using normal vectors,” Comput. Aided Geom. Des. 22, 327–347 (2005).
2S. Morita, Y. Nishidate, T. Nagata, Y. Yamagata, and C. Teodosiu, “Ray-tracing simulation method using piecewise quadratic
3.
VObj
入力形式
NagataパッチDLLには、三角形メッシュの情報を外部ファイル入力として与えます。形式はVObjです。
VObjはWavefront Objとほぼ同じ形式で以下のキーワードから成り立ちます。
3. 1.
頂点座標
v x y z vはキーワードで、以降は頂点のx, y, z座標です。3. 2.
法線
vn nx ny nz vnはキーワードで、以降は法線のx, y, z成分です。3. 3.
三角形
f v1//vn1 v2//vn2 v3//vn3 fは面を記述するためのキーワードで、viは頂点iのインデクス、vniは法線iのインデクス。Wavefront Obj はN角形を使用できますが、VObjは三角形のみです。 シンプルな三角形の記述例 # コメント v 0.0 0.0 0.0 v 1.0 0.0 0.0 v 1.0 1.0 0.0 vn 0.0 0.0 1.0 f 1//1 2//1 3//1 より実用的な例は、DLLと一緒に配布されているチュートリアル用レンズ面ファイル”lens-1.vobj”や ”lens-2.vobj”を参照してください。4. DLLの使用準備 3
4.
DLL
の使用準備
32bitと64bitのDLLがあります、インストールしたZEMAXがどちらか確認してください。
4. 1.
Sequencial
モード用
32bit版の場合NagataPatch win32.dll、64bit版の場合NagataPatch win64.dllを、ZEMAXのユーザ定義面
DLLフォルダ(例:C:\Program Files\ZEMAX\DLL\Surfaces)へコピーし、名前をNagataPatch.dllに 変更してください。これでSequencialモードでNagataパッチ面DLLが使用できます。
4. 2.
Non-Sequencial
モード用
反射オブジェクトと屈折オブジェクトで別々のDLLがあります。
32bit版の場合UDO NagPatch refract win32.dllとUDO NagPatch reflect win32.dll、
64bit版の場合UDO NagPatch refract win64.dllとUDO NagPatch reflect win64.dllを、
ZEMAXのユーザ定義オブジェクトDLLフォルダ(例:C:\Program Files\ZEMAX\DLL\Objects)へ コピーし、名前をそれぞれUDO NagPatch refract.dllとUDO NagPatch reflect.dllに変更してください。こ れでNon-SequencialモードでNagataパッチ定義オブジェクトDLLが使用できます。
5.
Sequencial
光線追跡チュートリアル
(
単レンズ問題
)
問題概要 SequencialモードのNagataパッチプラグインの使い方を学ぶために、DLLを使って簡単な問題を解いてみ ます。例は、入射平行光を1点に収束させる非球面単レンズの問題です(図2)。レンズ面は2つあり、一つ は平面でもう一つは非球面です。非球面は式 z(r) = r 2/R 1 +√1− (k + 1) r2/R2 (1) で定義し、パラメータはR =−1.838992mm, k = −2.550409で、レンズの半径は2.1mmです。どちらの面 も、いくつかの点でサンプリングし、離散点とそこでの法線ベクトル、接続情報をVObj形式で与えます。 図2:入射光線(赤い線)を像面z = 6.5203896097mmに収束させる無収差単レンズ。レンズは中心の厚みが 3.44mm。屈折率は空気中でn1 = 1.0、レンズ内でn2 = 1.597。1. ZEMAXを起動後、Lens Data Editorで一つ目のレンズ面(STO)を選び、
5. SEQUENCIAL光線追跡チュートリアル(単レンズ問題) 5
2. Surface Typeは”User Defined”を選んでください。
4. ここでVObjの入力を選ぶためのファイルダイアログが出ます。平面をサンプリング(173点, 301三 角形)した”lens-1.vobj”を選び”OK”を押してください。読み込みが成功すると、読み込まれた面の
x = 0,y = 0でのz座標が”lens 1 center z=0.000...”のように出ます。”OK”を押してください。
5. もう一つNagataパッチのレンズ面を作ります。Lens Data Editorで一つ目のレンズ面(STO)を選び、 左上のメニューから“Edit⇒ Insert After”を選んでください。
5. SEQUENCIAL光線追跡チュートリアル(単レンズ問題) 7
6. Lens Data Editorで、新しくできたレンズ面(2)を選び、左上のメニューから“Edit⇒ Surface Type”
を選んでください。
7. 1つ目のレンズ面(STO)と同様、Surface Typeは”User Defined”、Surface DLLは”NAGATAPATCH.DLL”
を選んでください。ファイルダイアログでは非球面をサンプリング(847点, 1592三角形)した ”lens-2.vobj”を選び”OK”を押してください。
8. レンズ面と像面のz方向位置をThicknessによって与えます。一つ目のレンズ面(STO)のThickness
に”3.44”、二つ目のレンズ面(2)のThicknessに”3.0803886097”、と入力してください。二つ目のレン ズ面(2)のThicknessはVariableにしてMerit Functionを与えて、後にOptimizationで求めても良いか もしれません。
9. レンズの屈折率を与えます。一つ目のレンズ面(STO)のGlassをダブルクリックし、出てきたウィン ドウのSolve Typeで“Model”を選び、Index Ndに”1.597”と入力し”OK”を押してください。
5. SEQUENCIAL光線追跡チュートリアル(単レンズ問題) 9 10. レンズ面の半径を与えます。一つ目のレンズ面(STO)のSemi-Diameterに”2.099”、二つ目のレンズ面 (2)のSemi-Diameterにも”2.099”、と入力してください。本来は半径2.1のレンズですが、わずかに小 さな値を与えないと面の描画がおかしくなります。 ZEMAXはグローバルのx,y座標をDLLに渡し、DLLが返すz座標を面の描画に使います。パッチ のようにローカルな三角形内での補間を計算する形式の場合、与えられたグローバルx,y座標を通り z軸に平行な線とパッチとの交差判定をし、交差位置のローカル座標からz座標を返すしかありませ ん。この線との交差判定を行ったとき、レンズの縁で交差判定ができないことがあるので、実際のレ ンズより多少小さめの半径を与える必要があります。
11. レンズができているか確認します。”Analysis⇒ Layout ⇒ Shaded Model”を選び、3Dモデルを確認 してください。
12. 光線を与えます。”System⇒ General”を選びます。出てきたウィンドウで, Aperture Typeは”Entrance Pupil Diameter”を選び、Aperture Valueに”2.1”と入力し、”OK”を押してください。
13. 光線追跡の結果、像面(IMA)でスポット半径の値が計算され6.472× 10−4と出ました。”Analysis⇒ Layout⇒ Shaded Model”を選び、3Dモデルを確認すると光線が1点で収束しているのが分かりま す。この単レンズ問題で、同数の線形補間の三角形パッチを使ったときと、Nagataパッチを使ったと きのスポット半径の値を比較をした論文があります3。線形補間の三角形の場合、像面(IMA)で半径 の値は1.8× 10−1程度で、Nagataパッチは圧倒的に良い結果になっています。非球面の表現パッチ数 を増やせば、さらに理想的な値に近づきます。
3S. Morita, Y. Nishidate, T. Nagata, Y. Yamagata, and C. Teodosiu, “Ray-tracing simulation method using piecewise quadratic
5. SEQUENCIAL光線追跡チュートリアル(単レンズ問題) 11
14. ここから、保存と開く操作について説明します。特に開く操作には注意が必要です。まずは、できあがっ た問題設定を保存します。”File⇒ Save As..”を選びます。保存する名前を”monolens nagpatch.zmx”
として保存してください。
15. ”File⇒ Exit”で、いったんZEMAXを終了してください。
16. ZEMAXを起動してください。起動したら保存した”monolens nagpatch.zmx”を読み込みますが、こ こで注意が必要です。ZEMAXにはプラグインが入力としてとった点群データを覚えておく手段があ りません。そのせいで保存した問題設定を開くとき、どのレンズ面の情報がどのVObjに記述されて いるかを、ユーザが再びファイルダイアログから与える必要があります。まず、”File⇒ Open”で出 たファイルダイアログで”monolens nagpatch.zmx”を選んで開きます。
17. すぐに別のファイルダイアログがVObjの名前を聞いてきます。与えるVObjは、monolens nagpatch.zmx
で作成したレンズ面の上から順番になります。一つ目は”lens-1.vobj”、二つ目は”lens-2.vobj”を選ん でください。これで、monolens nagpatch.zmxに対して、正しくNagataパッチレンズの情報を与えて、 保存した問題設定を再現できました。
6. NON-SEQUENCIAL光線追跡チュートリアル(反射光学系問題) 13
6.
Non-Sequencial
光線追跡チュートリアル
(
反射光学系問題
)
問題概要 Non-SequencialモードのNagataパッチプラグインの使い方を学ぶために、DLLを使って簡単な問題を解い てみます。例は、平面反射鏡と非球面反射光の間に光源があり、一部の光線が検出器に到達するという問題 です(図4)。非球面は式 z(r) = r 2/R 1 +√1− (k + 1) r2/R2 (2) で定義し、パラメータはR =−1.838992mm, k = −2.550409で、ミラー面の半径は2.1mmです。どちらの 面も、いくつかの点でサンプリングし、離散点とそこでの法線ベクトル、接続情報をVObj形式で与えます。 図3:入射光線(赤い線)の一部が非球面反射鏡と平面反射鏡に当たり、検出器まで到達する光学系。操作手順
1. ZEMAXを起動後、左上のメニュー“File⇒ Non-Sequencial Mode”を選び、Non-Sequencialモードに 入ってください。
2. Non-Sequencial Component Editorウィンドウ内で一つ目の部品を選んだ後、同ウィンドウ内の“Edit
6. NON-SEQUENCIAL光線追跡チュートリアル(反射光学系問題) 15
3. 出てきたオブジェクトの編集ウィンドウで、Typeを“Source Ellipse”としてから“OK”を押してくだ さい。
4. 一つ目の部品の“Z Position”を”1.0”、“# Layout Rays”(描画する光線数)は”1, 000”、“# Analysis Rays”(実 際に光線追跡する光線数)を”100, 000”、“X Half Width”と“Y Half Width”を”1.0”としてください。
5. 一つ目の部品を選び、“Edit⇒ Insert After”で新しい部品を追加します。Nagataパッチプラグインを 使うときは、上から順番に部品をInsert Afterで追加していくようにしてください。
6. NON-SEQUENCIAL光線追跡チュートリアル(反射光学系問題) 17
7. “Type”は“User Defined Object”、“Data File”は“UDO NagPatch reflect.dll”を選び、“OK”を押して ください。
8. すると、どのvobjファイルを使ってNagataパッチ面を定義するか指定するファイルダイアログが2回出ます。
2回ともこのミラー面に使う“lens-1.vobj”を選び“開く”を押してください。
(本来はファイルダイアログが出るのは1回にするべきですが、ZEMAXがUDOプラグインに出す要求の関係上、あるUDO
プラグインが初めて使われたときに限って、UDOそのものの初期化とこの面の初期化の2回分ファイルダイアログが出ざ
るを得ません。)
10. 三つ目の部品を選び、“Edit⇒ Object Properties”で3つめの部品を編集します。
11. “Type”は“User Defined Object”、“Data File”は“UDO NagPatch reflect.dll”を選び、“OK”を押して ください。
12. 反射面1つ目を作ったときには、点群を格納するvobjファイルがどれなのか指定するためのファイル ダイアログが自動的に出ましたが、2つ目以降は”# Object ID”を設定するまでvobjファイルを指定で きません。反射面2つ目の”# Object ID”に”1”と入力してください。
6. NON-SEQUENCIAL光線追跡チュートリアル(反射光学系問題) 19
13. どのvobjファイルを使ってNagataパッチ面を定義するか指定するファイルダイアログが出るので、
“lens-2.vobj”を選び“開く”を押してください。
14. 最後にDetectorを追加します。三つ目の部品を選び、“Edit⇒ Insert After”です。
16. “Type”は“Detector Rect”を選び、“OK”を押してください。
17. “Y Position”と“Z Position”を3.0”、“Tilt About X”は”−45.0”、“# X Pixels”と“# Y Pixels”を”128”と してください。
6. NON-SEQUENCIAL光線追跡チュートリアル(反射光学系問題) 21
18. 光学系全体像を確認してみます。メインウィンドウの“Analysis⇒ Layout ⇒ NSC Shaded Model”を 状態を確認してみてください。
19. ディテクタでの照度分布を確認してみます。まずメインウィンドウの“Analysis⇒ Detectors ⇒ Ray Trace/Detector Control”を選択します。出てきたウィンドウで“Trace”ボタンを押した後“Exit”ボタ ンを押します。
20. 次にメインウィンドウの“Analysis⇒ Detectors ⇒ Detector View”を選択します。するとディテクタ での照度分布などが確認できます。
7.
Non-Sequencial
光線追跡チュートリアル
2 (
単レンズ問題
)
問題概要
第5.章のSequencialモードで光線追跡した単レンズ問題を、Non-Sequencialモードでやってみます。配置 などは図2で確認してください。
1. ZEMAXを起動後、左上のメニュー“File⇒ Non-Sequencial Mode”を選び、Non-Sequencialモードに 入ってください。
2. Non-Sequencial Component Editorウィンドウ内で一つ目の部品を選んだ後、同ウィンドウ内の“Edit
7. NON-SEQUENCIAL光線追跡チュートリアル2 (単レンズ問題) 23
3. 出てきたオブジェクトの編集ウィンドウで、Typeを“Source Ellipse”としてから“OK”を押してくだ さい。
4. 一つ目の部品の“Z Position”を”–1.0”、“# Layout Rays”(描画する光線数)と“# Analysis Rays”(実際に 光線追跡する光線数)は”1,000”、“X Half Width”と“Y Half Width”を”1.0”としてください。
5. 一つ目の部品を選び、“Edit⇒ Insert After”で新しい部品を追加します。Nagataパッチプラグインを 使うときは、上から順番に部品をInsert Afterで追加していくようにしてください。
7. NON-SEQUENCIAL光線追跡チュートリアル2 (単レンズ問題) 25
7. “Type”は“User Defined Object”、“Data Fileは”は“UDO NagPatch refract.dll”を選び、“OK”を押 してください。 8. すると、この屈折体がいくつのvobjファイルで定義されるのかを聞くダイアログが2回出ます。1回 目のダイアログでは何もせずそのまま”OK”を押てください。この屈折体は(レンズ)は前面と後面が 別々のvobjファイルに格納されていますから、2回目のダイアログでは数値”2”を入力してから”OK” を押してください。 1回目 2回目
(1回目のダイアログには何の意味もありませんが、ZEMAX UDOの仕様上出さざるを得ません。その問題中で初めてNagata
パッチUDOを使ったときに限って、2回分ダイアログが出てしまいます。NagataパッチDLLで屈折体を2つ以上作ると、
2つ目以降は1度しかダイアログが出ないので、いきなりいくつのvobjを使うか与えてください。)
9. この屈折体は(レンズ)は2つのvobjから成り立っています。一つ目のファイルダイアログでは “lens-1.vobj”、二つ目のファイルダイアログでは“lens-2.vobj”を選んでください。
10. 屈折体の屈折率を与えます。二つ目の部品の”Material”カラムをダブルクリックしてください。
11. 出てきたウィンドウで”Solve Type”は”Model”を選び、“Index Nd”に”1.597”と入力し、”OK”を押し てください。
7. NON-SEQUENCIAL光線追跡チュートリアル2 (単レンズ問題) 27
13. 三つ目の部品を選び、“File⇒ Object Properties”で編集します。
15. Detectorの”Z Position”を”6.52”、”# X Pixels”と”# Y Pixels”を”128”にしてください。
16. 光学系全体像を確認してみます。メインウィンドウの“Analysis⇒ Layout ⇒ NSC Shaded Model”を 状態を確認してみてください。
8. NON-SEQUENCIAL光線追跡チュートリアル3 (ミラー/レンズ複合問題) 29
8.
Non-Sequencial
光線追跡チュートリアル
3 (
ミラー
/
レンズ複合問題
)
問題概要 平面ミラーと、第5.章のSequencialモードで光線追跡した単レンズを組み合わせた光学系を、Non-Sequencial モードで光線追跡します。 図4:入射光線(赤い線)の一部が平面反射鏡に当たった後、非球面レンズで屈折され、検出器まで到達する 光学系。1. ZEMAXを起動後、左上のメニュー“File⇒ Non-Sequencial Mode”を選び、Non-Sequencialモードに 入ってください。
2. Non-Sequencial Component Editorウィンドウ内で一つ目の部品を選んだ後、同ウィンドウ内の“Edit
8. NON-SEQUENCIAL光線追跡チュートリアル3 (ミラー/レンズ複合問題) 31
3. 出てきたオブジェクトの編集ウィンドウで、Typeを“Source Ellipse”としてから“OK”を押してくだ さい。
4. 一つ目の部品の“Y Position”と“Z Position”を”2.0”、“Tilt About X”を”160.0”、“# Layout Rays”(描画 する光線数)を”100”、“# Analysis Rays”(実際に光線追跡する光線数)は”100,000”、“X Half Width”と
5. 一つ目の部品を選び、“Edit⇒ Insert After”で新しい部品を追加します。Nagataパッチプラグインを 使うときは、上から順番に部品をInsert Afterで追加していくようにしてください。
8. NON-SEQUENCIAL光線追跡チュートリアル3 (ミラー/レンズ複合問題) 33
7. “Type”は“User Defined Object”、“Data Fileは”は“UDO NagPatch reflect.dll”を選び、“OK”を押 してください。
8. すると、どのvobjファイルを使ってNagataパッチ面を定義するか指定するファイルダイアログが2回出ます。
9. 二つ目の部品を選び、“Edit⇒ Insert After”で新しい部品を追加します。
8. NON-SEQUENCIAL光線追跡チュートリアル3 (ミラー/レンズ複合問題) 35
11. “Type”は“User Defined Object”、“Data File”は“UDO NagPatch refract.dll”を選び、“OK”を押し てください。 12. すると、この屈折体がいくつのvobjファイルで定義されるのかを聞くダイアログが2回出ます。1回 目のダイアログでは何もせずそのまま”OK”を押てください。この屈折体は(レンズ)は前面と後面が 別々のvobjファイルに格納されていますから、2回目のダイアログでは数値”2”を入力してから”OK” を押してください。 1回目 2回目 13. この屈折体は(レンズ)は2つのvobjから成り立っています。一つ目のファイルダイアログでは “lens-1.vobj”、二つ目のファイルダイアログでは“lens-2.vobj”を選んでください。
14. 屈折体の”Z Position”を”5.0”にしてください。
15. 屈折体の屈折率を与えます。二つ目の部品の”Material”カラムをダブルクリックしてください。
16. 出てきたウィンドウで”Solve Type”は”Model”を選び、“Index Nd”に”1.597”と入力し、”OK”を押し てください。
8. NON-SEQUENCIAL光線追跡チュートリアル3 (ミラー/レンズ複合問題) 37
17. 最後にDetectorを追加します。二つ目の部品を選び、“Edit⇒ Insert After”です。
19. 出てきたウィンドウで”Type”を”Detector Rect”とし、”OK”を押してください。
20. Detectorの”Y Position”を”–1.0”、”Z Position”を”10.0”、”# X Pixels”と”# Y Pixels”を”200”にしてく ださい。
8. NON-SEQUENCIAL光線追跡チュートリアル3 (ミラー/レンズ複合問題) 39
21. 光学系全体像を確認してみます。メインウィンドウの“Analysis⇒ Layout ⇒ NSC Shaded Model”を 状態を確認してみてください。
22. ディテクタでの照度分布を確認してみます。まずメインウィンドウの“Analysis⇒ Detectors ⇒ Ray Trace/Detector Control”を選択します。出てきたウィンドウで“Trace”ボタンを押した後“Exit”ボタ ンを押します。
23. メインウィンドウの“Analysis⇒ Detectors ⇒ Detector View”を選択します。するとディテクタでの 照度分布などが確認できます。
9.
Nagata
パッチ
DLL
の注意点
チュートリアルのような手順を踏めば、計測点情報から正しく光線追跡計算ができます。しかしながら、
DLLにはユーザから見て不自然ながらそうせざるを得ない制限がいくつかあります。
ZEMAXのDLLによるUser Defined Surface(UDS)やUser Defined Object(UDO)は、そもそも外部入力ファ イルに記述された三角形メッシュを読み込み、DLLが面情報を保持し、それに基づきローカルでの補間関 数を使ってレンズ面を表現するという使い方を想定していないためです。
9. 1.
Sequencial
と Non-Sequencial プラグイン共通
1. オブジェクトやレンズ面は上から順番に作っていってください。最後に作ったレンズ面を選んで”Insert After”で付け加えるようにしてください。
2. ”Delete Surface”などを使ったUDSやUDOの消去ができません。ZEMAXは、Layout3DやShade Modelのウィンドウを閉じたときにもDLLのクリーンアップを要求するため、面が消されたのか、 ウィンドウを閉じたのか、など、どうしてDLLのクリーンアップが要求されたのか判断する手段が ないため、DLLが持つ点群情報を消すことができないためです。
3. DLLの選択でNagataパッチプラグインを選んだ時点でファイルダイアログが出ますが、ここで何か
VObjファイルを選ばないとファイルダイアログが出つづけます。間違ってNagataパッチプラグインを 選んでしまった場合、適当なVObjファイル(拡張子がvobjであればOK)を作るなど、ダミーのVObj
を選んで読み込んで、もういちど始めから作成し直してください。 4. ある面に対して、ファイルダイアログでえらんだVObjを変更したい場合があるかもしれません。そ のときは、一度ZMX形式で保存してからZEMAXでそのZMXファイルを開き、ファイルダイアロ グで一つずつVObjファイルを選び直すという手段しかありません。 5. ZEMAXにはプラグインが入力としてとった点群データを覚えておく手段がありません。そのため、 いったん保存した問題設定(ZMXファイル)を開くとき、どのレンズ面の情報がどのVObjに記述さ れているかを、ユーザがZMXファイルを開く度にファイルダイアログから与える必要があります。 つまり、Nagataパッチを使ったZMXファイルを他の人(例えば1週間後の自分)に渡したりする場合 • ZMXファイル だけでなく、 • Nagataパッチを使ったレンズ面と同じ数のVObjファイル • VObjファイルをどの順番で読み込めば良いか という情報が必要になります。Non-Sequencialの屈折体の場合は、これに加えて • それぞれの屈折体がいくつのVObjから成り立っているか も必要でしょう。ZMXファイルを保存するときは、同じフォルダにVObjと順番を記述したテキスト ファイルを置いておくことをお勧めします。 6. グローバル座標の関数表現に比べて、局所的な面表現を使うことの不利点が一つあります。ローカ ルな関数表現は頂点データを保存しておく必要があるため、その分だけ余分にメモリを消費します。
Nagataパッチ形式では1頂点につき60byte、1パッチにつき220byteのメモリを使います。ただし、 現在の一般的なコンピュータで実用的な数の頂点数なら、何の問題も無い程度です。例えば、付属の
lens-2.vobjは847点、1592パッチの面で、これは401Kbyteのメモリを使います。もう少し点の数を 増やして、5万点、10万パッチの面の場合25Mbyteとなります。
9. NAGATAパッチDLLの注意点 41
9. 2.
Sequencial
プラグイン
1. レンズのSemi-Diameterには、実際の半径よりわずかに小さな値を与えないと面の描画がおかしくな ります。気にしなくとも、光線の範囲が正しければ光線追跡計算には問題ありませんが、見た目が良 くありません。ZEMAXはDLLのレンズ面を描画するときに、グローバルのx,y座標をDLLに渡し、 DLLが返すz座標を使うため、DLLではグローバルx,y座標を通りz軸に平行な線とパッチとの交 差判定をする必要が有り、レンズの縁で交差判定ができないことがあるのが理由です。9. 3.
Non-Sequencial
プラグイン
1. 光学系を作るとき、反射体のプラグイン(UDO NagPatch reflect.dll),屈折体のプラグイン
(UDO NagPatch refract.dll)をその問題中で初めて使う時に限って、VObjファイルを指定するための 面数指定ダイアログやファイルダイアログが2回出ます。Non-Sequencialの場合の反射体と屈折体の チュートリアルを参考に、正しく操作しないとうまく動きません。
2. 反射体と屈折体どちらでも複数使うときは、2つ目以降は”# Object ID”を指定する必要があります。 例えば、2つ目の反射面の”# Object ID”は”1”、3つ目の反射面の”# Object ID”は”2”と、”Component Editor”ウィンドウでユーザが入力する必要があります。Non-Sequencial光線追跡チュートリアル(反 射光学系問題)を参考にしてください。