지난 글에 이어 물 표면 파동과 물방울 연출법에 대해 알아보겠습니다.
1. 표면 파동
[Unreal] World Position Offset 활용
메시의 버텍스를 월드 포지션에서 조정 가능한 World Position Offset을 활용하여 표면 파동을 표현할 수 있습니다.
- 언리얼 머티리얼 문서 : 언리얼 엔진의 머티리얼 입력 | 언리얼 엔진 5.0 문서 (unrealengine.com)
[Unity] - Vertex Position 활용
- Shader graph : Vertex Position 활용
- Amplify Shader : Local Vertex Offset 활용
바다 제작하기 - Unreal5
World Position Offset을 활용하여 언리얼5에서 바다를 만들어 보았습니다.
디테일 표현을 위해 이전 1편에서 언급한 노멀 맵과 러프니스 맵도 추가해 주었습니다.
*파동 표현에는 언리얼 기본 제공 함수인 Motion_4WayChaos를 활용했습니다!
머티리얼의 MaterialFuctionCall 노드에서 Motion_4WayChaos를 검색해서 사용하면 됩니다.
2. 물방울 연출
물방울은 Step 노드를 활용하면 하나하나 그리는 것보다 빠르게 완성도를 높일 수 있습니다.
포토샵 등에서 에어브러시로 텍스처를 제작한 후, Step 노드에 연결하여 원하는 형태가 나오도록 값을 조정하면 됩니다.
*물론 리소스의 디테일을 높이려면 드로잉 작업이 필요합니다!
Step은 X, Y값을 비교하여 0 또는 1을 출력하는 노드로, 엔진과 툴에 따라 용어나 조건이 조금씩 다릅니다.
- Unreal : X값이 Y값 이상이면 1, 미만일 경우 0을 반환합니다.
- Unity - Shader graph : In 값이 Edge 값 이상이면 1, 미만일 경우 0을 반환합니다.
- Unity - Amplify Shader : A 값이 B 값보다 크면 0, 작거나 같을 경우 1을 반환합니다.
언리얼이나 셰이더 그래프는 기준이 되는 값(참조 값) 보다 작을 때 0을 출력하지만,
앰플리파이는 반대로 참조 값보다 클 때 0을 출력합니다!
즉, 동일한 노드 구조로는 다른 에디터들과 반대되는 결과가 나옵니다.
※ 노드 관련 문서
- Unreal 수학 머티리얼 표현식 : https://docs.unrealengine.com/5.0/ko/math-material-expressions-in-unreal-engine/
- Shader graph - Step : https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9/manual/Step-Node.html
- Amplify Shader - Step : https://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Step
보통 많이 사용하는 검정 배경 + 흰색 조합의 텍스처를 앰플리파이의 Step에 그대로 쓸 경우,
원하는 형태에서 반전된 모습으로 출력됩니다.
(검정 배경(0) + 흰색(1) 조합에서 참조 값보다 큰 흰색(1) 부분들이 0으로, 검정 배경(0)은 참조 값보다 작아 1로 반환되기 때문)
이 부분은 One Minus 노드를 사용하여 쉽게 해결할 수 있습니다.
아래 예시 제작 당시에는 참조 값인 B가 1일 경우 모든 부분이 1(흰색)이 되기 때문에,
Remap 노드로 B의 최댓값이 0.95로 제한하여 어떤 값이든 물방울 형태가 되도록 했습니다.
*앰플리파이 셰이더이기 때문에 One Minus를 사용해 주었습니다.
폭포 제작하기 - Unity
그라데이션 텍스처나 노드를 참조 값으로 적절히 활용하면 물이 끝나는 지점의 물방울 연출도 가능합니다.
다음 예시는 Shader graph에서 흑백으로 제작된 물결 텍스처를 그라데이션 값에 따라 출력되게 한 것입니다.
입력값인 물결 텍스처와 참조 값인 그라데이션을 비교하여
- 그라데이션의 검은색 부분(0~n) → 물결 텍스처의 값이 더 크므로 1 출력,
- 그라데이션의 흰색 부분(n~1) → 물결 텍스처의 값이 더 작아 0을 출력합니다.
위 셰이더에서 Color 등을 추가하여 Unity 기본 Plane에 적용한 모습입니다.
셰이더 결과를 빠르게 보기 위해 기본 오브젝트에 테스트 삼아 넣어본 것이기 때문에,
메시를 직접 만들어 적용하면 좀 더 입체적이고 자연스러운 물줄기를 연출할 수 있을 겁니다.