ambient_occlusion — 3D render op

• 数据种类:mesh → image2d

• 调用: import fullseye as fs; fs.ledger.ambient_occlusion(V, F, pose=None, intrinsics=None, width: 'int' = 256, height: 'int' = 256, n_dirs: 'int' = 64, max_dist: 'float | None' = None, k: 'int' = 3, background: 'float' = 1.0, method: 'str' = 'auto') -> 'np.ndarray'(要直接调用实现,import render_ao; render_ao.ambient_occlusion(V, F, pose=None, intrinsics=None, width: 'int' = 256, height: 'int' = 256, n_dirs: 'int' = 64, max_dist: 'float | None' = None, k: 'int' = 3, background: 'float' = 1.0, method: 'str' = 'auto') -> 'np.ndarray';从台账取用则 ops3d.get("ambient_occlusion"))

用法

把网格渲染成 AO 贴图 (H, W),取值 [0,1]。

用 render3d.render_mesh 取得 depth / silhouette / 三角形 id 与透视校正重心坐标 (光栅化与隐面消除交给它,不重新发明),把物体空间 vertex_occlusion 的顶点 AO 从覆盖该像素的三角形的 3 个顶点做重心插值后烘焙进去。物体外(silhouette=0)为 background(默认 1.0=完全暴露)。省略 *pose* / *intrinsics* 时由 render3d.auto_view 取景。fail-closed 校验遵循下层函数。

k 自 2026-09-02 起不再使用(为向后兼容而保留)。在此之前是在相机空间中取最近邻 k 个顶点并按逆距离权重混合,但在顶点稀疏的面上会形成多边形的单元,在文章 hero 图像的地面上表现为斑驳花纹。重心插值是三角形内严格的线性插值,因此与顶点密度无关地连续,也不会误拾相邻的其他物体的顶点。

背景知识指南(该算子背后的物理与约定)

• blender_interop — 与 Blender 配合使用 —— 在 Blender 中建形、用 fullseye 测量(坐标轴、单位、真值数据的陷阱)

参考(示例数据、文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

可运行的示例(实际调用该算子并已验证的样例)

• render_ao — py -3.11 examples_3d/render_ao.py

类型可衔接的下一个算子(可接受 image2d 作为输入)

fuse_to_voxel · fit_poly_surface · eval_poly_surface · surface_form_error · background_flatten · polar_unwrap · fit_zernike · matcap_shade

同类别(render)

project_points · render_point_depth · render_volume_projection · render_shaded · cast_shadow · phong_shade · matcap_shade · supersample_mesh


*Provenance: render_ao.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

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