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 은 입력을 그대로 반환. 각 회차 전에 face_count×4 > max_faces 이면 ValueError.
• target_edge 지정(적응): 변마다 분할 수 n = round(length / target_edge) (최소 1)를 정하고 이웃 면과 공유하므로 T 접합이 생기지 않는다. 분할 수는 내부 상한 64 로 조용히 클램프 되므로 target_edge 의 64 배를 넘는 길이의 변은 목표에 도달하지 못한다. 어느 변도 분할이 필요 없으면 입력의 복사본을 반환한다. 면 수 추정치 Σ(sum of the 3 edges' segment counts + mean segment count²) 가 max_faces 를 넘으면 계산 전에 ValueError. 이 모드에서는 levels 를 쓰지 않는다.
반환값 (V (N',3) float64, F (M',3) int64). 새 정점은 반드시 원래 면 위에 놓이므로 면적과부피는 변하지 않는다(평활화가 아니다). 적응 모드는 면마다 2-D Delaunay(scipy Qhull)를쓰므로 극단적으로 가늘고 긴 면에서는 품질이 떨어진다. 세분 후 mesh_edge_lengths 로 변 길이 분포를확인하고 mesh_displace_spectrum 에 넘긴다.
• 샘플 데이터 카탈로그(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 · 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.