언리얼 엔진 | 머티 리얼 함수 개요 
 머티 리얼 함수 개요 
 FunctionInput 노드 
 FunctionOutput 노드 
 공통 프로 퍼티 
 디폴트 머티 리얼 함수 
 머티 리얼 함수 란 패키지 에 저장 되 는 머티 리얼 그래프 의 작 은 조각 들 로 , 다수 의 머티 리얼 에 재 사용 가능 한 것 을 말 합니다 . 그 목적 은 자주 사용 되 는 머티 리얼 노드 네트워크 를 즉시 접근 할 수 있 도록 하 여 머티 리얼 제작 프로세스 의 효율 을 높이 는 데 있 습니다 . 예 를 들 어 마구잡이 텍스처 패닝 처리 만 을 위한 네트워크 를 자주 만든다 칠 때 , 그 부분 을 담당 하 는 네트워크 를 머티 리얼 함수 로 저장 해 두 고 그런 동작 이 필요 할 때 마다 사용 해 주 기 만 하 면 훨씬 빠른 작업 이 가능 합니다 . 
 함수 는 머티 리얼 에디터 에서 일반 머티 리얼 처럼 수정 가능 하 나 , 어느 노드 를 사용 할 수 있 는지 에 대해서 는 약간 의 제약 이 있 습니다 . 제대로 사용 만 하 면 머티 리얼 중복 을 줄일 수 있 으며 , 이 는 차례 로 아티스트 들 이 그러 한 중복 표현식 을 동기 화 시키 느라 드 는 노력 도 줄이 게 되 며 , 수정 도중 중복 된 것 이 빠지 게 되 면 피치 못하 게 발생 하 는 버그 도 줄일 수 있 습니다 . 
 머티 리얼 함수 는 콘텐츠 브라우저 에 나타나 는 애 셋 이 기 도 합니다 . 머티 리얼 함수 의 그래프 는 머티 리얼 의 것 과 는 다른데 , 머티 리얼 함수 는 최종 함수 의 출력 연결 을 나타내 는 출력 노드 가 나타난다는 점 에서 메인 머티 리얼 노드 와 다릅니다 . 
 머티 리얼 함수 는 전자 제품 의 외관 같 은 것 으로 생각 해 볼 수 있 습니다 . 입력 과 출력 은 필요 한 만큼 추가 시킬 수 있 으되 , 함수 의 내부 는 입력 과 출력 사이 에서 벌어지 는 일 입니다 . 이 예제 에서 는 두 개 의 레이어 를 받아들인 다음 포토샵 스크린 블 렌 드 처럼 화면 을 합성 합니다 . 이 함수 는 아티스트 가 스크린 블 렌 드 작업 을 사용 하 기 위해 스크린 블 렌 드 의 구체 적 인 연산 을 알 필요 는 없 도록 하 기 위해 , 그 세부 적 인 내용 을 추상 화 시켜 놓 은 것 입니다 . 나중 에 누군가 가 스크린 블 렌 드 연산 방식 을 바꾸 고자 할 경우 , 이 함수 를 수정 해 주 기 만 하 면 그 변경 내용 이 그 함수 를 사용 한 모든 머티 리얼 에 자동 으로 전파 됩니다 . 
 위 에서 볼 수 있 듯이 입력 과 출력 사이 에서 일어나 는 일 은 전적 으로 자신 에게 달려 있 고 , 표준 머티 리얼 표현식 노드 의 네트워크 에 의해서 정의 됩니다 . 그런데 머티 리얼 에 머티 리얼 함수 를 놓 고 나 면 , 그 함수 의 노드 와 그 입출력 만 보이 게 됩니다 . 
 머티 리얼 함수 가 완료 되 면 , 머티 리얼 생성 도중 쉬운 접근 을 위해 머티 리얼 함수 라이브러리 에 퍼블리싱 해야 합니다 . 머티 리얼 함수 라이브러리 란 머티 리얼 에디터 에 있 는 창 으로 , 사용 가능 한 머티 리얼 함수 목록 을 카테고리 별 로 필터 를 적용 해서 볼 수 있 습니다 . 이 리스트 는 로드 된 함수 를 통해 채워 지 기 도 하 고 , 로드 되 지 는 않 았 더라도 콘텐츠 브라우저 에 사용 되 는 콘텐츠 브라우저 데이터베이스 를 통해 찾 은 함수 를 통해 채워 지 기 도 합니다 . 
 이 항목 위 에 커서 를 올리 면 설명 을 툴 팁 으로 확인 할 수 있 으며 , 드래그 앤 드롭 으로 머티 리얼 에 끌 어 놓 을 수 도 있 습니다 . 
 머티 리얼 함수 라이브러리 에 머티 리얼 함수 가 나타나 도록 하 려면 , 그 프로 퍼티 중 Expose To Library 를 체크 해야 합니다 . 함수 안 에 있 을 때 아무 노드 도 선택 하 지 않 은 상태 에서 는 함수 자체 의 기본 프로 퍼티 를 볼 수 있 는데 , 여기 서 이 프로 퍼티 를 찾 을 수 있 습니다 . 
 머티 리얼 함수 라이브러리 에 기본 으로 존재 하 는 전체 함수 목록 은 머티 리얼 표현식 참고서 페이지 를 확인 하 시 기 바랍니다 . 
 아래 는 머티 리얼 함수 에 관련 된 머티 리얼 함수 노드 와 그 용도 에 관한 설명 입니다 : 
 MaterialFunctionCall - 다른 머티 리얼 이나 함수 에서 의 외부 함수 사용 을 허가 합니다 . 외부 함수 의 입력 과 출력 노드 가 Function Call 노드 의 입력 과 출력 이 됩니다 . 
 FunctionInput - 머티 리얼 함수 안 에 만 놓 을 수 있 으며 , 함수 의 입력 중 하나 를 정의 합니다 . 
 FunctionOutput - 머티 리얼 함수 안 에 만 놓 을 수 있 으며 , 함수 의 출력 중 하나 를 정의 합니다 . 
 TextureObject - 함수 내 텍스처 함수 입력 에 대한 디폴트 텍스처 를 제공 하 기 에 좋 습니다 . 텍스처 를 실제로 샘플링 하 지 는 않 는 노드 이 기에 , TextureSample 노드 와 함께 사용 해야 합니다 . 
 TextureObjectParameter - 텍스처 파라미터 를 정의 하 고 텍스처 오브젝트 를 출력 하 는데 , 텍스처 입력 으로 함수 를 호출 하 는 머티 리얼 에 사용 됩니다 . 텍스처 를 실제로 샘플링 하 지 는 않 는 노드 이 기에 , TextureSample 노드 와 함께 사용 해야 합니다 . 
 StaticSwitch - 컴파일 시간 에 , 입력 값 에 따라 두 입력 중 하나 를 선택 합니다 . 
 StaticBool - 함수 내 스 태 틱 불 함수 입력 의 기본 부울 값 을 제공 하 기 에 좋 습니다 . 실제 전환 을 하 는 노드 는 아니 기에 , StaticSwitch 노드 와 함께 사용 해야 합니다 . 
 StaticBoolParameter - 스 태 틱 불 파라미터 를 정의 하 고 스 태 틱 부울 값 을 출력 하 는데 , 스 태 틱 불 입력 으로 함수 를 호출 하 는 머티 리얼 에서 사용 됩니다 . 실제 전환 을 하 지 는 않 는 노드 이 기에 , StaticSwitch 노드 와 함께 사용 해야 합니다 . 
 머티 리얼 함수 는 노드 네트워크 를 캡슐 화 시킨 것 이 기에 , 데이터 가 드나들 수 있 도록 하 는 것 은 사용 자 의 몫 입니다 . 그 처리 는 FunctionInput 과 FunctionOutput 노드 를 통해 이루 어 집니다 . 머티 리얼 함수 사용 에 있 어서 는 이 노드 에 대한 이해 가 필수 적 입니다 . 
 함수 자체 내 에서 FunctionInput 와 FunctionOutput 노드 는 다음 과 같이 나타납니다 : 
 그러나 외부 에서 , 함수 가 머티 리얼 안 에 사용 될 때 그 노드 는 입력 과 출력 에 대한 핀 역할 을 합니다 : 
 언급 했 듯이 MaterialInput 노드 는 머티 리얼 함수 에 들어가 는 데이터 가 통과 하 는 관문 역할 을 합니다 . 이 입력 노드 는 어느 함수 든 몇 개 든지 가질 수 있 으며 , 그 각각 은 함수 자체 에 나타나 는 입력 핀 에 해당 됩니다 . 
 다음 과 같 은 프로 퍼티 와 데이터 핀 이 있 습니다 : 
 입력 이름 - 함수 밖 에서 보이 는 입력 이름 입니다 . 
 설명 - 함수 의 입력 핀 에 마우스 를 올렸 을 때 사용 자 에게 보이 는 입력 에 대한 설명 입니다 . 
 입력 유형 - 입력 이 받 을 데이터 유형 을 말 합니다 . 아래 입력 유형 참고 . 
 미리 보 기 값 - 생성 프로세스 도중 함수 가 하 는 작업 을 시각 화 시켜 보 는 데 도움 이 되 는 테스트 수단 으로 활용 됩니다 . 여기 입력 된 값 은 마치 함수 밖 에서 입력 을 통해 전송 된 값 인 양 활용 됩니다 . 
 미리 보 기 값 을 기본 값 으로 사용 - 미리 보 기 값 으로 설정 된 데이터 를 기본 값 으로 사용 할 수 있 게 해 주 는 체크 박스 입니다 . 사용자 가 이 값 에 대해 함수 에 입력 을 따로 준비 하 지 않 아도 되 게끔 하 고 플 때 좋 습니다 . 
 소트 우선 순위 - 함수 의 노드 에 나열 되 는 입력 핀 의 순서 를 조절 하 는 데 사용 되 는 수치 입니다 . 낮 은 수 에서 높 은 수 순 입니다 . 
 미리 보 기 - Preview Value 프로 퍼티 보다 우선 하 는 값 을 받 는 입력 입니다 . 관련 된 프로 퍼티 와 함께 , 이 값 은 함수 생성 도중 의 테스트 와 기본 값 설정 에 좋 습니다 . 
 무제 - 함수 가 처리 하 게 될 입력 데이터 에 대한 출력 을 제공 합니다 . 
 FunctionOutput 노드 는 처리 된 데이터 가 최종 함수 를 빠져나가 는 출구 로 , 앞 으로 계속 해서 머티 리얼 에 사용 될 것 입니다 . FunctionInput 노드 와 마찬가지 로 함수 는 이 노드 를 몇 개 든 가질 수 있 어 , 출력 갯 수 든 몇 개 든 가능 합니다 . 
 FunctionOutput 노드 의 프로 퍼티 는 다음 과 같 습니다 : 
 출력 이름 - 함수 바깥 에서 보이 는 출력 이름 입니다 . 
 설명 - 사용 자 가 함수 의 출력 핀 에 커서 를 올렸 을 때 보이 는 이 출력 에 대한 설명 입니다 . 
 소트 우선 순위 - 함수 의 노드 에 나타나 는 출력 핀 의 순서 를 조절 하 는 수치 입니다 . 낮 은 수 에서 높 은 수 순 입니다 . 
 무제 - 함수 가 처리 한 데이터 에 대한 입력 을 제공 합니다 . 이 데이터 는 머티 리얼 에서 사용 할 수 있 도록 함수 밖 으로 전송 됩니다 . 
 입력 에 는 그 에 연결 된 표현식 이 필요 로 하 는 전용 유형 이 있 는데 , 그 설정 은 FunctionInput 노드 의 Input Type 프로 퍼티 를 통해 합니다 . 함수 밖 에서 보 면 , 머티 리얼 에 이 함수 가 사용 될 때 입력 핀 옆 에 약간 의 글자 로 이 유형 이 표시 됩니다 . 이 경우 두 입력 모두 Vector 3 였 다면 V 3 가 표시 됩니다 . 머티 리얼 에 사용 된 입력 에 연결 되 는 것 은 무엇 이 든 해당 입력 유형 으로 변환 시켜야 하 며 , 그렇게 하 지 않 으면 오류 가 납니다 . 
 아래 는 사용 가능 한 입력 유형 과 그 에 관련 된 약자 입니다 : 
 함수 디자인 도중 , 아무 노드 도 선택 하 지 않 으면 함수 자체 의 기본 프로 퍼티 를 볼 수 있 습니다 . 
 설명 - 사용 자 가 함수 리스트 에 있 는 함수 또는 머티 리얼 에디터 에서 함수 노드 몸체 에 커서 를 올렸 을 때 툴 팁 으로 나타나 는 설명 입니다 . 
 라이브러리 에 노출 - 이 박스 가 체크 되 면 머티 리얼 함수 는 머티 리얼 에디터 내 머티 리얼 함수 리스트 에 나타나 며 , 머티 리얼 에 사용 할 수 있 게 됩니다 . 새로 등록 한 함수 가 나타나 게 하 려면 에디터 를 재 시작 해야 할 수 도 있 습니다 . 
 라이브러리 카테고리 - 이 함수 가 머티 리얼 함수 탭 의 어느 카테고리 에 나타나 는지 를 전부 담 는 배열 입니다 . 
 머티 리얼 함수 를 편집 할 때 , 해당 노드 는 미리 보 기 창 에 표시 됩니다 . 아무 노드 에 나 우 클릭 한 다음 Start Previewing Node ( 노드 미리 보 기 시작 ) 을 선택 하 면 해당 지점 까지 의 네트워크 결과 를 미리 볼 수 있 습니다 . 
 대부분 미리 보 려는 것 은 함수 출력 이 라 기본 적 으로 함수 출력 을 미리 보 게 됩니다 . 
 함수 입력 노드 에 는 미리 보 기 값 을 지정 하 는 옵션 이 있 습니다 . 머티 리얼 에서 실제 어떤 값 으로 사용 될지 알 지 못하 기 때문 입니다 . 각 입력 에 는 내장 된 PreviewValue ( 미리 보 기 값 ) 이 있 어 , 실수 입력 유형 에 대한 상수 를 표시 하 는 데 사용 할 수 있 습니다 . 함수 입력 에 는 ' Preview ' 핀 도 있 어 , 내장 된 값 을 입력 유형 에 맞 는 값 으로 덮 어 쓸 수 있 습니다 . 이 예제 에서 는 float 3 입력 에 대한 미리 보 기 를 제공 하 기 위해 텍스처 샘플 이 사용 되 었 습니다 . 
 이 예제 에서 는 스 태 틱 불 입력 에 대한 기본 값 으로 Static Bool 노드 가 사용 되 고 있 습니다 . 
 참고 로 입력 에 는 " Use Preview Value As Default " ( 미리 보 기 값 을 기본 값 으로 사용 ) 이 라는 옵션 이 있 습니다 . 켜 면 머티 리얼 에 이 함수 가 사용 되 고 그 입력 에 아무것 도 연결 되 어 있 지 않 아도 , 오류 를 내 는 대신 미리 보 기 값 이 사용 됩니다 . 이 옵션 은 입력 을 옵션 입력 으로 만들 기 에 , 회색 으로 그려집니다 . 
 함수 는 이제 파라미터 노드 유형 을 포함 할 수 있 습니다 . 이 파라미터 는 아무 머티 리얼 에 직접 전달 하 여 사용 할 수 있 습니다 . 
 함수 에 텍스처 파라미터 를 사용 하 려면 , 텍스처 입력 을 만들 어 텍스처 샘플 노드 의 텍스처 오브젝트 덮어쓰 기 에 연결 합니다 : 
 그런 다음 함수 를 사용 하 는 머티 리얼 에 TextureObjectParameter 노드 를 놓 은 다음 텍스처 입력 에 연결 합니다 : 
 스 태 틱 스위치 파라미터 와 비슷 하 게 , Static Bool 입력 을 만든 다음 StaticSwitch 노드 에 연결 합니다 : 
 그런 다음 함수 를 사용 하 는 머티 리얼 에서 StaticBoolParameter 노드 를 놓 은 다음 스 태 틱 불 입력 에 연결 합니다 : 
 함수 는 보통 소수 의 사람 이 만들 지만 다수 의 사람 이 사용 하 므로 , 함수 가 어떤 역할 을 하 는지 , 그 입력 과 출력 에 는 어떤 값 이 필요 한지 문서화 를 잘 시켜 두 는 것 이 중요 합니다 . 이런 젼 차 로 함수 에 는 함수 이름 과 입력 / 출력 이름 위 에 설명 칸 이 여럿 있 습니다 : 
 함수 설명 - 빈 곳 에 클릭 하 면 함수 의 프로 퍼티 중 Description , 설명 부분 을 볼 수 있 습니다 . 설명 칸 을 딱 하나 만 채우 겠 다면 , 여기 를 채워 주 세요 ! 함수 가 표시 되 는 곳 이 면 ( 콘텐츠 브라우저 든 , 머티 리얼 함수 라이브러리 든 , 펑션 콜 노드 든 ) 어디 든 툴 팁 으로 표시 됩니다 . 
 입력 / 출력 설명 - 함수 의 Input 과 Output 노드 에 위치 합니다 . Function Call 노드 의 입력 과 출력 에 커서 를 올렸 을 때 툴 팁 으로 표시 됩니다 . 
 이렇게 설명 을 채워 넣 은 함수 를 : 
 머티 리얼 에 사용 하 면 다음 과 같이 표시 됩니다 : 
 함수 를 편집 하 고 변경 적용 을 선택 하 면 , 새로운 버전 이 로드 된 머티 리얼 이나 이 함수 가 가리키 는 함수 에 전파 됩니다 . 그 함수 를 가리키 는 머티 리얼 중 로드 되 지 않 은 것 이 라도 다음 에 로드 될 때 변경 내용 이 적용 됩니다 . 
 함수 에서 입력 이나 출력 을 삭제 한 다음 변경 내용 을 전파 시키 면 , 함수 를 사용 하 는 머티 리얼 내 삭제 된 핀 으로 연결 된 링크 는 모두 깨 집니다 ! 주의 해야 할 부분 인데 , 전파 는 되돌릴 수 없 기 때문 입니다 . 함수 가 사용 된 머티 리얼 이 많 을 수록 , 깨 질 확률 도 높 아 지 니 주의 하 시 기 바랍니다 . 
 그 함수 를 사용 하 는 로드 된 머티 리얼 전부 는 함수 변경 내용 전파 시 더티 마킹 되 어 , 재 저장 이 필요 한 패키지 만 확인 하 여 로드 시간 이 늘어나 는 것 을 방지 할 수 있 습니다 . 콘텐츠 브라우저 에서 어느 함수 에 우 클릭 한 후 다음 과 같 은 옵션 을 선택 하 면 해당 함수 를 사용 하 는 로드 된 머티 리얼 을 전부 찾 을 수 있 습니다 : 
 함수 는 꼬리 에 꼬리 를 물 어 순환 되 지만 않 는다면 , 임의 대로 중첩 ( 함수 안 에 함수 있 다 ) 및 연쇄 시킬 수 있 습니다 . 
 함수 안 에 컴파일 오류 가 발생 하 면 그것 을 사용 하 는 머티 리얼 내 MaterialFunctionCall 노드 가 빨갛 게 강조 됩니다 . 오류 메시지 를 통해 오류 가 어느 함수 에서 발생 했 는지 도 알 수 있 습니다 . 이 예제 에서 발생 한 오류 는 , 함수 의 입력 이 연결 되 지 않 아 발생 한 것 입니다 . 
 위 의 오류 들 은 입력 에 미리 보 기 값 을 넣 은 다음 각 입력 의 Use Preview Value as Default ( 미리 보 기 값 을 기본 값 으로 사용 ) 옵션 을 켜 주 면 한 번 에 해결 할 수 있 습니다 . 그런데 이런 방법 은 양날 의 칼 이 될 수 가 있 는데 , 입력 을 연결 하 지 않 아도 ( 오류 메시지 처럼 ) 별다른 경고 가 발생 하 지 않 기 때문 입니다 . 
 함수 에 입력 을 연결 해 줬 는데도 , 오류 메시지 에 의하 면 함수 내 OneMinus 노드 에 오류 가 있 다 합니다 . 
 함수 를 더블 클릭 하 여 에디터 에서 열 어 보 니 , OneMinus 노드 가 오류 때문 에 빨갛 게 강조 되 어 있 습니다 : 
 언리얼 엔진 4 에 는 이미 다수 의 머티 리얼 함수 가 포함 되 어 있 으며 , 머티 리얼 에디터 팔레트 을 통해 사용 할 수 있 습니다 . 
 디폴트 머티 리얼 함수 는 콘텐츠 브라우저 를 통해 Engine > Functions 폴더 에서 열 어 편집 할 수 있 습니다 . 
 디폴트 머티 리얼 함수 를 변경 하 고 저장 한 경우 , 그 변경 내용 은 해당 함수 의 모든 인 스턴스 에 전해 지 게 됩니다 . 그렇 기에 보통 은 , 기존 함수 를 변경 하 고자 한다면 사본 을 만들 어 변경 하 는 것 이 바람직 합니다 . 
 이러 한 디폴트 함수 에 대산 상세 정보 는 머티 리얼 표현식 참고서 페이지 를 확인 하 시 기 바랍니다 .