have zero total influence Previously, when evaluating the NLA stack at a particular point in time, if a channel hadn't been encountered before, influence values were simply ignored when accumulating the values contributed by each strip to the overall stack. This behaviour simplified the handling of the problem of what "baseline" to blend relative to (i.e. influence basically scales the magnitude of a scalar around 0, but we may not exactly want a property to get it's value set to 0 as baseline). However, the problem was that this meant that you'd get popping artifacts when the a lower strip finally reaches influence=0 but your upper strips haven't fully reached maximum yet ([#35382]). Another problem was that you'd end up with less ability to scale the influence of all strips (as in [#35263]). So, as a stop-gap fix now, we will allow influence scaling to work on these strips too. This still doesn't fix some of the other problems regarding baselines/rest-poses and deterministic behaviour when some channels are only keyed in one strip which isn't set to extend it's influence... Fixing those issues is a bit more involved, and would require a bit of refactoring of how we keep track of accumulation channels.
This commit is contained in:
@@ -1695,12 +1695,6 @@ static void nlaevalchan_accumulate(NlaEvalChannel *nec, NlaEvalStrip *nes, short
|
||||
short blendmode = strip->blendmode;
|
||||
float inf = strip->influence;
|
||||
|
||||
/* if channel is new, just store value regardless of blending factors, etc. */
|
||||
if (newChan) {
|
||||
nec->value = value;
|
||||
return;
|
||||
}
|
||||
|
||||
/* if this is being performed as part of transition evaluation, incorporate
|
||||
* an additional weighting factor for the influence
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user