mesh_displace_spectrum — 3D terrain op

• 데이터 종류: mesh → mesh

• 호출: import fullseye as fs; fs.ledger.mesh_displace_spectrum(V, F, wavelengths=(0.06, 0.03, 0.015, 0.0075, 0.00375), amplitudes=(0.003, 0.00176, 0.00103, 0.0006, 0.00035), *, seed: 'int' = 0, nyquist: 'float' = 2.0, fade: 'float' = 1.0, weights=None, local_edge=None)(구현을 직접 호출하려면 import render3d; render3d.mesh_displace_spectrum(V, F, wavelengths=(0.06, 0.03, 0.015, 0.0075, 0.00375), amplitudes=(0.003, 0.00176, 0.00103, 0.0006, 0.00035), *, seed: 'int' = 0, nyquist: 'float' = 2.0, fade: 'float' = 1.0, weights=None, local_edge=None), 원장에서 가져오려면 ops3d.get("mesh_displace_spectrum"))

사용법

진폭 스펙트럼을 명시해 대역 제한하면서 정점을 법선 방향으로 변위시킵니다.

대역 제한은 정점마다; (V, F) 를 반환.

displacement_i = Σ_k A_k · n_k(x_i) · gate_k(i) · w_k(i), 여기서 (wavelength_k, amplitude_k) 쌍마다 seed 고정 value-noise 옥타브 n_k ∈ [−1, 1] 하나(메시 단위 — Itokawa STL 은 km 단위이므로 기본값은 60 m 에서 3 m, A ∝ λ^0.77 로 줄어 3.75 m 에서 0.35 m), gate = *이* 메시에 대한 displacement_band_weights (nyquist × local edge 보다 짧은 옥타브는 적용하지 않는다 — 소면 잡음으로에일리어싱되므로; 대신 bump_normals_fbm 으로 보낸다), weights = 선택적인 (N,) 정점별 또는 (K, N) 옥타브별·정점별 [0,1] 범위 계수(예:

원본 모델의 합성 기복 가중치 1 − gate). 정점에서의 최대 변위는많아야 Σ_k A_k (테스트가 고정). mesh_displace_fbm (단일진폭, 옥타브 비 2, 대역 제한 없음)과 달리 모든 옥타브의 진폭이 명시적이다. seed 하에서 결정적. 형상/비유한/음수 값에 대해 fail-closed.

절차: (1) displacement_band_weights 로 gate (K,N) 을 만든다, (2) weights 가있으면 곱한다, (3) 옥타브 k 마다 seed 고정 value noise n_k(x) ∈ [-1,1] (파장 λ_k, 격자 오프셋은 옥타브 번호로 바꾼다)를 평가하여 Σ_k A_k · gate_k · n_k 를 법선 방향 변위로 삼는다, (4) 면적 가중 정점 법선을 따라정점을 움직인다. 반환값 (V' (N,3) float64, copy of F).

• wavelengths / amplitudes: 같은 길이(1~32 개)의 양수 열. 메시 단위. 개수 불일치, 비어 있음, 33 개 이상, 음의 진폭, amplitudes=None 은 ValueError. 진폭 0 인옥타브는 평가를 건너뛴다.

• nyquist / fade / local_edge: 대역 게이트 설정(displacement_band_weights 와 같음).

• weights: (N,) 이면 모든 옥타브 공통, (K,N) 이면 옥타브별 계수. 값은 [0, 1] 로 한정되며 범위 밖이나 형상 불일치는 ValueError.

• seed: 같은 seed 이면 bump_normals_fbm 과 같은 격자를 공유한다(지오메트리로 담을 수 없는옥타브를 음영 쪽으로 연속적으로 넘길 수 있다).

mesh_displace_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)

mesh_displace_fbm · terrain_region_mask · mesh_scatter_boulders · mesh_edge_lengths · mesh_subdivide · displacement_band_weights · bump_normals_fbm


*Provenance: render3d.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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