terrain_region_mask — 3D terrain op

• 資料種類:mesh → signal

• 呼叫: import fullseye as fs; fs.ledger.terrain_region_mask(V, F, *, smooth_fraction: 'float' = 0.3, method: 'str' = 'neck', seed: 'int' = 0) -> 'np.ndarray'(要直接呼叫實作,import render3d; render3d.terrain_region_mask(V, F, *, smooth_fraction: 'float' = 0.3, method: 'str' = 'neck', seed: 'int' = 0) -> 'np.ndarray';從台帳取用則 ops3d.get("terrain_region_mask"))

用法

逐面的地形權重 (M,) ∈ [0,1]:0 = 平滑風化層「海」,1 = 粗糙高地。

method='neck'(預設,源自糸川):「海」是圍繞沿主(長)軸最窄截面的一圈面帶 —— MUSES-C Regio 位於頭部與身體之間的頸部 —— 不斷加寬,直到覆蓋表面積的 smooth_fraction。method='noise':對帶 seed 的低頻 fBm 以面積加權的 smooth_fraction 分位數做閾值(通用斑塊)。method='slope':按局部坡度(面法線與平滑後鄰域法線的夾角)對面排序;面積中最平坦的 smooth_fraction 為海。確定性;對錯誤輸入 fail-closed。

回傳值為每個面的 float64 (M,),值為 0 或 1 的二值(不會出現中間值)。步驟是按 method 各產生 1 個分數,從分數小的面開始累積面積,直到達到總面積的 smooth_fraction 為止的部分為「海」(0)。

• 'neck':沿面質心的面積加權主軸(SVD 第 1 成分),將主軸座標的 20〜80 % 區間切成 24 個 bin,以各 bin 半徑 90 percentile 最小的 bin 中心為「頸縮」, 以到頸縮面的距離作為分數。少於 8 個面的 bin 忽略。不使用 seed。

• 'noise':以面質心處的 fbm_noise(波長 = 包圍盒對角線 / 3,2 個倍頻程, seed)作為分數。

• 'slope':以面法線與「3 個頂點的頂點法線平均」的夾角(弧度)作為分數。不使用 seed。

smooth_fraction 為 [0, 1] (超出範圍、非有限值拋出 ValueError)。為 0 時立即回傳全部為 1,為 1 時立即回傳全部為 0。method 不是上述之一時拋出 ValueError。所得權重用於傳給 mesh_scatter_boulders / sample_boulders 的 region_weights,使岩石不會放在海中。

參考(範例資料、文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。

• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。

可執行的範例(實際呼叫該運算子並已驗證的樣例)

• itokawa_regolith_hero — py -3.11 examples_3d/itokawa_regolith_hero.py

型別可銜接的下一個運算子(可接受 signal 作為輸入)

fuse_to_voxel

同類別(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 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

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