Skip to content

Instantly share code, notes, and snippets.

@Panakotta00
Last active November 18, 2023 13:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Panakotta00/682094e5b757baab59696589ba1fd924 to your computer and use it in GitHub Desktop.
Save Panakotta00/682094e5b757baab59696589ba1fd924 to your computer and use it in GitHub Desktop.
FicsIt-Cam Documentation

1. Termology

First, let's talk about termology.

  • Animation: Refers the atomated camera movement scenes you create with the animation editor. Such a animation consists of multiple attributes that define how the camera of general animation should behave when you play the animation. Such a animation also has one major timeline.
  • Timeline: The timeline is simply the "progression" of your animation over time. The Timeline is split into frames, has a start frame and a end frame aswell as a timeline framerate (fps).
  • Frame: A frame is a qunantized time increment on the timeline. We have to quantize the timeline to be able to reasonably refer to single frames. F.e. You can define your camera is position at a given location at a specific frame. Because it is quantized, you can have a value at f.e. Frame 1 and a different value at frame 2. You can not place any other values in between those because this is the min. time increment you have. It makes the the experience of aligning keyframes on your timeline way less trouble some.
  • Timeline Framerate: The timeline frame-rate defines how many frames pass within a second of real time on the timeline. F.e. a frame rate of 60 fps means, your frames are 16,6s appart from each other. The timeline frame-rate mainly defines how fast your animation is going in the end, so it doesnt affect quality when you just playback the animation witht the /fic play command, but it defines how many images are actually taken in a second when you use the /fic render command, so if you want to have a higher-quality animation with the render command, make sure your fps is actually high enough.
  • Keyframe: A keyframe defines what value a given property/attribute should have at specific point in time. F.e. you want to say that your camera is located 10m above in the air, at 30 frames into the animation. Such a keyframe also can have different interpolation types describing how the values for the property are calculated inbetween keyframes. This also includes additional infromation like control points for these calculations.
  • Attribute: A Attribute is a value or group of values of a object (like the camera) that can change over time and you can control them. Such a attribute essentially contains multiple keyframes describing how a single value changes over time in your animation. F.e. you have the x-coordinate attribute allowing you to describe how the x-coordinate of the position of the camera changes over time, or how your FOV changes over time.
  • Current/Active Value: The active value of an attribute, is the current value of an attribute that is shown in the viewport and detail panels. When you change the active value, the viewport etc will change accordingly (and vice versa). This value will be overwrite when you now scrub the timeline with the interpolated or keyframe values! So when a attribute has any keyframe, and you change the active value, you probably want to save it as a keyframe otherwise the next time you scrub your timeline the value will be lost.
  • Interpolation: Interpolation is the process of figuring out how values should behave in-between two keyframes. Imagine you have at frame 1 a keyframe with value 1 and at frame 10 a keyframe of value 10, what value should the attribute have at frame 5? This question will be answered by the choosen interpolation. The linear interpolation would answer the question with 5.
  • Camera: The camera describes the imaginary object that represents the location, rotation, etc. of the view in the 3D world that will be used. This doesn't necesserly have to be what is shown on screen. The animation camera can be sepperate from the view you are looking from.
  • View: The view is what is actually shown to you. It is not the thing that is animated, the camera is animated. Not your view. But, often, your view is attached to the camera, so you can actually preview what the camera sees.
  • Animation Editor: The animation editor is the UI that opens when you use the !fic edit command that allows you to edit your animations.
  • Cinematic Camera: A cinematic camera is a special kind of camera that enables some more features like Depth-Of-Field. Generally a Cinematic Camera looks more fancy, but is way more expensive. So if you dont need Depth-Of-Field or other stuff, deactivate the cinematic camera because this might cause for poor performance when using the /fic play command. When using the /fic render command it will be accounted for the poor performance so the game will essentially slow down so you render your animation in the fully given FPS without any performance issues visible in the final rendered animation.
  • Play/Preview an Animation: This happens if you use the !fic play command to essentially play a animation in full game-screen. The FPS of the animation are used as reference on how fast the attributes values should change. This will try to give you the most fps as possible. So your animation might have a set 30fps but your game actually renders with 120fps. That means the time between two animation frames and two game frames are different, but stuff will be interpolated so you wont really notice that they dont match. You usually want to play a animation if you want to do a quick recording with OBS or stream it live.
  • Render: Rendering a animation is the process of playing a camera animation and saving it as image sequence. When the animation renders, every game frame will be exactly one animation frame, this means even when you use a cinematic camera and your game would render with 20fps, the rendering will essentially pause the game and wait for a frame to finish render, it will then continue the game till the next frame is reached. The amount of time that passes when rendering might be 10min, but the rendered video will only be 5min, as well as how much time has passed in game (5min). This means you will be able to create beautiful animations, studder free. But since it essentially pauses the game, this feature can not be used in multiplayer.
  • Timelapse: The timelapse is something different entirely. You can place a timelapse camera at some point in the world. You can tell it how much time will pass between images taken. When you the start the timelapse camera, it will take image with the view of the timelapse camera every what so ever seconds you have choosen, and stores the image as file. You can simply play the game without having to care or even noticing the timelapse camera to run.
  • Current/Active Frame: The active frame is the frame in the timeline that is currently shown in the viewport and detail panels.
  • Current/Active Range: This is a timerange of the animation that is shown in the graph view, this simply allows you to focus on a section of your camera animation instead of the whole animation at once, this makes it usefule especially when working with longer animations.
  • Timeline Scrubbing: This is the action of moving the active frame around to preview the camera at differnt points in time.

2. Image Sequences

You may have noticed that the rendering feature and the timelapse feature create image sequences. A image sequence is nothing more than a numbered list of image files. (frame01.jpg, frame02.jpg, frame03.jpg, ...) Most video editing software automatically detects a image sequence when importing the first image and shows it as video. If that is the case, make sure it imports it with the correct frame-rate.

Alternatively you could use FFmpeg to convert a image squence into a video clip.

Image-Squences are stored at %localappdata%\FactoryGame\Saved\SaveGames\FicsItCam\<Animation Name>. Timelapse cameras will have the "-Timelapse" Suffix.

3. Timelapse

With the /fic timelapse create <camera name> <seconds per frame> command you can create a new timelapse camera with the transformation of your current view. You can use mods like Pak Utillities to fly around and position your camera accordingly.

You list all timelapse cameras with the /fic timelapse command.

Teleporting the player to a timelapse cameras location and rotation is possible with the /fic timelapse tp <camera name> command.

To remove a timelapse camera use the /fic timelapse delete <camera name>.

The camera wont record just now. For this, you have to start the timelapse camera with the /fic timelapse start <camera name> command. When the timelapse camera is started, it will begin to take images every x seconds you have choosen and slowely creates a image sequence. The image sequence will be (inside the folder) have a time-stamp prefix of when you have started the timelapse camera and followed by an incrementing number.

To stop/pause a timelapse camera you can use the /fic timelapse stop <camera name> command.

Make sure you stop the timelapse camera when you don't need it anymore! Otherwise it will constantly create image files and slowely fill your drive!

4. Animations

You can use the /fic create <animation> command to create a new camera animation.

Use the /fic list command to list all animations you have already created and you can use the /fic delete <animation> command to remove a camera animation.

4.1 Play/Preview Animation

You can use the /fic play <animation> command to play the camera animation in real time in the game.

When this happens, FIC will take full control of your inputs and disables them. You can then have a look and watch the camera animation rolling. If you want to stop the animation play/preview, you can press C on the keyboard to cancel the preview.

This preview also works in a multiplayer session, the clients wont really notice anything happening, which makes it ideal for event live-streams.

Notice that you should not use the cinematic camera when using this mode if you dont need it. The cinematic camera is activated by default and allows you to have depth-of-field capabilities. This camera type will drain preformance quite a bit compared to the non-cinematic camera.

4.2 Render Animation

You can "render" a animation with the /fic render <animation> command.

The rendering state behaves similar to play/preview but it syncs the game simulation time with the animation time and additionally creates image files. This means, even when you use the cinematic camera and your game renders with 20fps, and your animation is set to render with 60fps, the game simulation will run with 60fps. With that, relative to the actual real time, the game runs "slower". This is good because that means, everytime the renderer takes a image, it will be within the 60fps relative to the game. With this you can create studder free, high quality renderings of the game.

Images will be takes with the resolution you can set per animation with the animation editor and they will be stored as image sequence with incrementing numbers.

5. Animation Creation/Editing - Animation Editor

To edit animations you will use the animation editor. To open it, use the /fic edit <animation> command to open the animation editor for the given camera animation.

The animation editor will take full control over the game inputs and you wont be able to play the game like you are used to.

You can press the G to enable/disable the mouse cursor. When it is disabled, the viewport will be focused and in doing so you can look around with your mouse and move around with your normal satisfactory movement controls.

5.1 Panels

The editor is split into multiple different sections/panels.

Some of the split bars can moved and aligned for a better overlay:

  • Viewport: The viewport is the actual game panel were you can see the game world. It will show the view and not the camera, the view can be detached from the actual animated camera (only in editor). When you click on it, the viewport will be focused and captures all input. Refer to the "Viewport" section to learn more what you can do.

  • Details Panel: The details panel allows you to view and edit all attributes of the camera (refer section "camea attributes") and additionally allows you to change some animation settings (refer section "animation settings") as well as some settings for the editor (refer section "editor settings")

  • Timeline Panel: The timeline panel allows you to controll the timeline of the animation, change the length/range of the animation, change the active frame and view the progression of attribute values over time.

  • Timeline Details: The timeline details section allows you to view/change the animation duration/range (animation start & animation end), the active range and the current/active frame as numeric values. In addition it contains a a tree-view allowing you to define which attributes are shown in the graph view.

  • Timeline Scrubber: This timeline scrubber allows you to change the active time range as well as the active/current frame. The upper row is the range slider allowing you to see what range of time of the animation the graph view currently shows. It has two handles which you can move freely around, or you click into the center and drag the whole range around. A single click (without drag) allows you to set the active frame to the frame you clicked. The lower row highlights the animation time range and just shows the active range that is shown in the graph viewer. This allows you to control the active frame more precise (we are considering to show some more information there later on). You can either just click or drag to move the active frame.

  • Graph Viewer: The graph viewer allows you to have a visualization of how a attribute value changes over time in the animation. In addition it allows you to change the keyframes. (refer section "graph viewer")

5.2 Viewport

The viewport (aka. Game-Viewport/Game-View) shows the current view. Not the camera! As already mentioned, the current view may be different from what the camera sees. But the view (and so our viewport) usually is attached to the camera (learn more about it in the "lock camera to view section" of the "editor settings" section).

When the viewport is focused, all input is captured including your mouse. You can focus the viewport by simply clicking on it, or by pressing the "toggle cursor" key (default: G). You can remove the focus from the viewport be pressing the key again. By removing the focus from the viewport, the mouse cursor will be shown and active again.

While the viewport is focused you can use your typical game inputs to fly around. Additionally you can use the default Q and E keys, to roll the camera. (Rolling over 90° is sadly not possible using this technique, but you can do so by manually changing the roll rotation in the details panel)

You can increase or decrease the movement speed by holding the control key and scrolling with your mouse wheel. (You can even get to the point of no movement). Additionally you can hold the left shift key to double your movement speed temporarly.

When you press and hold the left shift and control keys down, you can scroll your mouse wheel to change the Field-Of-View, effectively Zooming your view.

Moving the mouse wheel without pressing any modifier keys allows you to scrub the the timeline.

When the viewport is not focused, then you can press and hold the right mouse button to just focus the viewport till you release the right mouse button again, then the focus will be removed from the viewport again, allowing you to make quick fine adjustments.

5.3 Attributes

These attributes define how the camera behaves over time in the animation.

Attributes can be group to allows controling a whole patch of attributes at once. f.e. A Position group consisting of the X-, Y- and Z-Coordinate Attributes of the camera.

A attribute has multiple keyframes which describe what value the attribute should have at a given exact frame. It additonally holds data for interpolation like interpolation types and control values.

Values between keyframes are interpolated by algorithms defined in the keyframes before and after the frame in question.

A attribute also has a active value which is the value currently used for visualization in the viewport. When this value diviates from the keyframe value of interpolated value, the value will be lost when scrubbing the timeline. So if you change it, make sure you store it as keyframe (if you actually want that).

5.3.1 Keyframe Control

The keyframe controls are located next to an attribute or group and visualize the state of the attribute or group. They look like colored diamonds.

  • Double click the control to remove all keyframes of the attribute.
  • A single click will create or remove a keyframe at the active frame.
  • Right-Clicking it will cause a context-menu to appear which allows you to change settings of the keyframe, like which interpolation type should be used.

The keyframe control can have different styles:

  • The attribute has keyframes, but the active frame is a interpolated value
  • The attribte has a keyframe at the active frame and the active value is exactly the value of the keyframe (no value diviation)
  • The attribute has a keyframe at the active frame and the active value is different from the value of the keyframe (value diviation)
  • The attribute has no keyframes

For more information on interpolation types, refer ther "interpolation" section.

5.3.2 Camera Attributes

The camera has follwing groups and single attributes you can animate:

  • All Keyframes
    • Position
      • X
      • Y
      • Z
    • Rotation
      • Pitch
      • Yaw
      • Roll
    • FOV (Field-Of-View)
    • Aperture (Needed for Depth-Of-Field)
    • Focus Distance (Needed for Depth-Of-Field)

5.4 Animation Settings

Animations Settings are all kinds of additional settings a animation can have, which are not animateable (which are no attributes).

5.4.1 Cinematic Camera

As already often mentioned, the cinematic camera is a high quality camera that allows you to make use of depth-of-field. This check allows you to enable/disable (default: enabled) the use of the cinematic camera instead of the default camera.

Be aware that using the cinematic camera will take quite some performance, so it will probably cause a low framerate when using it with the /fic play command. Instead maybe use the /fic render which is unfaced by that.

5.4.2 Bullet Time

This check essentially allows you to freeze time (the game simulation) while the animation is playing or you are in the editor.

5.4.3 FPS

This setting simply allows you to change how many frames pass in second of playing the animation. Higher value means more frames pass in one second.

This setting is close to irrelevant when using the /fic play command, because it will try to play the animation with the highest frame rate as possible, but keep the animation playing at a constant speed. The setting here would essentially allows you to change the overall speed of you animation.

The setting is more relevant for the /fic render command, because this also describes how many images per second will be taken. So you often might want to increase the setting to like 60fps to have a higher frame rate in your final rendered animation.

5.4.4 Resolution

This setting is only relevant when you use the /fic render command, it simply describes the image resolution in which the animation will be rendered and exported.

5.4.5 Sensor Size

The sensor size is relevant for mainly the use of the cinematic camera and depth-of-field.

5.5 Editor Settings

Editor settings are the settings that are only relevent when you edit a animation. These settings are not stored and exist only within one editor session.

5.5.1 Lock Viewport Camera

Default: Enabled

This setting essentally forces your view to be the same as the camera. When it is checked, and you move around in the viewport, the cameras transformation will change too. If it is not checked, the camera can have a different transformation as your view.

When this settings is activated and you scrub the timeline, your view will snap to the attribute values of the camera.

5.5.2 Show Camera Path

Default: Enabled

If this setting is enabled, the camera path and the camera will be visualized in the 3D world.

  • Yellow points represent a frame where any attribute has a keyframe.
  • Blue points represent individual frames, this essentially allows you to see, depending on the density of blue dots, how fast the camera will move.
  • Red lines represent the connection between frames allowsing you see from which frame the camera moves to which other frame.
  • The green box and arrow visualize the camera its rotation and direction (especially useful when you disable "lock viewport camera" and have a look at the camera path from afar

5.5.3 Auto Keyframe

When this setting is enabled, any changes in the active values of any attribute will directly cause the creation/change of a keyframe for that attribute.

This is super useful for the inital kreation of a camera path animation, but it will be troublesome if you have it activated when you make fine adjustments i think.

5.5.4 Force Resoultion

This will essentially force the viewport to use the resolution (or aspect ratio) of the animations resolution setting. It will cause the appearance of black bars forcing the viewport into it.

5.6 Graph Viewer

The graph viewer allows you to have a look at the attribute values and how they change over time.

On the left in the timeline details panel, there is a tree view which allows you to descide which attributes should be shown in the graph view.

It represents a Time-Value-Diagram, the X-Axis is the timeflow and the Y-Axis is the Attribute Value.

You can double-click on a attributes graph to create a keyframe at that point.

You can right click the empty space of the graph view to get a context-menu which allows you to let the view try to fit all keyframes onto the screen, so you can see the whole animations graph.

If you just simply click on a keyframe, you remove the keyframe.

5.6.1 Panning/Zoom

Pressing and holding down the right mouse button in an empty space of the graph viewer, allows you to pan the graph view around. Additionally holding shift while doing so, allows you to only pan the Value-Axis, while holding control allows you to only pan the Time-Axis.

Scrolling/Moving the mouse wheel while holding the control key, allows you to zoom in the graph view. If you hold shift instead you can zoom only the Time-Axis, while holding the Alt-Key allows you to only zoom the Value-Axis.

5.6.2 Moving Keyframes/Handles

You can move keyframes and the ease-interpolation-handles by simply click and holding them. Then you can move your cursor around and the keyframe will move to the place.

You can hold shift to only move them on the Value-Axis, or hold control to only move them on the Time-Axis.

When you move a handle, the keyframe will from now on ignore auto-calculated handles and stay with your setting. To change a keyframe back to use the automatically calculated handles, simply Right-Click the keyframe control and change the interpolation type to one of the ease-tyes. The handles will move both at the same time, the keyframes sub-interpolation type is "ease-mirrored". This way you can ensure a smooth transition between two splines. (sections between two keyframes)

5.7 Interpolation

FicsIt-Cam supports multiple different interpolation types that use differnt algorithms to "predict" the attribute values between two keyframes.

When we talk about the "active/current keyframe" we mean the keyframe in question we want to look at what its interpolation settings do to the attribute values.

The graphs bellow represent a "Time-Value-Diagramm" showing on the X-Axis you have the progression of time, and on the Y-Axis the value of the attribute.

5.7.1 Step-Interpolation

Step interpolation is the easiest of all. The value between the active keyframe and the next keyframe will stay at the value of the active keyframe till we reach the next keyframe. At the next keyframe the value will directly jump to the value of the next keyframe within one frame. (the small slope is visible because this is the space between two frames and the line drawer is quantaized to the frames)

5.7.2 Linear-Interpolation

Linear Interpolation is the second easiest. The value will have a constant change between the active keyframe and the next keyframe. The value will change "linearly".

5.7.3 Beziér/Ease-Interpolation

This is the most complex type of interpolation but the most useful. The value between the active keyframe and the next keyframe will be approximated to what the beziér spline defines.

For this, the active keyframe and the next keyframe will have some additional information. This is a point with a frame offset and value offset relative to the given keyframe. In the graph view those are represented by orange dots and connection lines to the keyframe.

You can manipulate these control points to change the shape of the graph between the two keyframes.

These "handles" will be shown on the outgoing side of a keyframe if that keyframe is of this interpolation type, and on the in-going side they will be shown if the previous keyframe is of this interpolation type, no matter the interpolation type of this keyframe.

By default, the handles will be calculated automatically to create the smoothest camera animation possible. But you can give this mechanism either a hint of how is hould calculate those handles, or you completly define the handles your self with the graph viewer.

The context-menu of the keyframe-control f.e. allows you to change the interpolation types, and in the case of the ease-interpolation, also to say if you want smooth automatic handled or "In/Out". Custom defined handles can not be done with the context menu, and clicking one of these options will make already customly defined handles get ignored and be overrideen with the automatic handles.

Full automatic handles:

In/Out Handles:

Custom Handles:

5.8 Shortcuts

Most shortcuts work all the time. Some will work only in focused viewport (refer the viewport section). And some might work only without focused viewport.

  • Toggle Viewport Focus
    Default: G
  • Toggle "Lock Viewport Camera"
    Default: J
  • Toggle "Show Camera Path"
    Default: L
  • Toggle "Auto Keyframe"
    Default: K
  • Create/Remove Keyframe at active frame on all Attributes
    Default: I
    Will create/change a keyframe for all attributes at the current frame, if all attributes have already a keyframe and not a single active value deviates, removes those keyframes.
  • Next Frame
    Default: Arrow Right
    Increments the active frame by 1. Holding shift increments it by 10 instead.
  • Previous Frame
    Default: Arrow Left
    Decrements the active frame by 1. Holding shift decrements it by 10 instead.
  • Next Keyframe
    Default: .
    Tries to set the active frame to the frame of the next nearest keyframe of any attribute.
  • Previous Keyframe
    Default: ,
    Tries to set the active frame to the frame of the previous nearest keyframe of any attribute.
  • Timeline Scrubbing
    Key: Mouse Wheel
    Allows you to scrub the timeline with your mouse wheel.
  • Undo
    Key: Ctrl + Z
    Allows you to undo changes you made.
  • Redo
    Key: Ctrl + Y
    Allows you to redo previously undone changes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment