terrain_region_mask — 3D 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"))

Verwendung

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.

Referenzen (Beispieldaten, Literatur)

• 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.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• itokawa_regolith_hero — py -3.11 examples_3d/itokawa_regolith_hero.py

Typkompatible Folge-Operatoren (nehmen signal als Eingabe)

fuse_to_voxel

Gleiche Kategorie (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.