A君のレンズ設計物語第11回 非球面の話(1)

A君「博士、僕の友人の話を聞いて下さいよ」

博士「なんじゃな、唐突に?」

A君「彼曰く、メールの文字を打つのが面倒なんですって。今のスマホなら音声入力をテキストに直してくれますよね。最近の音声認識、結構精度良くてびっくりしましたけど。で、そのテキストデータをメールで送ればいいんじゃないかと。で、相手側でも読むのが面倒だろうから、音声出力で読み上げてくれる、なんて機能ができれば流行りそうな気がするとかいって、そういうアプリを作ってひと儲けしようと企んでいるんですよ」

博士「そんなものは30年以上前からあるぞ」

A君「え?そんなに昔から?スマホなんてない時代でしょ?」

博士「しかも相手の声色で再生してくれる・・・留守番電話という機能じゃ」

〜閑話休題〜

博士「今回のテーマは非球面じゃ。非球面の有用性は17世紀には知られていたというから恐れ入るな」

A君「当時はその高い製造難易度のためか、発展することはなかったそうですよ」

博士「非球面を使うと収差補正能力は格段に上がるのは、知ってのとおりじゃが、非球面係数の次数と収差との関係について軽く触れておこうか。まず、球面の場合には面形状を記述する式は以下のように、パラメータは曲率半径rのみじゃが、右辺のように、べき級数多項式に展開できる。

各項 (各次数)の係数は曲率半径rから一意に決まるようになっているのが分かるね。このうちの2次の係数から近軸量が計算され、4次の係数により3次収差が決まるのじゃ。つまり、球面の場合には、近軸的なパワーを決めると3次収差も自動的に決まってしまうのじゃが、非球面を使用すると、この呪縛から解き放たれる」

A君「どういうことですか?」

博士「たとえば、球面の場合には、単面の球面収差と非点収差は常に同符号になるが、非球面を使うと異符号にすることも可能じゃ。また、球面の場合には、凸レンズの球面収差係数は正、凹レンズの球面収差係数は負という状態になることが多いが、非球面を使うと、凸レンズでありながら凹レンズのような収差を発生させるといったことも可能なのじゃ。単レンズに対して片面を非球面にして、4次の係数を変化させたときの球面収差図じゃ」

A君「なるほど。球面凸レンズは球面収差係数が正になるのが普通なのに、ゼロにしたり、負にすることもできるんですね。非球面様々やわー」

博士「ただし、独立して制御できる収差は一つだけ、ということにも注意するように。
単レンズの片面を非球面にすれば、球面収差は自在に変えられるが、コマ収差・非点収差も制御できるわけではない、ということじゃ。また、パワー配置(近軸)で決まる色収差やペッツバール和も非球面ではコントロールできない」

A君「非球面といえども、限界があって万能ではないということですね」

博士「さて、一般的な非球面ということで、コーニック定数が含まれた式に触れておこうかの。設計ツールにより非球面の式は異なるかもしれんが、CODE Vでは以下の式のkがコーニック定数で、A, B, C…が非球面係数と呼ばれている部分じゃよ。

kの値により、ベース面(右辺の第1項)は、球面(k=0)、楕円面(-1<k<0)、放物面(k=-1)、双曲面(k<-1)とのように分類できる。
いずれの面も、光軸近傍での曲率は等しいが、光軸から離れるにしたがって、
k>0 曲率はきつくなる
k=0 曲率は変わらない
k<0 曲率は緩くなる
のじゃ。後で軸上画角の収差との対応を見る際に使うから、これを覚えておくように」

A君「放物反射面は平行光を無収差で集光できますし、楕円反射面は片方の焦点から発した光がもう片方の焦点に無収差で結像するという具合に、コーニック定数に関しては、どういった結像関係にしたいのかを考えて決められそうですが、非球面係数は、殆どの場合自動設計を使わなきゃ求められないですよね」

博士「うむ、4次の係数ぐらいであれば解析的に求めることも出来るかもしれんが、高次の係数に関しては自動設計に頼らざるを得ない。ただ、この連載では、自動設計が万能ではないということを繰り返し述べてきたが、最適化を使って求めたのだから最適解だとは限らない、と言う話をするぞ」

A君「また、CODE V批判ですか・・・」

博士「ツールの問題を知っておくことで、より上手い使い方を考えて欲しいということじゃ。自動設計を過信してはいけない、ということじゃよ」

A君「で?何を考えれば良いのですか?」

博士「たとえば、自動設計を行うとき、コーニック定数と非球面係数の使い分けは、どのようにしているかな?」

A君「いや、特に使い分けとか考えずに、設計自由度をあげるために両方使ってます」

博士「“自動設計では自由度が高い方が良い“、これに関しては前回注意するように言ったが。
CODE VやZemaxなどの設計ツールで、コーニック定数と非球面係数の両方を変数にして自動設計にかけると、コーニック定数の絶対値が(負側に)大きくなることがよくある。本当にそのkの値が適切ですか?非球面係数とkの両方を使う必要は本当にあるのですか?ということを・・・」

A君「考えてみるのじゃ!という内容ですね。分かりましたよ」

博士「うむ。前述のコーニック面を展開して整理するとやはりべき級数多項式となるので、非球面の式は以下のようにも書ける。

各項の係数には、kとr、そして各次数の非球面係数が含まれているね。そのため、kの値は2次以外の全次数に影響する。一方、個別の次数をコントロールしたい場合には、各非球面係数の方が有効なのが分かるね」

A君「次の非球面係数で3次収差を制御できて、6次の非球面係数は5次収差に効果的ということですね。そうなると、確かに、4次の係数にはkとA、6次の係数にはkとB、という感じで入ってきているので、両方必要なのかな?という気もしてきました」

博士「ところで、k=0の場合の展開式は、下記のようになるのだから、コーニック定数を0にしたときの各係数A’,B’は、k, A, Bを用いて、表すことが出来る、つまり変換することが出来る筈じゃな。」

A君「なるほど、多項式の係数を比較すれば良いわけですね。じゃあ、kを使わない式に書き換えることが出来るので、kは必要ないということですか?」

博士「まぁ、そんなに結論を急がずに。
たとえば、これ↓は携帯電話用カメラレンズの特許データに対して少し自動設計を行ったレンズじゃが、面形状は見るからに非球面だね。

どの面にも、コーニック定数と非球面係数が使用されているのじゃが、果たして、kが必要なのかどうか?を考えてみようか」

A君「最適化の結果としてkがゼロではない状態になっているというのであれば、必要なんじゃないかな?」

博士「果たして、そうかな?論より証拠。色々な面のkを0にして、どうなるか見てみよう。
前述の式を利用して、最初の面(S2)に対して、kをゼロにした面に変換してみたのが以下じゃ」

A君「ほほう。kを使わなくても、他の非球面係数を調整することで、同じ面になりますね。kは必要ないんですか?おや?共軸系なのに歪曲収差図の根元がずれていますよ?」

博士「そこは、もう少し後で触れようか。kを含む式の展開では無限の項が出てくるが、それを有限の項数で打ち切っているため、厳密には同じではないが、実用上は問題ないじゃろ。先ほどの係数では20次まで求めているが、12次以降を使わなくても殆ど変わらない状態が得られる」

A君「ふーん。じゃあ、この面(第6面)はどうかな?」

A君「ありゃりゃ?この面は上手く変換できないですね。周辺の方で光線が通らなくなっちゃいましたよ。何が違うのかな」

博士「実は、変換できない場合が二つあるのじゃ。その一つが、このレンズの第6面のように、k≦-1で曲率半径が非常に小さくなっている面なのじゃ」

A君「変換できる面と、何処が違うんですかね?」

博士「さっきの、kによる形状の違いの図を見て欲しいのじゃが、k=0の球面の場合は、光軸からの高さhが曲率半径rよりも高い領域では、光線と球面との交点は存在しない。一方、k≦-1の放物面・双曲面では、hの絶対値が大きくなっても(光軸から離れても)、交点は必ず在る。そのため、そういった面で曲率半径の外側の領域まで使用されている場合は、解析的な方法で球面ベース(k=0)には変換できないのじゃ」

A君「そうなのか。方法はあるんですか?」

博士「それに関しては後述するので、待ちたまえ。
こういった状況もあるため、非球面を最適化するときの初期データとしては、k=0(球面)ではなくk=-1(放物面)とするのが良い、という人も居る」

A君「なるほど。非球面性の強い面を用いる場合には、その方法が良さそうですね」

博士「次に、さっきも触れた最適化ツールに起因する『kが非常に大きな負の値になることがある』に関して、kが大きくなるとどういった状態になるかを考えてみよう。平凸レンズの凸面をコーニック面にして、r=100(一定)でkを変えたときの光路図と横収差の様子を以下に示す。

A君「k=-2.315で無収差になっているのは、第9回で言っていた『平面+双曲面で球面収差ゼロ』の状態ですね」

博士「その通り。ただ、球面収差はゼロでもコマ収差は補正されていないことが分かるかな?」

A君「はい!分かります!前回の検討から、この単レンズでは、kをいくつにしてもisoplanaticを満たせないことも一目瞭然です!
でも、コーニック面って、円錐面をモデル化するのに使われることもあるから、kが大きくなると面が尖ってくるような印象があったのですが、逆に、全体的には平面に近づくんですね」

博士「うむ。光軸近傍の横収差が平らになっている部分が近軸と同じ振る舞いをしている領域じゃが、|k|が2.315を通り越して大きくなっていくと、近軸計算に合致する領域が光軸近傍に制限されていくのが分かるね」

A君「この様子を見ると、収差補正上は、kが大きくなっても良いことって無さそうですね」

博士「|k|が非常に大きくなるとその面の曲率半径の値は、近軸計算には影響するが収差には影響しなくなる。そのため、さらに|k|が大きくなるなど、自動設計においてはあまり好ましくない状況じゃ。CODE Vの場合は、kの絶対値が100を超えると、警告を出すような仕様になっておる。この携帯電話用レンズデータでも、第4面に対して下記の警告メッセージが出力されているが、実は、さっきの歪曲収差図の根元がずれていたのは、この大きなkが影響しているのじゃ!」

Warning: The magnitude of the conic constant on surface 4 is very
               large ( > 100 ). The first order reference image height used in
               distortion calculations may be in error.

A君「そんなに威張らなくても。英語を読めば分かりますよ」

博士「先ほどの収差図から分かるように、コーニック定数が大きくなり過ぎると、近軸計算の適用できる範囲が面頂点(原点)近傍に極端に狭くなってしまい、実際の光学系を表現するためには適切ではないという状態になる」

A君「ディストーションの計算で用いられる近軸像高が、不適切な値になっているということですか」

博士「そのため、第4面も|k|が非常に大きいのじゃが、非球面係数だけで調整する方法では上手くいかない。この|k|と曲率半径ともに大きい面が「解析式で変換できない場合」の二つ目じゃ。ただし、この場合にはベース面は殆ど平面なので、曲率半径の値も調整することで変換可能じゃ」

A君「具体的に、どうするんですか?」

博士「フィッティングを使用する方法じゃ。『面タイプの変更』により、一旦Qbfs面(Qtypeベストフィット面(k=0))に変換して、それから多項式非球面ASPに戻すのじゃ。このレンズデータの第4面に対して行ってみると・・・」

A君「おっ、本当だ。曲率半径が変化しますね。なるほど、曲率半径が10kmですか。ベース面は平面ですね」

博士「同様に、第6面に対しても、Qbfs経由でk=0に変換してみようか。
ただ、ASPは20次までしか使えないため、「面タイプの変換」を行うと以下の警告が発せられる。

Surface 6 conversion is done by least squares fit - RMS fit error is 0.236E-05 mm.
警告: Some high order terms were ignored during conversion on surface 6. 

「次数が足りない」旨の警告なので、30次までを扱えるSPS ODDを使用してみると、フィッティング精度は3桁程良くなる。

Surface 6 conversion is done by least squares fit - RMS fit error is 0.163E-08 mm. 

A君「なるほど。上手く変換できました。・・・でも、この方法があるなら、係数変換のマクロを使わなくても良いのではないですか?なんだか、冒頭の留守番電話の話にも似ているような気もしますが」

博士「うむ・・・まぁ・・・そうかもしれんが・・・“在る物は使おう。無い物は作ろう。”という研究姿勢が大事なのじゃよ。え〜、kに関してまとめておこうか。

(a)|k|が非常に大きな面(&曲率半径も大きな面):
計算上好ましくないので、kを強制的にゼロにした方が良い。
k=0に変換するには、非球面係数だけでなく曲率半径も変更した方が良い。

(b)k=-1〜-10程度で、非常に小さな曲率半径の面:
k=0(球面ベース)の非球面に変換することはできない。この部分に関しては次回に触れようと思う。
実は、双曲面は低次(〜10次)の偶数次多項式では表せないので、高次の偶数次まで使うか低次の奇数次項が必要なのじゃ。
(c)これら以外の非球面:
k→0とすることが可能。

という感じじゃな」

A君「コーニック面を展開したときの各次数の寄与量を評価するマクロを作って、このレンズに対して実行してみました。横軸が光軸からの距離で、縦軸が各項によるサグ量です」

博士「ほほう、S2やS3は2次成分が強い面であることがわかるね。こういう面は、k=0とすることが出来る。S6は、高次成分の方が強い影響力を持っているのが分かるね。こういう面は、k=0にすることは出来ない。S4も高次成分が強いように見えるが、この図では10次で打ち切っているためで、実は隣接項同士が打ち消しあって殆ど平面になっているのじゃな。
さて最後に、前記した(c)のような面で、コーニック定数と非球面係数の相補性に関して自動設計での振舞いを見てみよう」

A君「最初の方で出てきた『コーニック定数と非球面係数の使い分け』のことですね」

博士「第1レンズの両面の非球面を、球面の状態から最適化してみよう。この面では、元々は、k, A, B, C, Dが使用されていたが、先の検討では、kを使わなくても表現可能な面に分類されるね。変数設定として非球面係数とkを組み合わせた3種類で行ってみた。それぞれの場合の変数の数と自動設計の結果の評価関数を以下の表に示す。」

A君「へぇ〜、Aを使わない場合(ハ)が断トツに評価関数が小さくなっていますね」

博士「面形状の4次の係数にはkとAの両方が含まれていたことを思い返して欲しいが、kがどうしても必要な面でない場合の最適化では、kを使うならAは使わなくても良い、むしろ、(イ)よりも(ロ)の方が評価関数が小さくなっていることから、自動設計としてはkとAの両方を使うのは好ましくない、と考えた方が良いかもしれんな」

A君「非球面は奥が深いですね」

博士「次回も、非球面の話の続きじゃ」

今回の話で使用したCODE V用のレンズデータやコマンド操作などは、ここからダウンロードできます。

CODE Vに興味を持たれた方は、トライアル版(無料)にて今回の事例や他の機能確認を行うことも出来ます。詳しくはこちらをご覧ください。

<< 前へ | 次へ >>

目次
おすすめリンク:光学基礎(入門)

光ってなんだろう!?
小学生にもわかる、光についての基礎的な話を紹介します。

いまさらきけない光学計算
光学ソフトウェアを、不安なく使うために必要な「光学」やその「計算過程」などを紹介します。

A君のレンズ設計物語
レンズ設計の初心者 A君がレンズ設計を学んで行く物語を連載しています。
「何故凸レンズと凹レンズが必要なのか?」「設計ツールが無いと単レンズさえ設計できない・・・」などお悩みの方にお勧めです。

新入社員の独り言
入社1年目のS君が光学と光学設計・シミュレーション解析ツール CODE Vを学び、一人前の技術スタッフになっていく過程をご覧ください。(全7話:完結)

光学設計コンテスト
弊社で光学設計コンテストを開催し、エンジニア同士が、互いの設計スキルを競い合いました。エントリーした4人の設計アプローチを順次ご紹介します。

 


お問い合わせ