terrain op• Datenarten: mesh → signal
• Aufruf: import fullseye as fs; fs.ledger.terrain_region_mask(V, F, *, smooth_fraction: 'float' = 0.3, method: 'str' = 'neck', seed: 'int' = 0) -> 'np.ndarray' (die Implementierung direkt: import render3d; render3d.terrain_region_mask(V, F, *, smooth_fraction: 'float' = 0.3, method: 'str' = 'neck', seed: 'int' = 0) -> 'np.ndarray'; aus dem Register: ops3d.get("terrain_region_mask"))
Geländegewichte je Face (M,) in [0,1]: 0 = glattes Regolith-„Meer“, 1 = raues Hochland.
method='neck' (Standard, von Itokawa inspiriert): das Meer ist das Band von Flächen um den schmalsten Querschnitt entlang der Haupt-(Längs-)Achse -- MUSES-C Regio liegt im Hals zwischen Kopf und Körper -- so weit verbreitert, bis es smooth_fraction der Oberfläche abdeckt. method='noise': niederfrequentes geseedetes fBm, am flächengewichteten smooth_fraction-Quantil mit Schwellwert versehen (generische Flecken). method='slope': Flächen werden nach lokaler Neigung geordnet (Winkel zwischen Flächennormale und geglätteter Nachbarschaftsnormale); der flachste Anteil smooth_fraction der Fläche ist Meer. Deterministisch; fail-closed bei ungültiger Eingabe.
Rückgabewert ist ein float64 (M,) pro Fläche mit binären Werten 0 oder 1 (keine Zwischenwerte). Das Verfahren bildet 1 Score pro method, akkumuliert die Fläche beginnend bei den Flächen mit dem kleinsten Score und macht alles bis smooth_fraction der Gesamtfläche zum "Meer" (0).
• 'neck': entlang der flächengewichteten Hauptachse der Flächenschwerpunkte (1. SVD-Komponente) wird das 20 bis 80 %- Intervall der Hauptachsenkoordinate in 24 Bins geteilt, die Mitte des Bins mit dem kleinsten Radius-90-Perzentil gilt als "Taille", und der Abstand von der Taillenebene ist der Score. Bins mit weniger als 8 Flächen werden ignoriert. seed wird nicht verwendet.
• 'noise': Score ist fbm_noise an den Flächenschwerpunkten (Wellenlänge = Diagonale der Bounding Box / 3, 2 Oktaven, seed).
• 'slope': Score ist der Winkel (Radiant) zwischen Flächennormale und "dem Mittel der Vertexnormalen der 3 Vertices". seed wird nicht verwendet.
smooth_fraction liegt in [0, 1] (außerhalb oder nicht endlich löst ValueError aus). Bei 0 werden sofort alle Flächen 1, bei 1 alle Flächen 0 zurückgegeben. Jede andere method löst ValueError aus. Die erhaltenen Gewichte sind dafür gedacht, als region_weights an mesh_scatter_boulders / sample_boulders übergeben zu werden, damit keine Felsbrocken im Meer platziert werden.
• 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
signal als Eingabe)terrain)mesh_displace_fbm · mesh_scatter_boulders · mesh_edge_lengths · mesh_subdivide · displacement_band_weights · mesh_displace_spectrum · bump_normals_fbm
*Provenance: render3d.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.