fullseye

scene_material — OPTICS scene op

使い方

材質を 1 つ作る。kind は lambert / conductor / dielectric の 3 種。

3 種しか無いのは混ぜると黙って間違うからで、増やすなら型を分ける (拡散か・金属か・透明か で光線の行き先が根本的に変わる)。

lambert: albedo(スカラまたは RGB 3 要素)だけを使う完全拡散。 conductor: metal(glassmirror.METALS)の複素屈折率で色が決まり、 finish(metalfinish.FINISHES)で異方性ローブの幅が決まる。色は指定しない。 roughness_um は面粗さ Rq [µm]。鏡面として返る割合が exp(-(4πσcosθ/λ)²) で決まる(Davies 1954 / Bennett-Porteus 1961)ので、 鏡面(0.01 = 研磨)か拡散寄り(1.0 = 梨地)かはこの 1 つで決まる。 波長が式に入るので、同じ面でも光源の波長で見え方が変わる。 metal_source は n,k の出どころ: “materials”(既定、共通の材料表の実測の数表。 glassmirror.MEASURED_METALS の 10 種 —— Ni / Pt / Ti / W / Rh もここで選べる)か “table”(5 点の粗い表)。レンズの硝材と同じ表を観察対象も引く。★2026-10-15 に glassmirror の既定が実測の表になったのに合わせた(それまで既定は粗い表で、2 つの既定が食い違っていた)。 dielectric: glass(raytrace.glass_catalog())の Sellmeier 分散で屈折し、 sigma_per_mm の Beer–Lambert で吸収する。硝材名は共通の材料表の透過材 (他社の硝材・結晶・樹脂・水)まで引ける。レンズの媒質でない材料(Si・Ge などの半導体)も materials の n で引ける。absorption_from_k=True なら材料表の消衰係数 k から α = 4πk/λ を波長ごとに足す(Si ウェハが 850 nm で不透明・1100 nm で透明になる理由)。

分光の経路(render_optscene(spectral=True) / layout_capture(mode="spectral"))では、 lambert は reflectance_curve(pairs(λ [nm], R)、外挿しない)を引き、無ければ RGB の albedo の 平均を波長によらないとみなす(仮定として結果に残る)。金属は材料表の n,k(Johnson & Christy ほか) から Fresnel で、誘電体は n(λ) で解く。RGB の経路(既定)は従来どおり。

返り値: 上記を検証済みで格納した dict(他の scene_* op にそのまま渡す)。

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

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

詳しい使い方ガイド

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

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

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

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

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

同カテゴリ(scene)

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


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

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