Animation: Butterworth Smoothing filter #106952

Merged
Christoph Lendenfeld merged 56 commits from ChrisLend/blender:graph_editor_butterworth into main 2023-07-13 09:10:49 +02:00

Implements the butterworth filter (https://en.wikipedia.org/wiki/Butterworth_filter) for smoothing FCurves.

This filter is ideal for smoothing dense data, like motion capture recordings.
It has the advantage of keeping the shape of the curve intact while reducing minimal fluctuations.
The disadvantage is the impulse response has a twang, meaning extreme spikes cause fluctuations to either side. (see picture)

The implementation is based on the GPL code found here: https://exstrom.com/journal/sigproc/dsigproc.html

In order to avoid phase shifting, the filter is run forward and backward, effectively doubling the filter order.

The Redo panel offers the following options

  • Frequency Cutoff: 0-n value, where 0 means it cuts everything so the curve will become straight, the max value is the Nyquist frequency and depends on the frame rate and the "Samples per Frame" option
  • Filter Order: Higher values mean the frequency cutoff is steeper
  • Samples per Frame: Before the filter is applied, the curve is resampled at this interval to avoid errors when there are uneven spaces between frames. If the keys are on subframes, e.g. a 60fps file in a 30fps scene, increase this value to 2
  • Blend: 0-1 value to blend between the original curve and the filter result
  • Blend In/Out: The number of frames at the start and end for which to blend between the filtered and unfiltered curve. This can help reduce any resulting jumps in the animation at the selection border

The operator can be called from the Key menu. (Key->Smooth->Butterworth Smooth)

Impulse Response at Filter Order 4 and Cutoff Frequency at half the Nyquist Frequency
image

Filtered Curve with Ghost Curve as a reference
image

Blend In/Out at 8 Blend In/Out at 0
image image

On a side note, the issue I was having for a long time is that I had these fluctuations at the start and end of the segment. It turns out you need to offset the samples so the first sample is 0.

Implements the butterworth filter (https://en.wikipedia.org/wiki/Butterworth_filter) for smoothing FCurves. This filter is ideal for smoothing dense data, like motion capture recordings. It has the advantage of keeping the shape of the curve intact while reducing minimal fluctuations. The disadvantage is the impulse response has a twang, meaning extreme spikes cause fluctuations to either side. (see picture) The implementation is based on the GPL code found here: https://exstrom.com/journal/sigproc/dsigproc.html In order to avoid phase shifting, the filter is run forward and backward, effectively doubling the filter order. The Redo panel offers the following options * Frequency Cutoff: 0-n value, where 0 means it cuts everything so the curve will become straight, the max value is the Nyquist frequency and depends on the frame rate and the "Samples per Frame" option * Filter Order: Higher values mean the frequency cutoff is steeper * Samples per Frame: Before the filter is applied, the curve is resampled at this interval to avoid errors when there are uneven spaces between frames. If the keys are on subframes, e.g. a 60fps file in a 30fps scene, increase this value to 2 * Blend: 0-1 value to blend between the original curve and the filter result * Blend In/Out: The number of frames at the start and end for which to blend between the filtered and unfiltered curve. This can help reduce any resulting jumps in the animation at the selection border The operator can be called from the Key menu. (Key->Smooth->Butterworth Smooth) Impulse Response at Filter Order 4 and Cutoff Frequency at half the Nyquist Frequency ![image](/attachments/eaa7b601-12a7-4ff6-a1d5-dbc5ab5efe5e) Filtered Curve with Ghost Curve as a reference ![image](/attachments/bb0d9871-a7dd-48ac-b436-d50645e11e02) | Blend In/Out at 8 | Blend In/Out at 0 | | - | - | | ![image](/attachments/1fff0a77-3933-4cc8-b9b6-01cddb51546e) | ![image](/attachments/baaf3a21-81ea-4e99-917f-efad43fc9fc7) | ------ On a side note, the issue I was having for a long time is that I had these fluctuations at the start and end of the segment. It turns out you need to offset the samples so the first sample is 0.
Christoph Lendenfeld added the
Module
Animation & Rigging
label 2023-04-14 15:02:18 +02:00
Christoph Lendenfeld added 7 commits 2023-04-14 15:02:31 +02:00
Christoph Lendenfeld added this to the Module: Animation & Rigging project 2023-04-14 15:04:25 +02:00
Author
Member

Video of an impulse Response at Filter Order 4 with Cutoff Frequency 0-1

Video of an impulse Response at Filter Order 4 with Cutoff Frequency 0-1
Author
Member

demo video

demo video
Author
Member

@blender-bot package

@blender-bot package
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR106952) when ready.
Christoph Lendenfeld requested review from Brad Clark 2023-04-14 15:37:31 +02:00
Christoph Lendenfeld added 2 commits 2023-04-20 10:26:22 +02:00
fix wrong logic
Some checks failed
buildbot/vexp-code-patch-coordinator Build done.
9625b10c7c
need to run the filtered values backwards
not the original and average
Author
Member

@blender-bot package

@blender-bot package
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR106952) when ready.
Christoph Lendenfeld added 3 commits 2023-04-21 12:01:55 +02:00
Christoph Lendenfeld added 1 commit 2023-04-21 12:06:06 +02:00
bw filter isn't using a slider,
so the code shouldn't be in graph_slider_ops.c
Christoph Lendenfeld added 2 commits 2023-04-21 12:12:35 +02:00
Christoph Lendenfeld requested review from Sybren A. Stüvel 2023-04-21 12:14:20 +02:00
Christoph Lendenfeld added 1 commit 2023-04-21 12:24:05 +02:00
Christoph Lendenfeld added 1 commit 2023-04-21 16:43:49 +02:00
Christoph Lendenfeld added 2 commits 2023-04-28 11:27:32 +02:00
Christoph Lendenfeld added 1 commit 2023-04-28 11:45:41 +02:00
cleanup
Some checks failed
buildbot/vexp-code-patch-coordinator Build done.
725ea9a138
Author
Member

@blender-bot package

added modal. That's actually faster to run because the whole undo-redo step is the slow part

@blender-bot package added modal. That's actually faster to run because the whole undo-redo step is the slow part
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR106952) when ready.
Christoph Lendenfeld added 1 commit 2023-04-28 18:06:03 +02:00
Merge branch 'main' into graph_editor_butterworth
All checks were successful
buildbot/vexp-code-patch-coordinator Build done.
de40c80bbc
Author
Member

@blender-bot package Windows

@blender-bot package Windows
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR106952) when ready.
Member

For best results for Blender a default value of FACTOR = 1, samples = 2 and filter order = 3,
but the code for HZ at least the slider value for the user should be mapped to whole numbers int 0-100
instead of float values.

The "slider" could default to the Factor to blend between a good curve smooth and the source data and then an modifier key to change frequency without exiting the slider would be good

For best results for Blender a default value of FACTOR = 1, samples = 2 and filter order = 3, but the code for HZ at least the slider value for the user should be mapped to whole numbers int 0-100 instead of float values. The "slider" could default to the Factor to blend between a good curve smooth and the source data and then an modifier key to change frequency without exiting the slider would be good
Christoph Lendenfeld added 2 commits 2023-05-07 22:09:36 +02:00
Christoph Lendenfeld added 1 commit 2023-05-07 22:50:27 +02:00
Christoph Lendenfeld added 1 commit 2023-05-08 21:12:43 +02:00
Merge branch 'main' into graph_editor_butterworth
All checks were successful
buildbot/vexp-code-patch-coordinator Build done.
bd3b40c79c
Author
Member

@blender-bot package

changed to a frequency cutoff and the slider controls the factor now
also due to the update from main the menu entry is now in key->smooth

@blender-bot package changed to a frequency cutoff and the slider controls the factor now also due to the update from main the menu entry is now in key->smooth
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR106952) when ready.
Christoph Lendenfeld added 1 commit 2023-05-09 22:08:54 +02:00
Member

Function works well now from animation/artist testing, the filter does what is expected with some adjustments.

Just need to finalize the slider operator if FACTOR is better than HRZ to have the slider adjust as I would expect the slider to impact what gets smoothed not how much of the source curve is impacted.

And set the defaults to get a good result like 3hz with 16 samples for example and factor of 1

Function works well now from animation/artist testing, the filter does what is expected with some adjustments. Just need to finalize the slider operator if FACTOR is better than HRZ to have the slider adjust as I would expect the slider to impact what gets smoothed not how much of the source curve is impacted. And set the defaults to get a good result like 3hz with 16 samples for example and factor of 1
Brad Clark approved these changes 2023-05-16 18:41:45 +02:00
Brad Clark left a comment
Member

Function of the filter is approved, small tweaks left but the core filter is working on animation curves as I would expect.

Function of the filter is approved, small tweaks left but the core filter is working on animation curves as I would expect.
Christoph Lendenfeld added 1 commit 2023-05-25 10:17:46 +02:00
Author
Member

@BClark not sure if you want the slider to drive the blend factor or not. Can you clarify that

I am also a bit hesitant to increase the default samples per frame. It really is only meant for subframe data. The result might not match other software 100% but is that a requirement. We don't know their implementation so there might be all sorts of stuff going on under the hood

@BClark not sure if you want the slider to drive the blend factor or not. Can you clarify that I am also a bit hesitant to increase the default samples per frame. It really is only meant for subframe data. The result might not match other software 100% but is that a requirement. We don't know their implementation so there might be all sorts of stuff going on under the hood
Christoph Lendenfeld added 2 commits 2023-05-25 17:12:01 +02:00
Author
Member

@blender-bot package

changed back to slider driving the cutoff_frequency, but indirectly via a hidden property "cutoff_factor" in order to fit the 0-1 range that the slider expects.

@blender-bot package changed back to slider driving the cutoff_frequency, but indirectly via a hidden property "cutoff_factor" in order to fit the 0-1 range that the slider expects.
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR106952) when ready.
Christoph Lendenfeld added 3 commits 2023-05-26 12:26:40 +02:00
Christoph Lendenfeld added 2 commits 2023-06-02 11:09:56 +02:00
Christoph Lendenfeld added 1 commit 2023-06-02 11:11:26 +02:00
default blend in/out to 4
All checks were successful
buildbot/vexp-code-patch-coordinator Build done.
2959a215c2
Christoph Lendenfeld requested review from Brad Clark 2023-06-02 11:18:07 +02:00
Author
Member

@blender-bot package

@BClark added a blend in/out value as discussed yesterday. I defaulted it to 4 because I think it is useful for most cases. Do let me know what you think about that

@blender-bot package @BClark added a blend in/out value as discussed yesterday. I defaulted it to 4 because I think it is useful for most cases. Do let me know what you think about that
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR106952) when ready.
Christoph Lendenfeld added 5 commits 2023-06-08 16:09:22 +02:00
Brad Clark approved these changes 2023-06-08 16:15:27 +02:00
Brad Clark left a comment
Member

Animation user results approved, thanks for the hard work on taming the stat/end drift and improving the usability on a selected range with the improved blending

Animation user results approved, thanks for the hard work on taming the stat/end drift and improving the usability on a selected range with the improved blending
Sybren A. Stüvel requested changes 2023-06-08 16:52:48 +02:00
Sybren A. Stüvel left a comment
Member

Nice work!

I found a few smaller things in the code. More importantly, I can't figure out how the modal slider interacts with the redo panel. When I use the slider, it seems to reset to the default parameters, and not use the ones I set in the redo panel. This is what I tried:

  • Choose Key menu → Smooth → Butterworth
  • Now the slider is at 50% for the initial value (that was unexpected, I expected to be able to gradually slide in the smoothness)
  • Slide to the left and I left click to confirm a 0% effect so I can use the redo panel to play with the parameters
  • Set the cutoff frequency to 3 Hz
  • Choose Key menu → Smooth → Butterworth
  • Don't move the slider, leave it at 50% and confirm.
  • The redo panel now shows:
    • factor: 0% (even though the slider was at 50% when I confirmed)
    • frequency: 6 Hz (even though I set it to 3 Hz)
  • Sliding the cutoff frequency parameter in the redo panel does nothing any more, because the factor is still set at 0%
Nice work! I found a few smaller things in the code. More importantly, I can't figure out how the modal slider interacts with the redo panel. When I use the slider, it seems to reset to the default parameters, and not use the ones I set in the redo panel. This is what I tried: - Choose Key menu → Smooth → Butterworth - Now the slider is at 50% for the initial value (that was unexpected, I expected to be able to gradually slide in the smoothness) - Slide to the left and I left click to confirm a 0% effect so I can use the redo panel to play with the parameters - Set the cutoff frequency to 3 Hz - Choose Key menu → Smooth → Butterworth - Don't move the slider, leave it at 50% and confirm. - The redo panel now shows: - factor: 0% (even though the slider was at 50% when I confirmed) - frequency: 6 Hz (even though I set it to 3 Hz) - Sliding the cutoff frequency parameter in the redo panel does nothing any more, because the factor is still set at 0%
@ -389,0 +438,4 @@
}
/**
* \param samples are expected to be centered around the segment with a buffer of size filter_order
* at the left.

filter_orderbw_coeff->filter_order, otherwise people will look for a filter_order parameter.

`filter_order` → `bw_coeff->filter_order`, otherwise people will look for a `filter_order` parameter.
Author
Member

updated the comment in general. Samples no longer need to be centered around the segment
they only need a buffer of filter_order at the left

updated the comment in general. Samples no longer need to be centered around the segment they only need a buffer of filter_order at the left
@ -389,0 +463,4 @@
const float fwd_offset = samples[0];
for (int i = 0; i < sample_count; i++) {
double x = (double)(samples[i] - fwd_offset);

const

`const`
@ -389,0 +469,4 @@
}
for (int i = 0; i < filter_order; i++) {
w0[i] = 0.0;

Given that wN is calloc'ed, it's already all-zeroes. Is this assignment necessary?

Given that `wN` is calloc'ed, it's already all-zeroes. Is this assignment necessary?
Author
Member

yes because is that is after the forward run of the filter.
within the filter they are used as buffer values, and they should all be 0 for the backward run

yes because is that is after the forward run of the filter. within the filter they are used as buffer values, and they should all be 0 for the backward run
@ -389,0 +478,4 @@
/* Run the filter backwards as well to remove phase offset. */
for (int i = sample_count - 1; i >= 0; i--) {
double x = (double)(filtered_values[i] - bwd_offset);

const

`const`
@ -389,0 +488,4 @@
const float blend_in_y = fcu->bezt[segment->start_index].vec[1][1];
const float blend_out_y = fcu->bezt[segment_end_index - 1].vec[1][1];
for (int i = segment->start_index; i < segment_end_index; i++) {

Maybe add a comment here to explain the higher-level step that's taken here. It looks like it's blending the output of the Butterworth filter with the original keyframes, in a way that's somehow sensitive to the start/end edges. It would be good to have that explained here.

Maybe add a comment here to explain the higher-level step that's taken here. It looks like it's blending the output of the Butterworth filter with the original keyframes, in a way that's somehow sensitive to the start/end edges. It would be good to have that explained here.
@ -389,0 +506,4 @@
blend_in_out_factor = min_ff((float)(segment_end_index - i - 1) / blend_in_out, 1.0f);
blend_value = blend_out_y;
}
key_y_value = interpf(key_y_value, blend_value, blend_in_out_factor);

This seems to be the only place where key_y_value gets a new value. Maybe you could use a 2nd variable here, so that both can be const? Maybe filtered_y_value and blended_y_value?

This seems to be the only place where `key_y_value` gets a new value. Maybe you could use a 2nd variable here, so that both can be `const`? Maybe `filtered_y_value` and `blended_y_value`?
@ -1210,0 +1251,4 @@
FCurve *fcu = (FCurve *)ale->key_data;
ListBase fcu_segments = find_fcurve_segments(fcu);
LISTBASE_FOREACH (FCurveSegment *, segment, &fcu_segments) {

Can't this use apply_fcu_segment_function()?

Can't this use `apply_fcu_segment_function()`?
Author
Member

unfortunately not because the parameters for butterworth_smooth_fcurve_segment are more complicated

unfortunately not because the parameters for `butterworth_smooth_fcurve_segment` are more complicated
Author
Member

@dr.sybren part of the confusion might be that the slider controls a hidden property that in turn drives the cutoff frequency.
@BClark and I decided that it makes more sense for the user to control the cutoff frequency with the slider than the blend factor

@dr.sybren part of the confusion might be that the slider controls a hidden property that in turn drives the cutoff frequency. @BClark and I decided that it makes more sense for the user to control the cutoff frequency with the slider than the blend factor

That does make things confusing, as it's quite natural for a user to expect that a 0%-100% slider maps to a 0-1 factor.
If the user is indeed controlling the cutoff frequency (which also totally makes sense), shouldn't that be what should be displayed in the slider UI?

I think that 'factor' might also be named too vague. It just means 'multiplier', which doesn't say much.

How about this?

  • Move the cutoff frequency to the top of the redo panel, as that's the "primary parameter" being manipulated by the slider.
  • Rename "factor" to something else. I wish Blender had more of the DAW nomenclature, where it would just be a "dry/wet" slider. Maybe "blend" would be a better one? Also it might make more sense to show it as a percentage instead of a factor?
That does make things confusing, as it's quite natural for a user to expect that a 0%-100% slider maps to a 0-1 factor. If the user is indeed controlling the cutoff frequency (which also totally makes sense), shouldn't _that_ be what should be displayed in the slider UI? I think that 'factor' might also be named too vague. It just means 'multiplier', which doesn't say much. How about this? - Move the cutoff frequency to the top of the redo panel, as that's the "primary parameter" being manipulated by the slider. - Rename "factor" to something else. I wish Blender had more of the DAW nomenclature, where it would just be a "dry/wet" slider. Maybe "blend" would be a better one? Also it might make more sense to show it as a percentage instead of a factor?
Member

That was my thought as well... the value we change (cutoff) should be first in the list not factor to indicate it is what we are adjusting first.

Since we just worked on "blend with rest pose" Factor is a blending with/to source fcurve, maybe we can use some of the same kind of language. Blend factor ?

That was my thought as well... the value we change (cutoff) should be first in the list not factor to indicate it is what we are adjusting first. Since we just worked on "blend with rest pose" Factor is a blending with/to source fcurve, maybe we can use some of the same kind of language. Blend factor ?
Author
Member

I've had a look at driving the cutoff frequency directly with the slider
I remembered why I didn't do it:
The slider displays the value 1.0 as 100%
now the max cutoff frequency is frame rate * sample rate
assuming sample rate is 1 and frame rate is 24 that would mean the slider would display the highest value at 2400%
now that conveys no meaning imo.

what we could do is extend the slider to not only display percentages. So the % would be default but it could be any arbitrary unit passed as a string

I've had a look at driving the cutoff frequency directly with the slider I remembered why I didn't do it: The slider displays the value 1.0 as 100% now the max cutoff frequency is `frame rate * sample rate` assuming sample rate is 1 and frame rate is 24 that would mean the slider would display the highest value at 2400% now that conveys no meaning imo. what we could do is extend the slider to not only display percentages. So the % would be default but it could be any arbitrary unit passed as a string

what we could do is extend the slider to not only display percentages. So the % would be default but it could be any arbitrary unit passed as a string

That sounds like a really nice addition to me.

> what we could do is extend the slider to not only display percentages. So the % would be default but it could be any arbitrary unit passed as a string That sounds like a really nice addition to me.
Christoph Lendenfeld force-pushed graph_editor_butterworth from b42d5d2cd6 to 1a10a40a92 2023-06-14 11:13:21 +02:00 Compare
Christoph Lendenfeld added 1 commit 2023-06-14 11:13:33 +02:00
Christoph Lendenfeld added 1 commit 2023-06-14 11:58:53 +02:00
Author
Member

@dr.sybren @BClark I extended the slider to allow setting a unit
looks like this now with the butterworth operator
image

I had to do a small change to the behavior of the slider: The cursor movement it takes to go from min to max slider is now constant no matter the range of the slider. e.g. the -1/1 would have needed more travel than 0/1. not anymore

@dr.sybren @BClark I extended the slider to allow setting a unit looks like this now with the butterworth operator ![image](/attachments/b954d013-9718-431b-9355-cc1f214d1ee6) I had to do a small change to the behavior of the slider: The cursor movement it takes to go from min to max slider is now constant no matter the range of the slider. e.g. the -1/1 would have needed more travel than 0/1. not anymore
3.9 KiB
Christoph Lendenfeld requested review from Sybren A. Stüvel 2023-06-14 12:03:06 +02:00
Christoph Lendenfeld added 1 commit 2023-06-14 12:06:45 +02:00
reorder properties
Some checks failed
buildbot/vexp-code-patch-coordinator Build done.
e8247f36e8
Author
Member

@blender-bot package

@blender-bot package
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR106952) when ready.
Christoph Lendenfeld added 1 commit 2023-06-24 17:45:40 +02:00
Merge branch 'main' into graph_editor_butterworth
Some checks failed
buildbot/vexp-code-patch-coordinator Build done.
f886145da2
Author
Member

@blender-bot package windows

@blender-bot package windows
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR106952) when ready.
Christoph Lendenfeld added 2 commits 2023-06-27 09:55:02 +02:00
Sybren A. Stüvel reviewed 2023-07-03 12:41:51 +02:00
Sybren A. Stüvel left a comment
Member

Much improvement! I like it a lot, thanks.

I have two questions left:

  1. Could you split off the changes to the slider into a separate PR? These deserve a commit of their own.
  2. The Blend In/Out parameter now controls a linear blend between the smoothed and unsmoothed keys, which can cause introduce higher frequencies (because of the sudden change in direction of the curve as shown below). How hard would it be to change this to something like an S-curve?

image

Much improvement! I like it a lot, thanks. I have two questions left: 1. Could you split off the changes to the slider into a separate PR? These deserve a commit of their own. 2. The Blend In/Out parameter now controls a linear blend between the smoothed and unsmoothed keys, which can cause introduce higher frequencies (because of the sudden change in direction of the curve as shown below). How hard would it be to change this to something like an [S-curve](https://en.wikipedia.org/wiki/Sigmoid_function)? ![image](/attachments/02f430eb-0163-416e-9e21-82d93a89860a)
7.0 KiB
Sybren A. Stüvel reviewed 2023-07-03 12:46:11 +02:00
@ -389,0 +503,4 @@
blend_value = blend_out_y;
}
const float x_delta = fcu->bezt[i].vec[1][0] - left_bezt.vec[1][0] + filter_order;

I think that for an S-curve, we'd only need something like blend_in_out_factor = sigmoid(blend_in_out_factor) here.

Of course that would also require a float sigmod(float) function in Blender's math lib ;-)

I think that for an S-curve, we'd only need something like `blend_in_out_factor = sigmoid(blend_in_out_factor)` here. Of course that would also require a `float sigmod(float)` function in Blender's math lib ;-)
Christoph Lendenfeld force-pushed graph_editor_butterworth from 413bb3e8f0 to 14e9d9f0b7 2023-07-06 10:19:59 +02:00 Compare
Christoph Lendenfeld added 2 commits 2023-07-06 10:22:39 +02:00
Christoph Lendenfeld added 1 commit 2023-07-06 14:26:14 +02:00
Christoph Lendenfeld added 1 commit 2023-07-06 14:40:12 +02:00
calculate slope with outer samples
All checks were successful
buildbot/vexp-code-patch-coordinator Build done.
a9e67864d3
Author
Member

@dr.sybren I changed the blend in/out logic to blend to the extrapolated slope of the bounding keys
it creates a nice arc now
and please ignore all these commits in the PR, I made the mistake again of pulling my branch after modifying it on the laptop. This seems to confuse the pull request
I fixed it by force pushing my commit just before the pull

no blend
image

blend of 8
image

@dr.sybren I changed the blend in/out logic to blend to the extrapolated slope of the bounding keys it creates a nice arc now and please ignore all these commits in the PR, I made the mistake again of pulling my branch after modifying it on the laptop. This seems to confuse the pull request I fixed it by force pushing my commit just before the pull no blend ![image](/attachments/c9ccd4f8-61b3-48ee-9705-24018127adf3) blend of 8 ![image](/attachments/e896878c-2251-4046-8aad-9a3e27803190)
Author
Member

@blender-bot package windows

@BClark new build for you with the modified blend behaviour

@blender-bot package windows @BClark new build for you with the modified blend behaviour
Member

Package build started. Download here when ready.

Package build started. [Download here](https://builder.blender.org/download/patch/PR106952) when ready.
Christoph Lendenfeld added 1 commit 2023-07-07 16:10:06 +02:00
Christoph Lendenfeld added 1 commit 2023-07-07 16:13:15 +02:00
Member

Testing the latest build, blending is working well and nicer than the linear, and the results of the smoothing memory is really nice when running it several times in a row. Approve!

Testing the latest build, blending is working well and nicer than the linear, and the results of the smoothing memory is really nice when running it several times in a row. Approve!
Sybren A. Stüvel approved these changes 2023-07-10 16:38:39 +02:00
Sybren A. Stüvel left a comment
Member

LGTM!

LGTM!
Christoph Lendenfeld added 2 commits 2023-07-13 09:05:22 +02:00
Christoph Lendenfeld merged commit 7acd6e61ab into main 2023-07-13 09:10:49 +02:00
Christoph Lendenfeld deleted branch graph_editor_butterworth 2023-07-13 09:10:50 +02:00
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset System
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Code Documentation
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
FBX
Interest
Freestyle
Interest
Geometry Nodes
Interest
glTF
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Viewport & EEVEE
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Asset Browser Project
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Asset System
Module
Core
Module
Development Management
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Module
Viewport & EEVEE
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Severity
High
Severity
Low
Severity
Normal
Severity
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No Assignees
4 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#106952
No description provided.