mesh_subdivide — 3D terrain op

• 資料種類:mesh → mesh

• 呼叫: import fullseye as fs; fs.ledger.mesh_subdivide(V, F, *, levels: 'int' = 1, target_edge=None, max_faces: 'int' = 4000000)(要直接呼叫實作,import render3d; render3d.mesh_subdivide(V, F, *, levels: 'int' = 1, target_edge=None, max_faces: 'int' = 4000000);從台帳取用則 ops3d.get("mesh_subdivide"))

用法

以中點細分或自適應細分細化三角網格 → (V, F)。

可以是一致的中點細分(levels 遍,每遍 ×4 個面)或依目標邊長的自適應細分(target_edge:中位邊長 = target,邊段 ≤ 1.5×target,面內 Delaunay 邊 < 2×target)。

幾何形狀*不變* —— 每個新頂點都位於舊的小面上,因此表面積與封閉體積被精確保持(測試固定了這一點),且從不抽稀;只有小面的尺寸改變,因此之後的 mesh_displace_spectrum 可以承載短波長而不產生混疊。

自適應模式把每條邊切成 n = round(length / target_edge)(≥ 1)段 —— 依*邊*計數,因此相鄰面之間保持一致(沒有 T 形接點)—— 並在每個面內以面平面上間距為 target_edge 的六角格點填充,再依面做 2-D Delaunay(Qhull)三角化。因此內部的邊 ≈ target_edge,*與來源面的形狀無關*(Gaskell 的 Itokawa 面最長/最短邊比的中位數為 1.83,依面產生的格點圖樣會繼承這種各向異性;反覆的中點二分還會額外留下 2 倍的離散 (target/2, target])。在 Itokawa 模型上的實測(邊 p5/中位數/p95 = 2.6/4.7/7.2 m,target 1.5 m):見 examples_3d/itokawa_regolith_hero.py —— 測試在漸變平面上固定 p95/p5 ≤ 1.5。max_faces(預設 MAX_SUBDIVIDE_FACES)是記憶體保護:若計畫會超過它,呼叫會拋出 ValueError(fail-closed),而不是靜默地細分不足。

確定性。Fail-closed:退化網格、levels < 0、非正的 target_edge / 上限 → ValueError。

有 2 種模式,依是否給出 target_edge 切換。

• target_edge=None(均勻):把所有邊在中點切分的細分重複 levels 次(面數每 1 次變為 4 倍)。levels=0 原樣回傳輸入。每次之前若 面數×4 > max_faces 則拋出 ValueError。

• 指定 target_edge(自適應):對每條邊決定分段數 n = round(長度 / target_edge) (最少 1),由相鄰面共用,因此不會出現 T 形接點。分段數會在內部上限 64 處 被靜默截斷,因此長度超過 target_edge 64 倍的邊達不到目標。若沒有任何邊需要分割,則回傳輸入的副本。若面數估計 Σ(3 條邊的分段數之和 + 平均分段數²) 超過 max_faces,則在計算前拋出 ValueError。此模式不使用 levels。

回傳值 (V (N',3) float64, F (M',3) int64)。新頂點總是放在原本的面上,因此面積與體積不變(這不是平滑)。自適應模式依面使用 2-D Delaunay(scipy Qhull),因此在極端細長的面上品質會下降。細分後以 mesh_edge_lengths 確認邊長分布,再傳給 mesh_displace_spectrum。

參考(範例資料、文獻)

• 範例資料目錄(下載 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)

mesh_displace_fbm · terrain_region_mask · mesh_scatter_boulders · mesh_edge_lengths · 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.