こんにちは。光学、光でのお困りごとがありましたか?
光ラーニングは、「光学」をテーマに様々な情報を発信する光源を目指しています。情報源はインターネットの公開情報と、筆者の多少の知識と経験です。このページでは、OpticStudioシーケンシャルモードでの最適化の非常に便利なツール「最適化ウィザード」について説明します。
このページの使い方
このページで参考にした技術記事(ナレッジベース)は、 シングレット レンズの設計方法 パート3 です。この記事は、OpticStudioのシーケンシャルモードでシングレットレンズ(単レンズ)を設計するプロセスのうち、最適化を紹介した入門記事になります。
このページでは、ナレッジベースで使われている光学用語、技術用語、前提知識について、もう一歩踏み込んだ説明を加えていきます。ナレッジベースの長さは記事によってまちまちなので、いくつかのブロックに分けて注釈を加えています。この記事は11番目です。(10)は 最適化の基本3ステップ_シングレットレンズの設計(OpticStudio入門) です。
最適化ウィザード (Optimization Wizard)
最適化のプロセスの大部分は、最適化の目標を決める「メリットファンクションエディタの設計」になります。簡単な光学系であれば、すべて手作業で行うこともできるかもしれませんが、より複雑な光学系を最適化するためのメリットファンクションエディタとなると大変です。そこで使用するのが「最適化ウィザード」です。
Wizardの意味は魔法使いです(アイコンが魔法使いの杖っぽくなっているのはそのためかも)。Wikipediaによると、ソフトウェア用語のウィザードは、”ウィザード(英: Wizard)とは、対話型のコンピュータプログラムであり、使用者に対して段階を踏襲しつつ複雑な作業を行わせるユーザインタフェイスである。”とあります[1]。手作業でオペランドを追加していく代わりに、OpticStudioが用意したフォーマットに希望や条件を設定することで、それを叶える多量のオペランド生成を自動的に行ってくれます。
初めて使うときは、あまりに多量のオペランドが生成されるので面食らってしまって、「よく分からないけど、これで最適化がうまく進むのでよし!」と深く考えることを後回しにしていました。このページでは、同じように最適化ウィザードの機能を自分でブラックボックス化してしまっている方の参考になるような説明ができれば幸いです。
最適化ウィザードでの設定内容
OpticStudioに伝える最適化の条件は大きく3つ、①最適化の基準(評価の指標)、②瞳の積分方法、③境界値、です。①で目標にする光学性能を、②で評価に使用する光線を、③で形状に関する物理的な制約を決めます。その下には他にも有用で新しい機能はいくつかありますが、このページではひとまず、参考にした技術記事で触れられた基本の3つについて説明します。
最適化の基準(評価の指標) (Optimization Function)
光学性能の「何を」目標にするかを決めるのが、最適化の基準です。選択肢は、以下の4つです。
- スポット (Spot)
像面上でのスポットサイズが最小になるようなオペランドが自動生成されます。デフォルト設定で生成されるオペランドは、TRCX、TRCYです。これらのオペランドは、セントロイド基準のx方向の横収差とy方向の横収差です。横収差については、横収差図(光線収差)_シングレットレンズの設計(OpticStudio入門) (8) も参照してください。X重み、Y重みのパラメータで重要視したい光線収差の方向を調整できます。デフォルトでは両方1になっていますが、両方0(ゼロ)にすると、生成されるオペランドがTRCAになります。これは、半径方向の横収差を出力するオペランドです。TRCAを用いた場合、TRCX/TRCYの半分のオペランド数になるのでメリットファンクションの計算は早くなりそうです。 - 波面 (Wavefront)
各視野および波長における波面収差が最小になるようなオペランドが自動生成されます。デフォルト設定で生成されるオペランドは、OPDXです。これらのオペランドが出力する波面収差は少し複雑です。まず、実際の波面から参照球面の波面が差し引かれます。次に、そこから波面のティルト成分が差し引かれます。さらに、そこから瞳内の光路差の平均値が差し引かれて、最終的な波面収差が波数で出力されます。波面収差や参照球面については、光路差図(波面収差)_シングレットレンズの設計(OpticStudio入門) (9) や 波面収差の基準、参照球面_Zemaxコミュニティ注目トピック (6) も参照してください。この複雑な計算は、「像質」に影響する光路差成分のみを考慮するために実行されます。OPDXオペランドの波面収差の計算プロセスは、光ラーニングでも取り上げたいと思います(RMS波面誤差の計算(単色)_Zemaxコミュニティ注目トピック (15) を参照してください)。
この基準は、光学性能がある程度達成されている状態から使用するのが望ましいです。例えば、一度スポットを基準にした最適化を実行して、さらに光学性能を引き出すときに基準を波面に切り替える、といった使い方が考えられます。 - 角度 (Angular)
像空間での光線の角度的なばらつきが最小になるようなオペランドが自動生成されます。デフォルト設定で生成されるオペランドは、ANCX、ANCYです。これらのオペランドは、セントロイドのx方向もしくはy方向の方向余弦を基準とした、指定された光線の方向余弦の差分(角度収差)です。つまり、すべての光線が像面に同じ角度で入射する状態を目指しており、これはコリメート光を達成するための基準となります。この基準は、光学系がアフォーカル系となっていることを想定しています。OpticStudioのシステムエクスプローラでアパチャーを開くと、アフォーカル像空間(Afocal Image Space)というオプションがあります。これがチェックされているとき、その光学系はアフォーカル系になっている、といいます。アパチャー(システムエクスプローラ)_シングレットレンズの設計(OpticStudio入門) (1) では、このオプションについて触れていませんので、またの機会に光ラーニングでも取り上げたいと思います。 - コントラスト (Contrast)
OpticStudio独自のアルゴリズム(Moore-Elliottコントラスト法)を使って、MTFが最大になるようなオペランドが自動生成されます。デフォルト設定で生成されるオペランドは、MECS、MECTです。これらのオペランドは、設定した条件で決まる2本の光線の位相差を出力しています。理論的な詳細はここでは割愛しますが、MTFそのものを計算しないのが特長です。2本の光線を位相差をゼロにすることが、MTFの最大化に結びつきます。スポット同様に、重みにパラメータをゼロにすると、サジタルとタンジェンシャルの平均を取ったMECAオペランドが自動生成されます。この機能は非常に強力なMTF最適化機能になります。MTFを最適化するメリットファンクション_Zemaxコミュニティ注目トピック (3) も参照してください。この基準は、アフォーカル系でも使用できます。
最適化が動かなくなったときや、思った方向に進まなくなったとき、基準を変えてみると最適化が進行する可能性があります。例えば、スポットで思う結果が得られない場合、基準を波面やコントラストに変えてみましょう。
最適化の基準の設定によって、OpticStudioが自動生成するオペランドの種類が変わることが分かります。もしウィザードがなければ、これらのオペランドを私たちが自分で一つ一つ設定することになります。それはあまりにも非効率で、設定をミスする可能性も高くなるので、ウィザードはぜひ活用しましょう。
瞳の積分方法 (Pupil Integration)
最適化の基準を評価するため、追跡する光線をサンプリングします。光線をサンプリングする方法として、ガウス求積法と矩形配列の2種類があります。そのあとに設定する、リング/アーム、グリッドでは光線本数を調整できます。追跡する光線数が増やせば、”ある程度までは”評価する光学性能の精度も高まっていきますが、計算に時間がかかります。このトレードオフの関係は経験的、実験的に判断する必要があります。
ここでの瞳とは、入射瞳のことです。入射瞳については、絞り、入射瞳、射出瞳_OpticStudioレイアウトでの瞳の表示 (1) も参照してください。
ガウス求積法と矩形配列
瞳の積分方法でとっつきにくいのは、ガウス求積法かと思います。光ラーニングの立場的に、ガウス求積法の詳細には踏み込みません(踏み込めません)。もし興味がありましたら、参考文献[2]を参照してください。ガウス求積法のざっくりとした説明としては、「瞳内をある特定パターンでサンプリングして、ある特定パターンで重みづけをすると、少ない光線本数でも高い精度で光学性能を評価できる」スペシャルなテクニックです。
論文の中で、矩形配列とガウス求積法の光学性能の評価精度の比較があり、ガウス求積法のメリットが示されています。この特性のため、特にガウス求積法を選択したときには「リング数やアーム数を増やして追跡する光線本数を増やしても最適化の精度(光学性能の評価精度)が向上するわけではない」という注意事項がヘルプファイルにも記載されています。矩形配列の場合は、光線の本数によって精度の向上は見込めますが、計算時間とのトレードオフがあるので調整が必要です。
2つの積分方法の使い分け
最適化の効率と精度を考えれば、基本的にはガウス求積法を使うのが推奨されます。基本的には、というのは光学系の開口が楕円形(円形を含む)の場合です。面のアパチャーに光線をたくさん遮蔽するような開口を入れて、実質的な瞳の形状がビネッティングファクタを使用した楕円形上で表現できない場合は、ガウス求積法は光線をサンプリングできなくなって精度が低下します。
もう1つ、筆者の個人的な意見として、瞳の中で光学特性が急激に変わるような場合にも注意が必要かもしれません。例えば、極端な非球面、自由曲面を使用した光学系では、光学系の径方向と周方向で光学特性が大きく変わるので、光学性能の評価においてガウス求積法のサンプリングと重みが妥当なのか疑問があります。ガウス求積法で光線本数を増やせば解決する問題なのかもしれませんが、筆者はこの点を突き詰めたことがありません。
境界値 (Boundary Values)
意外と知られていない境界値の設定は、レンズ形状、レンズ同士の干渉、部品の間隔など、物理的な制約を自動で設定するオプションです。この物理的な制約がないと、レンズの厚みがマイナスになったり、逆にとんでもなく厚くなったり、レンズのエッジがマイナスになって作成不能な形状になったりします。使い方は簡単で、ガラスと空気のオプションにチェックを入れて、それぞれの中心厚み(レンズデータエディタの厚みで入力するパラメータ)の最小値と最大値、エッジ(機械半径で計算する外周部の厚み)の最小値を入力します。
注意点は、「この境界値の制約は必達されるわけではない」ことです。例えば、最小エッジを1.0mmに設定しても、最適化の結果を確認するとレンズのエッジが0.95mmになっている場合があります。これは、設定した制約も最適化の1つの小さな目標になるだけで、他の目標である光学特性などと等しく扱われることを意味しています。対策としては、仕様で指定されている境界値にマージンを加えて数値を入力することです。例えば、エッジの仕様が1.0mm以上となっている場合は、最小エッジに1.5mmと入力してオペランドを生成します。
自動生成された最適化オペランドの内容
基本となる上記3つの設定ができたら、OKをクリックして最適化オペランドを自動生成させます。最適化ウィザードで生成されるオペランドは、ピンク色の行のDMFSライン以降に生成されます。このDMFSは「デフォルトメリットファンクション」を意味しています。OpticStudioの古いバージョンでは、最適化ウィザードではなくて、デフォルトメリットファンクションという名前だったような気がします、昔の名残というやつでしょうか(あやふや)。
境界値から生成されたオペランド群
DMFSラインのすぐ下に来るのが、境界値の設定から生成されたオペランド群です。ガラスの中心厚み、エッジ厚み、空気の中心厚み、エッジ厚みを制約するオペランドがずらっと並びます。それぞれのオペランドの意味については、自分の設定と照らし合わせたり、ヘルプファイルを確認したりで確認してください。
最適化の基準から生成されたオペランド群
境界値のオペランドの下に来るのが、最適化の基準の設定から生成されたオペランド群です。瞳の積分方法での設定に従って、生成されるオペランドの量が変わります。オペランドは、視野ごと、波長ごとに生成されるので、視野と波長が多く設定されているほど多くのオペランドが生成されます。視野については 視野(システムエクスプローラ)_シングレットレンズの設計(OpticStudio入門) (2)、波長については 波長(システムエクスプローラ)_シングレットレンズの設計(OpticStudio入門) (3) をそれぞれ参照してください。
ここで、生成されたオペランドの重みが細かく調整されていることが分かります。この重みは、ガウス求積法のスペシャルテクニックと、視野と波長で設定された重みの設定を反映しています。大きな重みが設定された条件に生成されたオペランドには、大きな重みが設定されて最適化中に重要視されます。
メリットファンクションエディタの編集・更新
最適化ウィザードは、最適化の土台となる基本的な目標を自動で生成する機能です。メリットファンクションエディタを編集することで、より私たちが目指している光学性能、レンズ形状に誘導することができます。メリットファンクションエディタは、大きく2つの領域に分けられます。1つはウィザードから生成されたデフォルトメリットファンクション、もう1つはオリジナルのオペランド群です。基本的には、デフォルトメリットファンクションの中身は書き換えませんが、内容をよく理解したうえで調整する場合はありえます。私たちは主に、オペランドを追加することで最適化の方針を調整します。
デフォルトメリットファンクションの編集・更新
あまり編集したいといったデフォルトメリットファンクションですが、編集するケースとしては、境界値のオペランドをレンズごと、空気ごとに調整する場合があります。凸レンズへの制約と、凹レンズへの制約を別々に設定したい場合などは、私たちが面ごとに調整する必要があります。例えば、レンズの最終面から像面までの空気厚さが大きい場合は、オペランドを削除するか目標値を手入力して編集します。
デフォルトメリットファンクションは、更新しないといけない場合もあります。それは、視野データエディタや波長データエディタ、マルチコンフィグレーションエディタを編集したときです。OpticStudioはデフォルトメリットファンクションの更新を警告してくれないので、修正するのは私たちが判断する必要があります。最適化はどうしてもメリットファンクションの数値に集中してしまって、ついついデフォルトメリットファンクションの更新を忘れてしまうので、注意が必要です。
最適化オペランドのトッピング
DMFSラインよりも上には、私たちが自由に最適化のオペランドを追加できます。実は、DMFSの中に書いても計算は進みますが、これはお勧めしません。ウィザードで生成されたオペランドの計算は、いくつかの前提に基づいた計算の高速化が図られているので、途中に想定外のオペランドが挿入されると計算のやり直しや、誤った出力を出す可能性があります。
ヘルプファイルには、非常に多くの最適化オペランドが記載されています。この部分が、光学設計者の腕の見せ所というか、ノウハウになります。光ラーニングでも、よく使うテクニックなどをお伝えできればと思います。
まとめ
ここでは、Zemaxのホームページからアクセスできる公開記事、 シングレット レンズの設計方法 パート3 から、「最適化ウィザード」について説明しました。今回で、シングレットレンズの設計方法の3つの技術記事に関する説明ページは完了です。ページ冒頭の画像にあるように、最適化は曲がりくねった試行錯誤の連続になります。最後に筆者の気持ちを一言で、「頑張っていきましょう!」
<参考>
[1] Wikipedia, ウィザード (ソフトウェア)
[2] G. W. Forbes, “Optical system assessment for design: numerical ray tracing in the Gaussian pupil”, J. Opt. Soc. Am. A, 1998
コメント