Unity Stencil를 이용한 착시 방

Stencil이 적용된 4개의 방

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

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

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

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

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

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

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

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

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

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

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하나를 생성한 후 복붙해서 넣어준다

 

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

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

 

PipeLine Asset에 들어가준다.

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

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

Renderer Features아래에

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

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

 

Opaque 설정

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

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

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

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

Transparent 설정

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

 

설정은 이게 끝이다

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