Object Occlusion Culling

This commit is contained in:
2026-10-15 02:41:03 -07:00
parent 3273054766
commit 612a3d0a09
33 changed files with 3629 additions and 84 deletions

View File

@ -390,12 +390,14 @@ def send_event(event_id: str, opt_data: Any = None):
elif event_id == 'cam_props':
cam: bpy.types.Camera = obj_data.data
render = bpy.context.scene.render
rpdat = lnx.utils.get_rp()
par_x, par_y = LeenkxExporter.compute_effective_par(rpdat, render)
projection = obj_data.calc_matrix_camera(
bpy.context.evaluated_depsgraph_get(),
x=render.resolution_x,
y=render.resolution_y,
scale_x=render.pixel_aspect_x,
scale_y=render.pixel_aspect_y)
scale_x=par_x,
scale_y=par_y)
focal_y = projection[1][1]
depth_z = projection[2][2]
depth_w = projection[2][3]
@ -403,8 +405,10 @@ def send_event(event_id: str, opt_data: Any = None):
fov = 2.0 * math.atan(1.0 / focal_y)
near = (depth_w * (1.0 - far_near_ratio)) / (2.0 * far_near_ratio)
far = far_near_ratio * near
res_aspect = render.resolution_x / render.resolution_y if render.resolution_y > 0 else 1.0
effective_aspect = res_aspect * par_x / par_y
cam_obj = f'iron.Scene.active.getCamera("{cam.name}")'
js = f'var c = {cam_obj}; var cRaw = c.data.raw; cRaw.fov={fov}; cRaw.near_plane={near}; cRaw.far_plane={far}; cRaw.frustum_culling={"true" if cam.lnx_frustum_culling else "false"}; c.buildProjection();'
js = f'var c = {cam_obj}; var cRaw = c.data.raw; cRaw.fov={fov}; cRaw.near_plane={near}; cRaw.far_plane={far}; cRaw.frustum_culling={"true" if cam.lnx_frustum_culling else "false"}; cRaw.aspect={effective_aspect}; c.buildProjection();'
write_patch(js)
elif event_id == 'obj_visibility':