brdf_lommel_seeliger — 3D render op

• Data kinds: normalmap → image2d

• Call: 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' (implementation को सीधे call करना हो तो 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', registry से लेना हो तो ops3d.get("brdf_lommel_seeliger"))

उपयोग

Lommel-Seeliger reflectance law (किनारे तक उजला regolith) से normal map को shade करता है और I/F (H, W) लौटाता है।

Lambert (phong_shade का diffuse term) किनारे पर (μ→0) 0 हो जाता है, लेकिन Lommel-Seeliger μ0/(μ0+μ) है, इसलिए किनारे पर भी μ0 जितना चमकीला रहता है, और asteroid व चाँद जैसा "सपाट disc" दिखता है। w = single-scattering albedo। fail-closed (normal का shape, w की range)।

गणना brdf_shade के model='lommel_seeliger' जैसी ही है: हर pixel के लिए μ0 = clip(N·L, 0, 1) और μ = clip(N·V, 0, 1) लेकर I/F = π · (w/4π) · μ0/(μ0+μ) (= (w/4)·μ0/(μ0+μ)) लौटाता है। जिन pixels में μ0 या μ 0 या उससे कम है (रोशनी न पड़ने वाले faces, नज़र से उल्टी दिशा वाले faces) वे 0 होते हैं।

• normals: float (H, W, 3)। length 0 वाले vectors को background माना जाता है और output 0 (render3d.render_mesh के normals सीधे दिए जा सकते हैं)। normalisation अंदर होता है।

• light / view: surface→light source और surface→viewpoint की direction vectors (अंदर normalise होती हैं)। camera नियम के अनुसार -Z की ओर देखता है, इसलिए default view=(0,0,1)। parallel light और orthographic approximation; दिशा पूरी image में स्थिर।

• w: single-scattering albedo; (0, 1] के बाहर ValueError।

return value float64 (H, W) का I/F है। orthographic projection में light == view (phase angle 0) होने पर μ0 = μ होता है और पूरे foreground का एक-समान मान w/8 होता है। values [0, w/4) में रहती हैं और [0,1] पर normalise नहीं होतीं। highlight चाहिए तो phong_shade, और opposition effect व roughness भी चाहिए तो brdf_hapke इस्तेमाल करें।

पृष्ठभूमि guides (इस op के पीछे की physics और conventions)

• blender_interop — Blender के साथ उपयोग — shape बनाएँ, fullseye से मापें (सावधानियाँ: axes, units, ground truth)

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• itokawa_regolith_hero — py -3.11 examples_3d/itokawa_regolith_hero.py

वे अगले ops जिनसे type जुड़ता है (image2d को input के रूप में लेते हैं)

fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade

इसी category के (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. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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