UDN
Search public documentation:

MaterialFunctionsKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 머티리얼과 텍스처 > 머티리얼 함수

머티리얼 함수


문서 변경내역: Daniel Wright 작성. 홍성진 번역.

개요

머티리얼 함수란 패키지에 저장한 다음 여러 머티리얼에 걸쳐 재사용할 수 있는 머티리얼 그래프의 작은 스니펫(조각)입니다. 보통의 머티리얼처럼 머티리얼 에디터에서 편집 가능하지만, 사용할 수 있는 노드에 약간의 제한이 있습니다. 제대로 사용하면 중복된 머티리얼을 줄일 수 있고, 그에 따라 아티스트가 그 중복 표현식을 동기화시키는 데 들이는 수고나, 수정 도중 중복된 것이 빠져 생기는 피할 수 없는 버그도 줄일 수 있습니다.

함수 기본과 빠른 셋업

함수는 머티리얼처럼 콘텐츠 브라우저를 통해 만듭니다. 빈 부분에 우클릭하고 새 머티리얼 함수 를 클릭하면 됩니다.

함수는 사용되는 머티리얼에 대한 자신의 인터페이스를 함수 입력과 출력으로 정의하는데, 그 입출력은 함수에 놓는 노드일 뿐입니다. 입력과 출력에는 이름을 지어, 자신의 머티리얼에서 그 함수를 사용하는 사람들이 그 의미를 파악하는 데 도움을 줄 수 있습니다. 함수에는 최소 하나의 출력이 있어야 유효한 것으로 치며, 입력과 출력 이름도 고유해야 합니다.

FunctionNodes.jpg

함수의 정수는 그 입력과 출력 사이에서 무엇을 하는가 입니다. 이 예제는 레이어를 둘 받아다가 포토샵 스크린 블렌드 처럼 서로 혼합하는 것입니다. 스크린 블렌드 실제 계산 방식을 몰라도 사용할 수 있도록, 함수는 그 기능을 사용하고 싶어하는 아티스트의 디테일을 추상화시켜 놓은 것입니다. 나중에 누군가가 스크린 블렌드 계산 방식을 바꾸고자 한다면 그 함수를 변경하면 되는 것이며, 그 함수를 사용한 모든 머티리얼에 그 변경내용이 자동으로 전파됩니다.

ScreenBlendFunction.jpg

함수를 변경하고나서는 적용 버튼을 클릭해야 그 변경내용이 함수 애셋과 그 함수를 사용하는 머티리얼에 전파됩니다.

머티리얼에서 함수를 사용하려면, 콘텐츠 브라우저에서 그 함수의 아이콘을 집어다가 머티리얼에 떨궈 놓기만 하면 됩니다. 다른 방법으로는, 콘텐츠 브라우저에서 함수를 선택해 둔 상태로 머티리얼 에디터로 가서 F 키를 누른 상태로 클릭하면 됩니다. 그러면 방금 만든 함수 애셋을 리퍼런스하는 MaterialFunctionCall 노드를 만들어 냅니다. 그 후 노드를 입력에 연결해 주고, 출력은 머티리얼에서 사용하려는 곳 어디든 연결해 주면 됩니다.

ScreenBlendInMaterial.jpg

입력에 연결되는 표현식에는 지정된 타입이 있으며, 머티리얼에 함수가 사용될 때 입력 단자 옆의 작은 글자로 표시됩니다. 이 경우 두 입력 모두 vector3 를 받기에 V3 가 표시됩니다. 머티리얼에 사용될 때 입력에 연결되는 것은 무엇이든 그 입력형으로 변환해 줘야 합니다.

전파

함수를 편집하고 변경 적용을 클릭하면, 이 함수를 리퍼런스하는 로드된 머티리얼이나 함수에 새 버전이 전파됩니다. 함수를 리퍼런스하는 언로드된 머티리얼이 있으면, 다음 번 로드될 때 변경사항이 업데이트됩니다.

함수에서 입력이나 출력을 삭제한 상태로 변경사항을 전파하면, 그 함수를 사용하는 머티리얼 안에 삭제된 단자로 연결되는 링크는 깨집니다! 이것을 꼭 알아두셔야 하는 이유는, 전파는 되돌릴 수 없기 때문입니다. 함수가 사용된 머티리얼이 많을 수록 뭔가 끊어질 확률도 높으니, 주의를 요합니다.

함수를 사용하는 모든 로드된 머티리얼은 함수 변경사항이 전파될 때 더티 마킹되며, 이를 활용하여 어느 패키지를 재저장할 것인지 확인하여 로드 시간이 늘어나는 것을 방지할 수 있습니다. 콘텐츠 브라우저에서 우클릭하고 이 옵션을 선택하면, 함수를 사용하는 로드된 머티리얼 전부를 찾을 수 있습니다:

FindUsingMaterials.jpg

체계

함수는 보통 소수가 만들고 다수가 사용하므로, 함수가 하는 일이 무엇이고 그 입력과 출력에 어떤 값이 필요한지 제대로 기록하는 것이 중요합니다. 이런 젼차로 함수에는 함수와 입/출력 이름 위에 여러 기록 필드가 있습니다:

  • Function description - 빈 곳을 클릭하여 함수의 프로퍼티 중 Description 이 있는 곳을 확인합니다. 딱 한 곳만 채우려 한다면, 이 부분을 채우십시오! 함수가 보이는 어느 곳에서든 (콘텐츠 브라우저, 머티리얼 함수 라이브러리, 펑션 콜 노드 등) 툴팁으로 표시됩니다.
  • Input / output descriptions - 함수의 입력과 출력 노드에 위치합니다. 펑션 콜 노드의 입력과 출력에 마우스를 올렸을 때 툴팁으로 표시되는 부분입니다.

함수 설명을 이렇게 채우면:

FunctionProperties.jpg

머티리얼의 툴팁에 이렇게 나타납니다:

FunctionTooltip.jpg

머티리얼 함수 라이브러리

머티리얼 에디터에는 머티리얼 함수 라이브라리라 불리는 창이 있으며, 여기에는 사용가능한 머티리얼 함수가 범주별로 필터링 가능한 목록이 포함되어 있습니다. 이 목록은 로드되었거나, 로드되진 않았더라도 콘텐츠 브라우저가 사용하는 콘텐츠 브라우저 데이터베이스 를 통해 찾은 함수가 있으면 채워지는 목록입니다.

MaterialFunctionLibrary.jpg

이 항목에 마우스를 올리거나, 머티리얼로 끌어 놓거나 하면 툴팁으로 그 설명을 확인할 수 있습니다. 함수 라이브러리에 함수가 나타나게 하려면, 프로퍼티에서 bExposeToLibrary 값을 체크해야 합니다.

FunctionProperties.jpg

꼭 의미있는 라이브러리 범주를 지정하도록 하시고, 새로 만들기보다는 가급적 기존 범주를 재사용해 보시기 바랍니다.

미리보기

머티리얼 함수를 편집할 때, 미리보기 창에는 미리보고 있는 노드가 표시됩니다. 거의 항상 함수 출력을 미리보고 싶을 것입니다.

PreviewingOutput.jpg

함수 입력 노드에는 머티리얼에서 실제 사용될 값을 알지 못하기에 미리보기 값을 지정하는 옵션이 몇 있습니다. 각 입력에는 플로트 인풋 타입에 대한 상수를 나타내는 데 사용되는 PreviewValue 가 내장되어 있습니다. 함수 입력에는 'Preview' 단자도 있어서, 이를 통해 그 내장된 값을 인풋 타입에 일치하는 값으로 덮어쓸 수 있도록 해 줍니다. 이 예제에서는 플로트 3 입력에 대한 미리보기를 제공하기 위해 텍스처 샘플을 사용하고 있습니다.

PreviewTexture.jpg

이 예제에서는 스태틱 불 입력에 대한 디폴트 값을 내기 위해 Static Bool 노드를 사용하고 있습니다.

PreviewStaticBool.jpg

입력에 "Use Preview Value As Default" 라는 옵션을 눈여겨 봅시다. 이 옵션을 켜면 머티리얼 안에 함수가 입력에 연결된 것 없이 사용될 때마다, 컴파일 에러를 내는 대신 미리보기 값을 사용합니다. 이는 입력을 옵션 입력으로 만들기에, 회색으로 그려집니다.

파라미터

함수는 파라미터 노드 타입을 포함할 수 없도록 되어 있는데, 같은 이름을 선언하는 다른 함수와 이름 충돌이 발생할 수 있기 때문입니다. 그러나 입력을 통해 값을 전달하는 식으로는 얼마든지 파라미터를 사용할 수 있습니다. 함수와 함께 벡터나 스칼라 파라미터 값을 사용하려면, 단순히 함수 인풋 벡터형으로 전해 주면 됩니다.

함수와 함께 텍스처 파라미터를 사용하려면, 텍스처 입력을 만들어서 텍스처 샘플 노드의 텍스처 오브젝트 오버라이드에 연결해 주십시오:

TextureParameterFunction.jpg

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

TextureParameterMaterial.jpg

스태틱 스위치 파라미터에 대해서도 비슷하게, 스태틱 불 입력을 만든 다음 StaticSwitch 노드에 연결해 줍니다:

StaticSwitchFunction.jpg

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

StaticSwitchMaterial.jpg

함수 관련 노드

  • MaterialFunctionCall - 다른 머티리얼이나 함수에서 외부 함수를 사용할 수 있도록 합니다. 외부 함수의 입출력 노드는 펑션 콜 노드의 입출력이 됩니다.
  • FunctionInput - 머티리얼 함수에서만 놓을 수 있으며, 함수의 입력 중 하나를 정의합니다.
  • FunctionOutput - 머티리얼 함수에서만 놓을 수 있으며, 함수의 출력 중 하나를 정의합니다.
  • TextureObject - 함수 내 텍스처 함수 입력에 대한 디폴트 텍스처를 제공하기에 좋습니다. 이 노드는 텍스처를 실제로 샘플링하지는 않기에, TextureSample 노드와 함께 사용해야 합니다.
  • TextureObjectParameter - 텍스처 파라미터를 정의하고 텍스처 오브젝트를 출력하며, 텍스처 입력을 가지고 함수를 호출하는 머티리얼 안에서 사용됩니다. 이 노드는 텍스처를 실제로 샘플링하지는 않기에, TextureSample 노드와 함께 사용해야 합니다.
  • StaticSwitch - 입력 값에 따라 두 입력 중 하나를 컴파일 시간에 선택합니다.
  • StaticBool - 함수 안에서 스태틱 불 함수 입력에 대한 디폴트 불 값을 제공하기에 좋습니다. 이 노드 자체로 전환이 일어나지는 않기에, StaticSwitch 노드와 함께 사용해야 합니다.
  • StaticBoolParameter - 스태틱 불 파라미터를 정의하고 스태틱 불 값을 출력하며, 스태틱 불 입력을 가지고 함수를 호출하는 머티리얼 안에서 사용됩니다. 이 노드 자체로 전환이 일어나지는 않기에, StaticSwitch 노드와 함께 사용해야 합니다.

고급

함수는 중첩(함수 안의 함수가) 가능하고, 순환 의존 관계가 되지만 않는다면 임의대로 체인화시킬 수 있습니다.

함수에서 컴파일 에러가 발생하면 MaterialFunctionCall 노드를 사용하는 머티리얼에 그 노드를 빨갛게 강조합니다. 에러 메시지를 통해 에러가 발생한 함수를 알 수도 있습니다. 이 예제에서의 에러는 함수 입력이 연결되지 않았습니다.

CompileErrors0.jpg

이제 함수의 입력이 연결되었으나, 에러 메시지에 따르면 함수 내 Add 노드에 에러가 있다 합니다.

CompileErrors1.jpg

함수를 더블클릭하면 그에 맞는 에디터가 열리며, Add 노드가 있는 곳이 에러때문에 빨갛게 강조되어 있습니다:

CompileErrors2.jpg