render op• Datenarten: normalmap → image2d
• Aufruf: import fullseye as fs; fs.ledger.brdf_lommel_seeliger(normals, light=(0.0, 0.0, 1.0), view=(0.0, 0.0, 1.0), w: 'float' = 0.42) -> 'np.ndarray' (die Implementierung direkt: import render_shade; render_shade.brdf_lommel_seeliger(normals, light=(0.0, 0.0, 1.0), view=(0.0, 0.0, 1.0), w: 'float' = 0.42) -> 'np.ndarray'; aus dem Register: ops3d.get("brdf_lommel_seeliger"))
Schattiert eine Normalenkarte mit dem Lommel-Seeliger-Reflexionsgesetz (Regolith, der bis zum Rand hell bleibt) und liefert I/F (H, W).
Lambert (der Diffusterm von phong_shade) wird am Rand (μ→0) zu 0, Lommel-Seeliger dagegen ist μ0/(μ0+μ) und bleibt daher auch am Rand mit μ0 hell, was das Aussehen einer "flachen Scheibe" bei Asteroiden und dem Mond ergibt. w = Einfachstreu-Albedo. fail-closed (Form der Normalen, Bereich von w).
Die Berechnung ist identisch mit model='lommel_seeliger' von brdf_shade: für jedes Pixel werden μ0 = clip(N·L, 0, 1) und μ = clip(N·V, 0, 1) genommen und I/F = π · (w/4π) · μ0/(μ0+μ) (= (w/4)·μ0/(μ0+μ)) zurückgegeben. Pixel, bei denen μ0 oder μ höchstens 0 ist (unbeleuchtete Flächen, vom Blick abgewandte Flächen), sind 0.
• normals: float (H, W, 3). Vektoren der Länge 0 gelten als Hintergrund und ergeben Ausgabe 0 (die normals von render3d.render_mesh können direkt übergeben werden). Die Normierung erfolgt intern.
• light / view: Richtungsvektoren Fläche→Lichtquelle und Fläche→Blickpunkt (intern normiert). Die Kamera blickt per Konvention entlang -Z, daher Standard view=(0,0,1). Näherung mit parallelem Licht und Orthographie; die Richtungen sind im Bild konstant.
• w: Einfachstreu-Albedo; außerhalb von (0, 1] wird ValueError ausgelöst.
Rückgabewert ist das I/F als float64 (H, W). Bei orthographischer Projektion und light == view (Phasenwinkel 0) ist μ0 = μ, und der gesamte Vordergrund erhält den einheitlichen Wert w/8. Die Werte liegen in [0, w/4) und werden nicht auf [0,1] normiert. Für Glanzlichter phong_shade verwenden; um Oppositionseffekt und Rauheit einzubeziehen, brdf_hapke.
• blender_interop — Zusammen mit Blender — Form bauen, mit fullseye messen (Fallstricke: Achsen, Einheiten, Referenzdaten)
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• itokawa_regolith_hero — py -3.11 examples_3d/itokawa_regolith_hero.py
image2d als Eingabe)fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade
render)project_points · render_point_depth · render_volume_projection · render_shaded · ambient_occlusion · cast_shadow · phong_shade · matcap_shade
*Provenance: render_shade.py — 3D Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.