From fd3ff9e07e50421ad86d8d9cade9bb00d7d2566e Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Fri, 15 Nov 2024 10:54:02 +0100 Subject: [PATCH 1/2] Rewrite wiggle expression using simple-noise to match AE --- .eslintrc.json | 8 +++- package.json | 1 + .../js/utils/expressions/ExpressionManager.js | 44 +++++++------------ 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 8c7c96f5a..ac050c02f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -41,6 +41,12 @@ "no-param-reassign": "off", "vars-on-top": "off", "no-use-before-define": "off", - "-------": "off" + "-------": "off", + "import/no-extraneous-dependencies": [ + "error", + { + "devDependencies": true + } + ] } } diff --git a/package.json b/package.json index 247364015..cdb845816 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "puppeteer": "^20.5.0", "rollup": "^2.61.0", "rollup-plugin-terser": "^7.0.2", + "simplex-noise": "^4.0.3", "uglify-js": "^3.4.9", "watch": "^1.0.2" }, diff --git a/player/js/utils/expressions/ExpressionManager.js b/player/js/utils/expressions/ExpressionManager.js index 1bc5e32d9..822903ca7 100644 --- a/player/js/utils/expressions/ExpressionManager.js +++ b/player/js/utils/expressions/ExpressionManager.js @@ -1,4 +1,5 @@ /* eslint-disable camelcase */ +import { createNoise2D } from 'simplex-noise'; import { degToRads, @@ -442,36 +443,25 @@ const ExpressionManager = (function () { var active = !this.data || this.data.hd !== true; + var noise = createNoise2D(); + var wiggle = function wiggle(freq, amp) { - var iWiggle; - var j; - var lenWiggle = this.pv.length ? this.pv.length : 1; - var addedAmps = createTypedArray('float32', lenWiggle); - freq = 5; - var iterations = Math.floor(time * freq); - iWiggle = 0; - j = 0; - while (iWiggle < iterations) { - // var rnd = BMMath.random(); - for (j = 0; j < lenWiggle; j += 1) { - addedAmps[j] += -amp + amp * 2 * BMMath.random(); - // addedAmps[j] += -amp + amp*2*rnd; - } - iWiggle += 1; - } - // var rnd2 = BMMath.random(); - var periods = time * freq; - var perc = periods - Math.floor(periods); - var arr = createTypedArray('float32', lenWiggle); - if (lenWiggle > 1) { - for (j = 0; j < lenWiggle; j += 1) { - arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; - // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc; - // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc); + const noisePosition = (time * freq) / 2; + + if (this.pv.length) { + const result = createTypedArray('float32', this.pv.length); + + for (let i = 0; i < this.pv.length; i += 1) { + const noiseValue = noise(noisePosition, i) * amp; + + result[i] = this.pv[i] + noiseValue; } - return arr; + + return result; } - return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc; + + const noiseValue = noise(noisePosition, 0) * amp; + return this.pv + noiseValue; }.bind(this); if (thisProperty.loopIn) { From 174a9700b804020492a56615da0c9bb47576e8d1 Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Fri, 15 Nov 2024 11:17:32 +0100 Subject: [PATCH 2/2] Only create noise function if necessary --- player/js/utils/expressions/ExpressionManager.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/player/js/utils/expressions/ExpressionManager.js b/player/js/utils/expressions/ExpressionManager.js index 822903ca7..caa4101e7 100644 --- a/player/js/utils/expressions/ExpressionManager.js +++ b/player/js/utils/expressions/ExpressionManager.js @@ -443,9 +443,11 @@ const ExpressionManager = (function () { var active = !this.data || this.data.hd !== true; - var noise = createNoise2D(); + var noise; var wiggle = function wiggle(freq, amp) { + if (!noise) noise = createNoise2D(); + const noisePosition = (time * freq) / 2; if (this.pv.length) {