# Part 22 | 스텐실(Stencil)

스텐실 버퍼

* 일반적으로 한 픽셀에 8비트 (`0~255~`) 값을 가진 버퍼 이미지
* 프레임 디버거를 활용하지 않는 이상 화면에는 안 보인다
* 유니티에서는 보통 Z 버퍼와 함께 만들어진다
* 흑백의 이미지로 되어 있는 현재 화면 사이즈의 빈 이미지

## 01 스텐실 옵션

Stencil

* Value : 스텐실을 제어하기 위한 레퍼런스 값. 지금 그리고자 하는 나의 스텐실 값이다.
* Compare Function : Ref값을 비교해서 어떤 행동 할 건지
* Pass, Fail : 그리는데 성공하거나 실패했다면 그 픽셀 위치 스텐실 값 어떻게 할건지
* Z Fail : 그리는데 실패했는데 그 이유가 Z 때문이라면 그 픽셀 위치 스텐실 값 어떻게 할 건지

## 02 스텐실 준비하기

스텐실은 투시 카메라, X-Ray 카메라 등 보이지 않는 것을 보이게 한다거나 하는 등의 작업에 많이 사용된다

![](https://velog.velcdn.com/images/biomatrix117/post/ecdac674-da32-460c-85b7-7b8de524093a/image.png)

* 조각상에 Statue 레이어, 벽에 Wall 레이어를 설정한다
* Create > Rendering > URP Universal Renderer > 'Stencil Renderer' 명명
* 렌더러 파이프라인 애셋 선택 > Rederer List에 Stencil Renderer 추가 > Set Default
* Stencil Renderer 선택
  * Opaque Layer Mask에서 Wall 레이어 끄기
  * Add Renderer Feature > Render Objects > `Wall Renderer` 명명
    * Event는 AfterRenderingOpaques, Layer Mask는 Wall 선택
    * 불투명 오브젝트를 그린 다음에 Wall을 그리라는 명령 내린 것
  * Overrides > Stencil 활성화
    * Value는 1, Compare Function은 Equal, Pass는 Replace
    * 다른 스텐실 값을 비교해(Compare) 봐서 어떤 값이 있더라도 그냥 다 그리고(Always), 그리는데 성공한(Pass) 픽셀은 내 Value인 1로 바꿔(Replace)라는 뜻
    * Wall이 있는 부분은 스텐실 값이 1이 되고, 나머지 영역은 전부 0으로 남아있다.
* 셰이더 만들고 붉은색을 Base Color에 연결
  * Graph Inspector > Depth Test > Always
  * 기존 Depth 값을 무시하고 찍어버리기 때문에 어떤 경우라도 가장 앞에 찍힘
* Stencil Renderer 선택 > 새 'Render Objects' 렌더러 피쳐 추가
  * Event는 AfterRenderingOpaques, Layer Mask는 Statue 선택
  * Overrides > Material > 만들었던 붉은색 셰이더를 적용한 머테리얼 설정
  * Overrides > Stencil 활성화
    * Value는 1, Compare Function은 Equal
    * 스텐실 값이 1이랑 같을 때만 그린다는 명령 내린 것

wall 그리고, 그려진 영역에 스텐실 값 1로 적은 다음에\
스텐실 값 1인 곳에 빨간색 머테리얼 가진 석상을 다시 한 번 그린 것.


---

# 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/books/urp/part-22-or-stencil.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.
