A toolbox for creating and importing cinematic shots from Outer Wilds into Blender!
The Outer Scout mod allows other programs to make advanced video recordings from Outer Wilds. It opens a software interface with which you can animate cameras and other objects, and then export video files and other recorded game data
Important
This repository contains only the backend part for the Outer Scout Blender addon - visit its page to see more sample videos that you can make with this mod!
Important
These requirements relate specifically to the mod, not the add-on for Blender
FFmpeg is required for video recording functionality. The ffmpeg
command must be available in the PATH (a specific path to the executable can be specified in the settings). On Windows I recommend installing ffmpeg via scoop
The add-on and the mod communicate over the HTTP protocol on local port 2209
. You can change the port in the settings of two programs
This mod implements the API that can:
- Create custom Unity GameObjects
- Add different types of cameras to them (even 360!)
- Animate their transform and perspective using keyframes
- Create recorders of their RenderTextures (color or depth)
- Record your scene with a fixed frame rate
All API endpoints are available in the swagger-ui interface. You can view them by opening a web browser and navigating to localhost:2209
while you game's running
Warning
I may forget to update this section if I change the API. Please see the specific documentation only in the OpenAPI schema
Let's do something like the dolly zoom effect. First we need to create an Outer Scout scene:
// POST /scene
{
"hidePlayerModel": true,
"origin": {
"parent": "TimberHearth_Body",
"position": [20.8809223, -41.51514, 186.207733],
"rotation": [0.461064935, -0.4372242, -0.6413971, 0.429958254]
}
}
Now we need a camera. The mod can create several cameras of different types, but we will only need one regular (perspective) camera:
// POST /objects
{
"name": "mainCamera",
"transform": {
"parent": "scene.origin"
// scene.origin is a special object,
// located in the coordinates that we specified above
},
}
// POST /objects/mainCamera/camera
{
"type": "perspective",
"gateFit": "horizontal",
"resolution": {
"width": 1920,
"height": 1080
},
"perspective": {
// See the Unity documentation on the physical properties of cameras
// https://docs.unity3d.com/Manual/PhysicalCameras.html
"focalLength": 20,
"sensorSize": [36, 24],
"lensShift": [0, 0],
"nearClipPlane": 0.1,
"farClipPlane": 5000
}
}
Now we need to animate the camera position and focal length:
// PUT /objects/mainCamera/keyframes
{
"properties": {
"transform.position.z": {
"keyframes": {
"1": { "value": -2 },
"60": { "value": 2 }
}
},
"camera.perspective.focalLength": {
"keyframes": {
"1": { "value": 40 },
"60": { "value": 10 }
}
}
}
}
Then we need to specify which file on the disk to save the video to. To do this, we need to create a camera recorder:
// POST /objects/mainCamera/recorders
{
"property": "camera.renderTexture.color",
"outputPath": "D:\\assets\\color.mp4",
"format": "mp4"
}
And finally, we can record the created scene:
// POST /scene/recording
{
"startFrame": 1,
"endFrame": 60,
"frameRate": 60
}