오늘은 C프로젝트에서 Shader를 이용하여 오브젝트가 물 background 위에 있을 때 잠겨있는 듯한 모습을 연출하려고 한다.
유니티에서 Shader를 만드는 방법은 크게 두 가지 방식이 있다.
첫 번째론 셰이더 언어를 이용하여 직접 코드를 작성하여 만드는 방식이고,
두 번째 방법으론 유니티에서 제공하는 비주얼 툴인 Shader Graph를 이용하여 만드는 방식이다.
나는 두 가지 방법 중 후자를 선택하여 만들어보려고 한다.
시작에 앞서 나는 유니티 프로젝트를 진행하면서 한 번도 셰이더를 적용하여 결과물을 만들어본 적이 없다...
그렇다보니 막히는 부분이 너무 많았다... ㅠ
그렇기 때문에 먼저 깊게까진 아니더라도 Rendering Pipeline에 대해서 공부를 해보았다.
그 이후 한 예제를 들어 셰이더를 만드는 방법에 대한 유튜브 영상도 참고해 보았다.
아래의 개발 과정은 셰이더에 대한 기본적인 지식이 있다는 가정하에 설명이 되므로
혹시 보는 과정 중 설명이 부족한 부분이 있다면 직접 찾아서 궁금증을 해결하자!
이제 본격적으로 직접 셰이더 그래프를 이용하여 만들어 볼 시간이다!
그러기 위해선 먼저 셰이더 그래프를 먼저 생성해 준다.
셰이더 그래프를 만드는 종류는 여러 가지가 있는데 이 중 현재 필요한 형태의 셰이더 그래프를 생성해 주면 된다.
기본적으로 이 프로젝트는 지금 당장은 아니지만 URP를 적용하여
Lighting에 대한 처리를 하기 위해 "Sprite Lit Shader Graph"로 생성했다.
우선 아이디어가 필요했다.
어떤 방식을 이용하여 물에 잠겨있는 듯한 연출을 표현할지...
처음 든 생각은 float형으로 depth 필드를 만든 이후 depth의 크기만큼 texture 일부분의 투명도는 0으로 해주었다.
우선 Texture의 특정 y값을 기준으로 아랫부분은 투명도를 0으로 해주기 위해 UV 좌표에서 y를 받아왔다.
적용할 머테리얼에서도 특정 y값을 조절할 수 있게 하기 위해
float형으로 _Depth라는 프로퍼티를 만들어 해당 값과 y를 빼주었다.
이후 step 노드를 통해 예쁘게 다듬어준다.
이렇게 나온 결과와 Main Texture의 알파값을 곱해준다면 특정 y값을 기준으로 아랫부분은 투명도가 0이 될 것이고 윗부분은 정상적으로 렌더링 되는 결과가 나올 것이다.
완성된 그래프를 저장한 이후 새로운 머테리얼을 만들어 방금 전에 만들어준 셰이더 그래프를 드래그 앤 드롭하여 적용시켜 준다.
만들어진 머테리얼을 오브젝트에 적용하여 결과를 확인하면 위와 같이 잘 적용되는 모습을 볼 수 있다.
하지만 물 위에 있는 듯한 느낌이 들긴 하지만 약간 어색함이 남아있다. (배경은 아직 없어 임시로 적용...)
아무래도 이 어색함은 잠겨있는 부분이 잔상처럼 보이지 않기 때문에 어색해 보이는 느낌이 드는 것 같아
texture의 일부 투명도를 0으로 줄였지만 조금 올려 뒤에 있는 물 배경과 형체가 자연스럽게 보이도록 수정해 보았다.
기존 그래프에서 일부를 추가하여 수정해 주었다.
우선 아랫부분과 윗부분을 나누어 아랫부분만 투명도를 조절할 수 있도록 만들어주었고
두 결과 값을 더하여 Main Texture의 알파값과 곱해주면 된다.
완성된 그래프를 저장한 뒤 다시 오브젝트를 확인해 보면 잘 적용된 모습을 볼 수 있다.
확실히 이전 방식보단 자연스러운 느낌이 남아있다.
지금 적용한 방식도 동적인 느낌이 안나다 보니 어색한 느낌이 여전히 남아있는 거 같다.
하지만 연출적인 부분에서 완전히 정해진 부분이 없어 정해지는 대로 더 나은 방식으로 자연스럽게 적용시켜보자 한다.
현재는 이 방식까지 밖에 생각 못했다 보니 혹시 다른 좋은 의견이 있으시다면 댓글 남겨주시면 감사하겠습니다!
'Unity' 카테고리의 다른 글
유니티 프로젝트 개발 일지 - 7 (Animator 블랜드 트리) (0) | 2024.12.24 |
---|---|
유니티 프로젝트 개발 일지 - 6 (커스텀 에디터 활용) (1) | 2024.12.23 |
유니티 프로젝트 개발 일지 - 5 (무기 구현) (0) | 2024.12.22 |
유니티 프로젝트 개발 일지 - 4 (유니티 Line 그리기) (0) | 2024.12.21 |
유니티 프로젝트 개발 일지 - 3 (렌더링) (0) | 2024.12.20 |