File: editing.rst

package info (click to toggle)
blender-doc 4.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 253,604 kB
  • sloc: python: 13,030; javascript: 322; makefile: 113; sh: 107
file content (726 lines) | stat: -rw-r--r-- 20,607 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726

*******
Editing
*******

Transform
=========

.. reference::

   :Mode:      Edit Mode
   :Menu:      :menuselection:`Key --> Transform`

An F-Curve can be edited by transforming the locations of its keyframes.

Move, Rotate, Scale
   Like other elements in Blender, keyframes can be
   moved, rotated, and scaled as described in
   :doc:`Basic Transformations </scene_layout/object/editing/transform/introduction>`.
Extend :kbd:`E`
   Lets you quickly move the selected keyframes that are on a certain side of the Playhead.
   This is handy if you need to, say, move all the keyframes after a certain time point to
   the right to make space for new ones.

   To use this operator, first select some or all keyframes and place your mouse cursor to
   the left or right of the Playhead. Then, press :kbd:`E`, move the mouse to move (only)
   the keyframes on that side of the Playhead, and press :kbd:`LMB` to confirm
   (or :kbd:`RMB` to cancel).

.. tip::

   You can also change the *Key Frame* and *Value* properties in
   :menuselection:`Sidebar --> F-Curve --> Active Keyframe` if you want to specify exact numbers.

While transforming keyframes, you can hold :kbd:`Shift` to move them more slowly for
better precision, or :kbd:`Ctrl` to move them in coarse increments.

.. _bpy.ops.graph.snap:

Snap
====

.. reference::

   :Menu:      :menuselection:`Key --> Snap`
   :Shortcut:  :kbd:`Shift-S`

Apart from using the snapping operators in this menu, you can also turn on
:ref:`snapping <bpy.types.ToolSettings.use_snap_anim>` in the header.

Selection to Current Frame
   Set the selected keyframes' time to the current frame.
Selection to Cursor Value
   Set the selected keyframes' value to that of the :ref:`2D Cursor <graph_editor-2d-cursor>`.
Selection to Nearest Frame
   Round the time of each keyframe to the nearest frame.
Selection to Nearest Second
   Round the time of each keyframe to the nearest second. You can use
   :menuselection:`View --> Show Seconds` to show seconds instead of frames
   at the top of the editor.
Selection to Nearest Marker
   Set the time of each keyframe to that of the nearest :doc:`marker </animation/markers>`.
Flatten Handles
   Flatten the *Bézier* handles for the selected keyframes.

   .. list-table:: Flatten Handles snapping example.

      * - .. figure:: /images/editors_graph-editor_fcurves_editing_flatten-handles-1.png

             Before Flatten Handles.

        - .. figure:: /images/editors_graph-editor_fcurves_editing_flatten-handles-2.png

             After Flatten Handles.

.. _bpy.ops.graph.equalize_handles:

Equalize Handles
   Ensure selected keyframes' handles have equal length.

   Side
      Which handles to affect (left, right, or both).
   Handle Length
      Length to make selected keyframes' Bézier handles.
   Flatten
      Make the values of the handles the same as their respective keyframes.

Cursor to Selected :kbd:`Ctrl-G`
   Changes the time and value of the 2D Cursor to the average time and value of the selected keyframes.

.. _bpy.ops.graph.snap_cursor_value:

Cursor Value to Selection
   Changes the value of the 2D Cursor to the average value of the selected keyframes.


.. _bpy.ops.graph.mirror:

Mirror
======

.. reference::

   :Menu:      :menuselection:`Key --> Mirror`
   :Shortcut:  :kbd:`Ctrl-M`

Mirrors the selected keyframes across a reference point.

By Times over Current Frame
   Mirror horizontally across the current frame.
By Values over Cursor Value
   Mirror vertically across the 2D Cursor's value.
By Times over Zero Time
   Mirror horizontally across frame 0.
By Values over Zero Value
   Mirror vertically across value 0.
By Times over First Selected Marker
   Mirror horizontally across the first selected marker.


.. _bpy.ops.graph.frame_jump:

Jump to Selected
================

.. reference::

   :Menu:      :menuselection:`Key --> Jump to Selected`
   :Shortcut:  :kbd:`Ctrl-G`

Places the 2D Cursor at the average time and value of the selected keyframes.


.. _bpy.ops.graph.keyframe_insert:

Insert
======

.. reference::

   :Menu:      :menuselection:`Key --> Insert`
   :Shortcut:  :kbd:`I`

Adds new keyframes and selects them. Previously selected keyframes stay selected too.

All Channels
   Insert a keyframe on all visible and editable F-Curves using each curve's current value.
Only Selected Channels
   Insert a keyframe on the selected F-Curves using each curve's current value.
Only Active F-Curve
   Insert a keyframe on the active F-Curve using the curve's current value.
Active Channels at Cursor
   Insert a keyframe on the active F-Curve at the 2D Cursor's value.
Selected Channels at Cursor
   Insert a keyframe on the selected F-Curves at the 2D Cursor's value.


.. _bpy.ops.graph.copy:
.. _bpy.ops.graph.paste:

Copy/Paste
==========

.. admonition:: Reference

   :Menu:      :menuselection:`Key --> Copy`, :menuselection:`Key --> Paste`
   :Shortcut:  :kbd:`Ctrl-C`, :kbd:`Ctrl-V`

Use :kbd:`Ctrl-C` to copy the selected keyframes and :kbd:`Ctrl-V` to paste them.
After pasting, the :ref:`bpy.ops.screen.redo_last` panel provides some extra options:

Frame Offset
   Offsets the pasted keyframes horizontally so that...

   Frame Start
      ...the first one lands on the current frame.
   Frame End
      ...the last one lands on the current frame.
   Frame Relative
      ...they land at the same distance from the current frame as when they were copied.
   No Offset
      ...they stay at their original frames.

Value Offset
   Offsets the pasted keyframes vertically so that...

   Left Key
      ...the first one has the value of the existing keyframe to the left of the Playhead.
   Right Key
      ...the last one has the value of the existing keyframe to the right of the Playhead.
   Current Frame Value
      ...the first one has the value of the curve at the current frame.
   Cursor Value
      ...the first one has the value of the :ref:`2D Cursor <graph_editor-2d-cursor>`.
   No Offset
      ...they keep their original values.

Type
   Mix
      Integrates the pasted keyframes with existing ones, only overwriting those that share a frame.
   Overwrite All
      Removes all previous keyframes in the target F-Curves.
   Overwrite Range
      Within each F-Curve, remove the existing keyframes that are in the range of the keyframes
      pasted into it.
   Overwrite Entire Range
      Within each F-Curve, remove the existing keyframes that are in the range of all pasted
      keyframes combined.

Flipped
   If you copied keyframes from one or more pairs of
   :doc:`symmetrically opposite bones </animation/armatures/bones/editing/naming>`,
   enabling this option will paste the keyframes of the left bones into the curves of the right ones
   and vice versa. In addition, the values are inverted, effectively mirroring the animation.


.. _bpy.ops.graph.duplicate_move:

Duplicate
=========

.. reference::

   :Menu:      :menuselection:`Key --> Duplicate`
   :Shortcut:  :kbd:`Shift-D`

Duplicates the selected keyframes. You can reposition them by moving the mouse.


.. _bpy.ops.graph.delete:

Delete
======

.. reference::

   :Menu:      :menuselection:`Key --> Delete`
   :Shortcut:  :kbd:`X`, :kbd:`Delete`

Pressing :kbd:`X` or :kbd:`Delete` opens a pop-up menu from where you can delete the selected keyframes.


.. _bpy.ops.graph.handle_type:

Handle Type
===========

.. reference::

   :Menu:      :menuselection:`Key --> Handle Type`
   :Shortcut:  :kbd:`V`

Sets the :ref:`handle type <editors-graph-fcurves-settings-handles>` of the selected keyframes.


.. _bpy.ops.graph.interpolation_type:

Interpolation Mode
==================

.. reference::

   :Menu:      :menuselection:`Key --> Interpolation Mode`
   :Shortcut:  :kbd:`T`

Sets the :ref:`interpolation mode <editors-graph-fcurves-settings-interpolation>` of the selected keyframes.
This determines the curve interpolation between each keyframe and the next.


.. _bpy.ops.graph.easing_type:

Easing Type
===========

.. reference::

   :Menu:      :menuselection:`Key --> Easing Type`
   :Shortcut:  :kbd:`Ctrl-E`

Sets the :ref:`easing mode <editors-graph-fcurves-settings-easing>` of the selected keyframes.
This determines whether easing is applied to the left side, right side, or both sides of the
curve segments between each keyframe and the next.


Density
=======

.. _bpy.ops.graph.decimate:

Decimate
--------

.. reference::

   :Menu:      :menuselection:`Key --> Density --> Decimate (Ratio)`
   :Menu:      :menuselection:`Key --> Density --> Decimate (Allowed Change)`

Simplifies an F-Curve by removing the keyframes that influence its shape the least.

Mode
   How to pick the number of keyframes to delete.

   Ratio
      Deletes a certain percentage of keyframes.

      Remove
         The percentage of keyframes to remove.

   Error Margin
      Deletes as many keyframes as possible while ensuring the F-Curve's shape changes
      no more than a certain amount.

      Max Error Margin
         How much the decimated curve may deviate from the original.


.. _bpy.ops.graph.bake_keys:

Bake Keyframes
--------------

.. reference::

   :Menu:      :menuselection:`Key --> Density --> Bake Keyframes`
   :Shortcut:  :kbd:`Shift-Alt-O`

Creates a keyframe at every frame.

.. seealso::
   :ref:`Bake Channels <bpy.ops.graph.channels_bake>`, which offers options on
   what range to bake and how.

.. list-table::

   * - .. figure:: /images/editors_graph-editor_fcurves_editing_sample.png

          F-Curve before baking.

     - .. figure:: /images/editors_graph-editor_fcurves_editing_sample2.png

          F-Curve after baking.


.. _bpy.ops.graph.clean:

Clean Keyframes
---------------

.. reference::

   :Menu:      :menuselection:`Key --> Density --> Clean Keyframes`
   :Shortcut:  :kbd:`X`

Finds redundant keyframes among the selected ones and deletes them. A keyframe is seen as
redundant if it has the same value as its neighbors -- even if the curve segments around it
aren't flat.

.. tip::

   This operator is likely to change the shape of the affected curves, so it's best run after
   e.g. bulk keyframe insertion on all the bones of an armature (which creates useless keyframes
   on bones that haven't moved) and before tweaking the curves by hand.

Threshold
   Value threshold. By increasing this, you can also delete keyframes that *almost* have the
   same value as their neighbors.

Channels
   Cleans all the keyframes (even unselected ones) in the selected F-Curves.
   If a curve is left with only one keyframe, it's deleted entirely.

.. list-table::

   * - .. figure:: /images/editors_graph-editor_fcurves_editing_clean1.png

          F-Curve before cleaning.

     - .. figure:: /images/editors_graph-editor_fcurves_editing_clean2.png

          F-Curve after cleaning.


Blend
=====

.. reference::

   :Menu:      :menuselection:`Key --> Blend`
   :Shortcut:  :kbd:`Alt-D`

Adjusts the values of the selected keyframes by a certain percentage. Select a blending operator,
move the mouse left or right to adjust the factor, and click :kbd:`LMB` to confirm
(or :kbd:`RMB` to cancel).

Several blending operators work based on "neighboring keyframes." This means that they divide the
selected keyframes into contiguous groups, then reference the unselected keyframes immediately
before and after each group.

.. _bpy.ops.graph.breakdown:

Breakdown
---------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Breakdown`

Sets the value of the selected keyframes to an interpolation of their neighbors.

Factor
   At -1, the keyframes are set to the value of the left neighbor.

   At 1, they're set to the value of the right neighbor.

   For other factors, they're set to an interpolation between the two neighbor values,
   with 0 being right in the middle.


.. _bpy.ops.graph.blend_to_neighbor:

Blend to Neighbor
-----------------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Blend to Neighbor`

Moves each selected keyframe towards the value of the left or right neighbor by a certain percentage.

Blend
   When negative, each keyframe moves *Blend* percent to the value of the left neighbor.

   When positive, they move to the right neighbor.

   When zero, they keep their original values.


.. _bpy.ops.graph.blend_to_default:

Blend to Default Value
----------------------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Blend to Default Value`

Moves the selected keyframes towards the property's default value by a certain percentage.

Factor
   How much to change the keyframes' values, going from 0 (no change) to 1 (reset to the default value).

.. seealso::

   The :ref:`Reset to Default <bpy.ops.ui.reset_default_button>` operator resets
   any property to its default value without the need of keyframing.


.. _bpy.ops.graph.ease:

Ease
----

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Ease`

Makes the selected keyframes follow an S-curve. While the slider is visible (so after activating
the operator but before confirming with :kbd:`LMB`), you can press :kbd:`Tab` to toggle which
of the following settings to edit:

Curve Bend
   A negative value gives more weight to the left side, while a positive value gives more weight
   to the right. A value of 0 results in a balanced curve.

Sharpness
   A low value results in an almost straight diagonal line, while a high value results in a steep
   rise/drop in the curve.

.. _bpy.ops.graph.blend_offset:

Blend Offset
------------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Blend Offset`

Moves the selected keyframes up or down -- all by the same amount -- until the first/last one matches
the left/right neighbor.

Offset Factor
   At -1, the first selected key gets aligned to its left neighbor.

   At 1, the last selected key gets aligned to its right neighbor.

   At 0, nothing changes.


.. _bpy.ops.graph.blend_to_ease:

Blend to Ease
-------------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Blend to Ease`

Blends the selected keys to either an "ease in" or an "ease out" curve.

Blend
   At -1, the keys will follow an "ease in" curve, with small value changes in the beginning
   and large changes towards the end.

   At 1, the keys will follow an "ease out" curve, with large value changes in the beginning
   and small changes towards the end.

   At 0, nothing changes.


.. _bpy.ops.graph.match_slope:

Match Slope
-----------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Match Slope`

Blends the selected keys towards a straight line going through two keys just outside the current selection.

Factor
   Negative values use the two keys to the left of the selection.

   Positive values use the keys to the right.

   At zero, nothing changes.

.. _bpy.ops.graph.push_pull:

Push Pull
---------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Push Pull`

Moves the selected keys towards, or away from, the straight line going through the first and last
selected key.

Factor
   At 0, the keys will lie on the straight line.

   At 1, they keep their original values.

   At 2, each key's value will be twice as far from the straight line as before.

.. _bpy.ops.graph.shear:

Shear Keys
----------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Shear Keys`

Shears the selected keyframes -- that is, changes their value by an amount that increases
as they get further away in time from a reference keyframe. By default, this reference keyframe
is the leftmost selected one, but you can instead use the rightmost one by pressing :kbd:`D`.

Shear Factor
   How much to shear. Negative values move keyframes downwards, while positive ones move them up.
Direction
   Whether to use the leftmost or the rightmost selected keyframe as a reference.


.. _bpy.ops.graph.scale_average:

Scale Average
-------------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Scale Average`

Scales the selected keyframes vertically, using their average value as the pivot.

Factor
   At 0, the keyframes will all have the average value.

   At 1, they keep their original values.

   At 2, each keyframe's value will be twice as far from the average as before.


.. _bpy.ops.graph.scale_from_neighbor:

Scale from Neighbor
-------------------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Scale from Neighbor`

Scales the selected keyframes vertically, using a keyframe just outside the selection as
the pivot. By default, this is the neighbor to the left of the selection,
but you can instead use the right one by pressing :kbd:`D`.

Factor
   The scale factor to apply.
Reference Key
   Whether to use the left or right neighbor as the pivot.


.. _bpy.ops.graph.time_offset:

Time Offset
-----------

.. reference::

   :Menu:      :menuselection:`Key --> Blend --> Time Offset`

Shifts the values of the selected keyframes so that the resulting F-Curve appears to move in time.
Works best with dense keyframes.

As the curve leaves the selected keyframes' time range on one end, it wraps back in on the other,
offset vertically so that the ends connect and there is no jump.

Frame Offset
   By how many frames to shift the F-Curve. The slider is limited to the range -10 ... 10,
   but you can type larger numbers too.


Smooth
======

.. reference::

   :Menu:      :menuselection:`Key --> Smooth`
   :Shortcut:  :kbd:`Alt-S`

.. _bpy.ops.graph.gaussian_smooth:

Smooth (Gaussian)
-----------------

.. reference::

   :Menu:      :menuselection:`Key --> Smooth --> Smooth (Gaussian)`

Smooths the selected keyframes using a Gaussian kernel. Click the menu item, move the mouse left or right to
adjust the strength, and click :kbd:`LMB` to confirm (or :kbd:`RMB` to cancel).

Factor
   How strongly the smoothing should be applied.

Sigma
   The shape of the gaussian distribution. Lower values mean a sharper curve, giving keys that are close to each
   other more weight. A high value behaves like a simple average filter.

Filter Width
   A wider filter looks at more keyframes, producing a smoother result.
   At a width of 1, the filter only looks at the keyframes to the immediate left and right for a weighted average.

.. figure:: /images/editors_graph-editor_gaussian_smooth.jpg

   F-Curve after applying the Gaussian Smooth with the original curve overlayed.


.. _bpy.ops.graph.smooth:

Smooth (Legacy)
---------------

.. reference::

   :Menu:      :menuselection:`Key --> Smooth --> Smooth (Legacy)`
   :Shortcut:  :kbd:`Alt-O`

There is also an option to smooth the selected curves, but beware: its algorithm seems to be
to halve the distance between each keyframe and the average linear value of the curve,
which gives quite a strong smoothing! Note that the first and last keys
seem to be never modified by this tool.

.. list-table::

   * - .. figure:: /images/editors_graph-editor_fcurves_editing_clean1.png

          F-Curve before smoothing.

     - .. figure:: /images/editors_graph-editor_fcurves_editing_smooth.png

          F-Curve after smoothing.


Butterworth Smooth
------------------

.. reference::

   :Menu:      :menuselection:`Key --> Smooth --> Butterworth Smooth`

Smooth the selected keyframes using a Butterworth filter. Click the menu item,
move the mouse left or right to adjust the frequency,
and click :kbd:`LMB` to confirm (or :kbd:`RMB` to cancel).

This filter is ideal for smoothing large amounts of data because it preserves the peaks
of the animation. The downside is that it can introduce a ripple effect when the key
values change rapidly.

Frequency Cutoff
   The lower the value, the smoother the curve. There is an implicit maximum at which
   the value no longer changes the curve, which is at half the sample rate. The sample
   rate in this case is the scene frame rate multiplied by the **Samples per Frame** of this operator.
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 keys are on subframes, e.g. a 60fps file in a 30fps scene,
   increase this value to 2.
Blend
   A value between 0 and 1 for blending between the original curve and the smoothed one.
Blend In/Out
   The number of frames at the start and end for which to blend between the original and smoothed curve.
   This can help reduce jumps in the animation at the selection border. At value 1, it only locks the first and
   last frames of the selection to their original values.