mesh_displace_fbm — 3D 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.

• 법선은 면의 감기 순서로 만들므로 일관되게 바깥을 향하는 메시를 가정한다. 면적 0으로 법선이정해지지 않는 정점은 +Z로 움직인다(_vertex_normals의 대체값).

파장마다 진폭을 지정하고 싶거나 거친 메시에서 에일리어싱을 피하고 싶다면 mesh_displace_spectrum(대역 제한 있음)을 사용한다. 거칠기를 기하에 넣지 않고 음영에만 싣는다면 bump_normals_fbm.

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL 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 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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