water shader를 구현하기에 앞서 기본적인 세팅부터 작업.
물을 구현하는 방법은 기본적으로 plane에다 shader를 적용하여 plane의 vertex를 조절하는 것에서 출발한다.
보다 사실적인 물 표현을 하려면 엣지가 무수히 많은 plane을 생성하고 시작해야겠지만 아직 blender를 다뤄보지 못한 관계로 유니티 내에 있는 일반적인 plane을 사용해보았다.
그 다음 plane에 입힐 material과 material을 표현해줄 shader를 생성한다.
물 밖에서 바라보는 물과 물 안에서 바라보는 물은 다른 양상을 띠므로 두 가지의 경우로 생성해보았다.
(실제로 waterBack까지는 구현할 수 있을지 미지수이다만,,,,)
먼저 색상과 specular를 구현해보았다. +투과
사진을 보고 매우 당황스럽고 의심되기도 하겠지만 놀랍게도 그렇다. 물이다.
아직 wave를 구현하지 않아서 저렇게 매끄럽고 specular가 똥글뱅이 하나로밖에 안보이는거다.(라고 믿는중)
얘를 좀 더 물처럼 표현하려면 normal map을 적용하고 vertex를 움직이고 그 다음 위의 구현에 디테일을 추가해주면 된다.(내가 디테일을 구현할 수 있을지는 나도 의문이다만,,,)
일단 코드를 보면서 구현한 부분을 살펴보쟈,,
먼저 속성 부분이다. 물 표면 색상과 Specular 색상을 Inspector 창에서 조절할 수 있도록 하였다.
SubShader 부분이다.
변수로 _Color, _SpecCol을 설정하였다. 각각 물의 표면 색상, specular 색상이다.
추가로 투과도 설정해주기 위해 grabpass를 사용하였다.
물 표면에 색상을 입히고 투과도 표현해보았다.
grabtexture를 입힐 때 스크린의 depth에 영향을 받지 않도록 하기 위해 scrPos의 xyz값을 w(depth)로 나누어주었다.
또 물의 투과를 표현할 때 화면을 바라보는 방향과 shader의 normal이 서로 마주보는 방향일수록 투과가 더 잘일어나는 모습을 보이기 위해 두 벡터를 내적하였고, 그 값으로 grab과 물 표면을 lerp로 섞었다.
light를 custom으로 설정하여 임의로 specular를 설정하였다.
투과 참고
https://darkcatgame.tistory.com/30
'K-digital traning > 3D 콘텐츠 제작' 카테고리의 다른 글
Placid Plastic Duck Simulator - 개발일지5 (0) | 2023.10.11 |
---|---|
Placid Plastic Duck Simulator - 개발일지4 (0) | 2023.10.10 |
Placid Plastic Duck Simulator - 개발일지3 (0) | 2023.10.05 |
Placid Plastic Duck Simulator - 개발일지1 (0) | 2023.10.05 |
Placid Plastic Duck Simulator - 개발일지 0 (0) | 2023.09.22 |