4.3

조명은 씬에 귀속된다. 그림자의 색깔도 마찬가지다. 환경에 의해 전체적인 색조가 탁해야 하므로 셰이더 드라이버의 Start()함수에 색 조절 함수를 추가해주어야 한다. 이를 위해 아무렇게나 지어놨던 셰이더의 변수명을 통일했다. 캐릭터가 많았다면 한 고생했을 것 같은 작업이다.
비가 떨어지는 효과를 위해 이펙트를 좀 배워야 한다. 파티클의 기본 기능이야 카노를 제작할 때 지겹도록 써봤으니 대충은 알고 있지만, SDF텍스처를 라이프타임에 맞게 컷아웃하는 기능을 모른다. 언리얼의 머티리얼엔 다이나믹 파라메터라는 것이 있는데, 유니티에선 이를 어떻게 쓸까? rito15님의 블로그에 그 해답이 있다.
https://rito15.github.io/posts/unity-particle-system-custom-data
개념이 조금 복잡해 보이지만, 아마 익숙해지면 편하게 사용할 수 있을 것으로 보인다.

그렇게 꼴랑 만든 것이 이것[…] 별 거 아닌 것 같은데 생각보다 많은 걸 공부해야 했다. 이걸 어따 쓰냐면…

바닥을 축축하게 보이고 싶을 때 쓴다. 이제 화면도 축축해 보이고 싶다. 이를 위해 필요한 것이 렌더타깃인데… 이걸 또 어찌하는 지 모른다[…] 내일 공부해 보자.

렌더텍스처에 대해서 공부. URP에선 카메라의 메뉴가 조금 변했기 때문에 렌더 텍스처를 넣는 위치가 튜토리얼과 다를 수 있다. 기존엔 Rendering탭에 있었지만, URP(혹은 최신버전)에선 Output탭에 있으니 주의하자.

렌더 텍스처는 확보했다. 이제 이것을 포스트프로세스와 연결해야 한다. 언젠가는 해야 할 공부였으니 지금 해보자.
자료를 몇 개 찾아본 결과, 유니티의 포스트프로세싱 방법은 많이 변했다. 어차피 셰이더는 그대로일텐데, 볼륨을 적용하는 방법이 많이 변한 것 같다. 이렇게 되면 배우기가 참 힘들다. 튜토리얼이 맞지 않기 때문.
https://darkcatgame.tistory.com/121
이 블로그에 자세히 설명되어 있는 것 같다. 긴 여정이 될 것 같으니 각잡고 공부해보자.
…였는데 이것조차 최신 버전과는 맞지 않았다. (2년밖에 안된 글인데…!)
해서 자료를 좀 더 찾아보니 셰이더 그래프가 눈에 띈다. 안본 사이 셰이더그래프도 많이 변했다. 그리고 포스트프로세싱용인 풀스크린 머티리얼도 추가된 것 같다!

노드의 장점은 버전호환성이 좋다는 것이다. 단점은 그만큼 기능이 적다는 것이다. 하지만 포스트프로세싱엔 고급기능을 사용하지 않아 굳이 HLSL머티리얼을 고집할 필요가 없다. 이걸 쓰자.

하지만 뭔가 단단히 잘못된 것만은 알겠다….
4.4
카메라에 파티클이 주르륵 내리는 현상의 주원인은 렌더러로 밝혀졌다. 현재 사용중인 렌더러는 포스트프로세싱을 거치는데, 이 프로세싱이 적용된 상태로 렌더텍스처에 중첩되어 그려진다. ( 그렇다고 해도 드로우 절차상 그래선 안될 것 같은데… 어쩐지 그러고 있다.) 때문에 메인 카메라의 렌더러와 보조카메라의 렌더러를 다르게 사용해야 한다.

하지만 그럼에도 불구하고 피가 주르르 흐르는 현상이 여전하다.

원인은 배경. 뚫린 배경이 문제이기 때문에 검은색 Solid로 채워주면 문제가 해결된다. 이걸 알아내느라 반나절이 걸렸다.. 아휴.

이제야 원하는 결과를 얻었다. 눈을 내리려는 건 아니다.
이제 이 파티클들로 카메라에 맺힌 물방을처럼 굴절을 일으키고 싶다. 씬컬러(셰이더 그래프에선 BlitSource라고 부른다.) 의 Screen Position에 UV왜곡치를 더해 볼록하게 표현하면 될 것이다. 3가지 정보가 필요하다. X, Y, 그리고 마스크. 공교롭게도 노말맵의 정보와 비슷하다. 물방울을 모델링해서 노말을 뽑자.


노말맵이 곡률을 계산하고 있어서 얼추 볼만하게는 나올 줄 알았는데 생각보다 밋밋한 결과를 보여줬다. 좀 더 정확한 구현을 위해선 사인함수를 추가로 사용해 곡률을 더해주어야 했다.

그런데 이렇게 쪼그맣게 쓸거라, 사실 저렇게까진 안해도 된다. 그냥 한 번 구현해 보고 싶었다. 실무라면 일정에 쫓겨서 안했을 듯.
마지막은 리플렉션이다. 렌더텍스처가 하나가 더 필요하다.

일단 배경이 비칠 물웅덩이를 모델링하고

용암을 붓…이게 아닌데…?! 스크린 UV를 구하는 방법을 모르겠다.
https://blog.naver.com/mnpshino/221481588595
하지만 마둠파님께서 친절하게 설명해 놓으셨다.

렌더텍스처를 걍 뒤집어 쓰면 될 줄 알았는데, 생각보다 잘 안맞는다.

…는 렌더텍스처의 비율문제였다. 렌더텍스처를 2의 배수로 맞췄더니 이런 문제가 생긴다.
마참내! 구현은 완료했다. 예상만큼 어려웠고, 배운 것도 많다.
이제 정리작업이 남겨두고 있다. 이건 내일 하자…