XRay Shader 작성법을 알아가 봅시다!
먼저, Material을 Unlit으로 바꾸죠!!! Unlit이라 하면 !!! 빛의 영향을 받지 않는다는 것이죠! 나머지 Opaque, Depth Write , Depth Test 등등의 사용법은 아직 모르겠다 ㅎㅎ
Fresnel Effect를 추가합니다. Fresnel Effect란 무엇일까요?
프레넬 효과
현실 세계에서 오브젝트를 시각적으로 구분할 수 있는 중요한 방법 중 하나는 지표각에서 반사가 더 강해진다는 사실과 관련이 있습니다(아래 그림 참조). 이를 프레넬 효과라고 합니다.
(출처 https://docs.unity3d.com/kr/530/Manual/StandardShaderFresnel.html)
주목할 점이 두 가지 있습니다. 첫째, 이 반사는 구체의 가장자리 주변에만 나타납니다(이 때 구체 표면이 지표각에 있으므로). 둘째, 머티리얼의 평활도가 증가할수록 반사가 더 잘 보이고 선명해집니다. 이 뜻이 무엇이냐?
위 사진을 봐라, 오브젝트의 가장자리만 표시되고 안에는 투명한게 보이느냐? 보입니다... 이게 프레넬 효과를 뜻하는바 같사옵니다..!
자 차근차근 뜯어봅시다. 먼저 Simple Noise부터 봅시다. Simple Noise는 무엇이냐?
노드를 생성해보면 이렇게 생겨먹은애다! 유니티공식홈페이지에선 이렇게 설명된다.
Description
Generates a simple, or Value, noise based on input UV. The scale of the generated noise is controlled by input Scale.
즉 UV에 집어넣을 노이즈다! 노이즈라는건 무엇이냐? 우리가 일상생활에 많이 접하는 단어 아닌가?! 노이즈 아오 시끄러워! 이럴때 뭔가 지직거리는 TV의 모습이 연상될텐데 그거야 그거! 저런 노이즈를 UV로써 활용하는거야!
노이즈가 작을수록 '지지직' 거리는게 줄어든다고 생각하면 좋아!
다음으로 Tiling and offset이다. 이게뭐냐?
유니티 공식 홈페이지에선 이렇게 설명되어있다.
Description
Tiles and offsets the value of input UV by the inputs Tiling and Offset respectively. This is commonly used for detail maps and scrolling textures over Time.
계쏙 UV가 나와서 그러는데 UV란 좌표계다. (0,0) 부터 (1,1)이 존재하는데 이 좌표내에 어떤 위치에 텍스쳐를 집어넣을지를 말하는 것이다. Tiling이라 함은 곱하기고 Offset이라 함은 더하기다~
Time과 Mulitply를 이용해 offset에 넣어줬고 Tiling의 값은 임의로 줬다! 그럼 Time에 따라 Simple Noise값이 변하겠죠?
그다음 Power! 말그대로 선이 얇아보여서 검은색은 더 검게, 하얀색은 더 하얗게 해주었습니다~!
이제 이걸 프레넬효과에 Mulitply해줘서 최종적으로 Lerp를 통해 마무리해주면 됩니다!(Lerp하는 이유는 모릅니당 좀더 부드럽게 하기 위해서인가?)
그래프 작성을 끝냈으면 에디터로 돌아옵시다!
먼저 XRay를 적용시킬 Layer를 하나 추가합시다! 그리고 해당 오브젝트에 해당레이어를 클릭합니다!
그다음 프로젝트 세팅 -> 그래픽에 들어가면 해당 URP가 보이는데 더블클릭하면 오른쪽 하이러키창에 저렇게 뜨고 Renderer List에 있는 거를 더블클릭합니다!
새로운 Render Objects를 만들어줍시다! Filters에 Layer Mask를 해당 레이어로 맞게 바꿔주고 Override를 눌러 해당 메테리얼을 할당해주고 Depth를 클릭하고 Write Depth를 꺼줍니다! 그리고 Depth Test를 Greater로 바꿔줍니다! 여기까지는 가려지는 쪽에서의 설정이고
가려지지 않는 쪽에서의 설정은 Write Depth 체크와 메테리얼 할당제외 빼곤 없습니다!
Depth가 뭔지 궁금해서 체크랑 언체크를 해봤는데 체크를 해주면 해당 오브젝트의 모습이 그려지고 언체크하면 해당 오브젝트가 렌더링 되질 않습니다!
Write Depth 는 색깔까지 그려집니다!
끗!