# ProPixelizer User Guide (v1.8.1)

## 요구 조건

이 패키지는 다음과 같은 최소 요구 조건이 있습니다\*:

* Universal Render Pipleline 7.3.1

*이 요구 조건들 없이도 잘 작동하거나, 있는데 작동하지 않으면 알려주세요!*

아래와 같은 Unity 버전들로 테스트를 해봤습니다:

* ProPixelizer v1.8.1
  * Unity 2020.3.48f1 + URP 10.10.1
  * Unity 2021.3.33f1 + URP 12.1.13
  * Unity 2022.3.16f1 + URP 14.0.9
  * Unity 2023.2.3f1 + URP 16.0.4&#x20;
* ProPixelizer v1.8
  * 2022.2.1f1
  * 2021.3.16f1 LTS
  * 2020.3.43f1 LTS
* ProPixelizer v1.7
  * 2020.3.36f1 + URP 10.9.0
  * 2021.3.6f1 + URP 12.1.7
  * 2022.1.8f1 + URP 13.1.8
* ProPixelizer v1.6
  * 2019.4.33 LTS + URP 7.7.1
  * 2020.3.24 LTS + URP 10.7.0
  * 2021.2.5 + URP 12.1.2
* ProPixelizer v1.5
  * 2019.4.28 LTS + URP 7.6.0
  * 2020.3.13 LTS + URP 10.5.0
* ProPixelizer v1.4
  * 2019.4.23f1 (LTS) + URP 7.3.1
  * 2020.2.1f1 + URP 10.2.22
* ProPixelizer v1.3
  * 2019.3.0 + URP 7.4.x
  * 2020.1.2f1 + URP 8.2.0
  * 2020.2.1f1 + URP 10.2.22

### 빌드 타겟 <a href="#h.d6wxz5bt974d_l" id="h.d6wxz5bt974d_l"></a>

테스트 해본 것들:

* PC에서 작동하는 webGL ES 2.0 (파이어폭스와 크롬)
* Windows PC, Dicrect X와 openGL
* M1 Max, Metal
* Android (작동함, 하지만 내 오래된 Galaxy A10으론 렉 걸림)

ProPixelizer가 어떻게 작동하는지 궁금하시다면, [이 글](https://medium.com/@elliotbentine/pixelizing-3d-objects-b55ec33328f1)의 Attempt #3에 픽셀화 과정을 간략하게 설명해놨습니다. 앞으로 더 많은 기술 글들을 작성하려고 합니다. Discord나 twttter에서 편하게 질문해주세요!

***

## 시작하기

먼저, 프로젝트에 Universal Pipeline 패키지가 있어야 합니다. (Unity Package Manager로 추가하실 수 있습니다)

Unity Package Manager에서 ProPixelizer를  import하세요; 그러면 Unity가 기본적으로 설정한 경로인Assets/ProPixelizer에 위치하게 될 겁니다.

Shader Variant Limit이 너무 낮으면, ProPixelizer는 console에 경고를 띄웁니다. *Edit > Preferences > Shader Graph*에서 설정값을 (예시. 256) 올릴 수 있습니다. 값을 변경한 후엔, ProPixelizer 폴더를 우클릭하고 reimport해서 셰이더들을 다시 컴파일하세요.

### 프로젝트 설정

둘 중 하나를 고르세요

1. 애셋에 포함된 ProPixelizer render pipeline을 사용하거나,
2. 아래의 설명을 따라 ProPixelizer를 당신의 고유한 Render Pipeline Asset에 추가하세요. Project&#x20;

Settings > Graphics와 Project Settings > Quality 둘 다에 Render Pipeline Asset들을 설정해야 합니다. ProPixelizer는 이 중 하나라도 설정되지 않았거나, 둘이 같지 않다면 경고해줄 겁니다. URP의 최근 버전들은 기본적으로 각각의 quality setting마다 할당된 여러 개의 RenderPipelineAsset이 있습니다.

#### Render pipeline asset에 ProPixelizer 추가하기

<figure><img src="/files/2nduRMfAS3L5iHfDuYIJ" alt=""><figcaption></figcaption></figure>

Universal Render Pipeline Asset에서,&#x20;

* Depth Texture 활성화
* MSAA 비활성화

가 되어 있도록 하세요.

(이것들은 Camera level에 대해서도 재정의(override)할 수 있습니다.)

## <mark style="color:red;">여기까지 손번역 완료</mark>

<figure><img src="/files/fvLVDOjcRODuGBhqBHrv" alt=""><figcaption></figcaption></figure>

렌더러 에셋을 선택하세요 (여기서는 RendererList의 ForwardRenderer). Render Features 아래에서 Add Render Feature를 클릭하고, Pixelisation Feature를 선택하여 ProPixelizer에 필요한 렌더 기능을 추가하세요.

일부 Unity 버전에서는 SRPBatcher에서 크래시 버그가 발생할 수 있습니다. 크래시가 발생하는 경우 SRPBatcher를 비활성화해 보세요. 아래의 'Crashing in 2021/2022' 섹션을 참조하세요. 이 문제에 대한 Unity 버그 리포트는 [여기](https://issuetracker.unity3d.com/issues/sphere-gameobject-doesnt-get-rendered-when-using-unlit-dot-unlit-usepass-shader)에서 확인할 수 있습니다. 이 버그는 최신 버전에서 수정되었습니다.

> **2021 LTS에서**, 만약 선택한 품질 설정(Quality setting)에 대한 `RenderPipelineAsset`이 `SSAO` 렌더 기능을 사용하고 있다면, `SSAO` 기능의 `source` 속성을 `DepthNormals`에서 `Depth`로 변경하세요

### 카메라 설정

<figure><img src="/files/6VmBHVaTd7DwfAqIsO5M" alt=""><figcaption></figcaption></figure>

카메라를 다음과 같이 구성하세요:

* Rendering/Anti-aliasing: `None` (깨끗하고 선명한 픽셀 가장자리를 위해!)
* Rendering/Depth Texture: `Use Pipeline Settings`
* Output: `MSAA`가 비활성화되어 있는지 확인하세요. (만약 `Use Pipeline Settings`로 설정되어 있다면, 파이프라인에서 비활성화되어 있는지 확인하세요!)
* Post Processing: `Bloom`과 `Vignette` 등 포스트 프로세싱을 사용할 수 있으며, 일반적인 Unity 워크플로우에 따라 `Volume`을 통해 설정할 수 있습니다.

<figure><img src="/files/fHgaLPKO5CAbV7QpGuek" alt=""><figcaption></figcaption></figure>

최상의 결과를 얻기 위해서는 원근 투영(perspective projection)보다 직교 투영(orthographic projection)을 사용하는 것이 강력히 권장됩니다. 이는 픽셀 크리프(pixel creep)를 완전히 제거할 수 있기 때문입니다. 직교 투영에서는 객체의 크기가 화면에서 이동해도 변하지 않습니다.

카메라 게임 오브젝트에 `Camera Snap SRP MonoBehaviour`를 추가하세요. 이 동작은 픽셀화된 객체를 스냅하고 '수영(swimming)' 아티팩트를 방지하는 데 사용됩니다. 자세한 내용은 아래의 **픽셀 크리프 제거** 섹션을 참조하세요.

***

## 이전 버전에서 업데이트

**v1.4로 업데이트**

몇몇 셰이더 키워드의 이름을 아웃라인(Outline)과 외관(Appearance) 재질 간의 일관성을 위해 변경했습니다. 업데이트 후, `Window/ProPixelizer/Verify Materials` 도구를 실행하여 프로젝트 내의 깨진 재질을 수정하세요 (이 작업은 모든 재질을 새 키워드를 사용하도록 업데이트합니다).

**v1.6으로 업데이트**

이제 ProPixelizer의 일부 기능이 아웃라인 패스(Outline pass)의 실행을 요구합니다. `Appearance` 재질이 아닌 `Appearance+Outline` 재질을 사용하세요. 아웃라인을 제거하려면 아웃라인 알파 값을 0으로 설정하세요.

또한 `Project Settings > Graphics`의 `Always Included Shaders`에 추가할 새로운 재질이 있습니다: `Hidden/ProPixelizer/SRP/OutlineDetection`. 전체 목록은 이 가이드의 **프로젝트 설정** 부분에서 확인할 수 있습니다.

**v1.7로 업데이트**

이제 단일 `Appearance+Outline` 재질(`PixelizedWithOutline`)을 사용해야 합니다 - `Appearance` 재질은 더 이상 작동하지 않습니다.

`Source Buffer` 옵션이 제거되었습니다 - 픽셀화는 이제 다양한 플랫폼 간의 더 나은 지원을 위해 `ProPixelizer Metadata` 버퍼만 사용하여 결정됩니다. `Appearance` 재질은 `ProPixelizer Metadata` 버퍼로 렌더링하는 데 필요한 패스를 포함하고 있지 않습니다 (이 패스는 `PixelizedWithOutline` 셰이더에 의해 추가됩니다).

일부 재질 속성의 이름이 무작위화된 `ShaderGraph` 문자열에서 더 의미 있는 이름으로 변경되었습니다.

위의 두 문제를 해결하기 위해 자동 재질 업데이트 도구가 추가되었습니다. 재질을 업데이트해야 하는 경우, 인스펙터에 업데이트 버튼이 나타나며, 이를 통해 재질과 속성을 `PixelizedWithOutline` 셰이더로 마이그레이션할 수 있습니다.

더 이상 `Always Included Shaders`에 항목을 추가할 필요가 없습니다.

2019 버전은 더 이상 지원되지 않으며, 대신 2020 및 2021 버전의 LTS(Long Term Support) 버전을 사용할 수 있습니다. 2022에 대한 초기 지원도 있지만, 이 버전의 `URP` API는 현재 계속해서 자주 변경되고 있음을 유의하세요.

많은 업데이트는 `Window/ProPixelizer/Update and Verify Materials` 도구를 사용하여 자동으로 재질에 적용할 수 있습니다. 이 도구를 사용하기 전에 프로젝트를 백업하세요. 이 도구는 모든 재질을 검색하여 ProPixelizer 재질을 업데이트합니다.

**v1.8로 업데이트**

`Dithered transparency`가 기본적으로 비활성화되었지만, 인스펙터를 통해 재질 키워드를 통해 활성화할 수 있습니다.

**v1.8.1로 업데이트**

변경 사항 없음

<figure><img src="/files/UgbiWEaK6wRiYSftytzj" alt=""><figcaption></figcaption></figure>

***

## 예제를 확인하세요!

ProPixelizer는 다양한 설정을 보여주는 여러 예제를 포함하고 있습니다:

* **ProPixelizer/ExampleAssets/Example.unity:** 몇 가지 재질이 적용된 기본 프리미티브가 포함된 간단한 장면.
* **ProPixelizer/ExampleAssets/Floating/Example\_NoCreep.unity:** 많은 이동 객체가 있는 예제 장면으로, 카메라 스냅 동작을 설정하여 수영 및 픽셀 크리프를 방지하는 방법을 보여줍니다.
* **ProPixelizer/ExampleAssets/CameraStacking/CameraStacking.unity:** 카메라 스택에서 ProPixelizer가 작동하는 예제.
* **ProPixelizer/ExampleAssets/Randomizer/Randomizer.unity:** 네 개의 객체가 재질 속성을 무작위로 변경하는 장면으로, ProPixelizer로 가능한 다양한 스타일의 개요를 제공합니다.

## 픽셀화된 객체: 재질 설정

객체는 1x, 2x, 3x, 4x, 5x 화면 픽셀 크기의 매크로 픽셀(macropixel)로 픽셀화할 수 있습니다.

ProPixelizer는 두 가지 패스를 적용하여 픽셀화된 객체를 그립니다:

1. **Appearance 패스:** 색상을 줄이고, 필요한 경우 디더(dither)를 추가하며, 음영을 양자화(quantise)합니다.
2. **Outline 패스:** 객체 아웃라인을 그리는 데 필요한 정보(아웃라인 색상, 객체 ID)를 채우는 버퍼를 채웁니다.

ProPixelizer는 모든 필요한 패스를 객체에 추가하는 `PixelizedWithOutline` 재질 셰이더를 제공합니다. 전방의 `appearance` 패스는 `ProPixelizerBase`라는 `Shader Graph` 셰이더에 의해 생성되며, 이는 Unity의 `UsePass` ShaderLab 기능을 사용하여 `PixelizedWithOutline` 셰이더에 포함됩니다.

<figure><img src="/files/l8MByQi1eYarcu7ulzi4" alt=""><figcaption></figcaption></figure>

`PixelizedWithOutline` 재질은 객체를 그리고 아웃라인을 추가하는 데 필요한 모든 패스를 추가합니다. 이 재질은 커스텀 에디터 인스펙터를 사용하며, 셰이더 속성을 다음과 같이 분류합니다:

**Appearance**

* **Albedo Maps:** 객체의 기본 색상입니다. `Color`에 의해 추가로 색조가 적용됩니다. 이들의 알파 값은 디더드 투명도를 제어합니다.
* **Normals Maps, Emission Maps:** 법선 맵과 발광 맵 속성.
* **Color Grading 사용 여부:** 색상 팔레트를 사용하여 객체의 색상 그레이딩을 할지 여부를 설정합니다.
  * **Palette Texture:** 색상 그레이딩에 사용되는 텍스처 조회 테이블(LUT)입니다. ProPixelizer와 함께 잘 알려진 장치(NES, PAL, GameBoy 등)를 에뮬레이션하는 여러 LUT가 제공됩니다.
  * 팔레트 자산을 사용하여 자체 팔레트를 생성할 수 있습니다 (우클릭 -> `Create` -> `ProPixelizer` -> `Palette`). 이 팔레트는 LUT를 생성하는 데 사용됩니다. LUT는 또한 여기에서 시연된 색상 디더 패턴을 포함할 수 있습니다. 자세한 내용은 아래의 **색상 팔레트 및 디더 패턴** 섹션을 참조하세요.
* **Emission and Emission Color:** 재질에 언릿(unlit) 색상을 제공하는 데 사용됩니다. 예: 레이저 빔, 해골의 붉은 눈 등.
* **Diffuse and Emissive Vertex Color Weight:** 모델의 버텍스 컬러가 계산에 어떻게 포함되는지를 제어합니다. Unity의 파티클 시스템은 '파티클당' 컬러링을 위해 버텍스 컬러를 사용합니다. 일부 Synty 모델은 일부 메시 영역에 검은 버텍스 컬러를 가지고 있습니다.
* **Use Dithered Transparency:** 부분 알파(0에서 1 범위)가 무시되거나 디더드 투명도로 그려질지를 설정합니다.
* **Alpha Clip Threshold:** 메시의 일부를 그리기 위해 필요한 최소 알파 값입니다.

**Lighting**

* **Shadow and Lighting Ramp:**
  * **Lighting Ramp:** 셀 셰이딩(cell shading)에 사용되는 텍스처 램프입니다. 픽셀 아트 미학을 제공하는 데 도움이 됩니다. 객체를 렌더링할 때, 계산된 색상 값이 조명 램프를 샘플링하는 데 사용됩니다.
  * **Ambient Light:** 객체에 추가적인 빛을 제공합니다. 블록 색상과 장면의 환경 색상/구면 조화 간의 블렌드를 제어할 수 있습니다. 이는 색상 그레이딩과 함께 외관을 조정하는 데 도움이 될 수 있습니다.

**Pixelize**

* **Pixel Size:** 1-5 범위의 픽셀 크기입니다. 이는 화면 픽셀 단위의 하나의 '매크로 픽셀' 크기를 설정합니다.

**Outline**

* **ID:** 숫자입니다. 픽셀의 ID가 주변 픽셀과 다를 때 아웃라인이 그려집니다. 두 객체가 만날 때 아웃라인을 가져야 한다면 서로 다른 ID를 부여하세요 (예: 두 적). 아웃라인이 필요 없다면 동일한 ID를 부여하세요 (예: 캐릭터와 장비). 값은 0에서 255 사이의 정수여야 합니다.
* **Outline Color:** 아웃라인에 사용할 색상입니다. 알파 값은 장면 색상과의 블렌딩을 제어합니다. 알파 값 0은 보이지 않는 아웃라인, 1.0은 블록 색상, 그 사이의 값은 외관 재질 색상과의 블렌드를 위해 사용할 수 있습니다.
* **Edge Highlight:** 이 속성은 장면 법선을 검사하여 감지된 가장자리를 밝게 하거나 어둡게 하는 데 사용됩니다. 이를 사용하려면 `Forward Renderer Asset`의 `Pixelisation Feature`에서 `Use Normals For Edge Detection`이 활성화되어 있는지 확인하세요. 색상 값이 0.5 미만이면 가장자리를 어둡게 하고, 0.5를 초과하면 밝게 하며, 0.5일 경우 변화가 없습니다.

> **고급 사용자용 기술 노트:** 직접 `ShaderLab` 셰이더를 작성하는 경우, 단일 재질 셰이더 내에서 픽셀화와 아웃라인을 수행할 수 있습니다. 프래그먼트 셰이더에서 `PixelUtils.hlsl`의 `PixelClipAlpha_float` 출력을 `clip()`해야 하며, `OutlinePass.hlsl`을 포함하여 `"LightMode" = "Outlines"` 태그가 있는 별도의 패스를 추가해야 합니다.

## 픽셀 크리프 제거

\*\*픽셀 크리프(Pixel Creep)\*\*는 픽셀 아트로 3D 객체를 렌더링할 때 자주 발생하는 문제로, 객체가 화면을 이동할 때 깜박거리는 것처럼 보이는 현상입니다. 이 비디오에서 예시를 확인할 수 있습니다: <https://www.youtube.com/watch?v=lO8O5tY-wZI>. 크리프는 객체가 차지하는 픽셀 수와 객체가 픽셀에 대해 정렬되는 방식이 화면을 이동하면서 변하기 때문에 발생합니다.

픽셀 크리프는 렌더링 전에 객체를 화면의 픽셀에 맞춰 정렬함으로써 제거할 수 있습니다. 픽셀 크리프는 직교 투영(Orthographic Projection)에서만 완전히 해결할 수 있습니다. 원근 투영(Perspective Projection)에서는 객체의 크기가 화면에서 이동함에 따라 변하기 때문입니다.

**직교 투영에서 픽셀 크리프 제거하기**

직교 투영을 사용할 경우, ProPixelizer는 다음 두 가지 `MonoBehaviour`를 통해 픽셀 크리프를 처리할 수 있는 기능을 제공합니다:

1. **CameraSnapSRP MonoBehaviour**: 카메라에 부착됩니다.
2. **ObjectRenderSnapable MonoBehaviour**: 렌더링할 메시에 부착됩니다.

이 `MonoBehaviour`들은 렌더링 전에 객체의 위치를 스냅하고, 렌더링 후에는 원래 위치로 복원합니다. 이 구현은 변환 계층(transform hierarchies)을 준수합니다.

#### 스냅 각도(Snapping Angles)

<figure><img src="/files/ZpWTjwqLceHy6Mk7IRTJ" alt="" width="298"><figcaption></figcaption></figure>

#### 픽셀 그리드 정렬(Aligning Pixel Grids)

`ObjectRenderSnapable MonoBehaviour`는 자식 객체의 픽셀 그리드를 루트 변환과 정렬하는 방법도 제공합니다. 이는 장비와 같은 경우에 유용합니다 - 여러 개의 메시가 있지만 전체 객체가 하나의 스프라이트처럼 보이도록 하고 싶을 때 사용합니다. `Align Pixel Grid` 속성을 `true`로 설정하면 객체의 픽셀 그리드가 픽셀 그리드 참조(transform) 또는 이 속성이 설정되지 않은 경우 계층의 루트 변환과 정렬됩니다.

왼쪽 그림에 예시가 나와 있는데, 루트 변환의 픽셀에 정렬된 경우와 그렇지 않은 경우의 파란색/녹색 방패가 어떻게 보이는지 보여줍니다. 원래 픽셀에 정렬되지 않은 경우, 3x3 픽셀 크기에서 두 객체의 약간의 1픽셀 오정렬을 가까이에서 볼 수 있어야 합니다.

***

## (선택 사항) 객체 아웃라인 제어(Control over Object Outlines)

외부 아웃라인은 `Outline/ID` 재질 속성에 따라 두 인접 픽셀이 다른 ID를 가질 때마다 그려집니다.

<figure><img src="/files/l3GjW9IFr7fsCZ2IWCcW" alt="" width="250"><figcaption></figcaption></figure>

**OutlineControl MonoBehaviour**는 객체의 아웃라인을 제어할 수 있는 몇 가지 추가 방법을 제공합니다:

* 사용할 ID를 지정하거나 `Use Random ID`를 `true`로 설정하여 런타임에 랜덤 ID를 생성할 수 있습니다.
* `UseRootID`를 `true`로 설정하면 아웃라인 재질이 루트 변환의 ID를 사용하도록 합니다. 이는 루트 변환에 `OutlineControl MonoBehaviour`가 존재해야 합니다. 픽셀 그리드 정렬과 마찬가지로, 이는 플레이어 모델에 부착된 장비와 같은 자식 객체에 유용합니다 - 전체 플레이어 주위에 아웃라인이 그려지고, 개별 장비 주위에는 아웃라인이 그려지지 않도록 합니다. 왼쪽 이미지에서는 모든 부착된 장비(예: 방패, 석궁, 창문 등)에 대해 `UseRootID`를 `true`로 설정했지만, 바퀴 주위에는 설정하지 않았습니다.
* 색상도 마찬가지입니다. `Color`로 아웃라인에 사용할 색상을 지정할 수 있으며, `UseRootColor` 여부도 설정할 수 있습니다.

이러한 변경 사항 중 많은 부분은 플레이 모드로 전환해야만 적용됩니다(재질 인스턴싱이 필요하기 때문입니다).

> **고급 사용자용 기술 노트:** ID는 8비트 정밀도로 ProPixelizer 메타데이터 버퍼에 렌더링되므로, 지정할 수 있는 ID 값은 256개로 제한됩니다.

<figure><img src="/files/6VyvnoCvt275IbTLsP9V" alt="" width="369"><figcaption></figcaption></figure>

#### Depth Test 아웃라인(Depth Test Outlines)

이 옵션은 `ForwardRenderer` 에셋의 `PixelisationFeature`에서 찾을 수 있습니다. 활성화하면 아웃라인은 이웃 픽셀보다 앞에 있는 가장자리 픽셀에 대해서만 그려집니다. 이는 수동으로 그린 스프라이트의 느낌을 구현하는 데 도움이 되며, 아웃라인이 앞의 지오메트리에 따라 변경되지 않습니다. 두 설정의 비교는 여기 이미지에서 확인할 수 있습니다. Depth Test가 꺼져 있을 때, 빨간 상자 내부 차량 위에 그려진 어두운 아웃라인을 특히 주의 깊게 보세요.

***

## 색상 팔레트 및 디더 패턴 도구(Color Palettes and Dither Pattern Tools)

많은 오래된 게임들은 하드웨어 제한으로 인해 축소된 색상 팔레트를 사용했습니다! 예를 들어, 원래의 GameBoy는 4가지 밝기 값만 표시할 수 있었고, SNES는 한 번에 256가지 색상만 표시할 수 있었습니다. 게임들은 종종 디더링을 사용하여 색상 깊이를 증가시키는 효과를 모방했습니다.

ProPixelizer는 축소된 색상 팔레트와 디더 패턴을 생성할 수 있는 도구 세트를 제공합니다. 두 가지는 텍스처 룩업 테이블(LUT)에 결합되어, 객체를 렌더링할 때 최소한의 오버헤드로 색상 그레이딩에 샘플링됩니다.

<figure><img src="/files/EoiLmgOZIVHwuoeS74tw" alt=""><figcaption></figcaption></figure>

### 디더 패턴(Dither Patterns)

ProPixelizer는 4x4 디더 패턴을 지원합니다. 디더 패턴 자산(Create -> ProPixelizer -> Dither Pattern)을 생성하여 자신만의 디더 패턴을 디자인할 수 있습니다. 에디터는 값의 4x4 그리드와 부드러운 흑백 그라데이션에 대해 디더 패턴이 어떻게 나타날지 미리보기를 표시합니다. 그리드의 각 '값'은 0에서 16까지 범위이며, 이 값은 4x4 패턴에서 해당 픽셀이 활성화될 '임계값'을 나타냅니다. 일부 예제 패턴은 `ProPixelizer/Palettes/DitherPatterns`에 포함되어 있습니다.

<figure><img src="/files/3luZNhJbgNMDcM7dMc6E" alt=""><figcaption></figcaption></figure>

### 색상 팔레트(Color Palettes)

자신만의 팔레트를 구성하려면 팔레트 자산(Create -> ProPixelizer -> Palette)을 사용하세요. 팔레트를 구성한 후, 'Generate' 버튼을 눌러 ProPixelizer 재질에서 사용할 텍스처 LUT를 생성할 수 있습니다.

구성할 수 있는 여러 속성이 있습니다:

* **Source Texture**: 색상을 샘플링할 소스 텍스처입니다. 아래의 텍스트는 소스에서 몇 가지 색상이 식별되었는지 알려주며, 이는 룩업 테이블을 생성할 때 색상 매칭에 사용됩니다.
* **Color Reduction Algorithm**: 가장 유사한 색상을 결정할 때 사용할 방법입니다. RGB 공간, HSV 공간 또는 HSV 공간의 '값(value)'만을 사용하여 비교할 수 있습니다(색상이 중요하지 않은 흑백 팔레트에 적합).
* **Dithering**: 디더 패턴을 사용할지 여부를 설정합니다.
* **Output**: 생성된 LUT 파일 이름 옵션입니다.

## 계단식 애니메이션 도구(Stepped Animation Tools)

<figure><img src="/files/a9OAFJxh09XWJue3nXfb" alt=""><figcaption></figcaption></figure>

전통적인 픽셀 아트 게임은 손으로 그린 스프라이트 시트를 사용했고, 캐릭터는 표시되는 스프라이트를 변경하여 애니메이션을 구현했습니다 - 결과적으로 몇 가지 명확한 포즈를 가진 '플립북(flipbook)'과 같은 효과가 나타났습니다. 예를 들어, 달리기 애니메이션의 사이클은 약 5프레임 정도일 수 있습니다. 반면 3D 애니메이션은 일반적으로 키 프레임 간의 보간(interpolation)을 통해 부드러운 움직임을 생성합니다.

ProPixelizer는 사용자들이 플립북 효과를 달성할 수 있도록 애니메이션 클립을 자동으로 계단식 버전으로 변환하는 유틸리티를 제공합니다. 애니메이션 클립의 복사본이 생성되고, 키 프레임이 감소되며, 보간이 `None`으로 설정됩니다. 이 유틸리티를 사용하면 Asset Store의 표준 애니메이션을 픽셀 아트 미학을 유지하면서 사용할 수 있습니다.

이 도구를 사용하려면 계단식 애니메이션 자산(Create -> ProPixelizer -> Stepped Animation)을 생성하세요. 설정을 구성한 후 'Generate' 버튼을 눌러 소스 클립의 복사본을 생성합니다.

마지막으로, 애니메이션 트리(anim trees)가 있는 클립을 사용하는 경우, 애니메이션 트리의 블렌딩을 비활성화하는 것이 좋습니다. 그렇지 않으면 상태 변경이 프레임 간 보간되어 플립북 느낌을 깨뜨릴 수 있습니다.

## 좋은 픽셀 아트 느낌을 얻기 위한 팁

ProPixelizer를 사용할 때 염두에 두어야 할 몇 가지 팁을 아래에 정리했습니다:

1. **픽셀 크기보다 작은 지오메트리의 작은 특징을 피하세요:**
   * 그렇지 않으면 보임과 사임이 반복되며 깜박일 수 있습니다.
   * Synty에서 제작된 것과 같은 저폴리(low poly) 자산은 작은 디테일이 없어 잘 작동합니다.
2. **ProPixelizer의 셀 셰이딩은 '부드러운 법선(smooth normals)'을 가진 저폴리 모델을 임포트할 때 더 잘 보입니다:**
   * 각 면에 걸쳐 색상 밴드가 나타날 수 있습니다.
3. **옛날 스프라이트 아트는 일반적으로 몇 가지 다른 시점만 가집니다:**
   * 객체의 각도를 스냅하여 동일한 느낌을 얻으세요.
4. **애니메이션의 키 프레임 수를 줄이고 '고정(constant)' 보간을 사용하여 계단식 느낌을 주세요:**
   * 스프라이트 시트를 넘기는 것 같은 효과를 얻을 수 있습니다.
5. **색상 그레이딩을 사용할 때는 특정 색상 팔레트를 타겟으로 자산을 생성하는 것이 도움이 됩니다:**
   * 다양한 옛날 색상 팔레트 간에는 큰 차이가 있습니다.
   * 예를 들어, GameBoy는 흑백이며, PAL은 어둡고 투박한 느낌을 가집니다.

<figure><img src="/files/Q3SDuYuUfMgkV5PusYww" alt=""><figcaption></figcaption></figure>

**참고:** 픽셀 아트 게임에서 일반적으로 볼 수 없는 깊이의 필드(Depth-of-Field) 포스트 프로세싱, 프로시저 애니메이션 등도 멋지게 구현할 수 있습니다.

ProPixelizer를 사용하면서 즐거운 시간 되시길 바랍니다. 질문이나 문제가 있으시면 언제든지 메시지 주세요. 여러분이 ProPixelizer로 무엇을 만드는지 듣게 되면 매우 기쁩니다!

감사합니다,

Elliot

***

## FAQ

<figure><img src="/files/w4qPyGCYlrXBPnpnVsqN" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/6Ewpsw5GwV5TeL7xuGJe" alt=""><figcaption></figcaption></figure>

### 객체가 점들처럼 보입니다?

**문제점:** 픽셀화된 객체가 디더링된 것처럼 렌더링될 때 점들의 무리처럼 보입니다.

**해결 방법:** `Scriptable Render Pipeline`의 `Render Features`에 `Pixelisation Feature`를 추가해야 합니다. 자세한 내용은 위의 **'시작하기(Getting Started)'** 섹션 아래에 있는 \*\*'렌더 파이프라인 설정(Setting Up The Render Pipeline)'\*\*을 참조하세요.

**왜 이런 현상이 발생하는지 궁금하다면**, ProPixelizer가 어떻게 작동하는지 설명하는 이 [Medium 기사](https://medium.com)를 참고하세요. ProPixelizer에서 사용된 방법은 **Attempt #3** 아래에 설명되어 있습니다. 객체는 먼저 디더링된 점들의 매트릭스로 그려진 다음, 포스트 프로세스가 주변 화면 픽셀을 채워 최종 픽셀화된 이미지를 생성합니다.

**콘솔에 `ScreenPostProcessing` 셰이더를 컴파일할 때 셰이더 오류가 나타난다면**, 자세한 내용을 포함하여 저에게 이메일을 보내주세요! 포스트 프로세스가 작동하지 않을 때도 점들이 나타나는데, 이는 버그입니다.

**참고:** ProPixelizer는 재질의 알파가 1이 아닐 때 투명도에 대한 디더링도 구현합니다. 이는 텍스처와 색상 모두에 적용됩니다. 예제 장면이 제대로 렌더링되지만 여러분의 에셋이 디더링된 것처럼 보인다면, 재질 색상과 텍스처의 알파 값을 확인하세요.

***

### 셰이더가 핑크색으로 나타납니다!

**문제점:** ProPixelizer 셰이더가 Unity에서 올바르게 컴파일되지 않아 핑크색으로 표시됩니다. 이는 일반적으로 두 가지 이유로 발생합니다:

1. **Unity 패키지 매니저가 파일을 프로젝트에 추가하지만 올바르게 임포트하지 않는 경우.**

   **해결 방법:** 프로젝트의 `Assets` 폴더에서 ProPixelizer 폴더를 우클릭하고 \*\*'Reimport'\*\*를 클릭하세요.
2. **일부 Unity 버전에서 셰이더 그래프가 너무 많은 변형을 생성하여 컴파일에 실패하는 경우.** 다음과 같은 오류가 발생할 수 있습니다:

   ```
   Error in Graph at Assets/ProPixelizer/ShaderGraph/Pixelised.shadergraph at node PBR Master: Graph is generating too many variants. Either delete Keywords, reduce Keyword variants or increase the Shader Variant Limit in Preferences > Shader Graph.
   ```

   **해결 방법:** `Edit > Preferences > Shader Graph`로 이동하여 셰이더 변형 제한(Shader Variant Limit)을 기본값인 128에서 256으로 증가시킵니다. 그 후 ProPixelizer 폴더를 우클릭하고 \*\*'Reimport'\*\*를 클릭하세요. 그러면 모든 것이 정상적으로 작동할 것입니다.

***

### 객체가 보이지 않습니다!

**문제점:** 때때로 Unity의 라이브러리가 `PixelizedWithOutline` 셰이더를 잘못 컴파일하는 것 같습니다.

**해결 방법:** `ProPixelizer/SRP/PixelizerWithOutline` 셰이더를 우클릭하고 \*\*'Reimport'\*\*를 클릭하여 문제를 해결할 수 있습니다. v1.7에서는 에디터가 시작되거나 플레이 버튼을 누를 때 자동으로 이를 수행하는 도구가 추가되었습니다. 이 문제는 SRPBatcher 문제와도 관련이 있습니다 - ProPixelizer를 사용하지 않는 경우에 대해 포럼에 보고한 제 게시물을 참조하세요.

***

### \[Worker0] 텍스처 생성 실패. 이 플랫폼에서는 'None'이 Render 사용으로 지원되지 않습니다. 및 빈 썸네일

**문제점:** 이 오류는 현재 일부 Unity 2021 및 2022 버전에서 `Render Pipeline Asset`의 `Opaque Textures` 체크박스가 활성화되어 있을 때 발생합니다. 자세한 내용은 [Unity 포럼의 이 스레드](https://forum.unity.com/)를 참조하세요.

**해결 방법:** `Render Pipeline Asset`에서 `Opaque Textures`를 비활성화해도 ProPixelizer는 여전히 작동합니다.

***

### 2021/2022에서의 크래시

**문제점:** 최근 버전의 Unity 2021 및 2022를 사용할 때 일부 사용자들이 크래시를 경험하고 있습니다. 조사 결과, 이는 최근 SRPBatcher에 도입된 버그로 인해 발생한 것으로 보입니다. 이 버그는 빌드에는 영향을 미치지 않지만 에디터에만 영향을 줍니다. 이 문제에 대한 Unity 이슈 트래커는 [여기](https://issuetracker.unity.com/)에서 확인할 수 있습니다.

**임시 해결 방법:**

1. 버그가 발생하지 않는 Unity 2021.3.6f1 LTS 버전으로 롤백하세요.
2. 또는 SRPBatcher를 비활성화하세요:
   * `Forward Renderer Asset`에서 옵션을 찾아 비활성화합니다.
   * 디버그 모드에서 인스펙터를 사용하세요 (인스펙터 탭을 우클릭하고 \*\*'Debug'\*\*를 클릭).

***

**요약:** ProPixelizer를 사용하면서 발생할 수 있는 다양한 문제와 그 해결 방법에 대해 설명드렸습니다. 문제가 지속되거나 추가적인 도움이 필요하시면 언제든지 문의해 주세요. 여러분의 프로젝트가 원활하게 진행되길 바랍니다!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lazyartisan.gitbook.io/note/main-page/undefined/propixelizer-user-guide-v1.8.1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
