# Virtual Background (/en/realtime-media/rtc/build/apply-video-effects/virtual-background/unity)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

Virtual Background enables users to blur their background, or replace it with a solid color or an image. This feature is applicable to use-cases such as online conferences, online classes, and live streaming. It helps protect personal privacy and reduces audience distraction.

      
  
      
  
      
  
      
  
      
  
      
  
      
  
      
  
      
  
      
## Understand the tech

Virtual Background offers the following options:

| Feature                                 | Example                                                                                                                                                                                                                                                                                                               |
| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Blurred background and image background | ![image](https://assets-docs.agora.io/images/extensions-marketplace/blurred-background.jpg)                                                                                                                                                                                                                           |
| Video/Animated background               | <video src="https://assets-docs.agora.io/images/extensions-marketplace/virtual-background.mp4" poster="https://web-cdn.agora.io/docs-files/1654571689670" width="100%" height="auto">Your browser does not support the `video` element.</video>                                                                       |
| Portrait-in-picture                     | ![portrait-in-picture](https://assets-docs.agora.io/images/extensions-marketplace/portrait-in-picture.jpg) Allows the presenter to use slides as the virtual background while superimposing their video. The effect is similar to a weather news cast on television, preventing interruptions during a layout toggle. |

Want to test Virtual Background? Try the <a href="https://webdemo.agora.io/virtualBackground/index.html">online demo</a>.

## Prerequisites

Ensure that you have implemented the [SDK quickstart](/en/realtime-media/rtc/get-started-sdk) in your project.

## Implement virtual background

This section shows you how to add a virtual background to the local video.

### Check device compatibility

To avoid performance degradation or unavailable features when enabling Virtual Background on low-end devices, check whether the device supports the feature.

```csharp
private bool IsFeatureAvailable() {
  return agoraEngine.IsFeatureAvailableOnDevice(FeatureType.VIDEO_VIRTUAL_BACKGROUND);
}
```

### Set a blurred background

To blur the video background, use the following code:

```csharp
private void SetBackgroundBlur()
{
  if(IsFeatureAvailable() == false)
  {
    Debug.Log("Device does not support the virtual background feature");
    return;
  }

  VirtualBackgroundSource virtualBackgroundSource = new VirtualBackgroundSource();

  // Set background blur
  virtualBackgroundSource.background_source_type = BACKGROUND_SOURCE_TYPE.BACKGROUND_BLUR;
  virtualBackgroundSource.blur_degree = BACKGROUND_BLUR_DEGREE.BLUR_DEGREE_HIGH;

  // Set processing properties for background
  SegmentationProperty segmentationProperty = new SegmentationProperty();
  segmentationProperty.modelType = SEG_MODEL_TYPE.SEG_MODEL_AI; // Use SEG_MODEL_GREEN if you have a green background
  segmentationProperty.greenCapacity = 0.5F; // Accuracy for identifying green colors (range 0-1)

  // Enable or disable virtual background
  agoraEngine.EnableVirtualBackground(true, virtualBackgroundSource, segmentationProperty, MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE);
}
```

### Set a color background

To apply a solid color as the virtual background, use a hexadecimal color code. For example, `0x0000FF` for blue:

```csharp
private void SetBackgroundColor()
{
  if(IsFeatureAvailable() == false)
  {
    Debug.Log("Device does not support the virtual background feature");
    return;
  }

  VirtualBackgroundSource virtualBackgroundSource = new VirtualBackgroundSource();

  // Set a solid background color
  virtualBackgroundSource.background_source_type = BACKGROUND_SOURCE_TYPE.BACKGROUND_COLOR;
  virtualBackgroundSource.color = 0x0000FF;

  // Set processing properties for background
  SegmentationProperty segmentationProperty = new SegmentationProperty();
  segmentationProperty.modelType = SEG_MODEL_TYPE.SEG_MODEL_AI; // Use SEG_MODEL_GREEN if you have a green background
  segmentationProperty.greenCapacity = 0.5F; // Accuracy for identifying green colors (range 0-1)

  // Enable or disable virtual background
  agoraEngine.EnableVirtualBackground(true, virtualBackgroundSource, segmentationProperty, MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE);
}
```

### Set an image background

To set a custom image as the virtual background, specify the absolute path to the image file.

```csharp
private void SetBackgroundImage()
{
  if(IsFeatureAvailable() == false)
  {
    Debug.Log("Device does not support the virtual background feature");
    return;
  }

  VirtualBackgroundSource virtualBackgroundSource = new VirtualBackgroundSource();

  virtualBackgroundSource.background_source_type = BACKGROUND_SOURCE_TYPE.BACKGROUND_IMG;
  string filePath = Path.Combine(Application.persistentDataPath, "<path-of-the-file>.png");
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
    filePath = filePath.Replace('/', '\\');
#endif
  virtualBackgroundSource.source = filePath;

  var segproperty = new SegmentationProperty();
  RtcEngine.EnableVirtualBackground(true, virtualBackgroundSource, segproperty, MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE);
}
```

### Reset the background

Resets the virtual background, disabling any applied effects and reverting to the original video state.

```csharp
private void DisableVirtualBackground()
{
  VirtualBackgroundSource virtualBackgroundSource = new VirtualBackgroundSource();
  var segproperty = new SegmentationProperty();
  RtcEngine.EnableVirtualBackground(false, virtualBackgroundSource, segproperty, MEDIA_SOURCE_TYPE.PRIMARY_CAMERA_SOURCE);
}
```

## Reference

This section contains content that completes the information in this page, or points you to documentation that explains other aspects to this product.

### API reference

* [`IsFeatureAvailableOnDevice`](https://api-ref.agora.io/en/video-sdk/unity/4.x/API/class_irtcengine.html#api_irtcengine_isfeatureavailableondevice)

* [`enableVirtualBackground`](https://api-ref.agora.io/en/video-sdk/unity/4.x/API/class_irtcengine.html#api_irtcengine_enablevirtualbackground)

* [`VirtualBackgroundSource`](https://api-ref.agora.io/en/video-sdk/unity/4.x/API/class_virtualbackgroundsource.html)

* [`SegmentationProperty`](https://api-ref.agora.io/en/video-sdk/unity/4.x/API/class_segmentationproperty.html)

    
  
      
  
