Research (연구 관련)
ray & 3d bounding box intersection
홍돌
2021. 8. 9. 15:57
전에 코드는 잘이해안갔는데, 이건 바로 이해감. https://github.com/zju3dv/neuralbody/blob/master/lib/utils/if_nerf/if_nerf_data_utils.py
def get_near_far(bounds, ray_o, ray_d):
"""calculate intersections with 3d bounding box"""
norm_d = np.linalg.norm(ray_d, axis=-1, keepdims=True)
viewdir = ray_d / norm_d
viewdir[(viewdir < 1e-5) & (viewdir > -1e-10)] = 1e-5
viewdir[(viewdir > -1e-5) & (viewdir < 1e-10)] = -1e-5
tmin = (bounds[:1] - ray_o[:1]) / viewdir
tmax = (bounds[1:2] - ray_o[:1]) / viewdir
t1 = np.minimum(tmin, tmax)
t2 = np.maximum(tmin, tmax)
near = np.max(t1, axis=-1)
far = np.min(t2, axis=-1)
mask_at_box = near < far
near = near[mask_at_box] / norm_d[mask_at_box, 0]
far = far[mask_at_box] / norm_d[mask_at_box, 0]
return near, far, mask_at_box