render op• Datenarten: mesh × vector → image2d
• Aufruf: 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' (die Implementierung direkt: 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'; aus dem Register: ops3d.get("cast_shadow"))
Berechnet Schlag-/Weichschatten eines Meshes und liefert eine Sichtbarkeitskarte (H,W) ∈ [0,1].
1=vollständig beleuchtet / 0=vollständiger Schatten. Hintergrundpixel ohne Empfangsfläche sind 1.0.
Argumente:
• V, F Vertices (N,3) und Dreiecke (M,3). Ein leeres Mesh kann keinen Schatten werfen und wird daher abgewiesen.
• light (3,)-Vektor. Bei directional=True die Richtung des Parallellichts (Szene → Lichtquelle), bei False die Weltposition einer Punktlichtquelle.
• pose/intrinsics Kamera. Wenn weggelassen, ergänzt durch render3d.auto_view.
• penumbra Winkelradius (Grad) einer Flächenlichtquelle. 0 ergibt harte Schatten; je größer, desto breiter der Halbschatten.
• samples Anzahl der Halbschatten-Samples (nur bei penumbra>0 verwendet, Fibonacci-Scheibe).
• shadow_res Auflösung von 1 Seite der shadow map.
• bias Tiefen-Bias des Schattentests (Welteinheiten). None setzt ihn automatisch aus texel-Größe und Neigung (unterdrückt acne / peter-panning).
• pcf Radius [texel] der Nachbarschaft, die beim Auslesen der shadow map gemischt wird. 0 (Standard) ist der 1 nächste Punkt = wie bisher. Bei 1 werden die 3x3- Entscheidungen gemittelt (nicht die Tiefen —— ein Mitteln der Tiefen ebnet Vorne und Hinten ein und erzeugt Flächen, die es nicht gibt). Es mildert, dass die Grenze auf texel quantisiert zur Treppe wird, ohne die shadow map zu erhöhen.
Das Verfahren ist shadow mapping (Williams 1978): Tiefe von der Lichtquelle mit render_mesh holen, die Empfangsflächenpunkte der Kameraseite in den Lichtraum projizieren und Tiefen vergleichen. fail-closed: entartete Meshes, ungültige Lichtquellen und nicht positive Größen/Auflösungen lösen ValueError aus.
• 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.
• render_beauty — py -3.11 examples_3d/render_beauty.py
• render_shadow — py -3.11 examples_3d/render_shadow.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 · phong_shade · matcap_shade · supersample_mesh
*Provenance: render_shadow.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.