https://youtu.be/KYmd_LNlw2c?si=sJASbOfGFPOFIPDt

안녕하세요, 여러분. 저는 Epic Games의 Developer Relations 팀 소속 Technical Artist, Camille Kay입니다.

오늘은 언리얼 머티리얼(Unreal Materials)의 새로운 기능과 생산성 향상에 대해 말씀드리겠습니다.

오늘 다룰 내용을 간략히 안내해 드립니다. 먼저 5.6 버전부터 시작하여 올해 Material 시스템에 추가된 다양한 편의성 업데이트들을 살펴보겠습니다. 다소 빠르게 진행되겠지만, 모든 내용은 추후 EDC에서 확인하실 수 있습니다.
이어서 오늘부터 바로 미리보기(preview) 버전에서 사용해 보실 수 있는 5.7 업데이트에 대해 설명드리겠습니다. 이 두 가지 섹션이 오늘 다룰 내용의 대부분을 차지할 것입니다.
그 후, 5.7의 새로운 기본 기능인 Substrate에 대해 간략히 이야기하고, Material 시스템의 향후 업데이트에 대한 스니크 피크를 공유해 드릴 예정입니다.
마지막으로, 지금이 행사 시작 시점인 만큼, 여러분께서 흥미롭게 보실 만한 Fest 내 다른 세션들을 몇 가지 추천해 드리고자 합니다.

이제 앞서 언급했던 resource link를 공유하고, 시간이 남는다면 Q&A 시간을 갖도록 하겠습니다. 그럼 시작해 보시죠.

올해 초, 저희는 언리얼 엔진 5.6 버전을 출시했습니다. 이 버전은 Material Dev 팀의 상당한 노력을 반영하고 있습니다.

새로운 기능 구현과 더불어, 말씀드린 것처럼 많은 Quality of Life 개선이 이루어질 것입니다. 이러한 변화들은 Material 시스템의 일상적인 사용 경험에 긍정적이고 눈에 띄는 차이를 가져올 것으로 기대합니다.

새로운 노드인 Convert 노드에 대해 살펴보겠습니다. Convert 노드는 시간과 공간을 절약해 주는 강력하고 유연한 노드입니다. make, break, swizzling 연산 및 materials에 대해 더욱 간결하고 직접적인 인터페이스를 제공하여 다양한 용도로 활용될 수 있습니다.
이전처럼 데이터를 원하는 형태로 만들기 위해 여러 append 노드를 쌓아야 했던 번거로움이 사라졌습니다. Convert 노드 하나로 모든 것을 처리하여 복잡성을 줄이고 가독성을 높여줍니다. 또한 iteration time을 단축하는 데도 도움이 됩니다.
이 노드를 사용하려면 마우스 오른쪽 클릭 메뉴를 열고 'convert'를 검색하면 됩니다. 관련 프리셋 목록이 나타날 것입니다.

'make vector 3', 'break float 4'와 같이 미리 정의된 노드 외에도 'convert'라는 옵션이 있습니다. 이 노드를 선택하면 미리 설정된 핀 없이 그래프에 단순한 노드가 생성되며, 'add inputs'와 'add outputs' 옵션만 제공됩니다.
각 '+' 아이콘을 클릭하여 원하는 핀 타입을 선택할 수 있습니다. 'scalar', 'vector 2', 'vector 3', 'vector 4' 등의 타입을 지원하며, 노드는 양쪽에 원하는 모든 타입의 여러 입력을 추가하는 것을 지원합니다.
이 예시에서는 입력 측에 'scalar', 'vector 3', 'vector 2'를, 출력 측에는 'vector 2'와 'vector 3'을 사용했습니다. 이 노드는 매우 유연하여 원하는 대로 핀을 추가하거나 삭제할 수 있습니다. 핀을 삭제하려면 해당 핀을 우클릭하고 'Delete Pin'을 선택하십시오. 'Delete'는 노드 전체를 삭제하므로 주의해야 합니다.
'convert' 노드의 활용 예시를 살펴보겠습니다. RGBA 순서를 BGRA로 변경하거나, 여러 'scalar' 파라미터를 조합하여 'float 3'을 만들 수 있습니다. 또한, 'vector 2'와 'scalar'와 같은 다양한 입력 타입을 조합하여 데이터를 'swizzle'할 수도 있습니다.

벡터를 개별 float 값으로 분리할 수 있습니다. 노드에서 직접 값을 지정할 수 있다는 점도 유용합니다. 반드시 핀을 연결해야 하는 것은 아닙니다. 예를 들어, 이 예시에서는 외부 와이어 없이 0으로 설정된 scalar input과 내부 와이어 없이 3으로 설정된 output pin이 있습니다. 따라서 결과 벡터는 103이 됩니다.

오늘은 새로운 길 찾기에 유용한 두 가지 방법을 알려드리겠습니다.
첫째, **Reroute Nodes** 기능이 개선되었습니다. 이전 버전(5.5)에서는 이미 선언된 Reroute Node의 사용을 추가하려면 그래프 상에서 이름을 검색해야 했습니다. 이 과정은 괜찮았지만, 더 빠르게 할 수 있습니다.
5.6 버전에서는 여전히 이전 방식을 사용할 수 있습니다. 특히 Reroute Node가 화면 멀리 떨어져 있을 때 유용합니다. 하지만 Reroute Node가 시야 안에 있다면, 더 쉬운 방법이 있습니다.
이제 Reroute Node를 직접 우클릭하여 'Create Reroute Usage' 옵션을 선택하면 간단하게 Reroute Usage Node를 만들 수 있습니다. 매우 편리해졌습니다.
또한, 이제 쉽게 찾을 수 있는 새로운 방법이 추가되었습니다.

이미 생성한 named reroutes로 이동합니다. 그래프에서 몇 개를 더 만들었다고 가정해 보겠습니다.

명명된 reroute declaration에서 마우스 오른쪽 버튼을 클릭한 후, 'Select Named Reroute Usages'를 선택하시면 'Find Results' 탭에 해당 노드에서 파생된 모든 항목 목록이 표시됩니다. 목록의 노드 이름을 클릭하면 해당 그래프가 선택한 항목으로 강조 표시됩니다. 이를 통해 에셋을 훨씬 쉽게 찾을 수 있습니다.
'Jump to Node Definition' 바로가기도 새롭게 추가되어, 블루프린트와 동일한 기능을 제공합니다. 예시로, 재질 속성 'Space Color'에 있는 Vector Parameter 노드를 마우스 오른쪽 버튼으로 클릭하고 'Go To Definition' 옵션을 선택하시면 IDE 로딩 후 해당 코드 파일이 열립니다.
5.6 버전부터는 노드 미리보기(Preview)가 더욱 편리해졌습니다. 이전에는 노드에서 마우스 오른쪽 버튼을 클릭하여 'Start Previewing Node'를 선택해야 했습니다. 하지만 이제 모든 노드 상단 제목 표시줄에 확장/축소 아이콘 옆에 미리보기 버튼이 추가되었습니다. 이 버튼을 클릭하면 해당 노드의 미리보기가 활성화됩니다.
미리보기 기능은 선택된 노드에 연결된 그래프 부분의 결과를 마치 노드가 'Base Color' 재질 속성에 연결된 것처럼 보여줍니다. 이는 디버깅 및 반복 작업에 매우 유용합니다. 또한, 노드 위에서 'Shift' + 'Space' 키를 눌러 미리보기를 활성화할 수 있으며, 노드를 클릭할 필요 없이 편리하게 사용할 수 있습니다.
새로운 노드 연결 단축키도 제공됩니다. 이전에는 기존 노드에서 와이어를 드래그하거나 노드를 별도로 검색하여 생성 후 수동으로 연결해야 했습니다. 이제 5.6 버전에서는 기존 노드를 선택한 후 그래프의 빈 공간에서 마우스 오른쪽 버튼을 클릭하고 원하는 노드를 선택한 뒤, 'Shift' 키를 누른 상태로 메뉴 옵션을 클릭하거나 'Enter' 키를 누르면 해당 위치에 자동으로 연결된 새 노드가 생성됩니다.
5.6 버전에서는 'Parameters' 탭에서 파라미터 이름을 더블 클릭하면 해당 파라미터가 그래프에서 선택 및 포커스됩니다.

Material 노드 자체에서 파라미터가 정의되는 방식을 활용합니다. 이는 Material과 Material Function 모두에 적용됩니다. 만약 파라미터가 하위 함수(sub-function)나 별도의 Material 에셋에 정의되어 있다면, 해당 에셋이 열리고 새 에디터에서 해당 노드가 선택됩니다.

해당 asset이 이미 열려 있다면, editor는 해당 tab 또는 window로 전환합니다.

노드에 집중하십시오. 이 예시에서는 다른 파라미터 이름을 클릭하면 그래프가 반응하는 것을 볼 수 있습니다.

다음으로, live updates에 대한 개선 사항을 소개해 드립니다. 이는 엔진이 수동 저장, 재시작 또는 재컴파일 없이 실시간으로 변경 사항의 시각적 결과를 보여주는 기능을 향상시킨 것입니다.

세 가지 변경 사항 중 첫 번째를 다루겠습니다.

5.6 버전부터는 노드 안에서 직접 파라미터 값을 수정하는 기능이 추가되었습니다. Details Panel에서 스크럽(scrub)한 값은 이제 노드 안에서도 업데이트됩니다.

동시에 material preview를 확인할 수 있어 매우 좋습니다. 이제 material instances를 사용하는 시대는 갔습니다.

부모 노드(parent material)의 값을 더 명확하게 설정하기 위해, 이는 확실히 생산성 향상에 크게 기여할 것으로 기대됩니다.

동일한 맥락에서, MaterialLayer 인스턴스의 썸네일에도 파라미터 변경 사항이 반영될 것입니다. 이를 통해 MaterialLayer는 기존 Material 인스턴스와 동일한 수준으로 업데이트됩니다.

뷰포트와 콘텐츠 브라우저 간의 시각적 일관성을 유지하여 작업을 더욱 편리하게 만들어 줍니다.

이 세트의 마지막 기능으로, Editing Library를 통해 MaterialInstanceUpdates를 실시간으로 적용할 수 있습니다. MaterialEditingLibrary를 통해 MaterialInstanceParameters를 설정할 때,

Material Instance Editor에서 수동 recompiles나 save 없이 업데이트된 visuals를 확인할 수 있습니다. Python이나 Blueprints를 통해 parameter를 변경할 수 있습니다.

Python 스크립트를 통해 해당 백그라운드 창에서 값이 설정되며, 이에 따라 미리보기가 업데이트됩니다.

5.6 버전에서는 노드 검색 기능이 개선되었습니다. 이전 버전에서는 컨텍스트 메뉴에서 노드를 검색할 때 직관적이지 않은 결과가 우선적으로 표시되는 경우가 있었습니다. 예를 들어 'object posse'를 검색하면 의도와 다른 'object scale material function'이 강조 표시되었습니다. 이제 5.6 버전에서는 동일한 검색 시 'object position WS' 노드가 올바르게 강조 표시됩니다. 검색 결과는 노드의 제목, 설명, 카테고리 등 에디터 설정에 정의된 가중치 정보에 기반하며, 제목 일치가 더욱 강화되었습니다. 이러한 설정은 필요에 맞게 조정할 수 있습니다.
5.6 버전에서는 속성 검색에 키워드가 포함됩니다. 언리얼 엔진 초보자가 머티리얼 속성에서 'displacement pin'을 활성화하려고 할 때, 5.5 버전에서는 'Displace'를 검색해도 관련 설정은 나오지만 활성화 방법은 알 수 없었습니다. 이러한 불편함을 해소하기 위해 5.6 버전에서는 동일한 검색으로 'enable tessellation'이 결과에 포함되어 필요한 설정을 찾을 수 있게 되었습니다. 이제 디테일 패널은 'Keywords Meta Specifier'를 검색하며, 이는 이전에는 블루프린트와 변수에만 적용되었습니다. 따라서 기능적 통일성이 확보되었으며, 'displacement' 키워드가 'enable tessellation' 옵션에도 추가되었습니다.
머티리얼 파라미터 컬렉션 내 파라미터가 머티리얼 에디터에서 검색 가능하게 되었습니다. 머티리얼 파라미터 컬렉션을 그래프에 드롭하고 MPC 노드를 생성한 후, 디테일 패널에서 파라미터 이름을 클릭하면 모든 옵션을 확인할 수 있습니다. 유사한 이름의 파라미터가 많을 경우 스크롤하여 찾는 것이 번거롭거나 오류 발생 가능성이 있었습니다. 이제 검색 바에 쿼리를 입력하면 결과가 필터링되어 원하는 항목을 빠르고 쉽게 찾고 선택할 수 있습니다.
머티리얼 에디터 설정 모듈이 엔진 시작 시 등록됩니다. 이는 검색 결과 표시에 영향을 미치며, 이전 버전에서는 머티리얼 에셋을 열기 전에 설정 메뉴에 접근하기 어려웠습니다. 5.6 버전에서는 이 문제가 해결되어 머티리얼 에디터 모듈이 설정 목록에 자동으로 포함됩니다.
5.6 버전의 기타 업데이트 사항으로는 텍스처 샘플 노드가 커스텀 채널 이름을 지원합니다. 그래프에서 텍스처 샘플 노드를 선택하고 디테일 패널의 'Parameter Customization' 섹션에서 RGB 및 A 필드에 원하는 텍스트를 입력하면 노드에 반영됩니다. 이 기능은 팀이 팩된 텍스처 마스크 순서를 프로젝트 전반에 걸쳐 효과적으로 관리하는 데 유용합니다.
뷰 속성 노드에 'view near plane' 옵션이 추가되었습니다. 그래프에 뷰 속성 노드를 추가하고 드롭다운 메뉴에서 'view near plane'을 선택하면 해당 값을 사용할 수 있습니다. 이 값은 'near clip plane' 설정과 동일하며, CVar 또는 디버그 스칼라 값 노드를 통해 확인할 수 있습니다. 이 기능은 카메라에 클리핑되기 전 반투명 VFX(부유하는 먼지나 눈)를 페이드하는 데 특히 유용합니다.

성능 요구사항에 맞춰 품질을 조절할 수 있도록 Mixed Subsurface 구현 옵션을 추가하였습니다.

Subsurface Profile 에셋의 Burley Normalize 섹션에 Implementation 이라는 새로운 옵션이 추가되었습니다. 이 옵션은 Adaptive Filtered Importance Sampling 과 Separable, 두 가지 선택지를 가진 드롭다운 메뉴로 제공됩니다.

AFIS는 더 높은 품질의 옵션이며, hero character의 subsurface scattering과 같이 중요한 asset에 매우 유용합니다.

Separable 방식은 더 나은 성능을 제공하며, 스노우와 같이 어느 정도의 Subsurface Scattering(SSS)은 필요하지만 중요도가 낮은 Asset에 유용합니다.

올해 초 저희의 한 데모에서 이 기능을 사용하였습니다. 5.6 버전의 마지막 업데이트는 제가 가장 좋아하는 업데이트 중 하나입니다.

주석 상자 정렬에 대한 내용입니다. 생산성 향상을 사랑하지만, 그만큼 잘 정렬된 그래프 또한 무척이나 사랑합니다.

여기 그리드를 강조 표시하겠습니다. 특히 C 키 단축키를 사용하여 코멘트를 생성할 경우, 그리드에 완벽하게 정렬되지 않는 상자가 생성되었습니다. 이는 이후 노드들의 줄줄이 이어지는 정렬 불량 문제를 야기하며, 수동으로 수정해야 했습니다.

5.6 버전에서는 더 이상 그렇지 않게 되어 기쁩니다. 자, 5.6 버전에서 다시 강조 표시된 그리드를 보십시오. 정말 아름답습니다.

주석 상자, 완벽 그 자체입니다.

네, 5.6 업데이트에 대한 설명은 여기까지입니다. 이제 5.7의 새로운 기능들을 살펴보겠습니다.

이것이 여러분이 미리 보기에서 수정하기 시작할 수 있는 변경 사항들입니다. 우선, 두 개의 새로운 experimental nodes로 다시 시작하겠습니다.

MotionVectorWorldOffsetPerPixel 노드는 TSR 사용 시 일부 재질에서 발생하는 smearing 이슈를 해결하기 위해 개발되었습니다. 이 노드를 'MVW'라고 칭하겠습니다.
기존 TSR 설정으로는 심각한 ghosting 현상이 나타납니다. previous frame switch를 사용하면 개선되지만, motion factor의 부정확성으로 인해 중앙 부분에 smearing이 발생할 수 있습니다.

MVWO 노드의 경우, 이와 대조적으로 다음과 같습니다.

실제 작동 시 시각적으로 훨씬 명확한 결과물을 보여줍니다.

이 Material은 링(rings) 부분에 일반적인 texture coordinate, time, mathy stuff를 사용하여 base color에 연결하는 방식으로 구성됩니다. 프레임별 delta UV를 계산하고, mesh 크기에 따라 delta UV를 WPO로 변환합니다. 이 값을 MVWO node에 연결하면 됩니다.

이 노드를 작업하실 때, 씬의 **motion vectors**를 확인하는 것이 도움이 될 것입니다. 이를 위해 `r.motionblur.visualize`를 1로 설정하시거나, 새로운 쇼 플래그인 `motionblur`를 1로 켜서 더 다채로운 시각 효과를 확인할 수 있습니다. 이 **world offset per pixel node**는 다른 노드에 비해 다소 비용이 많이 들 수 있으니 유의하시기 바랍니다. 이전 프레임 스위치보다 높은 품질의 **motion vector**를 제공하며, **history stability** 또한 우수합니다. **Nanite**와는 호환되지 않으며, **water simulation**과 같이 **pixel animation**이 있는 경우에 매우 유용합니다.
**Experimental Temporal Responsiveness** 노드를 살펴보겠습니다. 수정 없이 **fast animating text**가 포함된 머티리얼은 **TSR** 사용 시 이런 식으로 보일 수 있습니다. **ghosting**, **smearing** 문제가 발생합니다. `hasPixelAnimation`을 사용하여 이를 어느 정도 해결할 수 있지만, 여전히 약간의 문제가 남아있습니다. **Temporal Responsiveness** 노드를 사용하면 텍스트가 깔끔하게 보입니다.
이 **temporal responsiveness node**의 머티리얼 구현을 살펴보겠습니다. 상단에는 어떤 숫자가 변경되는지 파악하기 위한 **custom code**가 있습니다. 변경되는 숫자의 영역을 선택적으로 **mask** out합니다. 결과는 **scalar responsiveness parameter**와 곱해져 **temporal responsiveness node**로 전달됩니다. TR 노드는 세 가지 수준을 가집니다. 0은 일반적인 temporal accumulation이며, 변경이 없습니다. 중간 레벨(0~0.5)은 **pixel animation**에 대한 **medium level mismatch**를 가정하고, 특히 작은 특징에 대해 **temporal history**를 더 공격적으로 거부합니다. `tr full`(0.5~1)은 **motion vector**가 완전히 신뢰할 수 없다고 간주됩니다.

여기 빨간색으로 표시된 숫자들은 이를 보여주며, 이를 통해 살펴보실 수 있습니다.

TSR rejection weights view입니다. Temporal Responsiveness Node에 대한 몇 가지 최종 안내사항입니다. 이 노드는 두 가지 옵션 중 더 저렴한 방식입니다. Nanite을 완전히 지원하며, 제한적인 Nanite 지원도 제공합니다.
잠재적인 위험 중 하나는 사용 사례에 따라 가끔 약간 떨려 보일 수 있다는 점입니다. 따라서 선택적으로 사용하는 것을 권장합니다. 게임 내에서 빠르게 변화하는 텍스트나 비디오 재생과 같은 경우에 매우 유용합니다.
다음으로는 5.7 버전의 노드 개선 사항을 살펴보겠습니다.

5.6 버전에서 reroute node를 생성할 때 autofocus 기능이 제거되었습니다. 이는 화려하지는 않지만, 사용자 경험(quality of life)을 개선하는 변화 중 하나라고 생각합니다.

5.7 버전에서는 뷰포트 상에서의 그래프 위치 이동이 발생하지 않으며, 줌 설정이 초기화되지 않습니다. 이로써 사용 편의성이 향상되었습니다. 또한, Vector Parameter 노드와 해당 Constant 노드에도 개선이 이루어졌습니다.
5.6 버전에서는 Vector Parameter 노드의 핀에 레이블이 없어 CVD(색맹) 사용자가 핀을 구분하기 어려웠으며, 신규 사용자에게 직관적이지 않았습니다. 더불어, Vector 4로 표기되지만 실제로는 3개의 값만 출력되는 기능적 문제가 있었습니다.
이로 인해 사용자는 Alpha 값을 별도로 Append 노드를 통해 추가해야 하는 불편함이 있었습니다. 또한, Vector 4 Parameter를 Constant로 변환 시 Vector 3 노드로 바뀌면서 Alpha 값이 손실되고 예상치 못한 노드 비호환성이 발생했습니다.
5.7 버전에서는 핀에 RGBA 레이블이 추가되어 Vector 4 Parameter에 대한 접근성이 향상되었으며, Append 노드 없이 전체 값을 활용할 수 있습니다. Constant로 변환 시 올바른 Vector 4 노드로 생성되어 데이터 손실 및 타입 호환성 문제가 해결되었습니다.
또한, 노드 내 값 표시는 Parameter와 동일한 Color Picker로 변경되었습니다. RGBA 핀의 위치가 Parameter에서는 하단, Constant에서는 상단에 배치되는 등 소소한 차이가 있지만, 전체적인 사용자 경험을 개선했습니다.
Vector 4 노드에는 Texture Sample 노드처럼 로컬라이징 가능한 Custom Parameter Name 필드가 추가되었습니다. 5.7 버전에서는 Material Instance에서의 Channel Mask Parameter 표시 방식이 개선되었습니다. 5.6 버전에서는 Mask Parameter가 동일한 이름으로 두 줄에 걸쳐 표시되었으며, 드롭다운과 Color Picker로 나뉘어 직관적이지 않았습니다.

5.7 버전에서는 이 부분을 개선하여, 단일 옵션만 표시하고 드롭다운으로 선택할 수 있도록 변경하였습니다. 이를 통해 Material instances에서 더 많은 세로 공간을 확보하고 명확성을 높일 수 있습니다.

5.7 버전에서는 몇 가지 효율성 향상 사항도 적용되었습니다. 이제 mismatch sampler type 오류를 수정하는 방식이 훨씬 자동화되었습니다.

때때로 누구나 겪는 일이지요.

머티리얼에서 텍스처 샘플러를 연결했을 때, 샘플러 타입이 텍스처와 일치하지 않는 에러가 발생할 수 있습니다. 이전 버전(5.6)에서는 디테일 패널에서 수동으로 값을 변경해야 했습니다.
하지만 언리얼 엔진 5.7부터는 그래프 상단의 'Clean Graph' 메뉴에서 'Fix Up Mismatched Samplers'를 선택하여 이 문제를 해결할 수 있습니다.
이 기능을 실행하면 영향을 받는 텍스처 샘플러 수를 알려주며, 작업을 계속할지 취소할지 선택할 수 있습니다.
작업을 확인하면 샘플러 타입이 선형 그레이스케일(Linear Grayscale)로 자동으로 변경되어 노드와 스탯 패널의 에러가 해결됩니다.
더불어 5.7 버전에서는 머티리얼 펑션에 대한 서브서치(Subsearch) 기능을 에디터에서 지원합니다.

이는 함수 레이어 내에 숨겨진 결과를 감지하여, 검색 결과가 어떤 노드 또는 관련 material function 안에 있는지 파악할 수 있도록 합니다.

이 예시 Material에서는 Material Function이 포함되어 있습니다. Find Results 패널에서 'Layer 2'를 검색한다고 가정해 보겠습니다. 이 결과 중 하나를 한 번 클릭하면 그래프에서 해당 Material Function으로 초점이 맞춰집니다. 결과 항목을 두 번 클릭하면 해당 결과가 포함된 Material Function이 열립니다. 여기서 원래 검색했던 'Layer 2' 파라미터와 해당 Material Function으로 검색 결과를 따라갈 수 있습니다. 이는 5.7 버전에서 새롭게 추가된 가장 흥미로운 기능 중 하나입니다.

'is the new slice to disconnect shortcut. Right?'

이동하려면 Alt 키와 마우스 왼쪽 버튼을 동시에 누르십시오.

이후 연결을 끊고 싶은 와이어 위로 드래그하십시오. 릴리즈하기 전에 해당 와이어들이 흐리게 표시되어 어떤 와이어에 영향을 주는지 알 수 있습니다. 이는 직선적인 A 지점에서 B 지점으로 이어지는 선이며, 자유로운 형태의 그리기는 아님을 유의하십시오.

5.7 버전에서는 'has static permutation resource asset registry tag'라는 새로운 기능이 추가되었습니다. 이 기능을 통해 Content Browser에서 Material Instance 위에 마우스를 올리면 해당 Material Instance에 static permutation resource가 'true'인지 'false'인지 확인할 수 있습니다.
'true'로 표시되는 Material Instance는 static switch parameter나 base property overrides와 같이 permutation을 유발할 수 있는 요소를 포함하고 있음을 의미합니다. 이는 성능에 영향을 줄 수 있으므로 유용하게 활용될 수 있습니다.
예를 들어, Parent Material에 Texture Sample과 같은 Vector Parameter가 있고, Base Color로 사용할 두 가지 옵션 중 하나를 선택하기 위해 Static Switch Parameter를 추가한다고 가정해 보겠습니다. Static Switch Parameter는 permutation의 잠재적인 원인이 되어 성능 저하를 야기할 수 있습니다.
따라서 Content Browser에서 특정 Material Instance를 확인했을 때, 'hasStaticPermutationResource'가 'false'로 표시된다면 해당 Material Instance는 permutation을 유발하는 요소를 가지고 있지 않다는 것을 의미합니다.

Material Instance에서 switch parameter는 변경되지 않은 상태로 두었습니다. Default 값 그대로이며, 이로 인한 permutation 발생 위험은 없습니다. 이를 다음 material과 비교해 볼 수 있습니다. HasStaticPermutationResource가 true로 설정되어 있습니다. 이 asset에서는 switch parameter가 editable로 표시되었고, Default 값과 다른 값을 가집니다. 따라서 tag는 true가 됩니다. 마지막 material은 약간 다릅니다. 다소 예상치 못한 부분일 수 있습니다. Material Instance가 true로 설정되어 있지만, Default 값을 사용하는 것처럼 보입니다. Default 값을 사용하고 있지만 editable로도 표시해 두었습니다.

이는 우리가 주의해야 할 잠재적인 permutation source로 인식하고 있음을 의미합니다. 다음으로는 새로운 asset tag management system에 대해 알아보겠습니다.

이 기능은 모든 asset type에 적용 가능하며, materials에도 영향을 미칩니다. 반짝이고 새로우며 흥미로운 기능이므로 이 자리에서 자세히 설명해 드리겠습니다.

이 매니저에 접근하기 위해서는 Content Browser에서 우클릭 후 메뉴에서 Manage Tags를 선택하시면 됩니다. `Ctrl+T` 단축키로도 해당 창을 열 수 있습니다.
창 상단 좌측 섹션에서는 현재 선택된 asset을 확인할 수 있습니다. 그 아래 Owned Tag 섹션에는 해당 asset에 연결된 모든 tag들이 표시됩니다.
Owned Tag 섹션 내에서 Add Tag 옵션을 사용하여 tag를 추가할 수 있습니다. tag를 입력하고 버튼을 누르면 적용됩니다.
우측에는 Material Project Tags 섹션이 있습니다. 이는 project 수준에서 연결된 tag를 의미합니다.

Material asset type입니다. 해당 섹션 내에 tags를 추가하기 위하여,

프로젝트 세팅 창에서 Editor 섹션, User Asset Tag Settings으로 이동하십시오. User Asset Tags per Type 섹션에서 '+' 아이콘을 눌러 Asset Tag를 추가합니다. 여기서는 Material과 Niagara System을 선택했습니다. Material 섹션에서는 'material tag'라는 새로운 Asset Tag를 만들었습니다.
다시 Manage Tag 창으로 돌아와 'material tag' 체크박스를 선택하면 Owned Tags 섹션에 추가되며, 이는 해당 Asset과 연관됨을 의미합니다.
Content Browser에서 여러 Asset을 동시에 선택할 수 있습니다. 이들은 모두 Material이지만, 다른 타입의 Asset도 선택 가능합니다. Selected Assets 섹션에 선택된 Asset들이 표시됩니다. Owned Tags 섹션에는 선택된 모든 Asset에 연관된 Tag들이 나타납니다. 체크박스가 점선으로 표시된 경우, 해당 Tag는 선택된 Asset 중 일부에만 사용됨을 의미합니다. 본 예시에서는 'material tag'가 'example material'에는 사용되었으나 'example two'에는 사용되지 않았습니다.

이 대시 중 하나를 클릭하시면, 해당 태그가 선택된 모든 에셋에 적용됩니다.

이 기능을 설명하기 위해 Material Project 태그가 대시(-)에서 체크 표시(✓)로 변경되는 것을 보여드리겠습니다. 또한, 'Owned' 섹션의 관련 태그에서 대시가 제거되어 모든 항목에 적용되었음을 나타냅니다.
이 기능과 함께 유용한 또 다른 기능은 Favorites입니다. 비어있는 별 아이콘을 클릭하면 아이콘이 채워지고 해당 태그가 로컬 Asset Type Favorites 섹션에 추가됩니다. Favorites가 설정되지 않은 경우 이 섹션은 보이지 않습니다. 처음으로 Favorites를 설정할 때 나타납니다.
보시는 바와 같이, 'first tag'라고 불리는 항목이 이 새 목록에 포함되며, 이는 모든 선택된 Asset에 적용되지 않음을 나타내는 동일한 대시 체크박스입니다. Content Browser로 돌아가 'example 2 material'만 선택하면, Favorites로 설정했던 'first tag'가 Favorites 섹션에 계속 표시되는 것을 볼 수 있습니다. 이는 해당 태그가 Asset Type과 연관되어 있고 로컬이기 때문입니다.
만약 Niagara Asset을 선택했다면, 이 Favorites 섹션은 표시되지 않습니다. 아직 적용되지 않은 Favorites가 있다면, 체크박스를 선택하는 것만으로도 선택된 Asset에 쉽게 적용할 수 있습니다. 이로써 다른 Material에 태그를 추가하는 작업이 매우 빨라집니다.

프로덕션 후반에 Assets

Asset Registry의 Tag 기능은 검색에도 활용될 수 있습니다. Project Settings에서 생성한 'materialTag'와 같이 특정 Tag를 가진 모든 Asset을 찾는 경우, 검색창에 `uat.materialTag equals ""`를 입력하면 해당 Tag가 적용된 Asset들을 확인할 수 있습니다.
Content Browser의 Asset Registry는 Tag를 Key-Value 쌍으로 간주하지만, 실제로는 Key만 존재합니다. Content Browser는 Key를 인식하여 자동 완성 기능을 제공하며, Value는 사용자가 직접 입력해야 합니다. 예시의 경우, Tag에 빈 Value만 설정되어 있어 `equals ""`와 같이 입력하면 됩니다.
이 기능은 Niagara 시스템 또는 Emitter 생성 시 나타나는 Tagged Asset Browser에서 처음 개발되었습니다. Tag는 코너에 표시되며 Asset을 필터링하는 데 사용됩니다. 이를 통해 Asset Registry Tag 기반 시스템을 구축하고, Runtime 시 UI 등에서 Asset을 쿼리하고 활용할 수 있습니다. 즉, 게임플레이 시스템에서 Asset의 고유 속성을 기반으로 Asset을 다루고자 할 때, User Asset Tag를 활용하여 해당 속성을 관리할 수 있습니다.

5.7 버전에서 Material Parameter Collections에 대한 업데이트가 있었습니다.

이번 버전부터 Material Instance에서 Material Parameter Collection (MPC)을 Override 할 수 있게 되었습니다. 예시를 위해 'base'라는 이름의 MPC를 생성하고 'base scaler'라는 파라미터를 0.1로 설정했습니다. 이를 Material Graph에 연결하고 Roughness 핀에 적용했습니다.
'derived MPC'라는 새로운 MPC를 생성하여 'base' MPC를 할당했습니다. 이곳에서 'base scaler' 파라미터 값을 1로 변경했습니다. 이 'derived MPC'를 사용하여 Material Instance를 생성하면 Override 기능을 활용할 수 있습니다.
Material Instance에서 'parameter collection overrides' 섹션에 'derived MPC'를 할당하면, 'base MPC'의 0.1에서 1로 변경된 'base scaler' 값이 Override 되는 것을 확인할 수 있습니다. 이를 통해 Material Instance 수준에서 MPC 파라미터를 효과적으로 관리할 수 있습니다.

더욱 유연하고 역동적이며 제어 가능한 visuals를 구현할 수 있으며, 여러분이 이 새로운 feature를 통해 무엇을 만들고 manage하실지 기대됩니다.

5 Unreal Engine에는 새로운 툴인 Material Diff tool이 추가되었습니다. 이 기능을 사용하려면 비교하려는 Material을 우클릭하고 "Diff Against"로 이동한 후 비교할 에셋을 선택하십시오. 그러면 Material Diff 창이 열립니다.
창 상단 왼쪽에는 변경 사항 목록과 단계별로 이동할 수 있는 화살표 버튼이 있습니다. 변경 사항은 텍스트로 표시되며 색상 코드로 구분됩니다. 빨간색은 제거, 녹색은 추가, 청록색은 이동된 링크, 회색은 이동된 노드를 나타냅니다. 이러한 색상은 Graph View에서도 동일하게 적용됩니다.

일반 머티리얼 그래프와 마찬가지로, 뷰포트 내에서 드래그하고 줌할 수 있습니다. 기본적으로 그래프는 잠금 상태로 설정되어 있습니다. 따라서 하나를 이동하면 다른 하나도 함께 이동합니다.

이러면 뷰가 맞춰지므로, 오브젝트들을 조금 더 쉽게 비교하실 수 있습니다. 원하시면 이 기능을 잠금 해제하실 수도 있습니다.

수직 레이아웃 대신 가로 레이아웃으로 보는 옵션도 있습니다. 창의 하단 부분에는 시각적 미리보기를 위한 material viewports와 함께 material 설정을 비교하는 내용이 있습니다. 이를 통해 material 변경 사항을 훨씬 더 효율적으로 파악할 수 있을 것입니다.

오늘의 내용을 마무리하기 위해 주요 변경 사항 중 하나인 **substrate**에 대해 논의하겠습니다.

5.7 버전부터 모든 material은 기본적으로 Substrate를 사용하게 됩니다.

기존의 Legacy Material System은 Default Lit, Clear Coat 등 고정된 셰이딩 모델과 블렌드 모드를 제공했습니다. Substrate는 이러한 제약을 벗어나, Material을 물질의 슬래브(slab)로 개념화합니다. 이러한 슬래브는 Principled BSDF (Bi-directional Scattering Distribution Function)로 표현되며, 물리적인 값들로 파라미터화됩니다.

잘 정의된 unit을 사용하며, 기존 material system의 일부 추상적인 부분을 대체합니다. 이를 통해 더욱 정확하게 구현할 수 있습니다.

Substrate는 metal, glass, plastic과 같은 개별적인 surface type 간의 blend를 지원합니다. 또한 material layering 과정을 간소화하여 surface 표현을 더욱 용이하게 합니다.

금속 위 액체처럼, 혹은 서브서피스(subsurface) 위에 클리어 코트(clear coat)처럼 표현됩니다.

요약하자면, substrate는 재질의 기술적 구조에 근본적인 변화를 가져와 더욱 시각적으로 정확한 렌더링 결과를 제공합니다. substrate 재질은 그 주요 표현 방식 덕분에 플랫폼의 성능에 따라 시각적 품질과 성능을 절충하도록 단순화할 수 있습니다. 이와 관련하여 프로젝트 설정에서는 substrate gbuffer 포맷을 adaptive gbuffer 또는 blendable gbuffer로 설정할 수 있습니다.

Substrate의 adaptive gbuffer는 모든 기능을 갖춘 Substrate 옵션입니다. 이는 픽셀별로 복잡한 조명 구현을 가능하게 하지만, 그로 인해 더 무거운 옵션이기도 합니다. D-buffer decals를 지원하며, Shader Model 6 플랫폼과 호환됩니다. 프로젝트를 adaptive로 설정하시면,

이 G-buffer를 지원하는 모든 플랫폼은 파일 설정 등에 기반하여 adaptive 방식으로 작동할 것입니다. 나머지 플랫폼은 blendable G-buffer를 사용하게 됩니다.

Substrate의 blendable G-buffer는 제한적인 옵션입니다. 이 경우, 더 적은 라이팅 복잡성을 가지는 대신 더 빠른 옵션이 됩니다.

기존 gbuffer 특성을 유지하며, packed render target을 통해 substrate 데이터를 처리하여 자동으로 단일 slab으로 단순화합니다. blendable decals도 지원하며, 프로젝트를 blendable로 설정하면 이것이 기본이 됩니다. 모든 프로젝트가 blendable 상태가 됩니다.

SM6 모델의 경우에도 adaptive gbuffer를 지원할 수 있었음에도 불구하고, 이 점을 고려하시기 바랍니다.

Substrate로의 전환에 맞춰, 새로운 Substrate-Based Material 플러그인을 제공할 예정입니다. 이는 Substrate에서의 탐구를 위한 시작점으로 활용될 수 있는 Material functions의 방대한 모음입니다.

5.7 업데이트 내용에 대한 소개를 마치겠습니다.

다음으로는 언리얼 엔진에서의 Materials의 향후 발전에 대해 논의하겠습니다.

내년 중 실험적 릴리스를 목표로 새로운 translator를 개발 중임을 발표하게 되어 기쁩니다. 새로운 intermediate representation(IR)을 추가하여 HLSL output을 개선하고, 새로운 if-then-else node, operator node, struct support, type-colored pins and wires와 같은 강력한 기능을 제공할 예정입니다. 이는 개발 중인 기능의 일부이며, 곧 자세한 내용을 공유드리겠습니다.
HLSL 개선 작업에는 다음과 같은 내용이 포함됩니다. 새로운 translator는 HLSL 작업을 위한 세 개의 패널을 제공합니다. 이전 translator의 HLSL, 새로운 translator의 HLSL, 그리고 intermediate representation을 확인할 수 있습니다. 또한, material.usf의 4,000줄 전체가 아닌, material graph에서 생성된 관련 코드만 표시할 수 있습니다. 전체 소스를 확인하고 싶으시다면, 특정 플랫폼을 선택하여 접근하실 수 있습니다.

혹은 셰이더 모델(shader models)입니다. 제가 언급했던 두 가지 노드(node)를 살펴보겠습니다.

새로운 if-then-else 노드를 먼저 살펴보겠습니다.

본 기능은 **proper branching**을 지원하여, 사용되지 않는 옵션은 평가되지 않습니다. 현재의 if 문은 branching을 하지 않아, 한쪽만 사용될 경우에도 양쪽 모두 평가됩니다. 따라서 이는 분명한 장점입니다.
이 예시에서 condition pin은 정적(static) bool 값으로 스텝됩니다. 하지만 다른 노드에서 두 값을 비교하고 그 결과를 if 노드의 condition pin에 사용하는 옵션도 제공될 것입니다. 마지막으로, 향후 translator는 'add'와 같이 새로운 operator node를 지원하여 수학 연산 유형 간의 전환을 더욱 쉽게 만들 것입니다.

이 기능을 사용하려면 노드의 제목 표시줄 옆에 있는 작은 화살표 아이콘을 클릭하고 목록에서 원하는 작업을 선택하십시오. 언급한 대로 에셋 유형은 제자리에서 변경됩니다. 또한 frack, sign, not equals, bitwise 등 현재 개발 중인 많은 옵션이 있습니다. 작은 플러스 아이콘을 클릭하면 노드에 추가 입력 핀을 쉽게 추가할 수 있습니다.

메인 클릭 그래프 메뉴에서 개별 Operation들을 여전히 검색할 수 있으며, 이는 삭제되지 않습니다.

추가적인 과정은 없습니다. 하지만 이는 반복 작업 시간을 크게 단축시켜 줄 것입니다. 특히 수학적인 요소들을 만지면서 멋진 시각 효과를 탐구하는 테크 아티스트들에게 큰 도움이 될 것입니다.

플레이하기에 매우 즐거울 뿐만 아니라, iteration 및 변경 작업에도 매우 편리할 것입니다.

미래를 위한 짧은 미리보기는 여기까지입니다. 세션을 마무리하기 전에 두 개의 섹션이 더 남았습니다. 그래서 저는 materials dev 팀을 잠시 소개하고 싶습니다.

올해 이 기능들을 가능하게 한 에픽 팀의 개발자들입니다. Jason, Nathaniel, Tian Tian, 두 명의 Dan, Forest, Mateo, Robert, Nick, Jayden과 QA 팀의 Bree, Alan입니다.

이 세션에서 materials에 대해 배우셨으니,

FEST에서 현재 시점에서 관심 가질 만한 다른 세션들을 소개해 드리고자 합니다. 본 세션들은 제공해 드린 링크에 모두 포함되어 있습니다.

제 발표 마지막 부분에서도 이러한 내용을 확인하실 수 있습니다. 따라서 agenda에서 이 내용들을 추가적으로 찾아보실 수 있습니다. 먼저, 'Managing Unbounded Growth'에 대해 알아보겠습니다.

언리얼 엔진 셰이더 스토리는 오늘 오후 2시 30분에 5번 방에서 진행됩니다. Epic Games의 수석 렌더링 프로그래머인 Dan Elksneres가 발표를 맡습니다.

내일 오후 4시, 8번 방에서 Epic Games의 principal technical artist인 Nathaniel Morgan이 'Substrate에 대해 알고 싶으신 모든 것'을 발표합니다. Substrate에 대해 간략하게만 언급했던 내용을 심도 있게 다룰 예정이오니 많은 관심 부탁드립니다.

기술 개발자 관계 팀에서 더 많은 발표를 듣고 싶으시다면, 저희 팀의 여섯 분이 여러분을 위해 준비했습니다. 먼저 '101 Unreal Engine tips and tricks' 세션은 이미 시작했지만, 한 시간 반 정도 더 진행될 예정입니다. 발표자분들은 해당 주제에 대해 할 이야기가 많을 것이며, 오랜 시간 동안 여러분과 함께할 것입니다. 룸 4에서 이 세션을 놓치지 마십시오.

Ari Ambjørnsson를 포함합니다. 그리고 오늘은 오후 4시, Room 1에서 Jack Condon이 진행하는 An Introduction to Horde 세션이 있습니다.

**PCG 소개, 활용 사례 및 제작 모범 사례**
Matt Ozdele와 함께 오늘 오후 2시 30분에 진행됩니다. PCG(Procedural Content Generation)의 기본 개념과 실제 프로젝트에서의 적용 방안, 그리고 효율적인 제작 방법론을 다룹니다.
**Profiling with Purpose: 실제 언리얼 프로젝트 성능 분석**
Adi와 Matt와 함께 내일 오전 11시 45분 5번 방에서 진행됩니다. 실제 언리얼 엔진 프로젝트를 대상으로 심층적인 성능 분석을 수행하며, Bottleneck을 식별하고 최적화하는 방법을 공유합니다.
**Slate IM을 활용한 디버그 툴 제작**
Cody가 내일 오후 2시 30분 4번 방에서 발표합니다. Slate IM(In-World Messaging)을 사용하여 효과적인 디버그 툴을 구축하는 기술적인 접근 방식을 소개합니다.
**기술 아티스트를 위한 자동화된 성능 테스트 가이드**
Matt와 함께 내일 1번 방에서 진행됩니다. 기술 아티스트가 성능 테스트를 자동화하여 개발 프로세스의 효율성을 높일 수 있는 실질적인 가이드라인을 제공합니다.

참석해 주셔서 대단히 감사합니다. 말씀드렸던 QR 코드를 보여드립니다.

만약 해당 내용을 보실 수 없거나 휴대폰으로 인식되지 않는다면, linktree / she does art stuff 로 접속하시면 됩니다.

본 페이지에는 다양한 카테고리별 리소스가 포함되어 있습니다. 본 발표와 관련하여 5.6 개선 사항에 대한 EDC 아티클 링크가 제공됩니다.

금년 말, full release date에 맞춰 5.7 resources를 공유할 예정입니다. DevRel team에서 발행한 추가 콘텐츠, 유용한 documentation, Epic Developer community의 더 많은 resources, sample projects 링크 등도 함께 제공됩니다.

저는 Blue Sky와 Epic Developers 커뮤니티에도 같은 이름으로 활동하고 있습니다. 제 파트너는 아트 작업을 합니다. 새로운 콘텐츠를 Linktree에 추가할 때마다 그곳에도 게시할 예정이니, 최신 정보를 가장 쉽게 접하실 수 있는 방법입니다.

TDR과 Epic, 그리고 커뮤니티의 훌륭한 분들이 공유하는 다양한 자료들을 저 역시 재공유하고 게시할 예정입니다. 마지막으로, DevHub에서 만나 뵐 수 있을 것입니다.

본 발표 이후에 자유롭게 저나 동료들에게 질문하시거나 대화하실 수 있습니다. 5분 정도의 질의응답 시간이 주어질 예정이니, 혹시 질문하지 못하더라도 편하게 다가와 주시면 감사하겠습니다.

그럼에도 불구하고 질문이 어렵거나 기회가 여의치 않으시면, 쇼플로어에서도 충분히 이야기를 나눌 수 있습니다. 말씀드린 것처럼, 다시 한번 감사드리며 이제 Q&A를 시작하겠습니다.