mesh_process op• 데이터 종류: mesh → measurement
• 호출: import fullseye as fs; fs.ledger.mesh_volume(mesh) -> 'float'(구현을 직접 호출하려면 import mesh_props; mesh_props.mesh_volume(mesh) -> 'float', 원장에서 가져오려면 ops3d.get("mesh_volume"))
> 이 연산자의 설명은 아직 번역이 없습니다. 원문을 그대로 싣습니다.
閉じた三角形メッシュが囲む符号付き体積 → float。
発散定理(divergence theorem)で `V = (1/6)·Σ v0 · (v1 × v2)`。面の巻き順が外向き
(右手系)なら正、内向きなら負になる —— 符号は向きの検査そのもので、負が
返ったら法線が裏返っている。
Args:
mesh: `(vertices (N,3), faces (M,3))` のタプル。
Returns:
符号付き体積(float、座標の単位の 3 乗)。
Raises:
ValueError: `mesh が (vertices, faces)` の 2 要素でない、形状不正、
非有限座標、非整数・範囲外の index、空のとき。
★**voxel_to_mesh(marching cubes)の返りは内向き巻きなので、そのまま渡すと
負になる**(実測: 1000 voxel の立方体で -985.67)。「負 = 法線が裏返っている」
のは正しいが、この組み合わせでは裏返っているのが既定なので、体積が欲しい
だけなら `abs() を取るか faces[:, ::-1]` で巻き直すこと。向きの検査に
使うのは、巻き順を自分で決めた(または向きを揃えた)メッシュに対して。
限界(honest): 発散定理は閉じた曲面でのみ成り立つ。開いたメッシュ
(穴のあるスキャン)に対しても数値は返るが、それは「穴を原点へ向かって
塞いだ立体の体積」であって、欲しい量ではない。閉じているかどうかは
:func:boundary_vertices が空か、`mesh_edge_stats の boundary_edges` が
0 かで先に確かめること。自己交差があるメッシュでは重なった領域が
符号つきで二重に数えられる(これも定理どおりの挙動で、検出はしない)。
Reference (public): 発散定理による多面体体積は標準的な公式。例えば
C. Zhang & T. Chen, "Efficient feature extraction for 2D/3D objects in mesh
representation", ICIP 2001。
• blender_interop — Blender との併用 — 形を作って fullseye で測る(軸・単位・正解データの罠)
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• hull_bounds — py -3.11 examples_3d/hull_bounds.py
• mesh_props — py -3.11 examples_3d/mesh_props.py
measurement 를 입력으로 받는 것)vol_gaussian_psf · fuse_to_voxel · fresnel_reflectance · snell_angle
mesh_process)laplacian_smooth · taubin_smooth · decimate_qem · face_normals · vertex_normals · mesh_area · vertex_curvature · face_areas
*Provenance: mesh_props.py — 3D 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.