Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
## [4.0.0-pre.2] - 2021-09-14
### Added
- Added variable frame rate support to the Movie Recorder.

### Changed
- Make VP8 WebM the default output format for Movie Recorders on Linux, MP4 not being supported.
- Log errors when setting up a Recorder for H.264 MP4 or ProRes on Linux.
- Hide the Flip Vertical property in AOV Recorder Settings, as it is not supported.
- Disable asynchronous shader compilation before recording.
- The Exit Play Mode option, which used to be a per-user setting, is now a per-Recorder-List asset.

### Fixed
- Prevent recording when multiple Recorders use the same output file name.
- Ensure recording the expected frames with accumulation when the recording range doesn't start at 0.
- Add missing output location browse button in the Animation Clip Recorder.
- Ignore the unsupported "Capture UI" option in Scriptable Render Pipeline (SRP) projects to prevent recordings from being corrupted
- Prevent users from editing Recorder bindings through the UI.
- Add contextual feedback about Simulator view not supported when selecting "Game View" as the recorded source.
- Automatically switch to Game view if Simulator view is selected when starting to record the "Game View" source.
- Prevent the Recorder Timeline integration from outputting files when the timeline is paused.
- Ignore the Render Frame Step property when the Frame Rate Playback mode is set to Constant.
- Fix valid Recorders only recording the first frame when the first Recorder in the Recorder Window list is invalid.
- Prevent users from getting issues when renaming recorders in the Recorder List.
  • Loading branch information
Unity Technologies committed Sep 14, 2021
1 parent 1b312fe commit 10f5b2a
Show file tree
Hide file tree
Showing 53 changed files with 788 additions and 332 deletions.
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,30 @@ All notable changes to this package will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [4.0.0-pre.2] - 2021-09-14
### Added
- Added variable frame rate support to the Movie Recorder.

### Changed
- Make VP8 WebM the default output format for Movie Recorders on Linux, MP4 not being supported.
- Log errors when setting up a Recorder for H.264 MP4 or ProRes on Linux.
- Hide the Flip Vertical property in AOV Recorder Settings, as it is not supported.
- Disable asynchronous shader compilation before recording.
- The Exit Play Mode option, which used to be a per-user setting, is now a per-Recorder-List asset.

### Fixed
- Prevent recording when multiple Recorders use the same output file name.
- Ensure recording the expected frames with accumulation when the recording range doesn't start at 0.
- Add missing output location browse button in the Animation Clip Recorder.
- Ignore the unsupported "Capture UI" option in Scriptable Render Pipeline (SRP) projects to prevent recordings from being corrupted
- Prevent users from editing Recorder bindings through the UI.
- Add contextual feedback about Simulator view not supported when selecting "Game View" as the recorded source.
- Automatically switch to Game view if Simulator view is selected when starting to record the "Game View" source.
- Prevent the Recorder Timeline integration from outputting files when the timeline is paused.
- Ignore the Render Frame Step property when the Frame Rate Playback mode is set to Constant.
- Fix valid Recorders only recording the first frame when the first Recorder in the Recorder Window list is invalid.
- Prevent users from getting issues when renaming recorders in the Recorder List.

## [4.0.0-pre.1] - 2021-08-25
### Added
- Added a slider to change the JPEG quality when using Image Recorders or AOV Recorders.
Expand Down
Binary file modified Documentation~/Images/AOVRecorderWindow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Documentation~/Images/RecorderAnimation.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion Documentation~/InclCaptureOptionsGameView.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
These properties appear when you set **Source** to **Game View**.

>[!NOTE]
>**Note:**
>* If you have multiple Game Views in your project, the Recorder captures only the last one you selected in the Editor.
>* If you are using more than one Recorder to capture Game View, they must all use the same resolution settings.
>* Recording the Simulator view is [not supported](KnownIssues.md#simulator-view-recording-not-supported).
![](Images/CaptureOptionsGameView.png)

Expand Down
4 changes: 2 additions & 2 deletions Documentation~/InclCaptureOptionsTargetedCamera.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ These properties appear when you set **Source** to **Targeted Camera**.

|Property||Function|
|-|-|-|
| **Camera** ||Specifies which camera the Recorder uses to capture the recording.<br/><br/>**Note:** some options might not appear if you're using certain render pipelines (for example [HDRP](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@latest)).|
| | ActiveCamera | The Camera that is active when you launch the recording. |
| **Camera** ||Specifies which camera the Recorder uses to capture the recording. |
| | ActiveCamera | The Camera that is active when you launch the recording.<br/><br/>**Note:** [The ActiveCamera option is not available](KnownIssues.md#activecamera-recording-not-available-with-srps) when your project uses a Scriptable Render Pipeline (SRP). |
| | MainCamera | The Camera tagged with the MainCamera [Tag](https://docs.unity3d.com/Manual/Tags.html). |
| | TaggedCamera | A camera tagged with a specific [Tag](https://docs.unity3d.com/Manual/Tags.html).<br/><br/>If you select this option, you must enter a value in the **Tag** field. |
|**Tag** | | Specifies which Camera Tag to look for when you set **Camera** to **Tagged Camera**.|
Expand Down
32 changes: 32 additions & 0 deletions Documentation~/KnownIssues.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,22 @@ This page lists some known issues and limitations that you might experience with

**Workaround:** The recommended use case is to limit yourself to one Movie recording at a time. Ensure that you have only one active Movie Recorder in the Recorder window and no Movie Recorder Clips in Timeline, or vice-versa. If you need to keep concurrent recordings for some reason, you can still set up lower resolutions or try different encoders (for instance, the MP4 encoding step is much faster than the ProRes one).

#### ActiveCamera recording not available with SRPs

**Limitation:** The use of a Scriptable Render Pipeline ([SRP](https://docs.unity3d.com/Manual/ScriptableRenderPipeline.html)) in your project prevents you from setting ActiveCamera as the source of the recording in the [Movie Recorder](RecorderMovie.md#targeted-camera-source-properties) and the [Image Sequence Recorder](RecorderImage.md#targeted-camera-source-properties). This render pipeline limitation applies to all SRPs including Unity's High Definition Render Pipeline ([HDRP](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@latest)) and Universal Render Pipeline ([URP](https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@latest)). For the same reason, the [AOV Recorder](RecorderAOV.md#source-camera), which requires HDRP, doesn't include the ActiveCamera option by design.

**Workaround:** You can use a Tagged Camera for the recording. In your project, add a [Tag](https://docs.unity3d.com/Manual/Tags.html) to the camera you want to record through, and then in the Recorder Settings, select TaggedCamera and specify your camera's Tag.

#### Audio recording limited support

**Limitation:** The Recorder currently supports only the recording of samples from the Unity built-in audio engine. As such, it cannot record audio from third-party audio engines such as FMOD Studio or Wwise.

**Workaround:** For a movie, you can record the third-party audio output in WAV format through another application, reimport this recorded file into the Unity Timeline, and then use the Recorder to create the final movie with audio. Alternatively, you can use any video editing software to recompose audio and video.

#### MP4 and ProRes encoding not supported on Linux

**Limitation:** The Movie Recorder doesn't support H.264 MP4 and ProRes QuickTime encoding on Linux.

#### GIF Animation Recorder no longer available

**Limitation:** This version of the Recorder no longer includes the GIF Animation Recorder, although it is still available in Recorder versions 2.5 and lower.
Expand All @@ -30,6 +40,28 @@ This page lists some known issues and limitations that you might experience with

**Workaround:** If you need to record a Beauty pass with TAA enabled on your recording camera, you should record it through its own recording session, separately from any other AOVs.

#### Recording discontinuous animations results in continuous animation curve

**Limitation:** When you use a single recorder to record an animation sequence that includes discontinuities (for example, camera cuts), the Recorder interpolates and smoothens all discontinuities in the resulting animation curve, as it is by design in Unity. However, this process alters the expected discontinuities in the recorded animation.

**Workaround:** To keep discontinuities while recording animations, you need to perform several recordings between the cuts. For example, you could set up several Recorder clips in Timeline, relative to the source animations you need to record.

#### UNC paths not supported as output locations

**Limitation:** The Recorder output file path field doesn't support Universal Naming Convention (UNC) strings for targeting shared network folders.

**Workaround:** To target a shared network folder as the output location, specify the path to a drive you previously mapped to the network folder you're targeting.

#### Building a project with Recorder tracks generates errors

**Known issue:** When you build a project that includes Recorder tracks in Timeline, Unity throws an error in the Console. Recorder tracks are not supported in standalone builds, but Unity can't disable them at build time.

**Workaround:** Before building a project, make sure to delete or disable any Recorder tracks present in Timeline.

#### Simulator view recording not supported

**Limitation:** The Movie Recorder and Image Sequence Recorder can only record the Unity Editor output rendering view in its _Game_ state, and not in its _Simulator_ state. If the Simulator view is selected when you start recording the Game View, the source window automatically switches to Game view.

<a name="360-view"></a>
#### 360 View recording issues and limitations

Expand Down
2 changes: 1 addition & 1 deletion Documentation~/OutputFileProperties.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Use these properties to define file output options for any type of Recorder.
| **File Name** || The name of the output file. |
| | _[TEXT FIELD]_ | Type the file name here.<br /><br />**Tip:** You can use [placeholders](#available-placeholders) to include auto-generated text in the file name: use the **+Wildcards** drop-down menu or insert them manually. |
| | **+Wildcards** menu | Allows you to quickly select [placeholders](#available-placeholders) for auto-generated text to append them to the **File Name** string. |
| **Path** ||Use these controls to configure the path to the folder where the Recorder saves output files.<br/><br/>Some Recorders can only output to specific locations. For example Animation Clip Recorders can only output to locations inside the Assets folder.|
| **Path** ||Use these controls to configure the path to the folder where the Recorder saves output files.<br/><br/>**Note:**<br/>• UNC paths are [not supported](KnownIssues.md#unc-paths-not-supported-as-output-locations).<br/>• The [Animation Clip Recorder](RecorderAnimation.md) can only output to a location within the Assets folder because the output format is only usable in Unity. |
| | _[DROP-DOWN]_ | Choose one of several pre-defined Unity folders, or choose **Absolute** to specify a custom path. |
| | _[TEXT FIELD]_ | If you choose a predefined path from the drop-down menu, the Recorder appends anything you enter here to that path.<br/><br/>If you choose **Absolute** from the drop-down menu, you can enter the custom output path here. <br/><br/>**Note:** If you click the Output Location button (**...**) to choose an absolute path from the Unity file browser, the path you choose overwrites anything in this field.<br /><br />**Tip:** You can manually insert [placeholders](#available-placeholders) to include auto-generated text in the path string. |
| | Output Location button (**...**) | Opens a Unity file browser where you can choose a custom output path. When you choose a path this way, the Recorder automatically sets the drop-down menu to **Absolute**. |
Expand Down
9 changes: 4 additions & 5 deletions Documentation~/RecorderAOV.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ Select the camera to use for the recording.

| Property || Function |
|:---|:---|:---|
| **Camera** || Specifies which camera the Recorder uses to capture the AOV recording.|
| | Main Camera | The Camera tagged with the MainCamera [Tag](https://docs.unity3d.com/Manual/Tags.html). |
| | Tagged Camera | A camera tagged with a specific [Tag](https://docs.unity3d.com/Manual/Tags.html).<br/><br/>If you select this option, you must enter a value in the **Tag** field. |
|**Tag** | | Specifies which Camera Tag to look for when you set **Camera** to **Tagged Camera**. |
| **Camera** || Specifies which camera the Recorder uses to capture the AOV recording.<br/><br/>**Note:** [You can't set the Camera property to ActiveCamera](KnownIssues.md#activecamera-recording-not-available-with-srps) due to a High Definition Render Pipeline (HDRP) limitation. |
|| MainCamera | The Camera tagged with the MainCamera [Tag](https://docs.unity3d.com/Manual/Tags.html). |
|| TaggedCamera | A camera tagged with a specific [Tag](https://docs.unity3d.com/Manual/Tags.html).<br/><br/>If you select this option, you must enter a value in the **Tag** field. |
|**Tag** || Specifies which Camera Tag to look for when you set **Camera** to **Tagged Camera**. |

### Recorded view

Expand All @@ -77,7 +77,6 @@ Set the dimensions and other properties of the recorded view.
| **Aspect Ratio** || Specifies the ratio of width to height (w:h) of the recorded view when you set the **Output Resolution** to a preset resolution. |
| | _[PRESET ASPECT RATIOS]_ | Choose from several standard aspect ratios such as 16:9 (1.7778) and 4:3 (1.3333). |
| | Custom | Uses custom aspect ratio that you supply in the displayed fields (w:h). |
| **Flip Vertical** || When you enable this option, the Recorder flips the output image vertically.<br/><br/>This is useful to correct for systems that output video upside down. |


## Format
Expand Down
12 changes: 8 additions & 4 deletions Documentation~/RecorderDebugging.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,20 @@ The Recorder adds a **Unity-RecorderSessions** GameObject to Scenes to help mana

By default, Unity hides the **Unity-RecorderSessions** GameObject, but you can make it visible in the [Hierarchy window](https://docs.unity3d.com/Manual/Hierarchy.html). This is useful for debugging. For example, if a Recorder is not working properly, you can toggle the **Unity-RecorderSessions** GameObject on to make sure that Unity creates it properly when you launch the recording session.

To toggle the **Unity-RecorderSessions** GameObject's visibility:
To enable the **Unity-RecorderSessions** GameObject's visibility:

- From Unity's main menu, select **Window > General > Recorder > Options > Show Recorder GameObject**.
1. From the Unity Editor main menu, select **Edit > Preferences**.
2. In the Preferences window, in the left pane, select **[Recorder](ref-window-preferences-recorder.md)**.
3. In the right pane, enable **Show Recorder GameObject**.

## Recording in Verbose mode

If your Recorders are not working as expected, you can activate Verbose mode to get diagnostic information about the recording (for example, the recording's start and end time).

Verbose mode logs information to the [Console window](https://docs.unity3d.com/Manual/Console.html), which is useful when you want to troubleshoot.

To toggle Verbose mode:
To enable the Verbose mode:

- From Unity's main menu, select **Window > General > Recorder > Options > Verbose Mode**.
1. From the Unity Editor main menu, select **Edit > Preferences**.
2. In the Preferences window, in the left pane, select **[Recorder](ref-window-preferences-recorder.md)**.
3. In the right pane, enable **Verbose Mode**.
2 changes: 1 addition & 1 deletion Documentation~/RecorderMovie.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Use this section to set up the media format you need to save the recorded images

|Property|Function|
|:---|:---|
| **Media File Format** | The encoding format of the Recorder's output. Choose **H.264 MP4**, **VP8 WebM** or **ProRes QuickTime**. |
| **Media File Format** | The encoding format of the Recorder's output. Choose **H.264 MP4**, **VP8 WebM** or **ProRes QuickTime**.<br /><br />**Note:** H.264 MP4 and ProRes QuickTime encoding are not supported on Linux. |
| **Include Alpha** | Enable this property to include the alpha channel in the recording. Disable it to only record the RGB channels.<br/><br/>This property is not available when the selected **Media File Format** or **Codec Format** doesn't support transparency, or when **Capture** is set to **Game View**. |
| **Quality** | The quality of the output movie: **Low**, **Medium**, or **High**. The lower the quality, the smaller the file size.<br/><br/>This property is only available when you set the **Media File Format** to **H.264 MP4** or **VP8 WebM**. |
| **Codec Format** | The video codec to use to encode the output file. Choose among a variety of [**Apple ProRes**](https://en.wikipedia.org/wiki/Apple_ProRes) codecs: **ProRes 4444 XQ**, **ProRes 4444**, **ProRes 422 HQ**, **ProRes 422**, **ProRes 422 LT** or **ProRes 422 Proxy**.<br/><br/>This property is only available when you set the **Media File Format** to **ProRes QuickTime**. |
Expand Down
1 change: 1 addition & 0 deletions Documentation~/TableOfContents.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@
* [Audio Recorder](RecorderAudio.md)
* [AOV Recorder](RecorderAOV.md)
* [Debugging recorders](RecorderDebugging.md)
* [Recorder preferences](ref-window-preferences-recorder.md)
* [Known issues](KnownIssues.md)
14 changes: 14 additions & 0 deletions Documentation~/ref-window-preferences-recorder.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Recorder preferences

Recorder preferences are located in the Unity Editor's [Preferences window](https://docs.unity3d.com/Manual/Preferences.html).

From the Unity Editor main menu, select **Edit > Preferences**, an then in the Preferences window, in the left pane, select **Recorder**.

![](Images/ref-window-preferences-recorder.png)

## Properties

| Property | Description |
|:---|:---|
| **Verbose Mode** | Enable [Verbose Mode](RecorderDebugging.md#recording-in-verbose-mode) to get diagnostic information through the Console during your recordings, for troubleshooting purposes. |
| **Show Recorder GameObject** | Enable this option to make the temporary [Recorder GameObjects](RecorderDebugging.md#recorder-gameobjects) visible in the Hierarchy during your recordings, for troubleshooting purposes. |
35 changes: 23 additions & 12 deletions Editor/Encoding/CoreMediaEncoder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using JetBrains.Annotations;
using Unity.Collections;
using UnityEditor.Media;
using UnityEditor.Recorder;
Expand All @@ -14,7 +15,7 @@ internal class CoreMediaEncoderRegister : MediaEncoderRegister
{
internal override bool PerformsVerticalFlip => false;

internal sealed override VideoRecorderOutputFormat[] SupportedFormats { get; set; }
internal sealed override VideoRecorderOutputFormat[] AvailableFormats { get; set; }

internal override unsafe MediaEncoderHandle Register(MediaEncoderManager mgr)
{
Expand All @@ -28,7 +29,27 @@ internal override string GetName()

public CoreMediaEncoderRegister()
{
SupportedFormats = new[] { VideoRecorderOutputFormat.MP4, VideoRecorderOutputFormat.WebM };
AvailableFormats = new[]
{
VideoRecorderOutputFormat.MP4,
VideoRecorderOutputFormat.WebM
};
}

/// <summary>
/// Gets the list of output formats this encoder supports on the current platform and Unity version.
/// </summary>
/// <returns></returns>
[CanBeNull]
internal override ReadOnlyCollection<VideoRecorderOutputFormat> GetSupportedFormats()
{
#if UNITY_EDITOR_LINUX
// Only WebM is supported on Linux
return new ReadOnlyCollection<VideoRecorderOutputFormat>(new[] {VideoRecorderOutputFormat.WebM});
#else
// All available formats are supported
return GetAvailableFormats();
#endif
}

internal override bool SupportsResolution(MovieRecorderSettings settings, int width, int height, out string errorMessage, out string warningMessage)
Expand Down Expand Up @@ -68,16 +89,6 @@ internal override string GetDefaultExtension()
{
return "mp4";
}

internal override bool IsFormatSupported(VideoRecorderOutputFormat format)
{
#if UNITY_EDITOR_LINUX
// MP4 is not supported on Linux
return format != VideoRecorderOutputFormat.MP4;
#else
return true;
#endif
}
}

internal class CoreMediaEncoder : IMediaEncoder
Expand Down
Loading

0 comments on commit 10f5b2a

Please sign in to comment.