머티리얼 함수 제작

머티리얼에 머티리얼 함수를 만들고 사용하는 방법 안내입니다.

Windows
MacOS
Linux

머티리얼 그래프의 일정 부분을 다른 머티리얼 그래프에서 사용할 수 있다면 머티리얼 제작 시간과 작업방식 속도를 크게 올릴 수 있습니다. 언리얼 엔진 4 (UE4) 에는 Material Function (머티리얼 함수)라 하는 기능을 사용해서 그와 같은 작업을 할 수 있습니다. 이번 하우투 예제에서는 비디오 게임에서 자주 볼 수 있는 프레넬 스타일의 셰이딩 이펙트를 머티리얼 함수를 사용해서 재현해 보겠습니다. 프레넬 스타일 이펙트는 오브젝트의 가장자리를 강조하여 가짜 림 라이트 효과를 내거나, 어둠속에서 오브젝트의 실루엣이 더욱 잘 보이도록 만드는 데 흔히 쓰입니다.

머티리얼 함수 생성 문서에도 머티리얼 함수 생성 및 사용 관련 귀중한 정보가 많이 있으니 잊지 마시고 확인해 보세요.

머티리얼 함수

머티리얼 함수란 패키지에 저장한 다음 여러 머티리얼에 걸쳐 재사용할 수 있는 머티리얼 그래프의 작은 스니펫(조각)입니다. 복잡한 머티리얼 그래프 망을 저장하여 다른 머티리얼에서 빠르게 재사용할 수 있으면서, 하나의 노드로 추상화시킬 수 있어 아티스트가 머티리얼을 보다 쉽게 만들 수 있습니다.

머티리얼 함수 생성

머티리얼 함수를 생성하는 방법은 다음과 같습니다.

  1. 먼저 머티리얼 함수를 생성해야 합니다. 그 방법은 콘텐츠 브라우저 에서 우클릭 한 다음 추가 > 머티리얼 & 텍스처 > 머티리얼 함수 를 선택하면 됩니다.

  2. 머티리얼 함수를 만들고 나면 이름을 지어줘야 합니다. 이름은 다른 사람이 봤을 때 머티리얼 함수의 역할을 쉽게 이해할 수 있도록 가급적 설명이 되는 이름으로 짓는 것이 좋습니다. 이 예제에서는 Custom_Fresnel 이라 하겠습니다. 머티리얼 함수의 이름변경은 콘텐츠 브라우저 에서 선택한 다음 키보드의 F2 키를 누른 뒤 원하는 이름을 입력하면 됩니다.

머티리얼 함수 구성하기

  1. 머티리얼 함수를 생성하고 이름을 변경했으면, 콘텐츠 브라우저 에서 더블클릭 하여 열어줍시다. 그러면 다음과 같은 것이 보일 것입니다.

    Material_Function_Editor.png

    머티리얼 함수 에디터는 머티리얼 에디터와 매우 비슷한 방식으로 작동합니다. 가장 큰 차이점을 두 가지 꼽으라면, 디테일 패널의 역할과 최종 머티리얼 노드 작동방식입니다. 머티리얼 함수 관련 자세한 내용은 머티리얼 함수 개요 문서를 확인하시기 바랍니다.

  2. 머티리얼 함수 에디터가 열렸으면, 프레넬 이펙트 구성을 시작해 봅시다. 프레넬 이펙트는 바라보는 각도에 따라 작동하므로, 현재 표면 각도와 카메라 각도를 비교한 다음 Fresnel Value 를 결정해 줄 필요가 있습니다. 셰이더 안에서 그 작업을 하기 위해서는, Dot Product 노드를 사용하여 현재 카메라 각도와 현재 표면을 바라보는 각도를 비교합니다. 머티리얼 노드로 이러한 유형의 계산을 하기 위해서는, 다음의 노드를 활용해야 합니다.

    머티리얼 함수 그래프에 위의 노드를 추가하는 방법은 여러가지 있지만, 가장 쉬운 방법은 팔레트 메뉴에서 각 노드를 검색한 다음 왼쪽 마우스 버튼 으로 잡아 끌어 머티리얼 그래프에 놓는 것입니다. 완료되면 이와 같은 모습일 것입니다.

    Material_Function_Needed_Nodes.png

    프레넬 이펙트는 빛을 보는 각도에 따라 반사면의 명도가 달라지는 현상을 설명하는 데 사용되는 용어입니다. 예를 들어 물웅덩이 위에 서서 웅덩이를 수직으로 내려다본다면, 수면에 반사면이 많이 보이지 않을 것입니다. 웅덩이의 물이 눈높이와 수평이 되도록 고개를 움직이기 시작한다면, 수면의 반사면이 더욱 많아지게 되고, 바로 이러한 유형의 작동방식을 셰이더에서 재현하려고 하는 것입니다. 보는 각도에 따라 시각 정보를 추가하고 제거하는 기능 말이지요.

  3. 노드를 배치했으면, 이제 연결해 줄 차례입니다. 우선 Constant 3 Vector파랑 채널1.0 에 연결합니다. 프레넬 부분의 Z 값을 나타냅니다. Constant 3 Vector 노드의 출력을 잡아 Vector Transform 의 입력에 연결합니다. 또한 탄젠트 스페이스 에서 월드 스페이스 로 변환하도록 Transform 노드를 구성합니다. 그런 다음 Vector Transform 노드의 출력을 Dot ProductA 입력에 연결합니다. 그 작업이 완료되면 Camera Vector 노드의 출력을 잡아 Doc Product 노드의 B 입력에 연결합니다. 완료되면 다음과 같은 모습일 것입니다.

    Material_Function_Nodes_Setup.png

  4. 다음으로 해 줄 작업은 Clamp 노드를 추가하여 결과를 0 에서 1 범위로 제한, 렌더링 부작용이 생길 수 있는 오류가 나지 않도록 하는 것입니다. Clamp 노드는 팔레트 메뉴에서 검색한 다음 머티리얼 그래프에 끌어놓으면 됩니다. 완료되면 다음과 같은 모습일 것입니다.

    Material_Function_Adding_Clamp_Node.png

  5. Clamp 노드 다음에 One-Minus 노드를 추가하여 가장자리만 영향받도록 이펙트를 반전시킵니다. One-Minus 노드는 팔레트 에서 OneMinus 를 검색하면 찾을 수 있습니다. 완료되면 다음과 같은 모습일 것입니다.

    Material_Function_Adding_OneMinus.png

  6. 다음으로 두 개의 함수 입력 노드를 추가해야 합니다. 이 함수 입력 노드를 통해 머티리얼 함수를 다른 머티리얼 안에 배치했을 때 값이나 텍스처를 제공해 줄 수 있습니다. 머티리얼에 함수 입력을 추가하려면 팔레트Function Input 을 검색한 다음 머티리얼 그래프에 끌어 놓습니다. 배치한 이후에는 노드를 선택한 다음 Ctrl+W 키를 눌러 복제합니다. 완료된 모습은 다음과 같을 것입니다.

    Material_Function_Adding_Input_Nodes.png

    함수 입력 노드를 삭제할 때, 다음과 같은 오류가 생길 것입니다. 이 오류는 삭제시 이 머티리얼 함수를 사용한 다른 곳에도 이 입력이 지워진다는 경고입니다. 즉 입력이 없어지면 머티리얼이 더이상 제대로 컴파일되지 않아 게임 플레이 도중 정상 작동하지 않기 때문에, 프로젝트에 머티리얼 함수가 많이 사용된 경우 다수의 다른 머티리얼에 큰 영향을 끼칠 수 있습니다. Material_Function_Delete_Function.png

  7. 이제 이 머티리얼 함수를 머티리얼에서 사용할 수 있도록 만들어준 두 개의 함수 입력 노드를 구성해 줘야 합니다. 함수 입력 노드 중 하나를 선택한 다음 디테일 패널을 보면, 몇 가지 채워넣을 옵션이 보입니다. 이 예제에서는 Input Name (입력 이름), Description (설명), Input Type (입력 유형), Preview Value (미리보기 값)만 채워넣겠습니다. 완료되면 함수 입력 노드는 다음과 같은 모습일 것입니다.

    • Exponent 입력 Material_Function_Input_Node_Exp.png

    • Intensity 입력 Material_Function_Input_Node_Pow.png

    함수 입력 노드의 각 옵션에 대한 상세 정보는, 머티리얼 함수 개요 문서를 참고하세요.

  8. 함수 입력 노드 구성이 완료되었으니, 이제 머티리얼 그래프에 Power (제곱) 노드를 추가해 줘야 합니다. Power 노드는 프레넬 이펙트의 감쇠를 높이거나 낮추기 위해 사용합니다. 그러면 프레넬 이펙트를 메시 가장자리에서 멀어지게 또는 더욱 가까워지게 만들 수 있습니다. Power 노드를 추가하려면, 팔레트 에서 검색한 다음 머티리얼 그래프에 끌어 놓으면 됩니다. 완료되면 다음과 같은 모습일 것입니다.

    Material_Function_Adding_Power.png

  9. 다음, 프레넬 이펙트의 강도 조절을 위해 Multiply (곱하기) 노드를 추가하겠습니다. Multiply 노드를 추가하려면 팔레트 에서 검색한 다음 머티리얼 그래프에 끌어 놓으면 됩니다. 완료되면 다음과 같은 모습일 것입니다.

    Material_Function_Adding_Multiply.png

  10. 필요한 모든 노드를 머티리얼 그래프에 추가했으니, 모든 것을 연결해 줄 차례입니다. 우선, OneMinus 노드의 출력을 Power 노드의 Base 입력에 연결합니다. 그런 다음 첫 번째 함수 입력 노드 Fresnel ExponentPower 노드의 Exp 입력에 연결합니다. 그 작업이 완료되면 Power 노드의 출력을 Multiply 노드의 A 입력에 연결한 다음, 두 번째 함수 입력 Fresnel IntensityMultiply 노드의 B 입력에 연결합니다. 마지막으로 Multiply 노드의 출력을 잡아 출력 결과 노드의 입력에 연결하면 됩니다.

  11. 머티리얼 노드를 전부 연결한 후에는, 메인 툴바의 적용 버튼을 눌러 머티리얼 함수를 컴파일해 줘야 합니다. 머티리얼 함수가 제대로 컴파일되었다면, 적용 버튼이 회색으로 탈색됩니다. 완료되었으면, 다음 그림과 같은 모습일 것입니다.

    Material_Function_Completed_Material.png

머티리얼 함수 사용하기

  1. 머티리얼 함수가 완료되었으니, 머티리얼 함수 에디터를 닫고 콘텐츠 브라우저 에서 머티리얼을 새로 생성합니다. 새 머티리얼을 생성하려면, 콘텐츠 브라우저우클릭 한 다음 기본 애셋 생성 에서 머티리얼 을 선택하고 새로 생성된 머티리얼의 이름을 Fresnel_Material 로 짓습니다.

  2. Fresnel_Material 이 생성되었으면 콘텐츠 브라우저 에서 더블클릭 하여 엽니다. 머티리얼이 열렸으면 먼저 새로 생성된 머티리얼 함수콘텐츠 브라우저 에서 끌어 머티리얼에 놓읍시다.

  3. 이 예제에서는 미리보기를 약간 더 낫게 하기 위해 머티리얼에 다음과 같은 노드를 추가하겠습니다. 팔레트 메뉴에서 노드 이름을 검색하여 아래 노드를 찾은 다음, 팔레트 메뉴에서 노드를 끌어 머티리얼 그래프에 바로 놓으면 됩니다. 완료되면 다음과 같은 모습일 것입니다.

    Material_Function_Adding_Nodes.png

  4. 노드를 전부 추가했으면, 적절한 입력과 출력을 연결해 줄 차례입니다. 먼저 Constant 3 Vector 를 메인 셰이더 노드의 베이스 컬러 에 연결합니다. 그런 다음 Constant One 하나를 메인 셰이더 노드의 메탈릭 입력에 연결합니다. 그리고 Constant One 다른 하나를 메인 셰이더 노드의 러프니스 입력에 연결합니다. 마지막으로 남은 두 개의 Constant One 노드를 Fresnel IntensityFresnel Exponent 에 연결한 다음 Custom_Fresnel 노드의 출력을 메인 셰이더 노드의 이미시브 컬러 입력에 연결해야 할 것입니다. 완료되면 다음과 같은 모습입니다.

  5. 메인 머티리얼 입력에 노드를 연결했으면, 노드에 값 추가를 시작할 차례입니다. 해당하는 각 노드에 다음 값을 입력하고, 완료되면 머티리얼을 컴파일 합니다. 완료되면 다음과 같은 모습일 것입니다.

    • 베이스 컬러: R:1.0 G:0 B:0

    • 메탈릭: 1.0

    • 러프니스: 0.5

    • Fresnel Intensity: 1.0

    • Fresnel Exponent: 5.0

    Material_Function_Complted_Material.png

  6. 머티리얼을 컴파일하고 레벨에서 사용할 준비가 완료되었습니다. 기본 레벨에 아무 메시에다 적용했을 때 어때 보이는지 예제입니다. Material_Function_Final_Results.png

결론

머티리얼 함수는 머티리얼 생성 및 반복처리 작업을 통합시켜 가속시키는 데 정말 큰 도움이 되는 매우 강력한 도구입니다. 하지만 모든 강력한 도구가 그렇듯이, 제대로 위력을 발휘하도록 하기 위해서는 주의를 기울여야 합니다. 현재 머티리얼에 사용중인 기존 머티리얼 함수에 수정을 가한 경우, 머티리얼 함수에 오류가 생기거나 편집중 일부 함수성이 제거되어 사용된 머티리얼이 깨질 수 있다는 점 유념하시기 바랍니다.

태그
Select Skin
Light
Dark

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

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

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

네이버 카페
공식 포럼