언리얼 엔진 4.16 릴리즈 노트

언리얼 엔진 4.16 릴리즈 노트

Windows
MacOS
Linux
목차

DOCS_BANNER_416.jpg

새 소식

언리얼 엔진 4.16 에는 흥미로운 렌더링 및 애니메이션 신기능, 모바일 및 콘솔 플랫폼 퍼포먼스의 비약적인 향상 은 물론, 개발자 여러분 삶의 질 향상을 위한 수많은 개선사항 이 포함되어 있어, 보다 많은 플랫폼에서 부드럽게 실행되는 눈부신 배경이나 매력적인 체험을 더욱 쉽게 만들 수 있습니다.

배경의 분위기를 한층 강화시킬 수 있는 놀라운 볼류메트릭 포그 신기능을 사용하면, 스케일을 키워도 씬 어디서든 일관된 라이팅을 보이는 사실적인 포그 및 스모크 이펙트를 자동으로 렌더링해 줍니다.

새로운 다이내믹 라이트웨이트 리짓 바디로우 레벨 클로스 시뮬레이션 툴로 캐릭터에 생명력을 불어넣어 보세요! 애니메이션 모디파이어, 스플라인 IK 솔버, 업데이트된 포즈 드라이버를 비롯한 애니메이션 시스템의 여러 개선사항을 활용하여 동작의 흐름을 보다 세밀하게 제어할 수 있습니다.

가비지 컬렉션 속도가 두 배 빨라졌습니다! UI 렌더링 퍼포먼스와 UMG 위젯 생성 속도가 크게 향상되어 보다 현란한 인터페이스 제작이 가능합니다. VR 모드, 애니메이션, 시퀀서, 기타 툴의 인터페이스와 작업방식도 업데이트되어 개발 프로세스 효율성이 크게 높아졌습니다.

4.16 부터 Nintendo Switch 가 완벽 지원되어 실제 제작단계에서 사용할 수 있게 되었습니다! 에픽게임즈는 Nintendo 와의 협업을 통해 공인된 개발자들에게 Nintendo Switch 용 풀 소스 코드를 무료 배포했습니다. 개발 시작을 위한 자세한 내용은 여기서 확인해 보세요.

이제 Xbox One 의 기본 렌더러를 DirectX 12 로 설정, 해당 플랫폼을 지원하는 엔진 퍼포먼스와 피처 두 마리 토끼를 동시에 잡았습니다. 게다가 HTML5 게임 개발에 WebAssembly 와 WebGL 2 가 지원되기 시작하였으며, 이 부분은 UE4 에서 지속적으로 발전시켜 나갈 것입니다.

모바일에서는, 이제 Android 가상 키보드가 지원되며, 실행시간 권한 요청 기능을 블루프린트와 코드 양쪽에서 쓸 수 있습니다. 게다가 모바일 앱 실행파일 크기를 한층 더 줄일 수 있게 되었습니다!

에픽에서 직접 공개한 업데이트 수백종 이외에도, 이번 릴리즈에는 놀라운 언리얼 엔진 개발자 커뮤니티가 GitHub 를 통해 제출한 개선사항이 160 종 포함되어 있습니다! 언리얼 엔진 4.16 에 기여해 주신 분들께 감사드립니다:

0lento, Akihiro Kayama (kayama-shift), Alice Robinson (Valkrysa), Altrue, Andreas Rønning (Sunjammer), Andrew Gaubatz (e-agaubatz), Angus Jones (crumblycake), Artem V. Navrotskiy (bozaro), Black Phoenix (PhoenixBlack), Cedric Neukirchen (eXifreXi), Cengiz Terzibas (yaakuro), Chris Varnz (chrisvarns), Christopher P. Yarger (cpyarger), Damian Nowakowski (zompi2), DarkSlot, DeanoC, Derek van Vliet (derekvanvliet), devbm, dodgyville, drelidan7, Gabriel Lima (Gabriel-Lima-O), Gyeonghwan (conquests), Hao Wang (haowang1013), Ilya (ill), Jackblue (JohnsonJackblue), James Horsley (mmdanggg2), Jeff Rous (JeffRous), Jon Watte (jwatte), Jørgen P. Tjernø (jorgenpt), jostster, Kalle Hamalainen (kallehamalainen), katze7514, Kevin Kuegler (FrostByteGER), KrisRedbeard, looterz, Manmohan Bishnoi (manmohanbishnoi), Marat Radchenko (slonopotamus), Markyroson, Martin Treacy-Schwartz (the1schwartz), Matt Edmonds (cleaver404), Matthew Casey (mdcasey), Matthias (haimat), Matthias Holzl (hoelzl), Matthias Huerbe (MatzeOGH), Michael Schoell (MichaelSchoell), Michał Siejak (Nadrin), Milan ??astny (aknarts), Moritz Wundke (moritz-wundke), Mustafa TOP (MSTF), Narendra Umate (ardneran), Nathan Stocks (CleanCut), NaturalMotionTechnology, Nick Verenik (nverenik), Paul Murray (awesomeness872), pfontain, Phil Christensen (Rastaban), PrimalJohnScott, projectgheist, Rafael Ortis (rafortis), Rajko Stojadinovic (rajkosto), Rama (EverNewJoy), rhughesgeomerics, Ricardo Rodrigues (RicardoEPRodrigues), Robert Hagglund (hagglund), Robert Segal (robertfsegal), Ryan Pavlik (rpav), sangpan, Sanjay Nambiar (sanjay-nambiar), Satheesh (ryanjon2040), Sean Campbell (scampVR), Sebastian Axinte (ENiGMA9), Sebastien Rombauts (SRombauts), SiebenCorgie, Stefan Zimecki (stefanzimecki), StefanoProsperi, Stephen Johnson (megasjay), TaeYoung Cho (valval88), Timothee Besset (TTimo), Timothy Hagberg (thagberg), Tom Kneiphof (tomix1024), Tom Ward (tomwardio), TRS-justing, unwitherer, Vladimir (VladimirPobedinskiy), Vladimir Alyamkin (ufna), wyhily2010, Yaroslav Shmelev (SoulSharer), yeonseok-yi

주요 기능

신규: 볼류메트릭 포그

새로운 Volumetric Fog (볼류메트릭 포그) 기능으로 환경에 놀라운 배경 효과와 분위기를 연출해 보세요! 다양한 농도 설정이 지원되어 빛줄기 사이로 흐르는 먼지나 연기 구름 시뮬레이션이 가능하며, 이 볼류메트릭 포그에는 다수의 라이트가 동시에 영향을 줄 수 있습니다.

image alt text

image alt text

image alt text

볼류메트릭 포그가 받을 수 있는 라이팅은 다음과 같습니다:

  • 단일 디렉셔널 라이트, 캐스케이드 섀도우 맵의 섀도잉 또는 스태틱 섀도잉, 라이트 함수.

  • 다수 포인트 및 스포트 라이트, Cast Volumetric Shadow 옵션이 켜진 경우 다이내믹 또는 스태틱 섀도잉.

  • 단일 스카이라이트, 섀도잉은 Distance Field Ambient Occlusion 이 켜진 경우.

  • 파티클 라이트, 'Volumetric Scattering Intensity' 값이 0 보다 큰 경우.

파티클 시스템에 적용된 머티리얼을 사용하여 새로운 Volume Domain 세팅으로 볼류메트릭 포그를 제어할 수 있습니다. 볼륨 머티리얼이 있는 파티클 하나로 볼류메트릭 포그에 일정 농도의 구체를 추가시킬 수 있습니다. 이 효과는 빌보드와 상관 없는 풀 3D 입니다. 다수의 구체 포그 파티클에 텍스처의 노이즈를 적용하여 사용하면 포그를 특정 영역에 제한시킬 수 있습니다.

볼류메트릭 포그 구성 관련 정보는 문서 를 참고하세요.

신규: 블룸에 이미지 기반 (FFT) 컨볼루션

새로운 이미지 기반 (FFT) 컨볼루션(합성곱) 기능으로 물리 법칙에 맞는 사실적인 블룸 포스트 프로세스 이펙트를 만들 수 있습니다! 언리얼 엔진 4.16 에 포함된 FFT 블룸 기능으로, 아티스트는 커스텀 블룸 커널 모양을 사용할 수 있을 뿐 아니라, 원하는 결과를 낼 수 있도록 그 세기도 완벽히 제어할 수 있습니다.

image alt text

소스 이미지의 수학 컨볼루션 연산에 커널 이미지를 사용하는 이 블룸 기법을 통해, 별모양 광채에서부터 일정 구역의 디퓨즈 글로우에 이르기까지 다양한 반응 연속체 효과를 낼 수 있습니다. 이미지 기반 컨볼루션으로 사실감을 더할 수 있는 것은, 시각적으로 흥미로운 비대칭 커널 이미지를 사용할 수 있기 때문입니다. 보통은 방사형으로 퍼지는 별모양 광채같아 보이지만, 속눈썹 실루엣, 보케, 기타 부작용같은 모양을 포함시킬 수도 있습니다.

주: 이미지 기반 컨볼루션 블룸은 시네마틱이나 고사양 하드웨어용으로, 대부분의 게임에서는 기존 (표준) 블룸이 적합할 것입니다.

신규: 디스턴스 필드 라이팅 최적화

디스턴스 필드 앰비언트 오클루전레이 트레이스드 디스턴스 필드 섀도우 가 현 세대 콘솔과 중간 사양 PC 에서 30-50% 빨라졌습니다! 씬에 보다 사실적인 앰비언트 라이팅과 다이내믹 메시에 에어리어 섀도우를 드리울 수 있도록 해주는 기능입니다.

image alt text

게다가, Intel 의 Embree 레이 트레이싱 라이브러리를 사용하여 메시 디스턴스 필드 생성 시간도 2.5 배 빨라졌습니다. 프로젝트 세팅 중 Eight Bit Mesh Distance Fields (8비트 메시 디스턴스 필드) 및 Compress Mesh Distance Fields (메시 디스턴스 필드 압축) 옵션을 사용하면 메모리 사용량 역시 크게 감소합니다.

신규: 라이트웨이트 리짓 바디 시뮬레이션

새로운 라이트웨이트 리짓 바디 캐릭터 시뮬레이션 으로 물리 시뮬레이션 캐릭터 군단을 만들 수 있습니다! 이제 새로운 고성능 즉시 모드 PhysX API 로 애니메이션 블루프린트 안에서 피직스 애셋 시뮬레이션이 가능합니다. 이 시뮬레이션을 사용하는 캐릭터는 월드의 스태틱 지오메트리와의 콜리전 생성도 가능합니다.

신규: 로우 레벨 클로딩 시뮬레이션

Nvidia 의 새로운 로우 레벨 NvCloth 클로딩 솔버를 사용하여 보다 세밀한 클로딩 시뮬레이션 제어가 가능합니다!

기존 APEX 클로딩 솔버를 보다 낮은 수준에서 동작하는 솔루션인 Nvidia 의 NvCloth 로 대체했습니다. 이 새로운 솔버는 작동방식에 약간의 차이를 제외하고 기존 APEX 솔루션의 코어 솔버와 비슷하지만, 시뮬레이션 데이터에 더욱 쉽게 접근할 수 있고 관성 세팅에 몇 가지 추가 파라미터가 노출되어 있습니다.

신규: Nintendo Switch 게임 출시 지원!

등록한 개발자들은 이제 Nitendo Switch 용 게임 제작 및 출시가 가능합니다! 언리얼 엔진 4 는 Nintendo Switch 검증 사항을 준수하며, 네트워크 멀티플레이어 게임은 물론, 디퍼드 / 모바일 포워드 / 클러스터드 포워드와 같은 멀티 렌더링 파이프라인 접근도 지원하여, 사실상 어떤 유형의 게임도 쉽게 제작할 수 있습니다.

image alt text

신규: VR 모드 UI 및 인터랙션 업데이트

언리얼 에디터의 VR 모드가 대폭 개선되어 보다 직관적인 작업방식과 편집 환경을 제공해 줍니다.

image alt text

새로운 비대칭 컨트롤러 셋업으로 한 손에는 새롭게 개선된 원형 메뉴를, 다른 한 손에는 보다 정밀해진 인터랙션 레이저로 레벨의 오브젝트 작업을 빠르고 쉽게 할 수 있습니다.

모든 주요 에디터 기능과 UI 패널을 포함한 모든 VR 동작을 이제 새로워진 원형 메뉴에서 열어볼 수 있습니다. 텔레포트도 업데이트되어 어느 한 위치로 순간 이동한 뒤 기본 스케일로 크기를 조정하여 플레이어 관점에서 확인할 수 있도록 하기도 했습니다. 자세한 정보는

[관련 문서](Engine/Editor/VR/GDC2017)
를 참고하세요.

신규: VR 에서 시퀀스 편집

시퀀서 시네마틱 에디터를 이제 VR 에서 사용할 수 있습니다! 새 시퀀스 생성, 레벨에서 오브젝트 이동 작업을 하면, 그 트랜스폼에 대한 시퀀스 키를 자동 생성해 줍니다. 타임라인 스크러빙 후 이 키를 설정하는 것으로, 시네마틱 시퀀스를 만들고 재생하는 작업을 VR 안에서 모두 해낼 수 있습니다. 시퀀서 UI 나 원형 메뉴를 통해서도 기존 레벨 시퀀스를 열거나 재생할 수 있습니다.

  • 신규! 키 조정을 통해 월드의 궤도를 물리적으로 조절할 수 있습니다.

  • 원형 메뉴의 Scrub Time (시간 스크럽) 옵션을 통해 썸스틱이나 터치패드 입력으로 시퀀스 재생 방향과 속도를 정할 수 있습니다. 트리거를 다시 한 번 누르면 시간 스크럽 모드를 빠져나갑니다.

신규: VR 모드 피직스 시뮬레이션

이제 VR 모드에서 모션 컨트롤러로 레벨의 오브젝트와 상호작용하면서 피직스 시뮬레이션 적용 이 가능합니다! 피직스 시뮬레이션 설정된 액터를 배치한 뒤 물리 시뮬레이션을 통해 액터가 사실적으로 퍼지도록 하거나, 모션 컨트롤러로 건드리거나 하면 됩니다.

신규: VR 모드 스마트 스내핑

스마트 스내핑은 오브젝트의 바운드를 사용하여 씬의 다른 액터와 줄을 맞춰주는 기능으로, 미리 그리드를 신경쓸 필요 없이 모듈식 애셋 제작을 할 수 있습니다.

이 기능은 현재 VR 모드에서만 가능하나, 앞으로 데스크톱 편집도 지원할 계획입니다.

신규: Xbox One 기본 렌더러 DirectX 12

DirectX 12 가 Xbox One 의 기본 렌더러가 되었습니다! DirectX 12 에 가한 여러가지 안전성 및 퍼포먼스 개선사항 덕에 Xbox One 의 기본 RHI 로 활용하여, CPU 및 GPU 퍼포먼스 향상 효과를 누릴 수 있게 되었습니다.

image alt text

D3D11 로 돌아가기

D3D11 로 돌아갈 필요가 있는 타이틀의 경우 그 방법은 다음과 같습니다:

  1. 타이틀 defaultengine.ini 에서 bBuildForD3D12 옵션을 변경합니다.

  2. 게임을 Xbox One 용으로 다시 빌드합니다.

  3. 콘텐츠를 다시 쿠킹합니다.

주: D3D11 RHI 는 앞으로 폐기될 예정입니다.

신규: WebAssembly 및 WebGL 2 용 HTML5 지원

언리얼 엔진 4 가 이제 HTML5 의 새로운 WebAssembly 표준(다른 명칭으로는 WASM)을 지원하여, 웹에서도 C++ 코드를 가장 빠르고 효율적으로 컴파일하고 실행할 수 있게 되었습니다! Mozilla 의 최신 (v1.37.9) Emscripten 툴체인을 사용하고 있습니다. 이 기능은 아직 모든 브라우저에 지원되지 않는 신기술이라 베타 기능으로 간주되고 있으며, GitHub 접근 권한이 필요합니다.

image alt text

WASM 은 웹 앱에 사용되는 새로운 JavaScript 코드-투-바이너리 포맷으로, 앱 다운로드 크기와 시작 시간 및 메모리 소모량을 감소시켜 퍼포먼스를 크게 향상시켜 줍니다. WASM 및 브라우저 지원 관련 자세한 내용은 http://webassembly.org/ 페이지를 참고하세요.

UE 4.16 에는 OpenGL ES 3.0 기반 WebGL 2.0 지원도 추가되어 한 층 높은 렌더링 퍼포먼스 최적화와 시각 충실도 향상과 아울러 다음과 같은 렌더링 기능도 추가로 지원합니다:

  • UE4 고사양 모바일 피처 레벨 대부분의 기능

  • 파티클과 폴리지에 인스턴스드 지오메트리 드로잉

  • 멀티 렌더 타깃(MRT) 지원

  • 3D 또는 볼륨 텍스처, 2D 배열 텍스처와 같은 텍스처 기능, 2 제곱 텍스처 금지 제약 없음

WASM 및 WebGL 2.0 은 (64 비트 추천) Firefox 52 와 Chrome 57 버전 이상에서 지원됩니다. Windows 상의 Chrome 58 버전에서 일부분 메모리 부족 오류를 유발하는 버그가 보이고 있습니다. Google과의 협업으로 이슈 해결중입니다. UE-44727 에서 그 현황을 확인하실 수 있습니다.

HTML5 프로젝트 세팅의 Emscripten 부분에서 이 옵션을 변경할 수 있습니다. 가급적 폭넓은 브라우저 지원을 위해서라면 아직은 ASM.js 와 WebGL 1 을 사용하세요. 하지만 ASM.js 및 WebGL 1 지원은 앞으로 나올 엔진 버전에서 폐기 상태에 접어든 이후 제거될 것입니다 (정확한 시기는 브라우저 추가 지원에 따라 달라집니다).

Firefox 또는 Chrome (위 지원 버전) 브라우저에서 HTML5 에서 실행되는 Zen Garden 데모 를 통해 직접 확인하실 수 있습니다.

신규: 가비지 컬렉션 속도 2 배 향상

가비지 컬렉션 퍼포먼스가 크게 향상되어 이제 두 배 이상 빨라졌습니다! 구체적인 개선사항은 다음과 같습니다:

  • 도달가능성 분석 멀티스레딩 작업을 새롭게 디자인하여 태스크 관리 비용을 감소시켰습니다.

  • 가비지 컬렉션 클러스터 작업이 블루프린트 생성 클래스 및 선택된 액터 유형을 지원합니다.

  • UObject 언해시 코드 최적화를 통해 액터 소멸에 걸리는 시간을 단축시켰습니다.

신규: 시뮬레이팅 부모 포함 키네마틱 바디

시뮬레이션 부모를 포함한 키네마틱 피직스 바디를 만들 수 있는 기능을 추가했습니다. 이제 캐릭터의 손과 같은 자손 본은 순수히 애니메이션 데이터로 구동시키면서, 그 본의 부모 역시도 피직스 시뮬레이션 데이터로 구동되도록 만들 수 있습니다.

플레이어가 턱을 오르면서 낙석이 바디에 충돌하는 경우 그에 반응하도록 하는 등의 멋진 이펙트를 만들 수 있습니다.

신규: 플랫폼 SDK 업그레이드

매 번 릴리즈마다 플랫폼 파트너사의 최신 SDK 버전을 지원할 수 있도록 엔진을 업그레이드하고 있습니다.

image alt text

  • Visual Studio: 중요: Visual Studio 2013 은 Windows에서 이번 릴리즈에 더이상 지원되지 않습니다. Visual Studio 2015 또는 Visual Studio 2017 로 업그레이드해 주세요.

  • Nintendo Switch: Nintendo SDK 1.3.1 을 지원합니다.

  • Xbox One: October 2016 QFE3 XDK 버전 대상으로 빌드했습니다.

  • PlayStation 4: PSR SDK 4.508.001 SDK 로 업그레이드했습니다.

  • Android: Updated CodeWorks for Android 1R6u1

  • GoogleVR: 플러그인 1.3 버전으로 업그레이드했습니다.

  • GoogleVR: SDK 1.40.0 버전으로 업데이트했습니다.

  • GoogleVR: Mode 기본값이 Daydream & Cardboard 로 변경되었습니다.

  • Vulkan: 배포 파일과 glslang 을 SDK 1.0.39.1 로 업그레이드했습니다.

신규: 시퀀서 샷 트랙 개선

시퀀서의 샷 트랙이 시네마틱 및 영화 제작에도 유용하도록 여러모로 개선되었습니다!

  • 샷 별 계층형 바이어스 - 기본적으로 레벨 시퀀스 계층구조 내 하위 레벨의 트랙이 우선권을 갖습니다. 이를 통해 영화 제작자는 자신에게 익숙한 파이프라인을 만들어, 샷에서 수정을 가하면 그것이 들어있는 시퀀스의 트랙을 덮어쓰도록 할 수 있습니다.

  • 모든 트랙에 When Finished 프로퍼티 노출 - 애니메이션 이전 상태의 값으로 되돌릴지 아니면 시퀀스 종료 상태의 값을 유지할지를 트랙에 지정할 수 있습니다. 영화 제작 환경에서는 보통 샷에서 애니메이션이 적용된 값을 애니메이션 전 상태로 되돌려 다음 샷으로 새어나가지 않도록 합니다. 시네마틱에서는 값을 유지시켜 시퀀서 애니메이션 상태에서부터 게임을 계속할 수 있도록 하는 것이 좋을 것입니다.

  • 프리/포스트 롤 - 이제 모든 트랙에 프리 / 포스트 롤이 일반적인 개념이 되었습니다. 어떤 트랙에는 그에 맞는 작동방식이 있을텐데, 예를 들어 카메라 컷 트랙은 프리 롤 평가 기간의 카메라 컷 예상 위치를 스트리밍 시스템에 알려주는 것입니다.

신규: 시퀀서에서 머티리얼 파라미터 컬렉션 애니메이션

이제 시퀀서에서 머티리얼 파라미터 컬렉션에 대한 애니메이션을 통해, 다수의 머티리얼에서도 참조할 수 있는 스칼라 및 벡터 파라미터 애니메이션 완벽 제어가 가능합니다. 더이상 애니메이션 공유를 위해 각 머티리얼 인스턴스마다 별개의 파라미터 값 애니메이션을 줄 필요가 없습니다.

신규: UI 렌더링 퍼포먼스 개선

이제 게임에서 Invalidation Panel 을 사용하면 렌더 데이터가 아닌 위젯 엘리먼트만 캐시에 저장하는 옵션으로 텍스처 배치 작업을 향상시켜 드로 콜 수를 크게 줄일 수 있습니다. 모바일 디바이스에서 퍼포먼스가 크게 향상될 것입니다!

image alt text

위의 배틀 브레이커스 영웅 선택 UI 에서, 각 영웅의 논리 엘리먼트를 캐시에 저장시켜 함께 배치 처리되도록 할 수 있습니다. 이 모드를 켜는 콘솔 변수는 Slate.CacheRenderData=0 으로, 모바일 디바이스에서는 기본값입니다.

신규: 애니메이션 포즈 드라이버 개선

포즈 드라이버 기능 개선을 통해, 본 세트의 포즈를 레퍼런스 '타깃' 세트와 비교하는 식으로 블렌드 셰이프나 본을 절차적으로 구동시킬 수 있게 되었습니다. 어깨처럼 상박과 어깨 포즈에 따라 모프 타깃을 자동 교정하면 좋은 곳에 특히 좋습니다.

  • 이제 포즈를 읽어 들일 '입력'으로 다수의 본을 선택할 수 있습니다.

  • 이제 노드가 변경할 본을 선택할 수 있습니다.

  • 각 타깃 가동 방법에 대한 '커스텀 커브' 지정이 가능합니다.

  • 포즈 애셋 필요 없이 (모프, 머티리얼) 커브를 바로 구동시키도록 선택할 수 있습니다.

  • UI 에 타깃 포즈 생성/편집, 타깃 가동 표시 바 등이 개선되었습니다.

  • 뷰포트에서 타깃 위치를 클릭하여 선택할 수 있습니다.

신규: 머티리얼 플래트닝용 오파시티 및 오파티시 마스크

블렌드 모드 옵션을 사용하여 머지 액터와 HLOD 로 오파시티 (마스크) 값을 구워내는 기능이 지원됩니다. 결과 (인스턴싱된) 머티리얼은 set blend mode 를 사용하여 올바른 렌더 패스를 따르도록 합니다. 마스크드 머티리얼을 구워낸 예제입니다:

image alt text

신규: 메시 페인트 툴 개선

메시 페인트 시스템이 대폭 개선되어 사용하기 쉽고 명확해졌으며, 에디터 다른 부분의 기능을 재사용할 수 있게 되었습니다.

또, 스켈레탈 메시에 페인트 툴을 사용할 수 있게 되었습니다. 참고로 페인트는 (스태틱 메시와 마찬가지로) 인스턴스 단위가 아니며 스켈레탈 메시 애셋에 직접 적용됩니다.

신규: 스플라인 IK 솔버

캐릭터 스플라인 또는 본 체인 제어에 좋은 Spline IK 노드가 애니메이션 블루프린트에 추가되었습니다!

신규: 메시 표면의 머티리얼 감지

컴포넌트에 추가된 'Get Material From Face Index' (면 인덱스에서 머티리얼 구하기) 함수로 (복합) 라인 트레이스 이후 컴포넌트에 적용된 머티리얼을 구할 수 있습니다. 스태틱 메시, 프로시저럴 메시 컴포넌트, BSP 에 적용됩니다.

신규: 'Look At' 애니메이션 노드 개선

이제 Look At 노드의 Look At Location 프로퍼티를 본 또는 소켓 기준으로 사용할 수 있습니다. 기존에는 본이나 소켓을 지정해도 이 값을 무시했었습니다.

Look At 컨트롤에 대한 시각화 역시 개선되었습니다. 예를 들어, 경사 각도, 타깃 위치, 보간 등을 확인할 수 있습니다.

신규: 애니메이션 익스포트 개선

스켈레탈 메시에 할당된 포스트 프로세스 그래프에서 생성된 부가 애니메이션 데이터, 이를테면 피직스 시뮬레이션용 애님 다이내믹스같은 것을 포함하는 애니메이션을 만들고 익스포트하는 기능이 지원됩니다.

이 부가 데이터를 포함시키려면, 애니메이션 생성 또는 애니메이션 익스포트 에서 프리뷰 메시 를 선택하면 됩니다.

image alt text

신규: 언리얼 오디오 엔진 (베타 프리뷰)

GDC 에서 발표된 새로운 언리얼 오디오 엔진이 PC, Mac, iOS, Android, Switch 에서 베타로 접할 수 있습니다. 새로운 멀티플랫폼 EQ 및 Reverb 마스터 이펙트와 함께, 기존 오디오 엔진 피처 세트 하위 호환이 완벽 지원되는 멀티 플랫폼 오디오 믹서가 포함되어 있습니다. 추가로, 새로운 언리얼 오디오 엔진에는 서브믹스 그래프, 서브믹스 이펙트, 소스 이펙트, 실시간 합성, 오디오 플러그인 지원 강화 등의 새로운 기능이 도입되어 있습니다.

새로운 언리얼 오디오 엔진은 4.16 에 기본으로 켜져있지 않은데, 콘솔 플랫폼, Linux, HTML5 용 백엔드 구현과 아울러 특히나 모바일 플랫폼에서의 안전성과 퍼포먼스 향상을 위한 작업이 계속 이루어지고 있기 때문입니다.

오디오 믹서를 켜려면, "-audiomixer" 명령줄 인수를 붙여주면 됩니다.

주: 대부분의 언리얼 오디오 엔진 신기능은 오디오 믹서를 켜지 않고 에디터를 실행시키면 숨겨져 있습니다.

신규: Synthesis 플러그인 (베타)

새로운 synthesis 플러그인에는 두 가지 새로운 리얼타임 신디사이저가 들어있습니다. 하나는 새로운 언리얼 오디오 엔진의 "SynthComponent" 클래스를 사용하여 구현한 완전판 서브트랙티브 신디사이저(감산 합성)이고, 다른 하나는 리얼타임 그래뉼레이터입니다. 새 신디사이저는 절차적인 음악이나 사운드 디자인에 유용한 툴일 뿐 아니라, 써드 파티 플러그인 제조사나 심지어 사운드 디자이너도 자신만의 신디사이저를 구현하기 위해 참고할 수 있는 예제 역할을 하기도 합니다.

synthesis 플러그인에는 새로운 언리얼 오디오 엔진에서 사용할 수 있는 DSP 소스 및 서브믹스 이펙트 호스트도 들어있습니다:

  • 소스 이펙트: 스테레오 딜레이, 비트 크러셔, 다이내믹스 프로세서, 엔벨롭 팔로워, EQ 필터, 버추얼 아날로그 필터 (래더/스테이트 베리어블), 웨이브 셰이퍼, 코러스, 페이저

  • 서브믹스 이펙트: 리버브, EQ, 다이내믹스 프로세서

신규: Steam Audio (베타)

에픽과 Valve 가 팀을 이뤄 새로운 언리얼 오디오 엔진의 신기능을 활용하여 처음으로 완벽 통합 구현한 Steam Audio SDK 를 발매했습니다.

image alt text

Steam Audio 는 새로운 언리얼 오디오 엔진의 공간화, 오클루전, 리버브 시스템과 근본적인 수준에서 통합되어 UE4 의 VR 을 위한 차세대 물리 기반 오디오 체험을 선사할 수 있습니다. 이번 버전은 Steam Audio 베타 버전이며, 4.17 에 중요 업데이트, 추가 예제 프로젝트, 작업방식 개선사항이 계획되어 있습니다. 개선을 위한 피드백, 질문, 아이디어는 언제든 환영입니다.

Steam Audio 관련 자세한 정보, 문서, 기술지원 도움말은 https://valvesoftware.github.io/steam-audio/ 페이지를 참고하세요.

신규: 컬러 그레이딩 툴 개선

컬러 그레이딩 유저 인터페이스가 사용하기 쉽도록 개선되었습니다!

image alt text

  • 새로운 HSV 모드가 추가되었습니다.

  • Ctrl+슬라이더 드래그로 유형에 따라 최소/최대값을 동적으로 변경할 수 있습니다.

  • 새로 추가된 리셋 버튼으로 전체 컬러 그레이딩 카테고리를 리셋시킬 수 있습니다 (예: 글로벌, 섀도우, 미드톤, 하이라이트).

신규: 애니메이션 블렌드 스페이스 에디터 개선

이제 블렌드 스페이스 에디터에서 그리드 안의 Show Animation Names (애니메이션 이름 표시) 버튼으로 각 샘플의 애니메이션 이름을 표시할 수 있습니다. 이제 기존 애니메이션 위에 새 애니메이션을 끌어 놓아 대체할 수도 있습니다.

image alt text

신규: 현지화용 스트링 테이블

UE4 에 이제 현지화 스트링 테이블이 지원됩니다!

image alt text

스트링 테이블은 현지화 텍스트를 하나( 또는 여러 개)의 알려진 위치에 몰아두고 스티링 테이블 안의 항목을 다른 애셋이나 코드에서 안정적인 방식으로 참조하여 현지화 텍스트를 쉽게 재사용할 수 있습니다. 스트링 테이블은 C++ 에서 정의하거나, CSV 파일을 통해 로드하거나, 애셋으로 생성할 수 있습니다.

신규: 애니메이션 모디파이어 (베타 프리뷰)

애니메이션 모디파이어는 주어진 애니메이션 시퀀스 또는 스켈레톤에 액션 시퀀스를 적용할 수 있습니다. 이를테면 오른발이 바닥에 오는 것이 몇 프레임인지 정확히 지정한 뒤, ball_r 본이 최저점에 오는 (바닥에 닿는) 프레임에 애니메이션 싱크 마커를 추가하는 것입니다.

새로운 함수 세트로 애니메이션 블루프린트 함수 라이브러리에 사용할 수 있는 특정 애니메이션 데이터를 접근할 수 있습니다. 애니메이션 모디파이어 접근 및 적용은 스켈레톤 에디터와 애니메이션 에디터에서 찾을 수 있는 새 탭에서 이루어집니다. 애니메이션 모디파이어는 스켈레톤 또는 애니메이션 시퀀스에 추가할 수 있습니다. 애니메이션 시퀀스의 경우, 애니메이션 모디파이어는 시퀀스 자체에만 적용됩니다. 스켈레톤에 적용하면, 그 스켈레톤을 기반으로 한 모든 애니메이션 시퀀스에 적용됩니다.

신규: Android 가상 키보드 (베타 프리뷰)

이제 팝업 입력 대화창 대신 Android 운영 체제의 가상 키보드를 지원합니다!

image alt text

가상 키보드 활성화는 프로젝트 세팅 > 플랫폼 > Android > APK Packaging 아래 옵션을 체크하면 됩니다. 이 옵션은 가상 키보드 기본 지원을 활성화시키지만, 입력 요소가 보이면서 가상 키보드 뒤에 가리지 않도록 하기 위해서는 제공된 OnVirtualKeyboardShown 와 OnVirtualKeyboardHidden 이벤트 핸들러를 앱에서 사용해 줘야 합니다.

주: 사용자 언어가 IME 를 필요로 하는 경우 Android.NewKeyboard 콘솔 명령으로 가상 키보드를 끄는 것이 나을 수 있습니다.

Android 실행시간 권한 요청 지원

이제 언리얼 엔진 4 에 Android 23 이상에서 필요로 하는 런타임 퍼미션을 지원합니다. 여기에는 연락처, 사진, 폰 상태, 외부 저장장치, 카메라, 위치 서비스에 대한 접근이 포함됩니다. 자세한 내용은 다음 웹페이지를 참고하세요: https://developer.android.com/guide/topics/permissions/requesting.html.

Android 23 을 타깃으로 삼는 경우, Android Runtimes Permission 플러그인에 네이티브 코드나 Check Android Permission 블루프린트 노드를 사용하여 권한이 이미 부여되었는지 검사하는 기능이 제공됩니다. 권한이 아직 부여되지 않은 경우, 앱에서는 Request Android Permissions 블루프린트 노드를 사용하여 사용자에게 요청한 뒤, On Permissions Granted Dynamic 델리게이트에 바인딩된 이벤트를 사용하여 결과를 구할 수 있습니다. 그러면 게임이 권한이 필요한 기능을 사용하기 직전에 권한을 요청하도록 하여, 사용자 경험 향상에 도움이 됩니다. Android 23 이전 버전을 타깃으로 삼는 경우, 이전처럼 Android Manifest 에 지정하여 권한을 부여해야 합니다.

image alt text

주: 4.16 은 Android SDK 23 이상이 설치되어 있어야 합니다. 기존 버전을 사용하시는 경우 SDK 매니저를 사용하여 Android의 Upgrade Note 부분 안내에 따라 설치해 주시기 바랍니다. 또한 Android SDK 프로젝트 세팅에서, Android SDK API Level 을 "matchndk" 에서 "latest" 으로 변경해 주세요. 그러면 Android SDK 플랫폼 디렉터리에 설치된 최신 SDK 를 사용합니다. NDK API Level 은 변경할 필요 없습니다. Lollipop (Android 5.0) 이전 버전 Android에 APK 를 설치할 수 있도록 하려면 "android-19" 가 맞습니다. 이 값을 높여 설정하면 Android 5.0 이상이 필요합니다.

패키지 크기 감소를 위한 셰이더 코드 라이브러리

이제 Share Material Shader Code 프로젝트 세팅으로 모든 셰이더 코드의 공유 저장 위치를 지정할 수 있습니다. 그러면 같은 셰이더 코드를 생성하는 머티리얼 또는 머티리얼 인스턴스에 대해 하나의 사본만 저장하게 됩니다.

iOS, TVOS, MacOS 의 Metal 에서는 보다 효율적인 플랫폼 전용 셰이더 라이브러리를 지원합니다. Shared Material Native Libraries 프로젝트 세팅을 켜면 이 네이티브 라이브러리 포맷을 활용하여 패키지 크기가 한 층 더 줄어듭니다.

신규: FBX 에서 캡슐 콜리전 임포트

이제 FBX 파일에서, 이미 박스, 구체, 컨벡스 심플 콜리전을 임포트하듯, 캡슐 심플 콜리전을 임포트할 수 있습니다. 캡슐 폴리 메시의 'UCP' 접두사를 사용하면, 임포트할 때 제거되면서 그에 해당하는 캡슐 콜리전 셰이프로 대체됩니다.

신규: 공유 vs 로컬 애셋 뷰어 프로파일용 별도 옵션

이제 언리얼 에디터에서 공유 또는 로컬 레벨에 애셋 뷰어 프로파일을 저장, 팀원들과 프로파일 세트를 공유하고, 아트 애셋 감정을 위한 통합 씬으로 사용할 수 있습니다. 로컬 레벨에 프로파일을 저장하면 팀에는 필요치 않지만 개인적으로 선호하는 프로파일 커스텀 세트를 유지할 수 있습니다. 공유 프로파일은 DefaultEditor.ini 에 저장되며, 체크 아웃 또는 쓰기 가능으로 만들어야 합니다.

신규: 애니메이션 프리뷰 씬 개선

애니메이션 툴용 프리뷰 씬이 여러모로 개선되었습니다:

  • 프리뷰 씬 세팅이 뷰포트 숨김 메뉴가 아닌 기존 세팅 탭으로 이동되었습니다. 이 세팅 탭은 이제 기본으로 표시됩니다.

  • 메인 툴바에 프리뷰 메시를 빠르게 전환할 수 있는 바로가기가 추가되었습니다. 모든 애니메이션 에디터에 적용됩니다.

  • 프리뷰 씬을 편집할 때, 더이상 여분 메시 미리보기만을 위한 "프리뷰 씬 컬렉션"을 만들 필요가 없습니다. 메시 셋업이 마음에 들면 애셋에 저장할 수도 있습니다.

신규: 애님 뷰어에 기본 카메라 옵션 추가

이제 스켈레탈 메시의 '기본 카메라' 위치를 저장할 수 있습니다. 메시를 열 때 사용되며, Shift+F 키를 눌러 점프할 수도 있습니다.

신규: Play Montage 블루프린트 노드

Play Montage 는 어느 블루프린트 로직에서도 애님 몽타주 재생에 쓸 수 있는 새로운 비동기 노드입니다. 이를 통해 몇몇 콜백 이벤트에 쉽게 접근할 수 있어, 몽타주가 블렌드 아웃 되거나 중단되는 등의 경우에 다른 노드를 발동시킬 수 있습니다.

image alt text

  • OnCompleted 는 몽타주 재생이 완료되고 완전히 블렌드 아웃 되면 호출됩니다.

  • OnBlendOut 는 몽타주가 자동이든 수동이든 중지되어 Blend Out 시작할 때 호출됩니다.

  • OnInterrupted 는 몽타주가 다른 몽타주 재생에 의해 중단되어 Blend Out 시작할 때 호출됩니다.

  • OnNotifyBegin 및 OnNotifyEnd 는 몽타주 애셋에서 Play Montage Notify 나 Play Montage Notify Window 를 사용할 때의 콜백입니다. 이 애님 노티파이들은 Notify Name 을 추가로 붙여 같은 몽타주에서 온 다수의 콜백을 구분할 수도 있습니다.

신규: 포즈 리타깃용 옵션 추가

이제 리타깃 베이스 포즈를 설정할 때 사용할 포즈 애셋에서 포즈를 임포트할 수 있습니다. 현재 포즈를 변경 및 저장하고 (Use Current Pose) 본 트랜스폼을 레퍼런스 포즈로 리셋시키는 (Reset) 기존 옵션도 여전히 사용 가능합니다.

주: 애니메이션 에디터에서 포즈 애셋을 생성하고 이름을 할당한 포즈 애셋에 아무 포즈나 삽입할 수 있습니다.

신규: 스태틱 메시 에디터의 콜리전 뷰 옵션

스태틱 메시 에디터 툴에 스태틱 메시의 단순 및 복합 콜리전 표시를 위한 별도의 옵션이 생겼습니다.

신규: LOD 에 포즈 굽기

이제 언리얼 엔진 4 에 Bake Pose 라는 새로운 감소 세팅을 사용하여 LOD 레벨에 포즈를 구워 넣는 기능이 지원됩니다. 이 세팅을 단일 프레임 애님 시퀀스로 설정하면 결과 LOD 메시에 적용됩니다. 본은 제거하면서 포즈는 계속 유지하고자 할 때 유용하게 쓰일 수 있습니다.

주: 이 기능은 Simplygon 이 필요합니다.

신규: 시퀀서 유저 인터페이스 개선사항

이제 오디오 트랙 썸네일에 내부 (스무딩 적용된) RMS 커브로 피크 샘플이 렌더링됩니다. 오디오 트랙 세로 크기조정도 가능합니다!

image alt text

기타 시퀀서 UI 개선사항:

  • 시퀀서 제어 액터는 이제 레벨에 스트림 인 될 때 제대로 틱 됩니다.

  • 이제 이벤트 트랙에 대한 부가 이벤트 리시버 (예: 액터 블루프린트) 지정이 가능합니다.

  • 바인딩이 개선되었습니다. 이제 블루프린트에서 레벨 시퀀스에 대한 바인딩을 드래그/드롭/설정 가능합니다. 예를 들어 블루프린트에서 오브젝트를 스폰하고 그것을 기존 트랙에 할당할 수 있습니다.

신규: 모바일 VR 렌더링 개선

GearVR 에 다이렉트 멀티뷰가 지원됩니다. 모바일 멀티뷰를 사용할 때 렌더 타깃을 추가로 사용하지 않고 전체 화면 사본이 필요치 않아 전반적인 퍼포먼스가 향상되고 메모리 사용량이 줄어듭니다.

이제 GearVR 에서 멀티뷰가 켜진 상태에서는 모노스코픽 파 필드를 사용하여 씬의 스테레오 렌더링 부분의 최적 렌더링이 가능합니다.

Google Daydream 은 앞으로 나올 버전에서 다이렉트가 지원되는 표준 모바일 멀티뷰를 지원합니다.

신규: Playstation VR 용 소셜 스크린 (베타 프리뷰)

PSVR 소셜 스크린 프리뷰에 소셜 스크린 분리 모드가 지원됩니다. 모니터와 HMD 디스플레이에 다른 것을 표시하는 모드입니다.

이 프리뷰는 30fps 소셜 스크린 출력을 지원하며, 다수의 출력 모드 전환이 가능합니다. 구현된 샘플 모드는 다음과 같습니다:

  • SystemMirror (항상 있었던 기본 미러링 모드입니다).

  • SeparateTest (소셜 화면의 단순한 흑백 전환입니다).

  • SeparateTexture (블루프린트 지정 텍스처, 예를 들어 씬 캡처 컴포넌트가 쓰고 있는 렌더 타깃 같은 것을 표시합니다).

  • SeparateMirror (전체 VR 렌더 버퍼를 표시합니다).

앞으로 이 기능에 대한 최적화, 멀티 플랫폼 인터페이스, 가급적 60fps 모드도 (시스템 대화창에서 특정 시스템 기능과의 충돌을 해결해야 하지만) 지원할 수 있도록 작업중입니다.

이 기능을 사용하려면 새로 생긴 Morpheus 프로젝트 세팅 bEnableSocialScreenSeparateMode 를 true 로 설정해야 합니다. 그러면 소셜 스크린용 스크린 버퍼가 추가로 할당됩니다. 이 기능 제어를 위한 블루프린트 함수는 SocialScreen 으로 검색하면 됩니다.

신규: Android 실행파일 크기 감소

컴파일러와 링커 세팅을 다수 최적화시켜 Android 바이너리 실행파일 크기를 줄였습니다. Build with hidden symbol visibility 옵션을 켜면 Android 실행파일을 만들 때 언리얼 엔진에서 사용하지 않는 코드를 보다 적극적으로 제거해줍니다. 심볼 테이블에서 함수 심볼도 벗겨내어 실행파일 크기를 한층 더 줄여줍니다. 최종 APK 크기가 약 7MB 줄어드는 것을 확인했습니다.

주: 이 옵션은 디바이스의 바이너리에서 심볼을 제거하므로, logcat 출력에는 네이티브 크래시 콜 스택이 심볼 없이 나타날 것입니다. 디버깅이 가능하도록 하기 위해, 빌드 시스템에서는 디버그 심볼을 벗겨내지 않은 바이너리도 출력 디렉터리에 복사한 뒤, 콜 스택에 심볼을 붙이는 배치 파일을 추가로 생성합니다.

신규: Vertex Interpolator 머티리얼 표현식 노드

머티리얼 그래프에 Vertex Interpolator 노드가 추가되어 버텍스 및 픽셀 작업의 값 보간 제어가 더욱 확실해졌습니다. 이는 작업방식상의 개선으로, 인터폴레이터의 한계나 셰이더 변경은 없습니다.

기존에 버텍스 셰이더 작업을 덜어내는 방식은 Customized UV 출력을 활용하는 것이었습니다. 데이터 수동 패킹 작업이 수반되는 약간 번거로울 수 있는 작업이었지요. 아래 예제 머티리얼은 미리 스키닝된 메시 데이터를 패킹한 후 언패킹하여 이펙트에서 사용하는 것입니다:

image alt text

새로운 인터폴레이터 노드는 패킹을 자동 처리해 주어, 그래프가 단순하고 깔끔해집니다:

image alt text

기존에 Customized UVs 를 통해 패킹하던 작업은 VS (버텍스 셰이더) 핀에 걸어주고 PS (픽셀 셰이더) 핀에서 구합니다.

머티리얼 통계 출력도, 인터폴레이터의 현재 패킹된 것과 가능한 최대 사용량을 표시하도록 업데이트했습니다. 참고로 위 예제에서 인스트럭션 수와 인터폴레이터 사용량은 그대로입니다. 통계를 보면 2 개의 스칼라가 TexCoord[0] 노드, 나머지 6 개는 미리 스키닝된 데이터에 예약되어 있어, 총 2 개의 벡터에 8 개의 스칼라가 패킹되어 있음을 알 수 있습니다.

이 기능은 Customized UVs 와 호환되며, 결과를 같이 패킹합니다.

신규: 애셋 관리 프레임워크 (베타 프리뷰)

Asset Manager (애셋 매니저)는 에디터에서나 실행시간에 게임 전용 애셋 유형과 맵을 발견, 로드, 검사하는 데 사용할 수 있는 새로운 글로벌 오브젝트입니다. 퀘스트, 무기, 영웅과 같은 것들을 만들고 요청이 있을 때 로드하는 작업을 수월하게 해주는 프레임워크를 제공합니다. 아직 활발히 개발중인 기능이라, 숙련되지 않은 개발자나 블루프린트 전용 게임에서 사용하기에는 아직 이르며, 4.17 이나 되어야 할 것입니다. 프로젝트 세팅의 애셋 매니저 탭에서 게임의 규칙을 구성할 수 있습니다:

애셋 매니저가 검색한 프라이머리 애셋 유형은 로드 직전 실행시간에 쿼리한 뒤, 요청이 있을 때 비동기 로드 가능합니다. 또한 애셋 매니저 세팅을 통해 게임을 패키지 제작 및 릴리즈할 때 쿠킹 및 청크 규칙을 구성할 수 있습니다. AnswerHub 에서 이 기능에 대해 작성중인 문서를 참고해 보실 수 있습니다: https://answers.unrealengine.com/questions/595580/what-is-the-asset-manager.html

신규: 애셋 검사 창 [베타 프리뷰]

애셋 관리 프레임워크 기반으로 제작된 Asset Audit (애셋 검사) 창을 사용하여 디스크 크기, 메모리 사용량, 다수 애셋에 대한 일반적인 애셋 프로퍼티를 한꺼번에 검사할 수 있습니다. 콘텐츠 브라우저의 특수 버전으로, 창 > 개발자 툴 메뉴에서, 또는 콘텐츠 브라우저나 레퍼런스 뷰어의 우클릭 메뉴에서 접할 수 있습니다. 창을 연 이후에는, 버튼으로 애셋을 추가하고, 플랫폼 드롭다운으로 쿠킹된 애셋 레지스트리에서 로드한 플랫폼 데이터를 로드할 수 있습니다. PS4 에서 ShooterGame 샘플의 텍스처를 검사하는 예제입니다:

image alt text

VR: VR 용 콘솔 명령 통합

각 플랫폼마다 다른 다양한 VR 플랫폼용 콘솔 명령을 한 데 모아 통합시켜, 개발자가 쉽게 작업할 수 있는 공유 레이어를 만들었습니다.

여기에는 여러가지 장점이 있습니다:

  • 새로운 플랫폼의 독자 처리가 쉬워집니다.

  • HMD 마다 다른 인수의 뜻 일관성이 높아집니다.

  • 현재 HMD 구현 상의 중복이 줄어듭니다.

  • 모든 VR 관련 콘솔 명령에 "vr." 이라는 공통 접두사가 붙습니다. 특정 업체 전용 익스텐션은 명령 이름만 보고도 쉽게 알 수 있습니다.

  • 업데이트된 콘솔 명령은 탭 완료 기능과 내장 사용법 도움말을 지원합니다.

현재는 과도기라 이전 콘솔 명령 인식은 됩니다만, 사용할 때 폐기 경고가 뜰 것입니다.

커스텀 하드웨어 커서

이제 플랫폼에 내장된 커스텀 하드웨어 커서가 Windows, Mac, Linux에 지원됩니다! 프로젝트의 UserInterface 세팅에서 사용할 하드웨어 커서 구성이 가능합니다.

이 시스템에서는 커서에 여러가지 포맷을 제공할 수 있습니다. 예를 들어, 세팅에서 "Slate/FancyPointer" 를 기본 포인터로 쓰고싶다고 지정할 수 있습니다. 게임 content 폴더의 Slate 디렉터리에 FancyPointer.png + .cur + tiff 를 넣어두면 특정 플랫폼의 다중 해상도 지원이 가능합니다. Tiff 는 Mac에서, cur/ani 파일은 Windows에서 사용되며, 해당 플랫폼에 맞는 포맷을 찾지 못한 경우 png 를 찾습니다.

빠른 위젯 생성

UMG 위젯 생성이 최대 3 배 빨라졌습니다! 쿠킹할 때, 이제 위젯 컴파일러는 생성된 블루프린트 클래스와 같은 패키지 안에 저장되어 위젯 생성 도중 사용되는 위젯 템플릿/아키타입을 생성합니다.

테크니컬 디테일

컴파일 도중, 모든 하위 유저 위젯 및 그 트리를 포함해서 거의 완벽히 초기화된 위젯 트리를 생성하고, 모든 멤버 변수를 걸어주고(hookup), 네임드 슬롯을 초기화하고, 애니메이션 셋업 등의 작업을 합니다. 이렇게 생성 작업이 거의 완료된 위젯을 아키타입으로 사용하여 인스턴싱을 하면, 그에 해당하는 느린 버전의 StaticDuplicateObject 패쓰를 통하지 않아도 됩니다.

이 메서드에는 제약이 있는데, 이제 위젯의 컴파일 단계 일부에서 인스턴싱이 성공했는지, 또는 사용자가 서브오브젝트 프로퍼티에서 Instanced 구성을 깜빡해서 GLEO 레퍼런스가 생길 것인지 조사합니다. 다행히 그런 경우는 극히 드물텐데, UVisual (위젯 & 슬롯)은 모두 DefaultToInstanced (기본으로 인스턴싱)이므로, Instanced 플래그를 요하는 대부분의 경우는 알아서 처리해주기 때문입니다. 네이티브 코드에서 BindWidget 을 사용하는 대량 작업의 경우라면 더더욱 그렇습니다.

Release Notes

AI

  • New: Added a profiler for Environment Query System (EQS) that can be accessed through the tabs of the EQS Editor.

    • It collects data automatically during game sessions as long as UES_EQS_DEBUGGER define is set. This includes options for average and max execution time of each step (including breakdown of composite generators), number of items processed by each step, and average frequency of running, which can be useful to identify how often fail safes are actually running.

    • It collects tick load data when USE_EQS_TICKLOADDATA define is set. Each query can store up to 16384 records in cyclic buffer (~4.5 minutes at 60 FPS) showing percentage of EQS tick spent on processing it. This is displayed on the graph in EQS editor tab.

    • A console command has been added, "DumpEnvQueryStats", that saves current EQS profiler data to a file (project's Logs folder, .ue4eqs extension), which can be later loaded and inspected in the EQS Editor.

  • Bugfix: Fixed an issue with Blackboard Key Selector's "Init Selector" that resulted in it picking the first value from the Blackboard rather than the appropriately typed one.

  • Bugfix: Gameplay Task Resource's Auto Resource ID initialization is no longer cleared during Hot Reload.

  • The "Get AI Controller" is now a pure Blueprint Function.

  • Exposed Brain Component's "Is Running" and "Is Paused" functions to Blueprint.

  • Clamped AI Sight's peripheral vision angle as well as changed the UI to not allow values outside of the 0-180 range.

  • Disabled collision on Nav Modifier Volumes. Previously they had an 'Overlap All' response and generated overlap events. They are only supposed to be used for preventing navmesh generation, but overlap events could affect gameplay and are also bad for performance.

  • Made "Skip Agent Height Check When Picking Nav Data" option ignore height when picking nav data for agents. It now picks solely based on the radius when this is enabled.

Behavior Tree

  • Bugfix: Added safeguards to prevent crashes resulted from Blackboard keys being names being longer than 1024 characters.

  • Bugfix: Fixed an issue in dynamic Behavior Tree injection that was causing unexpected behavior when the main BT had more BT injection points.

  • Bugfix: Fixed an issue in Blackboard key instantiation that resulted in the instanced key never being used and BB operations always referring to the original BB entry.

Debugging Tools

  • The Gameplay Debugger's input detection has been adjusted so that Tap and Hold work correctly in fixed timestep mode.

  • Added a flag to Recast Navmesh, "Allow Nav Link As Path End", that is used to control whether path corridors can end on a navigation link or not. This may happen with partial paths and not usually desired behavior. Navigation links at the end are not allowed by default.

  • The Blueprint functions "Project Point To Navigation", "Get Random Reachable Point In Radius", and "Get Random Point In Navigable Radius" all return booleans determining if the projection/generation was successful, as well as the vector value that describes the requested point.

  • Bugfix: Fixed a memory leak in navmesh generators.

  • Bugfix: Fixed an issue that resulted in losing user settings in Static Mesh's navigation export (Nav Collision object) after changing any property of the Static Mesh.

  • Bugfix: Hand-placed AI pawns now get their Path Following Component's "My Nav Data" variable set properly.

  • Bugfix: Fixed an issue with missing update of navigation area after duplicate or undo operations on Nav Link Proxy and Nav Link Component.

  • Bugfix: Corrected the handling of path following requests by Floating Pawn Movement.

  • Bugfix: Fixed an issue with parameters of geometry trace handling drop-down navigation links. All components blocking on ECC_WorldStatic channel will now report a valid hit.

  • BugFix: HLOD's navigation collision exporting no longer causes unnecessary log output about NavCollision instances in cooked builds.

Animation

  • New: You can now rename Virtual Bones.

  • New: You can now change Virtual Bones so that you can have a Virtual Bone that is a child of another Virtual Bone.

  • New: Added "Get Body Target Transform" to the Physical Animation component, which will return the goal transform that a particular body is trying to get to.

  • New: Control rig Sequences can now be exported to Anim Sequences.

  • New: Preview Scene settings have been exposed in the existing settings tab rather than in a hidden menu of the viewport.

  • New: Support for "Curve Source" nodes to find source components on other Actors. It now searches for the property name rather than the component name.

  • New: Added "Set Preview Mesh" to the toolbar for all animation related Editors.

  • New: Updated Alembic Third-party libraries to the latest versions.

  • New: Added functionality to try and match in-engine Material asset names to FaceSet names found inside of an Alembic cache to automatically assign the correct Materials.

  • New: The Alembic Importer now supports Vertex Color data.

  • New: Added functionality to inform about changes to source data when reimporting your animation data from FBX. It now checks for the following:

    • Whether or not the sequence length has changed.

    • Whether or not previously-imported curves exist in the source data.

  • Bugfix: Fixed a crash when trying to implement a function in a child Anim Blueprint.

  • Bugfix: Fixed a crash when debugging a null Animation Sequence.

  • Bugfix: Trying to access a skinned vertex position on a mesh when using Master Pose component no longer crashes.

  • Bugfix: Attempting to bind to Skeletal Mesh with Anim Blueprint already set no longer crashes.

  • Bugfix: Fixed a crash and effector selection issue for two-bone IK.

  • Bugfix: Right-clicking the empty space in the asset shortcut drop-down no longer crashes.

  • Bugfix: Removed an ensure (warning) by reverting to default unit vectors if zero-sized lookat/lookup vectors are specified for a "Look At" node.

  • Bugfix: Removed a crash when clearing an animation of a 1D blendspace sample.

  • Bugfix: Crash fix to import code for Alembic Caches with the HDF5 backend.

  • Bugfix: Fixed an issue when adjusting curves in the Anim Curves tab using a slider when they are not currently selected.

  • Bugfix: Fixed an issue with Update Rate Optimization update rate being too high. Now we use int, so if you have a high update rate it still can go until it wraps around.

  • Bugfix: Child Anim Blueprints can now be retargeted.

  • Bugfix: Fixed flipping transforms when mirrored.

  • Bugfix: Post Process instances are now appropriately updated, even when the main Anim Instance is not using parallel update.

  • Bugfix: Fixed an issue where running the Editor in a different culture could break pins on nodes that have optional arrays of pins (ie. Animation Graph nodes like Blend By Layer).

  • Bugfix: Fixed an issue with Anim Class being set by name, causing duplicate-named Anim Blueprints to be incorrectly resolved.

  • Bugfix: Fixed an issue where "r.SkeletalMeshLODBias" was affecting meshes in the Animation Editor viewports.

  • Bugfix: Fixed an issue with Animation Preview Scene keyboard binding (I and O hotkeys now hide and show scene elements regardless of tab opened state).

  • Bugfix: Skinned Mesh LOD now updates in the editor under various physics-related circumstances.

  • Bugfix: Fixed an issue with foot placement IK doing line traces on worker threads.

  • Bugfix: Fixed an issue with Anim Blueprints that contain State Machines having blank palettes.

  • Bugfix: Renaming curves in animations now saves properly.

  • Bugfix: Fixed an issue with two-bone IK flickering around full extension when stretch is enabled.

  • Bugfix: Animation now works as expected for dynamically-bound wheeled-vehicle anim instances.

  • Bugfix: Fixed an issue where you could not undo changes from Alembic Import settings.

  • Bugfix: Fixed timing issues occurring while playing back Alembic caches.

  • Bugfix: Fixed an issue with incorrect behavior occurring when placing more than three samples in a straight line for a 2D blendspace.

  • Bugfix: Dropping a new Animation asset on an existing Sequence Player node can now be undone.

  • Bugfix: Breaking transition node connections within Animation State Machines can now be undone.

  • Bugfix: Fixed an issue to ensure that changes to animation sync markers are propagated to currently open blendspace assets.

  • Bugfix: Skeletal Mesh components tick properly when paused if "Tick Event When Paused" is enabled.

  • Bugfix: Fixed Skeletal Mesh Merge duplicating Skeletal sockets.

  • Enabled snapping for translation in the Animation viewports.

  • Removed force inline from Virtual Compression functions.

  • Removed the AnimGraph module from the Graph Editor as a dependency.

  • Bone Reference now has improved performance by caching compact post bone index.

  • Graph files have been moved to Animation Blueprint Editor.

  • We have stopped saving raw curve data into animations on cook in order to save memory and disk space.

  • Ticks now appear properly on Anim Sequence scrub bar.

  • Persona now depends publicly on Skeletal Editor.

  • Montages are now correctly initialized when created. They can be used straight away without first opening them in the Montage Editor.

  • We now propagate thread safety flags to child Animation Blueprints.

  • The Anim Notify Blueprints now start with a "received notify" event node.

  • Made single-node animation instances request clothing simulation resets when their animation is changed. This is because the new animation could be very different from the outgoing animation, and this might cause pops.

  • Refactored "Evaluate Bone Transforms" to prevent usage of Skeletal Mesh component.

    • Deprecated "Evaluate Bone Transforms" in favor of new "EvaluateSkeletalControl_AnyThread".

    • Deprecated Skeletal Mesh component argument to "Convert CS Transform To Bone Space" and "Convert Bone Space Transform To CS". Now they just take a transform.

  • When selecting bones that are non-required, we now do not render gizmos or text labels.

  • Skeletal selection does not lag behind choice made in the viewport (i.e. when showing bone weights).

  • Added accessor and modifier functions for "Start Time Offset" value in Geometry Cache components.

Animation Assets
  • New: You can now choose a preview slot in the Montage Editor.

  • Bugfix: Fixed a crash when reimporting animations with additive transform tracks.

  • Bugfix: Fixed an issue with additive Pose Asset preview being applied twice.

  • Bugfix: Compressed animation data is now included in Memory Stats for Animation Sequences.

  • Bugfix: Fixed an issue where blendspace interpolation settings would not have a direct effect and required reopening the blendspace asset.

Animation Blueprint
  • New: Added "Spline IK" node.

  • New: Added a property to Blendspace Player nodes that enables users to choose whether the play time is reset when the blendspace changes.

  • New: Animation Blueprints can now specify a Preview Mesh.

  • New: Added the "Look At" node so you can use "Look at Location" on a socket or joint, and improved the Visualizer.

  • Bugfix: Fixed a crash when "Pose Asset" contains a bone that is not in the mesh.

  • Bugfix: Fixed an assertion that could occur when selecting certain items in the Animation Blueprint editor.

  • Bugfix: Fixed a crash when diffing State Machine Transition graphs.

  • Bugfix: Fixed an issue with "Pose Handler" using mesh bone index and not compact bone index for setting up "Bone Blend Weights" array.

  • Bugfix: Fixed an issue with incorrect errors on compiling Aim Offset nodes with exposed blendspace pins.

  • Bugfix. Fixed an issue with additive nodes breaking the current pose when they have no additive animation attached.

  • Bugfix: Fixed issues pertaining to extra references to Animation Blueprints on Skeletal Mesh components.

  • Layered Bone Blend node has been optimized so that it will cache mask weights in compile time.

Import/Export
  • Bugfix: Fixed a crash when reimporting a Skeletal Mesh that has Virtual Bones.

Skeletal Mesh
  • Bugfix: Fixed a crash when using re-import button in the Skeletal Mesh Editor.

  • Bugfix: Fixed a crash related to Skeletal Mesh resources not being initialised before component is registered.

  • Bugfix: Fixed a serialization mismatch in Skeletal Mesh source buffers.

  • When importing a Skeletal Mesh, "Activate Bone Indices" now always includes parents even if it's not skinned.

Tools

  • Bugfix: Fixed a crash in Persona when rotating a bone due to single bone controllers not being initialized correctly.

  • Bugfix: Fixed an ensure when deselecting bones in Anim Blueprint editor.

  • Bugfix: Fixed an issue where mesh-customized sockets were not showing up by default in 'Active' socket filter mode.

  • Bugfix: Fixed issues related to bone removal in Skeletal Mesh LODs.

    • Issue where the "Apply" button would not show after adding bone names.

    • Issue where previously removed bones would not be restored.

    • Ensure that the Skeletal Tree is updated when bones are removed or restored.

  • Double-clicking animation assets in Content Browser will now try to re-use existing Animation Editor windows, rather than opening a new one every time.

  • Animation picker on Skeletal Mesh component is now disabled rather than hidden when no Skeletal Mesh is assigned.

  • The Soundwave-internal curve tables have been moved to the 'Advanced' rollout.

Audio

  • New: Vorbis-encoded audio files can now be streamed.

  • New: Audio streaming is now supported on Android, iOS, and XBox One.

  • Bugfix: Fixed a shutdown crash when there is a pending async audio occlusion trace.

  • Bugfix: Fixed a crash when opening a Media Sound Wave.

  • Bugfix: 'Sound Player' nodes will more efficiently load the referenced sound asset unless a 'Sound Quality' node is being used to select which 'Sound Player' nodes to consider, in which case, the current asset reference evaluation will continue to be used.

  • Bugfix: We only queue subtitles once per-wave instances playback.

Automation

  • New: Added support for -DeveloperReportOutputPath and -DeveloperReportUrl commands to permit local runs of the Automation Tool to generate reports on the report server and launch the browser to view them.

  • 'ResavePackages' commandlet now supports lighting in separate packages when using it to rebuild lighting.

  • Option to disable taking screenshots has been disabled. Screenshot comparison is an integral part of the testing so disabling them is no longer allowed.

  • The system now waits for the asset registry to finish loading assets before running tests.

Blueprints

  • New: Added the 'Remove Gameplay Tag' function to the gameplay tag function library.

  • New: Blueprints containing a String and Text variables can now be marked as multi-line, which enables values to contain newlines when pressing Shift + Enter while editing them.

  • New: Blueprint Variables can now be marked as 'Read-Only' in Blueprint Editor, which prevents them from being set in Blueprints. This behaves the same as using 'BlueprintReadOnly' instead of 'BlueprintReadWrite' on a C++ UPROPERTY() declaration.

  • New: 'Get Default Locale' has been exposed to Blueprints.

  • Macro instances that contain latent actions will now show an overlay clock icon like other latent nodes, which makes them easier to spot and understand that they impact execution flow

    image alt text

  • New: Improved comments in Blueprints.

    • Comment node text now wraps while the comment is being edited.

    • Reduced cases where the title of a comment node would clip at the end.

    • Editing the comment for a regular node using the right click menu will now show changes immediately, rather than waiting until the node was moused over again.

  • New: Added the Save and Find in Content Browser buttons to the Level Script Blueprint editor (they will save/show the map package that contains the Level Script).

  • New: Added the ability to search for delegate nodes using the function name that they are bound to.

  • New: 'Array Get' node.

    • Can toggle between returning a reference or copy.

    • Using a reference solves a longstanding issue with arrays of structs not being able to easily make changes to the items in the array.

  • New: 'Get Class Defaults' node has been extended to include output pin exceptions for Set & Map variable defaults. Like array types, the returned value is now a copy of the default value rather than a reference to it. This is done in order to avoid an accidental mutation of the Blueprint class default object.

  • New: Function inputs are now exposed as variable "Get" nodes via the right-click context menu in a Blueprint function graph context.

    • To use: In a Blueprint Function graph, right-click to access the context menu. Any input parameters will be listed as additional "Get" actions.

    • In this way, input parameters can be accessed like local variables from anywhere in the function graph; in other words, it's no longer necessary to drag wires all the way back to the Function Entry node in order to access these values.

  • New: We now support "value-based" Bitfield enum type associations in the editor for a UPROPERTY marked as 'Bitmask' with a 'BitmaskEnum' association.

    • Prior to this release, Bitfield properties did not work with associated enum types in which the enum values were explicitly set to a bitmask value (e.g. 0x80). That is, the value was assumed to always be set to the index of the bit that the flag should set in the editor ("index-based" mode).

    • To switch the associate to the new "value-based" mode, include an additional metadata key in the UENUM() declaration. Example: UENUM(Meta = (Bitmask, UseEnumValuesAsMaskValuesInEditor="true")).

  • New: Added a whitelist mechanism for handling native noexport types that can support direct field access in nativized Blueprint code.

  • Bugfix: Fixed a crash in Blueprint Editor when adding an input parameter to a Custom Event node after deleting a Function Graph containing a Create Event node.

  • Bugfix: Fixed a crash when creating a new Blueprint class from one or more selected Actors in which the root component is not Blueprint-spawnable.

  • Bugfix: Fixed a crash on load in nativized EDL-enabled builds with non-nativized child Blueprint class assets.

  • Bugfix: Fixed a runtime Blueprint VM crash upon removing an element from set after consecutive add/remove iterations.

  • Bugfix: Fixed a crash that could occur when splitting a struct pin on a collapsed graph node.

  • Bugfix: Fixed a crash when trying to use non-supported types as Blueprint map keys.

  • Bugfix: Fixed a crash that could occur when changing a Map's value type string to vector. Map variables are properly cleared when value type is changed to an incompatible type.

  • Bugfix: Fixed a crash when compiling a Blueprint that contains a split pin in a collapsed graph.

  • Bugfix: Fixed a crash loading Blueprints that contain a Blueprint node that no longer exists in code.

  • Bugfix: Fixed a crash when using the Straighten Connection shortcut key (and some other related issues with actions done after the Context Menu is closed).

  • Bugfix: Fixed a crash when opening a Blueprint with a parent class that no longer exists.

  • Bugfix: Fixed a crash with the merge tool when the source control provide is SVN and there are gaps in the revision history. (This may still not work correctly, but it won't crash. The full fix will be covered with UE-43603)

  • Bugfix: Fixed a crash when attempting to name component with a very long name.

  • Bugfix: Fixed a crash that could happen when running Cook On The Fly server with nested struct assets.

  • Bugfix: Fixed a crash that would happen when a level in Blueprint was auto-saved.

  • Bugfix: Fixed an assertion that could occur when compiling a Blueprint with certain nodes (Select, Math Expressions, etc.)

  • Bugfix: Fixed a crash that could occur when reparenting a component Blueprint.

  • Bugfix: Fixed a crash that could happen when setting maps and sets of strings and certain structs.

  • Bugfix: Fixed a crash that would occur when passing a self node through a CustomEvent ref parameter.

  • Bugfix: Fixed a crash that could occur when adding a new Blueprint function and immediately undoing.

  • Bugfix: Fixed a crash that could occur after renaming the category of an implemented interface function inherited from a native C++ parent class in the 'My Blueprint' panel.

  • Bugfix: Fixed a crash that could occur when editing a local curve variable's default value in a Blueprint graph.

  • Bugfix: Fixed an ensure misfire in PIE exit when using Play as Listen Server Mode.

  • Bugfix: Fixed an infinite loop case in the Math Expression node.

  • Bugfix: Fixed an issue where misaligned memory access of noexport struct properties leading to incorrectly initialized values in a nativized cooked build.

  • Bugfix: Fixed an issue with broken collision shapes at runtime when cooking with the optimized Blueprint component instancing data feature turned on.

  • Bugfix: Fixed an issue with a Bitmask Enum type validation failure when serializing a Make Bitmask Literal node

  • Bugfix: Fixed an issue with log spam when compiling a Blueprint function with a local TSet or TMap variable.

  • Bugfix: Fixed an issue with broken pin wires after expanding a duplicated collapsed graph node.

  • Bugfix: Fixed an issue with invalid custom Enum type selection on member fields in the User-Defined Structure editor after a reload.

  • Bugfix: Improved context menu "whole world" algorithm to proper take into consideration localisation when searching for terms.

  • Bugfix: Fixed an issue where renaming interface input/output parameters will no longer cause broken pin links at interface function call sites in Blueprints that are currently loaded.

  • Bugfix: Fixed an issue with broken graph node pin links caused by renaming interface function input/output parameters prior to compiling the interface, but after renaming the function itself.

  • Bugfix: Fixed an inability to save after choosing a Level Script Blueprint class as the default value for a class input pin in a non-Level Script Blueprint class function graph.

  • Bugfix: Fixed an issue where Blueprints containing a 'Key Get Display Name' node will no longer be marked dirty when opening the Blueprint.

  • Bugfix: Fixed an issue where the user defined variable tooltip was not showing up when hovering over Get/Set nodes for local variables.

  • Bugfix: Fixed an issue with old versions of Blueprints being diffed accidentally showing up in Find-in-Blueprints search results.

  • Bugfix: Fixed some issue in Blueprint Diffing where properties of nodes edited in a Details panel would not show up as differences (this impacted Animation Graph nodes most heavily).

  • Bugfix: Fixed an issue in Blueprint nativization that could cause bad interface function calls to be generated.

  • Bugfix: Fixed an issue that could cause stale Blueprint instances in a hidden sub-level to spam a runtime error.

  • Bugfix: Fixed an issue that could cause a Blueprint 'mismatch' error when using 'Set' and 'Map' node.

  • Bugfix: Fixed an issue that could cause struct asset defaults to be wiped on editor reload.

  • Bugfix: Fixed an issue that could cause a packaging error when running with Blueprint nativization and no Blueprints were nativized.

  • Bugfix: Fixed an issue that removed the ability to set Blueprint object variables as 'config' variables, as you cannot set a object reference from a config.

  • Bugfix: Fixed an issue with reroute nodes so that a new output connection will propagate that type through to the node's inputs.

  • Bugfix: Fixed an issue so that 'Get Data Table Row' nodes are now compatible with DataTable variables.

  • Bugfix: Fixed an issue that could cause material parameter setting in a Blueprint construction script to fail.

  • Bugfix: Fixed an issue that could cause overlap events to fire multiple times in PIE.

  • Bugfix: Fixed an issue that would generate the nativized Blueprint plugin even if no Blueprint files were nativized.

  • Bugfix: Fixed an issue that would cause certain components to be orphaned and hidden from the component hierarchy.

  • Bugfix: Fixed an issue that could cause a level Blueprint's bound delegate nodes to not trigger.

  • Bugfix: Fixed an issue in Blueprint nativization that would cause cyclical logic (loops, etc.) to not iterate past the first iteration.

  • Bugfix: Fixed an issue in Blueprint nativization that could cause Blueprint subclasses to ignore their overridden model and default to their parent's.

  • Bugfix: Fixed an issue where non-nativized Blueprints were getting dropped from the cooked asset registry file when running with Blueprint nativization.

  • Bugfix: Fixed an issue where there would be a nativized Blueprint asset build error when there are no native code dependencies.

  • Bugfix: Fixed an issue with incorrect Blueprint graph pin value display names for user-defined enum types.

  • Bugfix: Fixed the variable 'config' setting tooltip to report the correct config file for the user to use.

  • Bugfix: Fixed an issue that could cause Blueprint variables set from a config to have their values improperly overwritten.

  • Bugfix: Fixed several issues with Switch Blueprint nodes not keeping their node and property UI in sync.

  • Bugfix: Fixed several issues where changing pawn/hud/state class from the Level editor toolbar would not work properly until the project was reloaded.

  • Bugfix: Fixed a stale class reference in interface properties that reference a Blueprint defined interface that has been recompiled.

  • Bugfix: Fixed an issue where 'Get Values' and 'Get Keys' nodes were not providing correct results for Map variables that have had values removed.

  • Bugfix: Fixed an issue where Blueprint functions that have all their return nodes pruned (ie. are not connected to anything) now have the correct output pins at call sites.

  • Bugfix: Fixed an issue where 'Movie Scene Sequence' and related code was not working when Blueprints were nativized.

  • Bugfix: Fixed an issue in nativized packaged builds that would cause default values to be lost.

  • Bugfix: Fixed 'Enum As Byte' related warnings in nativized packaged builds. 'Enum As Byte' is no longer used when nativizing Blueprints.

  • Bugfix: Fixed issues with Blueprint nativization where it didn't correctly include headers necessary for owners of subobjects, and instances where all modules needed by the generated code weren't being founds. This fixes one cause of "Cannot open include file" errors when packaging with Blueprint Nativization enabled.

  • Nodes in the blueprint editor again use their custom cursor (grab hand when hovering over a node and crosshairs when hovering over pins).

  • 'Logarithm' node added to the Blueprint Math library.

  • 'Set' pins on 'Intersection', 'Union' and 'Difference' nodes now infer their values uniformly.

  • Out of date Class Default Objects are no longer duplicated when compiling a Blueprint, reducing blueprints compilation time

  • Successive calls to Set Intersect, Union or Difference now provide correct results, previously the Set was not cleared before calculating the new result

  • 'Trace By Profile' collision functions have been exposed to Blueprints.

  • Nativize code is now more precise about dependencies, reducing the resulting executable size and compiler load.

  • Blueprints that override an inheritable component are no longer 'data only'. Blueprints with overridden components but no extra functions now load without losing data.

  • Blueprints that extend types that implement 'Needs Load For Server' or 'Needs Load For Client' now honor those functions, meaning they will not be cooked for targets that their type wants to be excluded from.

  • Delegates in nativized packaged builds correctly prevent double registration.

  • Blueprints used as a child actor class will no longer be marked dirty when compiling the class that references them.

  • When duplicating a Blueprint component, that component will now be a sibling of the duplicated node, not a child of it unless it is the root node being duplicated.

  • Duplicated root nodes will have their scale set to (1,1,1) to avoid applying the scale multiplier twice.

  • Blueprintable Components are no longer considered experimental, they have been enabled by default for several versions.

  • The ticking behavior of latent actions in components has been changed to match how they behave in actors. When the component ticks, the latent actions will now be processed at the same time, rather than happening later in the frame when latent actions for non-ticking actors and components are processed. This does change behavior, so there is a console variable (t.TickComponentLatentActionsWithTheComponent) that can be used to revert to the older behavior until affected component Blueprints that depended on the old ordering behavior can be fixed up. The cvar should be treated as deprecated; it will be removed in a future release.

  • Updated Blueprint nativization so that it generates source files compatible with 'include what you use' (IWYU).

  • Moved nativized Blueprint plugin generation to the project's 'Intermediate\Plugins' folder.

  • Removed make/break nodes from the Blueprint menu for structs that aren't marked as a 'BlueprintType'.

  • Updated marquee selection in graph editors. Ctrl dragging now inverts nodes' selection state, instead of only deselecting them (holding alt is now for pure deselection).

  • The Actor Details view will now refresh property mappings for the current Actor instances selection after a bytecode-only recompile of its Blueprint class as a dependency during reinstancing.

  • Child Blueprint class assets are now marked as dirty if its parent Blueprint class incurs a structural change. This alerts the user that updates to the Child Blueprint would need to be saved on exit.

  • We now emit C++ ctor initialization code for nested default subobjects when nativizing a Blueprint class at cook time.

  • Instanced Static Mesh transform edits are now reflected in the Blueprint editor's preview scene.

  • The editor will now raise an error at cook time after an attempt to nativize a Blueprint class that also implements a native C++ interface with a pure virtual function declaration that is not also marked up with UFUNCTION. This is because we cannot nativize a Blueprint class that does not also have an implementation of a pure virtual function inherited from the interface.

  • C++ interfaces with one or more pure virtual function declarations not also tagged with UFUNCTION are now excluded from the list of available "Implementable" interfaces in the Blueprint class editor.

  • Non-nativized child Blueprint classes will now properly override a nativized parent Blueprint class's component defaults at runtime in a nativized cooked build.

  • We will now implicitly nativize any child Blueprint class that overrides one or more BlueprintCallable functions inherited from a parent Blueprint class that is also nativized.

  • The Blueprint diff tool now reports when a component changes its type between revisions

  • Blueprints are now only dirtied if edited properties are from objects in the Blueprint's package.

Core

  • New: Support added for "double" and 'fname' stat types in UFE stat export to CSV.

  • New: Pak files can now have their index encrypted with AES, preventing them from being opened by unrealpak.

    • An AES key must be provided in the project Encryption.ini, and then index encryption can be enabled in the project packaging settings in the editor.

    When either pak index encryption or signing are enabled in the Project Settings, pak ini encryption must also be enabled in order to avoid a potential security issue. All of these settings can be found in the Packaging section of the Project Settings dialog in the editor.

  • New: Added "Get Component For Axis" and "Set Component For Axis" to FVector and FRotator.

  • New: Added support for -iterate for content plugins that require path remapping during cook/packaging.

  • New: Added a "CookedOnly" plugin type, for plugins meant only to be loaded in cooked games (in support of Blueprint nativization).

  • New: Added a Json Object Converter to add support for saving and loading TMap and TSet UProperties.

  • New: Absolute paths are now allowed in -UserDir= argument.

  • New: Added ability for games to use command line parameters for map overriding in shipping builds if their target.cs file defines UE_ALLOW_MAP_OVERRIDE_IN_SHIPPING macro to 1.

  • New: Added support for instanced elements in TMap and TSet properties being copied during "Copy Properties For Unrelated Objects."

    • This fixes an issue where instanced fields could lose data during recompilation of a Blueprint.

  • New: Added a new method Platform Misc "Get OS Version" that returns a string representing the raw OS version info.

  • New: All HTTP implementations now use a consistent User-Agent string (specified via the overridable function Generic Platform Http "Get Default User Agent" method).

    • Added a Platform and OSVersion string to the default value (platform=FPlatformMisc::IniPlatformName() and osver=FPlatformMisc::GetOSVersion()).

  • Bugfix: Fixed a crash with startup in the runtime asset manager when the on-disc cache already contains more data than the system is configured to use.

  • Bugfix: Fixed a crash in 'Chunk Cache Worker' function constructor.

  • Bugfix: Fixed a crash when launching "Play In Editor" session caused by missing audio data if its DDC data was not present and the audio was streamed in.

  • Bugfix: Fixed a crash when UObject can be added to GC cluster only if all of its Outers can also be added to it.

  • Bugfix: Fixed an assert with LocalExportIndex.IsNull. Now the Event Driven Loader code will properly disambiguate imports with the same name and the same outer name.

  • Bugfix: Fixed a crash when Hot Reloading caused by reinstancing UEngine objects.

  • Bugfix: Fixed an occasional crash during Hot Reload CDO reinstancing that was caused by a redundant insertion into TMap invalidating an existing reference into that TMap.

  • Bugfix: Fixed a crash when importing a Blueprint which contains a non-empty TMap with an enum class key.

  • Bugfix: Fixed a crash when Hot Reloading a project which contains a user-defined struct.

  • when hot reloading a project which contains a user-defined struct.

  • Bugfix: Fixed a crash when deserializing a TMap property item with instanced elements, where the CDO contains default element values for that property.

  • Bugfix: Fixed the use of many printf non-literal formatting strings, as these are potential security issues.

  • Bugfix: Fixed an issue with incorrect error code being returned from UnrealHeaderTool when -WarningsAsErrors and -Verbose are specified code.

  • Bugfix: Fixed an issue with the error code returned by UnrealHeaderTool when an error occurs during preparsing of headers.

  • Bugfix: Fixed a persistent stat metadata warning generated during PIE..

  • Bugfix: Fixed an issue with FMonitoredProcess to prevent infinite loop in -nothreading mode.

  • Bugfix: Fixed an issue for runtime asset cache not invalidating files with an outdated version number.

  • Bugfix: Fixed stats warnings because each new slate loading screen thread has the same stat name, but is potentially assigned to a different thread.

  • Bugfix: Fixed an issue with CSV parser missing empty cells at the end of the string.

  • Bugfix: Fixed an issue with external plugin cooking and deployment by remapping plugin directories upon cook & deployment Tested directory structures:

    • D:\SomePluginDir

    • D:\UE4\AnotherPluginDir

    • D:\UE4\Engine\Plugins

    • D:\UE4\MyProject\Plugins

  • Bugfix: Fixed a memory leak in MallocBinned which affects the mobile platforms (Android, iOS).

  • Bugfix: Fixed a typo in comments for LODColoration in BaseEngine.ini.

  • Bugfix: Fixed the Log message in "Exclusive Load Package Time Tracker."

  • Bugfix: Fixed an issue where "log.timestamp" command would not work because it was incorrectly handled by "log" console command.

  • Bugfix: Fixed an issue where the logging system could hang when running out of disk space while flushing log and fixed unexpected concurrency assert when flushing the log buffer to disk.

  • Bugfix: Fixed a deadlock when flushing log file while it's already being flushed by a flush timer on the async log writer thread.

  • Bugfix: Fixed a memory leak when running with -nullrhi on the commandline in cooked games caused by shader resources not being destroyed.

  • Bugfix: Fixed an issue to make sure the engine is properly cleaned up on UnrealHeaderTool early exit to prevent UnrealHeaderTool hangs.

  • Bugfix: Fixed an issue to make sure that streamed-in SoundWaves get added to Garbage Collection clusters.

  • Removed dependency preloading system from sync and async loading paths. It has been superseded by the new event driven loading system.

  • Removed remaining references to AES_KEY, instead using the encryption key delegates to access the key where needed.

  • Refactored encryption and signing key access in unrealpak to make it easier to use.

  • Make content projects generate a stub executable when encryption or signing keys are specified so that keys can be embedded correctly.

  • Separate pak cache granularity from pak signing chunk size in the EDL loader.

  • Increase "Serial Size" and "Serial Offset" in FObjectExport to 64bits, to handle larger file sizes.

  • Added some validation of the class index in exportmap entries.

  • Added missing support for compiling plugins external to Engine/Plugins & Game/Plugins.

  • Disabled the 'HeartBeat' function on platforms that don't actually want to use the HeartbeatThread.

  • 'None' is now going to be properly considered by the engine as an invalid filename.

  • The editor will now collect garbage after a map is loaded to make sure any stale components or other objects that are no longer needed are destroyed. This is to make sure that these components are not resurrected by another editor operations like duplication.

  • Made sure the async log writer flushes the log archive even if there's no serialization requests to prevent situations where some of the recent requests haven't been flushed to disk

  • Reduced the code size for the generated Static Register Natives functions.

  • Disabled the garbage collector when recompiling child Blueprints, as is already done for the parent Blueprint.

  • Simplified Unreal Header Tool's code generation logic.

  • Implemented Lex "To Sanitized String" for double.

  • The function Local Player Context "Is Valid" now also checks that the player controller has a player set.

Editor and Tools

  • New: UnrealGameSync now includes a workspace-specific file filter, separately to the global file filter.

  • New: UnrealGameSync now supports pop-up notification for build failures on content changes.

    • To mark a badge as applicable to users submitting content changes, add +ContentBadges=Name to the [Notifications] section of the project specific configuration file at /Build/UnrealGameSync.ini.

  • New: UnrealGameSync now allows a project to specify filters for the streams that should be displayed for fast-switching to.

    • The "Quick Select Stream List" setting in the "Options" section of the Project Settings references a depot path containing a list of strings used to filter the stream list. An option is shown to switch back to showing all available streams, if desired.

  • New: Added support for in memory packages. Helps distinguish between packages which can and can't be cooked.

  • New: Added a Blueprint function to convert a Render Texture to Texture2d. This is only available for use in the Editor.

  • New: Custom Depth can now be enabled for Foliage.

  • New: You can now color-code all of the windows in the editor in order to visually distinguish them when working across multiple branches or projects

    • You can adjust the 'Editor Window Background Color' for a subtle effect, as the default background is already a pretty dark grey:

      image alt text

    • Or you can edit the tint in the two brushes (which sets the texture to a white default one) to get a very brazen effect:

      image alt text

  • New: Added Data Table export/import support for TMap and TSet.

  • New: Updated the Windows platform to use the newer Vista+ style browser dialogs, rather than the older XP style dialogs.

  • New: You can now empty the text value within an FText property or pin.

  • New: Added support for .ini-driven classes to use a specific platform's config hierarchy, so that the editor on a desktop platform can read .ini settings from other platforms .ini files.

    • This will allow for NDA'd platforms to keep their ini settings in protected files, but still be editable by the editor.

    • Moved project settings for console platforms over

    • See UObject::GetConfigOverridePlatform()

  • New: Scene importing now allows for plugins to expose new scene import factory types.

  • New: Overhauled "Call In Editor" support and promoted it so it can be used on functions in any class, not just Blueprints derived from AActor:

    • "Call In Editor" can now be used on native UFUNCTION() declarations (e.g., UFUNCTION(Category=CoolCommands, CallInEditor)).

    • Blueprint declared functions can also be marked as CallInEditor (in addition to custom events), which allows you to set the category and tooltip for the buttons.

    • Now shows each function as a separate button, placed in the category associated with the function.

    • Removed the duplicate copies of properties placed in the Blutility section.

    • Prevented operating on functions that have parameters or return values, which could crash before.

    • Added a scoped transaction around "Call In Editor" execution so changes made can be undone.

    • The button strip entry is now searchable by function name or tooltip.

  • New: Added a new Details view option: "Show Hidden Properties while Playing"

    • Enabling this allows you to see every property on selected objects that belong to a simulating world, even non-visible and non-editable properties.

    • This feature is very useful for inspection and debugging, because you can see all of the internals of your Actors and Objects.

    • Be careful when changing values for properties that are not really intended to be changed at runtime. You could introduce instability or even corrupt data.

    • Note that this setting is saved for your entire project.

  • New: Sequencer additions and updates:

    • Tracks can now be prioritized based on their subscene hierarchical bias value. Higher bias values take precedence.

    • Fixed particle system restore state so that it gets the proper initial active state of the particle.

    • Added a generic past menu for Master (root) tracks.

    • Changed the time snapping interval in the toolbar UI so that it no longer additionally updates the Sequencer setting. The setting is only used to initialize the time snapping interval of the Level Sequence.

    • Added translate keys with Ctrl and Left-Right arrows.

    • Added Level Sequence Actor button in the Details panel to open Sequencer.

    • Duplicate shot now puts the duplicate on the next available row, keeping the start/end times the same.

  • New: You can now isolate/select all sections using a specific Material slot.

  • New: The FBX importer updates:

    • Now imports collision models under the FBX LOD Group.

    • Now applies the transform from FBX options only one time for the whole import.

    • When importing an FBX file from Blender, the importer now removes the root node name "armature."

    • No longer removes the socket created in UE4 Editor when using reimport. If affects only imported socket.

  • New: Added some LOD Setting options to the FBX Import Options window. Users can now specify the following Static Mesh LOD Settings Options:

    • Auto Compute LOD Distance

    • Minimum LOD Number

    • LOD number

  • New: The FBX Importer now fills two more Material Inputs (Texture only) from the FBX Material:

    • Specular Factor imported as "Roughness"

    • Shininess imported as "Metallic"

  • New: The FBX exporter can now export with the Front X-Axis. The new option is under the Editor Preferences settings.

  • New: TMaps now support editing structs as keys from within the Details panel.

  • New: The Data Table Row Editor now contains a Reset to Default control.

  • New: Properties added to the header of a Details panel group (ie. via IDetailGroup::HeaderProperty()) now have copy/paste actions exposed in the Context Menu.

  • New: Added the possibility in Slate to reset property group to their default value.

  • New: Added the possibility to perform the following actions in Save/Load Level dialog:

    • Rename

    • Delete

    • Create a New Folder

    • Show in Explorer

    • Show the Size Map tool

  • Bugfix: Fixed a crash when selecting components from an Actor's component tree and then undoing

  • Bugfix: Fixed a crash when attempting to open multiple cooked assets at once in the editor.

  • Bugfix: Fixed a crash when pressing PIE button several times before PIE session begins.

  • Bugfix: Fixed a crash that could occur during seamless travel while playing in a Play-in-Editor session with the "Use single process" option unchecked.

  • Bugfix: Fixed a crash while using the "Delete" button inside of the HLOD outliner while having a Proxy mesh opened in the Static Mesh Editor.

  • Bugfix: Fixed a crash when using import into level with .obj file.

  • Bugfix: Fixed a crash when dragging a re-import scene and there is new asset created.

  • Bugfix: Fixed a crash when creating too many LODs when importing a Static Mesh.

  • Bugfix: Fixed a crash with High Resolution Screenshot Tool that could happen when the Screen Percentage is set to a value other than 100%.

  • Bugfix: Fixed an issue with Device Output Log showing partial lines sometimes.

  • Bugfix: Fixed an issue where array properties would revert to the default values when duplicating an Actor.

  • Bugfix: Fixed an issue with Details panels becoming unusable if "Show Only Modified Properties" is enabled and there are no modified properties.

  • Bugfix: Fixed an issue so that thumbnails for Material assets now respect the "used particle system sprites flag" and show a quad instead of a sphere by default.

  • Bugfix: Fixed an issue for outdated error message instructions for how to fix being unable to launch on an iOS device.

  • Bugfix: Fixed an issue with "Save Current As" option not saving the current level and only saving the Persistent Level and then reloading everything thus causing work to be lost if editing a sub-level.

  • Bugfix: Fixed an issue with Material Instances being marked dirty when opening.

  • Bugfix: Fixed an issue with TAssetSubClassOf properties being reset on undo.

  • Bugfix: Fixed an issue that could cause the wrong Blueprint instance to be duplicated, or copy/pasted.

  • Bugfix: Fixed an issue with the Focus action in the Static Mesh Editor viewport.

  • Bugfix: Fixed an issue with Color Customization so that curve color names are "R", "G", "B", "A" instead of None.

  • Bugfix: Fixed an issue with user's setting for Texture Mip LOD size being incorrectly clamped.

  • Bugfix: Fixed an issue where lighting rig rotations were not set / saved correctly for Preview Scene Profiles.

  • Bugfix: Fixed an issue where auto-exposure values from the Preview Scene Profiles were not correctly applied

  • Bugfix: Fixed an issue where HLOD's "Override Screen Size" would not propagate on a LOD Actor directly.

  • Bugfix: Fixed an issue where the Material Slot assignment wasn't correctly restored on reimport.

  • Bugfix: Fixed an issue to prevent importing more LODs than the maximum allows for.

  • Bugfix: Fixed an issue with the FBX importer's "Front X-Axis conversion". We remove the scale of the camera and adjust the orientation of both the camera and light.

  • Bugfix: Fixed an issue with Auto Reimport "Directory to Monitor" feature.

  • Bugfix: Fixed some issues with the Import commandlet:

    • Fixed possible crash when importing FBX files.

    • Now makes sure that the imported assets are saved when there is no source control.

  • Bugfix: Fixed an issue with Static Mesh conversion from UE4 4.14 to earlier versions.

  • Bugfix: Fixed an issue with the Merge Actors Tool that was sometimes assigning wrong Material IDs to mesh sections.

  • Bugfix: Fixed an issue where the Number of Players and Dedicated Server settings for PIE would not persist correctly after Editor shutdown.

  • Bugfix: Fixed issues related to Auto Reimport:

    • Fixed a crash when attempting to import to mount points that do not exist.

    • Now allow for new assets to be created from monitored directories.

    • Settings now use a path picker when specifying the "Map Directory To" field.

  • Bugfix: Fixed an issue so that Property Editor Inline Class Filter now shows unloaded Blueprint Classes properly in the Editor.

  • Bugfix: Fixed an issue with Undo/Redo transactions of Color Grading.

  • Iterative cooking .ini setting checking improvements have been made. More to come in a future release.

  • Dependency checking performance improvements for iterative cook. More to come in a future release.

  • Panning in orbit mode now takes in account camera speed setting.

  • Pivot Painter 2 is a general purpose vertex animation toolset that comes with specialized subset of material functions to automate foliage animation. The script and material function set are more flexible, easier to use and provide an improved workflow over the first release. Additionally, a content example map ships with the editor to demonstrate how Pivot Painter's output can be referenced in the editor.

  • Added a disclaimer popup for the first time a user enters VR Mode

  • All asset properties in Details panels now have thumbnails on by default.

  • Disabled editor sounds that play when you PIE, simulate or possess the player by default. There is now a setting in the editor preferences to control this.

  • The output log should now have the same text color as other panels in the editor.

  • Removed hard coded list of thumbnails, preventing objects with valid thumbnails from showing up. Thumbnails are now shown by default. Use meta=(DisplayThumbnail=false) on a property to hide thumbnails.

  • Import data and thumbnail data are now transactional. You can now undo and redo their edits.

  • Reread in the target RHIs array every time the list of shader types is needed, instead of caching, because the user could change the settings in the editor, then click cook.

  • The Paint Fill tool has changed the way it works in Texture Weight Painting mode, it now fills the mesh with the currently selected texture weight index.

  • Limited the ability of setting up the Hierarchical Level of Detail (HLOD) system in levels which are contained as streaming levels in other assets.

  • The FBX importer now builds the Static Mesh only once when there is many LODs.

  • The section Material slot assignment is now correctly restored on reimport.

  • When swapping the Static Mesh referenced by a Static Mesh component, we now just clean up the Material Override that exceed the Static Mesh Material array size, instead of clearing all overrides.

  • When using the Full Scene Importer the "Scene Import" data asset can now specify a different source file for reimport.

  • Data pin style preferences are now saved on Editor shutdown.

  • The "Fixup Redirects" commandlet now ensures that files that are marked for delete are correctly submitted to source control.

  • The "Resave Packages" commandlet will now submit files that are marked for delete.

  • Blocking volumes will actually be added to the level when placed via the "Place Actor" command instead of generating warnings.

  • Values that are directly entered for float properties with a specified Delta value will no longer snap to the nearest delta when losing focus.

  • Actor components can now be scaled to negative values using the transform gizmo.

  • Map properties now fully support customized property types used as keys.

  • When deleting an Actor, we now display the name of the referencers.

  • Using the Convert Actor feature now won't change the Actor level.

  • Primitive Statistics window will now properly update itself when adding new Levels.

  • Optimized the lightmap UVs generation to speed up the Static Meshes import flow when packing the UVs into higher resolutions.

Content Browser
  • New: Added "Resave All" functionality to Content Browser folders.

  • New: Added a way to view/copy a list of references (including those that aren't loaded) to the Reference Viewer.

  • New: Importing CSV files will now show the name of the CSV file in the import dialog.

  • New: Added the ability to auto resize column in "Column View" by double clicking column splitters

  • Bugfix: Fixed an issue where folders wouldn't be removed from the Content Browser when deleting them.

  • Bugfix: Fixed an issue with the Reference Viewer where it only ever used the default thumbnail.

  • Bugfix: Fixed some issues for gathering cached asset dependency data.

    • We no longer load dependency data that doesn't have the correct package name.

    • We no longer populate the dependency results when "Gather Depends on Data" is set to false.

  • Bugfix: Fixed an issue that prevented textures from updating correctly if a source texture with the same name as a texture asset is imported from a location that differs from the asset's original source image.

  • Bugfix: Fixed an issue where the Force Feedback "Play" and "Stop" icons weren't rendered correctly and would only be displayed when hovering over the asset or when the asset is currently playing.

  • Bugfix: The Content Browser file path will now update correctly if it is pointing to a path that is deleted through the Sources Panel.

  • Bugfix: Duplicating an asset will correctly name it if there is another one of the same name.

  • Moving a newly-created asset before saving it will no longer save an empty package in the asset's original location.

  • When reimporting multiple assets, the "Yes to All" and "No to All" dialog options will prevent future reimport dialogs from appearing for the same asset type in the same operation.

  • Improve visual of "Column View" in Content Browser.

Cooker
  • Bugfix: Fixed an issue with the rebuild lighting commandlet not checking out files correctly.

  • Bugfix: Fixed an issue where running the same DLC profile created by the Mobile Patching Wizard would increase HTTP chunk size.

  • Bugfix: Fixed an issue with the cooker always cooking "All Maps" even when a single map was specified on commandline.

Foliage
  • New: Added the Show Flag "Foliage Occlusion Bounds" in the Advanced menu to see the bounds generated by the occlusion tree.

  • New: When moving a foliage asset to a new Level, you will now be prompted to save the Foliage Type as an asset if it's a local asset.

  • New: Improved the Foliage painting algorithm to properly support Random Pitch/Yaw when the setting "Collision with World" is enabled.

  • Bugfix: Fixed a crash that occurred when moving the mouse over certain content while in Foliage mode.

  • Bugfix: Fixed an issue that cause foliage thumbnails to incorrectly be duplicated if many of them are onscreen at once.

  • Bugfix: Fixed an issue where removing a Foliage Type wouldn't properly refresh the Details panel.

  • Bugfix: Fixed an issue where the foliage location would shift when using undo/redo transactions.

  • Optimized the occurrence of rebuilding the occlusion tree when performing actions in the editor.

Landscape
  • New: We now automatically fill Landscape with the first created Landscape's Layer Info object.

  • New: Added sorting to Landscape Target Layer tabs. You can now sort by Material definition (which is the default one), alphabetical, or custom a using drag-and-drop operation.

  • New: Added a visibility toggle to only show the used Target Layers by the loaded components.

  • Bugfix: Fixed a crash when changing multipole Landscape Blend Layer nodes from Weight blend to Height blend.

  • Bugfix: Fixed an issue with user Landscape shortcuts not working in the Level Viewport.

  • Bugfix: Fixed an issue when performing an Undo action would delete the newly created Landscape and return back to the new Landscape window.

  • Bugfix: Fixed an issue where Landscape holes (visibility mask) was causing NavMesh problems at the borders of the Landscape component.

  • We have improved when a Level will be marked as dirty when manipulating a Landscape Spline.

  • The Landscape tools Material synchronisation has been updated between game thread and render thread.

  • When adding a new Component, if a Landscape info object exists it will determine which one is used based on its neighbors.

Material Editor
  • Bugfix: Material Custom nodes that contain "tab" characters will now correctly display tab characters after copy/paste.

Matinee
  • Bugfix: Fixed an issue with how tooltips display when using a Material Function in your Material.

PhAT
  • Bugfix: Fixed "Multiple Values" being displayed in Body Setup properties when single bone has multiple bodies

Sequencer
  • New: Added the ability to specify additional Event Receivers for Level Sequence Actors.

  • New: Event tracks can now be defined to trigger events at the start of evaluation, after objects are spawned, or at the end of evaluation.

  • New: Added the ability to retrieve bound objects from Blueprint.

  • New: There have been improvements to the Binding overrides.

    • Added the ability to override spawnable bindings.

    • Added the ability to override bindings in sub Sequences.

    • Deprecated "Get Sequence Bindings" node in favor of "Get Sequence Binding", which is more robust, and provides a better UI/UX for selecting single bindings

    • Added Drag/Drop support for Binding overrides.

  • New: Added the ability to specify Event Receivers on Event Tracks.

    • These are defined by right-clicking on the Event Track in the Sequencer tree, and adding Event Receivers.

    • Such objects must be defined within the Sequence hierarchy (as well as parents, children, grandchildren etc).

  • New: Added a reworked, more generic property path handling system in the Sequencer object change listener.

  • New: Unlocked the Cine Camera Post Process Depth of Field to use options other than CircleDoF.

  • New: "Pre Roll" and "Post Roll" are now exposed at the section level for all sections.

  • New: Enabled "Use Custom Start Frame" and "Use Custom End Frame" when rendering a single shot from the menu.

  • New: You can now set the fade color in the Track display.

  • New: Audio row heights are now also resizable by dragging on the bottom end of the track lane in the track area view.

  • New: Sequencer now re-evaluates when starting PIE or Simulate. This can be disabled with "Bind Sequencer to PIE" and "Bind Sequencer to Simulate" in the Play-in-Editor Advanced settings.

  • New: Split "Snap to the Dragged Key" option into two options, "Snap to the Pressed Key", and "Snap to the Dragged Key".

  • New: Added a loop selection range. If there is no selection range, loop mode is restricted to loop or no loop.

  • New: Added hotkeys to set the selection range to the next and previous shot (page up, page down). Also, added hotkey to set the playback range to all the shots (end).

  • New: You can now set sequencer audio components bIsUISound to false so that they don't continue playing when the game is paused.

  • New: Added an option to instance sub sequences when creating a Master Sequence.

  • New: Notify streaming system prior to Camera cuts by default. To enable, users will need to enable the Pre Roll section of the Camera cuts for the streaming system to activate prior to cutting to cameras.

  • Bugfix: Fixed a crash when selecting keyframes in the viewport.

  • Bugfix: Fixed a crash with Sequencer Recorder when clearing properties to record.

  • Bugfix: Fixed an issue where tick prerequisites were not being set up for Actors streamed in from a streaming Level.

  • Bugfix: Fixed an issue where Sequencer was animating objects from the wrong world.

  • Bugfix: Fixed an issue with event parameter structs being able to be garbage collected, resulting in NULL structs potentially being written out.

  • Bugfix: Fixed an issue with animation looping in Sequencer.

  • Bugfix: Fixed an issue with Sequencer Recorder to fix duplicate components getting recorded.

  • Bugfix: Fixed an issue with FBX import with camera and light animation key imports.

  • Bugfix: Fixed an issue with autokey not setting a keyframe for Slate color with the specified color.

  • Bugfix: Fixed an issue for filtering to include Child nodes.

  • Bugfix: Fixed an issue where the Sub Track node deletion so that all sub tracks aren't deleted, only the row being requested.

  • Bugfix: Fixed an issue to invalidate expired objects when Blueprints are compiled. This fixes Actor references to now handle sections that need to have their GUIDs updated (ie. attach tracks).

  • Bugfix: Fixed an issue so that when finishing a scrub, playback status is now correctly set to stopped rather than set to a stepping state.

  • Bugfix: Fixed a missing command binding alt-r to record selected objects into sequencer.

  • Bugfix: Fixed an issue to Filter hidden functions, which fixes a bug where the field of view property for a cinematic camera appears to be animatable,. It should be hidden just like it is in the property editor.

  • Added a warning when Sequencer tries to write to properties that have changed type.

  • Sequencer templates are now always regenerated on load

  • Level Sequence frame snapshots now take account of fixed-frame interval offsets, and overlapping shot sections on the same row.

  • We now convert Linear Color to Color for fade to get the correct fade color in viewport.

  • Audio waveforms now show peak samples with smoothed RMS in the center.

  • Set max tick rate when in game if force fixed interval playback is enabled.

  • Cache player fade state so that restore state will return the values to the pre animated state.

Source Control
  • Bugfix: Fixed an issue with Git plugin to update the status on directories hotfix.

  • With the Git plugin, use use asynchronous "MarkForAdd" and "CheckIn" operations for the initial commit.

  • Allow binary files in Git stored via git-fat, git-lfs, etc to be diffed.

Static Mesh Editor
  • Bugfix: The camera position now stays in place after reimporting from inside the Static Mesh Editor.

Traps
  • Subversion binaries have been updated to 1.9.5. They should no longer crash when used.

VR-Editor
  • New: Improved functionality for the VR Mode:

    • Improved the look and feel of the rotation gizmo handles while in VR Mode.

    • Improved interaction for painting terrain, foliage, and mesh painting.

    • Improved gizmo handle animations.

  • New: VR Mode is now bound with the Editor Sound settings.

  • New: VR Mode motion controllers now have collision when in simulate.

  • Bugfix: Fixed VR Mode selection now to respect a component's "Is Selectable" state.

  • Bugfix: Fixed an issue with not being able to open a project in the Project Browser with VR Mode auto-entry enabled and the HMD active.

Windows
  • New: Custom Depth can now be enabled for Landscapes

  • Bugfix: Fixed an issue with Landscape spline segment splitting when using streaming levels.

  • Bugfix: Fixed an issue with Landscape painting in orthographic viewports when the painted area's Z value was below 0.

World Browser
  • Bugfix: Fixed an issue when moving a sublevel in World Composition browser does not appear in Undo History.

World Outliner
  • New: Actors in the World Outliner will now bring their children with them when moved into a newly created folder.

Gameplay Framework

  • New: Added an option for components to opt out of physics impulses on damage using "Apply Impulse On Damage".

  • New: Exposed component's "Ignore Radial Impulse" and "Ignore Radial Force" flags to Blueprints. "Ignore Radial Impulse" is now properly respected when applying impulse to relevant movement components.

  • New: The Player Controller's "Should Perform Full Ticket When Paused" can now be set from Blueprints and the Details panel.

  • New: Spawn Sound and Force Feedback Blueprint nodes now have a "Auto Destroy" pin that can be set to false to allow the component to be reused after the sound/pattern complete.

  • New: The number of buttons that can be used by Raw Input is now 20.

  • New: Fields of Attribute MetaData are now editable.

  • New: In the Ability System, the "Cancel Ability" has been exposed to Blueprints.

  • New: For Cameras, support has been added for specifying a default aspect ratio and whether or not to constrain to it in a Camera Manager subclass.

    • Normally the information would come from a Camera component, but this is useful when using custom view logic that doesn't source from a Camera component as the view target.

  • New: Added "On Component Collision Settings Changed Event" delegate to Primitive Component. Fixed Skeletal Mesh Component not calling Super implementation for "On Component Collision Settings Changed".

  • New: Refactored Character Movement Component determination of net send rate when combining moves into a virtual function Get Client Net Send Delta Time. Added configurable values to Game Network Manager under Script/Engine.GameNetworkManager] in BaseGame.ini: "ClientNetSendMoveDeltaTime", "ClientNetSendMoveDeltaTime", "ClientNetSendMoveThrottleAtNetSpeed", "ClientNetSendMoveThrottleOverPlayerCount".

    • This replaces the values that were hardcoded in the network code for characters and enables easier configuration of client send rates for movement.

  • New: We've increased Pawn location replication precision to 2 decimal places from 0. Prevents replicated pawns from being inside geometry by a large amount. Removed CVars controlling CharacterMovement proxy shrink amount and made those instanced properties on the component.

  • New: Added a flag to Character Movement Component to determine whether or not character should Sweep while using "NavWalking", instead of relying on Generate Overlaps flag.

  • New: Added "Apply Gravity While Jumping" flag to Character Movement Component. This helps to reduce Framerate Dependent Jump Height issues when disabled, but raises jump height. This is disabled by default.

  • Bugfix: Fixed a crash due to null World Settings when rendering a thumbnail.

  • Bugfix: Fixed a crash when opening Blueprint after adding a component to native class referenced by a Child Actor Component.

  • Bugfix: Fixed several issues with renaming or deleting Gameplay Tags from the Gameplay Tag Project Settings page.

  • Bugfix: Fixed an issue when calling "Set Visibility" or "Set Hidden In Game" all children of the component will now properly be reconsidered as to whether they should render.

  • Bugfix: After duplicating an Actor, components added to the source instance will now have the correct position in the duplicate.

  • Bugfix: Ability actions can now be properly bound to input components.

  • Bugfix: Construction scripts will no longer be incorrectly rerun on Actors in a level that was hidden and then later made visible again.

  • Bugfix: Fixed an issue warning about invalid world content when loading maps with child Actor components in it.

  • Bugfix: Fixed cases where built lighting on child actors could be lost when loading a level.

  • Bugfix: Fixed case where child actor template was not cleared when setting child actor class to null.

  • Bugfix: Fixed issues with seamless travel in PIE and sub-levels shared between different Persistent Levels.

  • Bugfix: Fixed issues where Child Actor Component's "Parent Component" would be null on the client.

  • Bugfix: Fixed accumulated forces in Character Movement applied incorrectly when movement mode or active state changes.

    • Added "Clear Accumulated Forces"

    • "Add Force" and related functions now avoid adding the force if in Movement Mode is set to "None". When ticking in "None", forces are cleared so they don't pile up until the next valid movement mode. Forces are also cleared if the updated component changes or when the capsule simulates physics.

    • "Deactivate" implemented to stop movement and call "Clear Accumulated Forces".

    • "Clear Accumulated Forces" now also clears pending launch velocity. Exposed "Clear Accumulated Forces" to Blueprints.

    • "Apply Accumulated Forces" does not call "Clear Accumulated Forces", since that would prevent pending launch.

    • "Add Force" and "Add Impulse" now also check that character movement is active (not deactivated, able to tick).

    • "Simulate Movement" handles pending launch and clears forces regardless of whether it's simulated proxy.

    • Inlined Actor Component "Is Active" for performance.

  • Bugfix: Fixed characters sliding when landing on slanted surfaces or stairs, when aggressive "Perch" settings could cause a line trace (from the center of a capsule) instead of capsule trace and thereby screw up the floor distance checks.

  • Bugfix: Fixed the case of people moving a Character mesh in Begin Play rather than in the Editor or Construction Script and not having the mesh offset reflected correctly in network games.

    • Added function "Cache Initial Mesh Offset" to cache initial mesh offset, used as the target for network smoothing. This takes location and rotation params so you can be explicit on the values, in case you try to change these during network smoothing, where reading the relative offsets would be skewed.

    • Added a call to this function from Begin Play in addition to the existing call from "Post Initialize Components", and exposed this to Blueprints as well for custom changes to mesh offset at runtime.

  • Bugfix: Fixed an issue with Projectile Movement Component continuing to simulate (and generate hit events) after it is deactivated during simulation. "Has Stopped Simulation" function now checks if "Is Active" is false.

  • Bugfix: Fixed an issue with "Get Welded Bodies" so that it properly returns Skeletal Bodies, instead of the default body for Skeletal Mesh Components.

  • Bugfix: Fixed an issue with infinite jump on client when Jump Max Hold Time is not 0.

  • Stop dynamic force feedback when initiating Actor is destroyed.

  • Clarified the tooltip on the "Inverse Lerp" function.

  • In the Movement Component "Deactivate" calls "Stop Movement" to clear cached velocity.

    • It was undesirable that reactivation many seconds or frames later would restore a stale velocity.

  • The "Collision.ListComponentWithResponseToProfile" command now includes pending kill objects. Use this to inspect collision responses between objects in a game world.

  • Optimized the Math Library "Get Forward Vector" (converts Rotator to forward direction). This way we avoid building a matrix, and avoids 1 more SinCos call.

Learning Resources

Sample Content
  • New: ShooterGame now supports dedicated servers on PC, Mac, and Linux!

Localization

  • New: Improvements to culture switching and LocRes files.

    • LocRes files now de-duplicate translations when they're generated, which can result in smaller LocRes files.

    • The localization compilation step now produces a LocMeta file, which contains meta-data specifying the native culture during compile, and where the native LocRes file can be found.

    • Changing cultures now loads the native localization data prior to loading the non-native translations to ensure that translations are always applied to a consistent base.

    • The "leet" culture (available when localization testing is enabled) is now always applied against the native translation, and correctly restores non-translated text when switching away from the "leet" culture.

    • "-culture=leet" now works correctly on the command line ("-leet" also works).

    • LoadLocalizationResourcesForCulture is no longer called multiple times during initialization of the text localization manager.

  • New: Updated Fast Decimal Format to support the correct 0-9 numerals for the current locale

    • These are typically still Latin, but Middle Eastern languages have some variants.

    • This addresses an inconsistency between FText formatting of numbers and dates (since numbers always used Latin, but dates used the culture correct numerals).

  • New: Split the monolithic culture concept in UE4

    • UE4 has historically only supported the concept of a single monolithic "culture" that applied to both text localization and internationalization, as well as all asset localization. Typically the "culture" was set to the "locale" of the OS, however that could be undesirable or incorrect on platforms (such as newer versions of Windows) that have a distinct concept of "language" (for localization) and "locale" (for internationalization).

    • This change splits the concept of "culture" into "language" and "locale", and also adds the concept of "asset groups". The language is now used to work out which localization we should use, and the locale is used to control how numbers/dates/times/etc are formatted within our internationalization library.

    • Asset groups expand on the language used by asset localization and allow you to create a group of asset classes that can be assigned a different culture than the main game language. A typical use-case of this would be creating an "audio" group that could, for example, be set to Japanese while the rest of the game runs in English.

    • If your game doesn't care about the distinction between language and locale, and doesn't need to use asset groups, then you're able to continue to use "culture" as you always have. If, however, you do care about those things, then you'll likely want to avoid using the "culture" directly (as it's now a very aggressive setting that overrides all others), and instead favor using language/locale (games will typically treat these as the same) and asset groups as separate concepts (both in settings, and in your in-game UI).

    • The language or locale for a game can be controlled by settings within the "Internationalization" section of your configs (this would typically be set in your Game User Settings config, in the same way that "culture" works), eg)

      [Internationalization]
      language=fr
      locale=fr
    • The asset groups for a game can be controlled by settings within the "Internationalization.AssetGroupClasses" and "Internationalization.AssetGroupCultures" sections of your configs (the asset group class definition would typically be set in your DefaultGame config, and the cultures the groups use would typically be set in your Game User Settings config), eg)

      [Internationalization.AssetGroupClasses]
      +Audio=SoundWave
      +Audio=DialogueWave
      [Internationalization.AssetGroupCultures]
      +Audio=ja
  • Bugfix: Fixed an assert that could trigger when an IME composition is aborted during widget destruction.

  • Bugfix: Fixed a crash that could happen if a config was loaded while the Gather Text commandlet was running.

  • Bugfix: Fixed text namespaces being treated as case-insensitive when exported to JSON manifests and archives.

  • Bugfix: Fixed text format history being clobbered by reference collection.

  • Bugfix: Fixed the pluralization of the decorator text during drag-and-drop operations.

  • Vastly reduced the number of allocations that happen when rebuilding text at runtime.

Networking

  • New: Network dormancy efficiency has been improved greatly (if you have large number of dormant actors, they now will have less overhead).

  • New: Network consider/relevancy code is now also much more efficient. Overall, expect a 20+% improvement in performance if you have lots of Actors in the network Actor list.

  • New: Adaptive network update frequency logic is now on by default. This should improve network performance for games that weren't opt'ing in to this feature.

    • Net.UseAdaptiveNetUpdateFrequency is now 1 by default.

  • New: Replays now support network relevancy.

    • All connections are considered when determining if an Actor is relevant.

    • Enable by setting demo.UseNetRelevancy to 1.

    • Override cull distance with demo.CullDistanceOverride.

  • New: Added more info about the connection to logs when you see "FRepLayout::UpdateChangelistHistory: History overflow, forcing history dump" message.

  • New: Updated OnlineSubSystemNull to properly account for game state and "Allow Join In Progress".

  • Bugfix: Fixed a crash that could occur when updating unmapped objects.

  • Bugfix: Fixed an issue with IPAddressBSD validation when setting IP from string.

  • Bugfix: Fixed a memory leak in network drivers.

  • Bugfix: Fixed an issue with syncing of non-contiguious UENUMs over networks.

  • AActor "Pending Net Update" has been deprecated. Please use "Pending Net Update" that is now on FNetworkObjectInfo (obtained by calling "Get Network Object Info).

  • UNetDriver "Get Network Actor" is now deprecated. Use UNetDriver "Get Network Object Info" instead.

  • Disabled net.PartialBunchReliableThreshold for replays (we don't need to worry about bunch fragment sizes since there is no packet loss for replay connections).

Online

  • New: Steamworks integration has been updated to support version 1.39, including updated steam controller support!

  • New: Web Browser module no longer directly depends on Online Subsystem plugins.

    • It uses the Online Engine Interface shim to explicitly depend on the engine and will use Online Subsystem features when that module is optionally added.

  • New: Added a new overload for Online Session "Find Friend Session" in the session interface that can retrieve sessions for multiple friends.

  • New: Sending and accepting invites on dedicated servers on Steam is now supported.

  • New: Updated OpenSSL libraries to use BCrypt on Windows in order to reduce memory allocations.

Other

  • New: Added a "Buffering" media player event.

  • New: The Plugin Browser now supports customizations to allow for context-specific plugin creation.

  • Bugfix: Fixed a crash with Media Assets in "Tick Video" after media player is garbage collected.

  • Bugfix: Fixed an issue to prevent the default cooked sandbox from trying to read non-cooked assets.

  • Bugfix: Fixed a message router thread not being woken up right away on shutdown.Crashreporter uploads/downloads crash data from AWS

  • Search button is disabled after clicking it once to prevent accidental double-clicks.

  • Reading the config hierarchy for TVOS now matches IOS to get the correct bundle id when packaging a project

Paper2D

  • Bugfix: Custom tile maps using collision can now be created at runtime on any platform without crashing. However on iOS/Android/HTML5 only the boxes and spheres used in the per-tile collision shapes have effect; arbitrary convex collision (e.g., slopes or other triangle-based collision) will not cause collisions or overlaps until support for PhysX runtime cooking is added to these platforms.

  • Bugfix: The Paper2D flipbook editor now shows the current frame correctly when the animation timeline is longer than the editor window and the scroll bar is moved to the right.

  • Bugfix: Paper2D flipbook editor now shows the correct number of frames; previously, it was one frame short.

Physics

  • New: Added sprite to Physics Thruster Component (previously this was only available on Physics Thruster Actor).

  • New: Exposed "Set All Physics Angular Velocity" to Blueprints.

  • New: Added finer-grain PhysX stat information that is available by using "stat physxtasks".

  • New: Added the ability to specify whether a ragdoll is in the sync or async scene with "Use Async Scene".

  • New: Changed default contact-gen method to PCM. This is the default in PhysX 3.4.

  • New: Added "Is In Air" method to Vehicle Wheel.

  • New: For the Wheeled Vehicle Movement Component, the Mass dependent wheel properties now update when mass is updated.

  • New: Created "Add Force At Location Local" function to allow component space forces.

  • New: Added a new Physics settings "Enable Stabilization". Stabilization can help stacks of simulated bodies to come to rest.

  • Bugfix: Fixed a crash in anim dynamics when a world was not valid during pre-update.

  • Bugfix: Fixed a crash when saving sub-levels that don't currently have a correctly initialized scene.

  • Bugfix: Fixed an issue with incorrect slider for "initial Average Frame Rate" physics setting.

  • Bugfix: Fixed an issue with physics constraint warning messages in Message Log. These now list Component/Actor name correctly.

  • Bugfix: Fixed an issue with editing Box and Capsule collision primitive rotations by storing rotation as a Rotator rather than Quaternion.

  • Bugfix: Editing collision profiles in Editor Preferences no longer discards edits.

  • Bugfix: "Find Closest Bone" function no longer ignores the "Required Physics Asset" option.

  • Bugfix: Fixed an issue teleport not working for physical animation component.

  • Bugfix: Fixed an issue incorrect inertia tensor computation for cubes, which was being doubled.

  • Bugfix: Fixed an issue with kinematic body interpolation in substepping causing invalid raycasting, sweeping, or overlapping.

  • Bugfix: Physics Constraint component now works as expected when its target is a Child Actor component.

  • Bugfix: Fixed an issue with collisions between components with CCD enabled having unreliable behavior.

  • Bugfix: Fixed an edge case where generating collision data could cause the engine to hang in an infinite loop.

  • Bugfix: Fixed a regression with Raycasts against Capsules returning invalid hits.

  • Bugfix: Instanced Static Mesh now properly creates physics state when set to Stationary.

  • Bugfix: Fixed a memory leak caused by keeping PhysX shapes in memory after they are no longer being used.

  • Expanded self-collision culling for clothing by providing a scale to tweak the culling queries. This makes a tradeoff between performance and accuracy.

  • Added a guard against infinitely thin geometry, which fixes some NANs.

  • Performance improvements to Anim node "Rigid Body".

  • Physics performance is improved by skipping the update of kinematic bodies when they haven't moved.

Platforms

  • New: Add logging for the NUI GPU reserve so we can see when it's enabled and disabled.

  • New: Exposed JAVA_HOME setting in Android SDK Project Settings on Mac.

  • New: Added "Platform Handle Splash Screen" to deal with hiding splash screen properly on Startup Movies.

  • New: Implemented support for new controllers (Xbox Wireless, SteelSeries Stratus XL, PS4).

    • Note: there are two implementations for Xbox Wireless due to differences in firmware. Firmware before 3.1.1221.0 does not use standard mapping which you can enable by setting the Android.OldXBoxWirelessFirmware CVar to 1 (defaults to new firmware).

  • New: Added support for "r.ScreenPercentage" on mobile allowing the game scene to be rendered at lower resolution than the UI. Requires MobileHDR to be enabled.

  • New: On-screen warnings now appear when a mobile shader permutation required to correctly render the current scene's lighting setup has been disabled in Project Settings.

  • New: Made some big DeviceProfile changes, particularly for the protected platforms.

    • Changed the "type" of some DPs from WindowsNoEditor, etc to Windows. It should be a platform, not a random string.

    • With that change, the platform can be used to save out protected platform DP .ini files to subdirectories, maintaining secrecy

    • Added Config/[PlatformName]/ConfidentialPlatform.ini files so that the DP loading code knows to look in their directories for DPs. See FGenericPlatformMisc::GetConfidentialPlatforms() for more information.

  • New: When uploading a HTML5 project to AWS S3, it now supports "signature version 4" authentication and better error message feedback on upload failures.

  • New: Added "use fixed timestep" setting option for HTML5 builds (This has been separated from Engine > General Settings - Framerate).

    • This is slightly different to "Smooth Framerate" and "Fixed Framerate".

    • NOTE: Fixing the timestep does not guarantee the actual framerate. Calculations based on delta time may be adversely affected by this.

  • New: Added iOS/Android support for new Audio Mixer.

  • New: "Does Save Game Exist" will now show a message if the save data is corrupt.

  • New: Initial support for voice chat in the Android platform. To use enable the Voice module in DefaultEngine.ini, in the level bp create a session, and in project settings > Platforms > Android > Advanced APKPackaging, check the setting 'Add permissions to support Voice chat (RECORD_AUDIO)'. After this create a multiplayer game between two android devices. For more information check pull request #2894.

  • Bugfix: Fixed a crash with mobile feature level preview when the Low Quality Lightmap shader permutation is disabled.

  • Bugfix: Fixed a crash in clothing on platforms that don't support clothing.

  • Bugfix: Fixed a crash when backgrounding or sleeping on iOS Metal devices.

  • Bugfix: Fixed a crash with UIImagePickerController.

  • Bugfix: Fixed an issue with executable path for stripping Android debug symbols (handle non-Windows properly).

  • Bugfix: Fixed memory reporting for Uniform Buffers in "stat rhi".

  • Bugfix: Fixed a slow memory leak in FD3D12UniqueDescriptorTable.

  • Bugfix: Fixed rendering of batched Slate primitives in D3D11.x.

  • Bugfix: Fixed an issue with S3 public link generator for "Shipping" builds filename.

  • Bugfix: Fixed an issue with iOS IDFV string allocation.

  • Bugfix: Fixed UPL processing on iOS plist files.

  • Bugfix: Fixed network byte ordering for iOS multiplayer sessions.

  • Disabled the game analytics anonymous usage data sent to Epic on the console platforms.

  • Save 66MB of memory by disabling the unused default SHAPE heap in XAudio2.

  • Stop the audio thread from using the 7th CPU core as it can be pre-empted and not get enough execution time.

  • Add -distribution when iOS distribution Packaging. with IPhonePackager.exe.

  • Changed mouse cursor to be always visible when running in Mobile Preview.

  • Refactored memory allocation functions (BinnedAllocFromOS) on all platforms. Made Binned2 malloc work on Linux.

All Mobile
  • Bugfix: Fixed a crash in mobile patching utilities mount method.

  • Bugfix: Fixed an issue with the shader compile for Landscape on platforms below SM4 feature level.

Android
  • New: Bad package names are now detected and APK generation is stopped with a proper error message instead of failing during Java compiling.

    • Package names with fewer than 2 segments are not allowed (e.g., "myproject" is not allowed, but "com.myproject" is legal).

    • Only alphanumeric characters and underscore are allowed in the package name (Note: hyphens in the project name will be converted to underscores, but any other hyphens need to be corrected in Android project settings).

    • All segments must start with a letter; if your project name starts with a letter you will need to replace the [PROJECT] part of the package name in Android project settings.

    • Reserved Java keywords may not be used as the full segment; appending an underscore or other legal characters will fix this.

    • Segments may not be empty (e.g. "com..myproject" is not legal).

  • New: Larger OBB files embedded in APK are now allowed by bypassing Asset Manager.

  • New: We've implemented a first pass of Google Cloud Messaging plugin. This is considered an experimental feature for this release.

  • New: Added missing key codes for keyboard input (@ and #).

  • New: Added a drop-down with some common console commands on Android to the console dialog.

  • New: Patches ant.bat to handle long command line issue on Windows.

    • Copies original ant.bat to ant.orig.bat and writes a new ant.bat which uses subst with an unused drive letter to shorten paths).

    • Note: you can edit the generated ant.bat if you need to change the drive letter used; the editor will not replace it if ant.orig.bat is found.

  • New: Editor now checks to make sure that at least SDK Android-23 is selected and installed. There will be an error message if an earlier version is installed.

  • New: Updated AAR handling to deal with versioning, subproject dependencies for resources, and scope (ignore test).

  • New: Added "Game Activity On New Intent Additions" section to Android Unreal Plugin Language (UPL).

  • New: Added support for using native virtual keyboard with Slate widgets instead of the dialog currently used for text input.

    • Events are triggered when the virtual keyboard is shown and hidden.

    • The show event includes the area of the screen that is covered by the virtual keyboard.

    • This feature is exposed in the Android Project Settings as an experimental feature checkbox.

  • Bugfix: Fixed a crash that could happen when closing the Android web browser.

  • Bugfix: Fixed an issue to handle spaces in ANT_HOME path in generated ant.bat patch.

  • Bugfix: Fixed an issue with application hanging on returning from the lockscreen if orientation is Landscape.

  • Bugfix: Fixed an issue to correct the log warning about Target SDK and permissions.

  • Bugfix: Fixed an issue with Launch On when multiple architectures are enabled in the project.

  • Bugfix: Fixed an issue with ad banner location on Android 7.0 devices.

  • Bugfix: Fixed some documentation errors in UnrealPluginLanguage.cs.

  • Bugfix: Fixed the executable path for stripping Android debug symbols for non-Windows platforms.

  • Bugfix: Fixed an issue with password hiding in input dialog.

  • Bugfix: Fixed an issue with EGL linking issues for ARM64 libraries.

  • Bugfix: Fixed an issue to save and restore texture filtering for movie playback in all cases.

  • Bugfix: Fixed an issue with Mac and Linux install and uninstall scripts if ANDROID_HOME is not set.

  • Bugfix: Fixed an issue with ShowLoginUI interface change in Game Circle plugin.

  • Bugfix: Fixed an issue with HTTPChunkInstaller texture format checks and missing #define warning.

  • Bugfix: Corrected AndroidManifest.xml required features for "Daydream and Cardboard" option when GoogleVR plugin enabled.

  • Bugfix: Fixed an issue to prevent inserting extra permissions into AndroidManifest.xml multiple times from Project Settings.

  • Bugfix: The correct APK file name is now used when launching from editor for Android.

  • Bugfix: Fixed issues with experimental keyboard.

    • Ensure the local scope ScreenRect passed into "On Virtual Keyboard Shown" in AndroidJNI is captured by value instead of by reference.

    • Moved ShowVirtualKeyboardInput's "Keyboard Showing" early-out checks into the UI thread task. This enables the keyboard to continue showing when changing focus between multiple Editable Text Box widgets.

  • Bugfix: Fixed an issue with locations on non-ARMv7 GoogleVR libraries so that it is properly filtered by active architecture.

  • Bugfix: Fixed an issue to properly restore state for Android devices not using separate context for movie playback.

  • Bugfix: Removed an obsolete warning with Java 1.5. The java.source and java.target are now set to 1.7.

  • Only disable Java console command receiver for Shipping builds.

  • Build configuration is passed to UPL for access during packaging as $S(Configuration).

  • Reenabled GooglePlay for ARM64 now that it doesn't crash.

  • Changed Gear VR installLocation to auto as now required by Oculus.

  • Rebuilt ICU libraries for Android with timezones enabled and updated build scripts.

  • Android media player now pauses and resumes with application state.

  • "Is Packaging For Daydream" only returns true if GoogleVR plugin is enabled.

HTML5
  • New: Emscripten toolchain has been upgraded to 1.37.9.

    • Web assembly

    • WebGL 2

  • New: There has been an update to GameX template.

    • Multiple (parallel) downloads with progress percentage updates.

    • Test for wasm and WebGL 2 capabilities.

  • New: Updates to python build scripts.

  • New: Configurable .ini settings have been exposed to the editor. These can be found in Project Settings > Engine > HTML5.

  • New: Added support for emscripten "-pre-js" and "-post-js" option when building for HTML5.

  • New: Added support for WebGL 2 shader to turn on Instance Static Mesh Vertex Factory.

  • Bugfix: Fixed an issue with AWS S3 shareable link for shipping builds.

  • Bugfix: Fixed some issues with WebGL 2 shaders.

  • Bugfix: Fixed an issue with HTML5 plugin when Blueprint projects are promoted to code projects automatically.

  • The recommendation from emscripten developers is to use "-separate-asm" option for asm.js builds.

  • Added many new UE4 patches to package HTML on Linux.

  • Since connections are not closed manually (server side), send a dummy payload with content-length data.

Import/Export
  • New: Set Java source and target to 1.7 (fixes Java 1.5 obsolete warnings).

  • New: Added support for changing the variable "r.MobileContentScaleFactor" at runtime on Android. This is useful for device-specific resolution tweaking.

  • Bugfix: Fixed an issue where HTML5 video in a Web Browser widget would only output sound but no video on Android.

  • Bugfix: Fixed an issue where the red and blue channels were reversed in screenshots taken on Android in Vulkan mode.

  • Disabled eglSwapInterval since it can cause issues with some drivers.

  • Changed text for Android Mobile Deferred Renderer setting to indicate that it's only supported on Nvidia K1 and X1 devices.

iOS
  • New: As we move towards the next version of iOS, we will be moving towards 64-bit support only. We have added messaging in this release to start the process of this migration.

  • New: IOS now utilizes the Library/Caches directory to save any data on device. This includes logs and save games. IPhonePackager has been updated to pull the data from this location as well as the Documents directory.

  • New: Xcode 8.3 is properly supported in this release.

  • Bugfix: Fixed a crash if Text Box widget is closed before text is finished being entered.

  • Bugfix: Fixed a crash in the OnlineSubsystem when it is disabled on iOS.

  • Bugfix: Fixed an issue with static audio noise on iOS devices.

  • Bugfix: Fixed an issue with remote compiling by unconverting the path back to host when reading from the module file name.

  • Bugfix: Fixed a memory leak on texture creation with Bulk Data in OpenGLTexture.cpp.

  • Bugfix: Fixed an issue with the device profile names for iPad Pro 9.7 and 12.9.

Linux
  • New: Added pooling of OS allocations on Linux, greatly reducing the need to call mmap/munmap() and avoiding running into vm.max_map_count limit when loading large projects.

  • New: Install of MIME types during setup is now supported.

  • New: UnrealPak is no longer included in the default make target, the prebuilt binary will be used instead.

  • Bugfix: Fixed a crash in ShaderCompileWorker due to misaligned strings.

  • Bugfix: Fixed starting Linux programs using FPlatformProcess::CreateProc() from a path with space.

  • Bugfix: Fixed various issues with Vulkan RHI on Linux.

  • Bugfix: SlateDlg now appropriately compares filter extensions in a case-insensitive way, so both .fbx and .FBX work.

  • Bugfix: Fixed bogus "unable to make config file writable" message (the operation was actually succeeding).

  • Bugfix: Fixed clang 4.0 warnings.

  • Bugfix: Fixed inability to rebuild lighting in ResavePackages commandlet on Mac and Linux.

  • Bugfix: Fixed some problems when working from directories that have space character in their names.

  • Bugfix: Fixed older versions of Linux cross-toolchain (ones using LINUX_ROOT instead of LINUX_MULTIARCH_ROOT) not being detected.

  • Bugfix: Fixed a memory leak in callstack symbolication on Linux. This makes memory profiling work again.

  • Bugfix: Fixed an issue with Linux editor splash screen image being wrong when no project has been opened.

  • Bugfix: Fixed MoveFile to work across file systems.

  • Bugfix: Removed redundant RootDir() and EngineDir() on Linux.

Mac
  • New: Enable Metal Shader Model 5 support on Intel as of 10.12.4 and later.

  • New: On Macs that do not support Metal, but erroneously report that they do, show a message box that tells users that the application cannot run instead of crashing on a failed assert.

  • New: Removed Mac OpenGL RHI files and disabled building of OpenGL RHI on Mac.

  • New: Limited support added for exposing debug events to Apple's Instruments "Points of Interest" tool.

  • New: Added RHISetResourceAliasability_RenderThread to FDynamicRHI for RHIs to implement simple render-target aliasing.

  • New: Added FApplePlatformObject, a custom block allocator for Objective-C types (with NSZombie support) which is now used in Metal RHI to decrease allocation costs of Objective-C types.

  • New: Limited support for Xcode automatic code-signing for iOS/tvOS.

  • New: Reimplement RQT_AbsoluteTime for Metal using a similar emulation to OpenGL on Mac so that the scalability system can correctly set the default graphics options. Not all drivers support this and in those cases the scalability settings are determined by an alternative, fixed, code-path.

  • Bugfix: Fixed mouse position issues in fullscreen mode on Mac.

  • Bugfix: Fixed an issue in Avf Media Player causing looped movies to only play once.

  • Worked around Metal's lack of implicit type-casting that was causing incorrect rendering in the Distance Field Ambient Occlusion and Shadows shaders.

  • Re-ordered the options in MetalRHI's internal debug options (Console Variable: "rhi.Metal.RuntimeDebugLevel") to make it more efficient.

  • Minimisation of render-target changes in some passes, notably Scene Occlusion and DBuffer Decals.

Tools
  • Bugfix: Fixed a rare crash with the Web Browser widget on iOS.

  • Bugfix: Fixed iPhonePackager errors in output log when opening Project Settings on Windows.

  • Bugfix: Fixed Get Max Samplers returning an incorrect value for iOS OpenGL, which could have suppressed some warnings for shaders that used more than 8 samplers.

  • Removed duplicate gc.MaxObjectsInGame setting in IOSEngine.ini.

Windows
  • Bugfix: Fixed a problem on Windows where the cursor would get locked to a part of the screen after switching from fullscreen to windowed while the cursor was unlocked.

Programming

  • New: Added an experimental Android option to enable Shipping builds with hidden symbol visibility by default. (bBuildWithHiddenSymbolVisibility).

    • Add JNI_METHOD for java accessible native functions, without this java will trigger an unsatisfiedlinkerror exception.

    • This can significantly reduce the size of the final .so file.

  • New: Added support for map file generation with Android.

  • New: Crash reporter is no longer staged by default when packaging from the editor. The default endpoint for crashes was an Epic server, so including it in packaged games by default was not useful.

  • New: Script plugins can now specify dependencies which should trigger UnrealHeaderTool to be re-run, by overriding the IScriptGeneratorPluginInterface.GetExternalDependencies() method.

  • Bugfix: Fixed a crash where Canvas wouldn't update font engine services if it was never created.

  • Bugfix: Fixed an issue with Automation Tool exception when running Perforce commands if multiple brokers are present in the server configuration.

  • Android links with -gc-sections to remove unused code/data.

  • Program targets can now be excluded from the full solution build roster by setting bBuildInSolutionByDefault to false from their .target.cs file.

Rendering

  • New: Added support for Window PIX.

  • New: Enabled support for NVIDIA Aftermath. On Aftermath enabled executables you can now get a GPU callstack when a GPU crash is detected.

  • New: Enabled support for global Distance Field shaders on GL 4.3 and Vulkan SM5.

  • New: Added support for Quad overdraw viewmode in the Forward Renderer.

  • New: Add support for per-component Skeletal Mesh skin weight overrides.

  • New: Added /VIRTUALIZEDIRECTX option to XgConsole for XGE shader compiling to work on remote machines without DX installed.

  • New: Added support for Structured-Buffer resource views to Metal RHI.

  • New: Added AMD path to experimental D3D11 HDR support.

  • New: Exposed the r.DisableDistortion cvar for toggling distortion rendering.

  • New: The high level rendering code is now PipelineStateObject aware which will allow us to reduce complexity in the rendering backends of Vulkan, Metal and Dx12 in the future.

  • New:Added FShaderCodeLibrary which handles de-duplication of shaders during content cooking and the shader code has moved into a separate library for cooked content runtime loading. This reduces package sizes and load-time overhead.

  • New: Added RHIShaderLibrary for platform specific native shader library implementations. This allows each platform to provide its own optimal shader library implementations.

  • New: Added Metal (MacOS and iOS) native shader library where shaders are loaded from a single Metal library improving the memory footprint, load time, and runtime compile times.

  • New: As part of the cook process for Metal, the archiving process also generate text shaders that can be used when running with optimized Metal shaders. Run with optimized shaders and while debugging with text source.

  • New: Added command line option "-noheartbeatthread" to disable heart beat thread.

  • New: Full refactor of the GPU Skin Cache to fix multiple issues related to Editor, Persona, per-frame numbering. Memory limit is now set per World in the Project Settings > Rendering section.

  • New: ShaderCache now supports running with multithreaded rendering. Command line flag "-norhithread" is no longer required to enable this feature and can now be removed if it was being used solely for this purpose.

  • Bugfix: Fixed a crash with D3D12 in "Update Texture 2D".

  • Bugfix: Fixed an assertion failure in basepass when trying to draw a mesh with Post Process Material.

  • Bugfix: Fixed a crash when the Tile Renderer renders before any other renderer. This could happen in rare cases on Editor bootup.

  • Bugfix: Fixed a crash accessing mesh Material arrays with invalid index.

  • Bugfix: Fixed a potential crash when rendering to accessible buffer.

  • Bugfix: Fixed a possible crash when failing to import cubemaps.

  • Bugfix: Fixed a crash for MacOS/Metal when compiling Materials using the Vector Noise node.

  • Bugfix: Fixed overflow issues that could occur on mali based devices when rendering DoF with bright objects.

  • Bugfix: Various Vulkan fixes:

    • Compiles in Linux.

    • Many cubemap issues squashed.

    • Changed the scratch reflection cubemap clear to SetRenderTargestsAndClear, instead of SetRenderTarget() / Clear().

    • Added compute fences.

  • Bugfix: Fixed several sRGB related issues with Retainer Box widget.

  • Bugfix: Fixed an issue with prepass/basepass z-fighting, caused by bad vertex welding in depth-only indexbuffer.

  • Bugfix: Fixed an issue with velocity rendering when an off axis projection matrix changes from frame to frame.

    • Affects very few people. Cave rendering and stereo glasses but not HMDs.

  • Bugfix: Fixed an issue with scene motion blur data is only updated for the main renderer frames. Fixes scene captures and planar reflections breaking object motion blur.

  • Bugfix: Fixed an issue with Exponential Height Fog where it renders incorrectly after world origin rebasing.

  • Bugfix: Fixed an issue introduced into 4.15 where Static Meshes with auto-generated LODs were no longer sharing lightmaps between LODs.

  • Bugfix: Fixed bug converting a Procedural Mesh component to a Static Mesh if it only contains a single triangle.

  • Bugfix: Fixed an issue where Scene Capture 2D's show flags would not be applied properly in some circumstances.

  • Bugfix: Fixed an issue where the "disable Stationary Skylight" feature would cause improper warnings. Also made it so that a movable Skylight is always used in Persona preview window so all projects can get preview lighting.

  • Bugfix: Fixed an issue where High Quality Particle Lights would not move properly if their parent was attached to a socket of an animated skeleton.

  • Bugfix: Fixed detection of OpenGL Radeon driver on Mesa.

  • Bugfix: Fixed an issue with shot command in Vulkan.

  • Bugfix: Fixed an issue with refract() intrinsic handling in hlslcc for GL/Metal/Vulkan.

  • Bugfix: Fixed an issue with missing Mobile Material Interface for Landscape "Used Materials" check.

  • Bugfix: Fixed rare case where Decals could incorrectly draw a second time in separate translucency pass.

  • Bugfix: Fixed a bug with the basic eye adaptation mode that could result in incorrect brightness when using a small viewport. This has no effect on the default histogram version of eye adaptation.

  • Bugfix: Fixed an issue with Separate Translucency being affected by Gaussian DoF.

  • Bugfix: Fixed an issue with "Streaming Bounds" show flag not working correctly. It now shows the texture streaming bounds for the textures currently selected in the Content Browser.

  • Bugfix: Fixed possible stall when canceling texture updates.

  • Bugfix: Fixed an issue for tone mapping of bright objects with zero green. Previously, these could have had a one-pixel black outline.

  • Bugfix: Fixed an issue with the IES Light Profile importer with LM-63-1986 format.

  • Texture flags are now properly routed to RHICreateTexture3D from the render target pool.

  • Collection Parameter Nodes no longer rename parameters when duplicated.

  • Renamed console variable "r.Streaming.ScaleTexturesByGlobalMyBias" to "r.Streaming.ScaleTexturesByGlobalMipBias".

  • Now when using the "freezerendering" command, the foliage culling/occlusion will also be frozen.

  • Optimize the computation behind the Screen Position material expression in the pixel shader.

    • Exposes the viewport offset of the view within the render target in the View Property material expression.

FX
  • Bugfix: Fixed an issue with rendering corruption issue with 4 and 8 vertex instanced particles using the wrong Vertex Factory objects.

    • D3D didn't need separate Vertex Factories due to the VertexDecl updating the stride at draw call time, but some platforms were affected.

Lighting
  • New: Improved quality and significantly faster cubemap prefiltering for reflections and skylight.

  • New: Post Process Indirect Lighting Intensity no longer scales Skylight reflections.

  • New: Screen Space Reflections (SSR) now has a higher quality setting for sharp SSR when using Quality Level 4.

  • New: Distance field self shadowing controls for hiding world position offset self-shadow artifacts.

    • Removed Static Mesh Build Settings "Distance Field Bias", which shrunk the distance field, breaking AO and shadows.

  • New: Distance field mesh visualization now uses a cone containing the entire tile to cull objects with, making the results stable.

  • New: Distance field temporal filter stores a confidence value, which is used to track leaking of occlusion during the upsample, and flush those leaked values through the history faster. Reduces DFAO ghosting when the camera is moving.

  • New: Added some new features to the Skylight component.

    • "Occlusion Exponent" which is useful for brightening up indoors without losing contact shadows as "Min Occlusion" does.

    • "Occlusion Combine Mode" which is useful for artists to choose how to combine SSAO with Distance Field Ambient Occlusion.

  • New: Added "r.AOListMeshDistanceFields" which dumps out mesh distance fields sorted by memory size, useful for directing content optimizations.

  • New: Planar reflections handle views smaller than the render target in a general way.

    • Fixes planar reflections with adaptive pixel density (ViewFamily size larger than actual views combined).

    • Planar reflections are now supported in splitscreen.

  • New: Support for fading of Light Propagation Volume cells towards the volume edges.

  • Fresnel of clear coat layer now darkens diffuse for the clear coat shading model.

  • SSR is now reprojected correctly on moving objects.

  • Raised High ShadowQuality to 2048 as 1024 for CSM is too low.

  • Disabled all distance field features on Intel cards because the HD 4000 hangs in the RHICreateTexture3D call to allocate the large atlas.

Materials
  • New: Added a "Sign" material graph node which replaces the library function for more optimal translation.

  • New: Added MinimalAPI to several material expressions.

  • New: Updated default behavior of "Power" node to no longer "abs" or "max" against an arbitrary value as the results were incorrect.

    • Previous version available by calling ClampedPow(x, y) in a "Custom" node.

  • New: Improved material translation preservation of constants.

    • This improves detection of used attributes which prevents some cases of features being enabled incorrectly.

  • New: Material flag normal curvature to roughness now works in the Deferred Renderer. It is no longer forward only.

  • New: Improved Material graph error messages.

  • New: Enabled "r.Streaming.UsePerTextureBias" by default as a way to improve quality in low texture budget settings.

  • Bugfix: Fixed errors across various library Material Functions.

  • Bugfix: Fixed an issue with broken size query for render targets in Material graphs.

    • Implemented missing "Get Size" functionality.

  • Bugfix: Fixed various data type inconsistencies on legacy Make and Break Material Attributes graph nodes.

    • Using these together with the "Get" and "Set" Materia lAttributes nodes should now be more forgiving.

  • Bugfix: Fixed a regression in HLOD shadow casting performance.

  • Bugfix: Fixed inconsistent results with the "Investigate Texture" commands.

  • Bugfix: Fixed possible incorrect results when listing textures used by Material Instances.

  • Bugfix: Fixed an issue where Material Reroute nodes did not bind properly to Texture Object Parameters.

Mobile Rendering
  • New: Mobile Skylights no longer render the scene on the device to determine the sky's color. Mobile skylight uses values determined via captures performed in the editor. This saves memory and performance on device and enables Skylight contribution on devices that do not support fp16 render targets.

  • New: Added "r.Mobile.TonemapperFilm" console variable which can be used to enable/disable new filmic tonemapper on Mobile devices, independently from Desktop platforms (disabled by default).

  • New: Material AO is now supported for the Mobile Rendering path.

  • New: Added better defaults for rendering resolution on iOS devices, to make them more inline with defaults on Android devices.

  • Bugfix: Fixed a crash that could occur on some devices when loading materials which use fonts as texture parameters.

  • Bugfix: Fixed a crash with Particle Cutouts on mobile devices that don't support hardware instancing (ie. Mali-400 GPU).

  • Bugfix: Fixed a crash when enabling shader cache on NVIDIA Shield devices.

  • Bugfix: Fixed a crash when previewing feature level ES3.1 with a Material using World Position Offset.

  • Bugfix: Fixed a crash with Media Player on iOS devices.

  • Bugfix: Fixed an issue with Static Mesh self-shadowing with modulated shadows.

  • Bugfix: Fixed several issues that could cause CSM shadowing on mobile devices to flicker.

  • Bugfix: Fixed an issue with scene captures on mobile when Mobile HDR is disabled and the scene capture source is Scene Color.

  • Bugfix: Fixed an issue with bright dynamic point lights cause bloom rendering artifacts on Android Mali devices.

  • Bugfix: Fixed an issue where Landscapes do not render on some Android PowerVR devices.

  • Bugfix: Fixed an issue where translucent object appear black on Zenfone5.

  • Bugfix: Fixed an redundant blend state change in OpenGL ES2.

  • Bugfix: Fixed rendering artifacts with bloom on iPhone7 using Metal.

  • Bugfix: Fixed an issue where exposure was more extreme on mobile devices with a new filmic tonemapper enabled.

  • Bugfix: Fixed an issue with padded NPOT textures not rendering correctly on iOS.

  • Bugfix: Fixed an issue with gamma issues with canvas elements on iOS Metal devices.

  • Significantly reduced OpenGL state setup for Slate draw calls on Mobile devices.

  • Slate pixel shaders will use half precision, for better UI performance on Mobile devices.

  • Mobile targeted projects will have better UI performance settings by default.

Optimizations
  • New: Added 'r.CompressMeshDistanceFields' console command to rendering project settings, defaults to off to prevent hitches when streaming in levels.

    • When enabled, mesh distance fields are stored zlib compressed in memory until needed for uploading to GPU.

      • 81Mb of backing memory -> 32Mb in GPU Perf Test.

      • Atlas upload time 29ms -> 893ms.

  • New: Added a new global distance field (4x 128^3 clipmaps) which caches mostly static primitives (Mobility set to Static or Stationary).

    • The full global distance field inherits from the mostly static cache, so when a Movable primitive is modified, only other movable primitives in the vicinity need to be re-composited into the global distance field.

    • Global distance field update cost with one large rotating object went from 2.5ms -> 0.2ms on 970GTX. Worst case full volume update is mostly the same.

  • New: Added LOD Distance Factor to Scene Capture Component, which can be used to make scene captures and planar reflections much cheaper to render if the scene has good LODs setup.

  • New: Added the r.LightMaxDrawDistanceScale console command for local light scalability.

  • New: Added a rendering project setting to use 8 bit mesh distance fields.

    • This halves their memory requirement but introduces artifacts with large meshes.

  • New: Added new async tasks to reduce the cost of the texture streaming update on the game thread.

  • New: Added some automatic callbacks whenever dynamic component renderstates are updated in order to also update their texture streaming states.

  • Bugfix: Fixed async SSAO not actually running asynchronously when depth drawing mode was DDM_AllOpaque.

  • Bugfix: Fixed render queries stalling in Test/Shipping builds due to lack of pooling.

  • Ray Traced Distance Field Shadow optimized.

    • From 1.8ms -> 0.8ms in a test scene.

  • Use 16 bit indices for distance field objects culled to tiles, when 16 bit will be enough. This saves 10mb of tile culling buffers.

  • GNM RHI Clear UAV uses a compute shader for buffers larger than 1Kb.

  • GNM Structured buffers are now placed in GPU memory (was previously in CPU memory).

  • DFAO optimizations:

    • Changed the culling algorithm to produce a list of intersecting screen tiles for each object, instead of the other way around. Each tile / object intersection gets its own cone tracing thread group so wavefronts are much smaller and scheduled better.

      • From 3.63ms -> 3.48ms (0.15ms saved).

    • Replaced slow instructions in inner loop with fast approximations (exp2 -> sqr + 1, rcpFast, lengthFast).

      • From 3.25ms -> 3.09ms (0.16ms saved).

    • Moved transform from world to local space out of the inner loop (sample position constructed from local space position + direction).

      • From 3.09ms -> 3.04ms (0.05ms saved).

  • Structured buffers for DF object data.

    • Full global distance field clipmap composite 3.0ms -> 2.0ms due to scalarized loads.

  • Exposed MaxObjectsPerTile with the 'r.AOMaxObjectsPerCullTile' console command and lowered the default from 512 to 256. This saves 17Mb of object tile culling data structures.

    • This can cause flickering in Ray Traced Distance Field shadows if too many objects fall into one shadowmap culling tile.

  • Scene color resolves are restricted to the views. This fixes inefficiency with adaptive pixel density where the views don't match the view family size.

  • When using a full prepass, the base pass no longer writes depth.

    • Saves 0.3ms of Scene Depth Resolve on 970 GTX with MSAA. Also allows masked materials to get EarlyZ in the base pass.

    • Fixed primitives with Use As Occluder set to false being excluded from a full depth pass in static draw lists.

    • Added the "r.BasePassWriteDepthEvenWithFullPrepass" console command for verifying that the base pass depths match the prepass depths.

  • Changing movable skylight properties no longer affects static draw lists.

  • Mesh distance field generation uses Embree, which provides a 2.5x speed increase.

  • Cleared light attenuation for local lights with a quad covering their screen extents.

    • Clearing the entire light attenuation buffer costs 0.1ms. This optimization lowers the minimum cost of a shadow casting light from 0.15ms to 0.03ms.

  • Flushed deferred deletes when reallocating distance field atlas to reduce peak memory, at the cost of a hitch on first frame.

  • Disabled point / spot lights with Max Draw Distance on Low PC.

  • Made use of Metal's "Deferred Store Actions" where available to avoid incorrect "Store" actions introduced when restarting passes to switch encoder types or when using the Metal RHI debugging tools.

  • Stopped the Shader Cache recording all the RHI resources unless it is running on OpenGL. This significantly reduces the CPU overhead of enabling the Shader Cache.

  • HLOD texture force loaded through the "r.Streaming.HLODStrategy" console command will now load visible mips first.

  • The command "BuildMaterialTextureStreamingData" can now be used with "all" as argument to force a rebuild.

  • Reduced the texture streaming overhead for components by keeping track of the state within the streamer.

Postprocessing
  • New: Using Custom Depth to write to the stencil buffer now has the ability to use single-channel bitmasks that ignore depth. This makes it possible to detect overlaps between stencil objects.

  • Bugfix: Fixed log value conversion in tonemapping causing true blacks to be lost.

  • Motion blur no longer gets dark at the edges of the screen.

UI

  • New: Added API to programmatically change the Virtual Cursors UMG Widget on the Viewport Client.

  • Bugfix: Fixed sRGB conversion issues in Retainer Box when used with a material.

  • Multiline editable text boxes can now be marked as read-only.

  • Selecting multiple text widgets will now correctly set text when the text field is edited.

  • Widget Components will now correctly determine between hover and clicked states when using or simulating touch.

Slate
  • New: Added Enum Has All Flags and Enum Has Any Flags, templated functions to make it easier to check for the existence of a flag on enum classes.

  • New: There is now a console variable option, Slate.VerifyHitTestVisibility (off by default), which enables additional visibility checks for widgets. Normally this is not necessary, but if you are changing the visibility of widgets during a frame, and several hit tests need to be performed that frame, there is a chance that a button could be clicked twice in one frame. Enabling this mode will make all hit testing more expensive, so for now it is off by default, but available for licensees that need the extra testing.

  • New: Added the ability to invert alpha when drawing slate textures. This will be used in the future for rendering render targets for the scene which have inverted alpha.

  • Bugfix: Fixed a crash during editable text widget destruction while a context menu was still open.

  • Bugfix: Fixed a crash when deleting a streamed font.

  • Bugfix: Fixed lots of outline data being added to the font cache due to wrongly hashing outline material and color data.

  • Bugfix: Tooltips will no longer show if the cursor is not directly over a Slate window. Fixed a case where the tooltip would not disappear when the cursor is moved over another application's window that was placed on top of a Slate window.

  • Bugfix: Fixed an issue where the cursor would sometimes not appear when its visibility was changed. This was rooted in how the OS requested cursor changes, WM_SETCURSOR on Windows only asks for new cursors when the mouse moves, but often cursors change just because mouse capture changes. So now the path has been centralized in Slate Tick to only handle the cursor changes in one place, and several places that need to refresh the cursor state, now set a flag to handle it on next tick.

  • Bugfix: Fixed a bug with ZOrder being discarded on the SOverlay slot.

  • Bugfix: Fixed Web Browser Viewport to properly scale.

  • Bugfix: SButton now correctly releases mouse capture even if it becomes disabled while pressed, but before 'click' has been fired.

  • Improved text rendering when the last resort font is missing.

    • The last resort font is no longer included in shipping builds, so this change makes some improvements to text rendering when it is missing.

      • The legacy font cache no longer tries to use the last resort font if it is not available (preventing warnings).

      • The Slate font renderer no longer tries to use the last resort font if it is not available.

      • Text shaping will use the last resort character if none of the available fonts can render a given character (likely because the last resort font is missing).

      • HarfBuzz shaped text now uses the fallback character correctly.

  • Kerning-only text shaping no longer draws characters to get their metrics.

  • Text selection height is now the maximum of the line height and text height to account for negative line-height scaling.

  • Added a setting to control whether we should use the font metrics or the bounding box when laying out a font.

    • Not all fonts have accurate metrics data, so using the bounding box can produce much better results for certain fonts.

  • Made slate loading widget / movie playback more thread safe by eliminating Slate application or the main window from being ticked directly on another thread. Is In Game Thread will also no longer return true when called from the slate loading widget thread.

  • Force resolution in standalone if the resolution is larger than primary working area.

  • Moved ESlateDrawEffect & ESlateBatchDrawFlag over to be enum class. Found cases where the enum order was being improperly assumed, and so now it will not be possible to just treat an int32 or a bool as the draw effect value.

  • Slate Application now maintains separate tracking for each pointer being utilized for drag drop, so now multiple fingers on multiple widgets can now simultaneously be attempting a drag, however once one of them becomes successful, we clear all state of all other tracking since only one Drag Drop operation is possible at a time.

  • Fold Tick is now removed from the codebase. We have not supported the other (non-folded) code path for awhile, so there was no point in maintaining the switch.

  • The Checkbox widget no longer just passes visibility down to the internal widgets it creates, that prevents future changes to affect it if it starts collapsed.

UMG
  • New: Added Timing Policy option to Widget Component, so widgets can optionally tick in pausable/dilatable game time rather than real time.

  • New: Added a material function that exposes all of the current UV sets with nice names instead of indexed coordinates.

  • New: Added a method to create Slate Brushes from Paper Sprites the same way we can for materials and textures in blueprints.

  • New: Introduced PreConstruct and Native PreConstruct to the base User Widget. Users can now visualize non-binding based changes in the designer by evaluating a very limited amount of the blueprint code. In the event your user widget crashes on load, due to calling something unsafe, you can disable evaluation in the editor preferences under Widget Designer.

  • New: Introduced a way to inform widgets of more information about the designer. There is now a Designer Changed event sent to all design time widgets letting them know things like the current screen size and DPI scale.

  • Bugfix: Fixed a crash if UI blurs are rotated.

  • Bugfix: Outline color on text elements is now inherited properly.

  • Bugfix: Fixed a bug that prevented Get Owning Player in Widget from returning.

  • Bugfix: Additional fixes to the way we migrate changes from the preview to the serialized version of the widget tree in the widget editor. This fixes several issues with edit-inline Objects on Widgets.

  • Exposed a normalized (0-1) uv coordinate set and scaled pixel size for Box and Border brushes.

  • Widget Interaction Components now ignore Visible(false) Widget Components when tracing.

  • Widget animations now finish evaluating before firing an event alerting that the animation finished.

  • The Widget Interaction Component now checks if the Widget is enabled before it claims that it is over an interactable or keyboard focusable widget.

  • Adding some setters and getters for Redraw Time to the Widget Component.

  • Widgets projected into screenspace from the Widget Component should now appear in the correct locations if the player's camera has an aspect ratio lock.

  • The Safe Zone widget will now show the correct safe zone amount if you use the safezone command line options, which are now documented in the comment for the Safe Zone class.

  • Widget switchers that contain widgets with named slots will now correctly display a widget whose named slot is currently selected.

  • Widgets that are copied and pasted will now retain the same name in the widget hierarchy.

VR

  • New: Added support for getting device depth from Scene Capture Component 2Ds.

  • New: Added ability to disable the autoloading splash screen, which would prevent the manual "hide splash screen" node from working properly.

  • New: Added Gear VR controller support.

  • New: Added support for OES_EGL_image_external to the mobile GL renderer.

  • Bugfix: Negative Stereo Layer priorities are now handled correctly on Steam VR.

  • Bugfix: Fixed threading issue with motion controller tracking that caused controller motion pops. This problem manifested intermittently.

  • Bugfix: Fixed crash on Oculus Rift when attempting to enter stereo mode while the HMD's 'on head' proximity sensor is not triggered.

  • Bugfix: Fixed low framerate when Oculus Rift 'on head' proximity sensor is not triggered and you exit stereo rendering.

  • The GearVR HMD plugin is now only enabled on Windows if the Oculus service is already running.

  • VR console commands have been rewritten to support autocompletion and inline help strings.

    • The VR console commands have also be renamed and now begin with vr.*.

    • The renamed VR commands have backwards compatible aliases, but will print a warning notifying the user about the deprecated functionality.

  • GoogleVR HMD now reacts to changes in the r.ScreenPercentage console command.

  • When the -hmd command line option is used to override the selected HMD, HMD plugins that are loaded early will now be unloaded during PreInit if not selected.

  • Integrated OpenGL support for SteamVR.

  • The left eye is used when selecting LODs to avoid selecting two separate LOD levels when rendering in stereo.

  • PSVR controller tracking limit management system.

    • PSVR can track the HMD and two controllers, but many more devices can be connected. With this system you can manage which controllers are tracked to stay under the limit.

  • Additional WorldScale refactoring for all platforms.

  • GoogleVR plugin updated to version 1.3

  • Fixed Android manifest for Daydream and Cardboard.

  • Updated GoogleVR plugin to version 1.3.

  • GoogleVR SDK updated to 1.40.0.

  • GoogleVR Mode default changed to Daydream and Cardboard.

Programming Release Notes

AI

  • New: Added a new mode to composite EQS generator (UEnvQueryGenerator_Composite), which allows the use of different types of items by each child generator. This can be enabled by advanced properties: bAllowDifferentItemTypes and ForcedItemType. ForcedItemType is the final type returned by the generator, and is used for allocating memory and executing tests. This mode is potentially unsafe and you will have to ensure proper memory layout (matching with ForcedItemType) of all item types used by child generators - usually subsets of ForcedItemType. Keep in mind that allocated memory block is zeroed before use.

Debugging Tools
  • Bugfix: Fixed VisualLog macros for recording segments with user defined thickness.

  • Bugfix: Fixed compilation errors in VisualLog macros for recording custom meshes.

  • Bugfix: Fixed memory corruption in generic A* solver: FGraphAStar.

  • Bugfix: Fixed unique Id duplicates in custom navigation links.

  • Bugfix: Fixed FRecastTileGenerator::Modifiers being erroneously counted twice when stating memory.

  • NavModifierVolume has been marked as ENGINE_API and can now be freely used in game code.

  • Made FNavAgentProperties::GetExtent return INVALID_NAVEXTENT if a prop's AgentRadius is not set. This results in properly using FNavAgentProperties::DefaultProperties in navigation queries when no query extent override is provided.

Animation

  • New: Added more exports to AnimationAsset, AnimSequenceBase, and Skeleton classes.

Animation Blueprint
  • Bugfix: Fixed nodes only getting CopyNodeDataToPreviewNode called when pin defaults were changed (not any property change).

Skeletal Mesh
  • New: Added exports to FFbxImporter, FDynamicSkelMeshObjectDataCPUSkin, and FSkeletalMeshObjectCPUSkin, for extensibility.

Audio

  • New: Added new cvars to help with optimization (only applies to the new Audio Mixer).

    • au.DisableReverbSubmix, au.DisableEQSubmix, au.DisableParallelSourceProcessing, au.SetAudioChannelCount

  • Bugfix: Fixed MIDI Device plugin public headers not being able to be included from an external module.

  • Optimized internals of new Audio Mixer. Gains approach 15% savings from before:

    • Turned a float divide into a multiply, which occurred at least 32k times per audio update.

    • Avoided thousands of Array.Add() calls during processing, which on shipping still does checks to see if the allocator has to grow, and updates ArrayCount.

    • Removed pointer indirection and successive TArray Add()s in GetChannelMap().

    • Removed function call overhead to updating channel map.

    • Simplified FSourceParam::Update() to reduce branching and have one return site.

    • Added alternative to GetChannelMap() called UpdateChannelMap() that avoids copying out values to an array. The values can then be fetched from the channel data directly.

    • Refactored internal data to use array of structs rather than struct of arrays for better cache coherency when processing channels one at a time.

Blueprints

  • New: Added an error when declaring a Blueprint Implementable Event with an enum param that is not plain or a byte type (Blueprints only support byte-sized enums).

Core

  • New: There are now several serialization options available to specify what the cooked Asset Registry includes. Look for the serialize flags inside the [AssetRegistry] section of BaseEngine.ini.

  • New: An experimental bUseAssetRegistryForIteration option has been added to CookerSettings. This improves the performance of iterative cooking by loading the cooked Asset Registry directly, but it may still have issues with some changes to source files being missed.

  • New: Added a cvar to control the pak precacher throttle.

  • New: Added new GenericPlatformFile function, GetTimeStampLocal, which returns file time stamp in local time instead of UTC.

  • New: Added a check against assembling the reference token stream while streaming without locking the garbage collector.

  • New: Added a static_assert to prevent the use of TMap keys which do not implement GetTypeHash, as this causes runtime crashes when they are manipulated by a UMapProperty.

  • New: Added a bForceDebugUnrealHeaderTool option to BuildConfiguration.xml which forces the Debug version of UnrealHeaderTool to be run instead of Development.

  • New: Added a static_assert to ensure that TInlineSetAllocator is instantiated with a power-of-two hash size, as this is a requirement for TSet and TMap.

  • New: Added ICppStructOps::IsAbstract() for testing if a native type is abstract via the property system.

  • Bugfix: Fixed TInlineValue not calling virtual destructors.

  • Bugfix: Fixed several issues with editor-only objects not being correctly stripped when cooking.

  • Bugfix: Fixed several issues with Config files loaded from Plugins. They now correctly handle diffing game-specific changes. Engine plugins config files should be named BasePluginname.ini, and game plugins should be DefaultPluginname.ini.

  • Bugfix: Fixed many bugs with the event driven loader and allowed it to work at boot time.

  • Bugfix: Fixed a bug with nativized Blueprints that was introduced with the boot time EDL changes.

  • Bugfix: Fixed race in audio streaming.

  • Bugfix: Fixed bug which would cause a fatal error when cooking subobjects that were pending kill.

  • Bugfix: Fixed a bug with EDL at boot time which caused a fatal error with unfired imports.

  • Bugfix: Fixed a bug with RF_PendingKill subobjects and the new loader.

  • Bugfix: Fixed an obscure problem with stats in commandlets that use async tasks.

  • Bugfix: Fixed rare ensure cooking for the EDL.

  • Bugfix: Fixed boot time EDL causing some issues even when it wasn't being used.

  • Bugfix: Fixed .pak precacher shutdown.

  • Bugfix: Fixed memory leak in .pak precacher.

  • Bugfix: Fixed bad merge of priority change in the EDL.

  • Bugfix: Fixed race that resulted in a memory leak when reading compressed paks.

  • Bugfix: Fixed a weird recursive situation where StaticLoadObject could return an object that has not finished loading. Also produces a fatal error if this happens. EDL only.

  • Bugfix: Fixed batched render fences when BeginDestroy calls FlushRenderingCommands.

  • Bugfix: Fixed loading a package that is already loaded.

  • Bugfix: Fixed crash in signature checks when mounting pak files.

  • Bugfix: Fixed a change to NotifyPrimitiveDetached so that it works in the editor.

  • Bugfix: Fixed hash table lock optimization.

  • Bugfix: Fixed a crash relating to FGenericAsyncReadFileHandle when not using the EDL.

  • Bugfix: Fixed comments in GenericPlatform.h.

  • Bugfix: Fixed errors raised during code generation when a multiply-inherited base class happens to have the same name as a UObject after its prefix is stripped.

  • Bugfix: Fixed a compile error when calling TArray::HeapSort on an array of pointers.

  • Bugfix: Fixed a crash when calling UCookOnTheFlyServer::FFilePlatformRequest::ToString().

  • Bugfix: Fixed compile errors raised when #pragma is used inside USTRUCTs.

  • Bugfix: Fixed compile errors caused by whitespace existing before a UCLASS() macro.

  • Bugfix: Fixed TStructOpsTypeTraits::WithCopy giving different results when the trait is specialized without a WithCopy value from when it isn't specialized at all.

  • Bugfix: Fixed a compile error when serializing bools to an archive in editor builds, where the archive type overrides other serialization operators.

  • Bugfix: Fixed FWorldTileInfo::Read() to copy the correct licensee version number from the file summary into the archive.

  • Bugfix: Fixed a regression in FObjectAndNameAsStringProxyArchive to re-allow serialization of TWeakObjectPtrs.

  • Bugfix: Fixed some include-what-you-use issues in the engine and plugins.

  • Bugfix: Fixed UPROPERTYs being skipped when there are redundant semi-colons between the properties.

  • Asset Registry memory and performance have been significantly improved in both Editor and cooked games for large projects.

  • Allowed UnrealPak to do a better job with EDL pak files when the order provided is old or from the cooker.

  • Several minor tweaks to low level async IO stuff.

  • Stored a copy of the callback in async read request so that we do not need to worry about lifetime so we can capture variables as needed.

  • Cancelling async loading with the EDL loader now prints a warning and does a flush instead.

  • Suppressed a few EDL cook warnings.

  • Tweaked the EDL for to all platforms.

  • Platform load time performance tweaks.

  • Abstracted the IO tracker and handle manager for other platforms and applied it to all platforms.

  • Protected against UDeviceProfileManager::Get() recursion and demoted a related fatal error to a log statement.

  • Removed old code relating to FAsyncArchive, FAsyncIOSubsystemBase and package level compression. The editor now uses the lowest levels on the new async IO scheme.

  • Increased estimate of summary size.

  • Avoided adding a linker annotation if it actually has not changed. This improves ConditionalBeginDestroy performance.

  • Avoided a redundant removal of PrimitiveComponent from the streaming managers during ConditionalBeginDestroy.

  • Optimized UObject hash tables for speed and space.

  • Put the special boot order things into baseengine.ini so that licensees and games can add to it.

  • Renamed HasBeenAlreadyMadeSharable to DoesSharedInstanceExist.

  • PostLoadSubobjects is now called on all objects regardless of whether they have a CDO as outer or not.

  • When Rename is used to change the Outer without specifying a new name, the existing name is maintained whenever possible.

  • ForwardVector, RightVector, and single float FVector constructors are now recognized by Unreal Header Tool as default values for an FVector parameter.

  • ScriptMacros.h no longers needs to be included in header files that generate a header.

  • Improved the readability of some of the ReferenceChainSearch code.

  • Automatically included ObjectMacros.h in generated headers to prevent compile errors.

  • Made FPaths::Combine() variadic so that it can take arbitrary numbers of arguments.

  • Improved the readability of the verbosity of log categories in the debugger.

  • Updated TArray::Sort comments to clarify what happens when sorting an array of pointers.

  • Clarified the assertion message you get when inserting or removing a TArray element by reference which comes from the array.

  • Clarified the comments for TArray::FindLastByPredicate and FString::FindLastCharByPredicate.

  • Removed UnrealCodeAnalyzer.

  • Raised an error in UnrealHeaderTool when a header containing UCLASSes, USTRUCTs etc. does not include its .generated.h file.

  • Removed TBoolConstant template.

  • Changed TAssetPtr to allow it to be constructed from nullptr without a full definition of T.

  • Removed the WITH_HOT_RELOAD_CTORS macro.

  • Removed the UseVTableConstructors .ini option.

  • Removed generated FName variables for UFUNCTIONs.

  • Removed the generation of obsolete .java and .proto files used for replication.

  • Replaced the set of bools used to FBlueprintCompileReinstancer with a new EBlueprintCompileReinstancerFlags enum.

  • Improved hot reload logging messages to make it clear that a compile attempt on a module does not guarantee a reload of that module.

  • Made UnrealHeaderTool report an error if a UFUNCTION in a derived class has the same name but a different signature from one in a base class.

Editor and Tools

  • New: Added spinner options to VectorInputBox.

  • New: Added a None option to the FKey customization, unless the FKey property had NoClear on it.

  • Bugfix: Implemented a fix to ensure FVirtualTrackArea::HitTestSection checks the row of the section.

  • Bugfix: Fixed an issue where ISequenceAudioRecorder was inaccessible to FAudioRecorder.

  • Project and plugin templates now use "include what you use" style by default.

  • When using BuildGraph, the cached list of completed nodes is now cleared by default, making the -ClearHistory argument redundant. Use the -Resume argument to continue an interrupted build using the current artifacts.

  • BuildGraph now outputs an error if any build products from previous steps are tampered with during the execution of a subsequent step.

  • The editor now offers to download and install Visual Studio 2017 if an existing version of Visual Studio is not found.

  • The AutomationTool -CookDir argument no longer accepts multiple parameters separated by '+' characters, since '+' is valid in directory names. Multiple -CookDir arguments are supported instead.

  • Game mods can now be denoted by setting the bIsMod field to true inside the .uplugin descriptor. Mods will be shown in a separate category in the plugin browser, and will be shown separately in generated project files. Installed editor builds can build and clean mods without modifying build products for the base game.

Content Browser
  • Bugfix: Fixed link error when FAssetData::PrintAssetData() is used in a project.

Sequencer
  • Unified global and object-bound pre animated state, and added InitializeObjectForAnimation method to state producers.

  • Opened the API for MovieSceneAudio-related classes along with some minor functionality additions.

  • Exported MovieSceneTrackEditor to allow custom tracks to be created that derive from existing tracks.

Gameplay Framework

  • New: Added support for FScopedMovementUpdate to be able to queue up overlaps that do not require reflexive bGenerateOverlapEvents. This requires custom code to be able to process these overlaps.

    • This allows custom inspection or processing of overlaps within a scoped move, without enabling the more expensive overlap flag. For instance you could have a fast projectile with an overlap response to a character mesh and get those overlaps from the trace without requiring expensive overlap processing when the mesh moves.

    • Overlap events from the move will still only trigger from UpdateOverlaps() if bGenerateOverlapEvents is enabled on both components, as before.

    • Made some data in FScopedMovementUpdate protected rather than private so it can easily be subclassed, and exposed a new helper SetWorldLocationAndRotation() for committing the move.

  • Bugfix: Fixed a crash when manipulating audio component properties from an Actor's constructor during async loading.

  • Bugfix: Fixed CharacterMovementComponent updates with very high delta time on server when initially joining. Made sure the ServerTimeStamp is initialized to current world time rather than zero to prevent large delta.

  • CheatManager functions to Damage/Destroy targets are now easier to override in game-specific subclasses.

  • InputComponent now has BindAction function that allows binding functions with additional parameters.

  • RawInput configuration structures can now be manipulated by other modules.

  • AActor::GetComponents() with generic type is now optimized to not force an allocation when the component count is large.

    • Previously it incorrectly assumed the output array needed space for the entire contents of OwnedComponents. If OwnedComponents.Num() > the array reserve size, this forced an allocation, even if few or no components of the requested type were found.

    • It is still recommended to use TInlineComponent array or an array using TInlineAllocator<> when using this function.

  • Removed allocations during creation in AIController::PostInitializeComponents() (in non-shipping builds).

  • Optimized HasActiveCameraComponent() and HasActivePawnControlCameraComponent() to avoid filling an array while searching for a certain component, which could have caused an allocation.

  • Optimized MoveComponent() collision queries to avoid processing PhysX touches when bGenerateOverlapEvents is off.

    • Added support for bIgnoreTouches to FCollisionQueryParams. This allows GeomSweepMulti to filter out touches/overlaps much earlier.

  • MovementComponent does not ignore initial blocking overlaps when moving away from the impact normal from SafeMoveUpdatedComponent(). This fixes various cases where characters could be pushed through moving objects because they were moving away from the overlapping object, but not fast enough.

    • It now always uses the hit result to depenetrate from the impact as much as possible, and then retries the move.

    • Hit events are not triggered for the first test for depenetration.

  • CharacterMovement AdjustFloorHeight() is now allowed to adjust using the line trace if the sweep was in penetration. It also forces another next floor check so it will check after it adjusts the height or depenetrates, relevant when bAlwaysCheckFloor is off.

  • Optimized CharacterMovement tick to not extract transform values twice when they would not change in a small block of code.

  • Call TickCharacterPose() and clear root motion before abandoning tick in UCharacterMovementComponent::PerformMovement() when movement mode is None. This prevents root motion building up until the next valid movement mode.

  • Applied a performance tweak to ApplyRadialDamageWithFalloff().

    • Do not rebuild FRadialDamageEvent each loop over hit actors.

    • Added stats for BreakHitResult()/MakeHitResult() under "stat game".

  • Optimized attachment to check welding option before expensive casts and body instance fetching.

Localization

  • Bugfix: Fixed a bug where passing an empty FText to ChangeKey() would keep the previous FText value that had been passed in.

Online

  • New: Added the bShowSkipButton parameter to IOnlineExternalUI::ShowLoginUI, which will display the "skip" button on relevant platforms.

Other

  • New: Added missing initialization for SWindow::bIsMirrorWindow.

  • Bugfix: Added missing module dependencies.

  • Bugfix: Fixed a type casting issue.

Physics

  • New: Added virtual keyword to DestructibleComponent ApplyDamage and ApplyDamageRadius.

  • New: Added Physx simulation shader override (see GSimulationFilterShader).

  • Bugfix: Fixed a debug rendering issue by recreating physics when changing mobility of components.

  • Bugfix: Fixed compile error when PHYSX_MEMORY_STATS=1.

  • Bugfix: Fixed performance regression caused by using collision aggregates for Instanced Static Mesh Component.

  • Bugfix: Fixed a crash in AABB Manager when origin shift is used.

  • Made UDestructibleComponent::SpawnFractureEffectsFromDamageEvent virtual.

  • Exported URadialForceComponent class for inheritance.

  • Allowed the editor to compile when bRuntimePhysicsCooking is disabled (cooking is still allowed in WITH_EDITOR builds even with it disabled).

  • EndPhysics tick will no longer be scheduled if QueryOnly is used on a ragdoll.

  • Removed the unsupported option of HideBone with DisableCollision when calling HideBone. This was not actually supported and did nothing so shouldn't break any behavior, just don't call the function.

  • Exposed PhysX enhanced determinism mode using the compiler flag PHYSX_ENABLE_ENHANCED_DETERMINISM. This allows local subsets of the PhysX simulation to behave deterministically independent of what is going on elsewhere in the Physics world.

Platforms

  • Bugfix: Fixed a crash bug in cases where we received a duplicate user login/logout notification from the system software.

  • Bugfix: Fixed Codelite project having duplicated settings.

  • Moved some C++ defines out of the build.cs file into a C++ header.

  • Moved controller connect/disconnect handling to the main thread to fix issues with thread safety for callbacks.

Android
  • New: Added functionality to use the visual studio mobile projects for debugging. To generate them run "generateprojectfiles.bat -vsdebugandroid" from a command prompt. After you have packaged your game for Development and put it on the device, you can set this new project as the start up project and run/debug the project in Visual Studio.

  • New: Support for Android runtime permissions added. Certain permissions have been removed or put under condition to check for support when the target sdk is greater than or equal to 23.

HTML5
  • New: Added new webassembly (wasm) toolchain - SIMD and multi-threading are not yet supported (these are slated to be in for wasm2).

    • These will be automatically turned off when building with wasm (as opposed to asm.js).

  • Removed HTML5 code from the Engine's SaveGameSystem.h and placed it in HTML5Platform.cpp.

  • Cleaned up HTML5PlatformFile.cpp and made it match as close as possible to linux's version.

  • Created HTML5's own PlatformFeature & SaveGameSystem files, and updated HTML5PlatformMisc to make use of the the new HTML5 SaveGame code.

Linux
  • New: Added FreeBSD memory information functions to facilitate out-of-tree UE4 FreeBSD port.

  • New: Added a new cross-toolchain (version 9, includes clang 4.0) when targeting Linux on Windows.

  • New: Added some support for building on Debian Sid or Stretch.

  • New: Added clang to Fedora dependencies.

  • New: Added ability to compile Linux servers for 32-bit x86 architecture.

  • New: Added files generated for KDevelop to .gitignore.

  • Bugfix: Fixed more third party libraries to use libc++ instead of libstdc++.

  • Bugfix: Fixed memory leaks when symbolicating an address in Linux callstacks (during crash reporting and memory profiling). Makes runs with the memory profiler much faster.

  • Bugfix: Fixed rebuilding of VHACD (a third party library) on a case sensitive filesystem.

  • Bugfix: Fixed CodeLite projects to now use proper Debug binaries for debug configurations.

  • Switched Linux file abstraction to use new managed filehandles. Shared by all platforms with low limit of open files.

  • Whitelisted SteamVR plugin for Linux so SteamVR Blueprint functions are always available, even if stubbed.

  • Made source code accessor aware of clang 3.9 and 4.0.

  • Setup will now install the latest clang on Arch instead of clang35.

Mac
  • Fixed address sanitizer support in MacToolChain (Apple changed the name of the env variable Xcode uses to enable it) and added support for thread sanitizer.

  • Fixed a problem where the glslang library was not enabled on Mac, preventing building an Android project with Vulkan from Mac.

  • Made Binned2 malloc work on Mac.

Programming

  • New: When compiling a module written in include-what-you-use style, source files which are in the adaptive non-unity working set are now built with precompiled headers disabled, to expose errors with missing headers. Set bAdaptiveUnityDisablesPCH to false in BuildConfiguration.xml to disable this behavior.

  • New: Added initial support for async creation of pipeline state objects, enable using r.AsyncPipelineCompile.

  • Module .build.cs files, which depend on the contents of external files, can now add those paths to the ExternalDependencies list. Modifications to those files will trigger the the UBT makefile to be invalidated.

  • Plugin config files are now included in generated project files.

  • UnrealBuildTool will no longer attempt to use SN-DBS for build distribution if the service is disabled.

  • UnrealBuildTool now correctly supports compiling modular targets which do not use the shared engine build environment.

  • C# programs will now be included in generated project files automatically if a blank file called UE4CSharp.prog is found in the same directory.

  • The engine will now warn when trying to load a plugin with a mismatched "EngineVersion" setting.

  • Deprecated shared pointer typedef from ImageWrapper and removed usages.

  • Removed boilerplate header from ImageWrapper.

  • Removed monolithic boilerplate header from NetworkFileSystem.

  • Removed boilerplate header from LauncherCheck.

  • LauncherServices: Removed boilerplate header from LauncherServices.

  • Completed a modernization pass of Automation.

Rendering

  • New: Added thickness option to debug DrawWireDiamond function.

  • New: Added a check to see if there are duplicated shader type names.

  • Bugfix: Fixed obscure check with flushing RHI resources.

  • Bugfix: Fixed hazard with SetMaterialUsage from a thread.

  • Bugfix: Fixed Windows handling of -sm4 and -sm5 so it can be used with -vulkan and -opengl.

  • Bugfix: Fixed selection of swapchain format for Vulkan on some Linux drivers.

  • Bugfix: Fixed an issue on Vulkan when copying into a cubemap face.

  • Bugfix: Fixed a bug calculating vertex declaration hashes on OpenGL.

  • Moved FPositionVertexBuffer & FStaticMeshVertexDataInterface declarations into their own headers, moved FStaticMeshVertexBuffer implementation into its own source file.

  • Updated Vulkan distributables and glslang to SDK 1.0.39.1.

  • Vulkan shaders now build using glslang 1.0.42.2 and includes those headers for redistribution.

  • Prefer D32_S8 on Vulkan instead of D24_S8 for the depth buffer.

  • Removed the temporary functions RHIClearColorTexture, RHIClearDepthStencilTexture and RHIClearColorTextures from each RHI.

  • Separated depth/stencil load/store actions.

  • Use the latest SDK for Vulkan, whether the one we distribute in ThirdParty or an installed version.

  • Implemented SetStencilRef() and SetBlendFactor() on RHIs which were missing it.

UI

Slate
  • Updated Slate to allocate widgets using MakeShared.

    • This saves one allocation per-widget.

  • Moved SVirtualWindow into Slate module from UMG.

VR

  • New: Added an initial base implementation of IHeadMountedDisplay, FHeadMountedDisplayBase, that can be extended by HMD implementations instead of extending IHeadMountedDisplay directly. This base class provides default and or common implementations for parts of the IHeadMountedDisplay interface. Future releases may add more common functionality to this class, reducing the amount of work required to add support for new HMD platforms even further.

  • StereoLayers now have a default emulated implementation, making them supported on most VR platforms that did not already support them. HMD implementations that extend FHeadMountedDisplayBase will automatically inherit the functionality unless explicitly overridden.

  • Common code found in various HMD plugins handling management of StereoLayers has been extracted into a template base class, TStereoLayerManager, that provides a thread-safe way to manage a list of registered stereo layers.

  • The old Morpheus StereoLayers implementation has been removed in favor of the common stereo layers implementation provided by the HMD base class.

Upgrade Notes

C++ API Changes

  • As part of the Asset Manager changes, Streamable Manager has been improved to support the concept of Streamable Handles. When requesting an async load, it now returns a shared pointer handle that will keep the requested object loaded as long as it exists. These handles can also be polled or waited on.

    • Synchronous Load and Simple Async Load on Streamable Manager have been deprecated in favor of the new Streamable Handle system. Both of those functions would keep assets loaded until explicitly unloaded, which in practice was not what most people wanted.

  • The Class/Property/Function redirect system has been rewritten to be faster and more flexible. Ini redirects such as "+ActiveClassRedirects" defined in [/Script/Engine.Engine] will still work, but the new system is used by putting redirects like "+ClassRedirects" in the [CoreRedirects] section of Engine.ini.

    • All engine redirects prior to 4.10 have been moved to CoreRedirects.cpp, newer redirects are now in the new format in BaseEngine.ini.

    • A single Property/Function redirect definition will now be applied for both blueprints and serialization, and redirects can now be defined with wildcard matching syntax to simplify large refactors.

    • Object and Package redirects can now be used to allow limited redirection of content references without creating an Object Redirector on disk.

    • Enum redirects have been improved and will now fully work with or without the Enum Name being specified.

  • Several Enum functions dealing with string conversion have been deprecated, and the names and comments have been cleaned up to make it more clear which are meant to be used at Runtime and which are meant to be used in the Editor/for debugging.

  • The console command "r.MSAACount 1" now produces no MSAA or TAA. "r.MSAACount 0" can be used to toggle TAA on for comparisons.

  • Cascaded Shadow Map resolution is now controlled by the console command "r.Shadow.MaxCSMResolution" instead of "r.Shadow.MaxResolution".

  • New mobile targeted projects will have better UI performance settings by default.

    • Please enable "Explicit Canvas Child Z Order" option in project Slate Settings, to improve UI batching. Enabling this option may require manual Z Order tweaks in UMG Canvas panels if there Z ordering issues.

  • VR console commands have been rewritten to support autocompletion and inline help strings.

    • The VR console commands have also be renamed and now begin with vr.*

    • The renamed VR commands have backwards compatible aliases, but will print a warning notifying the user about the deprecated functionality.

  • The Exec method in Head Mounted Display has been removed, as all VR console commands now use Auto Console Command or similar to register console commands.

    • HMD implementations relying on having an Exec method now need to provide their own ways of registering console command handlers.

  • Set Visibility and Set Hidden In Game in Scene Component are no longer virtual. Instead override On Visibility Changed or On Hidden In Game Changed to respond to changes to these values.

  • The FBox and FBox2D constructors taking an int32 value have been deprecated as the value of that integer was not being used. The Force Init constructor should be used instead.

    • Replace FBox/FBox2D construction of the form FBox(0) with FBox(ForceInit).

  • The Unreal Header Tool now outputs an error when an Editor-only struct member is exposed to blueprints. This is necessary because packaged builds will crash if a Make/Break node for that struct is executed in a blueprint.

    • Any Blueprint exposed Editor-only struct members must either be made not Editor-only or no longer exposed to blueprints.

  • Post Load Map now provides the loaded World as a parameter to the delegate function. The World will be null if the load failed.

    • All existing functions bound to Post Load Map need to have a World pointer added to their signature.

  • Stop saving raw curve data into animations on cook to save memory/disk space.

    • If you are directly accessing Raw Curve Data on an Anim Sequence, this will no longer work in cooked builds. Animation Asset now provides a virtual function, Get Curve Data, to grab a reference to the correct Curve structure.

  • Removed boilerplate header from Automation Window.

    • The AutomationWindow.h boilerplate header file has been removed. Please replace all includes of AutomationWindow.h with IAutomationWindowModule.h

  • Removed boilerplate header from Automation Controller.

    • The AutomationController.h boilerplate header file has been removed. Instead of AutomationController.h, include the individual interface headers that you actually use. Remove the "Interfaces/" subdirectory from existing interface inclusions.

  • Automation Modernization pass

    • The IAutomationWorkerModule.h has been moved to the module's public root directory. Please remove the relative path from your existing include statements.

  • Removed boilerplate header from LauncherCheck.

    • The LauncherCheck.h boilerplate header file has been removed. Include ILauncherCheckModule.h instead of LauncherCheck.h. Remove "Interfaces/" subdirectory from existing ILauncherCheckModule.h inclusions.

  • Removed boilerplate header from LauncherServices.

    • The LauncherServices.h boilerplate header file has been removed. Instead of including LauncherServices.h, include the ILauncherXXX.h files that you actually use. Remove the "Interfaces/" subdirectory from existing ILauncherXXX.h includes.

  • Deprecated shared pointer typedef and removed usages from ImageWrapper.

    • The IImageWrapperPtr typedef has been deprecated. Please use TSharedPtr instead of IImageWrapperPtr.

  • Removed boilerplate header from ImageWrapper.

    • The ImageWrapper.h boilerplate header file has been removed. Instead of including ImageWrapper.h, include the actual IImageWrapperXXX.h files that you use. Remove the "Interfaces/" subdirectory from existing IImageWrapperXXX.h includes.

  • Removed monolithic boilerplate header from NetworkFileSystem.

    • The NetworkFileServer.h boilerplate header file has been removed. Instead of including NetworkFileServer.h, include the INetworkFileXXX.h headers that you actually use. Remove the "Interfaces/" subdirectory from existing INetworkFileXXX.h includes.

  • Changed default contact-gen method to PCM. This is the default in PhysX 3.4.

    • This may have slight implications on jitter and stability, but should be improved overall. The old behavior is still available (set EnablePCM = false in the project settings).

  • Removed the temporary functions RHIClearColorTexture, RHIClearDepthStencilTexture, and RHIClearColorTextures from each RHI.

  • Removed obsolete SmartCastProperty function.

  • Added a static_assert to prevent the use of TMap keys which do not implement GetTypeHash, as this causes runtime crashes when they are manipulated by a UMapProperty.

    • TMap key types must now implement GetTypeHash. Having GetTypeHash be implemented in a base class or being implicitly convertible to a type which is hashable is not sufficient.

  • Fixed TStructOpsTypeTraits::WithCopy giving different results when the trait is specialized without a WithCopy value from when it isn't specialized at all.

    • TStructOpsTypeTraitsBase has been deprecated.

  • Improved support for TTuple.

    • Tuples have a GetTypeHash function and can be used as a TMap key.

    • Can now be serialized to archives.

    • Can now be compared for equality with operators == and !=.

    • Can now be compared lexicographically with operators <, >, <= and >=.

    • TPair is now an alias for a 2-tuple, which is specialized to have Key and Value fields, but otherwise has the same functionality as all other tuples.

    • Tuple.h is now found in the Core/Public/Templates folder, rather than the Core/Public/Delegates folder.

    • TPairInitializer now converts to TPair, rather than TPair being constructible from TPairInitializer.

  • Removed UnrealCodeAnalyzer.

  • Added a static_assert to ensure that TInlineSetAllocator is instantiated with a power-of-two hash size, as this is a requirement for TSet and TMap.

    • TInlineSetAllocator will no longer compile if the hash size is not a power-of-two.

  • Removed TBoolConstant template.

  • Removed the WITH_HOT_RELOAD_CTORS macro.

  • Removed the UseVTableConstructors .ini option.

  • Removed generated FName variables for UFUNCTIONs.

  • Refactored EvaluateBoneTransforms to prevent usage of skeletal mesh component.

    • Deprecated EvaluateBoneTransforms in favor of new EvaluateSkeletalControl_AnyThread.

    • Deprecated skeletal mesh component argument to ConvertCSTransformToBoneSpace and ConvertBoneSpaceTransformToCS. Now they just take a transform.

  • Added a new overload for IOnlineSession::FindFriendSession in the session interface that can retrieve sessions for multiple friends.

    • Sending and accepting invites on dedicated servers on Steam is now supported.

    • The FOnFindFriendSessionCompleteDelegate now returns an array of FOnlineSessionSearchResult objects instead of just one.

  • The high level rendering code is now PipelineStateObject aware which will allow us to reduce complexity in the rendering backends of Vulkan, Metal and Dx12 in the future.

    • The loose state setting APIs of the Commandlist have been deprecated, instead the entire pipelinestate has to be set at once.

  • Moved controller connect/disconnect handling to the main thread to fix issues with thread safety for callbacks.

Animation

  • When converting skeletal controls to the newer API, convert EvaluateBoneTransforms to EvaluateSkeletalControl_AnyThread. Backwards compatibility will be maintained, however warnings will persist. Any mesh component access should be cached in PreUpdate() as accessing the component is not thread safe.

  • If differences in timing between Maya and UE4 are experienced after importing Alembic files, this has been corrected. The fix requires that any problematic assets be reimported.

Blueprints

  • The ticking behavior of latent actions in components has been changed to match how they behave in actors. When the component ticks, the latent actions will now be processed at the same time, rather than happening later in the frame when latent actions for non-ticking actors and components are processed. This does change behavior, so there is a console variable (t.TickComponentLatentActionsWithTheComponent) that can be used to revert to the older behavior until affected component Blueprints that depended on the old ordering behavior can be fixed up. The cvar should be treated as deprecated, and it will be removed in a future release.

Core

  • To save on memory and disk space the cooked Asset Registry no longer includes Dependency information by default. If you need this information at runtime, enable bSerializeDependencies in the [AssetRegistry] section of BaseEngine.ini.

  • Starting asynchronous loads from within asynchronous loads has always been unsafe, but will now explicitly assert. This can be fixed by not starting asynchronous loads from within PostLoad functions, or deferring your game-specific code for a frame when called from an async callback.

  • Callback functions passed into Request Async Load will now execute on the next frame instead of immediately upon completion of an async load. This behavior is to avoid issues with calling async loads recursively, but if your game depends on this behavior you can restore it to call them immediately by setting the cvar s.StreamableDelegateDelayFrames to 0.

  • There is a new format for defining class/function/property redirects in ini files, check the [CoreRedirects] section of BaseEngine.ini for examples. The older formats will still work but the new format provides additional features and a simpler syntax so you may want to upgrade.

  • Any calls to Smart Cast Property should be replaced with code which explicitly handles the inner property of Array Property.

  • Get Type Hash implementations must now be added to types which are used as TMap keys. If your type defines Get Type Hash in a base class or is hashed via an implicit conversion, these should be fixed by implementing their own function and forwarding the call to the appropriate implementation.

  • Any use of TStructOpsTypeTraitsBase should be replaced with TStructOpsTypeTraitsBase2, where T is the type that the trait is being specialized for.

  • #include "Delegates/Tuple.h" should be replaced with #include "Templates/Tuple.h".

  • As TPairInitializer is now convertible to TPair, rather than TPair being constructible from TPairInitializer, types which do not correctly implement copy or move semantics by not inhibiting the compiler defaults may cause a bad state when they are inserted into a TMap or TSet. All types used in UE4 containers should correctly define copy or move semantics.

  • Any dependence on Unreal Code Analyzer should be removed from projects.

  • The explicit usage of TInlineSetAllocator in any TSet and TMap should be updated to ensure that the template arguments provided result in hash sizes which are a power-of-two.

  • TBoolConstant should be replaced with TIntegralConstant.

  • Any use of WITH_HOT_RELOAD_CTORS should be replaced with the assumption that the value is 1.

  • Any use of the Use VTable Constructors .ini option should be replaced with the assumption that the value is true.

  • Use of generated FName variables for UFUNCTIONs (e.g. ENGINE_ReceiveTick) should be replaced with a string literal or a custom static FName variable in your own code:

    • For example: static const FName ENGINE_ReceiveTick = TEXT("ReceiveTick");

  • If Unreal Header Tool reports an error about a function having a different signature from a base class, it should be fixed to have the same signature, or renamed.

Editor and Tools

  • Exposed Make Property Combo Box in Property Customization Helpers to allow embedding an enum combo box into Struct Customizations.

  • Added Custom Column support to the Asset Picker Config.

  • If you use a protected platform, your project settings will start to be saved under MyGame\Config\Platform\PlatformEngine.ini, instead MyGame\Config\DefaultEngine.ini.

Platforms

  • Made some big Device Profile changes, particularly for the protected platforms. You may need to modify your Device Profiles in similar ways if you are a heavy user of them.

    • Changed the "type" of some DPs from WindowsNoEditor, etc to Windows. It should be a platform, not a random string.

    • With that change, the platform can be used to save out protected platform DP .ini files to subdirectories, maintaining secrecy.

    • When saving DeviceProfiles, you may need to look in a platform subdirectory for the DeviceProfiles.ini file.

    • Added Config/[PlatformName]/ConfidentialPlatform.ini files so that the DP loading code knows to look in their directories for DPs. See the GetConfidentialPlatforms() function in GenericPlatformMisc for more information.

Programming

  • The TargetRules.ShouldUseSharedBuildEnvironment() function has been deprecated. Targets can now specify the build environment they wish to use by setting BuildEnvironment to TargetBuildEnvironment.Default/Shared/Unique in their constructor instead.

  • The constructor for ModuleRules-derived classes in .build.cs files should be updated to take a ReadOnlyTargetRules instance, which should be forwarded to the base class. This class contains the same properties as the previous TargetInfo argument, plus all the target-specific settings previously stored in the global BuildConfiguration and UEBuildConfiguration classes. Compatibility shims for accessing these objects will be removed in a future release. The WITH_FORWARDED_MODULE_RULES_CTOR preprocessor definition is now defined, which allows writing code which is compatible with multiple engine versions.

  • The TargetRules.SetupBinaries() callback has been deprecated. Instead of overriding this, targets may override the launch module through the "LaunchModuleName" property in their constructor, and add extra modules to the "ExtraModuleNames" field on the TargetRules object itself.

Rendering

  • UE4Editor is whitelisted for Aftermath with latest Nvidia drivers. To whitelist other game executables contact Nvidia.

  • RHICmdList.Clear() methods are now removed; please use RHICmdList.SetRenderTargetsAndClear() or the DrawClearQuad() utility function from ClearQuad.h.

  • The Cross Compiler Tool is now removed from the Engine, it had too many limitations. Use hlslcc.sln or ShaderCompileWorker -directcompile instead.

  • PipelineStateCache.h contains the new replacement interface for BoundShaderStateCache.h. Otherwise, during the Geometry rendering passes the previously introduced Draw Render State is used to collect and set the Blend, Raster, and Depth Stencil State. Commit Graphics Pipeline State will set the PSO for geometry rendering passes. Postprocessing passes or passes which use Globalshaders have to fill out a Graphics Pipeline State Initializer and set this instead.

  • If configuring via .ini files, use the new variable name "ScaleTexturesByGlobalMipBias" where "ScaleTexturesByGlobalMyBias" was used.

  • Mobile: Skylights on mobile projects may need to be recaptured in the editor before packaging.

  • Mobile: Please replace r.TonemapperFilm=1 cvar with r.Mobile.TonemapperFilm=1 in case you want to use new filmic tonemapper on Mobile platforms.

VR

  • PSVR MotionController tracking management system.

    • Blueprint functions added to manage the set of actively motion tracked controllers in MotionTrackedDevice Function Library.

    • You are recommended to disable tracking of all controllers first, and then enable tracking for the controllers you want to have tracked based on user setting, connected controllers, etc. The system keeps a memory of which controllers are set to be tracked even if the controller is disconnected, or not yet connected.

  • Experimental preview of PSVR Social Screen support.

    • The new Morpheus plugin project setting Enable Social Screen Separate Mode must be set to true to use this feature. When that is true additional render and output buffers will be allocated for the Social Screen.

    • Blueprint functions for controlling the feature can be found by searching for 'SocialScreen'.

    • Future work will replace this API with a more flexible cross platform one, and pursue optimizations of SocialScreen output.

Select Skin
Light
Dark

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

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

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

네이버 카페
공식 포럼