cast_shadow — 3D render op

• Data kinds: mesh × vector → image2d

• Call: import fullseye as fs; fs.ledger.cast_shadow(V, F, light, *, pose=None, intrinsics=None, width: 'int' = 256, height: 'int' = 256, directional: 'bool' = True, penumbra: 'float' = 0.0, samples: 'int' = 16, shadow_res: 'int' = 512, bias=None, pcf: 'int' = 0) -> 'np.ndarray' (implementation को सीधे call करना हो तो import render_shadow; render_shadow.cast_shadow(V, F, light, *, pose=None, intrinsics=None, width: 'int' = 256, height: 'int' = 256, directional: 'bool' = True, penumbra: 'float' = 0.0, samples: 'int' = 16, shadow_res: 'int' = 512, bias=None, pcf: 'int' = 0) -> 'np.ndarray', registry से लेना हो तो ops3d.get("cast_shadow"))

उपयोग

mesh की cast shadow / soft shadow की गणना करता है और visibility map (H,W) ∈ [0,1] लौटाता है।

1=पूरी तरह प्रकाशित / 0=पूरी छाया। जिस background pixel पर प्रकाश ग्रहण करने वाली सतह न हो वह 1.0 है।

Args:

• V, F vertex (N,3) और triangle (M,3)। खाली mesh छाया नहीं डाल सकता, इसलिए अस्वीकार।

• light (3,) vector। directional=True हो तो parallel light की दिशा (scene → light source), False हो तो point light की world position।

• pose/intrinsics camera। छोड़े जाने पर render3d.auto_view से पूरा किया जाता है।

• penumbra area light का angular radius (डिग्री)। 0 पर hard shadow, जितना बढ़ाएँ penumbra उतना फैलता है।

• samples penumbra samples की संख्या (केवल penumbra>0 पर उपयोग, Fibonacci disc)।

• shadow_res shadow map की 1 भुजा का resolution।

• bias shadow निर्णय का depth bias (world इकाई)। None हो तो texel size और ढलान से अपने आप तय (acne / peter-panning को दबाता है)।

• pcf shadow map पढ़ते समय मिलाए जाने वाले neighbourhood का radius [texel]। 0 (default) nearest 1 point = पहले जैसा। 1 हो तो 3x3 के निर्णयों का औसत लेता है (depth का औसत नहीं —— depth का औसत आगे और पीछे को बराबर कर देता है और ऐसी सतह बनाता है जो है ही नहीं)। सीमा के texel में quantize होकर सीढ़ी बनने को, shadow map बढ़ाए बिना कम करता है।

विधि shadow mapping (Williams 1978) है: light source से render_mesh द्वारा depth लेकर, camera की ओर के प्रकाश ग्रहण करने वाले surface points को light space में project करके depth की तुलना करता है। fail-closed: degenerate mesh, अमान्य light source और non-positive size/resolution पर ValueError।

पृष्ठभूमि 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 करते हैं)

• render_beauty — py -3.11 examples_3d/render_beauty.py

• render_shadow — py -3.11 examples_3d/render_shadow.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 · phong_shade · matcap_shade · supersample_mesh


*Provenance: render_shadow.py — 3D operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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