Skip to content

Commit 8a212e1

Browse files
committed
Update web viewer
1. Change the color of keyframe frustum 2. Show camera path points based on total number of frames 3. Fix different initial smoothness between slider and camera_path object
1 parent 56a14fc commit 8a212e1

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

internal/viewer/ui/render_panel.py

+18-4
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ def __init__(self, server: viser.ViserServer, viewer):
9898
self.loop: bool = False
9999
self.smoothness: float = 0.5 # Tension / alpha term.
100100
self.default_fov: float = 0.0
101+
self.framerate: float = 0
102+
self.duration: float = 0
101103

102104
def set_keyframes_visible(self, visible: bool) -> None:
103105
self._keyframes_visible = visible
@@ -118,7 +120,7 @@ def add_camera(self, keyframe: Keyframe, keyframe_index: Optional[int] = None) -
118120
fov=keyframe.override_fov_value if keyframe.override_fov_enabled else self.default_fov,
119121
aspect=keyframe.aspect,
120122
scale=0.1,
121-
color=(127, 127, 127),
123+
color=(255, 0, 255),
122124
wxyz=keyframe.wxyz,
123125
position=keyframe.position,
124126
visible=self._keyframes_visible,
@@ -323,6 +325,10 @@ def update_spline(self) -> None:
323325
self._spline = None
324326
return
325327

328+
num_frames = int(self.duration * self.framerate)
329+
if num_frames <= 0:
330+
return
331+
326332
# Update internal splines.
327333
self._orientation_spline = splines.quaternion.KochanekBartels(
328334
[
@@ -378,7 +384,7 @@ def update_spline(self) -> None:
378384
# Update visualized spline.
379385
num_keyframes = len(keyframes) + 1 if self.loop else len(keyframes)
380386
points_array = onp.array(
381-
[self._position_spline.evaluate(t) for t in onp.linspace(0, num_keyframes - 1, num_keyframes * 100)]
387+
[self._position_spline.evaluate(t) for t in onp.linspace(0, num_keyframes - 1, num_frames)]
382388
)
383389
colors_array = onp.array([colorsys.hls_to_rgb(h, 0.5, 1.0) for h in onp.linspace(0.0, 1.0, len(points_array))])
384390
self._spline = self._server.add_point_cloud(
@@ -578,8 +584,8 @@ def _(_) -> None:
578584

579585
playback_folder = server.gui.add_folder("Playback")
580586
with playback_folder:
581-
duration_number = server.gui.add_number("Duration (sec)", min=0.0, max=1e8, step=0.0001, initial_value=4.0)
582-
framerate_number = server.gui.add_number("Frame rate (FPS)", min=0.1, max=240.0, step=1e-8, initial_value=30.0)
587+
duration_number = server.gui.add_number("Duration (sec)", min=0.0, max=1e8, step=0.001, initial_value=4.0)
588+
framerate_number = server.gui.add_number("Frame rate (FPS)", min=0.1, max=240.0, step=1e-2, initial_value=30.0)
583589
framerate_buttons = server.gui.add_button_group("", ("24", "30", "60"))
584590

585591
@framerate_buttons.on_click
@@ -687,6 +693,10 @@ def _(_) -> None:
687693
else:
688694
preview_frame_slider = old
689695

696+
camera_path.duration = duration_number.value
697+
camera_path.framerate = framerate_number.value
698+
camera_path.update_spline()
699+
690700
# Play the camera trajectory when the play button is pressed.
691701
@play_button.on_click
692702
def _(_) -> None:
@@ -898,7 +908,11 @@ def _(event):
898908
viewer.show_message("Error occurred while parsing camera path file", event.client)
899909

900910
camera_path = CameraPath(server, viewer)
911+
camera_path.loop = loop.value
912+
camera_path.smoothness = smoothness.value
901913
camera_path.default_fov = fov_degrees.value / 180.0 * onp.pi
914+
camera_path.duration = duration_number.value
915+
camera_path.framerate = framerate_number.value
902916

903917
transform_controls: List[viser.SceneNodeHandle] = []
904918

0 commit comments

Comments
 (0)