언어:

언리얼 엔진 4.15 릴리즈 노트

image alt text

새로운 소식

언리얼 엔진 4.15 에는 전반적인 안정성 대폭 향상, 개발자 작업방식 강화, 런타임 퍼포먼스 개선으로 뛰어난 최종 사용자 경험 및 개발 효율을 높이는 데 도움이 될 기능이 다수 포함되어 있습니다.

프로그래머의 컴파일 시간이 크게, 자그마치 50% 나 감소합니다! 언리얼 에디터 실행 도중 콘텐츠 리로드, 머티리얼의 경유지(Reroute) 노드, 새로운 블렌드스페이스 에디터, 새로운 수학 관련 블루프린트 노드 등 이번 릴리즈에는 개발 프로세스 효율 향상에 크게 기여하는 기능이 많이 추가되었습니다.

퍼포먼스를 극한까지 끌어내는 방법을 찾는 분들에게 희소식, 블루프린트를 C++ 네이티브 코드로 쿠킹하는 기능이 실험단계 딱지를 떼었고, 텍스처 스트리밍 시스템이 대폭 개선되었으며, NVIDIA SLI 와의 대체 프레임 렌더링 기능이 고사양 시스템 성능을 증폭시켜 줍니다.

시네마틱 및 애니메이션 파이프라인도 지속적으로 강화되고 있습니다! 이제 시퀀서에서 애니메이션 블렌딩이 가능하고, 애니메이션 커브를 본에 링크시켜 LOD 의 컬링을 지원하며, 애니메이션 블루프린트에서 Modify Curve 노드로 커브를 변경할 수 있습니다. 이제 레벨 시퀀스를 액터 블루프린트에 삽입시킬 수 있으며, 얼리 어답터들은 Level Sequence 컴포넌트를 일찍 사용해 보실 수 있습니다.

플랫폼 부문도 향상되어 이제 Nintendo Switch (Nintendo Switch) 개발이 가능합니다. iOS 와 Android에서 새로운 위치 서비스를 사용하여 GPS 데이터에 접근할 수 있습니다. 또한 iOS 에서는 스트리밍 오디오와 원격 알림이 완벽 지원됩니다. 모바일 VR 플랫폼에서 모노스코픽 파 필드 렌더링이 옵션으로 제공되고, HDR 디스플레이 출력은 실험단계 상태에서 사용 가능하며, Playstation VR Aim Controller 도 사용할 수 있게 되었습니다.

이번 릴리즈에는 GitHub 의 엄청난 언리얼 엔진 개발자 커뮤니티가 제출한 개선사항이 79 개나 포함되어 있습니다! 언리얼 엔진 4.15 에 기여해 주신 모든 분들께 감사의 말씀 올립니다:

20tab srl (20tab), Andreas Schultes (andreasschultes), AndrewMAlvarez, Andrzej K. Haczewski (ahaczewski), Artem V. Navrotskiy (bozaro), BhaaLseN, Black Phoenix (PhoenixBlack), Brett Kercher (BrettKercher), Brian Harris (BrianHarris), BrodyHiggerson, CA-ADuran, Céleste (CelPlays), Chris Robertson (CJRobertson), Christopher P. Yarger (cpyarger), Deborggraeve Randy (DeborggraeveR), Deniz Piri (DenizPiri), Dennis Theisen (Soleone), Derek van Vliet (derekvanvliet), Dorgon Chang (dorgonman), Dustin Biser (dustin-biser), dyf303, EricLeeFriedman, finap, Garrett (RoyAwesome), Hannah Gamiel (hgamiel), How2Compute, Hyeon-Cheol Cho (crocuis), Jacob Shaffer (Phyllostachys), Joel McGinnis (joelmcginnis), Jordan Hueckstaedt (assumptionsoup), Jørgen P. Tjernø (jorgenpt), Jukka Jylänki, Justin Graham (mannewalis), kallehamalainen, kayosiii, Kory Postma (korypostma), Marat Radchenko (slonopotamus), Marco Antonio Alvarez (surakin), Mario Zechner (badlogic), Markus Breyer (pluranium), Martin Mittring (MartinMittringAtOculus), Max Shawabkeh (max99x), Michael Atkins, Moritz Wundke (moritz-wundke), Nako Sung (nakosung), Nathan Sizemore (nathansizemore), Nathan Stocks (CleanCut), nero81af, Nicolas Roblin, Orfeas Eleftheriou (orfeasel), Piotr Bąk (Pierdek), PjotrSvetachov, poiyomi, projectgheist, rarihoma, Rex Feany (laeos), Robert Segal (robertfsegal), Rūdolfs Bundulis (rubu), Satheesh (ryanjon2040), Sébastien Rombauts (SRombauts), stefanzimecki, Stephen Dawkins (elFarto), Thomas Mayer (tommybear), Thomas McVay (ThomasMcVay), tmiv, Yours3lf, Zerophase

주요 기능

신기능: Nintendo Switch 지원

Nintendo 와의 협업을 통해 언리얼 엔진 4 개발자들의 Nintendo Switch 게임 개발을 도울 수 있게 되었습니다!

image alt text

Nintendo Switch 콘솔 게임 개발을 위한 초기 지원사항이 추가되었습니다. 이번 릴리즈에서는 아직 실험단계로 간주되나, 다음 릴리즈에서는 실제 발매가 가능한 상태까지 개선시킬 계획입니다.

신기능: 물리 기반 기본 포스트 프로세싱 세팅

이제 기본 톤매퍼가 보다 영화같은 색감과 톤을 냅니다!

image alt text

이제 아카데미 컬러 인코딩 시스템(ACES)에 일치하는 필름 톤매퍼가 기본으로 켜집니다. 이 톤매퍼를 통해 엔진은 HDR 디스플레이 포함 다수의 디스플레이 유형을 대상으로 삼을 수도 있습니다. 블룸 기본값을 업데이트하여 보다 물리적으로 올바른 결과를 냅니다.

필름 톤매퍼는 UE4 기존 버전의 톤매퍼와 다르게 보일 것입니다. 프로젝트 DefaultEngine.ini 의 SystemSettings 섹션에 r.TonemapperFilm=0 을 추가하여 톤매퍼를 원래대로 되돌릴 수 있습니다. 하지만 앞으로 나올 엔진 버전에서는 구형 톤매퍼를 제거할 계획입니다.

신기능: 텍스처 스트리밍 개선

텍스처 스트리밍 시스템 최적화를 통해 CPU 및 메모리 사용량, 로드 시간을 줄이면서도 저해상도 부작용을 없애고 여러 플랫폼의 다양한 메모리 예산 관련 한계를 자동으로 처리해 줍니다.

image alt text

  • 텍스처 메모리 사용법 개선 - 텍스처 스트리밍 시스템은 이제 컴포넌트 단위로 비저빌리티를 처리하여 스태틱 지오메트리에 바인딩된 (크기가 작은) 머티리얼 단위로 계산, 텍스처 메모리 사용량이 40% 정도 감소했습니다.

  • 텍스처 로드 시간 개선 - 보이는 맵을 트래킹하여 스트리머가 보이는 텍스처에 포커스를 맞추고 데이터 프리페치 및 강제 로드 데이터 기법을 연달아 적용하여 텍스처 로드 시간이 두 세배 빨라졌습니다.

  • CPU 시간 절약

    • 게임 스레드 업데이트 시간이 50% 감소했습니다. 다이내믹 컴포넌트 처리와 기타 태스크를 비동기 텍스처 스트리밍 태스크로 이동시켜, 다른 게임 스레드 태스크와 병렬 처리가 가능하도록 했기 때문입니다.

    • 스트리밍 레벨의 텍스처 처리시 정지되는 시간이 최대 98% 감소되었습니다. 분산 처리 덕분입니다.

  • 저해상도 부작용 감소 - 메시 UV 밀도 계산이 이제 메시가 아닌 머티리얼 단위로 이루어지며, LOD 를 고려합니다. 또한 텍스처 스트리밍에 파티클 시스템이나 인스턴스드 스태틱 메시와 같이 보다 다양한 컴포넌트 유형이 지원됩니다.

  • 자동 메모리 예산 처리 - 텍스처 스트리밍 시스템은 이제 작동방식을 자동 조절하여 수동 작업 없이도 여러가지 메모리 예산 처리를 할 수 있습니다. 이 시스템은 다양한 휴리스틱 기법을 통해 감소시킬 텍스처를 선택하여 비주얼 퀄리티를 유지합니다.

신기능: 블루프린트를 C++ 로 쿠킹

블루프린트를 네이티브 소스 코드로 패키징하여 블루프린트 실행 비용을 줄이는 기능을 이제 제작 단계에서 사용할 수 있게 되었습니다!

image alt text

이 기능은 실험단계 기능으로 사용가능한 상태였으며 Robo Recall 같은 자체 프로젝트에 성공적으로 사용해 왔으나, 이제 그 실험단계 딱지를 떼었습니다.

개별 블루프린트를 하나하나, 또는 모든 블루프린트 애셋을 한꺼번에 네이티브화시킬 수 있습니다. 커다란 프로젝트에서는 포괄 모드를 사용하면 일부 플랫폼에서 실행파일 크기 문제가 생길 수 있으므로, 대부분의 경우 개별 모드에서 퍼포먼스가 치명적인 블루프린트만 대상으로 하는 것이 좋습니다. 자세한 정보는 블루프린트 네이티브화 문서를 참고하세요.

신기능: C++ 컴파일 시간 개선

언리얼 엔진 4 코드베이스의 컴파일 시간이 25-50% 빨라졌습니다! 헤더 파일은 English.h 나 UnrealEd.h 처럼 커다란 모놀리식 헤더 포함 모든 소스 파일을 포함시키는 것이 아닌, 딱 필요한 헤더 파일만 포함시킵니다. 이것을 Include What You Use (IWYU) 기법이라 합니다.

image alt text

새로운 모델에 대한 규칙은 다음과 같습니다:

  • 모든 헤더는 이제 컴파일에 필요한 모든 것을 포함합니다 - CoreMinimal.h 라는 헤더에 Core 의 어디에나 존재하는 (FString, FName, TArray, FVector, 등의) 유형 세트가 들어있는데, 이는 이제 대부분의 헤더에 처음 포함됩니다.

  • 모든 .cpp 파일은 일치하는 .h 파일을 먼저 포함합니다 - 각 헤더에 필요한 것을 전부 포함시켰는지 확인하는 데 좋습니다. UnrealBuildTool 은 소스 파일이 이 규칙을 따르는지 검사합니다.

  • 엔진 코드가 더이상 Engine.h 나 UnrealEd.h 같은 모놀리식 헤더를 포함하지 않습니다 - 이들 중 하나를 포함시키려 하면 엔진에서 경고가 날 것입니다. 아직 존재하는 이유는 게임 프로젝트와의 호환성 때문입니다.

  • 엔진 코드가 더이상 미리 컴파일된 헤더(PCH)를 명시적으로 포함하지 않습니다 - 아직 PCH 를 사용은 합니다만, UnrealBuildTool 에서 컴파일러 명령줄에 강제 포함시킬 경우에만 쓰입니다. 기존 종속성을 깨뜨리지 않고 포함된 내용을 조정할 수 있습니다.

*.build.cs (또는 전체 BuildConfiguration.xml) 파일에 bEnforceIWYU = false 설정을 하면 이러한 규칙을 어겨도 경고나 오류가 발생하지 않습니다.

신기능: UI 블러 사각형

이제 Background Blur 위젯을 사용하여 UMG 에서 UI 와 3D 씬을 뿌옇게 만들 수 있습니다! Background Blur 위젯에는 블러 적용 제외시킬 위젯 추가를 위한 콘텐츠 슬롯도 있습니다.

image alt text

배경 콘텐츠의 블러 정도를 정의하는 Strength (세기) 값이 하나 있는데, 0 (꺼짐) 부터 100 (최대 세기) 이며, 애니메이션을 통해 시간에 따라 블러 양을 변경시킬 수도 있습니다.

image alt text

image alt text

image alt text

세기 = 2

세기 = 10

세기 = 50

신기능: 머티리얼 에디터 경유지 노드

이제 머티리얼 에디터에서 경유지(Reroute) 노드를 사용하여 머티리얼 그래프를 보다 깔끔하게 정리할 수 있습니다! 블루프린트에서와 똑같은 방식으로 작동하며, 머티리얼의 최종 인스트럭션 수에는 영향을 주지 않고 순전히 시각적인 목적으로 사용됩니다.

image alt text

머티리얼 에디터에서 경유지 노드를 추가하는 방법은 다음과 같습니다:

  • 머티리얼 팔레트의 Utility (유틸리티) 아래 Add Reroute Node (경유지 노드 추가)를 끌어 그래프에 놓습니다.

  • 연결된 스플라인을 더블클릭하면 새로운 경유지 노드가 선 안에 추가됩니다.

신기능: 시퀀서 애니메이션 블렌딩

시퀀서가 이제 다수의 애니메이션에 가중치를 입힌 블렌딩을 지원, 기존 애니메이션에서 복잡한 애니메이션 시퀀스를 구성할 수 있습니다. 애디티브 (로컬 스페이스) 애니메이션을 포함해서 몇 개의 애니메이션을 언제든 블렌딩할 수 있습니다.

애니메이션의 가중치 제어는 트랙을 펼치고 원하는 타임라인에 키 값을 설정합니다. 풀 바디 애니메이션의 경우 가중치는 정규화시켜 적당한 메시 스케일을 유지합니다. 애디티브 애니메이션의 경우, 지정된 가중치 값은 변경하지 않은 채 사용합니다.

스켈레탈 메시가 애니메이션 블렌딩에 다수의 포즈를 사용하도록 하기 위해, 새로 생긴 Blend Multi by Alpha 노드를 메시에 대한 애니메이션 블루프린트의 애님 그래프에 추가할 수 있습니다. 컨텍스트 메뉴에서 새 포즈를 추가할 수 있습니다.

신기능: 블루프린트에서 시퀀서 애니메이션 (실험단계)

새로운 Actor Sequence (액터 시퀀스) 플러그인을 설치하면 Actor Sequence (액터 시퀀스) 컴포넌트가 추가되며, 이를 통해 액터 블루프린트에 시퀀스를 삽입시킬 수 있습니다! 그러면 블루프린트 인스턴스에 애니메이션을 바인딩하고 이벤트 그래프에서 발동시키는 방식으로 시퀀스를 재사용할 수 있습니다. 월드의 아무 액터에나 액터 시퀀스 컴포넌트를 추가하여 액터 단일 인스턴스에 애니메이션을 추가할 수도 있습니다.

신기능: 콘텐츠 핫 리로드 (실험단계)

새로운 콘텐츠 핫 리로드 기능을 통해 요청시 디스크에서 패키지를 리로드하는 기능 지원이 크게 향상되었습니다.

이 기능으로 로드된 애셋을 처리할 때 모든 에디터 내 소스 컨트롤 작업 안정성이 높아집니다. 애셋 액션 아래 새로 생긴 리로드 옵션으로 디스크에서 애셋을 강제 리로드할 수 있는데, 애셋에 가한 변경사항을 저장하지 않은 상태에서 디스크 버전으로 되돌리고자 할 때 매우 유용합니다.

이 기능은 에디터 개인설정 에서 실험단계 섹션 아래 "Content Hot-Reloading" (콘텐츠 핫 리로드) 옵션으로 켤 수 있습니다.

현재 에디터의 소스 컨트롤을 사용해야 에디터가 열린 상태에서 핫 리로드 기능이 작동합니다. 다른 소스 컨트롤과의 동기화를 위해서는 기술적으로 풀어야 하는 문제가 몇 가지 있습니다.

신기능: 하이 다이내믹 레인지 디스플레이 출력 (실험단계)

언리얼 엔진 4 는 이제 보다 높고 넓은 고대비나 색 공간을 활용할 수 있는 하이 다이내믹 레인지 (HDR) 디스플레이 출력이 가능합니다!

image alt text

위는 시뮬레이션을 통한 이미지로, 데모 전용입니다.

HDR 디스플레이 출력 기능은 Windows Direct3D 11 (NVIDIA 전용), Mac Metal 플랫폼에 지원됩니다. 다른 디바이스는 다음 릴리즈 또는 추가되는대로 GitHub 를 통해 배포할 예정입니다. 현재 구현에서는 표준 ACES 트랜스폼(모양 변경 -> 레퍼런스 렌더링 -> 디스플레이 출력)을 통해 렌더링된 씬을 전체 처리하고 있으며, 현재 1000 니트 또는 2000 니트 디스플레이 출력용으로 구현된 경로가 있습니다. 디바이스 전용 트랜스폼을 룩업 테이블로 구을 때 톤매핑 패스의 일부로 굽는데, 여기에는 대부분의 표준 화이트 밸런스 및 컬러 그레이딩 제어가 포함됩니다. 기본적으로 필름 매핑 커브는 LDR 제어와의 호환성이 떨어져 HDR 출력 도중에는 꺼집니다. 톤매핑 이후 필요에 따라 관련 범위 보정 및 인코딩을 적용합니다.

추가적으로 실험단계 LDR UI 합성 기능 지원이 있습니다. HDR 출력을 켜면 자동 처리되어 LDR 모양에 가급적 비슷하게 맞추도록 하는 기능입니다만, 주요 씬의 선명함으로 인해 UI 가 탈색되어 보이는 것을 방지하기 위해서는 새로운 콘솔 변수를 통해 UI 를 증폭시켜 주는 것이 좋습니다.

HDR 출력 기능 지원은 현재 실행시 자동 감지를 통해 지원되는 디스플레이가 연결된 경우에만 자동 설정됩니다. 전체화면 모드와 HDR 출력을 켜면 어플리케이션은 지원되는 디스플레이로의 이동을 자동 시도합니다. HDR 출력은 새로운 콘솔 변수 또는 GameUserSettings 를 통해 켜거나 끌 수 있는데, 현재 디바이스에 맞는 것 중 가장 가까운 설정으로 클램핑을 자동 적용하여 필요한 옵션을 설정해 줍니다..

신기능: 모바일 렌더링 프리뷰 (OpenGL ES 3.1, Metal, Vulkan)

이제 향상된 모바일 프리뷰를 통해 에디터 뷰포트에서 고사양 모바일 기능 미리보기가 지원됩니다. 이 모드는 iOS Metal, Android OpenGL ES 3.1, Android Vulkan 디바이스에서 사용할 수 있는 피처 세트를 에뮬레이션합니다.

image alt text

프리뷰 플랫폼 메뉴에는 프로젝트 세팅에서 켜준 디바이스만 표시됩니다.

신기능: 블루프린트용 맵/세트 컨테이너

이제 블루프린트에 기존의 Array (배열) 변수 유형 말고도 아이템 컬렉션을 저장할 수 있는 변수형 Map (맵)과 Set (세트)가 추가되었습니다. 맵과 세트는 반복되는 항목 없이 고유 아이템만 저장되도록 보장해 주며, 세트를 통해서는 key (키)도 반복되지 않도록 할 수 있습니다. 특히나, 커다란 데이터 세트에 대한 룩업 작업을 자주 할 때 좋습니다.

image alt text

이제 Variable Type 옵션은 드롭다운이 되어, Single Variable (단일 변수), Array (배열), Set (세트), Map (맵) 중에서 선택할 수 있습니다. 맵이 선택되면 ‘value’ 유형에 대한 이차 드롭다운이 나타납니다.

image alt text

세트와 맵 변수는 이제 C++ 에서 선언하고 블루프린트에 노출시킬 수 있으나, 맵과 세트 프로퍼티에 대한 리플리케이션은 아직 C++ 또는 블루프린트에서 지원하지 않습니다.

신기능: 게임플레이 태그

엔진에 등장한지는 이미 오래 된 게임플레이 태그 시스템이 크게 개선되어 이제 완벽 지원됩니다.

게임플레이 태그는 Family.Genus.Species 또는 그냥 IndividualThing 형태입니다. GameplayTags 모듈의 GameplayTag 구조체로 구현되며, 중앙 딕셔너리에 등록됩니다. .(마침표)를 사용한 이름 중첩으로 리터럴 태그 및 모든 부모 태그 양쪽에 대한 일치 검색이 가능합니다. GameplayTagContainer 는 일치 연산에도 사용할 수 있는 태그 세트입니다.

태그는 손으로 하나하나 입력하는 대신, 디자이너와 아티스트용으로 사전 승인한 이름 목록이 있는 것이 좋습니다. 게임플레이 태그를 사용하려면 중앙 태그 딕셔너리에 등록되어 있어야 하는데, 이는 새로운 GameplayTags 프로젝트 세팅 뷰에서 접근할 수 있습니다:

image alt text

Import Tags from Config (환경설정에서 태그 임포트) 옵션을 켜면, 이 페이지의 게임플레이 태그 리스트나 태그 선택에 사용되는 UI 를 통해 에디터에서 태그를 추가할 수 있습니다. 데이터에 태그 프로퍼티를 추가하고나면 블루프린트나 C++ 에서 질의한 후 그를 통해 함수 기능을 변경할 수 있습니다. BlueprintGameplayTagLibrary 에 유용한 함수가 여럿 있습니다. 태그를 실제 구성하기 위해서는, GameplayTag 또는 GameplayTagContainer 변수를 데이터 또는 함수에 추가한 뒤, 선택 UI 에서 태그를 설정하면 됩니다.

신기능: 컬러 그레이딩 제어

포스트 프로세스 세팅에 컬러 그레이딩 프로퍼티 관련해서 보다 직관적인 조작 및 정교한 제어가 가능한 완전 새로운 제어판이 추가되었습니다.

image alt text

새로운 제어판의 특징은 다음과 같습니다:

  • 각 슬라이더 아래 선의 색으로 영향을 주는 컬러 채널을 알 수 있습니다.

  • 슬라이더로 값을 편집할 때의 정밀도가 향상되었습니다. Shift 키를 누른 상태로 편집하면 정밀도를 더욱 향상시킬 수 있습니다.

  • 새로운 색상환으로 X, Y, Z 채널을 한꺼번에 변경할 수 있습니다. 색상환 아래 슬라이더로 X, Y, Z 채널 진폭 제어가 가능합니다.

신기능: VR 에디터 메뉴 개선

VR 에디터의 퀵 메뉴 및 원형 메뉴의 모양과 느낌이 새롭게 업데이트되었을 뿐만 아니라 사용 편의성과 기능도 개선되었습니다.

썸스틱 또는 터치패드를 클릭하면 원형 메뉴 불러오기/해제, 썸스틱/터치패드의 방향으로 옵션 선택, 그리고서 트리거로 선택하면 됩니다. 레이저로 아이템을 선택할 수도 있지만, 썸스틱 또는 터치패드가 우선입니다.

퀵 메뉴 불러오기/해제하기 기능은 거의 동일하지만, 퀵 메뉴가 보이는 상태에서는 시야 방해를 줄이기 위해 레이저를 숨깁니다.

신기능: VR 에디터 숫자 패드

VR 에디터의 새로운 숫자 패드 UI 를 사용하여 텍스트 칸에 숫자(0-9)는 물론 음수나 소수점 값도 빠르게 입력할 수 있습니다!

트리거 버튼으로 숫자 선택, 그립 버튼으로 엔터 입력, 모디파이어 키로 백스페이스입니다. 숫자 패드를 해제하려면 씬 안의 다른 곳을 클릭하거나, 표준 원형 메뉴처럼 터치패드 또는 썸스틱을 클릭해도 됩니다.

신기능: 텍스처 스트리밍 디버깅 시각화 툴

새로 생긴 세 가지 뷰 모드로 게임에 텍스처 스트리밍 시스템이 최적의 상태로 작동중인지 확인하는 작업이 쉬워졌습니다!

image alt text image alt text image alt text

  • 프리미티브 거리 정확도 - 실제 GPU 거리와 비교해서 스트리머가 계산한 뷰 메시 거리의 정확도를 나타냅니다. 스트리머는 시점에서부터 텍스처 인스턴스의 축 평행 바운딩 박스(AABB)까지 거리를 계산합니다. 이 바운딩 박스는 텍스처를 사용하는 컴포넌트 LOD 섹션 AABB 를 더하는 방식으로 빌드 프로세스에서 계산됩니다.

  • 메시 UV 밀도 정확도 - 이 뷰 모드는 스트리머가 각 메시에 사용하는 메시 UV 밀도의 효과를 나타냅니다. UV 밀도가 틀린 경우, 그 메시의 텍스처는 스트리밍 부족(퀄리티 저하) 또는 스트리밍 과잉(메모리 낭비) 위험이 있습니다.

  • 머티리얼 텍스처 스케일 정확도 - 머티리얼에 사용되는 대부분의 텍스처는 메시 UV 채널 중 하나에 스케일을 적용한 값을 사용하여 샘플링합니다. 텍스처 스트리밍 빌드는 사용된 텍스처 좌표와 각각의 샘플링된 텍스처에 적용된 값을 계산을 통해 알아내려 합니다. 이 작업은 여러가지 이유로 실패할 수 있는데, 그러한 경우에 대비해 스트리머는 텍스처 좌표 0 과 스케일 1 로 텍스처를 샘플링했다 가정합니다.

머티리얼은 다수의 텍스처를 샘플링하기에, 이 뷰모드는 샘플링된 모든 텍스처 중 (스트리밍 부족 및 과잉 측면에서) 최악의 오차를 표시합니다. 이 두 가지 극한값은 체크무늬 모양으로 표시되는데, 하나는 최악의 오버 샘플링, 다른 하나는 최악의 언더 샘플링입니다. 이 각각의 텍스처는 뷰 모드 옵션을 통해 조사할 수도 있습니다.

이제 stat streaming 콘솔 명령으로 라이브 텍스처 스트리밍 통계를 접근할 수도 있습니다. 이 통계는 텍스처 스트리머에 사용된 퍼포먼스, 메모리, 기타 척도에 대한 리포트입니다. 메모리 부분에서 pool (풀)이란 단어는 개념적 메모리를 가리키며, 실제 차지한 메모리와는 관계가 없습니다. mips (밉)이란 단어는 텍스처가 (예상치도 추정치도 아닌) 현재 차지하고 있는 메모리에 해당합니다. 메모리 척도는 세 개의 메인 풀로 분류되는데, Texture (텍스처), Streaming (스트리밍), Wanted (필요) 입니다. 이 풀 크기는 각 줄 오른쪽에 표시됩니다.

신기능: 조종 스틱 및 운전 핸들 지원 (Windows)

새로운 Raw Input 플러그인을 통해 Windows용 운전 핸들, 조종 스틱, 기타 X 이외 입력을 지원하는 디바이스가 지원됩니다!

새로운 디바이스 추가는 간단합니다. 프로젝트 세팅이나 DefaultInput.ini 편집을 통해 환경설정을 해 주기만 하면 됩니다. 비히클 템플릿이나 비히클 게임 모두 Logitech G920 작동이 가능하도록 환경설정되어 있습니다.

신기능: 포스 피드백 컴포넌트

새로운 Force Feedback (포스 피드백) 컴포넌트를 월드의 액터에 추가하여 독특한 햅틱 효과를 낼 수 있습니다! 이 컴포넌트에 있는 어테뉴에이션(감쇠) 프로퍼티로 플레이어와 이펙트 사이 거리에 따라 포스 피드백 패턴 재생 강도를 결정할 수 있습니다. 어테뉴에이션 프로퍼티는 컴포넌트에서 직접 지정하거나, 콘텐츠 브라우저에서 Force Feedback Attenuation (포드 피드백 어테뉴에이션) 애셋으로 만들어 다수의 컴포넌트에 재사용할 수 있습니다. 포스 피드백 컴포넌트는 오디오, 데칼, 이미터와 비슷한 방식으로 블루프린트에서 월드에 스폰시킬 수도 있습니다.

신기능: PlayStationⓇVR Aim Controller 지원

PlayStationⓇVR 의 언리얼 엔진 4 게임은 PlayStationⓇVR Aim Controller 지원을 통해 몰입도를 한층 강화시킬 수 있습니다.

image alt text

사용하려면 Motion Controller 컴포넌트의 Hand 값을 Gun 으로 바꿔주기만 하면 됩니다. PlayStationⓇVR Aim Controller 의 버튼은 Dual Shock 게임패드의 동일 버튼에 매핑됩니다.

신기능: 수학 머티리얼 노드

일반적인 연산에 머티리얼 함수나 커스텀 노드를 쓰지 않아도 될 수 있게끔 요청을 자주 받은 수학 머티리얼 노드를 몇 가지 추가했습니다.

image alt text

Fast 태그 마킹된 노드는 실제 인스트럭션 대신 추정식을 사용합니다. 복잡한 버전의 머티리얼에 비해 퍼포먼스가 향상되지만, 입력상의 제한이나 정밀도가 떨어지는 상쇄 효과가 있습니다.

신기능: 이전 프레임 전환 머티리얼 노드

새로 추가된 Previous Frame Switch (이전 프레임 전환) 노드를 통해, 모션 벡터 생성 도중 사용되는 복잡한 머티리얼의 월드 포지션 오프셋 대체값을 지정할 수 있습니다.

기본적으로 월드 오프셋 머티리얼 파라미터는 두 번 컴파일하여 프레임 단위 이펙트가 디테일한 모션을 생성할 수 있도록 하지만, 파라미터가 프레임 단위로 바뀌는 경우 항상 최적의 결과를 내지는 못합니다. 새로운 스위치 노드는 사용자에게 제어할 수 있도록 하여 이 문제 해결을 시도합니다.

주: 이 기능을 사용하려면 프로젝트 세팅에서 Accurate velocities from Vertex Deformation (버텍스 디포메이션에서의 정확한 속도) 옵션을 켜야 합니다.

신기능: 미리 스키닝된 로컬 노멀 머티리얼 노드

이제 Pre-Skinned Local Normals (미리 스키닝된 로컬 노멀) 노드를 통해 (로컬 축 평행 삼면 머티리얼을 사용하여) 스켈레탈 메시의 자동 UV 매핑과 같은 효과를 낼 수 있습니다.

이 기능은 새로운 Pre-Skinned Local Normal 머티리얼 노드로 노출되어 있습니다. Pre-Skinned Local Position 노드와 비슷한 방식으로 작동하나, 스켈레탈 메시와 스태틱 메시의 로컬 서피스 노멀을 반환합니다. 이를 통해 추가적인 로컬 스페이스 메시 정렬 이펙트나, 동적인 표면 데이터를 다른 머티리얼에서 다시 읽어오는(read-back) 마스크에 써넣는 등의 좀 더 고급 활용도 가능합니다.

신기능: macOS 및 iOS 에서의 Metal 지원 강화

Metal 지원이 확장되어 macOS 10.12 Sierra & iOS 10 에서 Apple 이 추가한 다수의 신규 API 및 셰이더 언어 기능을 사용할 수 있게 되었습니다.

Mac 에서 언리얼 엔진의 테셀레이션 전체 기능이 완벽 지원됩니다. 새로운 Metal 테셀레이션 파이프라인을 사용한 Apple 과의 협업 덕분입니다. 이를 통해 전에는 불가능했던 디스플레이스먼트나 월드 포지션 오프셋 기능을 Mac 에서 사용할 수 있게 되었습니다. 엘리멘탈 샘플이 Mac Metal 에서 기본적으로 테셀레이션을 사용하도록 업데이트되었습니다.

Mac 과 iOS 둘 다 Metal Shader 표준 버전을 프로젝트 세팅으로 지정하는 기능을 지원하여, 신기능을 적용할지 하위호환성을 유지할지 여부를 개발자가 선택할 수 있습니다. 새로운 Metal v1.2 표준 기능을 켜면, 모든 Metal 플랫폼에서 Unordered Access Views (비순서 접근 뷰)로 픽셀 셰이더를 사용하여 다른 RHI 에서처럼 임의의 데이터를 생성할 수 있습니다.

Retina iMac 또는 Thunderbolt 를 통해 적합한 디스플레이가 부착된 Mac 에 HDR 렌더링을 지원하는 실험단계 옵션도 생겼습니다. 프로젝트 단위 HDR 세팅을 켜면 DCI-P3 색 공간을 지원하는 HDR 디스플레이에 렌더링할 수 있도록 Metal 을 환경설정합니다.

Metal 지원에 이제 개발용으로 기본 켜지며 Xcode 와 별도로 실행되는 내부 검증 레이어도 포함됩니다. 간헐적 또는 하드웨어 전용 문제 해결 지원을 위해 설치된 개발자 툴이 없어도 Metal 에서 실행중 발생하는 오류 관련해서 훨씬 자세한 정보를 보고받는 것이 가능합니다. 이 레이어는 퍼포먼스에 민감한 Test & Shipping 빌드에는 자동으로 컴파일에서 제외됩니다.

신기능: 시퀀서 이벤트 트랙 페이로드

시퀀서의 이벤트에 이제 데이터의 페이로드를 포함시켜, 시퀀스 재생에 대한 반응 방법 관련 보다 풍부한 컨텍스트 정보를 가지고 이벤트를 발동시킬 수 있습니다. 페이로드가 있는 이벤트를 발동시키려면, 이벤트에 대한 파라미터를 정의하는 구조체를 만들고, 그것을 이벤트의 파라미터 구조체 프로퍼티에 적용합니다:

image alt text

이벤트는 지정된 파라마터 구조체가 대상 함수의 프로토타입과 비트 단위로 호환된다는 가정 하에, 이벤트 컨텍스트에서 함수 호출 및 커스텀 이벤트 발동이 가능합니다.

신기능: 시퀀서로 다이내믹 오브젝트 애니메이션

블루프린트를 사용해서 런타임에 시퀀스를 오브젝트에 적용할 수 있도록 시퀀서 트랙 바인딩 설정이 가능합니다! 시퀀서를 제작했던 것과 다른 오브젝트 애니메이션이 가능하다는 뜻입니다. 시퀀스에서 시퀀스 바인딩 식별자를 추출해 내려면, 새로운 GetSequenceBindings 노드를 사용하세요.

신기능: 시퀀서 UI 개선

시퀀서에 생긴 Transform Keys/Sections (키/섹션 트랜스폼) 툴을 통해 현재 선택의 위치나 스케일을 조절할 수 있습니다.

기타 개선사항:

  • 이제 트랙을 복사하여 호환되는 오브젝트에 붙여넣는 것이 가능합니다.

  • 마스터 시퀀스 안에 있는 샷을 볼 때, 이제 그와 관계된 시간에서 전체 시퀀스를 평가합니다. Evaluate Sub Sequences in Isolation (서브 시퀀스 단독 평가) 옵션을 설정하여 샷 자체를 분리해낼 수 있습니다.

  • 컴포넌트 키프레임 기능이 향상되었습니다.

  • 트랙 붙이기는 이제 단순 트랜스폼 일치가 아닌, 액터를 대상 위치에 붙입니다. 이를 통해 붙어있는 것과 상대 트랜스폼 모두 한꺼번에 키 시퀀스 작업을 할 수 있습니다.

신기능: 시퀀서 오디오 볼륨 / 피치 커브

이제 시퀀서에서 오디오 섹션의 볼륨과 피치를 제어할 수 있습니다. 디자이너가 페이드 인, 페이드 아웃, 기타 이펙트 구성이 가능합니다.

신기능: 블렌드스페이스 에디터 개선

블렌드스페이스 에디터의 모양이 바뀌고 작업방식이 개선되었습니다!

image alt text

  • 여러가지 방식의 샘플 프로퍼티 변경 - 샘플 드래그 앤 드롭에 추가로, 컨텍스트 메뉴와 스핀 박스 방식으로 샘플 값 또는 애니메이션 시퀀스를 변경할 수 있습니다.

  • Shift 를 눌러 블렌드스페이스 (핀 )미리보기 - 다양한 각도, 줌 레벨 등으로 메시를 미리볼 수 있도록 하기 위해 프리뷰 값에 핀을 설정하는 기능을 추가했습니다. Shift 키를 누른 채 미리보기 값을 움직일 수 있습니다.

  • 그리드 크기를 변경하면 새로운 그리드로 샘플 스냅 - 그리드 분할 수 또는 어느 한 축 크기가 변경되면, 가장 가까운 그리드 지점으로 기존 샘플을 끌어 붙입니다. 유효한 위치를 찾지 못한 샘플은 유효하지 않음(invalid) 마킹하고 빨갛게 그립니다.

  • 드래그 앤 드롭 작업 - 애니메이션 툴 애셋 브라우저에서의 드래그 앤 드롭 작업 확인 및 미리보기가 개선되어 샘플이 배치될 위치와 애니메이션이 블렌드 스페이스에 유효한지 여부가 표시됩니다.

  • 늘여서 맞춤 vs 가장 큰 축에 맞도록 늘이기 - 그리드가 차지하는 UI 공간이 변경되었으니, 그리드를 전체 레이아웃 공간에 맞춰 늘이거나, 가장 큰 축에 맞춰 늘이도록 하는 기능을 추가했습니다. 가장 큰 축은 그리드의 최대 폭 또는 높이가 된다는 뜻입니다.

신기능: 포즈 스냅샷

블루프린트에서 런타임 스켈레탈 메시 포즈를 캡처하여 애님 블루프린트에서 사용할 수 있는 기능을 추가했습니다!

image alt text

(래그돌 시뮬레이션 이후) 사망 포즈에서 get up (일어나기) 애니메이션으로 블렌딩할 때 유용하게 쓰일 수 있습니다. 포즈 스냅샷을 변수에 저장하여 나중에 스켈레탈 메시 컴포넌트와 사용할 수도 있습니다.

신기능: 질량 프로퍼티 디버깅

피직스 오브젝트에 관련된 질량 중심 및 관성 텐서를 시각화시키는 기능을 추가했습니다.

image alt text

질량 프로퍼티 시각화는, 새로운 표시 플래그를 (표시> 고급> 질량 프로퍼티) 켜면 됩니다. 각 축의 두께는 해당 축의 관성 강도를 나타냅니다.

신기능: 커브를 본에 링크

애니메이션 커브는 이제 스켈레톤의 특정 본에 링크시켜 LOD 변경시 본과 함께 컬링되도록 할 수 있습니다. 얼굴 애니메이션 구성시 특히 유용합니다. 레이어 블렌딩과 함께 사용하여, 잘못된 레이어에서 온 커브 값 덮어쓰기를 방지하는 것도 가능합니다.

신기능: 커브 애니메이션 변경 노드

이제 애니메이션 그래프에서 임의 수학 로직을 사용하여 애니메이션 커브를 변경할 수 있습니다. 보다 역동적으로 구동되는 애니메이션이 가능합니다.

image alt text

새로운 Modify Curve 노드를 추가한 후 우클릭하여 변경하고자 하는 커브를 선택할 수 있습니다. 그러면 각 커브는 그 로직을 연결할 수 있는 float 입력 핀으로 나타납니다.

신기능: 폰트 애셋 개선

이제 새로운 Font Face (폰트 페이스) 애셋으로 폰트 애셋끼리 폰트 데이터를 공유시켜 메모리 사용량을 줄이고 안정성을 향상시킬 수 있습니다!

image alt text

폰트 페이스는 이제 폰트 데이터를 저장하는 애셋으로, 이 애셋은 단순히 폰트 애셋에 레퍼런싱됩니다. 즉 같은 폰트 데이터를 다수의 폰트 애셋, 심지어 하나의 폰트 애셋 내 다수의 타입 페이스에서도 재사용할 수 있다는 뜻입니다. 기존 폰트 애셋은 로드 도중 내부 폰트 데이터를 삽입된 폰트 페이스 애셋으로 자동 업그레이드합니다. 폰트 에디터를 사용하여 삽입된 애셋을 실제 폰트 페이스 애셋으로 분리시키고 나중에 편집 및 공유할 수도 있습니다.

신기능: Linux ARM64 지원

Linux 실행 ARM64 (AArch64) 디바이스가 지원됩니다. 참고로 엔진 실행을 위해서는 데스크톱 OpenGL 3.2 이상을 지원하는 디바이스여야 합니다.

신기능: NVIDIA SLI 용 대체 프레임 렌더링(AFR) 지원

image alt text

이제 엔진에 Nvidia SLI 환경설정용 AFR 렌더링이 지원되어, 다수의 그래픽 카드가 감지되면 뛰어난 퍼포먼스를 낼 수 있습니다. 가장 큰 향상 부분은 렌더러가 GPU 사이 프레임간 종속성을 가급적 빨리 복사하는 데서 옵니다. 개발자는 NVIDIA 와의 협업을 통해 가능한 경우 AFR 로 자동 전환이 가능하도록 게임 테스트를 받아야 할 것입니다.

신기능: 모바일 VR 용 모노스코픽 파 필드 렌더링 (실험단계)

모노스코픽 파 필드 렌더링으로 원거리의 오브젝트를 한 번만 렌더링하여 퍼포먼스를 크게 증폭시킬 수 있습니다!

오브젝트가 렌더링되는 거리가 카메라에서 멀어질수록 스테레오 확산 차는 줄어듭니다. 어떤 콘텐츠에서는, 오브젝트가 카메라에서 너무 멀리 떨어져 있을 때 스테레오 렌더링 결과가 일반 모노스코픽 렌더링 결과와 구분되지 않아, 다량의 프레임에서 스테레오 렌더링을 통한 혜택을 거의 보지 못합니다. 모노스코픽 파 필드 렌더링은 씬을 근처와 원거리 두 클리핑 면으로 나누는 방식으로 이를 활용합니다. 클리핑 면 근처 부분의 모든 것은 스테레오로 렌더링하고, 원거리 부분은 한 번만 렌더링한 다음 근처 부분 결과와 합성하는 것입니다. 원거리 오브젝트가 많은 콘텐츠의 경우, 퍼포먼스상으로 커다란 이득이 될 수 있습니다.

모바일 VR 프로젝트에 모노스코픽 파 필드 렌더링을 켜려면, 프로젝트 세팅 -> 렌더링 -> VR 아래 체크박스를 선택합니다. 현재 모바일 멀티 뷰와 모노스코픽 파 필드를 동시에 지원하지는 않으며, 모바일 HDR 옵션은 꺼야 합니다.

신기능: 모바일에서 커스텀 스텐실

모바일 디바이스에서 이제 포스트 프로세싱 머티리얼의 Custom Stencil (커스텀 스텐실)을 사용할 수 있습니다. MobileHDR 옵션은 켜고 Mosaic 이외 디바이스가 필요합니다.

image alt text

프로젝트에서 이 기능을 켜려면, 프로젝트 세팅 -> 렌더링 -> 포스트 프로세싱에서 Custom Depth-Stencil Pass 를 Enabled with Stencil 로 설정하면 됩니다.

신기능: 모바일 셰이더 메모리 감소 옵션

이제 모바일 게임에서 활용하지 않는 라이팅 구성에 대한 셰이더 순열을 끌 수 있습니다.

프로젝트 세팅 -> 렌더링에서 찾을 수 있는 다음 세팅을 통해 메모리 사용량과 앱 패키지 크기를 줄일 수 있습니다:

  • Allow Static Lighting (스태틱 라이팅 허용) 끄기

  • Support Combined Static and CSM Shadowing (스태틱 및 CSM 섀도 혼합 지원) 끄기

  • Support Distance Field Shadows (디스턴스 필드 섀도 지원) 끄기

  • Support Movable Directional Lights (무버블 디렉셔널 라이트 지원) 끄기

  • Max Movable Point Lights (최대 무버블 포인트 라이트) 0 으로 설정

  • Use Shared Movable Point Light Shaders (공유 무버블 포인트 라이트 셰이더 사용) 켜기

SunTemple 샘플에서 위 옵션 설정을 통해 사용되지 않는 라이팅 구성을 제거했더니 Android 패키지 크기가 22MB 줄었습니다.

신기능: Android 그래픽 디버거 지원 통합

Android 어플리케이션은 이제 써드 파티 Graphics Debugger (그래픽 디버거)를 지원하도록 패키징 가능합니다. 디바이스의 GPU 에 따라 Mali Graphics Debugger 또는 Adreno Profiler 중에서 선택할 수 있습니다. 그래픽 디버거 옵션은 프로젝트 세팅 -> Android에서 찾을 수 있습니다.

먼저 GPU 벤더 웹사이트에서 해당 디버거를 다운로드하여 설치해야 하는데, 각각 디바이스 디버깅을 위한 환경설정 구성을 위해 추가로 해 줘야 하는 작업이 조금 있습니다. 디버거 유형 선택 후 나타나는 지시를 따르도록 하세요.

또한 특정 GPU 디버거를 지원하도록 앱을 패키징한다면, 다른 GPU 가 장착된 디바이스에서는 정상 작동하지 않을 수 있습니다.

신기능: Android 및 iOS 에서 GPS 데이터용 위치 서비스

Android 및 iOS 용 GPS 데이터 접근을 제공해 주는 위치 서비스가 새로 생겼습니다. 새로운 OnLocationChanged 델리게이트를 사용할 수 있으며, 블루프린트 노드는 Services->Mobile->Location 아래 제공됩니다.

신기능: iOS 에서 오디오 스트리밍

iOS 에서 오디오 스트리밍이 구현되었습니다. 이미 스트리밍 마킹된 애셋은 이 빌드를 시작으로 제대로 스트리밍될 것입니다.

신기능: iOS 용 원격 알림

이제 iOS 용 원격 알림 기능이 지원됩니다. 여기에는 알림 처리를 위한 게임내 콜백은 물론 앱 스토어 지원에 필요한 plist 정보를 제대로 구성하는 방법도 포함되어 있습니다.

신기능: 비히클 지원 플러그인으로 이동

PhysX Vehicle 지원을 옵션 플러그인으로 이동시켰습니다! 비히클을 사용하지 않는 게임에서 이 기능을 제외시키고 디스크 공간과 메모리를 절약하기가 쉬워집니다. 이 작업으로 엔진에 여러가지 유용한 피직스 익스텐션 포인트도 (예: OnPhysSceneInit/Term, OnPhysSceneStep) 추가되어 개발자 자체적으로 비슷한 시스템을 만들가기 쉬워졌습니다.

이전 (엔진에서 폐기된) TireType 애셋을 새로운 (PhysXVehicles 플러그인에 정의된) TireConfig 애셋으로 이주시키려면, 수동 작업을 해 줘야 합니다. UE4 에디터에서 사용할 수 있는 새로운 콘솔 명령 ConvertTireTypes 를 사용하면 됩니다. 그러면 TireConfig 애셋을 새로 만들고, 프로퍼티를 복사해온 뒤, VehicleWheel 블루프린트에 할당해 줍니다. 그 후 이전 TireType 애셋은 지워도 됩니다.

Release Notes

AI

  • New: A Cone EQS generator has been added.

  • Bugfix: Fixed AI perception system not properly registering perception listeners spawned as part of "begin play" in streamed-in sublevels.

  • Bugfix: Fixed a bug in the Env Query Generator Simple Grid resulting in one extra column and row of points being generated.

  • Bugfix: A number of fixes to how and when static mesh collision gets applied to navmesh generation process. This makes static mesh collision changes instantly applied to navmesh on the level.

  • Bugfix: Pasting nodes in the Behavior Tree editor has been fixed to make pasting location predictable.

  • Bugfix: Fixed a bug in EQS debug drawing resulting in item labels not showing.

  • Bugfix: Fixed a bug in EQS debug drawing resulting in displaying labels of item that are no longer being debugged.

  • Bugfix: Fixed vertical jitter in replicated Nav Walking movement.

  • Improvements for using gameplay debugger in Simulate in Editor mode, unified category toggling with input events between simulate and game/play modes.

Behavior Tree

  • Bugfix: Fixed the Blackboard component pausing but never being unpaused if we ended up restarting the Behavior Tree instead of continuing.

Debugging Tools

  • Bugfix: Fixed gameplay debugger's EQS category skipping timestamps, and improved readability of presented data.

Navigation

  • New: Added new component for creating navigation links: Nav Link Component.

  • Bugfix: Get Random Point In Navigable Radius has been fixed to not return invalid locations if there's any navmesh within specified radius.

  • Bugfix: Fixed a bug in the Nav Link Proxy Point Links' Area Class application that was resulting in the value getting ignored.

Animation

  • New: Added experimental support for facial animation.

  • New: Anim Blueprint thread safety is now checked in the compiler.

    • Added extra warnings in the Anim Blueprint compiler based around these new keys to help people catch suspect thread usage.

  • New: Expanded pose snapshot system.

    • Allows poses to be stored in variables so they can be managed like any other Blueprint data.

    • Added modes to Anim Node Pose Snapshot so that we can either use the named pose or a Pose Snapshot variable pin.

  • New: Added editor-only flag Update Animation In Editor and setter function to Skeletal Mesh Components to allow playback of animations on Skeletal Meshes placed in the level.

  • Bugfix: Fixed a crash when retargetting animation assets to another skeleton via duplicate and retarget.

  • Bugfix: Fixed marker sync crash when animation being played by a sequence node changes while that nodes sync group is not active.

  • Bugfix: Fixed 'auto' check box in Morph Target panel.

  • Bugfix: Fixed situation in which stale material references could be present as override materials on Static and Skeletal meshes inside of a level.

  • Bugfix: Fixed removal of bone tree entries from a Skeleton after performing "Remove Unused Bones" (caused retargeting options to become out of sync).

  • Bugfix: Fixed anim blueprint compiler not following reroute nodes when building cached pose fragment list.

  • Removed 4.11 deprecated functions from animation systems.

  • Removed warning on Least Destructive animation compression (it was incorrectly applied to least destructive due to legacy reasons).

  • Added extra information to log warning about using additive animations in Single Node Anim Instance.

  • Changed "Ensure All Indices Have Handles" to try and maintain validity of as many of the handles as possible to stop crash when calling "Get Key."

  • Morphtarget applying priority has changed.

    • First, it will apply animation curves to active morphtarget list.

    • Second, it will apply (and override if exists) Set Morph Target curves to active morphtarget list.

    • Set Morph Target can also clear the weight if you decided to not to remove from the list.

Animation Assets

  • New: Added the ability to specify per-sample animation rate scales in blendspaces.

  • Bugfix: Fixed shadowing issue for Alembic Caches which had incorrect (too small) bounds.

  • Bugfix: Fixed popping in On Rep Replicated Anim Montage.

  • Made Scrubbing the Play Back Speed property on Geometry Cache components less sensitive.

  • Changed behaviour for calculating blendspace grid weighting for one, two or colinear triangles.

    • One: Fill grid weights to single sample.

    • Two: Find closest point on line between the two samples for the grid point, and weight according to the distance on the line.

    • Colinear: Find two closest samples and apply behaviour above.

Animation Blueprint

  • New: Added Blend Option (and optional Custom Curve) to Pose Blend Node.

  • Bugfix: Fixed anim sub-instances only allowing one pin to work when any pin required a call out to the VM for evaluation.

  • Bugfix: Fixed Joint Target Location not being available in the detail panel.

  • Exposed various montage functions to Blueprint.

  • Added curve panel to anim BP editor.

  • Copy-to-array now works with the anim blueprint 'fast path'.

  • 'Blend Two Poses Together Per Bone' will now blend curves using 'combine'. Previously it only took curve data from the second pose input.

Import/Export

  • Bugfix: Fixed an issue where Matrix Samples would be imported incorrectly for Alembic Caches.

  • Changed the way we populate Smoothing Group information for Alembic Caches.

  • Refactored the Skeletal LOD workflow. Now we track source files for LODs to save time when reimporting LODs often. It's still possible to pick new files and overwrite the current settings.

Skeletal Mesh

  • New: Added support for per-component vertex color overrides for Skeletal Meshes.Nintendo

    • Use the Set Vertex Color Override function (also exposed to Blueprints) to specify a new color buffer to apply.

  • Bugfix: Fixed edge cases so Skeletal Mesh Components should now properly scale collisions when simulating, or when using physical animation.

  • Bugfix: Fixed bounds not being updated on existing skeletal mesh components when changing physics assets.

  • Made sure Set Morph Target still take precedence over Animation Curves for Slave Component.

Tools

  • New: Added access to the viewport client from Persona Viewport.

  • New: Added "Show Selected and Parents" to bone display options.

  • New: Added display/edit of bone transforms in details panel.

  • New: Widened bone reference widget to give a better view of the name and added full name to tooltip.

  • New: Auto select current bone when opening the skeleton tree on a bone reference.

  • New: Newly added virtual bones are now selected in the skeleton tree.

  • New: Changed "Reference Pose" option for additive animation ref pose to "Skeleton Reference Pose" to make it clearer that it is not the meshes reference pose being used.

  • Bugfix: Fixed crash in thumbnail rendering when creating a new montage.

  • Bugfix: Fixed skeleton tree selection disappearing when filtering changes.

  • Bugfix: Fixed notify validation not triggering when using set time/set frame context menu options.

  • Bugfix: Fixed montage thumbnail rendering using ref pose instead of the actual asset.

  • Bugfix: Fixed "number of curves" label on an animation not updating after adding or removing a curve.

  • Bugfix: Fixed newly imported animations having black thumbnails.

  • Bugfix: Fixed compile error when blend space on aim offset nodes is exposed as pin.

  • Bugfix: Fixed scrolling in Pose Asset editor panel.

  • Bugfix: Fixed tooltip when dragging animation assets onto animation player nodes.

  • Bugfix: Fixed new virtual bones being created off screen.

  • Bugfix: Fixed missing mesh when setting preview skeletal meshes in animation editors.

  • Current asset is now initially selected in the asset family shortcut bar dropdown.

  • Camera is no longer reset when setting skeletal meshes in the skeletal mesh editor (etc.).

    • Focus shortcut (F key) now works in the skeleton tree too.

  • Removed FPersona and supporting classes.

    • Please use individual asset editors instead.

  • Rezeroing animation is now explicit about what it does (current vs. specified frame).

  • Changed slot node category from Blends to Montage.

Audio

  • New: Sound Cues can now be played/stopped by clicking a button on the thumbnail.

  • New: Added the ability to disable Master Reverb and EQ in Project Settings.

  • BugFix: Audio Components no longer override subtitle priority by default.

    • Any existing Audio Component that had changed the priority from the default value will still have bOverrideSubtitlePriority as true, those that had not changed the priority from the default have been set to false.

  • BugFix: Fixed a crash that would happen when a Sound Cue Delay node set to 0.0.

  • BugFix: Fixed a small memory leak in sound concurrency management.

Automation

  • New: Added architecture hash to path for generated includes on Linux Installed Build.

  • New: Included .tps files in the installed build.

  • New: Changed BuildPlugin command so that it reads from installed platform data to decide which targets to build for more flexible task for BuildGraph. Now takes "From" and "To" attributes, which may take individual files as well as wildcards, and permits renaming as part of copies. The Separate "Files" attribute is still supported, but is now optional, and is used to filter the list of source files.

    • BuildGraph: Added a task, which can move or rename files using the same syntax as the task.

  • New: Added support in BuildGraph for multi-line properties, declared inside a tag. Mutli-line properties can be useful for making lists for filtering. Each non-empty line inside the property tag is stripped of leading and trailing whitespace, and appended to the property value separated by a semicolon.

  • New: Added architecture hash to path for generated includes on Linux Installed Build.

Blueprints

  • New: Making the UI for adding/removing parameters in custom Blueprint functions behave similarly to the struct creation dialog in the Content Browser.

    • The New button is no longer in the bottom right of Inputs and Outputs. Instead, add via the + icon in the Category header.

    • Parameter ordering controls have been moved onto the main parameter row instead of being nested inside the collapse panel.

    • A tooltip will now let you know the full parameter name and type when you hover over the editable name field.

  • New: Added RotatorToAxisAndAngle function.

  • New: Added aliases for "dot" and "cross" math operations in the Blueprint Math Expression node.

  • New: Added support for DataTable members variables in Blueprints.

  • BugFix: Fixed a crash on load for Blueprints casting to a ChildActorComponent's parent.

  • BugFix: Fixed a crash when using "Select All Input nodes" option from the Blueprint pin menu.

  • BugFix: Fixed a crash which could happen when using reroute nodes in Blueprints.

  • BugFix: Fixed a crash when selecting an enum value from a Blueprint node's enum combo box.

  • BugFix: Fixed a crash that could happen after receiving a "Graph is linked to object(s) in external map" error message.

  • BugFix: Fixed a crash when debugging Blueprints across multiple worlds.

  • BugFix: Fix crash in execArray_Append that could occur when one of the target array's UProperties was missing.

  • BugFix: Fixed a crash that would sometimes occur when collapsing nodes to a function or macro.

  • BugFix: Fixed a rare crash in IsTypeCompatiableWithProperty.

  • BugFix: Fixed a crash during bootup involving CDO of nativized Blueprints.

  • BugFix: Fixed a stale object crash in HandlePlaceholderScriptRef.

  • BugFix: Fixed a crash caused by an object name collision that could occur when loading some older Blueprint assets.

  • BugFix: Fixed a that would occur when loading a Blueprint with a collapsed node with a split struct pin.

  • BugFix: Fixed a crash with Undo/Redo commands causing the component and actor selection to become unsynchronized.

  • BugFix: Fixed a regression in which nested scene component subobjects would no longer be registered after construction of an instance-added component.

  • BugFix: Fixed inaccurate ensure message that could trigger when choosing a bad target from the Blueprint debug menu.

  • BugFix: The Vector2D default pin values are now properly saved

  • BugFix: Fixed the inability to edit an Instanced Static Mesh Component instance array on Actor instances when the Instanced Static Mesh Component is inherited from a Blueprint class.

  • BugFix: An explicit warning is now logged on BuildCookRun or a standalone cook when the -nativizeAssets flag is omitted from the command line for a nativization-enabled project.

  • BugFix: Fixed various component instance data loss issues for components added to an Actor through one or more Add Component nodes in a Blueprint graph.

  • BugFix: Fixed attached root scene component relative transform values after reconstruction of an Actor-based Blueprint instance.

  • BugFix: Fixed a bug that would drop pin connections when ctrl dragging them.

  • BugFix: Fixed a bug that would cause Volume Actor Reference nodes to use the wrong class icon.

  • BugFix: Fix for breakpoints failing in Level Blueprints when multiple Clients are running in PIE.

  • BugFix: Fixed an issue with CreateRenderTarget2D called in construction script during cooking.

  • BugFix: Fixed an issue which could cause invalid Blueprint warnings when using a cast node.

  • BugFix: Fixed an issue in the struct editor that would prevent you from including spaces in a variable name.

  • BugFix: Fixed an issue that could cause a Blueprint compiler warning when using one of the Ease nodes.

  • BugFix: Fixed an issue where Blueprints could improperly warn/error about missing variables.

  • BugFix: Fixed a bug where Blueprints could improperly error about missing Event Dispatchers.

  • BugFix: Fixed a bug that could cause latent Blueprint nodes to lose pin connections when using a split pin.

  • BugFix: Fixed an issue where copying variable nodes and pasting them into another graph with a variable of the same name and type would prevent that node from showing up in a reference search.

  • BugFix: Fixed an issue where Reroute nodes for variable would not always mirror data properly from the source pin.

  • BugFix: Fixed an issue while loading of circularly dependent Blueprints when a user defined struct's default value was part of the dependency graph.

  • BugFix: Dragging and dropping a function into a graph can not be properly undone.

  • BugFix: Corrected the behavior of nativized UserDefinedEnums. Sometimes enum names did not match the normal version of the data.

  • BugFix: Fixed an issue for "Graph Linked to External Private Object" error when deleting folders via the Content Browser when the folders include Actor Blueprints

  • BugFix: Fixed cyclic dependencies with Nativization that occur while native class construction happens.

  • BugFix: Fixed a data-loss issue related to non-native Blueprint classes that override inherited component default values from a nativized Blueprint class hierarchy.

  • Changed ClearRenderTarget2D default alpha to 1, which is necessary for correct compositing.

  • The Graph Editors can now set their grid snap size via the Editor Preferences > Appearance.

  • Pre-Populated Blueprint nodes now attach all matching outputs to parent Blueprint calls (not just exec pins).

  • The CreateSaveGameObject node now alters its output type based on the SaveGameClass input.

  • IntVector can now be used in Blueprints.

  • Blueprint Context menu now has improved results for 'sel', 'sele', 'selec', 'bra', and 'foreach'.

  • Create Event node now displays the signature of the function that is desired.

  • Adding a component in the Blueprint Editor now adds the component as a child of the selected component.

  • Blueprint compact nodes no longer have two different looks. Now, all compact nodes have rounded edges and have a matte color.

  • GetReflectionVector math function has been exposed to Blueprints.

  • Exposed a new function, GetCommandLine, to Blueprints which will return the command line used to launch the process.

  • You can now select Blueprint assets for nativization in the Project Settings > Packaging.

  • The Blueprint nativization feature will now be automatically enabled for the project when a Blueprint class is marked for nativization in the Blueprint Class settings view.

  • Interface class dependencies that are not enabled for nativization will now raise an error at cook time if dependent classes are marked for nativization.

  • We now hide 'EditInstanceOnly' properties when viewing/editing SCS component defaults in the Blueprint editor, as this does not apply to an instance context.

Core

  • New: Added support for " in FName so they will be converted properly to \" internally.

  • New: Removed defunct "USING_SIGNED_CONTENT" define.

  • New: All platforms are now compiled with C++14 standard.

  • New: Allow enabling sound (-enablesound commandline switch) if the game disabled it by default.

  • Bugfix: Fixed a garbage collection crash when copying an empty timeline.

  • Bugfix: Module Manager shutdown fixes:

    • Shutdown Module is now called in reverse order to when Startup Module is FINISHED. This allows modules to reference dependencies in their Startup Module to ensure they are loaded, and be sure they will still be around in Shutdown Module.

    • HTTP Module now shuts down in Shutdown Module and not Pre Unload Callback.

    • Added comments to Module headers to indicate this new change in behavior.

    • Removed manual startup of HTTP module in Launch Engine Loop as it's no longer needed. This should save the module from being around if not really used by engine.

  • Bugfix: Many fixes to cooking complicated blueprints when s.EventDrivenLoaderEnabled is turned on.

  • Bugfix: Fixed a bug on 32-bit targets, some int64s could be aligned to 4 bytes and then passed into platform atomics functions. On apple platforms, those atomics functions can crash when passed in a non-8 byte aligned int64. Some explicit alignment has been added to those variables to 8 bytes.

    • Added some validation of the class index in exportmap entries. Stops the engine crashing when corrupt package data is encountered.

  • Bugfix: Fixed Cancel Async Loading crashes when EDL was enabled.

  • Bugfix: Fixed memory stomps in SSL certificate initialization.

  • Bugfix: Fixed wrong reporting of ever increasing STAT_TextureMemory and STAT_RenderTargetMemory numbers in memory profiler.

  • Changed the Segment Dist To Segment Safe function in FMath to handle the case where either (or both) of the input segments create points.

  • When CVar override is denied, current value of the CVar will be printed in the warning message for clarity.

  • Updated Generate Distill File Sets Commandlet so that it resolves string asset references after loading packages, to ensure that it finds all required files.

  • Updated Json Object Converter so that, by default, Struct To Json Attributes now skips transient properties.

  • Pak signing has been properly integrated with the new event driven loading system.

  • Added optimizations to the signature checking system so it is much faster.

  • AES encryption can now be configured for use with pak files, and has been integrated with the new event driven loader system.

  • bEncryptIniFiles=True can be added to your projects DefaultGame.ini to encrypt all ini files in the pak files.

  • Both AES encryption and pak signing are now configured from an Encryption.ini config hierarchy. See Config\DefaultEncryption.ini and Config\Windows\WindowsEncryption.ini in the ShooterGame sample project for an example of how to configure both encryption and pak signing.

  • Minor change to how bulk data is async loaded, allowing it to be freed correctly after first copy when requested.

  • Added some extra logging information to try and help catch a corrupt archive chunk crash seen in live builds.

  • Prevented reinstancing UEngine-derived objects on hot reload as this class is not reinstanceable.

  • Enabled full callstacks in non-monolithic builds by default.

  • Made Assemble Reference Token Stream thread safe for blueprints loaded on the async loading thread.

  • Pak platform file will now only be used if pak files exist regardless of command line params like -pak, -signedpak and -signed.

  • It is no longer necessary to rebuild the cooked exe to enable the Event Driven Loader. EDL and the new async IO are now controlled with ini settings only (through Project Settings). EDL can now be enabled in Blueprint only projects and binary distribution of the engine.

  • Event Driven Loader is now enabled by default.

Editor and Tools

  • New: Added to Sequence Recorder:

    • Optimize record transforms by setting all the keyframes at once.

    • Option to toggle removing redundant keyframes from the recorded tracks. This is on by default.

  • New: Improved search for matching Material on FBX mesh import. Added a "Search Location" dropdown in the Material Import Options to control how the search will be performed. When an imported mesh references a Material, the importer will search for a Material with the same name in the assets folders. The search is performed in the following order based on the "Search Location" setting:

    • "Local" option will behave as before with a non recursive search in the destination folder (e.g. in /Game/Content/Assets/MyImportFolder/ only).

    • "Under Parent" option performs a "Local" search first followed by a recursive search from the destination folder and a recursive search from the parent's folder (e.g. in /Game/Content/Assets/MyImportFolder/ and subfolders then in /Game/Content/Assets/ and subfolders).

    • "Under Root" option performs an "Under Parent" search first followed by a recursive search from the root folder (e.g. in /Game/ and subfolders).

    • "All Assets" option performs an "Under Root" search first, followed by a recursive search of every asset folder (e.g. in / and subfolders).

  • New: Users are now able to customize the Class Browser/Picker to filter out developer folders as well as hide internal use classes via INI settings.

    • ViewOptions button has been added to enable users to choose whether or not these filters are enabled. By default, internal only classes will be hidden and you will be limited to your own developer folder.

    • Go to Project Settings >Class Viewer >Class Visibility Management to customize the default classes and paths used by the filter.

  • New: Added new sorting options for Statistics Window so that it now sort columns based on types and texture dimensions.

  • New: You can now export Static Mesh LODs from the editor. This requires that the Static Mesh be in the Level and use the FIle > Export options.

  • New: The Gameplay Tags UI has been improved:

    • In the Project Settings window, Gameplay Tags will show up as a tree instead of as a list.

    • In the treeview, an Add Subtag button has been added to each tag that will add a new subtag in the same INI file.

    • Comments can now be attached to gameplay tags, and will show up in the tooltip for a tag.

    • Each tag has an options drop down menu that allows you to search for references to that tag. In the Project Settings window, the dropdown also has options to delete and rename tags.

    • When creating a new gameplay tag, you can specify what INI file it will be created in.

  • New: Added option to import an FBX with front X axis.

  • New: The FBX exporter can now export Bone Scale.

  • New: It's now possible to shift-drag (Camera follows the object being moved) an object in the Level Viewport and move the 3 axis at the same time (drag the center of the manipulator).

  • New: The FBX importer is now able to import LOD groups with the Combine Mesh option enabled.

  • New: Added a shortcut for the Merge Actor functionality to right-click Context menu on Actors inside of the Level Viewport.

  • New: FBX imports now support using Multi-Sub-Object Materials generated by 3DS Max to prevent importing unused Materials.

  • New: FBX now takes into account all scene conversion options that were set at import.

  • New: Added support for detail customizations on root structs.

  • New: Added the ability to set and retrieve a host tab manager from the details view.

  • New: Added the ability to extend default layouts.

  • New: Added "Plane" to the Basic Shapes category of the Modes window.

  • New: Added the ability to create groups within groups in the Details panel customizations.

  • New: Added the ability for struct customizations to add categories to the parent object in the details customization.

  • New: Added support in MallocProfiler2 program to use nm.exe to symbolicate callstacks for clang-based platforms that have nm.exe that can look up symbols. It is easy to subclass the base support for each platform.

  • BugFix: Fixed a crash when importing Skeletal Mesh FBX file that contain one or more materials or textures with the same name as the FBX filename.

  • BugFix: Fixed a crash in the details customizations when the asset picker is used without a property.

  • BugFix: Fixed a regression where motion blur was enabled in editor views.

  • BugFix: Fixed a crash when importing a FBX with some node containing unused materials.

  • BugFix: Fixed a crash on Editor close after VR Foliage editing.

  • BugFix: Fixed a crash when using the Editor while Simulating (SIE) with an Actor copied to the clipboard.

    • Affects Mac when navigating the Editor or simply updating the selection to an actor component.

    • Affects Windows when showing a menu containing a Paste option (for example the Edit menu in the main menu).

  • BugFix: Fixed a crash in the Curve editors when scaling to fit after resetting the curve to default.

  • BugFix: Fixed a crash when importing an FBX that does not contain any mesh.

  • BugFix: Fixed a crash when importing a Skeletal Mesh with no Material.

  • BugFix: Fixed a crash occurring when trying to merge meshes/actors with their lightmap UV index set to 0.

  • BugFix: Fixed a crash in the Texture editor when opening a texture that does not have a valid texture resource.

  • BugFix: Fixed the Output Log filter that was not updating when text was committed.

  • BugFix: Fixed an issue that prevented skipping of intro movies using the Default Game Movie Player by using a keyboard or gamepad input.

  • BugFix: Fixed an issue where the "IDE downloading" would remain open if the Add Code window was closed while the toast was active.

  • BugFix: Fixed the functionality to drag a folder and its sub-directories from the OS file system into the Content Browser.

  • BugFix: Static Mesh Component's Overridden Lightmap Resolution previously displayed the value it was set to, even when bOverrideLightMapRes is false. The behavior is to use Lightmap Resolution on the Static Mesh member instead when bOverrideLightMapRes is false. The UI was adjusted to reflect the more accurate behavior.

  • BugFix: The Build Settings will now be set properly when reimporting with different options.

  • BugFix: FBX Reimport of an asset that originally imported from a file containing multiple objects will reimport only the FBX content that match the selected asset in the Content Browser.

  • BugFix: The FBX importer now imports local (parented) and global (non-parented) sockets correctly.

  • BugFix: Fixed an issue where AssetPtrs/Asset IDs were not getting properly fixed up when renaming assets in the Editor.

  • BugFix: Changed the maximum LOD level for merging actors to 7. Previously this was set to 8, which was invalid.

  • BugFix: Material settings are now completely disabled in the Merge Actor tab when Material Merging is disabled.

  • BugFix: Fixed a situation in advanced preview scenes where hiding the environment would not apply to reflections.

  • BugFix: Fixed shadows being faceted/hardened in advanced preview scenes.

  • BugFix: Fixed Material and Vertice count issues with Skeletal and Static Mesh conversions.

  • BugFix: Fixed Full Scene Importer changing Actor mobility when reimporting.

  • BugFix: Fixed an XML Parser assert when parsing a root tag that completes on the same line.

  • BugFix: Fixed hidden black callstack text in the Crash Reporter Client.

  • BugFix: Fixed an issue with compressed.ddp not containing all the shaders needed to load up the Editor for the first time.

  • BugFix: Fixed an issue when collapsing all, hiding everything in the settings editors.

  • BugFix: Fixed stretched Landscape Editor Icons.

  • BugFix: Fixed an issue when opening new assets in a minimized window not restoring that window.

  • BugFix: Fixed a number of Keybindings problems:

    • Removed editor keybindings from Project Settings. It should not have been in there (already in Editor Preferences).

    • Removed duplicate registration of editor keybindings from Editor Preferences.

    • Fixed memory leak regenerating keybinding widgets when ending PIE world.

    • Cleaned up styling a bit to make keybindings widgets clearer.

  • BugFix: Fixed the menus in the Editor not appearing in certain preview builds of Windows 10.

  • BugFix: Import Commandlet Fixes:

    • Fixed a crash when the source control could not be contacted.

    • Fixed assets not importing correctly if they depended on other assets in a previous import group within the automated import.

  • BugFix: Fixed an issue with UGS with Perforce having a branch root with a lowercase drive letter. UBT Intermediate response files include path names and are case sensitive, so it's important that they are always consistent. Windows seems to always include a drive letter in uppercase.

  • BugFix: Fixed an issue with UGS where editor .target file being deleted when doing a content-only sync, causing a prompt to rebuilt the editor when trying to launch.

  • BugFix: Fixed an issue with UGS to ensure the project config file remains valid even if sync is aborted due to files needing resolve. This prevents user configuration from not being applied onto build steps.

  • BugFix: Fixed material assignment error when importing multiple mesh with Combine Mesh option enabled in the Import Options.

  • BugFix: Fixed an issue where rebuilding geometry for the current level would actually erroneously build dynamic brushes from all levels.

  • BugFix: Fixed an issue where UBT was not correctly passing quoted strings as defines to the code build environment for PS4 and Mac targets.

  • Reorganized the Post Process settings so they appear as categories in the parent and so that they have better categories to make it clear what all the settings do.

  • Added ability to UGS to use Ctrl + A to select all in the log window.

  • Added ability to UGS for Perforce Settings window, allowing users to set optional values for tuning Perforce performance on unreliable connections.

  • Changed installed plugins to be disabled by default, but display a notification in the editor the first you load a project with a new one. Installed plugins which are new to this project will be adorned with a "New!" badge in the plugin browser.

  • The cost of deleting hundreds of Actors simultaneously has been reduced by reorganizing how we check for Blueprint dependencies on the Actors.

  • Some of the plugin templates define Editor specific plugins. If created and a Standalone build is run, the application will attempt to link in editor libraries in game mode and will run into issues when you hit any key. The fix is to specify an Editor module description for these plugins.

  • The scrollbar will now remain at the bottom of the Output Log when a filter is specified.

  • Importing a Camera from an FBX will now create a Cinematic Camera with the specified focal length, field of view, and film back settings.

  • FBX Reimport now log messages in the message log window.

  • The FBX Reimport API now always returns false if there was some error when reimporting an asset.

  • FBX import now logs a message when there is too many bone influences on a vertex.

  • FBX files with multiple meshes with the same name is now supported.The importer will generate a number at the end of every mesh with a name clash.

  • Spline mesh actors in the Level Viewport can no longer be moved by transform gizmos in other viewports.

  • Clicking on a row in the Data Table editor before committing changes for the current row will now switch to that row after committing the changes.

  • Map properties that contain a struct as the value type are now editable when editing a component's properties in the asset editor.

  • The Color Picker will no longer stretch if a very long value is entered into a color component field.

  • The FBX Scene Reimport is now marking all reimported asset dirty.

  • The FBX importer is no longer using SkinXX workflow to import Static Meshes. It now uses the Material Name Slot workflow.

  • Changed how vertex colors are propagated when merging Spline Meshes using the Merge Actor functionality. This used to caused faceted vertex colors.

  • Now when painting, you won't be able to activate any other input other than the painting input.

  • Changed Panel Widget's Remove Child At function to not release slate resources if the child is a User Widget.

  • Near Clip Plane now adjusts to the user's scale to avoid clipping too early at small sizes.

  • Updated first include of Plugin Templates as Private PCH files were deleted.

  • Disabled "Convert to Static Mesh" option if only unsupported types are selected (e.g. Cable Components).

  • Level viewport 'show stats' option is now enabled by default, which avoids confusion with artists thinking lighting is built, when really the message is hidden.

  • Object's IsAsset function now returns false if the outermost package is RF_Transient as well. Also, updating the creation of the Transient Package to be RF_Transient. This makes it so transient packages created by sub-editors for things like previewing a streamed in level instance no longer show up in the Content Browser.

  • Made rebuilding lighting faster by importing lightmaps in multiple threads.

  • Added extra content to crash analytics and crash reports from the Editor.

  • Made an optimization to pasting multiple brushes, so that geometry is not constantly rebuilt for every brush that's added. This improves performance by a couple of orders of magnitude!

  • Editor creates a string representing user activity from the details of the currently active tab.

  • Editor user activity is sent as part of crash-related analytics and crash reports to give context.

Content Browser

  • New: Added a new View Option to the Content Browser for "View Plugin Content". Originally Engine and Game plugins were only shown when clicking Show Plugin Content, but this made it difficult given the number of Engine Plugins. The new View Plugin Content option makes this easier to locate. In order to see the Engine plugins you'll need both Engine Content and Plugin Content checkboxes enabled.

  • New: Added 'play/stop' button to sound wave thumbnail in Content Browser when you hover over the asset.

  • New: Added a setting to allow the Sources Panel to be expanded by default.

  • BugFix: Fixed text properties exported to asset tags displaying in their NSLOCTEXT form in the asset tooltips.

Foliage

  • New: New Foliage Tool Features:

    • A new painting mode was added to add a single foliage instance at a time.

    • Add the possibility to only paint in the current level.

  • New: Added the ability for Foliage LOD dithering to be disabled on a case-by-case basis by unchecking the "Dithered LOD Transition" checkbox in the foliage materials. Note that all materials used on all LODs need to have the checkbox checked in order for dithered LOD transitions to work.

  • BugFix: Fixed an issue where the Hierarchical Instanced Static Mesh Update Instance Transform Blueprint function was not updating bounds for instances that changed location.

  • BugFix: Fixed an issue with static lighting on Foliage and Instanced Static Meshes where the shadows on LOD levels other than LOD 0 was incorrect.

    • All sub-LODs must have the same lightmap UV layout as the base LOD.

    • There is currently a map check warning indicating this. This warning can be ignored if your sub-LOD lightmap UVs are set up appropriately.

  • LOD for Foliage and Hierarchical Instanced Static Mesh Components is now consistent with regular Static Meshes and uses a new screen size calculation.

Landscape

  • New: Added an eyedropper to select Flatten Height in the Flatten tool.

  • BugFix: Fixed a crash when trying to edit Landscape with r.LightPropagationVolume=1 enabled.

  • BugFix: Fixed a crash when changing Landscape LOD settings with the LandscapeGrass "Use Landscape Lightmap" option enabled.

  • BugFix: Fixed a crash when opening the Persistent level with a streaming level that was hidden in the Levels window, and that streaming level had previously been duplicated outside the editor and contained a Landscape.

  • BugFix: Fixed an issue where levels were unable to be saved after Landscape components with tessellation were moved to another level.

  • BugFix: Fixed an issue where negative LODBias on Landscape components was not having any effect.

Material Editor

  • New : Various Minor improvements:

    • Named each Parameter uniquely either from copy/paste of any creation.

    • Changed the default value for Scalar and Vector Parameter to 1 and (1, 1, 1, 1), respectively.

    • Added a Promote To Parameter when clicking on an Input pin that will generate proper node type based on type pin type.

    • When editing a color property update the Material Expression preview.

Persona

  • Removing LODs from Skeletal Meshes can now be undone.

Sequencer

  • New: Added current camera to Level Sequence Player Snapshot to allow any property to be displayed in the burn-in. Adjust Default Burn In to include a few more parameters like Focal Length and Focus Distance.

  • New: Added toggle to Movie Scene Capture to override Engine Scalability Settings to use Cinematic Scalability option.

  • New: Draw where the In and Out points of the show section are, just like sub-sequences do. Change to only draw the green starting line if Start Offset is negative.

  • New: General Options button menu has been refactored into Play Options and Select Options.

  • New: Added Select Sections in Selection Range and Select All in Selection Range.

  • New: Added hotkey, Ctrl + L, to toggle Camera Cut track to lock/unlock the camera.

  • New: Added the ability to copy/paste tracks in Sequencer.

  • New: Sequencer now shows the Camera Name in the Cinematic viewport.

  • New: Added the option in Sequencer to lock the playback ranger per movie scene.

  • New: Added the option in the Curve Editor to show time in frame numbers.

  • New: Added Minimum handle size for time slider scrubber.

  • New: Added menu options in Sequencer to reduce keys of all sections in the current Level Sequence.

  • New: Exposed Curve Editor settings to Editor Preferences.

  • New: Added the ability to trigger Events with parameters.

  • New: Added hotkey to Sequencer for the ability to restore all states that have been mutated by Sequencer by using Ctrl +R. See "Restore Animated State" button on the toolbar.

  • New: Added the ability to override bindings when playing back a Level Sequence on a Level Sequence Actor.

  • New: In Sequencer, added the ability to step to beginning.

  • BugFix: Fixed a crash caused when attempting to stop a Level Sequence player while it is being evaluated.

  • BugFix: Fixed a crash when there are multiple components to attach. Added a component selector when there are multiple components that have sockets to attach to. BugFix: Fixed the offsets that were created when moving multiple sections. The offsets were being created because section bounds were being generated for all sections except for the current section. Instead, they should be computed for all sections except for any that aren't being moved.

  • BugFix: Fixed an issue with export from Master Sequence not finding bound objects.

  • BugFix: Fixed an issue with Sequence Recorder to not update the current sequence name if it's already set. This fixes a bug where if you pass in a sequence name to record to, it gets reset to the name in the sequence recorder settings.

  • BugFix: Fixed an issue with Cinematic Camera to allow manual focus distance when focus smoothing is enabled.

  • BugFix: Fixed issues to allow for component keyframing.

  • BugFix: When converting Matinee to Level Sequence, fixed matinee 3D scale track conversion to Level Sequence.

  • BugFix: Fixed an issue with Cancel when doing a Save As so that it doesn't continue to save.

  • BugFix: Fixed some recorded components not being generated.

  • BugFix: Updated Sequencer to properly fire events once per loop.

  • BugFix: Teleport simulating components when moving them through the transform track. This fixes bugs with recording simulating actors (ie. vehicle game) where recorded actors don't playback with the recorded positions and there are warnings about attempting to move a fully simulated Skeletal Mesh.

  • BugFix: Fixed the play rate track interaction between servers and clients.

  • In the Curve Editor, Set Tangent to user when flattening or straightening tangents only when the tangent mode is auto and the interp mode is set to cubic.

  • Set Snap Time to Dragged Key on by default.

  • Set the paste keys time to the current time, rather than the mouse time.

  • Remove click to rename shot functionality in the shot thumbnail. Added rename shot to the Shot Context menu.

  • When converting Matinee to Level Sequencer you can set the default scale when converting matinee move tracks to sequencer.

  • Audio Start Time in Sequencer is now deprecated in favor of Start Offset which is an offset into the audio clip.

  • In Sequencer, the Spawnables are no longer destroyed when the cursor leaves the master playback range.

  • In Sequencer, Remove click to rename shot functionality in the Shot Thumbnail. Added a Rename Shot to the Shot Context menu.

Source Control

  • BugFix: Fixed source control to properly notify when files need to be checked out if a Blueprint node is dragged.

  • BugFix: Fixed an issue with saving a package that doesn't exist on disk but exists in P4 at a newer revision when the user chooses 'Mark Writable'.

  • The P4Changelist command line option is now respected by all Perforce operations that support it.

  • Subversion binaries should now support SASL authentication.

  • Integrated fix to support named changelists in SVN.

  • Git plugin: Multiline initial commit message and other connect screen cleanup.

Static Mesh Editor

  • New: Static Mesh LODs can not be removed without having a reduction tool (such as Simplygon) configured for use in the editor. Use the "Remove LOD" button under each LOD section or adjust the "Number of LODs" slider and hit Apply.

  • New: Added the possibility to copy/paste Material list, Material Item, Section List and Section Item to the Static Mesh Editor and Animation Tools Editors.

  • BugFix: Fixed a crash when KDOP collision generation fails and there are existing collision meshes selected. We no longer clear out unrelated collision primitives when KDOP generation fails.

  • BugFix: Added a guard against rendering crashes when a mesh with no LOD resources is opened in the editor.

  • BugFix: Fixed issues with the Static Mesh sockets on reimport. Socket transforms are now updated correctly and deleted sockets will be removed on reimport.

  • BugFix: Undoing a change in the Mesh Preview Scene viewer will now correctly update the changes in the scene viewport.

  • LODs other than LOD0 can now have a screen sizes greater than 1.

VR-Editor

  • Fixed difficulty with double-clicking with Oculus Touch.

World Browser

  • Disabled distance culling when rendering preview images for world composition. Otherwise images were missing culled objects.

World Outliner

  • BugFix: Prevented a crash due to duplicate items in the World Outliner if Actors somehow end up attached to themselves.

Gameplay Framework

  • New: Force Feedback Effects can now be previewed via the Content Browser.

  • New: Significance Manager plugin has been moved out of Experimental.

  • New: The Gameplay Abilities system has been moved into a plugin. It can be enabled in the Plugin settings, but it is still experimental.

  • New: Added the ability to override Crouch/Uncrouch status in Character Movement Component with Update Character State Before/After Movement.

    • Fixed issue where uncrouching while on top of a physics object would cause penetration and incorrect behavior.

  • New: Added Set Auto Activate Blueprint function to Set Auto Activate, which is safe to call from Construction Scripts.

  • New: The Gameplay Tags Editor module has been moved to a plugin, while the Gameplay Tags module is now part of the core engine. System internals and performance have been significantly improved.

    • Gameplay Tags can now be added directly from C++ code with AddNativeGameplayTag. Tags added this way do not need to exist in another ini or data table.

    • There is now a Gameplay Tags Project Setting page that allows editing all shared tag settings and managing existing tags.

    • It is now possible to Find Reference, Rename, and Delete tags from the tag management UI. Find Reference will only work on assets that have been resaved in 4.15.

    • Much of the existing C++ API for Gameplay Tags has been deprecated and replaced with a simpler API using Matches/Has or MatchesExact/HasExact. Some broken utility functions were removed.

  • New: Added two "virtual buttons", Virtual Accept and Virtual Back that should be used for your menus if you ever need to run on a platform where the Face Button Right is accept, not Face Button Bottom (i.e. Switch). Engine and Epic game code has been updated to use them.

  • New: LOD distances have been consolidated between Skeletal, Static and HLOD meshes.

  • BugFix: Avoid a crash when calling a Character's Set Replicate Movement when not on the Server.

  • BugFix: Fixed a crash when travelling between levels if an Always Loaded sub-level was hidden.

  • BugFix: The correct significance is now chosen when multiple viewpoints are in use.

  • BugFix: Tick functions that are disabled in a frame where they were scheduled to execute will now be prevented from executing.

  • BugFix: Blueprinted Level Sequence Actors will now correctly receive a tick event in their Blueprints.

  • BugFix: When modifying properties of an Actor during Simulate in Editor (SIE), Expose on Spawn properties will no longer be reset to class defaults.

  • BugFix: Player Camera is once again positioned correctly at the start of a level even if the game is immediately paused.

  • BugFix: Player Controllers are now kept in the same order when going through a seamless travel map transition, which fixes Get Player Controller calls.

  • BugFix: Fixed extra white space not being removed in front of console commands.

  • BugFix: Actors attached via the World Outliner to a Child Actor will now remain properly attached when making viewport changes.

  • BugFix: Fixed Game Mode Base's Get Game Session Class to return Game Session Class when set.

  • BugFix: Fixed an issue where Character Movement Component's "On Teleport" was improperly changing movement mode.

  • BugFix: Fixed an issue so that Volume Bounds no longer vanish after hot reloading custom trigger volume code.

  • BugFix: Fixed Project World To Screen Blueprint node to work for letterboxed viewports.

  • BugFix: Fixed an issue where Sound initiated via the Play/Spawn2D sound functions now correctly display subtitles.

  • BugFix: Setting the Max Draw Distance for a primitive component in a Blueprint Construction Script will now work as expected.

  • BugFix: Fixed an issue with Spline Mesh Components that would cause them to distort over long distances.

  • BugFix: Fixed the streaming pause rendering feature starting a movie even if a movie was already playing.

  • BugFix: Child Actors now properly get Begin Play called when spawned from the Begin Play of the Parent Actor.

  • BugFix: Fixed an issue that could result in duplicate Child Actors in uncooked Standalone games.

  • BugFix: Fixed Character Movement hanging on to a bad/penetrating floor check result and not continuing to check for a valid floor.

    • This only occurred if bAlwaysCheckFloor was set to false. This could, in rare situations, cause the character to continue to attempt to depenetrate an object far away from it until another floor check occurred. To prevent this, we now force a floor check after the depenetration.

  • Bugfix: Keys can no longer be added to read-only curves in curve tables.

  • Bugfix: Actor Component, Scene Component, and Primitive Component functions are flagged as "Unsafe During Actor Construction" where appropriate.

  • Bugfix: The correct socket is now always used when calculating the new world location for attached components.

  • Bugfix: When an actor/component is selected that has a Child Actor, the components of that Child Actor are now properly highlighted with the selection indicator.

  • Bugfix: Subclasses of AInfo will no longer display a warning when running commandlets about having a natively added scene component.

  • Begin Play will now be called in a consistent order, regardless of whether they were placed in the Persistent Level, a streamed level, or dynamically spawned.

  • Components are now properly removed from their Owner when manipulated through edit inline new properties.

  • Clicking on components of a Child Actor in a viewport will now select the related actor/component.

  • Incremental unregister component time and batch size can now be edited from the Project Settings > Engine > Streaming.

Localization

  • New : Line-break iterators will now avoid breaking words in Hangul.

    • The default behavior for wrapping Hangul is to use Western-style wrapping (where words are kept as-is) rather than East Asian-style (where words are broken by syllables).

    • This behavior can be controlled by the using the console variable "Localization.HangulTextWrappingMethod" in cases where the old behavior is needed, but since modern Hangul uses spaces, the per-word wrapping is preferred by native speakers.

  • New: Legacy-style translation collapsing is now optionally available at PO export time.

    • This mimics the old behavior of the localization pipeline prior to 4.14 (where identical text within the same namespace would be collapsed into a single entry for translation).

    • This can be enabled by setting "Localized Text Collapse Mode" to "ELocalizedTextCollapseMode::IdenticalNamespaceAndSource" (also available via the Localization Dashboard).

  • BugFix: Fixed a crash during IME shutdown.

  • BugFix: Fixed a selection bug in TSF based Microsoft IMEs on Windows 8+.

  • BugFix: Using FText's Format with an invalid argument no longer strips any associated argument modifier data from the resultant formatted text.

  • BugFix: Fixed an issue where IME composition could provide an invalid range if the text was changed while composing.

  • BugFix: Fixed localization gather including texts that were instanced or otherwise unchanged.

  • Updated User Defined Enum display names to use real FText instances so they can have stable keys.

    • This avoids the issue where the FText display names were cached from an FString, resulting in them having a different identity each time they were re-cached, which lead to localization and deterministic cooking issues.

  • The package localization ID is no longer considered significant for PO export/import.

    • This allows texts with identical identities in different packages to be translated as a single entity.

    • If you were reliant on the 4.14 behavior, you can set "Localized Text Collapse Mode" to ELocalizedTextCollapseMode::IdenticalPackageIdTextIdAndSource (also available via the Localization Dashboard).

Networking

  • New: MAX_ARRAY_SIZE and MAX_ARRAY_MEMORY from RepLayout are now user-configurable.

  • BugFix: Fixed an assert with "UPackageMapClient::AddNetFieldExportGroup" while viewing replays.

  • BugFix: Fixed edge cases/alternate IPv6 formats in IPAddressBSDIPv6's Set IP.

  • BugFix: Fixed OSSNull server/session filtering to better match Session Settings and online OSS. Made MCP, Steam, and Null LAN queries more consistent.

  • BugFix: Fixed an issue where movement would be disabled after possession of a pawn.

  • BugFix: Fixed a potential DDoS vulnerability.

  • BugFix: Fixed an issue that could cause replication conditions for properties to not be re-evaluated before saving those properties to replay checkpoints.

Other

  • New: Media Assets: Added support for quadraphonic audio sinks.

  • New: Media Assets: Added Blueprint functions to query width, height, and aspect ratio of Media Texture instances.

  • New: Media Assets: Exposed "Can Play Source" in Blueprints.

  • New: Media Assets: Moved media player implementation into reusable class; also moved overlay text handling into separate asset.

  • New: Media Assets: Allow pausing while buffering media.

  • New: Wmf Media: Added support for Motion JPG (.mjpg).

  • New: Wmf Media: Added support for non-RGB32 uncompressed formats.

  • New: Wmf Media: Added rudimentary H.265 HEVC support for Windows 10.

  • New: Wmf Media: There is now a progress bar showing while the media is being resolved.

  • New: Added for video framebuffers with horizontal and vertical padding.

  • New: Added "On Get On Screen Messages" delegate to Core Delegates. This delegate can return severity-categorized text messages to be displayed on screen.

  • BugFix: Wmf Media: Fixed a crash when attempting to play or seek with an uninitialized Media Player.

  • BugFix: Wmf Media: Fixed an issue with RGB32-encoded AVIs rendering upside-down and too bright.

  • BugFix: Wmf Media: Reworked fallback stride calculations to fix issues with some video formats.

  • BugFix: Media Player Editor: Media player selection is ignored if media specifies player overrides.

  • BugFix: Media Player Editor: Fixed successful attempts at opening media reporting failure in some cases.

  • BugFix: Media Player Editor: Fixed an issue to show desired player name instead of current player name if no media is loaded.

  • BugFix: Media Player Editor: Media Player asset is properly marked as dirty when creating a sound wave or texture for it.

  • BugFix: Media: Fixed NV21 conversion shader scaling.

  • BugFix: Media: Fixed NV12 and NV21 support.

  • BugFix: Fixed platform Media Source so that they work correctly in the editor and in other non-cooked use cases.

  • Removed most game thread and render thread dependencies from Media Framework (more to follow in 4.16).

  • Optimized media handling of RGB input.

  • Moved media related enumeration types into separate header file, so they can be shared.

  • Continued effort to implement subtitle tracks.

    • Media caption tracks were split into captions, subtitles, and generic text tracks.

    • Caption Sinks were renamed to Overlay Sinks.

  • Prevented the user from nesting a platform Media Source in another platform Media Source. There are also runtime guards against this situation in case it's created through code.

  • Prevented loading of media plugins in console apps, such as game servers.

  • Added better error message for when no suitable media player plugin was found.

  • Media Player Editor: Removed property buttons from Platform Media Source customization.

  • Wmf Media: Disabled plugin on Windows 10 because it is currently broken.

Physics

  • New: Added Hit Result output to Blueprint "Line Trace Component" function.

  • New: Added Debug Draw options (Trace Color, Trace Hit Color, and Draw Time) to shape traces for consistency with line traces.

  • New: Window properties are now editable at runtime on Wind Components.

  • BugFix: Fixed a crash when reimporting APEX destructibles from apb/x files caused by not allowing the renderer to flush destroy resource commands before emptying an array.

  • BugFix: Fixed a crash by removing collision between clothing and external Skeletal Mesh components, as clothing simulations could already be in flight and editing collisions while the simulation is running is not supported by APEX.

  • BugFix: Fixed a crash when generating clothing skinning data due to coplanar check triggering a check on small triangles.

  • BugFix: Fixed menu extenders in PhAT not being exposed correctly.

  • BugFix: Fixed edge cases in Body Instance where stale transforms were used when operations were run in Pre Physics.

  • BugFix: Fixed collision issues with Procedural Mesh Components that were created from Begin Play in cooked builds.

  • BugFix: Fixed non-uniform scaling of collision on meshes with rotated convex elements.

  • BugFix: Various thread-safety fixes to wind data. The components are tracked alongside their scene proxies so the game thread can safely access the wind data.

  • BugFix: Fixed welded bodies so that they now properly compute mass properties when attached bodies have a different physical material or mass override.

  • BugFix: Fixed an issue where collision shapes could be generated with multiple polygons making up a single flat face causing the body to jitter when resting on that face.

  • BugFix: Fixed an issue with line traces not working properly in editor worlds when physics substepping is enabled.

  • BugFix: Collision traces that start under a heightfields will now register properly with those heightfields.

  • BugFix: Fixed an issue where simulated bodies could have their transforms changed during simulations.

    • This is an invalid operation as it means the physics simulation and the user's input will conflict. The old behavior was that we would pick one in an undefined way. This resulted in subtle timing bugs. To prevent this, we now ignore the transform of simulating bodies in this small window during simulation and will ignore the user's input.

  • Replicated movement has been disabled for Actors that are welded to another physics object.

Platforms

Platform-specific release notes for PS4, XBoxOne, and Switch are available in the forums and UDN for approved console developers.

General

  • BugFix: Added Desktop Rect and Work Area to Monitor Info for desktop platforms. This is used to fix an issue in Scene Viewport where windowed fullscreen mode would be forced to the primary monitor, and incorrectly positioned on desktops where a taskbar/dock/etc. was on the left.

  • BugFix: Fixed support for the Optimize Code setting on Mac, HTML5, Android, Linux, iOS, and Xbox One. This controls optimization level in Debug Game configurations.

  • Changed how plugins will upgrade a project to be code-based. Instead of only upgrading some platforms, we now upgrade all to code-based. If only some are upgraded, the .uplugin file won't be staged, so the runtime won't know to disable the plugin that the project was trying to use. You can remove the platform from the whitelisted platforms in your .uproject's plugin list, instead of trying to disable the platform on a per-module basis inside the .uplugin file.

All Mobile

  • New: Added "Optional Mobile Features Blueprints" module that exposes sound volume, battery level, determining if headphones are plugged in, and on Android the system temperature.

  • New: Added a module that provides a common interface for mobile platforms to access GPS/location data in Blueprints.

  • BugFix: Fixed an issue where lighting build would not stick during the first editor session for a newly-created Mobile project set up as Scalable 2D/3D (which disabled the Mobile HDR setting).

  • BugFix: Fixed an issue where the Absolute World Position Material node with the "Excluding Shader Offset" flag set would return zero on ES2 devices.

Android

  • New: Added support for MadCatz C.T.R.L.R. controllers.

  • New: Added the ability to set element value with new text parameter for UPL .

  • New: Added new Project Setting "Use ExternalFilesDir for UE4Game Files". This will place all files into ExternalFilesDir for automatic cleanup on uninstall for distribution packages, if enabled.

  • New: Added a first pass at improved virtual keyboard for Android. This is an experimental feature.

    • Enabled by placing -NewKeyboard on the commandline, or setting IsUsingIntegratedKeyboard to a value greater than zero in AndroidPlatformTextField.cpp.

    • Currently does not deal with Slate editboxes covered by the keyboard; make sure you place your controls in a visible area.

  • BugFix: Fixed a crash on 1st generation Kindle tablets if loading Oculus libraries as part of a project.

  • BugFix: Fixed a crash that would occur if you changed the orientation of your device during the Splash screen on Android when set to Sensor Orientation.

  • BugFix: Fixed an issue to allow Android console command sender to work with ADB version 1.0.36.

  • BugFix: Fixed an issue when deploying an Android apk over wifi using Launch On.

  • BugFix: Fixed IWYU issues for Location Services plugins.

  • BugFix: Fixed x86 and x86_64 libpng libraries for Android.

  • BugFix: Corrected memory stats for Android so that it now works like Linux.

  • BugFix: Fixed handling of ETC2 filtering by Google Play Store (If only ETC2, require ES3.0+, but doesn't use texture filtering manifest).

  • BugFix: Fixed #includes in deferred Android OpenGL.

  • BugFix: Fixed a driver bug and using separate context for MediaPlayer14, which corrects some render state problems with the movie playback.

  • BugFix: Fixed some issues with cooking when sending "On Target Platform Changed Supported Formats" when format changes in Android Project Settings.

  • BugFix: Fixed deploy packagename to use Target Name instead of App Name.

  • BugFix: Fixed some warnings from TcpMessaging that appeared in the Editor session's log window when launching on Android.

  • BugFix: Fixed issues where most textures appeared black when running in Vulkan mode and packaged with ETC1 textures.

  • BugFix: Fixed issues with Mac and Linux install and uninstall scripts if ANDROID_HOME not set.

    • ES 3.0-capable devices which do not have floating point framebuffers and require the Mosaic HDR emulation mode are no longer limited to a resolution of 1024 pixels.

  • BugFix: Fixed the handling of numbers in input dialog for number fields, which now allow for sign and decimal.

  • Standardized the media track DisplayName in Android media player.

  • AndroidManifest now contains ES2.0 instead of 3.0 minimum when Multi and ETC2 and PVRTC selected and enabling all texture formats removes all restrictions.

HTML5

  • New: We now support Emscripten 1.36.13 with SSE2 fixes.

  • New: We now support Cook-On-The-Fly for HTML5 builds.

  • Bugfix: 404 now sends the required double newline after headers.

  • 32-bit Mobile HDR shaders have been removed from HTML5 because all major browsers support floating point render targets. This change reduces memory usage and content download size.

iOS

  • New: Added the console variable "rhi.Metal.SupportsIntermediateBackBuffer" to control whether to use an extra render-target so we can support screenshots & movie capture, or render directly to the back-buffers to save memory & GPU performance. Still defaults to ON for Mac & OFF for iOS/tvOS.

  • New: iOS Audio Improvements:

    • Audio data is streamed from disk instead of memory when the bStreaming flag is set on the source. (The experimental audio streaming flag must be enabled in the Editor Preferences > Experimental).

    • When not streaming from disk audio data is kept compressed in memory and decompressed on the fly as needed.

  • New: Support for iPhone 7 and iPhone 7 Plus has been added.

  • New: Exposed the bEnableRemoteNotificationsSupport ini setting in the iOS Project Settings.

  • BugFix: Fixed a crash on iOS Metal caused by trying to set texture-descriptor fields that aren't available on older versions of iOS.

  • BugFix: Fixed a crash in FMallocBinned Get Allocation Size on iOS 9 that can happen when making use of Apple's CFNetwork Library.

  • BugFix: Fixed a crash in "FMetaldynamicRHI::RHIAsyncReallocationTexture2D" for PVRTC2 textures.

  • BugFix: Fixed missing initialization for the Metal Texture Cache in Avf Video Sampler.

  • BugFix: Fixed code signing for projects with iCloud enabled.

  • BugFix: Fixed "Use Full Precision" Material flag on iOS, which had no effect when using Metal shaders.

  • BugFix: Fixed many issues with iOS push notifications (Xcode project fixes, entitlements files, etc).

  • BugFix: Fixed an issue where the wrong Launch Image is displayed during startup on iPad.

  • Removed 32-bit MobileHDR shaders from iOS, because all supported devices support 64-bit render targets. This change reduces package size and memory usage. These shaders had already been removed from Android, as its shaders are patched on required devices at startup.

Linux

  • New: It is now possible to launch your project on a remote Linux machine from the editor or UFE.

  • New: Updated bundled libc++ to 3.9.

  • New: DSOs can specify the mode (RTLD_GLOBAL/LOCAL) with which the engine will open them.

  • New: Added support for touch events (e.g. from a touchscreen).

  • New: Server will now crash the hung thread with SIGQUIT.

  • New: The engine will default to OpenGL 4.x code path on Linux unless -opengl3 is passed on command line.

  • New: All Linux targets will use binned malloc by default (previously some would use jemalloc).

  • New: Linux architecture (x86_64, ARM, etc) can now be set per project.

  • New: Added CEF support on Linux (x86_64 only).

  • New: Added prebuilt websockets library for Linux.

  • New: Added verbose printout whenever GL context's vblanc sync is being configured.

  • New: Linux remote devices added in editor's device manager will now be saved in Project Settings.

  • New: Linux touch events are filtered to prevent multiple OnTouchMoved events with the same location.

  • New: Added support for AArch64 (64-bit ARM) architecture.

  • New: Added build-essential to dependencies installed by Setup.sh so the engine can be built on Windows 10 Ubuntu subsystem.

  • BugFix: Fixed a crash when editing Skeletal Meshes on Linux.

  • BugFix: Fixed a crash on exit due to unsafe use of virtual functions in FRunnableThreadLinux.

  • BugFix: Fixed long-standing GL crash when using vertex attrib binding.

  • BugFix: Fixed a crash when opening Project Settings on Linux.

  • BugFix: The engine will not refuse to start as root on platforms other than x86_64 (e.g. ARM).

  • BugFix: Projects are now properly associated with the engine version or installation.

  • BugFix: Fixed GL4 rendering issues with tessellation.

  • BugFix: Fixed remote deploying of a packaged build to Linux.

  • BugFix: Fixed launch on a remote Linux machine.

  • BugFix: Fixed an issue for determining installed Linux cross-toolchain.

  • Bugfix: Use response files for ar (fixes cross-compilation failing due to too long command lines).

  • 4.15 will compile with clang 3.9.x with fewer suppressed warnings.

  • Disabled XGE when cross-compiling on Windows again (does not work well with clang 3.9).

  • Updated code which determines number of cores to produce the correct result on ARM boards.

  • Test configuration will drop core by default.

  • Removed hard-coded paths to mono binary and replaced it with a script.

  • "always_inline" is no longer applied to FORCEINLINE functions in debug builds.

  • Speed up bForceCompilationAtStartup=True when nothing changed.

  • Remove forced -windowed when launching from the editor.

  • Bootstrap script is now independent of the working directory and can be started via symlink.

  • Large mouse movement workaround will not be applied if the application has only one window.

  • SDL audio subsystem will no longer be initialized (it is not used anyway).

Mac

  • New: Experimental Metal EDR/HDR output support for Macs with HDR displays running 10.12 or later.

  • New: Disabled OpenGL support on Mac. -opengl command line param is now ignored, we always use Metal. On old Macs that do not support Metal we show a message saying that the app requires Metal and exit.

  • New: Added Mac support for the experimental Alembic importer plugin.

  • New: Changed "OS X" to "macOS" in few places where we display it and updated the code that asks users to update to latest version to check for 10.12.2, as this version is strongly recommended.

  • New: Implemented Info string in Avf Media for display in Media Player Editor.

  • BugFix: Fixed a rare crash in CoreAudio on quit.

  • BugFix: Fixed a crash caused by an attempt to use Global Play World Actions in Play World Commands before it is initialized when showing suppressible warning dialogs in Editor Engine's Update Auto Load Project.

  • BugFix: Fix a potential crash due to unnecessary reinitialisation of the MetalRenderPipelineDesc mutex.

  • BugFix: Fixed an intermittent crash caused by trying to record statistics on an unregistered thread in Mac Metal.

  • BugFix: Fixed a crash opening Skeletal Mesh assets on Mac caused by a bug in SSkeletonTreeView.

  • BugFix: Setup GPUSkinCache so that it can be enabled on Mac Metal without crashing, though rendering errors persist.

  • BugFix: Ensure that only Mac Metal compiles shaders that use Volumetric & Vertex-Shader-Layer rendering features, allowing 3D color look-up textures for the tone mapping to be used on Mac.

  • BugFix: Avoid a suspected bug in Nvidia's Metal driver that caused flickering tiles on screen by using the older tiled-reflections algorithm on Metal for now.

  • BugFix: Fixed an issue with Metal that meant updates to G8_sRGB textures could corrupt the texture data.

  • BugFix: Fixed an error in vertex-declaration handling for Metal that could result in corrupt particle rendering.

  • BugFix: Fixed a Metal validation error caused by using a GizmoMaterial in-game which wasn't configuring the compositing parameters correctly.

  • BugFix: Fixed incorrect rect initialization in Mac Get Display Metrics.

  • BugFix: Fixed an issue with HTTP. If-None-Match response code on Mac and iOS.

  • Changed the minimum supported macOS version setting in Info.plists to 10.11.6.

  • Changed the Mac-specific high DPI code to use system backing Scale Factor only if "NS High Resolution Capable" in Info.plist is set to true. This solves the problem with macOS Sierra giving us actual backing Scale Factor values even in low DPI modes.

  • Decreased the number of max open files for a thread on Apple platforms from 256 to 192 to leave more file descriptors to Cocoa. This will hopefully fix some rare, random crashes in Cocoa.

Windows

  • New: Windows XP support has been deprecated to allow the engine to use new Windows features that are not available when supporting Windows XP.

    • The option to set the minimum Windows version to Windows XP in the editor has been removed.

    • Code support for Windows XP will be removed in a future version.

    • A deprecation warning will be emitted from Unreal Build Tool if building with Windows XP.

  • BugFix: Fixed an issue that caused devices in the Device Manager window to display the wrong platform.

  • BugFix: Fixed an issue with Windows Media Player that would initialize the movie player texture on first frame regardless of whether or not the decoder has a sample ready. This prevents a white texture from showing up for a frame.

  • Moved the MfMedia plugin out of an XboxOne directory, because it works in Windows using public APIs (i.e. does not need to be hidden in an NDA'd directory).

  • Put the AllDesktop cooking target back in to Windows File | Package menu.

  • Disabled the GameExplorer startup checks on Windows Server edition because of rare crashes, and it's not a useful check on Server edition anyway.

Programming

  • New: Ensured that QAGameEditor can successfully be built as a monolithic executable.

  • New: Added error handling to symbol store uploading.

  • New: Added the command line option DisableUploadSymbols to disable symbol uploading.

  • Bugfix: Fixed custom pre-build and post-build steps being executed when generating project files.

  • Bugfix: Fixed invalid arguments being used to compile for .c files with Visual C++.

  • Removed direct dependency on LightPropagationVolumeRuntime plugin from DetailCustomizations module.

  • Removed duplicate dll names when preparing command line for link process.

  • GitDependencies no longer tries to clean working directory files that are excluded or ignored.

  • Compiler warnings for using undefined identifiers inside #if and #elif directives are now enabled.

Rendering

  • New: Added support for saving 32-bit EXR images when saving HDR frame captures.

  • New: Added "Force 128-bit buffers for rendering pipeline" to the High-res Screenshot tool UI which forces full 128bpp rendering and EXR capture.

    • This can be manually achieved with r.SceneColorFormat and r.PostProcessColorFormat.

  • New: Added support for texture streaming on Vulkan.

  • New: Vulkan now uses the glslang source from SDK 1.0.33.0.

  • New: Added support for global clip plane on Vulkan.

  • New: Changed some RHI Clear methods to Draw Clear Quad as some platforms can't support scissor/excluderect.

  • New: The View Matrices struct has been made immutable.

    • Direct access to the members has been replaced with getters.

  • New: Enable or Disable the Temporal AA jitter during the Custom Depth pass is a project setting now.

  • New: Complemented the ENQUEUE_RENDER_COMMAND macro with a debuggable Lambda version: EnqueueUniqueRenderCommand.

  • New: First step in making the Engine more Friendly for Pipeline State Objects.

    • We are now passing down 2 structs to collect state. Drawing Policy Render State collects state from the high level renderer down to Set Shared State, and Mesh Drawing Policy Override Settings collects state for Drawing Policy creation.

  • New: Improved memory usage and texture load order for texture streaming.

  • New: The texture streaming build can now be run through the resave package commandlet.

  • New: New way to synchronize with future and pending texture streaming requests.

  • New: Added "-FullscreenDisplay=N" commandline where 'N' will be the display index always used for fullscreen applications.

  • Bugfix: Fixed a crash when running the "RecompileShaders All" command.

  • Bugfix: Fixed a crash when using too many texture coordinate sets in a skeletal mesh material.

  • Bugfix: 16-bit images for all formats are no longer incorrectly flagged as sRGB on import. Existing content will be unaffected.

  • Bugfix: Fixed comments in Rendering Interface.

  • Bugfix: HLOD now respects the FreezeRendering command.

  • Bugfix: HLOD now correctly handles visibility across multiple views such as split-screen.

  • Bugfix: Fixed GPU skin cache getting disabled unless using recompute tangents. It is now always on.

  • Bugfix: Fixed missing velocity vectors due to depth fighting when using Pixel Depth Offset.

  • Bugfix: Fixed a case where rainbow-like artifacts would appear in the editor caused by uncleared post-process buffers.

  • Bugfix: Fixed incorrect cubemap size displayed in the texture editor.

  • Bugfix: Fixed fog opacity on alpha composited material.

  • Bugfix: Fixed a corrupt texture bug in the Download Image blueprint node, on some platforms.

    • The new Download Image blueprint node returns a Texture 2D Dynamic, rather than a Texture 2D. It may be necessary to reauthor blueprint/code which uses this node to support the change in return type.

  • Exposed API for Material Expression Noise and Material Expression Vector Noise.

  • Re-enabled Temporal AA for high-res screenshots as long as the frame delay is active (r.HighResScreenshotDelay).

  • Improved error and exit codes when failing to find a good Vulkan driver/version.

  • Prevented Drop Detail settings from triggering when using fixed framerate.

  • The Film Tonemapper (r.TonemapperFilm=1) and DBuffer Decal (r.DBuffer=1) support have been enabled by default for new projects.

    • These settings can be reverted via project settings and the related cvars.

    • Bloom defaults have also been tweaked to match the new look.

  • Scene Capture 2D can specify a global clip plane, which is useful for portals. This requires the global clip plane project setting to be enabled.

  • Removed Mac Graphics Switching plugin. OpenGL is not supported and Metal currently cannot do live GPU selection.

FX

  • New: Exposed velocity scaling to vertex/surface particles, matching bone/socket particle behavior.

  • Now exporting Particle Module, Particle Module Color Base and Particle Module Color to allow users to inherit from them and create their own modules.

Lighting

  • New: Added Inscattering Texture controls to Exponential Height Fog.

  • New: Added Fog Cutoff Distance, so artists can prevent fog on skyboxes (requires fog to be setup matching the fog that was rendered into the sky texture so that distant mountains match).

  • Bugfix: Fixed crash when using overly big lightmaps.

  • Bugfix: Fixed shadowmap channel assignment for stationary lights which are not in a lighting scenario level, when a lighting scenario level is present.

  • Bugfix: Fixed indirect lighting color on post process volumes.

  • Bugfix: Fixed contact shadow primitives thickness assumption from the depth buffer causing screen space shadow bleeding artifacts.

  • Bugfix: Prevented a large shadow depth bias due to low resolution causing near plane clipping.

  • Level packages are now marked dirty when manually forcing all reflection captures to update allowing the data to be saved correctly.

  • Dynamic Indirect Shadows for static meshes using distance fields.

    • Individual Static Mesh assets can enable Generate Mesh Distance Field to compute a distance field, without the memory cost of enabling for the whole project.

    • New Static Mesh Component properties Cast Dynamic Indirect Shadow and Dynamic Indirect Shadow Min Visibility.

    • New World Settings property Dynamic Indirect Shadows Self Shadowing Intensity which replaces the cvar.

    • Added Shadow Resolution Scale to Light Component.

  • Support for Reflection Capture intensity with simple reflections, which are the default with Forward Shading.

  • Volume lighting samples are allowed outside of the importance volume if their influence affects the volume. Fixes black indirect lighting on movable components in maps with small importance volumes. Volume lighting samples placed on surfaces use a radius that covers the layer height spacing, which prevents an uncovered region between layers.

  • When Inscattering Color Cubemap is specified, directional light inscattering is disabled.

  • Lerps between 1x1 mip at Non Directional Inscattering Color Distance to mip 0 at Fully Directional Inscattering Color Distance.

  • Improved deferred shadowing with MSAA by upsampling light attenuation intelligently in the base pass.

  • Forward renderer now supports shadowing from movable lights and light functions.

    • Only 4 shadow casting movable or stationary lights can overlap at any point in space, otherwise the movable lights will lose their shadows and an on-screen message will be displayed.

    • Light functions only work on shadow casting lights since they need a shadowmap channel to be assigned.

  • Shader complexity with Forward Shading more closely matches Deferred.

Materials

  • New: Various requested material nodes have been added in this release.

    • Input: Pre-skinned Local Normal.

    • Math: Trigonometry, Fast (approximate) Trigonometry, Saturate, Round, Truncate.

  • New: Added Pseudo Volume Texture shader helper function for custom material nodes packing 3D textures or flipbooks into a 2D texture.

  • Bugfix: Fixed a rare crash when updating base properties of a material instance in an instance hierarchy.

  • Bugfix: Fixed potential crash when changing blend mode on a material instance.

  • Bugfix: Fixed incorrect shader complexity output for masked materials when enabling DBuffer decals.

  • Bugfix: Fixed low quality textures on grass.

  • Bugfix: Fixed POM function so that the world aligned mode works on slanted floors, by building a tangent basis using the vertex normal.

  • Bugfix: Fixed Actor Position, Pixel Normal WS material expressions for decals.

  • By default the material editor now shows the full instruction count for materials to avoid inconsistencies linked to how a material is updated.

    • In general the numbers shown may be higher but this is not a performance regression, only reporting the actual figures used.

  • Added missing material expression tooltips/keywords for new nodes based on 4.15 preview feedback.

Mobile Rendering

  • New: Added a project option to specify the maximum number of CSM shadow cascades that can be rendered by a movable light.

  • New: iOS devices that use Metal API will now use hardware sRGB texture sampling.

  • New: Android projects can now be packaged with Mali Graphics Debugger or Adreno Profiler support. The option can be found in Project Settings -> Android. This allows you to debug rendering issues on device using vendor specific tools.

  • New: Added mobile renderer support for single sample shadow from stationary lights.

  • Bugfix: Fixed rare bug that resulted in crash on some Android devices in the Set Uniform Buffer Parameter function.

  • Bugfix: Fixed bug which could cause 2D translucent elements to render as opaque on android devices which do not support fp16 rendering.

  • Bugfix: Fixed a bug which could prevent translucent primitives rendering when mobile HDR is disabled and modulated shadows are in use.

  • Bugfix: Fixed missing selection outline in Editor Mobile Preview.

  • Bugfix: Fixed an issue preventing GPU particles from being correctly rendered on compatible devices in both LDR and HDR modes.

  • Bugfix: Fixed inverted shadow culling when rendering CSM shadow depths and mobile HDR is disabled.

  • Bugfix: Fixed issue that could cause blank scene captures on devices that use 32 bit HDR encoding.

  • Bugfix: Fixed brightness issues with some UMG elements in Editor mobile preview.

  • Generating GLSL shaders for ES2 should be a bit shorter now.

  • Disabled dynamic buffer discarding on Adreno330 based devices. This was causing ~10ms stalls on UI rendering.

  • Splitscreen multiplayer should now correctly render all views in LDR and HDR modes.

  • Do not initialize Minimal Dummy Forward Lighting Resources for unneeded feature levels (below SM4).

  • Moved high-end mobile preview mode out from experimental, added iOS Metal, ES3.1 and Vulkan quality level preview options.

Optimizations

  • New: Added texture streaming data in material for each used texture.

  • New: Optimized the async texture streaming task.

  • New: Iterative level processing to prevent stalls in the texture streaming manager.

  • New: New required texture resolution viewmode.

  • New: AMD cards on GCN architecture can now take advantage of the Depth Bounds Test optimization.

  • Precomputed shadowmaps no longer enable Force 2 To 1 Aspect, which is only needed for lightmaps, and saves some shadowmap memory.

  • Laptops with discrete AMD GPUs will now select the discrete video cards instead of the integrated.

Postprocessing

  • New: Added new options for higher-quality upsampling when using screen percentage reduction. New modes are controlled by changing r.Upsample.Quality.

  • New: Better quality Temporal AA:

    • Fix for correct edge gradients.

    • Image slightly sharper and less aliased.

    • Fixed and enabled antighosting for dynamic objects.

  • Bugfix: Fixed output description extent for upscaling post process pass.

  • Bugfix: Fixed a case where scene buffer and viewport sizes mismatched on lower screen percentages causing post processing artifacts.

UI

  • New: Adding support for Material Parameter Collections to Slate UI objects.

  • New: Added category info to VR Editor User Widgets to improve organization.

  • Bugfix: Fixed a potential race-condition where a Font object could be GC'd while the loading screen was using the font cache.

  • UWidget is now Blueprintable to allow users to create data only blueprints to adjust the CDO values of the basic UWidget types.

Slate

  • New: Improved Canvas Panel render performance by improving batching behavior.

    • Added option to place canvas panel children in same layer using explicit ZOrder setting.

    • Previous behavior placing all children in separate layers is still default.

    • Affects Constraint Canvas in Slate.

    • Affects Canvas Panel in UMG.

  • Bugfix: Fixed a crash while updating cursor highlight.

  • Bugfix: Fixed a bug where Num Characters In Glyph was set incorrectly for TAB characters.

  • Bugfix: Fixed pixel jitter in Slate menus.

    • Mostly seen in Mac version of the Editor.

  • SWindow now restores focus back to the widget that last had focus when the window was deactivated.

  • Made it so explicitly focusing a slate user that does not yet exist, creates the slate user so that the state is properly maintained in preparation for that user's arrival / input.

  • The Ignore Incoming Scale option for the scale box should now behave as expected in more cases.

  • Get Relative Layout Scale has been modified to also pass down the prepass scale, otherwise it can't extract out the incoming scale ahead of time before text is measured.

  • Added very verbose Slate stats behind a compiler flag to avoid the large overhead of these stats. To enable them you will need to set WITH_VERY_VERBOSE_SLATE_STATS to 1. In order to get indepth Slate stats (with a lot of overhead) you run the console commands:

    • stat group enable slateverbose

    • stat group enable slateveryverbose

    • stat dumpave -root=stat_slate -num=120 -ms=0

  • Exposed a cached version of the widget geometry that comes in during Tick, this data has also been made available from blueprints through the Widget interface. Also made an optimization pass on the class to make some space for the geometry object.

UMG

  • New: UMG: Expose label browser for UMG.

  • New: Combo box widgets now support keyboard focus.

  • Bugfix: Fixed the calculation for widget components screen position if the camera aspect is constrained.

  • Bugfix: Fixed some HDPI mode problems with widget position calculation when projecting world to viewport / screen, and other absolute space related transforms.

  • Bugfix: Fixed a bug in the widget traversing code in sequencer; widgets inside of Named Slots should now be animatable.

  • Bugfix: Fixed some issues with HDPI mode in the widget designer.

  • Bugfix: Fixed the web browser widget crashing on Android when packaged for Distribution.

  • Widget Blueprints that are saved without a root widget will no longer add a Canvas Panel widget when opened in the editor.

  • The Widget Hierarchy will now remember which nodes have been collapsed when moving or renaming widgets.

  • Widget Blueprints will no longer experience compile issues when moving a widget from one Widget Hierarchy to another.

  • Dynamically changing the style for an editable text box or a multiline editable text box from Blueprints will now update it correctly.

  • Space and Enter will now fire OnClicked events for focused buttons.

  • Deleting widgets from the Widget Blueprint Hierarchy will no longer scroll the hierarchy view back to the top.

  • Widget Interaction Components now default to tick while the game is paused. Widget components that do not tick while the game is paused can no longer be interacted with when the game is paused.

  • Spin boxes can now be spun correctly when simulating touch events with the mouse.

  • When playing an animation, the first frame of the sequence is now immediately evaluated instead of waiting for the next tick.

  • Widget Component's Draw At Desired size property now should also work correctly if the widget is in screenspace.

  • We no longer also take the platform DPI scale (used for HDPI) into account when applying UMG's UI scale. Since UMG already provides a DPI scaling system, compounding it with the native OSes produces undesirable results, since the DPI scale curve does not take into account some unknown platform scale set by a user.

  • Restored the ability of the Widget Component to directly receive hardware input. The Widget Interaction Component is great for just about every interaction use case - the one it is not is when you actually want the 3D widgets to take focus, and to be able to be typed directly into by the user. The kind of situation where you might want to use them as a 3D menu, in a non-VR environment. By default - Widget Components will not behave in this manner, but you can now use the option Receive Hardware Input to enable the ability for Widget Components to function more like a widget in the screenspace of the viewport.

VR

  • New: Updated the GoogleVR SDK to version 1.01.

  • New: Exposed "Is HMD Connected" to blueprint. This means that HMD hardware is ready to use. UE4 may or may not be using the HMD now.

  • Bugfix: Fixed rendering of Canvas tiles in stereo mode to be rendered for both eyes. This fixes the rendering of the background behind various stats shown by the STAT console command.

  • Bugfix: Fixed threading issue on Oculus Touch controllers, which could cause jittering in some circumstances.

  • Bugfix: Fixed an assertion when using Oculus stereo layers with MSAA, due to binding an unresolved depth surface.

  • New: Added analytics event to Vive HMD initialization.

  • New: Updating Oculus SDKs

    • Oculus PC SDK 1.10.0

    • Mobile SDK 1.0.3

    • Audio SDK 1.0.2

    • Platform SDK 1.10.0

  • Added a missing render target clear when using a VR hidden area mask and a post processing material.

  • Added in a new CVar vr.SteamVR.UsePostPresentHandoff, which defaults to 0. When set to 0, we do NOT use the SteamVR Post Present Handoff, which costs some performance GPU time. When 1, we use the call, and get some extra GPU performance. However, this call is NOT safe for scenes that have frame-behind GPU work, like Scene Capture components and Widget Components.

    • For users that were using 4.14.1, and seeing a GPU timing improvement, that behavior is now off by default. You can re-enable it by setting vr.SteamVR.UsePostPresentHandoff on your project to get it back. Be aware that SceneCaptureComponents or WidgetComponents may cause async reprojection in SteamVR to fail in that case.

Programming Release Notes

AI

Navigation

  • Added a sanity check to UNavigationSystem::AddElementToNavOctree to guard against DirtyElement.NavInterface being null.

Animation

Skeletal Mesh

  • New: Stopped SkeletalMeshTypes.h being globally included.

  • New: Refactored SkeletalMesh to use same color buffer class as StaticMesh.

  • New: Moved SkeletalMesh skin weights into their own vertex stream.

    • If you were accessing skin weights in VertexBufferGPUSkin, you will now need to use SkinWeightVertexBuffer instead.

  • New: Moved SkeletalMeshComponent and SkinnedMeshComponent functions out of SkeletalMesh.cpp and into correct cpp files.

  • New: Moved SkeletalMeshActor code into its own cpp file.

  • Bugfix: Fixed bug with position offset in skeletal mesh vertex buffer when using high precision UVs.

Tools

  • New: Removed hard-coded asset-to-animnode mapping, added SupportsAssetClass virtual instead.

Blueprints

  • New: Added UK2Node::ConvertDeprecatedNode which can be used to convert deprecated native blueprint nodes into something else. Fixed several related issues with pin migration.

  • Bugfix: Fixed weak references stored in blueprint pins so that they are correctly detected when determining which assets reference other assets.

  • Included K2Node_BaseAsyncAction.h in K2Node_AsyncAction.h to fix a compile issue.

  • No longer enforcing that game project UFUNCTIONS() have a category.

  • Removed support for packaging editor-only Blueprint data in cooked assets (specifically removed all "[EditoronlyBP]" ini settings).

  • Fixed a crash that would occur when using the Blueprint Profiler with InputKeyEvents.

Core

  • New: Added a warning when a thread-specific pak file reader is used on the wrong thread. This is unsafe, and it can lead to difficult-to-reproduce race conditions.

  • New: Added a default constructor to TTuple which value-initializes its elements.

  • New: Added PUSH_MACRO() and POP_MACRO() macros for preserving and restoring the state of a macro definition.

  • New: Added FCString::Strtoi64() for converting a string to a 64-bit signed integer.

  • New: Added a THasInserterOperator metafunction for testing if a left-shift operator exists between two types.

  • New: Added GET_ENUMERATOR_NAME_CHECKED for returning an enumerator name as a string while statically verifying that the enumerator name is a valid entry in the enum.

  • New: Added aliasing constructors to TSharedPtr and TSharedRef, which allow pointers to subobjects, keeping the outer object referenced.

  • New: Deprecated some core functions:

    • Deprecated GetUniqueDeviceId. Use GetDeviceId now instead.

    • Deprecated all platform independent usages of GetMacAddress and related functions. It was not reliable the way it was implemented on PC, and generally a bad idea.

    • Deprecated GetMachineId. Use GetLoginId now instead. That's what it really was.

  • New: Added debugger visualizer support for delegates.

  • New: Added an error report when deserializing a bool which isn't 0 or 1, which means archive corruption.

  • New: Added UEnumProperty which supports non-byte enum classes.

    • Enum class properties will now be UEnumProperties instead of UEnums.

  • New: You can now hook delegates to be informed when new classes have been added or replaced via hotreload.

  • New: TArray now has InsertDefaulted to complement AddDefaulted.

  • New: SearchableNameMap has been added to the Linker and Asset Registry, and is used to find Gameplay Tag and Data Table Row references inside assets.

    • If you have your own system of "special names" you can add those names to this map with MarkSearchableName

  • New: Added FGCObjectScopeGuard and TStrongObjectPtr as a convenient way to keep a UObject alive without having to add it to the root-set

    • Both use FGCObject internally to reference the object and keep it alive.

    • FGCObjectScopeGuard is designed to be lean and used as a guard for an existing pointer, whereas TStrongObjectPtr is more "full-fat" and designed to be a replacement for a raw-pointer.

    • Of the two, you should prefer FGCObjectScopeGuard where possible. Also note that TStrongObjectPtr isn't supported by UHT/UPROPERTY as you should just use a raw-pointer in that case (it would do the same thing).

  • Bugfix: Fixed Algo::IsSorted() to work with C arrays and initializer_lists.

  • Bugfix: Fixed MallocStomp to always allocate at least one byte instead of returning null.

  • Bugfix: Fixed TSparseArray::Reserve so that new elements get allocated earlier in memory instead of later, giving the more expected iteration order.

  • Bugfix: Fixed some bad memory allocation semantics (e.g. mixing FMemory::Malloc and delete).

  • Bugfix: Fixed the TIsZeroConstructType specialization for TScriptDelegate.

  • Bugfix: Fixed UObject::IsA crash when reinstancing blueprints.

  • Bugfix: Fixed typo in FMallocLeakDetection.

  • Bugfix: Fixed FArchive::bCustomVersionsAreReset not being copied when the archive is copied.

  • Bugfix: Fixed race condition crash when serializing UClasses.

  • Bugfix: Fixed it so calling CreateDefaultSubobject with the bTransient=true flag correctly sets the Transient Object Flag on the created object.

  • Bugfix: Fixed several cooking issues with editor-only components and sub objects.

  • Bugfix: Fixed TSparseArray debugger visualization of types smaller than 8 bytes.

  • Bugfix: Fixed parsing of standalone macros like PRAGMA_DISABLE_DEPRECATION_WARNINGS in UnrealHeaderTool.

  • Bugfix: Fixed a memory leak in the task graph.

  • Bugfix: Fixed a regression causing an assert to fire in the editor related to UGCObjectReferencer.

  • Bugfix: Fixed a very old bug with lock free lists, probably not relevant to anything we currently use.

  • Bugfix: Fixed return value of Ar.Tell() being assigned to int32 instead of int64.

  • Bugfix: Added a thread safety fix for UBlueprintGeneratedClass::PostLoadDefaultObject while UBlueprintGeneratedClass::SerializeDefaultObject runs on the async loading thread.

  • Clarified the error message emitted when binding a delegate to a pending kill object.

  • Deprecated TAutoPointer.

  • Deprecated TScopedPointer.

  • Deprecated TAutoPtr.

  • Made TFunction::Unset protected. This is an implementation-only function which doesn't properly destroy the binding (can leak memory).

  • Deprecated the use of TEnumAsByte with enum classes.

  • Improved comments and added useful utility functions to FAssetPtr, TAssetSubclassOf, and TSubclassOf.

  • Shortened LexicalConversion namespace to Lex.

    • LexicalConversion is now an alias for namespace Lex, so cannot have overloads added to it.

  • Added some extra safety to FEvent by proxying them avoid bugs with stale events.

  • Made FindShaderResourceById and FindShaderById return a raw pointer instead of TRefCountPtr to prevent creating temporary TRefCountPtrs. It is no longer necessary to use TRefCountPtrs as shader serialization has changed and shaders are no longer registered on the async loading thread.

  • Added multiple thread safety checks to async loading code.

  • Thread Heartbeat will no longer report the same hang multiple times.

  • Async Loading code will now detach the linker when resetting async package loader to avoid situations when loading the same asset multiple times results in the following load request finding the old linker after the package has been loading but the async package hasn't been deleted yet (async package for the old request in limbo state but linker exists).

  • ModuleManager will now use a critical section instead of FMultiReaderSingleWriterGT to make it thread safe.

    • Removed FMultiReaderSingleWriterGT because it was not fully thread safe.

  • Async Loading stability improvements:

    • Made sure all package dependencies are loaded before post loading its objects

    • Added more Linker detach safety checks

Editor and Tools

  • New: Added extension point for level editor viewport Show menu.

  • New: Added support for "Show Only Modified Properties" filter to DetailWidgetRow.

  • New: FPropertyRestriction has been restructured to differentiate between hidden and disabled properties.

    • AddValue and IsValueRestricted no longer exist, use either AddHiddenValue and IsValueHidden, or AddDisabledValue and IsValueDisabled as appropriate.

  • Bugfix: Fixed several issues with using the SettingsEditor to modify new module-specific ini files.

Gameplay Framework

  • New: AActor::GetComponents can now optionally choose to include components in Actors created via its ChildActorComponents.

  • New: Systems can now register console autocompletions without modifying an ini by registering a delegate with UConsole::RegisterConsoleAutoCompleteEntries.

  • New: UActorComponent subclasses can now override IsReadyForOwnerToAutoDestroy() to indicate to the owning Actor whether they can begin auto destroying if desired.

  • Bugfix: Fixed a crash when player is destroyed and the server checks to see if it needs to force a network update.

  • Bugfix: Fixed a crash that could occur when loading streaming levels via the PrepareMapChange and CommitMapChange functions.

  • AActor::BeginPlay virtual function is now protected and has a dispatching function instead.

  • Adding a new volume class via hotreload now allows that volume to be properly added to the world. Volume classes that are modified by hotreload will remain visualized.

  • Added IsPaused to GameModeBase now that the pausers array is protected.

  • AActor's GetAttachParentActor, GetAttachParentSocketName, and GetAttachedActors functions are no longer inappropriately marked virtual.

    • Any class overriding GetAttachParentActor, GetAttachParentSocketName, or GetAttachedActors will need to be refactored to accomplish the intended functionality.

  • FAttenuationSettings has been renamed FSoundAttenuationSettings.

  • Optimized and cleaned up some Actor methods related to location and rotation.

    • Inlined GetActorForwardVector(), GetActorUpVector(), GetActorRightVector(). Wrapped them to simply call the methods on USceneComponent rather than using a different approach to computing these vectors.

    • Inlined blueprint versions: K2_GetActorLocation(), K2_GetActorRotation(), K2_GetRootComponent().

    • Cleaned up template methods that are used to delay compilation of USceneComponent calls to make them private and prefix "Template" to their names so they don't show up in autocomplete for calls to the public methods.

Networking

  • Bugfix: Fixed overflow issues in SerializeProperties_DynamicArray_r. Also, fixed a crash from not ensuring properties were serialized successfully.

  • Added an experimental feature for game clients that are recording network replays to do the per-frame recording work on a task thread in parallel with the Slate tick. If Slate is a significant portion of frame time, and client replays are being recorded, this can save a lot of game thread time each frame.

    • Use the console variables tick.DoAsyncEndOfFrameTasks and demo.ClientRecordAsyncEndOfFrame to enable this feature.

Other

  • New: CrashReportProcess crash report backend update:

    • InvalidCrashReports now saved to S3 instead of local folder.

    • Removed option to sync MinidumpDiagnostics from Perforce.

    • Moved MinidumpDiagnostics from old Perforce synched location to its own folder.

    • Added improved logging to Slack with option to monitor MDD performance.

    • Added hourly log folder bins to MDD logs to avoid bloated folders and associated performance issues.

    • Added support for types of crashes we don't want to symbolicate (using it to skip callstack gen for hang detected ensures).

    • CRP now has improved handling of lost comms with website/DB.

    • Crash reports will not be lost.

    • Added compression support for crash files output from CRP to S3.

  • Improved MinidumpDiagnostics performance for use on the CR server by CrashReportProcess.

Physics

  • Bugfix: Fixed FVehicleAnimInstanceProxy::PreUpdate not calling FAnimInstanceProxy::PreUpdate.

  • Added sanitization code around PhysX flags and refactored the ways flags are managed through a single code path.

Platforms

  • New: Both RTTI and Exceptions can be enabled. The "Use RTTI" and "Enable Exceptions" flags, respectively, must be set to true in the Module.Build.cs file and in the build configuration file as well.

  • Made a generalized "growable heap" allocator that had previously been copied and pasted between RHIs. This is a heap allocator that allocates in large chunks, and then suballocates from within (often with large alignment). Mainly meant for GPU resource memory allocations, but can be used in other circumstances. To use it, you simply implement four easy functions (for creating the memory and other reasons). Allows for more than just a raw pointer to be the result of an allocation.

HTML5

  • New: Added HTML5 thirdparty libraries build scripts in python.

  • New: Updated HTML5 thirdparty libraries (bash) build scripts to make use of new toolchain version.

  • Bugfix: Fixed PhysX for HTML5 crash. Removed 32-bit sized unions when browser floats are 64-bits.

iOS

  • New: Added an iOS-specific implementation of the LocationServices plugin.

Linux

  • New: Added helper build scripts.

    • Pull source and compile: zlib, openssl, libcurl, and libwebsockets.

    • Dockerfile to setup "CentOS 7" environment (GLibC 2.17 and GCC 4.8.5)

Mac

  • New: Extended the internal Metal debugging options for MetalRHI:

    • Added rhi.Metal.BufferScribble, which will fill freed buffer regions with 0xCD to help identify any areas where we are writing to a buffer while it is still being processed on the GPU.

    • Added rhi.Metal.BufferZeroFill, which will zero-fill newly allocated buffer regions before any other data is read/written. Useful for catching cases where we might be reading uninitialised memory.

    • Added rhi.Metal.ResourcePurgeOnDelete, which will purge the backing store of resources prior to releasing them back to the system or the appropriate pool.

    • Added rhi.Metal.ResourceDeferDeleteNumFrames to defer releasing resources to the system or the resource pool by the specified number of frames (in addition to the current policy of waiting for the current end of frame & command-buffer completion). Useful for tracking down resource lifetime errors.

    • Fixed the flickering geometry when enabling rhi.Metal.RuntimeDebugLevel=4 which breaks render passes into separate command-buffers - the occlusion query was waiting on the wrong command buffer in this case.

  • New: Extended the Metal state recording when rhi.Metal.RuntimeDebugLevel is set to 3 or greater to include the objects and states used.

    • The object labels, types, and descriptions will be printed on failure. If the object is deleted prior to this, we have a lifetime error and it will crash at this point and can be debugged further using our -metalretainrefs command-line option or Xcode's zombie-objects.

  • Extended FShaderResource's OptionalData field to allow arbitrary amounts of data so that Metal shader debug information can be stored in it.

  • Redundant state changes in MetalRHI are optimized out.

  • Changed FAppleHttpResponse::GetContentLength to return expected content size instead of payload size, so it is consistent with other implementations.

  • Do not try to use installed Mono 4.6 on Mac as it is known to have issues on macOS 10.12 (for example building the editor with UBT often fails with Mono running out of file descriptors).

  • Added -Wno-undefined-var-template on Mac to work around an issue with compiling UHT in Xcode 8.3.

Programming

  • New: Added list of Dependant modules to EULA check so that it's clear what can't be included.

  • Removed non-cyclic actions from messages about cyclic actions being present.

  • Removed CopyVisualizers.bat now that UE4.natvis is included in the VS2015 solution and we're no longer supporting VS2013.

  • Moved Sample game projects into a different solution folder, similar to Templates.

Rendering

  • New: Added r.Vulkan.SubmitOnDispatch to help debug compute shader hangs on Vulkan.

  • New: Added GDynamicRHI::GetName() to get the name of the current RHI.

  • New: Locked buffers are now aligned to 16 bytes to allow SIMD operations on Vulkan.

  • New: Reworked Vulkan render pass system.

  • Bugfix: Fixed a bug with default parameters on shaders for non-HLSL platforms.

  • Bugfix: Fixed a memory leak when using VisualizeTexture on some RHIs.

  • Bugfix: Fixed a typo in check relating to stalling the RHI thread.

  • Bugfix: Fixed a rare crash with particle systems destroying render state.

Lighting

  • Bugfix: Fixed a rare bug with shadow groups rendering things that have not been setup to render this frame.

Optimizations

  • New: Glsl source for Vulkan shaders is now stripped out to save memory. Use r.Vulkan.StripGlsl=0 to not remove it at runtime.

  • Projected shadows are no longer created when r.ShadowQuality is 0

    • Fixes crash in the forward path trying to render shadows

    • In the deferred path, the shadowmap was still being rendered and only the projection skipped, now all cost will be skipped

VR

  • The relative transform of the UCameraComponent will no longer reset if the HMDDevice returns a new position. This avoids changing the entire hierarchy twice during every update.

Mass debug rendering

  • Switched fudged auto-LOD calculations to use a power decay instead of a reciprocal.

Upgrade Notes

Animation

Pose snapshot tool

  • CVar forcing multithreaded update is now defaulted to off. Projects now enable it by default, but can easily opt-out.

  • The setting to enable and disable multithreaded update has moved from the class defaults to the class settings. Any of these flags that were previously set in the class defaults will need to be re-set in the class settings.

  • This will change the behavior of morphtarget if SetMorphTarget and animation curves were being used together.

Skeletal Mesh

  • If you were using types defined in SkeletalMeshTypes.h, you may now need to include this file explicitly.

Blueprints

  • If your project is missing "[EditoronlyBP]" ini settings, or if you've set any of those to false, then you need to upgrade code where you use Blueprint editor-only data in your packaged project.

    • Places where you use UBlueprint objects at runtime will need to be updated. Most commonly, ConstructorHelpers::FObjectFinder will need to be updated to ConstructorHelpers::FClassFinder.

Core

  • Deprecated some core functions:

    • GetUniqueDeviceId is deprecated; replace with GetDeviceId.

    • GetMachineId is deprecated; replace with GetLoginId.

    • All platform-independent usages of GetMacAddress and related functions have been deprecated. These functions were not considered reliable on all platforms.

  • Any types which inherit TAutoPointer should replace it by implementing their own conversion operators. TAutoWeakObjectPtr implicit conversions should be replaced with explicit Get calls.

  • TScopedPointer and TAutoPtr usage should be replaced with TUniquePtr.

  • TFunction::Unset usage should be replaced with an assignment to nullptr.

  • Any code which finds an enum class property as a UByteProperty should be changed to look for a UEnumProperty instead. Any code which depends on UByteProperty::Enum or UByteProperty::GetIntPropertyEnum should support UEnumProperty as well.

  • Usage of TEnumAsByte with an enum class type should be changed to just use the enum class type directly.

  • Use of the LexicalConversion namespace should be changed to Lex.

Gameplay Framework

  • GameplayAbilities are no longer enabled with the "GameplayAbilitiesEditorEnabled" ini setting. There is now a GameplayAbilities plugin that can be activated for this purpose.

  • Activate and SetActive are no longer valid to call on components from construction scripts. Call SetAutoActivate instead.

  • For LOD distance consolidation, LOD distances should be converted automatically on load. If you are using update rate optimizations with custom thresholds for skeletal meshes you will need to update these manually.

  • The Blueprint API for GameplayTags has changed, but existing nodes should update themselves correctly. There is now an ExactMatch parameter to replace the older enums, so you may need to update that bool in some cases.

    • If you have existing GameplayTag data in Data Tables or .ini files, you will have to migrate them.

    • Searching for GameplayTag usage will only work properly once assets have been resaved in version 4.15 or later.

  • Uses of FAttenuationSettings need to be changed to FSoundAttenuationSettings.

  • Delete DDC or otherwise change Spline Mesh Component parameters to ensure they get regenerated.

Physics

  • Many deprecated collision functions have now been removed from KismetSystemLibrary, and the _NEW postfix has been removed.

  • Cooked PhysX convex element data is now in "body space" instead of "element space". If you are directly accessing PhysX convex mesh data, you may need to take that into account.

  • Any simulated body with attached kinematic bodies that have different physical materials, or mass overrides, will now have a correct mass distribution.

    • The old behavior was to use the physical material of the simulated body. This may lead to re-tuning some content. The most likely case is any vehicle with attached kinematics that had special mass properties or mass overrides. As a result of this change, collision boxes with zero mass attached to vehicles will behave correctly.

Platforms

Windows

  • It is currently possible to set the minimum Windows version to Windows XP directly in the INI files.

Rendering

  • There is now an error when using too many texture coordinates on a skeletal material that displays the following output: "Too many texture coordinate sets defined on GPUSkin vertex input". Previously this case would silently fail and crash when the material was used, now it's correctly blocked. The fix for this error is to uncheck "Used with Skeletal Meshes" on the affected material as this is unsupported.

  • Some of the variables have been moved from the SceneView and renamed to be more explicit. Getters that do a lot of computation have been renamed to Compute*

  • Prefer EnqueueUniqueRenderCommand over the macro as we want to switch to those on the future

  • Remember to take a copy of FDrawingPolicyRenderState before you hand it off to another thread.

Slate

  • Improved Canvas Panel render performance by improving batching behavior.

    • Default behavior has not changed.

    • To take advantage of better render performance enable project setting "Engine->Slate Settings->Constraint Canvas->Explicit Canvas Child ZOrder".

    • Recommended for projects using Canvas Panel on mobile platforms.

    • Projects enabling "Explicit Canvas Child ZOrder" must set ZOrder on all Canvas Panel (SConstraintCanvas) child slots to avoid undesirable clipping.

    • Projects enabling "Explicit Canvas Child ZOrder" can place children that will never overlap in the same layer by setting the same ZOrder value to improve batching.

Google Daydream

  • Daydream apps require android-24. This is not installed by default, but can be manually installed with NVPACK\Chooser.exe.