@aura3d/engine 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -44
- package/dist/animation/AnimationClipEvents.d.ts +55 -0
- package/dist/animation/AnimationClipEvents.d.ts.map +1 -1
- package/dist/animation/AnimationClipEvents.js +136 -0
- package/dist/animation/AnimationClipEvents.js.map +1 -1
- package/dist/animation/AnimationClipRegistry.d.ts +9 -3
- package/dist/animation/AnimationClipRegistry.d.ts.map +1 -1
- package/dist/animation/AnimationClipRegistry.js +52 -5
- package/dist/animation/AnimationClipRegistry.js.map +1 -1
- package/dist/animation/AnimationController.d.ts +6 -6
- package/dist/animation/AnimationController.d.ts.map +1 -1
- package/dist/animation/AnimationController.js +3 -3
- package/dist/animation/AnimationController.js.map +1 -1
- package/dist/animation/AnimationMixer.d.ts +10 -0
- package/dist/animation/AnimationMixer.d.ts.map +1 -1
- package/dist/animation/AnimationMixer.js +35 -0
- package/dist/animation/AnimationMixer.js.map +1 -1
- package/dist/animation/AnimationStateGraph.d.ts +14 -5
- package/dist/animation/AnimationStateGraph.d.ts.map +1 -1
- package/dist/animation/AnimationStateGraph.js +25 -2
- package/dist/animation/AnimationStateGraph.js.map +1 -1
- package/dist/animation/AnimationStateMachine.d.ts +26 -0
- package/dist/animation/AnimationStateMachine.d.ts.map +1 -1
- package/dist/animation/AnimationStateMachine.js +32 -0
- package/dist/animation/AnimationStateMachine.js.map +1 -1
- package/dist/animation/Bone.d.ts +4 -0
- package/dist/animation/Bone.d.ts.map +1 -1
- package/dist/animation/Bone.js +3 -0
- package/dist/animation/Bone.js.map +1 -1
- package/dist/animation/FighterAnimationAdapter.d.ts +49 -0
- package/dist/animation/FighterAnimationAdapter.d.ts.map +1 -0
- package/dist/animation/FighterAnimationAdapter.js +71 -0
- package/dist/animation/FighterAnimationAdapter.js.map +1 -0
- package/dist/animation/FootIk.d.ts +77 -0
- package/dist/animation/FootIk.d.ts.map +1 -0
- package/dist/animation/FootIk.js +153 -0
- package/dist/animation/FootIk.js.map +1 -0
- package/dist/animation/HumanoidBoneInference.d.ts +61 -0
- package/dist/animation/HumanoidBoneInference.d.ts.map +1 -0
- package/dist/animation/HumanoidBoneInference.js +239 -0
- package/dist/animation/HumanoidBoneInference.js.map +1 -0
- package/dist/animation/HumanoidRetargeting.d.ts +48 -4
- package/dist/animation/HumanoidRetargeting.d.ts.map +1 -1
- package/dist/animation/HumanoidRetargeting.js +149 -14
- package/dist/animation/HumanoidRetargeting.js.map +1 -1
- package/dist/animation/IK.d.ts +5 -0
- package/dist/animation/IK.d.ts.map +1 -1
- package/dist/animation/IK.js +9 -0
- package/dist/animation/IK.js.map +1 -1
- package/dist/animation/Inertialization.d.ts +65 -0
- package/dist/animation/Inertialization.d.ts.map +1 -0
- package/dist/animation/Inertialization.js +211 -0
- package/dist/animation/Inertialization.js.map +1 -0
- package/dist/animation/LocomotionController.d.ts +5 -0
- package/dist/animation/LocomotionController.d.ts.map +1 -1
- package/dist/animation/LocomotionController.js +3 -0
- package/dist/animation/LocomotionController.js.map +1 -1
- package/dist/animation/LocomotionKit.d.ts +52 -0
- package/dist/animation/LocomotionKit.d.ts.map +1 -0
- package/dist/animation/LocomotionKit.js +38 -0
- package/dist/animation/LocomotionKit.js.map +1 -0
- package/dist/animation/MotionQuality.d.ts +3 -3
- package/dist/animation/MotionQuality.d.ts.map +1 -1
- package/dist/animation/MotionQuality.js +2 -2
- package/dist/animation/MotionQuality.js.map +1 -1
- package/dist/animation/RigQuality.d.ts +31 -0
- package/dist/animation/RigQuality.d.ts.map +1 -0
- package/dist/animation/RigQuality.js +70 -0
- package/dist/animation/RigQuality.js.map +1 -0
- package/dist/animation/SecondaryAnimationFixtures.d.ts.map +1 -1
- package/dist/animation/SecondaryAnimationFixtures.js +1 -3
- package/dist/animation/SecondaryAnimationFixtures.js.map +1 -1
- package/dist/animation/Skeleton.d.ts +16 -1
- package/dist/animation/Skeleton.d.ts.map +1 -1
- package/dist/animation/Skeleton.js +42 -0
- package/dist/animation/Skeleton.js.map +1 -1
- package/dist/animation/SpringBones.d.ts +60 -0
- package/dist/animation/SpringBones.d.ts.map +1 -0
- package/dist/animation/SpringBones.js +173 -0
- package/dist/animation/SpringBones.js.map +1 -0
- package/dist/animation/browser-index.d.ts +12 -3
- package/dist/animation/browser-index.d.ts.map +1 -1
- package/dist/animation/browser-index.js +11 -2
- package/dist/animation/browser-index.js.map +1 -1
- package/dist/animation/index.d.ts +11 -3
- package/dist/animation/index.d.ts.map +1 -1
- package/dist/animation/index.js +10 -2
- package/dist/animation/index.js.map +1 -1
- package/dist/animation/library/performanceStateGraph.d.ts +42 -0
- package/dist/animation/library/performanceStateGraph.d.ts.map +1 -0
- package/dist/animation/library/performanceStateGraph.js +101 -0
- package/dist/animation/library/performanceStateGraph.js.map +1 -0
- package/dist/animation/library/standardHumanoidClips.d.ts +27 -0
- package/dist/animation/library/standardHumanoidClips.d.ts.map +1 -0
- package/dist/animation/library/standardHumanoidClips.js +357 -0
- package/dist/animation/library/standardHumanoidClips.js.map +1 -0
- package/dist/assets/GLTFAnimationRuntime.d.ts +85 -0
- package/dist/assets/GLTFAnimationRuntime.d.ts.map +1 -1
- package/dist/assets/GLTFAnimationRuntime.js +143 -0
- package/dist/assets/GLTFAnimationRuntime.js.map +1 -1
- package/dist/assets/GLTFAutoFit.d.ts +61 -0
- package/dist/assets/GLTFAutoFit.d.ts.map +1 -0
- package/dist/assets/GLTFAutoFit.js +77 -0
- package/dist/assets/GLTFAutoFit.js.map +1 -0
- package/dist/assets/GLTFLoader.d.ts +21 -0
- package/dist/assets/GLTFLoader.d.ts.map +1 -1
- package/dist/assets/GLTFLoader.js +60 -15
- package/dist/assets/GLTFLoader.js.map +1 -1
- package/dist/assets/GLTFRenderResources.d.ts +9 -1
- package/dist/assets/GLTFRenderResources.d.ts.map +1 -1
- package/dist/assets/GLTFRenderResources.js +93 -4
- package/dist/assets/GLTFRenderResources.js.map +1 -1
- package/dist/assets/browser-index.d.ts +6 -4
- package/dist/assets/browser-index.d.ts.map +1 -1
- package/dist/assets/browser-index.js +3 -2
- package/dist/assets/browser-index.js.map +1 -1
- package/dist/assets/index.d.ts +7 -5
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +4 -3
- package/dist/assets/index.js.map +1 -1
- package/dist/audio/AudioMixer.d.ts +3 -3
- package/dist/audio/AudioMixer.d.ts.map +1 -1
- package/dist/audio/AudioMixer.js +1 -1
- package/dist/audio/AudioMixer.js.map +1 -1
- package/dist/audio/index.d.ts +2 -2
- package/dist/audio/index.d.ts.map +1 -1
- package/dist/audio/index.js +1 -1
- package/dist/audio/index.js.map +1 -1
- package/dist/aura3d-cli/animation-asset-profiles.d.ts +15 -0
- package/dist/aura3d-cli/animation-asset-profiles.d.ts.map +1 -0
- package/dist/aura3d-cli/animation-asset-profiles.js +46 -0
- package/dist/aura3d-cli/animation-asset-profiles.js.map +1 -0
- package/dist/aura3d-cli/animation-asset-validator.d.ts +22 -0
- package/dist/aura3d-cli/animation-asset-validator.d.ts.map +1 -0
- package/dist/aura3d-cli/animation-asset-validator.js +49 -0
- package/dist/aura3d-cli/animation-asset-validator.js.map +1 -0
- package/dist/aura3d-cli/cli.js +40 -17
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/game-asset-validator.d.ts +4 -4
- package/dist/aura3d-cli/game-asset-validator.d.ts.map +1 -1
- package/dist/aura3d-cli/game-asset-validator.js +2 -2
- package/dist/aura3d-cli/game-asset-validator.js.map +1 -1
- package/dist/aura3d-cli/index.d.ts +32 -19
- package/dist/aura3d-cli/index.d.ts.map +1 -1
- package/dist/aura3d-cli/index.js +101 -68
- package/dist/aura3d-cli/index.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge.d.ts +30 -4
- package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge.js +320 -51
- package/dist/aura3d-cli/pull-bridge.js.map +1 -1
- package/dist/create-aura3d/index.d.ts +1 -1
- package/dist/create-aura3d/index.d.ts.map +1 -1
- package/dist/create-aura3d/index.js +6 -4
- package/dist/create-aura3d/index.js.map +1 -1
- package/dist/editor-runtime/AnimationSceneEditor.d.ts +111 -0
- package/dist/editor-runtime/AnimationSceneEditor.d.ts.map +1 -0
- package/dist/editor-runtime/AnimationSceneEditor.js +285 -0
- package/dist/editor-runtime/AnimationSceneEditor.js.map +1 -0
- package/dist/editor-runtime/AssetDropZone.d.ts +9 -9
- package/dist/editor-runtime/AssetDropZone.d.ts.map +1 -1
- package/dist/editor-runtime/AssetDropZone.js +4 -4
- package/dist/editor-runtime/AssetDropZone.js.map +1 -1
- package/dist/editor-runtime/EventTrackEditor.d.ts +54 -0
- package/dist/editor-runtime/EventTrackEditor.d.ts.map +1 -0
- package/dist/editor-runtime/EventTrackEditor.js +124 -0
- package/dist/editor-runtime/EventTrackEditor.js.map +1 -0
- package/dist/editor-runtime/SceneOutliner.d.ts +3 -3
- package/dist/editor-runtime/SceneOutliner.d.ts.map +1 -1
- package/dist/editor-runtime/SceneOutliner.js.map +1 -1
- package/dist/editor-runtime/index.d.ts +5 -3
- package/dist/editor-runtime/index.d.ts.map +1 -1
- package/dist/editor-runtime/index.js +2 -1
- package/dist/editor-runtime/index.js.map +1 -1
- package/dist/engine/agent-api/AnimationAssetManifest.d.ts +50 -0
- package/dist/engine/agent-api/AnimationAssetManifest.d.ts.map +1 -0
- package/dist/engine/agent-api/AnimationAssetManifest.js +65 -0
- package/dist/engine/agent-api/AnimationAssetManifest.js.map +1 -0
- package/dist/engine/agent-api/AnimationDirector.d.ts +120 -0
- package/dist/engine/agent-api/AnimationDirector.d.ts.map +1 -0
- package/dist/engine/agent-api/AnimationDirector.js +432 -0
- package/dist/engine/agent-api/AnimationDirector.js.map +1 -0
- package/dist/engine/agent-api/AnimationEpisodePackage.d.ts +51 -0
- package/dist/engine/agent-api/AnimationEpisodePackage.d.ts.map +1 -0
- package/dist/engine/agent-api/AnimationEpisodePackage.js +79 -0
- package/dist/engine/agent-api/AnimationEpisodePackage.js.map +1 -0
- package/dist/engine/agent-api/AnimationMotionQuality.d.ts +83 -0
- package/dist/engine/agent-api/AnimationMotionQuality.d.ts.map +1 -0
- package/dist/engine/agent-api/AnimationMotionQuality.js +128 -0
- package/dist/engine/agent-api/AnimationMotionQuality.js.map +1 -0
- package/dist/engine/agent-api/AnimationPerformance.d.ts +150 -0
- package/dist/engine/agent-api/AnimationPerformance.d.ts.map +1 -0
- package/dist/engine/agent-api/AnimationPerformance.js +345 -0
- package/dist/engine/agent-api/AnimationPerformance.js.map +1 -0
- package/dist/engine/agent-api/AnimationRenderQueue.d.ts +143 -0
- package/dist/engine/agent-api/AnimationRenderQueue.d.ts.map +1 -0
- package/dist/engine/agent-api/AnimationRenderQueue.js +410 -0
- package/dist/engine/agent-api/AnimationRenderQueue.js.map +1 -0
- package/dist/engine/agent-api/AnimationRouteProof.d.ts +112 -0
- package/dist/engine/agent-api/AnimationRouteProof.d.ts.map +1 -0
- package/dist/engine/agent-api/AnimationRouteProof.js +127 -0
- package/dist/engine/agent-api/AnimationRouteProof.js.map +1 -0
- package/dist/engine/agent-api/AssetLibraryBrowser.d.ts +6 -6
- package/dist/engine/agent-api/AssetLibraryBrowser.d.ts.map +1 -1
- package/dist/engine/agent-api/AssetLibraryBrowser.js +6 -6
- package/dist/engine/agent-api/AssetLibraryBrowser.js.map +1 -1
- package/dist/engine/agent-api/AuraVoiceBridge.d.ts +7 -7
- package/dist/engine/agent-api/AuraVoiceBridge.d.ts.map +1 -1
- package/dist/engine/agent-api/AuraVoiceBridge.js +5 -5
- package/dist/engine/agent-api/AuraVoiceBridge.js.map +1 -1
- package/dist/engine/agent-api/BatchEpisodeRenderer.d.ts +5 -5
- package/dist/engine/agent-api/BatchEpisodeRenderer.d.ts.map +1 -1
- package/dist/engine/agent-api/BatchEpisodeRenderer.js.map +1 -1
- package/dist/engine/agent-api/BodyLanguageLibrary.d.ts +3 -3
- package/dist/engine/agent-api/BodyLanguageLibrary.d.ts.map +1 -1
- package/dist/engine/agent-api/BodyLanguageLibrary.js.map +1 -1
- package/dist/engine/agent-api/BrowserFrameCaptureAdapter.d.ts +4 -4
- package/dist/engine/agent-api/BrowserFrameCaptureAdapter.d.ts.map +1 -1
- package/dist/engine/agent-api/BrowserFrameCaptureAdapter.js +2 -2
- package/dist/engine/agent-api/BrowserFrameCaptureAdapter.js.map +1 -1
- package/dist/engine/agent-api/CharacterAssembly.d.ts +2 -2
- package/dist/engine/agent-api/CharacterAssembly.d.ts.map +1 -1
- package/dist/engine/agent-api/CloudRenderAdapter.d.ts +4 -4
- package/dist/engine/agent-api/CloudRenderAdapter.d.ts.map +1 -1
- package/dist/engine/agent-api/FfmpegFrameEncoder.d.ts +129 -0
- package/dist/engine/agent-api/FfmpegFrameEncoder.d.ts.map +1 -0
- package/dist/engine/agent-api/FfmpegFrameEncoder.js +306 -0
- package/dist/engine/agent-api/FfmpegFrameEncoder.js.map +1 -0
- package/dist/engine/agent-api/FrameEncoder.d.ts +5 -5
- package/dist/engine/agent-api/FrameEncoder.d.ts.map +1 -1
- package/dist/engine/agent-api/GameAssetValidation.d.ts +1 -1
- package/dist/engine/agent-api/GameAssetValidation.d.ts.map +1 -1
- package/dist/engine/agent-api/MediaRecorderFrameEncoder.d.ts.map +1 -1
- package/dist/engine/agent-api/MediaRecorderFrameEncoder.js +7 -2
- package/dist/engine/agent-api/MediaRecorderFrameEncoder.js.map +1 -1
- package/dist/engine/agent-api/PerformanceBlender.d.ts +5 -5
- package/dist/engine/agent-api/PerformanceBlender.d.ts.map +1 -1
- package/dist/engine/agent-api/PerformanceBlender.js.map +1 -1
- package/dist/engine/agent-api/PerformanceCaptureSession.d.ts +5 -5
- package/dist/engine/agent-api/PerformanceCaptureSession.d.ts.map +1 -1
- package/dist/engine/agent-api/PerformanceCaptureSession.js +2 -2
- package/dist/engine/agent-api/PerformanceCaptureSession.js.map +1 -1
- package/dist/engine/agent-api/PerformancePoseEditor.d.ts +8 -8
- package/dist/engine/agent-api/PerformancePoseEditor.d.ts.map +1 -1
- package/dist/engine/agent-api/PerformancePoseEditor.js.map +1 -1
- package/dist/engine/agent-api/PngSequenceEncoder.d.ts +4 -4
- package/dist/engine/agent-api/PngSequenceEncoder.d.ts.map +1 -1
- package/dist/engine/agent-api/PromptAnimationContract.d.ts +2 -2
- package/dist/engine/agent-api/PromptAnimationContract.d.ts.map +1 -1
- package/dist/engine/agent-api/PromptAnimationEvidence.d.ts +2 -2
- package/dist/engine/agent-api/PromptAnimationEvidence.d.ts.map +1 -1
- package/dist/engine/agent-api/PublishingPipeline.d.ts +3 -3
- package/dist/engine/agent-api/PublishingPipeline.d.ts.map +1 -1
- package/dist/engine/agent-api/RuntimeNodeHandle.d.ts +2 -0
- package/dist/engine/agent-api/RuntimeNodeHandle.d.ts.map +1 -1
- package/dist/engine/agent-api/RuntimeNodeHandle.js.map +1 -1
- package/dist/engine/agent-api/SceneGroundingUtils.d.ts +73 -0
- package/dist/engine/agent-api/SceneGroundingUtils.d.ts.map +1 -0
- package/dist/engine/agent-api/SceneGroundingUtils.js +74 -0
- package/dist/engine/agent-api/SceneGroundingUtils.js.map +1 -0
- package/dist/engine/agent-api/ShotTimeline.d.ts +3 -3
- package/dist/engine/agent-api/ShotTimeline.d.ts.map +1 -1
- package/dist/engine/agent-api/ShotTimeline.js.map +1 -1
- package/dist/engine/agent-api/ThumbnailGenerator.d.ts +4 -4
- package/dist/engine/agent-api/ThumbnailGenerator.d.ts.map +1 -1
- package/dist/engine/agent-api/ThumbnailGenerator.js.map +1 -1
- package/dist/engine/agent-api/VideoExportPipeline.d.ts +9 -9
- package/dist/engine/agent-api/VideoExportPipeline.d.ts.map +1 -1
- package/dist/engine/agent-api/VideoExportPipeline.js.map +1 -1
- package/dist/engine/agent-api/VisemeController.d.ts +12 -0
- package/dist/engine/agent-api/VisemeController.d.ts.map +1 -1
- package/dist/engine/agent-api/VisemeController.js +23 -0
- package/dist/engine/agent-api/VisemeController.js.map +1 -1
- package/dist/engine/agent-api/YouTubeMetadataGenerator.d.ts +2 -2
- package/dist/engine/agent-api/YouTubeMetadataGenerator.d.ts.map +1 -1
- package/dist/engine/agent-api/YouTubeMetadataGenerator.js +1 -1
- package/dist/engine/agent-api/YouTubeMetadataGenerator.js.map +1 -1
- package/dist/engine/agent-api/humanoid-walk-runtime.d.ts +1 -1
- package/dist/engine/agent-api/index.d.ts +43 -38
- package/dist/engine/agent-api/index.d.ts.map +1 -1
- package/dist/engine/agent-api/index.js +42 -28
- package/dist/engine/agent-api/index.js.map +1 -1
- package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
- package/dist/engine/animation-studio/animation-episode-validator.d.ts +24 -0
- package/dist/engine/animation-studio/animation-episode-validator.d.ts.map +1 -0
- package/dist/engine/animation-studio/animation-episode-validator.js +74 -0
- package/dist/engine/animation-studio/animation-episode-validator.js.map +1 -0
- package/dist/engine/animation-studio/director-heuristics.d.ts +73 -0
- package/dist/engine/animation-studio/director-heuristics.d.ts.map +1 -0
- package/dist/engine/animation-studio/director-heuristics.js +149 -0
- package/dist/engine/animation-studio/director-heuristics.js.map +1 -0
- package/dist/engine/animation-studio/episode-document.d.ts +214 -0
- package/dist/engine/animation-studio/episode-document.d.ts.map +1 -0
- package/dist/engine/animation-studio/episode-document.js +143 -0
- package/dist/engine/animation-studio/episode-document.js.map +1 -0
- package/dist/engine/animation-studio/index.d.ts +20 -0
- package/dist/engine/animation-studio/index.d.ts.map +1 -0
- package/dist/engine/animation-studio/index.js +20 -0
- package/dist/engine/animation-studio/index.js.map +1 -0
- package/dist/engine/animation-studio/scene-tools.d.ts +34 -0
- package/dist/engine/animation-studio/scene-tools.d.ts.map +1 -0
- package/dist/engine/animation-studio/scene-tools.js +95 -0
- package/dist/engine/animation-studio/scene-tools.js.map +1 -0
- package/dist/engine/index.d.ts +2 -2
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/production-runtime/TypedGLBActor.d.ts +13 -1
- package/dist/engine/production-runtime/TypedGLBActor.d.ts.map +1 -1
- package/dist/engine/production-runtime/TypedGLBActor.js +8 -0
- package/dist/engine/production-runtime/TypedGLBActor.js.map +1 -1
- package/dist/physics/Raycast.d.ts +17 -0
- package/dist/physics/Raycast.d.ts.map +1 -1
- package/dist/physics/Raycast.js +16 -0
- package/dist/physics/Raycast.js.map +1 -1
- package/dist/rendering/ForwardPass.js +18 -13
- package/dist/rendering/ForwardPass.js.map +1 -1
- package/dist/rendering/MorphTargetPlan.d.ts +42 -0
- package/dist/rendering/MorphTargetPlan.d.ts.map +1 -0
- package/dist/rendering/MorphTargetPlan.js +129 -0
- package/dist/rendering/MorphTargetPlan.js.map +1 -0
- package/dist/rendering/MorphUnlitMaterial.d.ts.map +1 -1
- package/dist/rendering/MorphUnlitMaterial.js +7 -1
- package/dist/rendering/MorphUnlitMaterial.js.map +1 -1
- package/dist/rendering/ShaderLibrary.d.ts.map +1 -1
- package/dist/rendering/ShaderLibrary.js +34 -6
- package/dist/rendering/ShaderLibrary.js.map +1 -1
- package/dist/rendering/WebGPUDevice.d.ts +2 -0
- package/dist/rendering/WebGPUDevice.d.ts.map +1 -1
- package/dist/rendering/WebGPUDevice.js +69 -12
- package/dist/rendering/WebGPUDevice.js.map +1 -1
- package/dist/rendering/animation/AnimationMaterialStyle.d.ts +19 -0
- package/dist/rendering/animation/AnimationMaterialStyle.d.ts.map +1 -0
- package/dist/rendering/animation/AnimationMaterialStyle.js +13 -0
- package/dist/rendering/animation/AnimationMaterialStyle.js.map +1 -0
- package/dist/rendering/animation/AnimationRenderPreset.d.ts +36 -0
- package/dist/rendering/animation/AnimationRenderPreset.d.ts.map +1 -0
- package/dist/rendering/animation/AnimationRenderPreset.js +23 -0
- package/dist/rendering/animation/AnimationRenderPreset.js.map +1 -0
- package/dist/rendering/animation/AnimationToonMaterial.d.ts +130 -0
- package/dist/rendering/animation/AnimationToonMaterial.d.ts.map +1 -0
- package/dist/rendering/animation/AnimationToonMaterial.js +303 -0
- package/dist/rendering/animation/AnimationToonMaterial.js.map +1 -0
- package/dist/rendering/animation/AnimationVisualQuality.d.ts +28 -0
- package/dist/rendering/animation/AnimationVisualQuality.d.ts.map +1 -0
- package/dist/rendering/animation/AnimationVisualQuality.js +39 -0
- package/dist/rendering/animation/AnimationVisualQuality.js.map +1 -0
- package/dist/rendering/animation/applyAnimationRenderPreset.d.ts +79 -0
- package/dist/rendering/animation/applyAnimationRenderPreset.d.ts.map +1 -0
- package/dist/rendering/animation/applyAnimationRenderPreset.js +88 -0
- package/dist/rendering/animation/applyAnimationRenderPreset.js.map +1 -0
- package/dist/rendering/animation/index.d.ts +6 -0
- package/dist/rendering/animation/index.d.ts.map +1 -0
- package/dist/rendering/animation/index.js +6 -0
- package/dist/rendering/animation/index.js.map +1 -0
- package/dist/rendering/cartoon/CartoonToonMaterial.d.ts +130 -0
- package/dist/rendering/cartoon/CartoonToonMaterial.d.ts.map +1 -0
- package/dist/rendering/cartoon/CartoonToonMaterial.js +303 -0
- package/dist/rendering/cartoon/CartoonToonMaterial.js.map +1 -0
- package/dist/rendering/cartoon/applyCartoonRenderPreset.d.ts +79 -0
- package/dist/rendering/cartoon/applyCartoonRenderPreset.d.ts.map +1 -0
- package/dist/rendering/cartoon/applyCartoonRenderPreset.js +88 -0
- package/dist/rendering/cartoon/applyCartoonRenderPreset.js.map +1 -0
- package/dist/rendering/cartoon/index.d.ts +2 -0
- package/dist/rendering/cartoon/index.d.ts.map +1 -1
- package/dist/rendering/cartoon/index.js +2 -0
- package/dist/rendering/cartoon/index.js.map +1 -1
- package/dist/rendering/index.d.ts +4 -2
- package/dist/rendering/index.d.ts.map +1 -1
- package/dist/rendering/index.js +3 -2
- package/dist/rendering/index.js.map +1 -1
- package/dist/scripting/AnimationNodeCategories.d.ts +3 -0
- package/dist/scripting/AnimationNodeCategories.d.ts.map +1 -0
- package/dist/scripting/AnimationNodeCategories.js +9 -0
- package/dist/scripting/AnimationNodeCategories.js.map +1 -0
- package/dist/scripting/AnimationVisualNodes.d.ts +3 -0
- package/dist/scripting/AnimationVisualNodes.d.ts.map +1 -0
- package/dist/scripting/AnimationVisualNodes.js +41 -0
- package/dist/scripting/AnimationVisualNodes.js.map +1 -0
- package/dist/scripting/VisualGraphExecutor.js +24 -24
- package/dist/scripting/VisualGraphExecutor.js.map +1 -1
- package/dist/scripting/VisualNodeCatalog.js +2 -2
- package/dist/scripting/VisualNodeCatalog.js.map +1 -1
- package/dist/scripting/index.d.ts +3 -3
- package/dist/scripting/index.d.ts.map +1 -1
- package/dist/scripting/index.js +2 -2
- package/dist/scripting/index.js.map +1 -1
- package/package.json +150 -126
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-viewer-runtime.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/product-viewer-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,OAAO,EACP,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACrB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC;CAC7C;AAED,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAClD,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC;AACjD,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AAE1E,eAAO,MAAM,OAAO;;;
|
|
1
|
+
{"version":3,"file":"product-viewer-runtime.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/product-viewer-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,OAAO,EACP,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACrB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC;CAC7C;AAED,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAClD,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC;AACjD,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AAE1E,eAAO,MAAM,OAAO;;;sBAWsv6S,CAAC;;;;;;CAXzu6S,CAAC;AAEnC,eAAO,MAAM,SAAS;oCACC,YAAY,CAAC,OAAO,CAAC,YAAW,oBAAoB,KAAQ,qBAAqB;CAG9F,CAAC;AAEX,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,GAAE,oBAAyB,GAAG,qBAAqB,CAErH"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* animation-episode-validator.ts — the scene-coherence gate.
|
|
3
|
+
*
|
|
4
|
+
* Proves a generated/edited EpisodeDocument is VALID + COHERENT before it is rendered or
|
|
5
|
+
* shipped: characters + props stay on the walkable set, cameras frame near the action,
|
|
6
|
+
* every scheduled clip exists on the asset, every shot is covered, plus the structural
|
|
7
|
+
* checks from `validateEpisodeDocumentShape`.
|
|
8
|
+
*
|
|
9
|
+
* HONEST CAVEAT (design doc): this proves a scene is *valid/coherent*, NOT that it is
|
|
10
|
+
* *well-directed or watchable*. "Good" needs the human-review rubric — automation can
|
|
11
|
+
* only keep a scene from being broken, not make it good.
|
|
12
|
+
*/
|
|
13
|
+
import { type EpisodeDocument } from "./episode-document";
|
|
14
|
+
export interface EpisodeDocumentValidation {
|
|
15
|
+
readonly ok: boolean;
|
|
16
|
+
readonly errors: readonly string[];
|
|
17
|
+
readonly warnings: readonly string[];
|
|
18
|
+
}
|
|
19
|
+
export interface ValidateOptions {
|
|
20
|
+
/** GLB clip lists per character, so scheduled clips can be checked to exist. */
|
|
21
|
+
readonly availableClipsByCharacter?: Record<string, readonly string[]>;
|
|
22
|
+
}
|
|
23
|
+
export declare function validateEpisodeDocument(doc: EpisodeDocument, opts?: ValidateOptions): EpisodeDocumentValidation;
|
|
24
|
+
//# sourceMappingURL=animation-episode-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-episode-validator.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/animation-studio/animation-episode-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAgC,KAAK,eAAe,EAAa,MAAM,oBAAoB,CAAC;AAEnG,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACxE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,GAAE,eAAoB,GAAG,yBAAyB,CAgEnH"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* animation-episode-validator.ts — the scene-coherence gate.
|
|
3
|
+
*
|
|
4
|
+
* Proves a generated/edited EpisodeDocument is VALID + COHERENT before it is rendered or
|
|
5
|
+
* shipped: characters + props stay on the walkable set, cameras frame near the action,
|
|
6
|
+
* every scheduled clip exists on the asset, every shot is covered, plus the structural
|
|
7
|
+
* checks from `validateEpisodeDocumentShape`.
|
|
8
|
+
*
|
|
9
|
+
* HONEST CAVEAT (design doc): this proves a scene is *valid/coherent*, NOT that it is
|
|
10
|
+
* *well-directed or watchable*. "Good" needs the human-review rubric — automation can
|
|
11
|
+
* only keep a scene from being broken, not make it good.
|
|
12
|
+
*/
|
|
13
|
+
import { validateEpisodeDocumentShape } from "./episode-document.js";
|
|
14
|
+
export function validateEpisodeDocument(doc, opts = {}) {
|
|
15
|
+
const shape = validateEpisodeDocumentShape(doc);
|
|
16
|
+
const errors = [...shape.errors];
|
|
17
|
+
const warnings = [];
|
|
18
|
+
const bounds = doc.walkableBounds;
|
|
19
|
+
const margin = 0.6;
|
|
20
|
+
const inBounds = (p) => !bounds ||
|
|
21
|
+
(p[0] >= bounds.min[0] - margin &&
|
|
22
|
+
p[0] <= bounds.max[0] + margin &&
|
|
23
|
+
p[2] >= bounds.min[2] - margin &&
|
|
24
|
+
p[2] <= bounds.max[2] + margin);
|
|
25
|
+
// 1. Blocking stays on the walkable set (hard error — a character off the set is broken).
|
|
26
|
+
for (const b of doc.blocking) {
|
|
27
|
+
for (const s of b.shots) {
|
|
28
|
+
for (const w of s.waypoints) {
|
|
29
|
+
if (!inBounds(w.position)) {
|
|
30
|
+
errors.push(`${b.characterId} blocking in ${s.shotId} leaves the walkable set at [${w.position.map((n) => n.toFixed(2)).join(",")}]`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// 2. Props on the walkable set (warning — off-set props are ugly, not fatal).
|
|
36
|
+
for (const d of doc.setDressing) {
|
|
37
|
+
if (!inBounds(d.position))
|
|
38
|
+
warnings.push(`prop ${d.propId} placed off the walkable set`);
|
|
39
|
+
}
|
|
40
|
+
// 3. Camera frames near the action.
|
|
41
|
+
for (const shot of doc.shots) {
|
|
42
|
+
if (!inBounds([shot.cameraSubject[0], 0, shot.cameraSubject[2]])) {
|
|
43
|
+
warnings.push(`shot ${shot.shotId} camera subject is far from the walkable set`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// 4. Every scheduled clip exists on the asset (fuzzy match; warn + note fallback).
|
|
47
|
+
if (opts.availableClipsByCharacter) {
|
|
48
|
+
for (const b of doc.blocking) {
|
|
49
|
+
const clips = opts.availableClipsByCharacter[b.characterId];
|
|
50
|
+
if (!clips || clips.length === 0)
|
|
51
|
+
continue;
|
|
52
|
+
for (const s of b.shots) {
|
|
53
|
+
const want = s.clip.toLowerCase();
|
|
54
|
+
const has = clips.some((c) => {
|
|
55
|
+
const lc = c.toLowerCase();
|
|
56
|
+
return lc === want || lc.includes(want) || want.includes(lc);
|
|
57
|
+
});
|
|
58
|
+
if (!has)
|
|
59
|
+
warnings.push(`${b.characterId} clip "${s.clip}" in ${s.shotId} not found; falls back to "${clips[0]}"`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// 5. Every character has blocking for every shot.
|
|
64
|
+
for (const c of doc.assets.characters) {
|
|
65
|
+
const cb = doc.blocking.find((b) => b.characterId === c.id);
|
|
66
|
+
for (const shot of doc.shots) {
|
|
67
|
+
if (!cb?.shots.find((s) => s.shotId === shot.shotId)) {
|
|
68
|
+
warnings.push(`${c.id} has no blocking for ${shot.shotId} (will hold a fallback mark)`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return { ok: errors.length === 0, errors, warnings };
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=animation-episode-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-episode-validator.js","sourceRoot":"","sources":["../../../../../packages/engine/src/animation-studio/animation-episode-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* director-heuristics.ts — the DETERMINISTIC tier of the Director.
|
|
3
|
+
*
|
|
4
|
+
* Given a scene's shots + dialogue + cast + walkable bounds + available props, it
|
|
5
|
+
* GENERATES the blocking / camera / performance / set-dressing / world-state of an
|
|
6
|
+
* EpisodeDocument — the parts that used to be hand-authored constants. No LLM, no
|
|
7
|
+
* randomness beyond a seeded scatter, fully deterministic.
|
|
8
|
+
*
|
|
9
|
+
* HONEST SCOPE (see docs/animation-studio/quality-and-limitations.md): these rules target
|
|
10
|
+
* the constrained genre the MVP targets — **1–2 characters, dialogue-driven, single
|
|
11
|
+
* walkable set**. They reliably stage conversation: characters at conversation distance
|
|
12
|
+
* facing each other, establishing→two-shot→close-up framing, the speaker emphasised in
|
|
13
|
+
* close-ups, props scattered over the walkable area, world-state ramped across the act.
|
|
14
|
+
* They do NOT handle action, crowds, complex choreography, or non-dialogue beats — those
|
|
15
|
+
* are the LLM director's job (and remain unproven). The output is always a *valid*
|
|
16
|
+
* document; "valid" is not "well-directed" — that needs the human rubric (the watchability gate).
|
|
17
|
+
*/
|
|
18
|
+
import type { CharacterBlocking, PropPlacement, ShotSpec, Vec3 } from "./episode-document";
|
|
19
|
+
export interface DirectorCharacter {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
/** Where the character starts the scene (drives a walk-in on the opening shot). */
|
|
22
|
+
readonly entersFrom?: "left" | "right" | "none";
|
|
23
|
+
}
|
|
24
|
+
export interface DirectorShot {
|
|
25
|
+
readonly shotId: string;
|
|
26
|
+
readonly startTime: number;
|
|
27
|
+
readonly endTime: number;
|
|
28
|
+
}
|
|
29
|
+
export interface DirectorDialogueLine {
|
|
30
|
+
readonly lineId: string;
|
|
31
|
+
readonly speakerId: string;
|
|
32
|
+
readonly startTime: number;
|
|
33
|
+
readonly endTime: number;
|
|
34
|
+
}
|
|
35
|
+
export interface DirectorPropSpec {
|
|
36
|
+
readonly propId: string;
|
|
37
|
+
readonly count: number;
|
|
38
|
+
readonly scaleRange: readonly [number, number];
|
|
39
|
+
readonly feetOffset: number;
|
|
40
|
+
}
|
|
41
|
+
export interface DirectorSceneInput {
|
|
42
|
+
readonly duration: number;
|
|
43
|
+
readonly characters: readonly DirectorCharacter[];
|
|
44
|
+
readonly shots: readonly DirectorShot[];
|
|
45
|
+
readonly dialogue: readonly DirectorDialogueLine[];
|
|
46
|
+
/** Walkable area characters and props stay inside. */
|
|
47
|
+
readonly walkableBounds: {
|
|
48
|
+
readonly min: Vec3;
|
|
49
|
+
readonly max: Vec3;
|
|
50
|
+
};
|
|
51
|
+
readonly props: readonly DirectorPropSpec[];
|
|
52
|
+
/** Default clips on the cast (resolved fuzzily by the player). */
|
|
53
|
+
readonly clips?: {
|
|
54
|
+
readonly idle?: string;
|
|
55
|
+
readonly walk?: string;
|
|
56
|
+
readonly gesture?: string;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export interface DirectedScene {
|
|
60
|
+
readonly shots: readonly ShotSpec[];
|
|
61
|
+
readonly blocking: readonly CharacterBlocking[];
|
|
62
|
+
readonly setDressing: readonly PropPlacement[];
|
|
63
|
+
readonly worldState: {
|
|
64
|
+
readonly glowSpanSeconds: number;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Stage a 1–2 character dialogue scene. Characters take base marks at conversation
|
|
69
|
+
* distance facing each other; cameras cycle establishing → two-shot → close-up (the
|
|
70
|
+
* close-up frames the active speaker); props scatter over the walkable bounds.
|
|
71
|
+
*/
|
|
72
|
+
export declare function directScene(sceneId: string, input: DirectorSceneInput): DirectedScene;
|
|
73
|
+
//# sourceMappingURL=director-heuristics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"director-heuristics.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/animation-studio/director-heuristics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAgB,QAAQ,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAEzG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACnD,sDAAsD;IACtD,QAAQ,CAAC,cAAc,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC;IACpE,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,kEAAkE;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,SAAS,aAAa,EAAE,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAmCD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,aAAa,CA4FrF"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* director-heuristics.ts — the DETERMINISTIC tier of the Director.
|
|
3
|
+
*
|
|
4
|
+
* Given a scene's shots + dialogue + cast + walkable bounds + available props, it
|
|
5
|
+
* GENERATES the blocking / camera / performance / set-dressing / world-state of an
|
|
6
|
+
* EpisodeDocument — the parts that used to be hand-authored constants. No LLM, no
|
|
7
|
+
* randomness beyond a seeded scatter, fully deterministic.
|
|
8
|
+
*
|
|
9
|
+
* HONEST SCOPE (see docs/animation-studio/quality-and-limitations.md): these rules target
|
|
10
|
+
* the constrained genre the MVP targets — **1–2 characters, dialogue-driven, single
|
|
11
|
+
* walkable set**. They reliably stage conversation: characters at conversation distance
|
|
12
|
+
* facing each other, establishing→two-shot→close-up framing, the speaker emphasised in
|
|
13
|
+
* close-ups, props scattered over the walkable area, world-state ramped across the act.
|
|
14
|
+
* They do NOT handle action, crowds, complex choreography, or non-dialogue beats — those
|
|
15
|
+
* are the LLM director's job (and remain unproven). The output is always a *valid*
|
|
16
|
+
* document; "valid" is not "well-directed" — that needs the human rubric (the watchability gate).
|
|
17
|
+
*/
|
|
18
|
+
// --- small deterministic helpers ---
|
|
19
|
+
function mulberry32(seed) {
|
|
20
|
+
let a = seed >>> 0;
|
|
21
|
+
return () => {
|
|
22
|
+
a |= 0;
|
|
23
|
+
a = (a + 0x6d2b79f5) | 0;
|
|
24
|
+
let t = Math.imul(a ^ (a >>> 15), 1 | a);
|
|
25
|
+
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
|
|
26
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function hashSeed(s) {
|
|
30
|
+
let h = 2166136261;
|
|
31
|
+
for (let i = 0; i < s.length; i += 1)
|
|
32
|
+
h = Math.imul(h ^ s.charCodeAt(i), 16777619);
|
|
33
|
+
return h >>> 0;
|
|
34
|
+
}
|
|
35
|
+
function yawFacing(from, to) {
|
|
36
|
+
return Math.atan2(to[0] - from[0], to[2] - from[2]);
|
|
37
|
+
}
|
|
38
|
+
/** The character who speaks most during a shot (the shot's focus), or the first cast member. */
|
|
39
|
+
function shotSpeaker(input, shot) {
|
|
40
|
+
const tally = new Map();
|
|
41
|
+
for (const line of input.dialogue) {
|
|
42
|
+
const overlap = Math.min(line.endTime, shot.endTime) - Math.max(line.startTime, shot.startTime);
|
|
43
|
+
if (overlap > 0)
|
|
44
|
+
tally.set(line.speakerId, (tally.get(line.speakerId) ?? 0) + overlap);
|
|
45
|
+
}
|
|
46
|
+
let best = input.characters[0]?.id ?? "";
|
|
47
|
+
let bestV = -1;
|
|
48
|
+
for (const [id, v] of tally)
|
|
49
|
+
if (v > bestV) {
|
|
50
|
+
bestV = v;
|
|
51
|
+
best = id;
|
|
52
|
+
}
|
|
53
|
+
return best;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Stage a 1–2 character dialogue scene. Characters take base marks at conversation
|
|
57
|
+
* distance facing each other; cameras cycle establishing → two-shot → close-up (the
|
|
58
|
+
* close-up frames the active speaker); props scatter over the walkable bounds.
|
|
59
|
+
*/
|
|
60
|
+
export function directScene(sceneId, input) {
|
|
61
|
+
const cast = input.characters;
|
|
62
|
+
const { min, max } = input.walkableBounds;
|
|
63
|
+
const cx = (min[0] + max[0]) / 2;
|
|
64
|
+
const cz = (min[2] + max[2]) / 2;
|
|
65
|
+
const idle = input.clips?.idle ?? "idle";
|
|
66
|
+
const walk = input.clips?.walk ?? "walk";
|
|
67
|
+
// Base marks: spread the cast left→right across ~40% of the walkable width, facing center.
|
|
68
|
+
const span = (max[0] - min[0]) * 0.4;
|
|
69
|
+
const baseMark = (i) => {
|
|
70
|
+
if (cast.length === 1)
|
|
71
|
+
return [cx, 0, cz];
|
|
72
|
+
const t = cast.length === 1 ? 0.5 : i / (cast.length - 1);
|
|
73
|
+
return [cx + (t - 0.5) * span, 0, cz];
|
|
74
|
+
};
|
|
75
|
+
const center = [cx, 0, cz];
|
|
76
|
+
const presets = ["establishing", "two-shot", "close-up"];
|
|
77
|
+
const shots = input.shots.map((shot, index) => {
|
|
78
|
+
const speaker = shotSpeaker(input, shot);
|
|
79
|
+
const presetId = presets[Math.min(index, presets.length - 1)];
|
|
80
|
+
let cameraSubject;
|
|
81
|
+
if (presetId === "close-up") {
|
|
82
|
+
const i = Math.max(0, cast.findIndex((c) => c.id === speaker));
|
|
83
|
+
const m = baseMark(i < 0 ? 0 : i);
|
|
84
|
+
cameraSubject = [m[0], -0.2, m[2]]; // head-ish focus on the speaker
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
cameraSubject = [cx, 0.75, cz]; // frame the conversation midpoint
|
|
88
|
+
}
|
|
89
|
+
return { shotId: shot.shotId, presetId, startTime: shot.startTime, endTime: shot.endTime, cameraSubject };
|
|
90
|
+
});
|
|
91
|
+
const blocking = cast.map((character, i) => {
|
|
92
|
+
const mark = baseMark(i);
|
|
93
|
+
const faceCenter = yawFacing(mark, center);
|
|
94
|
+
const beats = input.shots.map((shot, index) => {
|
|
95
|
+
// Opening shot: optional walk-in from the side the character enters from.
|
|
96
|
+
if (index === 0 && character.entersFrom && character.entersFrom !== "none") {
|
|
97
|
+
const offX = character.entersFrom === "left" ? min[0] - 0.5 : max[0] + 0.5;
|
|
98
|
+
const enterDur = Math.min(shot.endTime - shot.startTime, (input.duration) * 0.12);
|
|
99
|
+
return {
|
|
100
|
+
shotId: shot.shotId,
|
|
101
|
+
clip: walk,
|
|
102
|
+
waypoints: [
|
|
103
|
+
{ time: shot.startTime, position: [offX, 0, mark[2]], yaw: yawFacing([offX, 0, mark[2]], mark) },
|
|
104
|
+
{ time: shot.startTime + enterDur, position: mark, yaw: faceCenter }
|
|
105
|
+
]
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Middle beats TRAVERSE: walk from the mark toward the shared focus across the shot
|
|
109
|
+
// (a real 2-waypoint path, so characters move instead of looping in place).
|
|
110
|
+
const isMiddle = index > 0 && index < input.shots.length - 1;
|
|
111
|
+
if (isMiddle) {
|
|
112
|
+
const converge = [mark[0] + (cx - mark[0]) * (index === 1 ? 0.45 : 0.25), 0, mark[2] + 0.25];
|
|
113
|
+
return {
|
|
114
|
+
shotId: shot.shotId,
|
|
115
|
+
clip: walk,
|
|
116
|
+
sweeping: i === 0,
|
|
117
|
+
waypoints: [
|
|
118
|
+
{ time: shot.startTime, position: mark, yaw: yawFacing(mark, converge) },
|
|
119
|
+
{ time: shot.endTime, position: converge, yaw: yawFacing(converge, center) }
|
|
120
|
+
]
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
// First/last beats: hold the mark, but FACE the active speaker (look-at / reaction),
|
|
124
|
+
// and the speaker GESTURES in the close-up — breadth beyond a static two-shot.
|
|
125
|
+
const speaker = shotSpeaker(input, input.shots[index]);
|
|
126
|
+
const spkIdx = Math.max(0, cast.findIndex((c) => c.id === speaker));
|
|
127
|
+
const spkMark = baseMark(spkIdx);
|
|
128
|
+
const facing = i === spkIdx ? faceCenter : yawFacing(mark, spkMark);
|
|
129
|
+
const isClose = index === input.shots.length - 1;
|
|
130
|
+
const gesture = input.clips?.gesture ?? "wave";
|
|
131
|
+
const beatClip = isClose && i === spkIdx ? gesture : idle;
|
|
132
|
+
return { shotId: shot.shotId, clip: beatClip, waypoints: [{ time: shot.startTime, position: mark, yaw: facing }] };
|
|
133
|
+
});
|
|
134
|
+
return { characterId: character.id, shots: beats };
|
|
135
|
+
});
|
|
136
|
+
// Deterministic prop scatter over the walkable bounds (seeded by scene id).
|
|
137
|
+
const rand = mulberry32(hashSeed(sceneId));
|
|
138
|
+
const setDressing = [];
|
|
139
|
+
for (const prop of input.props) {
|
|
140
|
+
for (let n = 0; n < prop.count; n += 1) {
|
|
141
|
+
const x = min[0] + rand() * (max[0] - min[0]);
|
|
142
|
+
const z = min[2] + rand() * (max[2] - min[2]);
|
|
143
|
+
const scale = prop.scaleRange[0] + rand() * (prop.scaleRange[1] - prop.scaleRange[0]);
|
|
144
|
+
setDressing.push({ propId: prop.propId, position: [x, 0, z], scale, feetOffset: prop.feetOffset });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return { shots, blocking, setDressing, worldState: { glowSpanSeconds: input.duration } };
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=director-heuristics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"director-heuristics.js","sourceRoot":"","sources":["../../../../../packages/engine/src/animation-studio/director-heuristics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* episode-document.ts — the Episode Document schema + deterministic sampling.
|
|
3
|
+
*
|
|
4
|
+
* This is the data-driven contract that makes the animation renderer GENERIC: every
|
|
5
|
+
* scene-specific decision that used to be a constant in `render-live-route.ts`
|
|
6
|
+
* (blocking marks, camera framing, the clip per shot, prop layout, the dim→sparkle
|
|
7
|
+
* world-state, even the primitive set + lights) is now DATA in an EpisodeDocument.
|
|
8
|
+
* The generic player (`scene-player.ts`) reads this document and renders it; it
|
|
9
|
+
* contains no scene-specific constants. A Director GENERATES documents
|
|
10
|
+
* from a prompt; the same player plays them.
|
|
11
|
+
*
|
|
12
|
+
* Placement note: this lives in the template for fast iteration (no engine dist
|
|
13
|
+
* rebuild). The design doc promotes these contracts into
|
|
14
|
+
* `packages/engine/src/animation-studio/*` once stable.
|
|
15
|
+
*/
|
|
16
|
+
import type { CameraPresetId } from "../agent-api/CameraPresetLibrary";
|
|
17
|
+
export type Vec3 = readonly [number, number, number];
|
|
18
|
+
export type Vec4 = readonly [number, number, number, number];
|
|
19
|
+
/** Provenance for a catalog-resolved asset (CC-BY attribution + source + hash). */
|
|
20
|
+
export interface AssetProvenance {
|
|
21
|
+
readonly attribution?: string;
|
|
22
|
+
readonly license?: string;
|
|
23
|
+
readonly sourceUrl?: string;
|
|
24
|
+
readonly hash?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface CharacterAsset extends AssetProvenance {
|
|
27
|
+
readonly id: string;
|
|
28
|
+
readonly url: string;
|
|
29
|
+
/** Uniform scale applied to the loaded GLB so it reads at the intended height. */
|
|
30
|
+
readonly scale: number;
|
|
31
|
+
/** Fallback clip name (resolved against the GLB's real clip list by the player). */
|
|
32
|
+
readonly defaultClip: string;
|
|
33
|
+
/** Morph-target index that drives mouth-open, or -1 when the GLB has no face morph. */
|
|
34
|
+
readonly mouthMorphIndex?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface PropAsset extends AssetProvenance {
|
|
37
|
+
readonly id: string;
|
|
38
|
+
readonly url: string;
|
|
39
|
+
}
|
|
40
|
+
export type GeometryKind = "cube" | "sphere" | "cylinder";
|
|
41
|
+
/** Dim→full emissive strengths a glow piece ramps between as the world-state advances. */
|
|
42
|
+
export interface GlowSpec {
|
|
43
|
+
readonly dim: number;
|
|
44
|
+
readonly full: number;
|
|
45
|
+
}
|
|
46
|
+
export interface SetPiece {
|
|
47
|
+
readonly id: string;
|
|
48
|
+
readonly geometry: GeometryKind;
|
|
49
|
+
readonly position: Vec3;
|
|
50
|
+
readonly scale: Vec3;
|
|
51
|
+
readonly baseColor: Vec4;
|
|
52
|
+
readonly metallic?: number;
|
|
53
|
+
readonly roughness?: number;
|
|
54
|
+
readonly emissiveColor?: Vec3;
|
|
55
|
+
readonly emissiveStrength?: number;
|
|
56
|
+
/** When present, the world-state drives emissiveStrength from dim→full over the act. */
|
|
57
|
+
readonly glow?: GlowSpec;
|
|
58
|
+
/** Optional z-roll (radians) for tilted props like the broom handle. */
|
|
59
|
+
readonly roll?: number;
|
|
60
|
+
readonly includeInAutoFrame?: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface LightSpec {
|
|
63
|
+
readonly id: string;
|
|
64
|
+
readonly kind: "point";
|
|
65
|
+
readonly color: Vec3;
|
|
66
|
+
readonly position: Vec3;
|
|
67
|
+
readonly intensity: number;
|
|
68
|
+
readonly range: number;
|
|
69
|
+
}
|
|
70
|
+
export interface EnvironmentSpec {
|
|
71
|
+
readonly color: Vec3;
|
|
72
|
+
readonly intensity: number;
|
|
73
|
+
readonly proceduralMap: {
|
|
74
|
+
readonly skyColor: Vec3;
|
|
75
|
+
readonly horizonColor: Vec3;
|
|
76
|
+
readonly groundColor: Vec3;
|
|
77
|
+
readonly specularColor: Vec3;
|
|
78
|
+
readonly intensity: number;
|
|
79
|
+
readonly specularIntensity: number;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export interface SetSpec {
|
|
83
|
+
readonly clearColor: Vec4;
|
|
84
|
+
/** Scale on the studio softbox rig (the directional key/fill/rim come from `lights`). */
|
|
85
|
+
readonly studioLightingScale: number;
|
|
86
|
+
readonly environment: EnvironmentSpec;
|
|
87
|
+
readonly pieces: readonly SetPiece[];
|
|
88
|
+
readonly lights: readonly LightSpec[];
|
|
89
|
+
/**
|
|
90
|
+
* High-fidelity rendering toggles (#12). Default OFF so the standard render
|
|
91
|
+
* path stays stable; the Director or scene tools can opt a document in.
|
|
92
|
+
* - inShaderCel: non-glow set pieces use the engine's REAL AnimationToonMaterial
|
|
93
|
+
* (GPU-side banded N·L + Fresnel rim), in addition to the CPU toon post-pass.
|
|
94
|
+
* - realShadows: enable the studio rig's shadow maps (cast/receive) instead of only
|
|
95
|
+
* the cheap contact-shadow blobs.
|
|
96
|
+
*/
|
|
97
|
+
readonly inShaderCel?: boolean;
|
|
98
|
+
readonly realShadows?: boolean;
|
|
99
|
+
}
|
|
100
|
+
export interface ShotSpec {
|
|
101
|
+
readonly shotId: string;
|
|
102
|
+
readonly presetId: CameraPresetId;
|
|
103
|
+
/** Episode-time window (seconds) this shot is on screen. */
|
|
104
|
+
readonly startTime: number;
|
|
105
|
+
readonly endTime: number;
|
|
106
|
+
/** World point the camera frames for this shot (auto-framed or directed). */
|
|
107
|
+
readonly cameraSubject: Vec3;
|
|
108
|
+
}
|
|
109
|
+
export interface BlockingWaypoint {
|
|
110
|
+
/** Absolute episode time (seconds). */
|
|
111
|
+
readonly time: number;
|
|
112
|
+
readonly position: Vec3;
|
|
113
|
+
readonly yaw: number;
|
|
114
|
+
}
|
|
115
|
+
export interface ShotBlocking {
|
|
116
|
+
readonly shotId: string;
|
|
117
|
+
/** Clip to play during this beat (resolved against the GLB's real clips by the player). */
|
|
118
|
+
readonly clip: string;
|
|
119
|
+
readonly sweeping?: boolean;
|
|
120
|
+
/** 1+ waypoints; the player lerps position/yaw across them within the shot window. */
|
|
121
|
+
readonly waypoints: readonly BlockingWaypoint[];
|
|
122
|
+
}
|
|
123
|
+
export interface CharacterBlocking {
|
|
124
|
+
readonly characterId: string;
|
|
125
|
+
readonly shots: readonly ShotBlocking[];
|
|
126
|
+
}
|
|
127
|
+
export interface PropPlacement {
|
|
128
|
+
readonly propId: string;
|
|
129
|
+
readonly position: Vec3;
|
|
130
|
+
readonly scale: number;
|
|
131
|
+
/** |minY| of the prop geometry (pre-scale) so it sits on the ground (y=0). */
|
|
132
|
+
readonly feetOffset: number;
|
|
133
|
+
}
|
|
134
|
+
export interface WorldStateTrack {
|
|
135
|
+
/** Seconds over which glow pieces ramp dim→full (the dim→sparkle world-state). */
|
|
136
|
+
readonly glowSpanSeconds: number;
|
|
137
|
+
}
|
|
138
|
+
export interface DialogueLine {
|
|
139
|
+
readonly lineId: string;
|
|
140
|
+
readonly speakerId: string;
|
|
141
|
+
readonly text: string;
|
|
142
|
+
readonly startTime: number;
|
|
143
|
+
readonly endTime: number;
|
|
144
|
+
}
|
|
145
|
+
export interface DialogueTrack {
|
|
146
|
+
readonly language: string;
|
|
147
|
+
readonly lines: readonly DialogueLine[];
|
|
148
|
+
}
|
|
149
|
+
export interface EpisodeDocument {
|
|
150
|
+
readonly id: string;
|
|
151
|
+
readonly duration: number;
|
|
152
|
+
readonly assets: {
|
|
153
|
+
readonly characters: readonly CharacterAsset[];
|
|
154
|
+
readonly props: readonly PropAsset[];
|
|
155
|
+
};
|
|
156
|
+
readonly set: SetSpec;
|
|
157
|
+
/** Area characters + props must stay within (used by the Director + coherence gate). */
|
|
158
|
+
readonly walkableBounds?: {
|
|
159
|
+
readonly min: Vec3;
|
|
160
|
+
readonly max: Vec3;
|
|
161
|
+
};
|
|
162
|
+
readonly shots: readonly ShotSpec[];
|
|
163
|
+
readonly blocking: readonly CharacterBlocking[];
|
|
164
|
+
readonly setDressing: readonly PropPlacement[];
|
|
165
|
+
readonly worldState: WorldStateTrack;
|
|
166
|
+
/** The script + captions + lip-sync source — the AuraVoice contract for THIS scene. */
|
|
167
|
+
readonly dialogue?: DialogueTrack;
|
|
168
|
+
}
|
|
169
|
+
/** The shot on screen at episode time `t`. */
|
|
170
|
+
export declare function shotAtTime(doc: EpisodeDocument, t: number): ShotSpec;
|
|
171
|
+
export interface SampledBlocking {
|
|
172
|
+
readonly position: Vec3;
|
|
173
|
+
readonly yaw: number;
|
|
174
|
+
readonly clip: string;
|
|
175
|
+
readonly sweeping: boolean;
|
|
176
|
+
/** True when the character is translating between distinct waypoints (→ walk clip). */
|
|
177
|
+
readonly moving: boolean;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Sample a character's blocking at episode time `t`: find the active shot's blocking,
|
|
181
|
+
* then lerp position/yaw across its waypoints by time. Single-waypoint beats hold a
|
|
182
|
+
* static mark (the original staging behaviour); multi-waypoint beats traverse.
|
|
183
|
+
*/
|
|
184
|
+
export declare function sampleBlocking(doc: EpisodeDocument, characterId: string, t: number, fallback: {
|
|
185
|
+
readonly position: Vec3;
|
|
186
|
+
readonly yaw: number;
|
|
187
|
+
readonly clip: string;
|
|
188
|
+
}): SampledBlocking;
|
|
189
|
+
/** Eased dim→sparkle world-state at episode time `t` (0 = dim, 1 = full twinkle). */
|
|
190
|
+
export declare function sampleWorldStateGlow(doc: EpisodeDocument, t: number): number;
|
|
191
|
+
/** The active caption at episode time `t`, from the document's dialogue. */
|
|
192
|
+
export declare function sampleCaption(doc: EpisodeDocument, t: number): {
|
|
193
|
+
text: string;
|
|
194
|
+
speakerId: string;
|
|
195
|
+
lineId: string;
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* Lip-sync mouth-openness for `speakerId` at `t`, derived deterministically from the
|
|
199
|
+
* document's dialogue (a speaking mouth pulse). Drives the GLB mouth morph for rigs that
|
|
200
|
+
* have one; 0 when the speaker isn't talking. (The full per-phoneme viseme track is
|
|
201
|
+
* AuraVoice's; this is the engine-side fallback driver.)
|
|
202
|
+
*/
|
|
203
|
+
export declare function sampleVisemeOpenness(doc: EpisodeDocument, t: number, speakerId: string): {
|
|
204
|
+
mouthOpenness: number;
|
|
205
|
+
visemeId: string;
|
|
206
|
+
};
|
|
207
|
+
export interface DocumentValidationResult {
|
|
208
|
+
readonly ok: boolean;
|
|
209
|
+
readonly errors: readonly string[];
|
|
210
|
+
}
|
|
211
|
+
export declare function validateEpisodeDocumentShape(doc: EpisodeDocument): DocumentValidationResult;
|
|
212
|
+
/** One-line-per-fact summary of a document (for CLI output / agent grounding). */
|
|
213
|
+
export declare function summarizeDocument(doc: EpisodeDocument): string;
|
|
214
|
+
//# sourceMappingURL=episode-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"episode-document.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/animation-studio/episode-document.ts"],"names":[],"mappings":"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"}
|