project op• 데이터 종류: mesh × points → table
• 호출: import fullseye as fs; fs.ledger.cad_surface_to_pixel(mesh, points, K=None, R=None, t=None, image_size=None, cull_backfaces=True, depth_tol=1e-06, strict=False)(구현을 직접 호출하려면 import cadmap; cadmap.cad_surface_to_pixel(mesh, points, K=None, R=None, t=None, image_size=None, cull_backfaces=True, depth_tol=1e-06, strict=False), 원장에서 가져오려면 opscadmap.get("cad_surface_to_pixel"))
3-D 점 (N,3) → 화소 + 가시성(가려짐·뒷면·화면 밖을 구분해 돌려줍니다).
camera.project_points로 투영한 뒤, 같은 화소로 광선을 다시 쏘아 앞쪽에 다른 면이 없는지를 확인한다. 이것을 하지 않으면, 숨겨진 점의 화소 좌표를 "거기에 보이고 있는" 것처럼 반환해 버린다. 반환은 dict:
• uv (N,2) — 화소 (u=열, v=행). depth <= 0인 점이라도투영값은 반환되지만 in_front = False가 선다.
• depth (N,) — 카메라 좌표 Z.
• in_front (N,) bool — depth > 0.
• in_image (N,) bool — 화면 틀 안(0 <= u <= width-1 이고 0 <= v <= height-1).
• occluded (N,) bool — 같은 시선 위에서, 그 점보다 앞쪽에 면이 있다.
• occluder_face (N,) int64 — 가리고 있는 면. 없으면 -1.
• visible (N,) bool — in_front & in_image & ~occluded.
• camera 실제로 사용된 카메라.
• winding_fixed bool — 안쪽으로 감긴 닫힌 메시를 검출하여 고쳤는지.
depth_tol은 "자기 자신의 면에 가려졌다"고 오판정하지 않기 위한 상대 허용치이며, 가림으로 판정하는 것은 z_hit < depth * (1 - depth_tol) - depth_tol일 때. 닫힌 mesh의 뒤쪽에 있는 점은 앞쪽 벽에 가려져 occluded = True가된다 — 이것은 사양이지 누락이 아니다.
가림 판정은 감김 방향에 의존한다(앞쪽 벽이 뒷면으로 컬링되면, 뒤쪽의 점까지 visible이 된다). 그러므로 cull_backfaces=True에서는안쪽으로 감긴 닫힌 메시를 검출하고, 기본적으로 감김을 고쳐 winding_fixed=True를 반환한다. strict=True이면 ValueError, cull_backfaces=False에서는 검사 자체를 하지 않는다(자세한 내용은 _orient_for_culling).
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• defect_to_cad — py -3.11 examples/defect_to_cad.py
table 를 입력으로 받는 것)—
project)—
*Provenance: cadmap.py — CADMAP 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.