※ 현재 학습 중인 내용이므로 아직 완전하지 않은 내용일 수 있습니다.
내용에 대해서 피드백을 주시면 관련 내용 보완하여 작성하겠습니다.
이번 포스팅에서는 머티리얼 함수에 대해서 정리해 보았습니다.
1. 긴 수식을 정리하는 머티리얼 함수
지난 시간에 완성된 수식을 다시 보겠습니다. 조금 길고 복잡하죠?
만약에 제가 이런 머티리얼을 30개를 만든다고 치면..
일일히 노드를 끌어서 만들어야 할까요?
그럴 필요가 없습니다. 머티리얼 내에 작성된 노드들을 쉽게 재사용할 수 있도록
함수(Function)로 묶을 수 있습니다.
기존의 작성한 노드를 살펴보고, 어떤 기능을 재사용할지를 정합시다.
이번 포스팅에서는 1. UV 채널 분리 2. 이동(Translate)
3. 배율(Scale) 4. 회전(Rotate)를 머티리얼 함수로 만들 수 있을 것 같아요.
그럼 시작해 보겠습니다.
2. 머티리얼 함수 제작
2-0) 사전준비과정
그럼 먼저 머티리얼 함수를 만들어 보도록 합시다.
마우스 오른쪽 버튼 → 머티리얼 함수로 생성하고 더블클릭합니다.
4개의 함수를 만들 예정이니, 4개의 함수를 제작합시다.
+) 추가로, 마우스 오른쪽 버튼을 누르고나서 키보드를 입력하면 검색창이 뜹니다.
Material function으로 검색하면 해당 요소를 쉽게 찾을 수 있다는 점도 같이 기억해두시면 좋을 것 같습니다.
MF_UVMasking, MF_Translate, MF_Scale, MF_Rotate 4개의 함수를 만들도록 합시다.
※ 네이밍 규칙에 따라 머티리얼 함수 이름의 첫머리는 MF_ 시작하도록 되어 있다는 점을 참고해주시길 바랍니다.
그럼 지금부터 시작해 보겠습니다.
2-1) 'UV 채널 분리' 기능 제작과 이전 노드 대체
· 1단계 _구조 생각하기
지난 시간에 작성한 영역에서 '반복되는 영역'을 찾읍시다.
특히 제일 많이 반복되는 출력이 Mask(R)과, Mask(G)입니다.
이 부분을 대체하여, 하나의 입력값(UV)을 받으면 2개의 출력값(R,G)을 설정하는 기능을 만들어 보도록 하겠습니다.
· 2단계 _입력값과 출력값 생성
기능을 정했으면 구체적으로 "Input 입력값"과 "Output출력값"을 설정해 봅시다.
마우스 오른쪽 버튼을 누르고 function이라 검색하면 FunctionInput과 FunctionOutput을 찾을 수 있습니다.
하나씩 추가하도록 합시다.
마우스 오른쪽 버튼을 눌러서 FunctionOutput을 설정하거나,
중복이 불가능하기 때문에, 복사 붙여넣기로도 루트를 생성할 수 있습니다.
원하시는대로 활용하시면 되겠습니다.
머티리얼 함수는 어떤 값을 받고 내보낼지 정할 수 있습니다.
UV 채널을 받아야 하므로 입력값의 자료형은 Float2로 설정하도록 합시다.
출력값의 경우에는 R채널과 G채널이 필요하므로
두 개의 출력값을 만들어 각각 이름을 Mask(R)과 Mask(G)로 설정하시면 됩니다.
위와 같은 상태로 만들고 정렬합시다.
· 3단계 _입,출력값의 순서 설정
둘 이상의 입력값 또는 출력값의 경우 '순서'도 중요하기 때문에 출력 순서도 정하도록 합시다.
· 4단계 _저장 및 확인
그리고 작성이 완료되었으면 반드시 "저장하기(Save)"를 눌러주세요.
머티리얼로 다시 돌아와서, 머티리얼 함수 MF_UVMasking을 드래그 앤 드롭 해줍니다
만약 오른쪽과 같은 형태라면 이전에 저장되지 않았던 것이니, 다시 저장을 눌러 주세요.
3단계에서 출력 순서를 정했었는데,
R채널은 0, G채널은 1로 설정한대로 나타난 걸 확인하실 수 있습니다.
(순서를 바꾸면 반대로 출력됨.)
· 5단계 _코드 반영하기
이제 이전 Mask(R)과 Mask(G)를 대체했습니다.
중간에 링크 사이에 있는 점은, 경로 재설정 노드( Reroute Node)로
노드 링크를 더블클릭하거나, 마우스오른쪽 버튼으로 추가할 수 있습니다.
함수와 경로 재설정노드로 코드를 정리해 봅시다.
쓰다 보니 분량이 상당히 길어져서, 포스팅을 나누기로 결정했습니다.
이후 포스팅에서 함수 기능을 사용해서 머티리얼을 추가적으로 정리해 보도록 하겠습니다.
그럼 다음 포스팅에서 뵙겠습니다.
'Unreal5로 UI만들어보기 > 0) Material 다루기' 카테고리의 다른 글
12. 출력과 테스트 (3) PlotFunctionOnGraph로 값 조회하기 (0) | 2023.03.09 |
---|---|
11. 출력과 테스트 (2) : DebugValue 함수로 값 조회하기 (0) | 2023.03.08 |
9. 그래픽 요소 만들기 (1) 그라디언트와 IF로 도형 그리기 (0) | 2023.03.03 |
8. 텍스쳐 다루기 (2) 텍스쳐 회전(Rotate) 구현하기 (0) | 2023.03.02 |
7. 텍스쳐 다루기 (1) 이동(Translate), 배율(Scale) 기능 만들기 (3) | 2023.02.28 |