---
title: 제페토 월드에 Post-processing 적용하기
slug: world-sdk-guide-kr/post-processing
docTags: 
createdAt: 2025-04-04T02:09:08.331Z
---

월드에 화려한 효과를 더하고 싶거나, 월드의 그래픽 퀄리티를 높이고 싶다면 Unity의 Post-processing 기능을 활용해보세요.

다양한 시각적 효과를 더해 몰입감을 높이고 더 완성도 높은 월드를 만들 수 있습니다.

## Post-processing 시작하기

:::::WorkflowBlock
:::WorkflowBlockItem
**Post Processing 패키지를 설치합니다.**

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

Unity에서 **Window > Package Manager**를 열고, Packages 옵션을 **Unity Registry**로 설정한 뒤 목록에서 **Post Processing** 패키지를 찾아 설치해 주세요.
:::

:::WorkflowBlockItem
**ZepetoCamera Prefab을 복제합니다.**

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

프로젝트 폴더에서 **Packages > ZEPETO.Character.Controller > Runtime > \_Resources > Camera** 경로로 이동하여 **ZepetoCamera** Prefab을 찾아 복사한 뒤, Assets 폴더에 붙여넣기 합니다. 

그 후 복제한 Prefab의 이름을 **ZepetoCameraCopy**로 수정해주세요.
:::

:::WorkflowBlockItem
**ZepetoCameraCopy를 연결합니다.**

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

Hierarchy에서 **Managers > ZepetoPlayers**를 선택하고, Inspector에서 **Prefab** 필드에 복제한 ZepetoCameraCopy를 드래그 앤 드롭합니다.
:::

::::WorkflowBlockItem
**새 레이어를 생성합니다.**

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

ZepetoCameraCopy의 Inspector에서 **Layer > Add Layer**를 눌러 새 레이어를 생성한 뒤, Layer 필드에 새로 만든 레이어를 지정합니다.

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

사용자가 추가할 수 있는 Layer는 Layer 3 및 Layer 6 이상입니다. 

Layer 0 \~ 2 및 Layer 4 \~ 5는 Unity의 기본 레이어로 수정이 불가능합니다.
:::
::::
:::::



## Post-Processing 적용하기

Post-processing 적용 방법에는 크게 두 가지가 있습니다.

1. **Global**: 월드 전체에 post-processing을 적용하는 방식
2. **Local**: 캐릭터가 특정 구역에 진입했을 때만 post-processing을 적용하는 방식

### Global 적용 방법

:::::WorkflowBlock
:::WorkflowBlockItem
**ZepetoCameraCopy에 Post-process Layer와 Post-process Volume을 추가합니다.**

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

Inspector에서 Add Component 버튼을 눌러 **Post-process Layer**와 **Post-process Volume**을 추가하고, Post-process Layer의 **Volume Blending > Layer** 필드를 새로 만든 레이어로 지정합니다.

그 다음 Post-process Volume에서 **Is Global** 옵션을 체크하고, 원하는 효과가 담긴 Post Process Profile을 **Profile** 필드에 연결합니다.

Post Process Profile이 없거나 새로운 Post Process Profile을 생성하고 싶다면, Profile 필드 옆의 **New** 버튼을 눌러 새 Profile을 만들 수 있습니다.
:::

::::WorkflowBlockItem
**Post Process Profile에 원하는 효과를 추가합니다.&#xA0;**

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

새로운 Post Process Profile을 생성했다면, 생성된 Post Profile Profile을 선택한 뒤 **Add Effect** 버튼을 눌러 효과를 추가한 후 설정값을 조정하여 원하는 시각 효과를 연출해주세요.

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

설정 값을 조절하고 싶다면 값을 수정하고자 하는 필드의 좌측에 위치한 체크박스를 먼저 체크해야 합니다.

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

Effect는 Play Mode에서도 자유롭게 수정할 수 있으며, Play Mode를 종료한 후에도 변경한 내용이 유지됩니다.

실행 중에 Inspector에서 설정 값을 실시간으로 조절하면서, effect가 어떻게 적용되는지 확인해보세요. 원하는 효과를 더욱 정밀하게 연출할 수 있습니다.
:::
::::
:::::



**\<Effect 적용 예시>**

![](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 적용 방법

::::WorkflowBlock
:::WorkflowBlockItem
**ZepetoCameraCopy에 Post-process Layer를 추가합니다.**

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

ZepetoCameraCopy의 Inspector에서 **Post-process Layer**를 추가한 뒤, **This** 버튼을 눌러 Trigger를 설정하고, **Layer** 필드를 새로 만든 레이어로 지정합니다.
:::

:::WorkflowBlockItem
**Post-process Volume 오브젝트를 생성합니다.**

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

Hierarchy에서 **+ 버튼 > 3D Object > Post-process Volume**을 클릭하여 Post-process Volume 오브젝트를 생성합니다.

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

Post-process Volume 오브젝트의 **Layer**를 새로 만든 레이어로 지정하고, **Is Global** 필드의 체크를 **해제**합니다.
:::

:::WorkflowBlockItem
**Post-process Volume에 원하는 효과를 추가합니다.&#xA0;**

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

**Add effect** 버튼을 눌러 원하는 효과를 추가한 후 설정값을 조정하여 원하는 시각 효과를 연출해주세요.
:::

:::WorkflowBlockItem
**Post-process Volume을 배치합니다.**

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

Post-processing이 적용되었으면 하는 위치에 Post-process Volume을 배치해주세요.
:::
::::



**\<Local 적용 예시>**

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



## 스크립트에서 Post-process Volume 제어하기

생성한 Post-process Volume은 스크립트를 통해서 제어가 가능합니다. 

아래는 Toggle을 이용하여 Post-process Volume을 활성화 및 비활성화하는 예시입니다.

::::WorkflowBlock
:::WorkflowBlockItem
**새로운 Game Object를 생성합니다.**

Hierarchy에서 **+ 버튼 > Create Empty**를 클릭하여 새로운 Game Object를 생성하고, 이름을 **PostProcessManager**로 수정해주세요.
:::

:::WorkflowBlockItem
**새로운 Toggle UI를 생성합니다.**

Hierarchy에서 **+ 버튼 > UI > Toggle**을 클릭하여 새로운 Toggle을 생성해주세요.
:::

:::WorkflowBlockItem
**새로운 스크립트를 생성합니다.**

Project 창에서 **+ 버튼 > ZEPETO > TypeScript**를 클릭하여 새로운 스크립트를 생성하고, 이름을 **PostProcessScript**로 수정합니다.

생성된 스크립트 파일을 열고 아래 코드를 복사 붙여넣기 해 주세요.

```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(
                // 현재 profile settings의 모든 설정을 on/off합니다.
                (setting)=>{
                    setting.active = !setting.active;
                }
            );
        });
    }
}
```
:::

:::WorkflowBlockItem
**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"}

Hierarchy에서 PostProcessManager를 선택하고, Inspector에서 **Add Component > Zepeto Script**를 클릭한 뒤 **Script** 필드에 PostProcessScript를 드래그 앤 드롭합니다.

그 후 Hierarchy에서 생성한 Toggle과 Post-process Volume을 찾아 각각 **On Off Toggle** 필드와 **Post Process Obj** 필드에 드래그 앤 드롭합니다.
:::
::::



**\<적용 예시>**

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

Post-process Volume이 위치한 곳에서 Toggle을 누르면 post-processing이 활성화 또는 비활성화 되는 것을 확인할 수 있습니다.
