머티리얼 함수 개요

머티리얼 함수의 작동 방식과 함수 사용에 중요한 개념을 살펴봅니다.

Choose your operating system:

Windows

macOS

Linux

머티리얼 함수 를 사용하면 머티리얼 그래프의 일부를 재사용 가능한 에셋 패키지로 만들어 라이브러리에 공유하고 다른 머티리얼에 쉽게 삽입할 수 있습니다. 자주 사용되는 머티리얼 노드 네트워크에 즉시 액세스하여 머티리얼 생성 과정을 간소화하는 것이 머티리얼 함수의 목적입니다.

예를 들면 아래의 Blend_Overlay 함수에는 이미지 우측에 보이는 전체 머티리얼 표현식 네트워크가 포함되어 있습니다. 이 노드 네트워크를 계속해서 다시 생성하지 않고, 머티리얼 함수 라이브러리에서 이 함수를 바로 그래프에 삽입하면 됩니다.

머티리얼 함수 예시

함수는 일반적인 머티리얼처럼 머티리얼 에디터에서 편집할 수 있지만, 사용할 수 있는 노드에는 제약이 있습니다. 머티리얼 함수를 올바르게 사용하면 중복되는 머티리얼을 줄여 아티스트의 유지보수 수고를 덜어줍니다. 머티리얼 함수는 내부의 표현식을 동기화하기 때문에 각각의 표현식을 일일히 사용할 때 불가피하게 발생하는 버그를 방지합니다.

머티리얼 함수는 콘텐츠 브라우저(Content Browser) 에서 별도의 에셋 클래스로 나타납니다. 머티리얼 함수의 그래프는 머티리얼과 비슷하지만, 둘 사이에는 큰 차이점이 하나 있습니다. 바로 머티리얼 함수는 Main Material 노드 대신 FunctionOutput 노드를 가지고 있다는 점입니다. 이 노드는 머티리얼에서 사용할 때 최종 머티리얼 함수 노드의 출력 핀으로 표시됩니다.

머티리얼 함수를 전자기기 케이스로 생각하면 이해에 도움이 됩니다. 입력과 출력은 필요한 만큼 추가할 수 있습니다. 함수의 핵심은 이 입력과 출력 사이의 머티리얼 표현식 네트워크입니다. 이 예시에서는 포토샵 스크린 블렌드처럼 두 개의 레이어를 함께 블렌드합니다. 함수는 아티스트로부터 디테일을 끌어내기 때문에 실제로 스크린 블렌드를 위한 수학을 알지 못해도 스크린 블렌드 작업을 사용할 수 있습니다.

블렌드 스크린 함수

머티리얼 함수의 입력 노드(1)와 출력(2) 노드

위에서 볼 수 있듯 입력과 출력 사이에서 발생하는 일은 전적으로 여러분에게 달려 있으며, 표준 머티리얼 표현식 노드의 네트워크에 의해 정의됩니다. 머티리얼 함수를 머티리얼에 삽입하고 나면 Matrial Function Call 노드와 입력 및 출력만을 볼 수 있습니다. 나머지 그래프는 함수 뒤에 숨겨집니다.

블렌드 스크린 예시

머티리얼 함수 라이브러리

머티리얼 함수가 종료되면 머티리얼 생성 시 쉽게 사용할 수 있도록 머티리얼 함수 라이브러리 에 공개할 수 있습니다. 머티리얼 함수 라이브러리는 머티리얼 에디터(Material Editor) 오른쪽의 팔레트(Palette)에서 찾을 수 있습니다. 팔레트에는 사용할 수 있는 머티리얼 함수의 목록이 표시됩니다. 이 목록은 카테고리에 따라 분류되어 있으며, 필터링이 가능합니다. 이 목록은 로드된 함수뿐 아니라 콘텐츠 브라우저 데이터베이스 에서 찾을 수 있는 디폴트 머티리얼 함수도 포함합니다.

머티리얼 함수 라이브러리

항목 위에 마우스를 올리면 툴팁으로 설명을 볼 수 있고, 함수를 머티리얼에 드래그 앤 드롭할 수도 있습니다.

머티리얼 함수가 머티리얼 함수 라이브러리에 표시되도록 하려면 라이브러리에 노출(Expose to Library) 프로퍼티를 체크해야 합니다. 머티리얼 함수 에디터에서 그래프의 빈 공간을 클릭해 모든 노드의 선택을 해제하면 머티리얼 함수의 기본 프로퍼티가 표시됩니다. 라이브러리에 노출 옵션은 디테일 패널에서 확인할 수 있습니다.

머티리얼 함수 라이브러리 내의 기존 디폴트 함수 전체 목록은 머티리얼 함수 레퍼런스를 참조하세요.

함수 관련 노드

아래는 머티리얼 함수 및 머티리얼 함수의 목적과 관련된 머티리얼 표현식 노드를 정리한 것입니다.

  • MaterialFunctionCall - 다른 머티리얼이나 함수로부터 외부 함수를 사용할 수 있습니다. 외부 함수의 입력 및 출력 노드는 Function Call 노드의 입력과 출력이 됩니다.

  • FunctionInput - 머티리얼 함수에만 배치될 수 있으며, 함수의 입력 핀 중 하나를 정의합니다.

  • FunctionOutput - 머티리얼 함수에만 배치될 수 있으며, 함수의 출력 핀 중 하나를 정의합니다

  • TextureObject - 함수 내의 텍스처 함수에 대해 디폴트 텍스처를 제공하는 데 유용합니다. 이 노드는 실제로 텍스처를 샘플링하지 않으므로 TextureSample 노드와 함께 사용해야 합니다.

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

  • StaticSwitch - 입력 값을 바탕으로 두 입력 사이의 컴파일 시간 선택을 수행합니다.

  • StaticBool - 함수 내의 스태틱 bool 함수 입력에 대해 디폴트 bool 값을 제공하는 데 유용합니다. 이 노드는 실제 전환을 수행하지 않으므로 StaticSwitch 노드와 함께 사용해야 합니다.

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

입력 및 출력

머티리얼 함수는 노드 네트워크를 요약한 것입니다. 따라서 머티리얼 함수 안팎으로 데이터가 드나들 수 있도록 하는 것은 사용자의 몫입니다. 이 과정은 FunctionInput 노드와 FunctionOutput 노드를 통해 이루어집니다. 머티리얼 함수를 사용하려면 두 노드를 반드시 이해해야 합니다.

머티리얼 함수 자체에서 FunctionInput 노드와 FunctionOutput 노드는 아래와 같이 나타납니다.

입력 및 출력 노드

머티리얼 함수를 머티리얼 안에서 사용할 때 FunctionInput 노드와 FunctionOutput 노드는 Material Function Call 노드의 입력과 출력으로 나타납니다.

Material Function Call 노드의 입력 및 출력 핀

FunctionInput 노드

위에서 설명했듯이, FunctionInput 노드는 데이터가 머티리얼 함수로 들어오는 관문 역할을 합니다. 하나의 함수는 입력 노드를 원하는 만큼 가질 수 있으며, 각 입력 노드는 Material Function Call 노드에 나타나는 입력 핀과 상응합니다.

FunctionInput 노드

FunctionInput 노드의 프로퍼티 및 데이터 핀은 아래와 같습니다.

항목

설명

프로퍼티

Input Name

입력 이름입니다. 머티리얼 내에서 사용되는 경우 머티리얼 함수의 출력 핀으로 표시됩니다.

Description

입력 설명입니다. Material Function 노드의 입력 핀에 마우스를 올리면 해당하는 설명이 툴팁으로 표시됩니다.

Input Type

입력에서 받아들이는 데이터의 유형을 정의합니다. 아래의 입력 유형을 참조하세요.

Preview Value

생성 과정에서 함수의 역할을 테스트하고 시각적으로 확인하는 수단 역할을 합니다. 여기 입력하는 모든 값은 함수 외부의 입력에서 넘어온 값처럼 사용됩니다.

Use Preview Value as Default

이 체크박스로 프리뷰 값에서 설정한 데이터가 디폴트 값으로 행동하도록 할 수 있습니다. 이 값에 대해 사용자가 함수에 입력을 제공하도록 강제하고 싶지 않을 때 유용합니다.

Sort Priority

Material Function 노드에 입력 핀이 표시되는 순서를 조절할 때 사용하는 숫자입니다. 낮은 수가 상단에 표시됩니다.

입력 핀

Preview

이 입력으로 전송되는 데이터는 프리뷰 값(Preview Value) 프로퍼티보다 우선합니다. 관련 프로퍼티와 마찬가지로 이 핀은 생성 과정에서 함수를 테스트하고 디폴트 값을 구성하는 데 유용합니다.

출력 핀

(Unlabled)

함수가 처리할 입력 데이터에 대한 출력을 제공합니다.

FunctionOutput 노드

FunctionOutput 노드는 머티리얼 함수 내의 데이터가 계속해서 머티리얼에서 사용될 수 있도록 함수를 빠져나가는 수단을 제공합니다. 즉, 이 노드는 머티리얼 함수의 최종 결과를 출력합니다. FunctionInput 노드와 마찬가지로 함수는 출력 노드를 원하는 만큼 가질 수 있으므로, 출력 핀의 개수는 무한합니다.

FunctionOutput 노드

FunctionOutput 노드를 선택하면 디테일 패널에서 아래와 같은 프로퍼티를 사용할 수 있습니다.

항목

설명

머티리얼 표현식 함수 출력

Output Name

출력 이름입니다. 머티리얼 내에서 사용되는 경우 머티리얼 함수의 출력 핀으로 표시됩니다.

Description

출력 설명입니다. Material Function 노드의 출력 핀에 마우스를 올리면 해당하는 설명이 툴팁으로 표시됩니다.

머티리얼 표현식

Sort Priority

Material Function 노드에 출력 핀이 표시되는 순서를 조절할 때 사용하는 숫자입니다. 낮은 수가 상단에 표시됩니다.

Description

이 설명 필드는 노드의 코멘트 버블에 나타나는 텍스트를 정의합니다. 이 설명은 머티리얼 함수 에디터 내부 에서만 볼 수 있습니다.

출력 핀

(Unlabled)

함수가 처리할 입력 데이터에 대한 출력을 제공합니다.

입력 유형

입력에는 연결된 표현식에 필요한 지정 유형이 있습니다. 입력 유형을 설정하려면 머티리얼 함수 에디터에서 FunctionInput 노드를 선택한 다음, 입력 유형(Input Type) 드롭다운을 사용해 옵션을 선택합니다.

함수 입력 유형

머티리얼에서 호출되는 경우, 입력 연결기 옆에 입력 유형이 약자로 표시됩니다. 여기서는 두 입력이 모두 Vector3이므로 V3이 표시됩니다. 머티리얼에서 사용하는 경우, 입력에 연결된 대상은 반드시 올바른 입력 유형으로 변환이 가능해야 합니다. 그렇지 않으면 오류가 표시됩니다.

Color burn 입력 유형

아래는 사용할 수 있는 입력 유형과 약자를 나타낸 것입니다.

입력 유형

약자

Scalar

S

Vector2

V2

Vector3

V3

Vector4

V4

Texture2D

T2D

TextureCube

TCube

Texture2DArray

T2dArr

VolumeTexture

TVol

StaticBool

B

MaterialAttributes

MA

TextureExternal

TExt

일반 프로퍼티

머티리얼 함수를 편집할 때, 모든 노드의 선택을 해제하거나 머티리얼 그래프의 빈 공간을 클릭하면 디테일 패널에서 함수의 기본 프로퍼티를 볼 수 있습니다.

항목

설명

프로퍼티

Description

이 설명은 사용자가 팔레트의 머티리얼 함수나 머티리얼 에디터의 Function Call 노드 위에 마우스를 올렸을 때 툴팁으로 표시됩니다.

Expose to Library

이 박스를 체크하면 머티리얼 에디터 팔레트의 머티리얼 함수 목록에 머티리얼 함수가 나타나며, 함수를 머티리얼에 삽입할 수 있게 됩니다. 새 함수가 나타나려면 에디터를 다시 시작해야 할 수 있습니다.

Library Categories

해당 함수가 표시될 머티리얼 함수 탭의 모든 카테고리를 담는 배열입니다.

미리보기

머티리얼 함수를 편집할 때 프리뷰 뷰포트에는 미리보기 중인 노드가 나타납니다. 아무 노드나 우클릭 한 뒤 노드 미리보기 시작(Start Previewing Node) 을 선택하면 해당 시점까지의 머티리얼 네트워크의 결과를 미리볼 수 있습니다.

노드 미리보기 시작

보통 미리보기로 확인하려는 대상은 함수 출력이나 머티리얼 함수의 최종 결과물입니다. 기본적으로 머티리얼 함수 출력 노드가 미리보기 대상입니다.

출력 미리보기

Function Input 미리보기

Function Input 노드는 머티리얼에서 아티스트가 사용하게 될 실제 값을 알지 못하기 때문에 프리뷰 값을 지정할 수 있는 옵션을 가지고 있습니다. 각 입력에는 float 입력 유형을 표시하는 데 사용할 수 있는 프리뷰 값(Preview Value) 이 내장되어 있습니다. Function Input에는 내장된 값을 입력 유형과 일치하는 모든 값으로 오버라이드할 수 있는 ‘프리뷰' 연결기도 있습니다. 이 예시에서는 Vector3 입력 2개의 프리뷰 값을 제공하기 위해 텍스처 샘플을 사용했습니다.

텍스처 샘플 입력 프리뷰

입력의 디테일 패널을 보면 프리뷰 값을 디폴트로 사용(Use Preview Value as Default) 이라는 옵션이 있습니다. 이 옵션을 활성화하면 머티리얼에서 함수가 호출되었으나 입력에 아무것도 연결되어 있지 않은 경우에 프리뷰 값을 사용합니다. 프리뷰 값은 예비 값 역할을 하며, 입력에 연결된 것이 없을 때 컴파일 오류가 발생하는 것을 방지합니다. 이 경우 입력은 선택적 입력이 되기 때문에 회색으로 나타납니다.

파라미터

머티리얼 함수에서도 일반 머티리얼과 마찬가지로 파라미터를 사용할 수 있습니다. 파라미터는 어떤 머티리얼로든 직접 전송하여 사용할 수 있습니다. 텍스처 파라미터를 사용하는 경우 절차에 차이가 약간 있습니다.

텍스처 파라미터

머티리얼 함수에서 텍스처 파라미터를 사용하려면 FunctionInput 노드를 만든 다음 데이터 유형을 Texture2D 로 변경합니다. 노드를 Texture Sample 노드의 텍스처 오브젝트 오버라이드(Texture object override) 핀에 연결합니다.

함수 내 텍스처 파라미터

머티리얼에서 해당 머티리얼 함수를 사용하려면 TextureObjectParameter 노드를 배치한 다음, 머티리얼 함수의 Texture2D 입력 핀에 연결합니다.

텍스처 오브젝트 파라미터

스태틱 Bool 파라미터

스태틱 스위치 파라미터와 마찬가지로 FunctionInput을 생성한 뒤 입력 유형을 StaticBool 로 변경합니다. StaticSwitch 노드와 연결합니다.

스태틱 스위치 함수

함수를 사용하는 머티리얼에서 StaticBoolParameter 노드를 배치한 뒤 스태틱 Bool을 받는 입력(이 예시에서는 Enable Tiling )에 연결합니다.

스태틱 Bool 파라미터

구조

머티리얼 함수는 함수 자체를 생성하는 데 참여하지 않은 여러 아티스트와 팀원들이 사용하는 경우가 많습니다. 따라서 함수의 역할과 입력 및 출력에 필요한 값을 잘 적어 두는 것이 좋습니다. 함수의 이름과 입력/출력 이름 위에 값을 적을 수 있는 설명 필드가 여러 개 있습니다.

함수 설명

머티리얼 함수에는 함수의 역할을 기록할 수 있는 설명(Description) 필드가 있습니다. 설명을 추가하려면 머티리얼 함수를 편집하는 동안 머티리얼 그래프의 빈 공간을 클릭합니다. 이제 디테일 패널에 표시되는 함수의 프로퍼티에서 필드에 설명을 입력할 수 있습니다.

머티리얼 함수 설명

머티리얼 그래프 내에서 Material Function Call 노드 위에 마우스를 올리면 설명 텍스트가 툴팁으로 표시됩니다.

커스텀 프레넬 툴팁

입력 및 출력 설명

머티리얼 함수의 입력 및 출력 핀에 대해 이름과 설명을 추가할 수 있습니다. 머티리얼 함수를 편집하는 동안 머티리얼 그래프에서 입력이나 출력 노드를 선택합니다. 디테일 패널에서 입력 이름(Input Name)설명(Description) 필드를 채웁니다.

입력 설명

이 머티리얼 함수를 머티리얼에 사용하면 각 입력 핀에 입력한 이름이 표시되고, 마우스를 입력 위에 올리면 설명이 툴팁으로 나타납니다.

입력 툴팁

머티리얼 함수를 편집하는 동안에는 머티리얼 그래프를 정리하고 기록하는 데 필요한 모든 툴을 사용할 수 있습니다. 머티리얼 그래프 정리하기에서 자세한 내용을 확인하세요.

전파

머티리얼 함수를 편집하고 저장(Save) 버튼을 눌러 리컴파일 후 변경사항을 적용하면 이 머티리얼 함수를 참조하는 모든 로드된 머티리얼이나 함수로 새 버전이 전파됩니다. 함수를 참조하지만 로드되지 않은 머티리얼은 다음에 로드 시 변경사항이 업데이트됩니다.

함수에서 입력이나 출력을 삭제하고 변경사항을 전파하면 함수를 사용하는 머티리얼 내의 삭제된 연결기에 대한 링크가 깨지게 됩니다. 전파는 취소할 수 없으므로 머티리얼 함수를 재컴파일하기 전에 이 점을 반드시 고려해야 합니다. 함수가 사용되는 머티리얼이 많을수록 연결이 깨질 가능성도 높으므로 유의하시기 바랍니다.

함수를 사용하는 모든 로드된 머티리얼은 함수 변경사항을 전파할 때 더티 마킹됩니다. 이 점을 활용해 재저장할 수 있는 패키지를 확인하여 로드 시간이 길어지는 것을 방지할 수 있습니다. 콘텐츠 브라우저(Content Browser) 에서 우클릭 한 다음 이것을 사용하는 머티리얼 찾기(Find Materials Using This) 를 선택하면 함수를 사용하는 로드된 머티리얼을 모두 찾을 수 있습니다.

이 함수를 사용하는 머티리얼 찾기

함수 중첩

머티리얼 함수 안에 다른 함수를 중첩시키고 임의로 연쇄 구조를 만들 수 있습니다. 단, 순환 의존성이 만들어지는 방식으로 머티리얼 함수를 중첩시킬 수는 없습니다.

컴파일 오류

머티리얼 함수 내에 오류가 존재하는 경우 머티리얼 컴파일을 시도하면 컴파일 오류 메시지가 표시됩니다. 올바르게 컴파일되지 않은 머티리얼 함수의 상단에는 빨간색 오류 메시지도 표시됩니다. 오류 메시지 위로 마우스를 가져가면 컴파일 오류를 설명하는 툴팁이 나타납니다. 이 예시에서는 머티리얼 함수의 입력이 데이터를 수신하지 못해서 컴파일에 문제가 발생했습니다.

컴파일 오류 메시지

이 오류는 입력에 프리뷰 값을 공급하고 각 입력의 프리뷰 값을 디폴트로 사용(Use Preview Value as Default) 프로퍼티를 활성화하여 방지할 수 있습니다. 하지만 이 방법은 양날의 검이 될 수 있습니다. 눈에 띄는 경고(오류 메시지 등)가 표시되지 않아서 입력이 연결되지 않았다는 사실을 잊을 수 있기 때문입니다. 프리뷰 값 사용하기

디폴트 머티리얼 함수

언리얼 엔진에는 사전 제작된 디폴트 머티리얼 함수가 많습니다. 디폴트 머티리얼 함수는 머티리얼 에디터 팔레트나 우클릭 검색 메뉴에서 사용할 수 있습니다.

디폴트 머티리얼 함수를 편집하려면 콘텐츠 브라우저(Content Browser)Engine > Content > Functions 폴더에서 에셋을 찾을 수 있습니다.

디폴트 머티리얼 함수를 변경하고 저장하면 변경사항이 함수의 모든 인스턴스에 반영됩니다. 따라서 디폴트 머티리얼 함수를 변경하기 전에 함수 사본을 만드는 것을 적극 권장합니다.

언리얼 엔진에 포함된 디폴트 머티리얼 함수에 대한 자세한 내용은 머티리얼 함수 레퍼런스를 참조하세요.