Jump to: Board index » General » Fusion

Camera Shake and Advanced Camera Shake

Learn about 3D compositing, animation, broadcast design and VFX workflows.
  • Author
  • Message
Offline

Ignacio de La Cierva

  • Posts: 163
  • Joined: Tue Apr 26, 2016 12:20 pm

Camera Shake and Advanced Camera Shake

PostFri May 05, 2017 7:08 pm

Hi

I was testing these two tools, as they might be faster than using perturb or shake modifiers to camera animation, as usual.

I mean the "Camera Shake", tool in the transforms group of tools, and the "Advanced Camera Shake.setting" that comes in the "tools"group of the Bins menu. They must be there for some reason, I thought. That's what I was trying to learn.


I've spent a while trying to figure how to use it. Not a word in the manuals.

The only flow connection accepted is from the "Camera Shake" tool output to the scene.input of my existing camera, but that givers weird results.

¿Any example of use of these tools?

Thanks!
Offline

Sander de Regt

  • Posts: 3584
  • Joined: Thu Nov 13, 2014 10:09 pm

Re: Camera Shake and Advanced Camera Shake

PostFri May 05, 2017 9:21 pm

On page 639 of the manual starts a 3 page explanation of all the options in the Camera Shake tool.
You can find it by hovering over the tool and pressing F1. It will jump to (almost) the correct page in the manual.

As for the Advanced Camera Shake, it's a 'bonus' feature that's included in the bins to get you started.
It only takes the input, because that's all it needs.

Technically it's a macro with some pretty advanced functions that have been hidden from the end-user to make it more user friendly. Just move the sliders around and see what they do. It's - like the name suggests - pretty advanced and gives a more natural effect than just adding a shake to the x/y of a Transform tool.

Internally it looks like this:

Code: Select all
{
   Tools = ordered() {
      AdvancedCameraShake_1 = MacroOperator {
         CtrlWZoom = false,
         Inputs = ordered() {
            Comments = Input { Value = "Camera Shake tool which gives you more natural effect. Has all the transform controlls you need for correct shaking\r\n\r\nby Gregory Chalenko\r\nwww.compositing.ru", },
            MainInput1 = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "Input",
            },
            Magnitude = InstanceInput {
               SourceOp = "Expression_1",
               Source = "n1",
               Name = "Overall Magnitude",
               Default = 0.5,
            },
            ShakeAspect = InstanceInput {
               SourceOp = "Expression_1",
               Source = "n3",
               Default = 1,
            },
            PrimRandomize = InstanceInput {
               SourceOp = "Shake1_1",
               Source = "Randomize",
            },
            PrimRandomSeed = InstanceInput {
               SourceOp = "Shake1_1",
               Source = "RandomSeed",
               Name = "Primary Shake Random Seed",
               Default = 0,
            },
            PrimSmoothness = InstanceInput {
               SourceOp = "Shake1_1",
               Source = "Smoothness",
               Name = "Primary Shake Smoothness",
               Default = 1,
            },
            PrimModMax = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "PrimModMax",
               Name = "Shake Modulation Max",
               ControlGroup = 4,
            },
            PrimModMin = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "PrimModMin",
               Name = "Shake Modulation Min",
               ControlGroup = 4,
            },
            ModRandomize = InstanceInput {
               SourceOp = "Shake2_1",
               Source = "Randomize",
            },
            ModRandomSeed = InstanceInput {
               SourceOp = "Shake2_1",
               Source = "RandomSeed",
               Name = "Modulation Random Seed",
               Default = 0,
            },
            ModSmoothness = InstanceInput {
               SourceOp = "Shake2_1",
               Source = "Smoothness",
               Name = "Modulation Smoothness",
            },
            FlipHoriz = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "FlipHoriz",
               Name = "Flip Horizontally",
               Page = "Transform",
            },
            FlipVert = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "FlipVert",
               Name = "Flip Vertically",
               Default = 0,
            },
            Edges = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "Edges",
               Default = 0,
            },
            Center = InstanceInput {
               SourceOp = "Expression_1",
               Source = "p2",
               Name = "Center",
            },
            Pivot = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "Pivot",
            },
            UseSizeAndAspect = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "UseSizeAndAspect",
               Default = 1,
            },
            Size = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "Size",
               Default = 1.05,
            },
            Aspect = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "Aspect",
               Default = 1,
            },
            XSize = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "XSize",
               Default = 1.05,
            },
            YSize = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "YSize",
               Default = 1.05,
            },
            Angle = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "Angle",
               Default = 0,
            },
            FilterMethod = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "FilterMethod",
               Default = 2,
            },
            WindowMethod = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "WindowMethod",
               Default = 0,
            },
            InvertTransform = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "InvertTransform",
            },
            FlattenTransform = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "FlattenTransform",
            },
            Blend = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "Blend",
               Page = "Common Controls",
               Default = 1,
            },
            ProcessWhenBlendIs00 = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "ProcessWhenBlendIs00",
               Default = 0,
            },
            Red = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "ProcessRed",
               Name = "Red",
               Default = 1,
            },
            Green = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "ProcessGreen",
               Name = "Green",
               Default = 1,
            },
            Blue = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "ProcessBlue",
               Name = "Blue",
               Default = 1,
            },
            Alpha = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "ProcessAlpha",
               Name = "Alpha",
               Default = 1,
            },
            ApplyMaskInverted = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "ApplyMaskInverted",
               Default = 0,
            },
            MultiplyByMask = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "MultiplyByMask",
               Default = 0,
            },
            MaskChannel = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "MaskChannel",
               Default = 3,
            },
            MaskHigh = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "MaskHigh",
               ControlGroup = 29,
               Default = 1,
            },
            MaskLow = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "MaskLow",
               ControlGroup = 29,
               Default = 0,
            },
            MotionBlur = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "MotionBlur",
               Default = 1,
            },
            Quality = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "Quality",
               Default = 3,
            },
            ShutterAngle = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "ShutterAngle",
               Default = 90,
            },
            CenterBias = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "CenterBias",
               Default = 0,
            },
            SampleSpread = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "SampleSpread",
               Default = 1,
            },
            EffectMask = InstanceInput {
               SourceOp = "Xf_Shake_1",
               Source = "EffectMask",
            }
         },
         Outputs = {
            MainOutput1 = InstanceOutput {
               SourceOp = "Xf_Shake_1",
               Source = "Output",
            }
         },
         ViewInfo = GroupInfo { Pos = { 362, 43 } },
         Tools = ordered() {
            Xf_Shake_1 = Transform {
               CtrlWZoom = false,
               CtrlWShown = false,
               NameSet = true,
               Inputs = {
                  MotionBlur = Input { Value = 1, },
                  Center = Input {
                     SourceOp = "Expression_1",
                     Source = "PointResult",
                  },
                  Size = Input { Value = 1.05, },
                  ReferenceSize = Input { Value = 1, },
               },
               ViewInfo = OperatorInfo { Pos = { 0, 10.15 } },
               Colors = {
                  TileColor = { R = 0.545098039215686, G = 0.349019607843137, B = 0.368627450980392 },
                  TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216 },
               },
               UserControls = ordered() {
                  PrimModMax = {
                     IC_ControlGroup = 3,
                     LINKID_DataType = "Number",
                     INPID_InputControl = "RangeControl",
                     IC_ControlID = 1,
                     IC_ControlPage = 0,
                     INP_Default = 1,
                     LINKS_Name = "Modulation Maximum",
                  },
                  PrimModMin = {
                     LINKS_Name = "Modulation Minimum",
                     INPID_InputControl = "RangeControl",
                     IC_ControlID = 0,
                     IC_ControlPage = 0,
                     LINKID_DataType = "Number",
                     IC_ControlGroup = 3,
                  }
               }
            },
            Expression_1 = Expression {
               CtrlWZoom = false,
               CtrlWShown = false,
               Inputs = {
                  p1 = Input {
                     SourceOp = "Shake1_1",
                     Source = "Position",
                  },
                  n1 = Input { Value = 0.5, },
                  n2 = Input {
                     SourceOp = "Shake2_1",
                     Source = "X",
                  },
                  n3 = Input { Value = 1, },
                  n4 = Input {
                     Value = 2,
                     Expression = "Xf_Shake_1.Input.Width*Xf_Shake_1.Input.XScale/Xf_Shake_1.Input.Height/Xf_Shake_1.Input.YScale",
                  },
                  PointExpressionX = Input { Value = "p1x*n1*n2+p2x", },
                  PointExpressionY = Input { Value = "p1y*n1*n2*n3*n4+p2y", },
                  NumberControls = Input { Value = 1, },
                  NameforNumber1 = Input { Value = "Magnitude", },
                  NameforNumber2 = Input { Value = "Secondary Shake", },
                  NameforNumber3 = Input { Value = "Shake Aspect", },
                  NameforNumber4 = Input { Value = "Image Aspect", },
                  PointControls = Input { Value = 1, },
                  NameforPoint1 = Input { Value = "Shake", },
                  NameforPoint2 = Input { Value = "Offset", },
               },
            },
            Shake1_1 = Shake {
               CtrlWZoom = false,
               CtrlWShown = false,
               Inputs = {
                  Smoothness = Input { Value = 1, },
                  XMinimum = Input { Value = -0.05, },
                  XMaximum = Input { Value = 0.05, },
               },
            },
            Shake2_1 = Shake {
               CtrlWZoom = false,
               CtrlWShown = false,
               Inputs = {
                  Smoothness = Input { Value = 5, },
                  XMinimum = Input { Expression = "Xf_Shake_1.PrimModMin", },
                  XMaximum = Input { Expression = "Xf_Shake_1.PrimModMax", },
               },
            }
         },
         Colors = {
            TileColor = { R = 0.552941176470588, G = 0.356862745098039, B = 0.376470588235294 },
            TextColor = { R = 0.862745098039216, G = 0.862745098039216, B = 0.862745098039216 },
         }
      }
   },
   ActiveTool = "AdvancedCameraShake_1"
}



It is also important to remember that these are 2D effects, so they shake the pixel of the image, they are not 3D cameras.
Sander de Regt

ShadowMaker SdR
The Netherlands
Offline

Ignacio de La Cierva

  • Posts: 163
  • Joined: Tue Apr 26, 2016 12:20 pm

Re: Camera Shake and Advanced Camera Shake

PostFri May 05, 2017 10:42 pm

Hello again and thank you again for your answer, Sander.

I found and read those three pages from the Tool Manual. Yes, it describes the tool's parameters, but gives no clue about how to connect it to the camera. Now I realize why: it's not a 3D tool but a 2D bitmap-based effect.

:oops: :oops:
Offline
User avatar

Paul R. Williams

  • Posts: 96
  • Joined: Fri Mar 21, 2014 10:51 am
  • Location: Frankfurt am Main, Germany

Re: Camera Shake and Advanced Camera Shake

PostTue Feb 15, 2022 2:00 pm

The AdvancedCameraShake generates a small controlled random XY movement. The control exhibits as a 2D Transform and can be inserted where a Transform node would normally be applied. The macro/control assumes that it is transforming a full-size image and therefore applies a small zoom magnification of 1.05 to avoid borders appearing when the shake is applied. See the Size parameter on the Transform tab in the Inspector. The amount of the effect can be controlled by the Overall Magnitude setting on the Controls tab.

Hope this helps.
Paul R. Williams
    BMPC4K, URSA EF 4K, URSA Mini Pro 4.6K (EF/PL), BMPCC 6K Pro
    SanDisk SSDs & Lexar CFast & Samsung T5 & T7
    SmallRig rigging elements
    iMacPro (2017) 3.2 GHz Intel Xeon W/32 GB/Radeon Pro Vega 64 16 GB
Offline

Sander de Regt

  • Posts: 3584
  • Joined: Thu Nov 13, 2014 10:09 pm

Re: Camera Shake and Advanced Camera Shake

PostTue Feb 15, 2022 2:04 pm

Since the last post was from 2017 there's a good chance the OP has moved on from his original question, Paul, but still your input is appreciated! ;)
Sander de Regt

ShadowMaker SdR
The Netherlands

Return to Fusion

Who is online

Users browsing this forum: No registered users and 84 guests