fullseye

mesh_displace_fbm — 3D terrain op

使い方

Roughen a mesh by displacing vertices along their normals with seeded fBm noise → (V, F).

amplitude is the peak displacement in the mesh’s own units (the Itokawa STL is in km, so 0.003 = 3 m); every vertex moves by at most amplitude (|fBm| ≤ 1, asserted by tests). scale is the base wavelength (default = bounding-box diagonal / 12); octaves/lacunarity/gain shape the spectrum (multifractal ridges come from the default 4 octaves). Deterministic for a given seed; amplitude=0 returns the input unchanged. Face normals of the displaced mesh carry the matching shading perturbation (no separate bump map is faked). Fail-closed on degenerate meshes / non-finite arguments.

各頂点 x_i を面積重み付き頂点法線 n_i に沿って x_i + amplitude · fBm(x_i) · n_i へ動かす。fBm は :func:fbm_noise(seed 固定の格子 value noise、octaves 段を lacunarity 倍の周波数・gain 倍の振幅で重ね、振幅和で割って [-1, 1])。 面配列 F は変えず、返り値は (V' (N,3) float64, F のコピー)

波長ごとに振幅を指定したい・粗いメッシュで折り返しを避けたい場合は mesh_displace_spectrum(帯域制限あり)を使う。粗さを幾何に入れず陰影だけに載せるなら bump_normals_fbm

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(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 operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

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