terrain op• 資料種類:mesh → mesh
• 呼叫: import fullseye as fs; fs.ledger.mesh_displace_fbm(V, F, amplitude: 'float', *, scale=None, octaves: 'int' = 4, lacunarity: 'float' = 2.0, gain: 'float' = 0.5, seed: 'int' = 0)(要直接呼叫實作,import render3d; render3d.mesh_displace_fbm(V, F, amplitude: 'float', *, scale=None, octaves: 'int' = 4, lacunarity: 'float' = 2.0, gain: 'float' = 0.5, seed: 'int' = 0);從台帳取用則 ops3d.get("mesh_displace_fbm"))
用帶 seed 的 fBm 雜訊沿法線位移頂點,使網格變粗糙 → (V, F)。
amplitude 是以網格自身單位計的峰值位移(糸川的 STL 以 km 為單位,因此 0.003 = 3 m);每個頂點最多移動 amplitude(|fBm| ≤ 1,由測試斷言)。scale 是基本波長(預設 = 包圍盒對角線 / 12); octaves/lacunarity/gain 決定頻譜形狀(多重碎形的脊來自預設的 4 個倍頻程)。給定 seed 時結果確定;amplitude=0 原樣回傳輸入。位移後網格的面法線帶有相應的著色擾動(不另外偽造 bump map)。對退化網格 / 非有限參數 fail-closed。
將各頂點 x_i 沿面積加權頂點法線 n_i 移動到 x_i + amplitude · fBm(x_i) · n_i。fBm 是 fbm_noise(seed 固定的格點 value noise,將 octaves 級按 lacunarity 倍頻率、gain 倍振幅疊加,再除以振幅和得到 [-1, 1])。不改變面陣列 F,回傳值為 (V' (N,3) float64, F 的副本)。
• amplitude:以網格單位計的最大位移(0 以上)。負值、非有限值拋出 ValueError,為 0 時原樣回傳輸入的副本(不計算雜訊)。
• scale:雜訊的基本波長(網格單位)。None = 包圍盒對角線 / 12。0 以下拋出 ValueError。
• octaves ∈ [1, 16]、lacunarity > 0、gain ∈ (0, 1],超出範圍拋出 ValueError。
• 法線由面的環繞順序產生,因此假定網格一致朝外。因面積為零而無法確定法線的頂點向 +Z 移動(_vertex_normals 的替代值)。
若要按波長指定振幅、或在粗網格上避免混疊,請使用 mesh_displace_spectrum(帶頻帶限制)。若不把粗糙度放入幾何而只加在著色上, 請用 bump_normals_fbm。
• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。
• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。
• itokawa_regolith_hero — py -3.11 examples_3d/itokawa_regolith_hero.py
mesh 作為輸入)mesh_to_voxel · mesh_to_points · to_points · fuse_to_voxel · ambient_occlusion · cast_shadow · supersample_mesh · render_beauty
terrain)terrain_region_mask · 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.