
収差ウネウネモデル設計
ぐーzzZ、ぐーzzZ、ぐーゥネウネがひとーつ、ウネウネがふたーつ、ウネウネがー、ウネうにゃむにゃ・・・Z z Z z z . .
ギャーーーーっ!!!!!!・・・はっ!!夢か。
このところ、なぜだかヘビに追いかけられる夢ばかり見ています。
どうやら寝ている間もウネウネを数えているみたいで。。
前回、締め切りまで後1週間なのに設計方針を大転換し、ウネウネつまり変極点が9次収差まである横収差曲線を持つモデルを目指し始めたことをお伝えしました。
ウネウネを発生させるために色々なことを試しました。その一部を紹介します。
- 入射瞳直径を少しずつ上げるのではなく一気に上げる!
一気に瞳径を大きくしてウネウネが出ないか試しました。
- 最適化で追跡する光線間隔を放射状グリッドにして、半径方向のグリッド数(NRR)を5に!
放射状グリッド(ガウシアン求積グリッド)は、グリッド数を5にすると、以下のような光線配置で最適化を実行します。
各光線の重みも均一ではありません。

ここから何かひらめきませんか?(野球のボールじゃないですよ)
そうです!これはまさに1〜9次収差の位置に直接光線が並ぶ配置。
(うまく考えられた光線配置です。じつはこれ今話題のForbesさんが考え出したものです。)
この光線をコントロールできれば、9次収差まで出せるかもしれません。
- 評価関数のタイプを波面誤差のバリアンスにして、波面バランス比(WVB)を0に!
波面バランス比が0より大きいと、波面のリップル(ウネウネ)発生を抑制するように最適化が動きます。
今回は波面にぜひともウネウネを乗せたいのでWVB 0を試しました。
- 開口内の重み(WTA)を負に!
瞳内での光線の重みを変えるWTA設定を負にすることで、瞳の端を通過する光線の重みを上げることができます。
これにより、高次収差を優先的に補正するような最適化を試みました。
- 全長が長くならないレンズタイプを使う!
全長が長くならないタイプということは、必ず高次収差が発生していてウネウネになっているはずと予想しました。
- 最初に荒い光線間隔で最適化しておいて、その後に細かいグリッドで最適化!
最初は光線の間隔を広く取って、補正対象とならないエリアをわざと作りました。
こうしておけば、勝手にウネウネが乗るんじゃないかと。
- ZFRCOEF関数をユーザ定義コンストレインツに追加して、高次収差を強制的に発生!
ZFRCOEFとは波面収差をゼルニケ多項式にフィッティングしたときの係数を計算する関数です。
これをコンストレインツに使ってゼルニケ多項式の球面収差発生項の係数をコントロールしようと考えました。
球面収差発生項をわざと出せれば、モデルに対して高次収差を強制的に発生させることができそうです。
この項をコントロールする前に、どれくらいの値の係数が出れば波面がウネウネするのか、実際に計算して確認しています。
- 全長を短くするコンストレインツを設定!
各面での光線の曲り角が大きいと高次収差は発生します。
無理やり全長を縛って、光線の曲り角が大きくなることを期待しました。
(ちょっと前におんなじ様なことをしたような。。)
- 光学系の後半部分での画角ごとの光束ずれをわざと作る!
光線通過位置がずれることにより、収差の画角変化特性がウネウネしないか試しました。
主光線通過位置を無理やりずらします。
- 3次球面収差係数(I)が大きい光学系を検討!
低次収差の係数が大きい面では、それを打ち消すために高次収差も大きく発生するはずではないかと考えました。
まずIを発生させれば、他の係数も大きくなるはずなので、そのようなモデルになるよう検討しました。
- コマ収差係数(II)と非点収差係数(III)、ペッツバール和(P)に注目!
自作プログラムではP=0でIIとIIIが小さい光学系を検討していました。
これだと、収差曲線の根元(軸上画角)をがっちりと押さえている状態です。
このままでは根元が崩れません。
わざと根元を崩すことで、うまくウネウネさせることはできないでしょうか。
てことは、自作プログラムでの検討からやりなおし??
いやいやいやいや、それはいや。
- ズーム化して画角ごとに別々の開口内の重み(WTA)設定!
画角ごとに発生する収差が違うので、ウネウネの感じも違います。
それをコントロールするため、WTAを画角別に指定したい。。でも、できない。。
ので、モデルを画角数分だけズーム化し、画角ごとにWTAを微調整しました。
- 入射瞳直径(EPD)をちょっとずつ上げる!
発生させたい高次収差が今の段階でどのように出ているか確認したいことがよくありました。
そのためには高次収差だけを見る必要があります。でも、CODE Vでは普通見れません。
そこで低次収差を除去すれば高次収差の影響を見やすくなるはずと考えました。
EPDをちょっとずつ上げて、まずは低次収差の徹底除去を目指します。
(でも、よく考えたら低次収差を押さえれば高次収差も収まってしまうような気がしますね。。)
- 絞り位置の検討!
絞りの位置によって、軸外画角の光路が異なります。
これが収差の画角依存特性のウネウネに影響を与えそうです。
どの位置に絞りを置けばいいか、いくつかサンプルモデルを作って考えました。

どっちがいいのか悩んでいたら、「まだ、そんなことやってんの!?大丈夫?」との同僚の冷たい声。。
- 放射状グリッドより矩形グリッド!
たまたま矩形グリッドの光線配置を使って最適化したモデルで、たまたま高次収差が発生しそうになりました。
放射状グリッドに固執していてはダメなんじゃないか?矩形グリッドに戻してみよう。
- 画角の追加、重みの調整!
最大画角の少し内側に画角を追加して、この画角の重みを極端に大きくします。
すると、収差の画角依存特性をウネウネさせることができるはず。
- 最初の段階では曲率をピックアップせずにフリーにして最適化
曲率をフリーにして、まずは低次収差と高次収差がバランスよく発生するモデルを作ろうと試みました。
収差がウネウネのモデルを作った後、徐々に曲率半径を合わせていけばいいかと。
- 曲率を、ピックアップせずに、重み付きコンストレインツで縛る
こちらも曲率がある程度自由に動けることでウネウネが生まれないかなぁと考えた上で試したことです。
- 入射瞳直径をちょっとだけ上げて、開口内の重み(WTA)を負にして最適化
瞳端で発生する収差を直接コントロールしようと考えました。
- 強制的に高次収差が発生する面を置く
わざと発生させた高次収差を修正するように、他の面が最適化されないかなぁと考えました。
いやぁ、いっろいろ試しましたねー。よくもまぁこんなに。。
これらのアイデアは一気に全部浮かんできたわけではありません。
何かアイデアをひらめいたら試す→うまくいかなくて落ち込む
→また違うアイデアがひらめく→試す→落ち込む→・・・の繰り返しです。
まさに一喜一憂。
あまりにもうまくいかないことが多くて、ただ漠然と設定を行い、最適化を実行しまくったこともありました。
こんなときは、不思議と設計が前進しませんでした。
逆に「試したアイデアがなぜうまくいかないのか?」を考えたときに前進がありました。
最後のほうでは「うまくいかなくて当然。うまくいけばラッキー」と考えることにして、
うまくいかなかったときに落ち込まないようにしました。
その代わり、頭を使ってとことん考える。
この過程で普段気付けなかったことを色々学ぶことができました。
うまくいかなくても非常に内容の濃い日々でした。
「CODE Vは強力なツールだけど、やっぱり頭を使って考えることが大切だなぁ」改めて実感。
で、色々アイデアを試した結果なんですが、、
結局、私が思っていたような収差がウネウネしたモデルを作ることはできませんでした。。
作ることができたモデルで最もいい性能を持つものはこれ。
たまたま偶然できたものです。もともとはステッパー型です。
収差図はこちら。
ウネウネウネ(7次収差)まで発生させることに成功しました。あと、ひとウネ!
7次収差まではだいたい出せるんですがが、9次収差を見ることはとうとうありませんでした。
RMS波面収差の画角特性もウネウネしていないし。
自分の考えは間違っていたのか??
いや、そんなはずはない。時間がなかっただけだ。そうだ、そうに違いない!
最初、収差係数に注目するあまり、高次収差の利用に気付くのが遅すぎました。
もう少し早く、気が付いていればもっといい設計ができたに違いない!!
少し後悔が残りました。不完全燃焼。。
ここで、あれ?と思いました。
最初に光学タイプを考えていたとき、まずは"光学系の最後は全画角の光束が重なる"と予想しました。
予想通り、出来上がった光側は重なっています。
"光学系の最初は負のパワーを持つ群を配置すると良さそう"とも予想しました。
こちらも予想通り、負のレンズ群先行になっています。
で、で、です。
どんなにがんばっても予想できなかった真ん中の構成。
出来上がった光学系の真ん中はながーい空気間隔。つまり何もないんです。。
まるで空気望遠鏡のよう。
なんだか狐につままれた気分です。
真ん中の構成は、本当になくていいのか、それとも予想しなかったからできなかったのか。
さぁ、泣いても笑っても提出期限がきてしまったことに変わりはありません。
もうあがきようがありません。私はこのモデルを提出します!!
さて、結果はどうなることでしょう。
いやぁ、でも振り返ってみると、このCODC、結構はまってしまいましたね。
他の仕事が手に付かないくらい。寝ても覚めてもCODCのことで頭が一杯でした。
こんなにがんばれるなら、本戦のIODCに参加しておけばよかったですね。