---
title: Applying Post-Processing on ZEPETO World
slug: world-sdk-guide/applying-post-processing-on-zepeto-world
docTags: 
createdAt: 2025-04-04T05:20:02.553Z
---

If you want to enhance your world with visual effects or improve its overall graphic quality, try using Unity’s Post-processing feature.

By adding various effects, you can increase immersion and create a more polished experience.

## Getting Started with Post-processing

:::::WorkflowBlock
:::WorkflowBlockItem
**Install the Post Processing package.**

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/FTj_8V50vB-33q4nJwUTg_image.png)

In Unity, go to **Window > Package Manager**. Set the Packages option to **Unity Registry**, then search for and install the **Post Processing** package.
:::

:::WorkflowBlockItem
**Duplicate the ZepetoCamera Prefab.**

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/PdWhnifKGLEyiCRTf-ed8_image.png)

In the Project folder, go to **Packages > ZEPETO.Character.Controller > Runtime > \_Resources > Camera**. Find the ZepetoCamera prefab, copy it, and paste it into the Assets folder.

Then rename the duplicated prefab to **ZepetoCameraCopy**.
:::

:::WorkflowBlockItem
**Link ZepetoCameraCopy.**

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/B3TejRHBwsSsEZwXF0q0o_image.png" size="66" width="926" height="1064" position="center" showCaption="false"}

In the Hierarchy, select **Managers > ZepetoPlayers**. In the Inspector, drag and drop the duplicated ZepetoCameraCopy into the **Prefab** field.
:::

::::WorkflowBlockItem
**Create a new Layer.**

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/Y_jWTA-9EYVgfahV5q0pm_image.png)

In the Inspector of ZepetoCameraCopy, click **Layer > Add Layer** to create a new layer. Then assign this new layer in the **Layer** field.

:::hint{type="info"}
📘 **Note**

You can only use Layer 3 and Layer 6 or higher.

Layer 0 to 2 and Layer 4 to 5 are default Unity layers and cannot be modified.
:::
::::
:::::



## Applying Post-processing

There are two main ways to apply Post-processing:

1. **Global:&#x20;**&#x41;pplies effects to the entire world
2. **Local**: Applies effects only when the player enters a specific area

### Global Application

:::::WorkflowBlock
:::WorkflowBlockItem
**Add Post-process Layer and Post-process Volume to ZepetoCameraCopy.**

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/pIFvgTz2102f9IBsGEHjL_image.png" size="68" width="804" height="1064" position="center" showCaption="false"}

In the Inspector, click Add Component to add both **Post-process Layer** and **Post-process Volume** components. In Post-process Layer, set **Volume Blending > Layer** to the new layer you created.

Then in Post-process Volume, check the **Is Global** option. In the **Profile** field, assign a Post Process Profile that includes the effects you want.

If you don’t have a profile yet, click the **New** button next to the Profile field to create one.
:::

::::WorkflowBlockItem
**Add effects to the Post Process Profile.**

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/SF6yzeZoC4XVKUIvw2qfA_image.png" size="68" width="790" height="841" position="center" showCaption="false"}

If you created a new profile, select it and click the **Add Effect** button. Choose the effects you want and adjust their settings to create the desired look.

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/DrxtpYh8vWlcsAj4j53uN_image.png" size="68" width="846" height="834" position="center" showCaption="false"}

To edit a value, you must first check the box to the left of the field.

:::hint{type="info"}
✏️ **Tip**

Effects can be modified even during Play Mode, and the changes will be saved after exiting Play Mode.

Try adjusting the settings in the Inspector while the scene is running to see the results in real time and fine-tune your effects.
:::
::::
:::::



**\<Effect Examples>**

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/5hojtFjbUV1OqjRqoqvgX_image.png "Bloom")

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/EAdJ80rmInnavWtjOTmPP_image.png "Lens Distortion")

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/lNEAIx6y0eP43_zWAKaue_image.png "Color Grading")



### Local Application

::::WorkflowBlock
:::WorkflowBlockItem
**Add a Post-process Layer to ZepetoCameraCopy.**

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/ywAazWJRAjP9nbyltadhI_image.png" size="68" width="926" height="1216" position="center" showCaption="false"}

In the Inspector of ZepetoCameraCopy, add a **Post-process Layer**. Click the **This** button to set the Trigger, and assign the new layer to the **Layer** field.
:::

:::WorkflowBlockItem
**Create a Post-process Volume object.**

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/EmOfkdtw4NCNCvB4f-NZx_image.png" size="68" width="934" height="1200" position="center" showCaption="false"}

In the Hierarchy, click **+ > 3D Object > Post-process Volume** to create a new volume object.

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/oJS7z-TipBvJp4jjXzYjA_image.png" size="68" width="964" height="1197" position="center" showCaption="false"}

Assign the new layer to the Post-process Volume’s **Layer** field. Then, uncheck the **Is Global** option.
:::

:::WorkflowBlockItem
**Add effects to the Post-process Volume.**

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/-nG6591Mzrg7hJXp0i5pf_image.png" size="68" width="933" height="1153" position="center" showCaption="false"}

Click **Add Effect** to add the effects you want. Adjust their settings to achieve the desired result.
:::

:::WorkflowBlockItem
**Place the Post-process Volume.**

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/1iyXq3hJNWpI59jsxxXJH_image.png)

Position the Post-process Volume in the area where you want the effects to activate.
:::
::::



**\<Local Application Example>**

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/ZFa8s144qsC5zBTvGwPxJ_local.gif)



## Controlling Post-process Volume via Script

You can also control the Post-process Volume using a script.

Below is an example using a Toggle to turn the effect on and off.

::::WorkflowBlock
:::WorkflowBlockItem
**Create a new GameObject.**

In the Hierarchy, click **+ > Create Empty** to create a new GameObject. Then, rename the object to **PostProcessManager**.
:::

:::WorkflowBlockItem
**Create a new Toggle UI.**

In the Hierarchy, click **+ > UI > Toggle** to create a new Toggle element.
:::

:::WorkflowBlockItem
**Create a new script.**

In the Project window, click **+ > ZEPETO > TypeScript** to create a new script.

Rename the script to **PostProcessScript**, open it, and paste in the code below.

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { GameObject } from 'UnityEngine';
import { PostProcessVolume } from 'UnityEngine.Rendering.PostProcessing';
import { Toggle } from 'UnityEngine.UI';

export default class PostProcessScript extends ZepetoScriptBehaviour {

    public onOffToggle: Toggle;
    public postProcessObj: GameObject;
    private _postProsessVolume: PostProcessVolume;

    Start() {    
        this._postProsessVolume = this.postProcessObj.GetComponent<PostProcessVolume>();

        this.onOffToggle.onValueChanged.AddListener(()=>{
            this._postProsessVolume.profile.settings.ForEach(
                // Toggles all settings in the current profile settings on or off.
                (setting)=>{
                    setting.active = !setting.active;
                }
            );
        });
    }
}
```
:::

:::WorkflowBlockItem
**Add the script to PostProcessManager.**

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/tZbeuWSyrXM_NSJpmDZsr_image.png" size="66" width="1058" height="1348" position="center" showCaption="false"}

Select PostProcessManager in the Hierarchy. In the Inspector, click **Add Component > Zepeto Script**, and drag the PostProcessScript into the **Script** field.

Then, in the Hierarchy, drag the Toggle into the **On Off Toggle** field, and drag the Post-process Volume into the **Post Process Obj** field.
:::
::::



**\<Example>**

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/J4lvzQyphSw39C0Yo-uMd_script-post-process.gif)

Now, when you press the Toggle in the area where the Post-process Volume is placed, you’ll see the post-processing effect activate or deactivate.
