I have a scene with a completely featureless world (no HDRI, and black or transparent colour, no lighting)
We’re in camera view.
In my field of view are 10 objects, scattered on an invisible plane… some objects are close to the camera, others far away.
These will be rendered purely as wireframe or Freestyle outlines, so lighting and shading is not an issue.
Now, i create a camera track where i move into the scene. So, our “cameraman” approaches the objects and they disappear as he moves past them. I do this either with fly navigation or alternatively by just navigating the scene with “lock camera to view” enabled.
Now, viewing the animation, we can say we’re moving through a scene of fixed objects.
But there’s another way to interpret what we’re seeing. Which is that our camera is in a fixed position and the objects are actually moving. The end result (visually) is the same.
Sooooooooo, my question is, is there any way in Blender to achieve this? So, i mean, one navigates a scene from the camera’s point of view in the normal ways, but if i look at the camera’s rotation and location coordinates, they all stay unchanged, and it’s the objects that actually acquire the transformations?
“Why on earth would one need to do this” i hear you cry? Well, for mograph kinda stuff, it might make some things easier to do if the camera always stays in a fixed position.
Anyone have any suggestions or ideas about this?
IIUC, the simplest way would be to parent all the non-camera objects to an empty and animate that. This wouldn’t achieve “one navigates a scene from the camera’s point of view in the normal ways”, but I doubt that’s possible for this.
What you’re talking about is making an inverse of the camera transform. Yes, you can do that.
Create an empty. Give it a “copy transforms” constraint, world->world, targeting your camera.
Create another empty. Parent it to your other empty. Give it limit rotation, limit location, limit scale (if necessary), all world-space, all set to 0->0.
Using “bake action”, bake your child empty’s animation. Set it to “visual keying” and “clear constraints”.
Now unparent your child empty. It contains the inverse of the camera transform. You can parent your other objects to this empty and delete your camera’s animation, leaving it at the world origin.
Note that this is not a good thing to do in general. You’ll see that even a simple camera animation will end up creating inverse frames for every single frame of the animation. All of these frames are likely to be necessary.
That’s the general technique, but I should make it clear I didn’t test it, that’s just theory.
@Bandages, nice, i’m gonna test that.
What is was actually hoping for, but i guess is impossible, was a way to do “normal” viewport camera navigation, but when you examine your camera’s and object’s location and rotation, you find that actually your camera didn’t move, but all your objects did.
Maybe a future version of Blender could implement this “Einsteinian camera mode”?!
Actually i found another way to do a static invert, which is:
First, for each of your objects, make them a “child of” (“object constrain properties” tab) the camera and select “Set Inverse”.
Now move the camera to wherever you want. (it’s funny to do this with two 3d layout windows open, one showing camera view, which doesn’t change at all when you do this!).
Last step is (for each object) to do: object > apply > visual transform, then delete each object’s “child of” constraint.
@Bandages, unless i misunderstood, what you suggested achieves the same thing in another way, right?
What you’re proposing doesn’t handle an animated camera. From your reply, it doesn’t sound like I understood what you’re after very well.
For something static, where you don’t even want the inverse, you don’t even need a child of. You can parent, and then unparent->keep transform.