Upgrade viewer export format to v2 with per-pose FOV and loop mode#831
Upgrade viewer export format to v2 with per-pose FOV and loop mode#831slimbuck merged 2 commits intoplaycanvas:mainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR upgrades the viewer export/publish settings format to v2, adding per-pose FOV support and a new loop-mode selector while refactoring camera fly-look behavior to reduce drift.
Changes:
- Introduces ExperienceSettings v2 fields (cameras array, startMode, post effects, tonemapping, etc.) and updates export/publish dialogs accordingly.
- Adds per-pose FOV to camera pose loading/serialization and includes FOV in spline keyframe interpolation.
- Replaces the export/publish animation dropdown with an animation toggle + loop-mode selector; updates camera fly-look implementation and pose gizmo sizing.
Reviewed changes
Copilot reviewed 23 out of 23 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| static/locales/en.json | Adds loop-mode strings for export UI. |
| static/locales/de.json | Adds loop-mode strings for export UI. |
| static/locales/es.json | Adds loop-mode strings for export UI. |
| static/locales/fr.json | Adds loop-mode strings for export UI. |
| static/locales/ja.json | Adds loop-mode strings for export UI. |
| static/locales/ko.json | Adds loop-mode strings for export UI. |
| static/locales/pt-BR.json | Adds loop-mode strings for export UI. |
| static/locales/ru.json | Adds loop-mode strings for export UI. |
| static/locales/zh-CN.json | Adds loop-mode strings for export UI. |
| src/ui/scss/settings-dialog.scss | Adjusts dialog header styling and boolean alignment. |
| src/ui/scss/export-popup.scss | Aligns boolean toggle styling in export popup. |
| src/ui/publish-settings-dialog.ts | Updates publish settings UI/serialization to ExperienceSettings v2 and loop mode selection. |
| src/ui/export-popup.ts | Updates viewer export settings to ExperienceSettings v2 and loop mode selection; removes per-splat selection. |
| src/splat-serialize.ts | Defines v2 settings types (cameras, annotations, post effects) and expands anim keyframes to include FOV. |
| src/splat-overlay.ts | Updates overlay primitive count update handling on sorter updates. |
| src/publish.ts | Changes publish success link target to scene edit page. |
| src/file-handler.ts | Computes per-pose FOV from intrinsics when loading pose files. |
| src/editor.ts | Extends camera pose get/set to include optional FOV. |
| src/doc.ts | Passes document camera FOV into pose deserialization path. |
| src/controllers.ts | Delegates fly-look rotation to Camera.look(). |
| src/camera.ts | Adds Camera.look() and pins camera position during fly-look tween convergence. |
| src/camera-poses.ts | Adds per-pose FOV to pose data model and spline interpolation/serialization. |
| src/camera-pose-gizmos.ts | Uses fixed-size camera pose gizmos. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Addressed Copilot feedback:
|
Summary
ExperienceSettingsto version 2, adding support for cameras, annotations, post-effect settings, tonemapping, and start mode configurationCamera.look(), fixing camera drift during tween convergence by pinning the camera position until the azim/elev tween completesDetails
The viewer export format is restructured around a
camerasarray withCameraPoseobjects (position, target, fov) and astartModefield instead of the previouscamera.startAnim/camera.animTrackapproach. Animation tracks now include per-keyframe FOV values in the spline interpolation (7 values per keyframe instead of 6). The "Start Position" selector and per-splat export selector have been removed in favor of always using the current viewport and exporting all splats.The fly-mode camera look was moved from
PointerControllerintoCamera.look()with a newlookCameraPosfield that holds the camera position fixed while the azim/elev tween smoothly converges, preventing visible drift.