Rain 머티리얼 제작
BaseColor / Roughness / Specular 변화 조절
start content에 있는 머티리얼을 기반으로 제작, M_Brick_Clay_Old
비 맞으면 컬러가 어두워지는 표현을 위해 기존 BaseColor에 추가 노드를 달아준다.
Desaturation과 Multiply를 활용해 낮은 채도의 어두운 컬러를 만들어주고,
기존 BaseColor와 어두운 BaseColor가 Alpha(WetMask)로 구분될 수 있도록 Lerp를 달아준다.
* Alpha에 들어간 Constant 1은 임시 값
마지막 Lerp에서 나오는 출력핀이 BaseColor에 들어갈 값.
비 맞으면 스펙큘러가 높아지고, 러프니스가 낮아지는 표현을 위해 기존 Roughness에 추가 노드를 달아준다.
이번에는 기존 Roughness 노드에 Append Vector노드를 이용해서 Specular를 조작하기 위한 수치값을 추가하여,
추가 Specular 조작을 위한 노드를 아껴 같이 만들어주었다.
Append A에 기존 Roughness 값을 연결. B에는 임시로 기존 Specular값을 Constant로 넣어주고 확인.
이후 Lerp를 달아서 기존 Roughness와 Specular값이 A에 Vector 2로 만든 새로운 Roughness와 Specular값을 B에 달아준다. Alpha는 BaseColor에서 사용했던 임시값 Constant 1값 재활용해준다.
Lerp 결과값을 Component Mask 노드를 활용하여 R과 G 채널을 분리하여 R은 Roughness에 G는 Specular에 들어가게 될 값.
여기까지의 결과물 확인. 기존 머터리얼 / 비 맞은 상태 머티리얼
이제부터는 머티리얼에서 결과를 보면서 작업했던 노드들을 머티리얼 함수에 옮겨줄 것이다.
머티리얼 함수 생성. MF_Wetness
앞서 추가했던 노드를 복사해와서 붙여넣기
Function Input을 5개 만들고 아래와 같이 이름과 유형을 바꾸어준다.
BaseColor - Vector 3
Roughness - Scalar
Specular - Scalar
WetMask - Scalar
Porousness - Scalar
Function Output도 추가로 2개 만들고 기존 Output 노드와 함께 아래와 같이 바꾸어준다.
BaseColor
Specular
Roughness
노드 핀 순서는 입력 또는 출력 노드 선택 후 디테일 창에서 Sort Priority를 바꾸어 설정해줄 수 있다.
앞서 복사해 온 노드의 임시값들을 삭제하고 유형에 맞는 Input / Output 노드들과 연결해준다.
연결이 끝나면 그래프의 빈칸을 클릭한 상태로 디테일 창에 가서, Expose to Library를 체크해 함수가 검색에 노출되도록 설정해준다. 머티리얼 함수 저장.
다시 M_Brick_Clay_Old 머티리얼로 돌아와서 기존 작업했던 노드를 끊고 MF_Wetness 함수를 가져와 다시 연결해준다.
현재 Specular, WetMask, Porousness는 없으니 Constant 값으로 대체
머티리얼 적용, 저장.
물방울 형태를 위한 머티리얼 제작
머티리얼 생성. M_RainDrop
RainDrop에 사용할 텍스처 채널
R,G채널은 물방울 노멀 채널
B채널은 물방울이 생기는 타이밍 조절을 위한 채널
A채널은 큰 물방울/작은 물방울 구분용 마스크로 사용할 채널
위의 텍스처를 불러와서 타일링 노드 조합 달아주기, Multiply B값이 타일링 횟수.
텍스처가 제대로 된 노말을 취하고 있지 않으므로 R,G 채널을 가져와 노말로 만들어준다. 노말값은 -1과 1사이의 값으로 구성되어있기 때문에 2를 곱하고 1을 빼서 맞춰준다.
텍스처 채널 B를 사용해서 시간에 따라 물방울이 차이를 두고 떨어지는 느낌을 내기 위해 Time노드를 이용해준다.
B채널은 흰색, 회색, 검정으로 이루어진 텍스처기 때문에 Time과 Subtract를 이용하여 값을 조절해주면 깜빡깜빡하는 애니메이션을 줄 수 있다. Frac을 사용하면 입력값의 소수점을 출력하며 0~1사이의 값을 반복하게 된다.
텍스처의 알파 채널은 큰물방울은 흰색, 작은물방울은 검정색, 그외 바탕은 회색으로 구성.
알파 채널 곱하기 2, 빼기 1하면 흰색값은 유지가 되고, 회색과 검정색은 0이하의 값을 가지며 saturate로 클램핑을 하면 큰 물방울만 흰색인 맵을 얻을 수 있다.
흰색 물방울 맵에 앞서 만든 타이밍 애니메이션을 곱해주면 큰물방울에만 적용되는 애니메이션을 만들 수 있다.
큰 물방울 알파를 반전시켜서 작은 물방울 알파를 추출한다.
-1을 곱해서 뒤집은 후 Power를 강하게 주어서 작은 물방울(흰색 부분) 강조 후 Clamping
큰 물방울 애니메이션 (Multiply 출력)과 작은 물방울을 Add로 더해준다.
큰 물방울은 깜빡이고 작은 물방울은 가만히 있는 상태.
물방울이 고여있는 부분을 오브젝트의 상단에 고정시키기 위해서 Vertex Normal WS노드를 활용한다.
Vertex Normal WS노드에서 B채널을 추출하면 위쪽 방향 추출되고 클램핑 해주기.
앞서 물방울 애니메이션을 만들었던 add 출력값에 Multiply로 상단 마스크를 곱해준다.
상단 마스크를 곱하고 난 후 Roughness로 사용하기 위해 대비를 조절해주고 반전시켜준다.
최종 출력값 Roughness에 연결.
마지막으로 앞서 R,G채널을 추출해 정규화해놓은 노멀 채널들에 물방울 애니메이션을 곱해준 후 B채널을 추가해주어 R,G,B 노멀을 완성하고 Normal에 연결.
물줄기 형태를 위한 머티리얼 제작
머티리얼 생성. M_RainDrip
RainDrip에 사용할 텍스처 채널
R,G채널은 물줄기 노멀 채널
B채널은 물줄기 알파를 위한 채널
A채널은 물줄기 시간차를 위한 마스크로 사용할 채널
우선 물줄기를 월드 포지션으로 적용해줄 것이기 때문에 World Position 노드 적용.
월드 포지션에서 나오는 출력값은 매우 크므로 적은 수를 곱해주고, 서로 상반되는 X,Z값을 적용하여 모든 측면을 추출
VertexNormalWS와 Sign을 엮으면 양수값에 대해 1값을 얻을 수 있다. Saturate로 Clamping 후 Mask R로 양의 X축, Mask G로 양의 Y축을 추출.
추가적으로 음, 양의 X축과 음, 양의 Y축도 합치기 위해 X축 상에 있는 마스크를 추출한다.
VertexNormalWS를 이용해서 Abs로 절대값을 출력해주면 양면의 값이 1의 값이 되고 반올림하여 마스크를 선명하게 만들어준다. 그 중 Mask R로 X축을 추출.
앞서 만든 월드포지션 공간 좌표에 Lerp를 달아 서로 맞는 방면을 추출해서 적용해준다.
각 X축, Y축의 음과 양의 방향을 정렬했다면
양면 X축 마스크를 Alpha로 이용하여 X축과 Y축도 합쳐서 최종 4면의 텍스처가 적용된 마스크를 추출한다.
빗줄기가 줄기마다 각기 다른 속도로 떨어지도록 애니메이션을 준다.
텍스처의 B채널을 이용, Round를 이용해서 딱떨어지는 0과 1 흑백 마스크를 만들어주고, Vector 2로 Append하여 최종 R,G,B 3개 채널을 가지도록 바꾸어준다. 서로 다른 Vector 2 2가지노드를 이용하여 속도차를 주면 이를 Lerp A, B에 넣어 Alpha값으로 속도를 조절할 수 있게 된다.
Lerp 출력값은 SplitComponents 노드를 활용해 각 채널을 분리해주고, 이중 Vector 2에서 설정한 값을 이용하여
타이밍이 서로 다르도록 텍스처의 알파 채널을 Lerp Alpha로 사용하는 결과를 추출한다.
첫번 째 러프는 전체적인 속도를 조절, 두번 째 러프는 각 줄기를 분리해서 속도 조절을 해주는 거라고 생각하면된다.
물줄기의 마스크 맵이 준비됐다면, 텍스처의 알파 채널을 이용해 Time과 더해주어 offset Animation이 되도록 만들어준다.
물방울이 떨어지는 파형을 위한 머티리얼 제작
머티리얼 생성. M_Ripples
머티리얼에서 작업한 노드를 머티리얼 함수로 변환
머티리얼 함수 생성. MF_CombineFourNormal
머티리얼 함수 생성. MF_RainRipples
M_Ripples 과 MF_CombineFourNormal 혼합
MF_RainRipples 함수 Test
이후 작업 다음 시간에 계속...
'Unreal Engine' 카테고리의 다른 글
Unreal Animation Mode - 01 (0) | 2024.06.05 |
---|---|
Unreal VFX - 03 (0) | 2024.05.31 |
Unreal Blueprint (3인칭게임모드) - 01 (0) | 2024.05.29 |
언리얼 제작 사례 (0) | 2024.05.28 |
Unreal Blueprint - 02 (0) | 2024.05.28 |