render op• 数据种类:mesh → rgbimage
• 调用: import fullseye as fs; fs.ledger.render_beauty(V, F, *, pose=None, intrinsics=None, size: 'int' = 512, ss: 'int' = 2, light: 'Sequence[float]' = (0.3, 0.4, 1.0), albedo: 'Sequence[float]' = (0.8, 0.8, 0.85), material: 'str' = 'plastic', matcap=None, ambient: 'float' = 0.12, ao: 'bool' = True, ground_shadow: 'bool' = True, tonemap: 'str' = 'reinhard', background: 'Sequence[float]' = (0.1, 0.11, 0.13), exposure: 'float' = 1.0, shininess: 'Optional[float]' = None, ao_samples: 'int' = 32, shadow_res: 'int' = 512, penumbra: 'float' = 2.5, shadow_samples: 'int' = 12, shadow_pcf: 'int' = 1, brdf: 'str' = 'phong', brdf_params=None, shadow_method: 'str' = 'map', sun_angular_diameter_deg: 'float' = 0.0, self_illumination: 'float' = 0.0, albedo_variation: 'float' = 0.0, albedo_scale=None, seed: 'int' = 0, smooth_normals: 'bool' = False, bump=None, vertex_normals=None, vertex_albedo=None, surface: 'str' = 'none', surface_params=None) -> 'np.ndarray'(要直接调用实现,import render_beauty; render_beauty.render_beauty(V, F, *, pose=None, intrinsics=None, size: 'int' = 512, ss: 'int' = 2, light: 'Sequence[float]' = (0.3, 0.4, 1.0), albedo: 'Sequence[float]' = (0.8, 0.8, 0.85), material: 'str' = 'plastic', matcap=None, ambient: 'float' = 0.12, ao: 'bool' = True, ground_shadow: 'bool' = True, tonemap: 'str' = 'reinhard', background: 'Sequence[float]' = (0.1, 0.11, 0.13), exposure: 'float' = 1.0, shininess: 'Optional[float]' = None, ao_samples: 'int' = 32, shadow_res: 'int' = 512, penumbra: 'float' = 2.5, shadow_samples: 'int' = 12, shadow_pcf: 'int' = 1, brdf: 'str' = 'phong', brdf_params=None, shadow_method: 'str' = 'map', sun_angular_diameter_deg: 'float' = 0.0, self_illumination: 'float' = 0.0, albedo_variation: 'float' = 0.0, albedo_scale=None, seed: 'int' = 0, smooth_normals: 'bool' = False, bump=None, vertex_normals=None, vertex_albedo=None, surface: 'str' = 'none', surface_params=None) -> 'np.ndarray';从台账取用则 ops3d.get("render_beauty"))
把网格以全品质层合成渲染成一张「好看的静态 3D」→ RGB (size, size, 3) float [0,1]。
参数:
• V, F 顶点 (N,3) 与三角形 (M,3)。
• pose 4x4 object->camera(render3d.look_at)。None 时使用 auto_view。
• intrinsics 3x3 针孔 K(针对目标 size,内部按 ss 倍缩放)。
• size 输出的边长(正方形)。ss 超采样倍率(整数 >= 1)。
• light 世界坐标下的光源方向(场景→光源)。阴影着色与接地阴影共用。
• albedo 物体的反射颜色 RGB。material 'plastic' | 'metal' | 'matcap'。
• matcap material='matcap' 时必需的 lit-sphere 纹理 (h,w[,C])。
• ambient 环境光系数。ao 是否施加环境光遮蔽。
• ground_shadow 是否烘焙地面平面 + 接地阴影。
• tonemap 'reinhard' | 'aces' | 'none'。background 背景色 RGB。
• exposure 色调映射前的曝光。shininess 光泽度(None 时为材质默认值)。
• ao_samples / shadow_res / penumbra / shadow_samples 质量、速度的调节(接地阴影的柔和度等)。penumbra 是光源的角半径 [度],半影宽度约为 "遮挡物高度 × tan(penumbra)"。默认的 2.5 度下,距地面 1 个单位高度的物体,半影只有 1〜2 像素 (2026-09-02 实测:320px 的图中半影为 283/102400 像素, 取值种类只有 shadow_samples+1 的 7 级)。若想要柔和的阴影, 请提高到 10 度左右,并为了不让台阶可见, 同时增加 shadow_samples。
• shadow_pcf 采样 shadow map 时混合的邻域半径 [texel] (默认 1 = 3x3)。只参照 1 个点时,阴影边界被量化到 texel,呈现阶梯状。实测(仅在地面上测得的相邻像素最大变化):
默认 2.5 度、12 条、相当于 pcf=0 时为 0.667,
12 度、24 条、pcf=1 时为 0.176(超过 1/6 的台阶 123→2)。
• brdf 物体的反射定律。'phong'(默认 = 与以往相同的 Lambert 漫反射 + cos^n 镜面)/ 'lambert' / 'lommel_seeliger' / 'hapke'(行星测光, render_shade.brdf_shade)。phong 以外关闭镜面项,albedo 作为归一化为平均 1 的色调相乘(亮度由 brdf_params 的单次散射反照率 w 决定,不会重复相乘)。
• brdf_params dict(w, g, B0, h, roughness_deg, multiple_scattering)。
• shadow_method 'map'(默认 = shadow map + PCF)/ 'raycast' (render_shadow.shadow_raycast,无阶梯、无 acne)。
• sun_angular_diameter_deg raycast 时光源的视直径(太阳 0.53°)。半影宽度为 "到遮挡物的距离 × tan(视直径/2)"= 在小行星上为数 cm(硬阴影)。
• self_illumination 来自地形的一次反射近似系数(默认 0)。bounce = 系数 × albedo颜色 × (1 − AO) × 被照亮面的平均辐射亮度 ―― 这是一种近似:被遮挡的那部分半球能看到相邻地形,而该地形以平均亮度发光(并非相互反射的严格解,需要 ao=True)。宇宙中没有环境光,因此在 ambient=0 下由它来决定阴影的底部亮度。
• bump dict(wavelengths, amplitudes[, seed, nyquist, fade, complement_edges]) → 用 render3d.bump_normals_fbm(值噪声高度场的梯度)扰动物体像素的着色法线。几何(depth/阴影/AO)不变。complement_edges=True 时,将像素正下方网格的局部边长按重心插值传入,只把位移频带门控的 补集做成 bump(同一波长不会重复叠加)。
fail-closed:形状不正确、非有限、空、ss<1、非法 material/tonemap、非法颜色/光/曝光均抛出 ValueError。确定性(无随机数)。
• blender_interop — 与 Blender 配合使用 —— 在 Blender 中建形、用 fullseye 测量(坐标轴、单位、真值数据的陷阱)
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• anatomical_hand — py -3.11 examples_3d/anatomical_hand.py
• render_beauty — py -3.11 examples_3d/render_beauty.py
rgbimage 作为输入)render)project_points · render_point_depth · render_volume_projection · render_shaded · ambient_occlusion · cast_shadow · phong_shade · matcap_shade
*Provenance: render_beauty.py — 3D 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.