From cd8bfda1921297043b3586060bbca4bc5fe64de1 Mon Sep 17 00:00:00 2001 From: markw65 Date: Sun, 24 Jan 2021 12:59:45 -0800 Subject: [PATCH 1/6] Add support for explicit control over model animations Cesium currently only supports time based animation. This can be inconvenient if the phase of the animation is related to something other than time (eg distance along a path of an object moving at a variable speed). This came up before in #7361, but the author was persuaded that it was better to use nodeTransformations to explicitly control the model. That was (just) doable with that example, because there were just 3 pairs of wheels, all of which needed the exact same, relatively trivial, transformations. The proposed solution was also cumbersome, relying on modifying `multiplier` on the fly, with the downside that modifying multiplier also reset the phase of the animation. For more complex models, with less uniform animations, this approach isn't really doable - especially if you want the same code to work for multiple models. This adds an animationTime function to ModelAnimation. If set, it's used by ModelAnimationCollection.update to compute the localAnimationTime, rather than using the current clock time. I also added an animateWhilePaused property to ModelAnimationCollection. When false (the default), we continue to do the short circuit exit from ModelAnimationCollection.update when the scene time hasn't changed. When true, a suitable animationTime function can continue to animate the model, even when scene time is paused. The new sandcastle example is just a clone of Time Dynamic Wheels, rewritten to use Cesium_Man.glb, and the new functionality. --- .../Manually Controlled Animation.html | 167 ++++++++++++++++++ .../gallery/Manually Controlled Animation.jpg | Bin 0 -> 158567 bytes CHANGES.md | 4 + Source/Scene/ModelAnimation.js | 32 ++++ Source/Scene/ModelAnimationCollection.js | 60 +++++-- Specs/Scene/ModelSpec.js | 41 +++++ 6 files changed, 286 insertions(+), 18 deletions(-) create mode 100644 Apps/Sandcastle/gallery/Manually Controlled Animation.html create mode 100644 Apps/Sandcastle/gallery/Manually Controlled Animation.jpg diff --git a/Apps/Sandcastle/gallery/Manually Controlled Animation.html b/Apps/Sandcastle/gallery/Manually Controlled Animation.html new file mode 100644 index 000000000000..dfb94c8c4329 --- /dev/null +++ b/Apps/Sandcastle/gallery/Manually Controlled Animation.html @@ -0,0 +1,167 @@ + + + + + + + + + Cesium Demo + + + + + + +
+

Loading...

+
+ + + diff --git a/Apps/Sandcastle/gallery/Manually Controlled Animation.jpg b/Apps/Sandcastle/gallery/Manually Controlled Animation.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f799c373ac09bc5154de59bccb063c916004c3b GIT binary patch literal 158567 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

JwDqR)O=?FD1zsS4-jsv#Nn}EJV)UqbgpoeuZ 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 aCl38^*Z;Hd&aYm#`>koP%zplVhW{7Okp0jA literal 0 HcmV?d00001 diff --git a/CHANGES.md b/CHANGES.md index 38596c340b63..d2697e6b7bd7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -23,6 +23,10 @@ - `Cesium3DTileStyle` constructor parameters of `string` or `Resource` type have been deprecated and will be removed in CesiumJS 1.96. If loading a style from a url, use `Cesium3DTileStyle.fromUrl` instead. [#10348](https://github.com/CesiumGS/cesium/pull/10348) - `Cesium3DTileStyle.readyPromise` and `Cesium3DTileStyle.ready` have been deprecated and will be removed in CesiumJS 1.96. If loading a style from a url, use `Cesium3DTileStyle.fromUrl` instead. [#10348](https://github.com/CesiumGS/cesium/pull/10348) +##### Additions :tada: + +- Added `ModelAnimationCollection.animateWhilePaused` and `ModelAnimation.animationTime` to allow explicit control over a model's animations. + ### 1.93 - 2022-05-02 ##### Breaking Changes :mega: diff --git a/Source/Scene/ModelAnimation.js b/Source/Scene/ModelAnimation.js index 377db370e6ac..289e0d33c762 100644 --- a/Source/Scene/ModelAnimation.js +++ b/Source/Scene/ModelAnimation.js @@ -39,6 +39,16 @@ function ModelAnimation(options, model, runtimeAnimation) { this._reverse = defaultValue(options.reverse, false); this._loop = defaultValue(options.loop, ModelAnimationLoop.NONE); + /** + * If this is defined, it will be used to compute the local animation time + * instead of the scene's time. + * + * @type {ModelAnimation.AnimationTimeCallback} + * @default undefined + */ + this.animationTime = options.animationTime; + this._prevAnimationTime = undefined; + /** * The event fired when this animation is started. This can be used, for * example, to play a sound or start a particle system, when the animation starts. @@ -230,4 +240,26 @@ Object.defineProperties(ModelAnimation.prototype, { }, }, }); +/** + * A function used to compute the local animation time for a ModelAnimation. + * @callback ModelAnimation.AnimationTimeCallback + * + * @param {Number} duration The animation's original duration in seconds. + * @param {Number} seconds The seconds since the animation started, in scene time. + * @returns {Number} Returns the local animation time. + * + * @example + * // Use real time for model animation (also set + * // ModelAnimationCollection#animateWhilePaused) + * function animationTime(duration) { + * return Date.now() / 1000 / duration; + * } + * + * @example + * // Offset the phase of the animation, so it starts halfway + * // through its cycle. + * function animationTime(duration, seconds) { + * return seconds / duration + .5; + * } + */ export default ModelAnimation; diff --git a/Source/Scene/ModelAnimationCollection.js b/Source/Scene/ModelAnimationCollection.js index 9ff27a535a81..c143c7c2e2d3 100644 --- a/Source/Scene/ModelAnimationCollection.js +++ b/Source/Scene/ModelAnimationCollection.js @@ -46,6 +46,17 @@ function ModelAnimationCollection(model) { */ this.animationRemoved = new Event(); + /** + * When true, the animation will play even when the scene time is paused. However, + * whether animation takes place will depend on the animationTime functions assigned + * to the model's animations. By default, this is based on scene time, so models using + * the default will not animate regardless of this setting. + * + * @type {Boolean} + * @default false + */ + this.animateWhilePaused = false; + this._model = model; this._scheduledAnimations = []; this._previousTime = undefined; @@ -93,6 +104,7 @@ function add(collection, index, options) { * @param {Number} [options.multiplier=1.0] Values greater than 1.0 increase the speed that the animation is played relative to the scene clock speed; values less than 1.0 decrease the speed. * @param {Boolean} [options.reverse=false] When true, the animation is played in reverse. * @param {ModelAnimationLoop} [options.loop=ModelAnimationLoop.NONE] Determines if and how the animation is looped. + * @param {ModelAnimation.AnimationTimeCallback} [options.animationTime=undefined] If defined, computes the local animation time for this animation. * @returns {ModelAnimation} The animation that was added to the collection. * * @exception {DeveloperError} Animations are not loaded. Wait for the {@link Model#readyPromise} to resolve. @@ -204,6 +216,7 @@ ModelAnimationCollection.prototype.add = function (options) { * @param {Number} [options.multiplier=1.0] Values greater than 1.0 increase the speed that the animations play relative to the scene clock speed; values less than 1.0 decrease the speed. * @param {Boolean} [options.reverse=false] When true, the animations are played in reverse. * @param {ModelAnimationLoop} [options.loop=ModelAnimationLoop.NONE] Determines if and how the animations are looped. + * @param {ModelAnimation.AnimationTimeCallback} [options.animationTime=undefined] If defined, computes the local animation time for all of the animations. * @returns {ModelAnimation[]} An array of {@link ModelAnimation} objects, one for each animation added to the collection. If there are no glTF animations, the array is empty. * * @exception {DeveloperError} Animations are not loaded. Wait for the {@link Model#readyPromise} to resolve. @@ -366,8 +379,10 @@ ModelAnimationCollection.prototype.update = function (frameState) { return false; } - if (JulianDate.equals(frameState.time, this._previousTime)) { - // Animations are currently only time-dependent so do not animate when paused or picking + if ( + !this.animateWhilePaused && + JulianDate.equals(frameState.time, this._previousTime) + ) { return false; } this._previousTime = JulianDate.clone(frameState.time, this._previousTime); @@ -397,23 +412,22 @@ ModelAnimationCollection.prototype.update = function (frameState) { const duration = scheduledAnimation._duration; const stopTime = scheduledAnimation.stopTime; - // [0.0, 1.0] normalized local animation time - let delta = - duration !== 0.0 - ? JulianDate.secondsDifference(sceneTime, startTime) / duration - : 0.0; + const pastStartTime = JulianDate.lessThanOrEquals(startTime, sceneTime); + const pastStopTime = + defined(stopTime) && JulianDate.greaterThan(sceneTime, stopTime); - // Clamp delta to stop time, if defined. - if ( - duration !== 0.0 && - defined(stopTime) && - JulianDate.greaterThan(sceneTime, stopTime) - ) { - delta = JulianDate.secondsDifference(stopTime, startTime) / duration; + // [0.0, 1.0] normalized local animation time + let delta = 0.0; + if (duration !== 0.0) { + const seconds = JulianDate.secondsDifference( + pastStopTime ? stopTime : sceneTime, + startTime + ); + delta = scheduledAnimation.animationTime + ? scheduledAnimation.animationTime(duration, seconds) + : seconds / duration; } - const pastStartTime = delta >= 0.0; - // Play animation if // * we are after the start time or the animation is being repeated, and // * before the end of the animation's duration or the animation is being repeated, and @@ -426,7 +440,17 @@ ModelAnimationCollection.prototype.update = function (frameState) { const play = (pastStartTime || (repeat && !defined(scheduledAnimation.startTime))) && (delta <= 1.0 || repeat) && - (!defined(stopTime) || JulianDate.lessThanOrEquals(sceneTime, stopTime)); + !pastStopTime; + + if ( + delta === scheduledAnimation._prevAnimationTime && + !play === (scheduledAnimation._state === ModelAnimationState.STOPPED) + ) { + // no change to delta, and no change to the animation state means we can + // skip the update this time around. + continue; + } + scheduledAnimation._prevAnimationTime = delta; // If it IS, or WAS, animating... if (play || scheduledAnimation._state === ModelAnimationState.ANIMATING) { @@ -446,7 +470,7 @@ ModelAnimationCollection.prototype.update = function (frameState) { ) { const floor = Math.floor(delta); const fract = delta - floor; - // When even use (1.0 - fract) to mirror repeat + // When odd use (1.0 - fract) to mirror repeat delta = floor % 2 === 1.0 ? 1.0 - fract : fract; } diff --git a/Specs/Scene/ModelSpec.js b/Specs/Scene/ModelSpec.js index 06584e577fe0..f42850709588 100644 --- a/Specs/Scene/ModelSpec.js +++ b/Specs/Scene/ModelSpec.js @@ -1910,6 +1910,47 @@ describe( animBoxesModel.show = false; }); + it("animates with an explicit animation time", function () { + const time = JulianDate.fromDate( + new Date("January 1, 2014 12:00:00 UTC") + ); + const animations = animBoxesModel.activeAnimations; + let animationTime = 0; + const a = animations.add({ + name: "animation_1", + animationTime: function (duration) { + return animationTime / duration; + }, + }); + + const spyUpdate = jasmine.createSpy("listener"); + a.update.addEventListener(spyUpdate); + + animBoxesModel.show = true; + scene.renderForSpecs(time); + animationTime = 0.5; + scene.renderForSpecs(JulianDate.addSeconds(time, 1.0, new JulianDate())); + scene.renderForSpecs(JulianDate.addSeconds(time, 2.0, new JulianDate())); + animationTime = 1.7; + scene.renderForSpecs(JulianDate.addSeconds(time, 3.0, new JulianDate())); + + expect(spyUpdate.calls.count()).toEqual(3); + expect(spyUpdate.calls.argsFor(0)[2]).toEqualEpsilon( + 0.0, + CesiumMath.EPSILON14 + ); + expect(spyUpdate.calls.argsFor(1)[2]).toEqualEpsilon( + 0.5, + CesiumMath.EPSILON14 + ); + expect(spyUpdate.calls.argsFor(2)[2]).toEqualEpsilon( + 1.7, + CesiumMath.EPSILON14 + ); + expect(animations.remove(a)).toEqual(true); + animBoxesModel.show = false; + }); + it("animates with a multiplier", function () { const time = JulianDate.fromDate( new Date("January 1, 2014 12:00:00 UTC") From 933ac94898af0e87bca840835690f209f594068c Mon Sep 17 00:00:00 2001 From: markw65 Date: Wed, 4 May 2022 15:15:45 -0700 Subject: [PATCH 2/6] Review fixes - rename _prevAnimationTime to _prevAnimationDelta - rewrite the _prevAnimationDelta bailout - add a test that we animate while paused if animateWhilePaused is true, and update the existing test to check that we don't animate while paused when animateWhilePaused is false --- Source/Scene/ModelAnimation.js | 4 +- Source/Scene/ModelAnimationCollection.js | 11 +++-- Specs/Scene/ModelSpec.js | 54 ++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 8 deletions(-) diff --git a/Source/Scene/ModelAnimation.js b/Source/Scene/ModelAnimation.js index 289e0d33c762..2c2b2b27881c 100644 --- a/Source/Scene/ModelAnimation.js +++ b/Source/Scene/ModelAnimation.js @@ -47,7 +47,7 @@ function ModelAnimation(options, model, runtimeAnimation) { * @default undefined */ this.animationTime = options.animationTime; - this._prevAnimationTime = undefined; + this._prevAnimationDelta = undefined; /** * The event fired when this animation is started. This can be used, for @@ -249,7 +249,7 @@ Object.defineProperties(ModelAnimation.prototype, { * @returns {Number} Returns the local animation time. * * @example - * // Use real time for model animation (also set + * // Use real time for model animation (also set * // ModelAnimationCollection#animateWhilePaused) * function animationTime(duration) { * return Date.now() / 1000 / duration; diff --git a/Source/Scene/ModelAnimationCollection.js b/Source/Scene/ModelAnimationCollection.js index c143c7c2e2d3..ad2b369cf001 100644 --- a/Source/Scene/ModelAnimationCollection.js +++ b/Source/Scene/ModelAnimationCollection.js @@ -442,15 +442,14 @@ ModelAnimationCollection.prototype.update = function (frameState) { (delta <= 1.0 || repeat) && !pastStopTime; - if ( - delta === scheduledAnimation._prevAnimationTime && - !play === (scheduledAnimation._state === ModelAnimationState.STOPPED) - ) { + if (delta === scheduledAnimation._prevAnimationDelta) { + const animationStopped = + scheduledAnimation._state === ModelAnimationState.STOPPED; // no change to delta, and no change to the animation state means we can // skip the update this time around. - continue; + if (play !== animationStopped) continue; } - scheduledAnimation._prevAnimationTime = delta; + scheduledAnimation._prevAnimationDelta = delta; // If it IS, or WAS, animating... if (play || scheduledAnimation._state === ModelAnimationState.ANIMATING) { diff --git a/Specs/Scene/ModelSpec.js b/Specs/Scene/ModelSpec.js index f42850709588..2e15b83e29fe 100644 --- a/Specs/Scene/ModelSpec.js +++ b/Specs/Scene/ModelSpec.js @@ -1915,6 +1915,7 @@ describe( new Date("January 1, 2014 12:00:00 UTC") ); const animations = animBoxesModel.activeAnimations; + animations.animateWhilePaused = false; let animationTime = 0; const a = animations.add({ name: "animation_1", @@ -1927,11 +1928,18 @@ describe( a.update.addEventListener(spyUpdate); animBoxesModel.show = true; + // triggers an update with localTime 0 scene.renderForSpecs(time); animationTime = 0.5; + // triggers an update with localTime 0.5 scene.renderForSpecs(JulianDate.addSeconds(time, 1.0, new JulianDate())); + // should not trigger an update because animationTime didn't change + scene.renderForSpecs(JulianDate.addSeconds(time, 2.0, new JulianDate())); + animationTime = 1.5; + // should not trigger an update because the scene time didn't change scene.renderForSpecs(JulianDate.addSeconds(time, 2.0, new JulianDate())); animationTime = 1.7; + // triggers an update with localTime 1.7 scene.renderForSpecs(JulianDate.addSeconds(time, 3.0, new JulianDate())); expect(spyUpdate.calls.count()).toEqual(3); @@ -1951,6 +1959,52 @@ describe( animBoxesModel.show = false; }); + it("animates while paused with an explicit animation time", function () { + const time = JulianDate.fromDate( + new Date("January 1, 2014 12:00:00 UTC") + ); + const animations = animBoxesModel.activeAnimations; + animations.animateWhilePaused = true; + let animationTime = 0; + const a = animations.add({ + name: "animation_1", + animationTime: function (duration) { + return animationTime / duration; + }, + }); + + const spyUpdate = jasmine.createSpy("listener"); + a.update.addEventListener(spyUpdate); + + animBoxesModel.show = true; + // update(0) + scene.renderForSpecs(time); + animationTime = 0.5; + // update(0.5) + scene.renderForSpecs(time); + // no update, because animationTime didn't change + scene.renderForSpecs(time); + animationTime = 1.7; + // update(1.7) + scene.renderForSpecs(time); + + expect(spyUpdate.calls.count()).toEqual(3); + expect(spyUpdate.calls.argsFor(0)[2]).toEqualEpsilon( + 0.0, + CesiumMath.EPSILON14 + ); + expect(spyUpdate.calls.argsFor(1)[2]).toEqualEpsilon( + 0.5, + CesiumMath.EPSILON14 + ); + expect(spyUpdate.calls.argsFor(2)[2]).toEqualEpsilon( + 1.7, + CesiumMath.EPSILON14 + ); + expect(animations.remove(a)).toEqual(true); + animBoxesModel.show = false; + }); + it("animates with a multiplier", function () { const time = JulianDate.fromDate( new Date("January 1, 2014 12:00:00 UTC") From 34e471d11d51369a40e889b7cb957bb10c6e075b Mon Sep 17 00:00:00 2001 From: markw65 Date: Wed, 4 May 2022 16:25:39 -0700 Subject: [PATCH 3/6] One more missed review fix Use `defined(scheduledAnimation.animationTime)` --- Source/Scene/ModelAnimationCollection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Scene/ModelAnimationCollection.js b/Source/Scene/ModelAnimationCollection.js index ad2b369cf001..fa157a43d038 100644 --- a/Source/Scene/ModelAnimationCollection.js +++ b/Source/Scene/ModelAnimationCollection.js @@ -423,7 +423,7 @@ ModelAnimationCollection.prototype.update = function (frameState) { pastStopTime ? stopTime : sceneTime, startTime ); - delta = scheduledAnimation.animationTime + delta = defined(scheduledAnimation.animationTime) ? scheduledAnimation.animationTime(duration, seconds) : seconds / duration; } From 125d154994e070ffbd06e4fba028a94cd57e2d8e Mon Sep 17 00:00:00 2001 From: markw65 Date: Wed, 4 May 2022 15:58:45 -0700 Subject: [PATCH 4/6] Apply changes to ModelExperimental --- .../ModelExperimentalAnimation.js | 32 +++++++ .../ModelExperimentalAnimationCollection.js | 62 ++++++++---- ...odelExperimentalAnimationCollectionSpec.js | 95 +++++++++++++++++++ 3 files changed, 168 insertions(+), 21 deletions(-) diff --git a/Source/Scene/ModelExperimental/ModelExperimentalAnimation.js b/Source/Scene/ModelExperimental/ModelExperimentalAnimation.js index fa4f5e0f568b..217b14518a27 100644 --- a/Source/Scene/ModelExperimental/ModelExperimentalAnimation.js +++ b/Source/Scene/ModelExperimental/ModelExperimentalAnimation.js @@ -44,6 +44,16 @@ function ModelExperimentalAnimation(model, animation, options) { this._reverse = defaultValue(options.reverse, false); this._loop = defaultValue(options.loop, ModelAnimationLoop.NONE); + /** + * If this is defined, it will be used to compute the local animation time + * instead of the scene's time. + * + * @type {ModelAnimation.AnimationTimeCallback} + * @default undefined + */ + this.animationTime = options.animationTime; + this._prevAnimationDelta = undefined; + /** * The event fired when this animation is started. This can be used, for * example, to play a sound or start a particle system, when the animation starts. @@ -381,4 +391,26 @@ ModelExperimentalAnimation.prototype.animate = function (time) { } }; +/** + * A function used to compute the local animation time for a ModelExperimentalAnimation. + * @callback ModelExperimentalAnimation.AnimationTimeCallback + * + * @param {Number} duration The animation's original duration in seconds. + * @param {Number} seconds The seconds since the animation started, in scene time. + * @returns {Number} Returns the local animation time. + * + * @example + * // Use real time for model animation (also set + * // ModelExperimentalAnimationCollection#animateWhilePaused) + * function animationTime(duration) { + * return Date.now() / 1000 / duration; + * } + * + * @example + * // Offset the phase of the animation, so it starts halfway + * // through its cycle. + * function animationTime(duration, seconds) { + * return seconds / duration + .5; + * } + */ export default ModelExperimentalAnimation; diff --git a/Source/Scene/ModelExperimental/ModelExperimentalAnimationCollection.js b/Source/Scene/ModelExperimental/ModelExperimentalAnimationCollection.js index 902ca5df3f71..6890f6c1274e 100644 --- a/Source/Scene/ModelExperimental/ModelExperimentalAnimationCollection.js +++ b/Source/Scene/ModelExperimental/ModelExperimentalAnimationCollection.js @@ -46,6 +46,17 @@ function ModelExperimentalAnimationCollection(model) { */ this.animationRemoved = new Event(); + /** + * When true, the animation will play even when the scene time is paused. However, + * whether animation takes place will depend on the animationTime functions assigned + * to the model's animations. By default, this is based on scene time, so models using + * the default will not animate regardless of this setting. + * + * @type {Boolean} + * @default false + */ + this.animateWhilePaused = false; + this._model = model; this._runtimeAnimations = []; this._previousTime = undefined; @@ -109,7 +120,8 @@ function addAnimation(collection, animation, options) { * @param {Number} [options.multiplier=1.0] Values greater than 1.0 increase the speed that the animation is played relative to the scene clock speed; values less than 1.0 decrease the speed. * @param {Boolean} [options.reverse=false] When true, the animation is played in reverse. * @param {ModelAnimationLoop} [options.loop=ModelAnimationLoop.NONE] Determines if and how the animation is looped. - * @returns {ModelAnimation} The animation that was added to the collection. + * @param {ModelExperimentalAnimation.AnimationTimeCallback} [options.animationTime=undefined] If defined, computes the local animation time for this animation. + * @returns {ModelExperimentalAnimation} The animation that was added to the collection. * * @exception {DeveloperError} Animations are not loaded. Wait for the {@link ModelExperimental#readyPromise} to resolve. * @exception {DeveloperError} options.name must be a valid animation name. @@ -226,6 +238,7 @@ ModelExperimentalAnimationCollection.prototype.add = function (options) { * @param {Number} [options.multiplier=1.0] Values greater than 1.0 increase the speed that the animations play relative to the scene clock speed; values less than 1.0 decrease the speed. * @param {Boolean} [options.reverse=false] When true, the animations are played in reverse. * @param {ModelAnimationLoop} [options.loop=ModelAnimationLoop.NONE] Determines if and how the animations are looped. + * @param {ModelExperimentalAnimation.AnimationTimeCallback} [options.animationTime=undefined] If defined, computes the local animation time for all of the animations. * @returns {ModelExperimentalAnimation[]} An array of {@link ModelExperimentalAnimation} objects, one for each animation added to the collection. If there are no glTF animations, the array is empty. * * @exception {DeveloperError} Animations are not loaded. Wait for the {@link ModelExperimental#readyPromise} to resolve. @@ -400,8 +413,10 @@ ModelExperimentalAnimationCollection.prototype.update = function (frameState) { return false; } - if (JulianDate.equals(frameState.time, this._previousTime)) { - // Animations are only time-dependent, so do not animate when paused or picking + if ( + !this.animateWhilePaused && + JulianDate.equals(frameState.time, this._previousTime) + ) { return false; } this._previousTime = JulianDate.clone(frameState.time, this._previousTime); @@ -430,23 +445,22 @@ ModelExperimentalAnimationCollection.prototype.update = function (frameState) { const duration = runtimeAnimation._duration; const stopTime = runtimeAnimation.stopTime; + const pastStartTime = JulianDate.lessThanOrEquals(startTime, sceneTime); + const reachedStopTime = + defined(stopTime) && JulianDate.greaterThan(sceneTime, stopTime); + // [0.0, 1.0] normalized local animation time - let delta = - duration !== 0.0 - ? JulianDate.secondsDifference(sceneTime, startTime) / duration - : 0.0; - - // Clamp delta to stop time, if defined. - if ( - duration !== 0.0 && - defined(stopTime) && - JulianDate.greaterThan(sceneTime, stopTime) - ) { - delta = JulianDate.secondsDifference(stopTime, startTime) / duration; + let delta = 0.0; + if (duration !== 0.0) { + const seconds = JulianDate.secondsDifference( + reachedStopTime ? stopTime : sceneTime, + startTime + ); + delta = defined(runtimeAnimation.animationTime) + ? runtimeAnimation.animationTime(duration, seconds) + : seconds / duration; } - const pastStartTime = delta >= 0.0; - // Play animation if // * we are after the start time or the animation is being repeated, and // * before the end of the animation's duration or the animation is being repeated, and @@ -456,14 +470,20 @@ ModelExperimentalAnimationCollection.prototype.update = function (frameState) { runtimeAnimation.loop === ModelAnimationLoop.REPEAT || runtimeAnimation.loop === ModelAnimationLoop.MIRRORED_REPEAT; - const reachedStopTime = - defined(stopTime) && JulianDate.greaterThan(sceneTime, stopTime); - const play = (pastStartTime || (repeat && !defined(runtimeAnimation.startTime))) && (delta <= 1.0 || repeat) && !reachedStopTime; + if (delta === runtimeAnimation._prevAnimationDelta) { + const animationStopped = + runtimeAnimation._state === ModelAnimationState.STOPPED; + // no change to delta, and no change to the animation state means we can + // skip the update this time around. + if (play !== animationStopped) continue; + } + runtimeAnimation._prevAnimationDelta = delta; + // If it IS, or WAS, animating... if (play || runtimeAnimation._state === ModelAnimationState.ANIMATING) { // ...transition from STOPPED to ANIMATING @@ -480,7 +500,7 @@ ModelExperimentalAnimationCollection.prototype.update = function (frameState) { } else if (runtimeAnimation.loop === ModelAnimationLoop.MIRRORED_REPEAT) { const floor = Math.floor(delta); const fract = delta - floor; - // When even, use (1.0 - fract) to mirror repeat + // When odd use (1.0 - fract) to mirror repeat delta = floor % 2 === 1.0 ? 1.0 - fract : fract; } diff --git a/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js b/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js index 3200ceb36c93..b1cf6198b1fd 100644 --- a/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js +++ b/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js @@ -3,6 +3,7 @@ import { ModelAnimationLoop, ModelExperimental, ResourceCache, + Math as CesiumMath, } from "../../../Source/Cesium.js"; import createScene from "../../createScene.js"; @@ -615,6 +616,100 @@ describe("Scene/ModelExperimental/ModelExperimentalAnimationCollection", functio }); }); + it("animates with an explicit animation time", function () { + return loadAndZoomToModelExperimental( + { + gltf: animatedTriangleUrl, + }, + scene + ).then(function (model) { + const time = JulianDate.fromDate( + new Date("January 1, 2014 12:00:00 UTC") + ); + const animationCollection = model.activeAnimations; + animationCollection.animateWhilePaused = false; + let animationTime = 0; + const animation = animationCollection.add({ + index: 0, + animationTime: function (duration) { + return animationTime / duration; + }, + }); + + const spyUpdate = jasmine.createSpy("listener"); + animation.update.addEventListener(spyUpdate); + + scene.renderForSpecs(time); + animationTime = 0.1; + scene.renderForSpecs(JulianDate.addSeconds(time, 1.0, scratchJulianDate)); + scene.renderForSpecs(JulianDate.addSeconds(time, 2.0, scratchJulianDate)); + animationTime = 0.2; + scene.renderForSpecs(JulianDate.addSeconds(time, 2.0, scratchJulianDate)); + animationTime = 0.3; + scene.renderForSpecs(JulianDate.addSeconds(time, 3.0, new JulianDate())); + + expect(spyUpdate.calls.count()).toEqual(3); + expect(spyUpdate.calls.argsFor(0)[2]).toEqualEpsilon( + 0.0, + CesiumMath.EPSILON14 + ); + expect(spyUpdate.calls.argsFor(1)[2]).toEqualEpsilon( + 0.1, + CesiumMath.EPSILON14 + ); + expect(spyUpdate.calls.argsFor(2)[2]).toEqualEpsilon( + 0.3, + CesiumMath.EPSILON14 + ); + }); + }); + + it("animates while paused with an explicit animation time", function () { + return loadAndZoomToModelExperimental( + { + gltf: animatedTriangleUrl, + }, + scene + ).then(function (model) { + const time = JulianDate.fromDate( + new Date("January 1, 2014 12:00:00 UTC") + ); + const animationCollection = model.activeAnimations; + animationCollection.animateWhilePaused = true; + let animationTime = 0; + const animation = animationCollection.add({ + index: 0, + animationTime: function (duration) { + return animationTime / duration; + }, + }); + + const spyUpdate = jasmine.createSpy("listener"); + animation.update.addEventListener(spyUpdate); + + scene.renderForSpecs(time); + animationTime = 0.1; + scene.renderForSpecs(time); + scene.renderForSpecs(time); + animationTime = 0.3; + scene.renderForSpecs(time); + + expect(spyUpdate.calls.count()).toEqual(3); + expect(spyUpdate.calls.argsFor(0)[2]).toEqualEpsilon( + 0.0, + CesiumMath.EPSILON14 + ); + expect(spyUpdate.calls.argsFor(1)[2]).toEqualEpsilon( + 0.1, + CesiumMath.EPSILON14 + ); + expect(spyUpdate.calls.argsFor(2)[2]).toEqualEpsilon( + 0.3, + CesiumMath.EPSILON14 + ); + }); + }); + it("animates with a multiplier", function () { return loadAndZoomToModelExperimental( { From 47e7d9fdcd4b3b04692ad60071585c4c11293959 Mon Sep 17 00:00:00 2001 From: markw65 Date: Thu, 5 May 2022 08:52:48 -0700 Subject: [PATCH 5/6] Respond to code review --- CHANGES.md | 5 +--- Source/Scene/ModelAnimation.js | 28 +++++++++++-------- Source/Scene/ModelAnimationCollection.js | 8 ++++-- .../ModelExperimentalAnimation.js | 28 +++++++++++-------- .../ModelExperimentalAnimationCollection.js | 8 ++++-- ...odelExperimentalAnimationCollectionSpec.js | 4 ++- Specs/Scene/ModelSpec.js | 3 +- 7 files changed, 48 insertions(+), 36 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index d2697e6b7bd7..546ba82c14d4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,7 @@ - Added `Cesium3DTileStyle.fromUrl` for loading a style from a url. [#10348](https://github.com/CesiumGS/cesium/pull/10348) - Added `IndexDatatype.fromTypedArray`. [#10350](https://github.com/CesiumGS/cesium/pull/10350) +- Added `ModelAnimationCollection.animateWhilePaused` and `ModelAnimation.animationTime` to allow explicit control over a model's animations. [#9339](https://github.com/CesiumGS/cesium/pull/9339) ##### Fixes :wrench: @@ -23,10 +24,6 @@ - `Cesium3DTileStyle` constructor parameters of `string` or `Resource` type have been deprecated and will be removed in CesiumJS 1.96. If loading a style from a url, use `Cesium3DTileStyle.fromUrl` instead. [#10348](https://github.com/CesiumGS/cesium/pull/10348) - `Cesium3DTileStyle.readyPromise` and `Cesium3DTileStyle.ready` have been deprecated and will be removed in CesiumJS 1.96. If loading a style from a url, use `Cesium3DTileStyle.fromUrl` instead. [#10348](https://github.com/CesiumGS/cesium/pull/10348) -##### Additions :tada: - -- Added `ModelAnimationCollection.animateWhilePaused` and `ModelAnimation.animationTime` to allow explicit control over a model's animations. - ### 1.93 - 2022-05-02 ##### Breaking Changes :mega: diff --git a/Source/Scene/ModelAnimation.js b/Source/Scene/ModelAnimation.js index 2c2b2b27881c..293be247cd84 100644 --- a/Source/Scene/ModelAnimation.js +++ b/Source/Scene/ModelAnimation.js @@ -38,15 +38,7 @@ function ModelAnimation(options, model, runtimeAnimation) { this._multiplier = defaultValue(options.multiplier, 1.0); this._reverse = defaultValue(options.reverse, false); this._loop = defaultValue(options.loop, ModelAnimationLoop.NONE); - - /** - * If this is defined, it will be used to compute the local animation time - * instead of the scene's time. - * - * @type {ModelAnimation.AnimationTimeCallback} - * @default undefined - */ - this.animationTime = options.animationTime; + this._animationTime = options.animationTime; this._prevAnimationDelta = undefined; /** @@ -239,6 +231,19 @@ Object.defineProperties(ModelAnimation.prototype, { return this._loop; }, }, + + /** + * If this is defined, it will be used to compute the local animation time + * instead of the scene's time. + * + * @type {ModelAnimation.AnimationTimeCallback} + * @default undefined + */ + animationTime: { + get: function () { + return this._animationTime; + }, + }, }); /** * A function used to compute the local animation time for a ModelAnimation. @@ -249,8 +254,7 @@ Object.defineProperties(ModelAnimation.prototype, { * @returns {Number} Returns the local animation time. * * @example - * // Use real time for model animation (also set - * // ModelAnimationCollection#animateWhilePaused) + * // Use real time for model animation (assuming animateWhilePaused was set to true) * function animationTime(duration) { * return Date.now() / 1000 / duration; * } @@ -259,7 +263,7 @@ Object.defineProperties(ModelAnimation.prototype, { * // Offset the phase of the animation, so it starts halfway * // through its cycle. * function animationTime(duration, seconds) { - * return seconds / duration + .5; + * return seconds / duration + 0.5; * } */ export default ModelAnimation; diff --git a/Source/Scene/ModelAnimationCollection.js b/Source/Scene/ModelAnimationCollection.js index fa157a43d038..7bcd4700eb55 100644 --- a/Source/Scene/ModelAnimationCollection.js +++ b/Source/Scene/ModelAnimationCollection.js @@ -423,8 +423,8 @@ ModelAnimationCollection.prototype.update = function (frameState) { pastStopTime ? stopTime : sceneTime, startTime ); - delta = defined(scheduledAnimation.animationTime) - ? scheduledAnimation.animationTime(duration, seconds) + delta = defined(scheduledAnimation._animationTime) + ? scheduledAnimation._animationTime(duration, seconds) : seconds / duration; } @@ -447,7 +447,9 @@ ModelAnimationCollection.prototype.update = function (frameState) { scheduledAnimation._state === ModelAnimationState.STOPPED; // no change to delta, and no change to the animation state means we can // skip the update this time around. - if (play !== animationStopped) continue; + if (play !== animationStopped) { + continue; + } } scheduledAnimation._prevAnimationDelta = delta; diff --git a/Source/Scene/ModelExperimental/ModelExperimentalAnimation.js b/Source/Scene/ModelExperimental/ModelExperimentalAnimation.js index 217b14518a27..9eb66ea00318 100644 --- a/Source/Scene/ModelExperimental/ModelExperimentalAnimation.js +++ b/Source/Scene/ModelExperimental/ModelExperimentalAnimation.js @@ -43,15 +43,7 @@ function ModelExperimentalAnimation(model, animation, options) { this._multiplier = defaultValue(options.multiplier, 1.0); this._reverse = defaultValue(options.reverse, false); this._loop = defaultValue(options.loop, ModelAnimationLoop.NONE); - - /** - * If this is defined, it will be used to compute the local animation time - * instead of the scene's time. - * - * @type {ModelAnimation.AnimationTimeCallback} - * @default undefined - */ - this.animationTime = options.animationTime; + this._animationTime = options.animationTime; this._prevAnimationDelta = undefined; /** @@ -333,6 +325,19 @@ Object.defineProperties(ModelExperimentalAnimation.prototype, { return this._loop; }, }, + + /** + * If this is defined, it will be used to compute the local animation time + * instead of the scene's time. + * + * @type {ModelExperimentalAnimation.AnimationTimeCallback} + * @default undefined + */ + animationTime: { + get: function () { + return this._animationTime; + }, + }, }); function initialize(runtimeAnimation) { @@ -400,8 +405,7 @@ ModelExperimentalAnimation.prototype.animate = function (time) { * @returns {Number} Returns the local animation time. * * @example - * // Use real time for model animation (also set - * // ModelExperimentalAnimationCollection#animateWhilePaused) + * // Use real time for model animation (assuming animateWhilePaused was set to true) * function animationTime(duration) { * return Date.now() / 1000 / duration; * } @@ -410,7 +414,7 @@ ModelExperimentalAnimation.prototype.animate = function (time) { * // Offset the phase of the animation, so it starts halfway * // through its cycle. * function animationTime(duration, seconds) { - * return seconds / duration + .5; + * return seconds / duration + 0.5; * } */ export default ModelExperimentalAnimation; diff --git a/Source/Scene/ModelExperimental/ModelExperimentalAnimationCollection.js b/Source/Scene/ModelExperimental/ModelExperimentalAnimationCollection.js index 6890f6c1274e..1057254accc0 100644 --- a/Source/Scene/ModelExperimental/ModelExperimentalAnimationCollection.js +++ b/Source/Scene/ModelExperimental/ModelExperimentalAnimationCollection.js @@ -456,8 +456,8 @@ ModelExperimentalAnimationCollection.prototype.update = function (frameState) { reachedStopTime ? stopTime : sceneTime, startTime ); - delta = defined(runtimeAnimation.animationTime) - ? runtimeAnimation.animationTime(duration, seconds) + delta = defined(runtimeAnimation._animationTime) + ? runtimeAnimation._animationTime(duration, seconds) : seconds / duration; } @@ -480,7 +480,9 @@ ModelExperimentalAnimationCollection.prototype.update = function (frameState) { runtimeAnimation._state === ModelAnimationState.STOPPED; // no change to delta, and no change to the animation state means we can // skip the update this time around. - if (play !== animationStopped) continue; + if (play !== animationStopped) { + continue; + } } runtimeAnimation._prevAnimationDelta = delta; diff --git a/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js b/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js index b1cf6198b1fd..93cd7da979f5 100644 --- a/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js +++ b/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js @@ -627,7 +627,6 @@ describe("Scene/ModelExperimental/ModelExperimentalAnimationCollection", functio new Date("January 1, 2014 12:00:00 UTC") ); const animationCollection = model.activeAnimations; - animationCollection.animateWhilePaused = false; let animationTime = 0; const animation = animationCollection.add({ index: 0, @@ -642,8 +641,10 @@ describe("Scene/ModelExperimental/ModelExperimentalAnimationCollection", functio scene.renderForSpecs(time); animationTime = 0.1; scene.renderForSpecs(JulianDate.addSeconds(time, 1.0, scratchJulianDate)); + // no update because animationTime didn't change scene.renderForSpecs(JulianDate.addSeconds(time, 2.0, scratchJulianDate)); animationTime = 0.2; + // no update because scene time didn't change scene.renderForSpecs(JulianDate.addSeconds(time, 2.0, scratchJulianDate)); animationTime = 0.3; scene.renderForSpecs(JulianDate.addSeconds(time, 3.0, new JulianDate())); @@ -690,6 +691,7 @@ describe("Scene/ModelExperimental/ModelExperimentalAnimationCollection", functio scene.renderForSpecs(time); animationTime = 0.1; scene.renderForSpecs(time); + // no update because animationTime didn't change scene.renderForSpecs(time); animationTime = 0.3; scene.renderForSpecs(time); diff --git a/Specs/Scene/ModelSpec.js b/Specs/Scene/ModelSpec.js index 2e15b83e29fe..caecdc51a8b1 100644 --- a/Specs/Scene/ModelSpec.js +++ b/Specs/Scene/ModelSpec.js @@ -1961,7 +1961,7 @@ describe( it("animates while paused with an explicit animation time", function () { const time = JulianDate.fromDate( - new Date("January 1, 2014 12:00:00 UTC") + new Date("January 1, 2014 12:00:01 UTC") ); const animations = animBoxesModel.activeAnimations; animations.animateWhilePaused = true; @@ -2003,6 +2003,7 @@ describe( ); expect(animations.remove(a)).toEqual(true); animBoxesModel.show = false; + animations.animateWhilePaused = false; }); it("animates with a multiplier", function () { From f8a859c7442ff5668c81ac52da0cf288d4394a2f Mon Sep 17 00:00:00 2001 From: markw65 Date: Tue, 10 May 2022 14:05:27 -0700 Subject: [PATCH 6/6] More code review fixes --- Apps/Sandcastle/gallery/Manually Controlled Animation.html | 2 +- .../ModelExperimentalAnimationCollectionSpec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Apps/Sandcastle/gallery/Manually Controlled Animation.html b/Apps/Sandcastle/gallery/Manually Controlled Animation.html index dfb94c8c4329..37ba2255ec4c 100644 --- a/Apps/Sandcastle/gallery/Manually Controlled Animation.html +++ b/Apps/Sandcastle/gallery/Manually Controlled Animation.html @@ -154,7 +154,7 @@ }); }); viewer.trackedEntity = modelLabel; - modelLabel.viewFrom = new Cesium.Cartesian3(-20.0, -7.0, 4.0); + modelLabel.viewFrom = new Cesium.Cartesian3(-30.0, -10.0, 10.0); //Sandcastle_End Sandcastle.finishedLoading(); } diff --git a/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js b/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js index 93cd7da979f5..4b597e9c797e 100644 --- a/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js +++ b/Specs/Scene/ModelExperimental/ModelExperimentalAnimationCollectionSpec.js @@ -647,7 +647,7 @@ describe("Scene/ModelExperimental/ModelExperimentalAnimationCollection", functio // no update because scene time didn't change scene.renderForSpecs(JulianDate.addSeconds(time, 2.0, scratchJulianDate)); animationTime = 0.3; - scene.renderForSpecs(JulianDate.addSeconds(time, 3.0, new JulianDate())); + scene.renderForSpecs(JulianDate.addSeconds(time, 3.0, scratchJulianDate)); expect(spyUpdate.calls.count()).toEqual(3); expect(spyUpdate.calls.argsFor(0)[2]).toEqualEpsilon(