그냥 게임개발자

개발일지_011(언리얼엔진)머티리얼 함수 제작 본문

엔진스터디

개발일지_011(언리얼엔진)머티리얼 함수 제작

sudoju 2021. 11. 23. 22:55

머티리얼 함수란?

머티리얼 간에 셰이더 코드를 공유하는 수단이다.

정확히 말하자면 특정 머티리얼 셰이더 코드를 공유할 수 있게 해주는 것이다.

하지만 Ctrl+C, Ctrl+V로 그냥 붙여 넣어서 일일이 손수 할 필요 없이 머티리얼 함수에 딱 하나만 조정해서 적용을 눌러주면 해당 머티리얼 함수를 사용하는 모든 머티리얼에 변경사항이 업데이트가 된다.

 

일단 머티리얼 함수를 만들어보자.

콘텐츠 브라우저 > 머티리얼 & 텍스처 > 머티리얼 함수

머티리얼 함수를 만들었으니 구성을 해보자.

전에 우리가 만든 두 개의 머티리얼을 서로 공유할 수 있는 간단한 텍스처 타일링을 하나 만들 거다.

이런 작업을 하는 이유는 타일링을 동일하게 유지시켜야 하기 때문이다.

지금 사용 중인 어느 머티리얼에든 벽을 타일링 하더라도 컨트롤은 여전히 같을 거다.

 

우선 텍스쳐 좌표를 추가해야 한다.
그리고 이걸 입력 파라미터로 곱해 그 값을 도출한다.

그다음에는 머티리얼 표현식 함수 입력도 이름이나 호칭을 부여해서 구성해야 한다.

그러면 머티리얼 함수를 찾는 사람들이 굳이 함수를 가져다 실행해볼 필요 없이 이름만 보고 그 역할이 무엇인지 알 수 있을 거다.

약간의 설명을 달고 입력 유형도 달아보겠다.

 

방금 만든 머티리얼 함수를 더블클릭하여 에디터에 들어가 Output Name(함수 이름)과 Description(설명)을 써주자.

그리고 Texture Coordinate라는 노드를 추가해주고 FunctionInput노드를 추가하자.

그다음 Input Type은 Function Input Scalar로 바꿔주자.

그 이유는 앞으로 진행할 작업이 텍스처 좌표에 값을 곱할 것인데 그 값을 올리거나 내릴 수도 있을 수도 있어서 Texture UV사이즈도 따라 증감할 것이기 때문에 Function Input Scalar로 바꿔준 것이다.

또한 Preview Value를 아무렇게나 설정해주자.

 

이제 M키를 눌러 Multiply(곱하기) 노드를 만든 다음 이렇게 연결해두자.

적용 버튼을 누르면

와우 이쁜 그라데이션 공이 만들어졌어요.

이제 우리가 만든 유리 머티리얼 MAT_ENV_Glass_00으로 돌아가서 MF_Tile을 머티리얼 에디터에다가 드래그해보자.

 

그다음 1 키를 눌러 스칼라 노드를 만들고 파라미터로 변환 한 뒤 아래 이미지처럼 설정해준 뒤 MF_Title에 연결하자.

 

이제 MF_Title을 노멀 노드와 러프니스 모델에 연결시켜주자.

그러면 뭐가 달라진지는 모르겠지만 오른쪽 강의 스크린샷은 텍스처가 해당 오브젝트의 표면을 따라 타일링이 되어있다.

 

이제 MAT_ENV_Master를 들어가서 똑같이 MF_Title를 드래그 한 다음 MAT_ENV_Glass_00랑 했던 작업을 똑같이 해보겠다.

 

자 그렇다면 이게 무슨 의미일까?

원래는 이런 식으로 기능들을 넣어서 텍스처 타일링을 했어야 했지만

왼쪽(MAT_ENV_MAster), 오른쪽(MAT_ENV_Galss_00)

이렇게 MF_Title라는 머티리얼 함수로 서로 공유할 수 있다는 것을 보여주었다.

이제 나도 이해가 간다.

왜 머티리얼 함수를 사용해야 하는지 이 함수를 사용하면 작업 속도가 빨라질 수도 있을 것이다.

 

우리는 머티리얼을 이용하여 유리 머티리얼을 만들었고 머티리얼 함수를 만들어보았다.