render op• Data kinds: mesh → rgbimage
• Call: import fullseye as fs; fs.ledger.render_regolith(V, F, *, pose=None, intrinsics=None, size: 'int' = 512, ss: 'int' = 2, sun: 'Sequence[float]' = (0.3, 0.4, 1.0), w: 'float' = 0.42, g: 'float' = -0.35, B0: 'float' = 0.87, h: 'float' = 0.01, roughness_deg: 'float' = 26.0, sun_angular_diameter_deg: 'float' = 0.53, shadow_samples: 'int' = 4, ao_samples: 'int' = 32, tint: 'Sequence[float]' = (1.0, 0.97, 0.93), self_illumination: 'float' = 1.0, exposure='auto', albedo_variation: 'float' = 0.12, seed: 'int' = 0, smooth_normals: 'bool' = True, background: 'Sequence[float]' = (0.0, 0.0, 0.0), bump=None, vertex_normals=None, vertex_albedo=None, exposure_target: 'float' = 0.45) -> 'np.ndarray' (implementation को सीधे call करना हो तो import render_beauty; render_beauty.render_regolith(V, F, *, pose=None, intrinsics=None, size: 'int' = 512, ss: 'int' = 2, sun: 'Sequence[float]' = (0.3, 0.4, 1.0), w: 'float' = 0.42, g: 'float' = -0.35, B0: 'float' = 0.87, h: 'float' = 0.01, roughness_deg: 'float' = 26.0, sun_angular_diameter_deg: 'float' = 0.53, shadow_samples: 'int' = 4, ao_samples: 'int' = 32, tint: 'Sequence[float]' = (1.0, 0.97, 0.93), self_illumination: 'float' = 1.0, exposure='auto', albedo_variation: 'float' = 0.12, seed: 'int' = 0, smooth_normals: 'bool' = True, background: 'Sequence[float]' = (0.0, 0.0, 0.0), bump=None, vertex_normals=None, vertex_albedo=None, exposure_target: 'float' = 0.45) -> 'np.ndarray', registry से लेना हो तो ops3d.get("render_regolith"))
asteroid के regolith को physics-based तरीके से render करता है (Hapke + सूर्य के angular diameter वाली ray-cast shadows + ambient light शून्य) → RGB (size,size,3)।
render_beauty का संयोजन:
• reflectance नियम = Hapke (w, g, B0, h, roughness_deg; default Itokawa के S-type typical मान)।
• shadow = render_shadow.shadow_raycast (apparent diameter sun_angular_diameter_deg, default 0.53° = Sun। geometry के अनुसार penumbra कुछ cm है, इसलिए व्यवहार में hard shadow)। ज़मीन (pedestal) नहीं रखी जाती।
• ambient light 0 (अंतरिक्ष में skylight नहीं होती)। shadow का निचला स्तर सिर्फ़ terrain के एक-reflection approximation self_illumination से तय होता है।
• tone = linear (AMICA की 8bit images से मेल के लिए exposure × clip)। exposure='auto' वह exposure है जिसमें object pixels का 99.5 percentile 0.95 पर आता है (deterministic)। exposure='median' वह exposure है जिसमें रोशन faces का median (object pixels में से 99.5 % point के 30 % या उससे ऊपर वाले pixels का median) exposure_target (default 0.45) पर आता है —— यह 2026-09-03 के hero के "ज़्यादा exposure वाला सफ़ेद आलू" बन जाने का उपाय है (99.5 % point पर मिलाने से, किनारे तक चमकीली Lommel-Seeliger surface पर median 0.7 से ऊपर चला जाता है)। clip rate caller मापता है (hero को < 0.5 % चाहिए)।
• smooth_normals=True: vertex normals के Phong interpolation से shading को smooth करता है (geometry और shadow नहीं बदलते)।
• albedo_variation: albedo की spatial असमानता (default 12 %, Saito et al. 2006 का उजला-अँधेरा terrain)।
• bump: render_beauty का bump (sub-facet relief के लिए shading normal perturbation)।
tint mean 1 पर normalise किया गया रंग-tint है। fail-closed: arguments को निचले ops validate करते हैं; exposure 'auto' / 'median' या कोई positive संख्या होनी चाहिए। deterministic (कोई random नहीं)।
• blender_interop — Blender के साथ उपयोग — shape बनाएँ, fullseye से मापें (सावधानियाँ: axes, units, ground truth)
• 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 के स्रोत।
• itokawa_regolith_hero — py -3.11 examples_3d/itokawa_regolith_hero.py
rgbimage को input के रूप में लेते हैं)render)project_points · render_point_depth · render_volume_projection · render_shaded · ambient_occlusion · cast_shadow · phong_shade · matcap_shade
*Provenance: render_beauty.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.