terrain op• 데이터 종류: mesh → signal
• 호출: import fullseye as fs; fs.ledger.terrain_region_mask(V, F, *, smooth_fraction: 'float' = 0.3, method: 'str' = 'neck', seed: 'int' = 0) -> 'np.ndarray'(구현을 직접 호출하려면 import render3d; render3d.terrain_region_mask(V, F, *, smooth_fraction: 'float' = 0.3, method: 'str' = 'neck', seed: 'int' = 0) -> 'np.ndarray', 원장에서 가져오려면 ops3d.get("terrain_region_mask"))
면별 지형 가중 (M,) 을 [0,1] 로: 0 = 매끄러운 레골리스 「바다」, 1 = 거친 고지.
method='neck'(기본값, 이토카와에서 착안): 바다는 주(장)축을 따라가장 좁은 단면 주위의 면 띠이다 — MUSES-C Regio는 머리와 몸통 사이의 목 부분에 있다 — 표면적의 smooth_fraction을 덮을 때까지 넓힌다. method='noise': seed가 있는 저주파 fBm을 면적 가중 smooth_fraction 분위수로 임계값 처리(일반적인 패치). method='slope': 면을국소 경사(면 법선과 평활화한 근방 법선의 사잇각)로 순위를 매기며, 면적 중가장 평탄한 smooth_fraction이 바다. 결정적; 잘못된 입력에는 fail-closed.
반환값은 면마다의 float64 (M,)이며 값은 0 또는 1의 이진값(중간값은 나오지 않는다). 절차는 method마다 점수를 1 개 만들고, 점수가 작은 면부터 면적을 누적하여 전체 면적의 smooth_fraction에 도달할 때까지를 "바다"(0)로 한다.
• 'neck': 면 무게중심의 면적 가중 주축(SVD 제1 성분)을 따라 주축 좌표의 20〜80 % 구간을 24 개 빈으로 자르고, 각 빈의 반경 90 percentile이 최소인 빈 중심을 "잘록한 부분"으로 하여잘록한 면으로부터의 거리를 점수로 한다. 8 면 미만의 빈은 무시. seed는 사용하지 않는다.
• 'noise': 면 무게중심에서의 fbm_noise(파장 = 바운딩 박스 대각선 / 3, 2 옥타브, seed)를 점수로 한다.
• 'slope': 면 법선과 "3 정점의 정점 법선 평균"이 이루는 각(라디안)을 점수로 한다. seed는 사용하지 않는다.
smooth_fraction은 [0, 1] (범위 밖·비유한은 ValueError). 0이면 전체 면 1, 1이면전체 면 0을 즉시 반환한다. method가 위 이외이면 ValueError. 얻은 가중치는 mesh_scatter_boulders / sample_boulders의 region_weights에 넘겨 바다에 바위를두지 않도록 하는 용도.
• 샘플 데이터 카탈로그(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
signal 를 입력으로 받는 것)terrain)mesh_displace_fbm · 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.