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.