Unity Stencil를 이용한 착시 방

StencilGIF.gif
Stencil이 적용된 4개의 방
etc-image-1

먼저 4개의 Quad로 둘러싸인 방을 하나 만들어준다

이때 카메라가 바라보는 정면에는 Quad를 설치하지 않는다

따로 Stencil Mask를 설치할 예정이기 때문이다

이제 Quad를 설치하는 Rotation의 값도 중요하다

etc-image-2

3축의 바라보는 방향이 중요하다

Z축같은경우 Quad가 바깥쪽을 바라보게 해야한다

나머지 X, Y축은 상관없지만 Z축은 항상 바깥쪽을 바라봐야 한다

etc-image-3

Stencil1 포함 자식 객체들의 Layer을 전부 Stencil1로 바꾸어준다

etc-image-4

Quad하나를 생성한 후 Z축이 방안을 바라보도록 만든다

이때 Stencil Mask의 Layer는 default로 내비두면 된다

etc-image-5

Stencil Mask의 Materials을 만들어줘야한다

Shader "Examples/Stencil"
{
    Properties
    {
		[IntRange] _StencilID ("Stencil ID", Range(0, 255)) = 0
    }
	SubShader
    {
        Tags 
		{ 
			"RenderType" = "Opaque"
			"Queue" = "Geometry"
			"RenderPipeline" = "UniversalPipeline"
		}

        Pass
        {
			Blend Zero One
			ZWrite Off

			Stencil
			{
				Ref [_StencilID]
				Comp Always
				Pass Replace
				Fail Keep
			}
        }
    }
}📋

Shader하나를 생성한 후 복붙해서 넣어준다

etc-image-6

 

그다음 메테리얼을 생성하고 Stencil ID 값을 1로 설정한다

그 다음 Stencil Material을 생성한 후에 Quad에 부착하면 된다

 

PipeLine Asset에 들어가준다.

etc-image-7

Opaque Layer Mask과 Transparent Layer Maks에서 Stencil1~(해당하는 값)까지 체크 해제해주면 된다

etc-image-8

다음으로 파이프라인설정을 수정해줘야 한다

Renderer Features아래에

etc-image-9

Add Renderer Feature를 클릭하고 Render Objects를 눌러주면된다

하나는 Opaque, 하나는 Transparent로 생성해준다

 

etc-image-10
Opaque 설정

밑줄친 부분을 위 사진처럼 설정하면 된다

짤막하게 공부해본 결과 알아낸 거는

Value와 아까 위에서 설정한 Stencil ID값이 Equal일 경우에만 뒤에 오브젝트들이 보이는 거다

Equal이므로 값이 다르면 안된다

etc-image-11
Transparent 설정

이것도 위 사진처럼 설정해주면 된다 

 

설정은 이게 끝이다

각 방마다 Stencil ID를 주고 파이프라인에서 Value값을 동일하게 설정해주면 끝이다!