# How do I move a camera using just part of an exponential interpolation curve?

I have a model of a room containing a 1/10th scale model, containing at 1/100th scale model, containing a 1/1000th scale model.

I move the camera from a start position - looking in through the window of the 'top' room - to the frame before an identical view through the window of the 1/10th model. If I loop this, I get an 'infinite zoom-in'.

(The smaller models are to provide convincing detail through the window. I don't zoom down to them).

To make the camera movement smooth - an apparent 'constant' speed in relation to scale - I need exponential change in speed in X & Z. Of course, the exponential curves in Blender's graph editor don't do this, they only offer an exponential change in displacement.

As a consequence, Blender's exponential interpolation starts 'too fast' and ends 'too slow' to look like a constant speed: The exponential curve in displacement is going from 10X to X, but the velocity is going from N to zero, and I can't see any parameters to adjust this.

I can get an apparently constant velocity (i.e. dropping exponentially from 10xN to N) across a clip by placing the keyframes of the exponential change in position some distance outside the actual loop. However, while this loop then looks fine, I can't then put any action in just before or just after this action, as there's the gap needed either side before the keyframes.

I could animate up to, and then after, these keyframes, then remove the unwanted frames later, but it would be nice if there were a way to adjust the parameters of the exponential curves so this wasn't necessary.

• I've done infinity zoom in past and it was far from perfect for reasons you described. If I had more time I would define the relations of scale and distance mathematically and use drivers. Here's an example of what we're talking about for those confused: done properly, done improperly (if you're perceptive enough, you will see that it changes speed) Commented Dec 2, 2021 at 17:26

This was driving me crazy as well. In my case I needed a camera zoom curve in the form of y=A2^Bx. I couldn't find a solution using interpolation or f curves after 2 days of research.

As a workaround, I used a Python script to create a keyframe for each frame in the sequence, based on the formula I wrote into the script. There are about 20000 frames in my little video, and the presence of >20000 keyframes didn't appear to affect performance in any way, although it did take about 8 seconds to create each set of 10k keyframes.

Below is the script I used. You can copy it into the Text Editor window of the Scripting workspace, tweak it, and then run it. You would need to change the camera name, frame range specified in the for loop, the desired parameter(s) to change, the equation(s), etc.

I am not a Blender or Python expert, but I thought it might help someone to share this method as a concept. Maybe others can chime in with info I didn't think to put in here.

import bpy
for x in range(11401):
bpy.data.objects["CameraClose"].location = (0,0,0.001388887*2**(0.001666667*x))
bpy.data.objects["CameraClose"].keyframe_insert(data_path="location", frame=x)