머티리얼 함수 개요

머티리얼 함수 사용에 있어서의 핵심 개념에 대한 개요입니다.

Windows
MacOS
Linux

머티리얼 함수란 패키지에 저장되는 머티리얼 그래프의 작은 조각들로, 다수의 머티리얼에 재사용 가능한 것을 말합니다. 그 목적은 자주 사용되는 머티리얼 노드 네트워크를 즉시 접근할 수 있도록 하여 머티리얼 제작 프로세스의 효율을 높이는 데 있습니다. 예를 들어 마구잡이 텍스처 패닝 처리만을 위한 네트워크를 자주 만든다 칠 때, 그 부분을 담당하는 네트워크를 머티리얼 함수로 저장해 두고 그런 동작이 필요할 때마다 사용해 주기만 하면 훨씬 빠른 작업이 가능합니다.

함수는 머티리얼 에디터에서 일반 머티리얼처럼 수정 가능하나, 어느 노드를 사용할 수 있는지에 대해서는 약간의 제약이 있습니다. 제대로 사용만 하면 머티리얼 중복을 줄일 수 있으며, 이는 차례로 아티스트들이 그러한 중복 표현식을 동기화시키느라 드는 노력도 줄이게 되며, 수정 도중 중복된 것이 빠지게 되면 피치못하게 발생하는 버그도 줄일 수 있습니다.

머티리얼 함수는 콘텐츠 브라우저에 나타나는 애셋이기도 합니다. 머티리얼 함수의 그래프는 머티리얼의 것과는 다른데, 머티리얼 함수는 최종 함수의 출력 연결을 나타내는 출력 노드가 나타난다는 점에서 메인 머티리얼 노드와 다릅니다.

머티리얼 함수는 전자제품의 외관같은 것으로 생각해 볼 수 있습니다. 입력과 출력은 필요한 만큼 추가시킬 수 있으되, 함수의 내부는 입력과 출력 사이에서 벌어지는 일입니다. 이 예제에서는 두 개의 레이어를 받아들인 다음 포토샵 스크린 블렌드 처럼 화면을 합성합니다. 이 함수는 아티스트가 스크린 블렌드 작업을 사용하기 위해 스크린 블렌드의 구체적인 연산을 알 필요는 없도록 하기 위해, 그 세부적인 내용을 추상화시켜 놓은 것입니다. 나중에 누군가가 스크린 블렌드 연산 방식을 바꾸고자 할 경우, 이 함수를 수정해 주기만 하면 그 변경 내용이 그 함수를 사용한 모든 머티리얼에 자동으로 전파됩니다.

ScreenBlendFunction.png

위에서 볼 수 있듯이 입력과 출력 사이에서 일어나는 일은 전적으로 자신에게 달려있고, 표준 머티리얼 표현식 노드의 네트워크에 의해서 정의됩니다. 그런데 머티리얼에 머티리얼 함수를 놓고 나면, 그 함수의 노드와 그 입출력만 보이게 됩니다.

ScreenBlendInMaterial.png

머티리얼 함수 라이브러리

머티리얼 함수가 완료되면, 머티리얼 생성 도중 쉬운 접근을 위해 머티리얼 함수 라이브러리에 퍼블리싱해야 합니다. 머티리얼 함수 라이브러리란 머티리얼 에디터에 있는 창으로, 사용가능한 머티리얼 함수 목록을 카테고리별로 필터를 적용해서 볼 수 있습니다. 이 리스트는 로드된 함수를 통해 채워지기도 하고, 로드되지는 않았더라도 콘텐츠 브라우저에 사용되는 콘텐츠 브라우저 데이터베이스를 통해 찾은 함수를 통해 채워지기도 합니다.

FunctionLibrary.png

이 항목 위에 커서를 올리면 설명을 툴팁으로 확인할 수 있으며, 드래그 앤 드롭으로 머티리얼에 끌어 놓을 수도 있습니다.

머티리얼 함수 라이브러리에 머티리얼 함수가 나타나도록 하려면, 그 프로퍼티 중 Expose To Library 를 체크해야 합니다. 함수 안에 있을 때 아무 노드도 선택하지 않은 상태에서는 함수 자체의 기본 프로퍼티를 볼 수 있는데, 여기서 이 프로퍼티를 찾을 수 있습니다.

머티리얼 함수 라이브러리에 기본으로 존재하는 전체 함수 목록은 머티리얼 표현식 레퍼런스 페이지를 확인하시기 바랍니다.

함수 관련 노드

아래는 머티리얼 함수에 관련된 머티리얼 함수 노드와 그 용도에 관한 설명입니다:

  • MaterialFunctionCall - 다른 머티리얼이나 함수에서의 외부 함수 사용을 허가합니다. 외부 함수의 입력과 출력 노드가 Function Call 노드의 입력과 출력이 됩니다.

  • FunctionInput - 머티리얼 함수 안에만 놓을 수 있으며, 함수의 입력 중 하나를 정의합니다.

  • FunctionOutput - 머티리얼 함수 안에만 놓을 수 있으며, 함수의 출력 중 하나를 정의합니다.

  • TextureObject - 함수 내 텍스처 함수 입력에 대한 디폴트 텍스처를 제공하기에 좋습니다. 텍스처를 실제로 샘플링하지는 않는 노드이기에, TextureSample 노드와 함께 사용해야 합니다.

  • TextureObjectParameter - 텍스처 파라미터를 정의하고 텍스처 오브젝트를 출력하는데, 텍스처 입력으로 함수를 호출하는 머티리얼에 사용됩니다. 텍스처를 실제로 샘플링하지는 않는 노드이기에, TextureSample 노드와 함께 사용해야 합니다.

  • StaticSwitch - 컴파일 시간에, 입력 값에 따라 두 입력 중 하나를 선택합니다.

  • StaticBool - 함수 내 스태틱 불 함수 입력의 기본 부울 값을 제공하기에 좋습니다. 실제 전환을 하는 노드는 아니기에, StaticSwitch 노드와 함께 사용해야 합니다.

  • StaticBoolParameter - 스태틱 불 파라미터를 정의하고 스태틱 부울 값을 출력하는데, 스태틱 불 입력으로 함수를 호출하는 머티리얼에서 사용됩니다. 실제 전환을 하지는 않는 노드이기에, StaticSwitch 노드와 함께 사용해야 합니다.

입력과 출력

머티리얼 함수는 노드 네트워크를 캡슐화시킨 것이기에, 데이터가 드나들 수 있도록 하는 것은 사용자의 몫입니다. 그 처리는 FunctionInputFunctionOutput 노드를 통해 이루어 집니다. 머티리얼 함수 사용에 있어서는 이 노드에 대한 이해가 필수적입니다.

함수 자체 내에서 FunctionInput 와 FunctionOutput 노드는 다음과 같이 나타납니다:

InputOutput_Within.png

그러나 외부에서, 함수가 머티리얼 안에 사용될 때 그 노드는 입력과 출력에 대한 핀 역할을 합니다:

InputOutput_Without.png

FunctionInput 노드

언급했듯이 MaterialInput 노드는 머티리얼 함수에 들어가는 데이터가 통과하는 관문 역할을 합니다. 이 입력 노드는 어느 함수든 몇 개든지 가질 수 있으며, 그 각각은 함수 자체에 나타나는 입력 핀에 해당됩니다.

InputNode.png

다음과 같은 프로퍼티와 데이터 핀이 있습니다:

항목

설명

프로퍼티

Input Name

입력 이름 - 함수 밖에서 보이는 입력 이름입니다.

Description

설명 - 함수의 입력 핀에 마우스를 올렸을 때 사용자에게 보이는 입력에 대한 설명입니다.

Input Type

입력 유형 - 입력이 받을 데이터 유형을 말합니다. 아래 입력 유형 참고.

Preview Value

미리보기 값 - 생성 프로세스 도중 함수가 하는 작업을 시각화시켜 보는 데 도움이 되는 테스트 수단으로 활용됩니다. 여기 입력된 값은 마치 함수 밖에서 입력을 통해 전송된 값인 양 활용됩니다.

Use Preview Value as Default

미리보기 값을 기본 값으로 사용 - 미리보기 값으로 설정된 데이터를 기본 값으로 사용할 수 있게 해 주는 체크박스입니다. 사용자가 이 값에 대해 함수에 입력을 따로 준비하지 않아도 되게끔 하고플 때 좋습니다.

Sort Priority

소트 우선순위 - 함수의 노드에 나열되는 입력 핀의 순서를 조절하는 데 사용되는 수치입니다. 낮은 수에서 높은 수 순입니다.

입력 핀

Preview

미리보기 - Preview Value 프로퍼티보다 우선하는 값을 받는 입력입니다. 관련된 프로퍼티와 함께, 이 값은 함수 생성 도중의 테스트와 기본값 설정에 좋습니다.

출력 핀

(Unlabled)

무제 - 함수가 처리하게 될 입력 데이터에 대한 출력을 제공합니다.

FunctionOutput 노드

FunctionOutput 노드는 처리된 데이터가 최종 함수를 빠져나가는 출구로, 앞으로 계속해서 머티리얼에 사용될 것입니다. FunctionInput 노드와 마찬가지로 함수는 이 노드를 몇 개든 가질 수 있어, 출력 갯수든 몇 개든 가능합니다.

OutputNode.png

FunctionOutput 노드의 프로퍼티는 다음과 같습니다:

항목

설명

프로퍼티

Output Name

출력 이름 - 함수 바깥에서 보이는 출력 이름입니다.

Description

설명 - 사용자가 함수의 출력 핀에 커서를 올렸을 때 보이는 이 출력에 대한 설명입니다.

Sort Priority

소트 우선순위 - 함수의 노드에 나타나는 출력 핀의 순서를 조절하는 수치입니다. 낮은 수에서 높은 수 순입니다.

입력 핀

(Unlabeled)

무제 - 함수가 처리한 데이터에 대한 입력을 제공합니다. 이 데이터는 머티리얼에서 사용할 수 있도록 함수 밖으로 전송됩니다.

입력 유형

입력에는 그에 연결된 표현식이 필요로 하는 전용 유형이 있는데, 그 설정은 FunctionInput 노드의 Input Type 프로퍼티를 통해 합니다. 함수 밖에서 보면, 머티리얼에 이 함수가 사용될 때 입력 핀 옆에 약간의 글자로 이 유형이 표시됩니다. 이 경우 두 입력 모두 Vector3 였다면 V3 가 표시됩니다. 머티리얼에 사용된 입력에 연결되는 것은 무엇이든 해당 입력 유형으로 변환시켜야 하며, 그렇게 하지 않으면 오류가 납니다.

InputType.png

아래는 사용가능한 입력 유형과 그에 관련된 약자입니다:

입력 유형

약자

Scalar

S

Vector2

V2

Vector3

V3

Vector4

V4

Texture2D

T2D

TextureCube

TCube

StaticBool

B

공통 프로퍼티

함수 디자인 도중, 아무 노드도 선택하지 않으면 함수 자체의 기본 프로퍼티를 볼 수 있습니다.

항목

설명

프로퍼티

Description

설명 - 사용자가 함수 리스트에 있는 함수 또는 머티리얼 에디터에서 함수 노드 몸체에 커서를 올렸을 때 툴팁으로 나타나는 설명입니다.

Expose to Library

라이브러리에 노출 - 이 박스가 체크되면 머티리얼 함수는 머티리얼 에디터 내 머티리얼 함수 리스트에 나타나며, 머티리얼에 사용할 수 있게 됩니다. 새로 등록한 함수가 나타나게 하려면 에디터를 재시작해야 할 수도 있습니다.

Library Categories

라이브러리 카테고리 - 이 함수가 머티리얼 함수 탭의 어느 카테고리에 나타나는지를 전부 담는 배열입니다.

미리보기

머티리얼 함수를 편집할 때, 해당 노드는 미리보기 창에 표시됩니다. 아무 노드에나 우클릭한 다음 Start Previewing Node (노드 미리보기 시작)을 선택하면 해당 지점까지의 네트워크 결과를 미리볼 수 있습니다.

StartPreviewing.png

대부분 미리보려는 것은 함수 출력이라 기본적으로 함수 출력을 미리보게 됩니다.

PreviewingOutput.png

함수 입력 노드에는 미리보기 값을 지정하는 옵션이 있습니다. 머티리얼에서 실제 어떤 값으로 사용될지 알지 못하기 때문입니다. 각 입력에는 내장된 PreviewValue (미리보기 값)이 있어, 실수 입력 유형에 대한 상수를 표시하는 데 사용할 수 있습니다. 함수 입력에는 'Preview' 핀도 있어, 내장된 값을 입력 유형에 맞는 값으로 덮어쓸 수 있습니다. 이 예제에서는 float 3 입력에 대한 미리보기를 제공하기 위해 텍스처 샘플이 사용되었습니다.

PreviewTexture.png

이 예제에서는 스태틱 불 입력에 대한 기본값으로 Static Bool 노드가 사용되고 있습니다.

PreviewStaticBool.png

참고로 입력에는 "Use Preview Value As Default" (미리보기 값을 기본값으로 사용) 이라는 옵션이 있습니다. 켜면 머티리얼에 이 함수가 사용되고 그 입력에 아무것도 연결되어 있지 않아도, 오류를 내는 대신 미리보기 값이 사용됩니다. 이 옵션은 입력을 옵션 입력으로 만들기에, 회색으로 그려집니다.

파라미터

함수는 이제 파라미터 노드 유형을 포함할 수 있습니다. 이 파라미터는 아무 머티리얼에 직접 전달하여 사용할 수 있습니다.

함수에 텍스처 파라미터를 사용하려면, 텍스처 입력을 만들어 텍스처 샘플 노드의 텍스처 오브젝트 덮어쓰기에 연결합니다:

TextureParameterFunction.png

그런다음 함수를 사용하는 머티리얼에 TextureObjectParameter 노드를 놓은 다음 텍스처 입력에 연결합니다:

TextureParameterMaterial.png

스태틱 스위치 파라미터와 비슷하게, Static Bool 입력을 만든 다음 StaticSwitch 노드에 연결합니다:

StaticSwitchFunction.png

그런 다음 함수를 사용하는 머티리얼에서 StaticBoolParameter 노드를 놓은 다음 스태틱 불 입력에 연결합니다:

StaticSwitchMaterial.png

체계

함수는 보통 소수의 사람이 만들지만 다수의 사람이 사용하므로, 함수가 어떤 역할을 하는지, 그 입력과 출력에는 어떤 값이 필요한지 문서화를 잘 시켜두는 것이 중요합니다. 이런 젼차로 함수에는 함수 이름과 입력/출력 이름 위에 설명 칸이 여럿 있습니다:

  • 함수 설명 - 빈 곳에 클릭하면 함수의 프로퍼티 중 Description, 설명 부분을 볼 수 있습니다. 설명칸을 딱 하나만 채우겠다면, 여기를 채워주세요! 함수가 표시되는 곳이면 (콘텐츠 브라우저든, 머티리얼 함수 라이브러리든, 펑션 콜 노드든) 어디든 툴팁으로 표시됩니다.

  • 입력 / 출력 설명 - 함수의 Input 과 Output 노드에 위치합니다. Function Call 노드의 입력과 출력에 커서를 올렸을 때 툴팁으로 표시됩니다.

이렇게 설명을 채워넣은 함수를:

FunctionProperties2.png

머티리얼에 사용하면 다음과 같이 표시됩니다:

FunctionTooltip.png

전파

함수를 편집하고 변경 적용을 선택하면, 새로운 버전이 로드된 머티리얼이나 이 함수가 가리키는 함수에 전파됩니다. 그 함수를 가리키는 머티리얼 중 로드되지 않은 것이라도 다음에 로드될 때 변경 내용이 적용됩니다.

함수에서 입력이나 출력을 삭제한 다음 변경내용을 전파시키면, 함수를 사용하는 머티리얼 내 삭제된 핀으로 연결된 링크는 모두 깨집니다! 주의해야할 부분인데, 전파는 되돌릴 수 없기 때문입니다. 함수가 사용된 머티리얼이 많을 수록, 깨질 확률도 높아지니 주의하시기 바랍니다.

그 함수를 사용하는 로드된 머티리얼 전부는 함수 변경내용 전파시 더티 마킹되어, 재저장이 필요한 패키지만 확인하여 로드 시간이 늘어나는 것을 방지할 수 있습니다. 콘텐츠 브라우저에서 어느 함수에 우클릭한 후 다음과 같은 옵션을 선택하면 해당 함수를 사용하는 로드된 머티리얼을 전부 찾을 수 있습니다:

FindUsingMaterials.png

함수 중첩

함수는 꼬리에 꼬리를 물어 순환되지만 않는다면, 임의대로 중첩(함수 안에 함수있다) 및 연쇄시킬 수 있습니다.

컴파일 오류

함수 안에 컴파일 오류가 발생하면 그것을 사용하는 머티리얼 내 MaterialFunctionCall 노드가 빨갛게 강조됩니다. 오류 메시지를 통해 오류가 어느 함수에서 발생했는지도 알 수 있습니다. 이 예제에서 발생한 오류는, 함수의 입력이 연결되지 않아 발생한 것입니다.

CompileErrors0.png

위의 오류들은 입력에 미리보기 값을 넣은 다음 각 입력의 Use Preview Value as Default (미리보기 값을 기본 값으로 사용) 옵션을 켜 주면 한 번에 해결할 수 있습니다. 그런데 이런 방법은 양날의 칼이 될 수가 있는데, 입력을 연결하지 않아도 (오류 메시지처럼) 별다른 경고가 발생하지 않기 때문입니다.

함수에 입력을 연결해 줬는데도, 오류 메시지에 의하면 함수 내 OneMinus 노드에 오류가 있다 합니다.

CompileErrors1.png

함수를 더블클릭하여 에디터에서 열어 보니, OneMinus 노드가 오류때문에 빨갛게 강조되어 있습니다:

CompileErrors2.png

디폴트 머티리얼 함수

언리얼 엔진 4 에는 이미 다수의 머티리얼 함수가 포함되어 있으며, 머티리얼 에디터 팔레트 을 통해 사용할 수 있습니다.

디폴트 머티리얼 함수는 콘텐츠 브라우저를 통해 Engine > Functions 폴더에서 열어 편집할 수 있습니다.

디폴트 머티리얼 함수를 변경하고 저장한 경우, 그 변경내용은 해당 함수의 모든 인스턴스에 전해지게 됩니다. 그렇기에 보통은, 기존 함수를 변경하고자 한다면 사본을 만들어 변경하는 것이 바람직합니다.

이러한 디폴트 함수에 대산 상세 정보는 머티리얼 표현식 레퍼런스 페이지를 확인하시기 바랍니다.

태그
Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼