How to use nerfview for interactive rendering
mainTo integrate nerfview into your project, you need to define a render_fn and initialize a nerfview.Viewer using a viser.ViserServer.
Your render_fn must accept two arguments:
camera_state(nerfview.CameraState): Provides the camera-to-world matrix (c2w) and an intrinsic matrix method (get_K).render_tab_state(nerfview.RenderTabState): Provides information about the current render mode (e.g.,preview_render) and the target resolution (render_width,render_height,viewer_width,viewer_height).
The render_fn must return a uint8 numpy array representing the image.
from typing import Tuple
import viser
import nerfview
import numpy as np
def render_fn(
camera_state: nerfview.CameraState, render_tab_state: nerfview.RenderTabState
) -> np.ndarray:
# Determine resolution based on whether it is a preview render
if render_tab_state.preview_render:
width = render_tab_state.render_width
height = render_tab_state.render_height
else:
width = render_tab_state.viewer_width
height = render_tab_state.viewer_height
# Extract camera parameters as float64 numpy arrays
c2w = camera_state.c2w
K = camera_state.get_K([width, height])
# Perform your rendering logic here
img = your_rendering_logic(c2w, K, width, height)
# Return image as uint8 numpy array
return img
# Initialize the server and viewer
server = viser.ViserServer(verbose=False)
viewer = nerfview.Viewer(server=server, render_fn=render_fn, mode='rendering')