fullseye

observe_surface — OPTICS scene op

使い方

観察光学系を組んで、指定した素材の仕上げ面を撮る(一行で使える入口)。

ユーザー要望(2026-09-05)「基本的な観察用の光学系をレイアウトした場合を想定して、 それらのパラメータを与えて、アルミなどの素材を指定した上で、ヘアライン画像を 生成できるといいな。最初は同軸照明でも良い」。

光学系は NA でも F 値でも指定できる。作動距離・焦点距離・画素ピッチ・波長から :func:optical_budget が倍率・エアリー半径・被写界深度・分解限界を出し、その まま撮像に効く(回折ぼけは :func:diffraction_blur、ぼけの深さ方向は :func:depth_of_field)。素材は glassmirror.METALS、仕上げは surface_finish の種類。

illumination は coaxial / ring / dome / bar / backlight。同軸は面が鏡なら 器具が映って明るく(明視野)、低角のリングは映らないので暗い(暗視野)。

返り値 dict: image(線形 RGB)/ camera / scene / light / budget(上の光学バジェット)/ defect_mask(defects を渡したとき)。

既定の引数は 117 秒かかる。 「一行で使える入口」と書いてあるが、 既定 resolution=(256, 256) / supersample=2 は 2 分の計算である (2026-09-06 実測、この機械):

============== ============= ============= resolution supersample 1 supersample 2 ============== ============= ============= 32 x 32 0.25 s — 64 x 64 0.69 s — 128 x 128 2.40 s 19.10 s 256 x 256 19.12 s 116.93 s ============== ============= =============

画素あたりの費用が一定ではない(32→256 で画素は 64 倍なのに時間は 76 倍)。 内訳は _light_background が 16.2 秒中の 11.0 秒で、面光源 196 点 x 鏡面 候補 25 回のループ。発光点をまとめて処理する書き換えは試したが 1.3 倍 にしかならず(律速は Python のループではなくメモリ帯域)、まだ解いていない —— docs/KNOWN_ISSUES.md に残してある。

試すときは小さく呼ぶこと: observe_surface(resolution=(64, 64), supersample=1) なら 0.69 秒で、仕上げの見え方の違いは十分わかる。 連鎖ファザーもこの理由で 32 x 32 / supersample 1 に固定してある (typed_catalog.OP_PARAM_HINTS)。

ファミリ共通の入力契約(fail-closed)

optics の全 op は入力を検証してから計算する(黙って通さない):

詳しい使い方ガイド

背景知識ガイド(この op の手前にある物理・規約)

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(table を入力に取れる)

abcd_matrix · wavefront_stats · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd · spot_diagram

同カテゴリ(scene)

scene_material · scene_plane · scene_sphere · scene_box · scene_cylinder · surface_defect · surface_finish · random_defects


Provenance: optscene.py — OPTICS operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.