언어:

언리얼 엔진 4.14 릴리즈 노트

image alt text

새 소식

언리얼 엔진 4.14 에는 VR 에 최적화된 포워드 셰이딩 렌더러 가 도입되어, 멀티 샘플링 안티에일리어싱 과 같은 기능을 사용할 수 있게 되었으며, 새로운 컨택트 섀도 기능으로는 복잡한 오브젝트에 아름다운 디테일의 그림자를 렌더링할 수도 있습니다. 더이상 써드파티 라이브러리가 필요치 않은 스태틱 메시 자동 LOD 생성 기능도 추가되었습니다.

애니메이션 툴이 개선**되어 생산성을 높이는 데 도움이 될 것이며, (UE4 의 비선형 시네마틱 제작 툴인) 시퀀서**에도 새로운 기능이 다수 추가되었습니다. 뿐만 아니라 비히클, 클로딩, 애니메이션 블루프린트도 개선되었습니다.

모바일 개발자의 경우, Vulkan (벌칸)이 지원 준비되어 Android 호환 디바이스에서 바로 사용할 수 있습니다! 그리고 새로운 모바일 렌더링 기능 도 다수 추가되었는데, 씬 컬러/뎁스 읽기, UI 에 3D 오브젝트 그리기 등입니다.

Windows 플랫폼에서, C++ 프로그래머는 이제 Visual Studio '15' 를 사용하여 개발할 수 있습니다. Visual Studio 2015 역시 지원됩니다.

이번 릴리즈에는 에픽은 물론 GitHub 의 엄청난 개발자 커뮤니티가 제출한 수백종의 업데이트가 포함되어 있습니다! 언리얼 엔진 4.14 에 기여해 주신 분들께 감사드립니다:

Adam Moss (adamnv), Alan Edwardes (alanedwardes), Andreas Axelsson (judgeaxl), Andreas Schultes (andreasschultes), Andrew Armbruster (aarmbruster), Artem V. Navrotskiy (bozaro), Audiokinetic Inc. (audiokinetic), BaxterJF, CA-ADuran, Cameron Angus (kamrann), Cengiz Terzibas (yaakuro), Christian Hutsch (UnrealEverything), CodeSpartan, Cuo Xia (shrimpy56), Damir Halilovic (DamirHalilovic), dcyoung, Deniz Piri (DenizPiri), Dennis Wissel (dsine-de), Dominic Guana (jobs-git), Dorgon Chang (dorgonman), dsine-de, Filip Brcic (brcha), Hakki Ozturk (ozturkhakki), Hannah Gamiel (hgamiel), Hao Wang (haowang1013), Jarl Gullberg (Nihlus), Jason (Abatron), Jeff Rous (JeffRous), Jeremy Yeung (jeremyyeung), Jørgen P. Tjernø (jorgenpt), Josh Kay (joshkay), jpl-mac, KashiKyrios, Kory Postma (korypostma), Kyle Langley (Vawx), Laurie (Laurie-Hedge), Lei Lei (adcentury), Leszek Godlewski (inequation), Marat Radchenko (slonopotamus), Matthew Davey (reapazor), Matthias Huerbe (MatzeOGH), Matthijs Lavrijsen (Mattiwatti), mbGIT, Michael Geary (geary), Michail Nikolaev (michail-nikolaev), Moritz Wundke (moritz-wundke), Narendra Umate (ardneran), Nelson Rodrigues (NelsonBilber), null7238, Paul Evans (paulevans), PjotrSvetachov, projectgheist, Rama (EverNewJoy), rcywongaa, rekko, Ryan C. Gordon (rcgordon), sangpan, Sébastien Rombauts (SRombauts), Shihai (geediiiiky), stfx, straymist, Theodoros Ntakouris (Zarkopafilis), tmiv, ungalyant, Webster Sheets (Web-eWorks), x414e54, yehaike, YossiMHWF, Yukariin, Zachary Burke (error454), Zhiguang Wang (zhiguangwang)

주요 기능

신기능: MSAA 포함 포워드 셰이딩 렌더러

새로운 포워드 셰이딩 렌더러에서는 하이 퀄리티 UE4 라이팅 기능과 멀티샘플 안티에일리어싱(MSAA) 기능을 함께 사용할 수 있습니다! 포워드 렌더러의 MSAA 및 머티리얼 단위 최적화 옵션은 VR 에 잘 맞는 기능입니다.

image alt text

포워드 렌더러는 프러스텀 스페이스 그리드(frustum-space grid)에 리플렉션 캡처와 라이트를 컬링하는 방식으로 작동합니다. 그런 다음 포워드 패스에서 각 픽셀에 영향을 끼치는 라이트와 리플렉션 캡처를 대상으로 반복처리하여 알아낸 다음, 그를 대상으로 머티리얼 셰이딩 작업을 합니다. 스테이셔너리 라이트의 다이내믹 섀도는 미리 계산한 다음 스크린 스페이스 섀도 매스크의 채널들에 패킹해 넣어, 다중 섀도잉 기능을 효율적으로 사용할 수 있도록 합니다.

프로젝트 세팅 렌더링 부분에서 포워드 셰이딩 옵션을 켠 뒤 에디터를 재시작하면 포워드 렌더러를 사용할 수 있습니다.

image alt text

지원되는 **포워드 렌더링 기능**은 다음과 같습니다:

  • 프리컴퓨티드 인바이런먼트 섀도와 잘 어울리는 무버블 오브젝트에서의 다이내믹 섀도 포함, 스테이셔너리 라이트 완벽 지원

  • 시차 보정 포함 다중 리플렉션 캡처 블렌딩

  • 리플렉션 캡처에 합성되는 씬 일부에 대한 플레이너 리플렉션

  • D-Buffer 데칼

  • 미리계산 라이팅 및 스카이라이트

  • 그림자 없는 무버블 라이트

  • 캡슐 섀도

  • 인스턴스드 스테레오 호환

포워드 셰이딩에 아직 지원되지 않는 기능은 다음과 같습니다:

  • 스크린 스페이스 기법 (SSR, SSAO, 컨택트 섀도)

  • 그림자를 드리우는 무버블 라이트

  • 동적으로 그림자를 받는 반투명

  • 스테이셔너리 라이트에서 인바이런먼트 섀도를 받는 반투명

  • 라이트 함수 및 IES 프로파일

  • 알파 투 커버리지

  • D-Buffer 데칼, 모션 블러, 다이내믹 섀도 및 캡슐 섀도에 MSAA 지원

image alt text

포워드 렌더러는 멀티 샘플 안티에일리어싱(MSAA) 및 템포럴 안티에일리어싱(TAA) 모두 지원합니다. 대부분의 경우는 지오메트리와 스페큘러에서 발생하는 계단현상을 다 잡아주는 TAA 가 좋습니다. VR 의 경우, 헤드 트래킹 장치로 인해 서브 픽셀이 계속해서 이동하여 원치 않는 블러 현상이 생길 수 있으므로, MSAA 를 사용하는 편이 나을 수 있습니다.

MSAA 를 사용하기로 한 프로젝트는 콘텐츠 제작 단계에서부터 스페큘러 계단현상을 줄이도록 해야합니다. 'Normal to Roughness' 기능이 디테일 노멀 맵에서 스페큘러 계단현상을 줄이는 데 도움이 될 수 있습니다. 그런 다음 스태틱 메시용 자동 LOD 생성 기능을 통해 원거리 메시를 평탄화시켜 작은 트라이앵글에서 발생하는 계단현상을 줄일 수 있습니다.

테스트 결과 TAA 대신 MSAA 를 사용한 경우 GPU 프레임 시간이 약 25% 빨라졌습니다. 실제 비용은 콘텐츠에 따라 달라질 것입니다.

MSAA 를 사용하려면, 렌더링 프로젝트 세팅의 Anti-Aliasing Method 기본값을 MSAA 로 설정하면 됩니다.

image alt text

r.MSAACount 콘솔 변수는 픽셀마다 계산되는 MSAA 샘플 수를 조절합니다. r.MSAACount 1 은 특별히 템포럴 AA 를 사용하도록 하는 옵션으로, 안티에일리어싱 모드 전환을 편하게 할 수 있습니다.

퍼포먼스

포워드 렌더러는 콘텐츠에 따라 디퍼드 렌더러보다 속도가 빠를 수 있습니다. 대부분의 퍼포먼스 향상은 머티리얼 단위로 끌 수 있는 기능들에 의해 이루어집니다. 기본적으로 머티리얼에서 하이 퀄리티 리플렉션 옵션을 설정하지 않는 이상 가장 가까운 리플렉션 캡처만 시차 보정 없이 적용되며, 하이트 포그는 버텍스별로 계산되고, 플레이너 리플렉션은 그 옵션을 켠 머티리얼에만 적용됩니다.

image alt text

에픽의 VR 게임 신작 Robo Recall (로보 리콜)에서 이와 같은 옵션들을 활용했더니, NVIDIA 970 GTX 에서 디퍼드 렌더러보다 포워드 렌더러가 약 22% 빨랐습니다.

신기능: 컨택트 섀도

컨택트 섀도를 통해 오브젝트에 높은 디테일의 다이내믹 섀도를 낼 수 있습니다.

image alt text

아래 담쟁이덩굴은 평평한 카드 몇 장일 뿐이지만, 머티리얼의 Pixel Depth Offset 출력으로 인해 매우 그럴싸한 셀프 섀도를 낼 수 있습니다.

image alt text

컨택트 섀도 기능은 뎁스 버퍼에 대해 스크린 스페이스에서 짧은 레이 캐스트를 추가하여 주어진 라이트에서 어느 한 픽셀이 가려지는지 여부를 알아냅니다. 지오메트리의 접점에 매우 선명한 그림자를 출력하는 데 도움이 됩니다. 다른 알고리즘으로는 그림자가 생략되거나 접점이 흐리게 나오는 등의 단점이 있는데, 그 원인은 여러가지입니다. 전형적인 원인은 뎁스 바이어스 또는 해상도 부족 때문입니다. 새로운 컨택트 섀도 기능은 싼 비용으로 그 단점을 아주 잘 극복해낼 수 있습니다.

컨택트 섀도는 라이트의 Contact Shadow Length 프로퍼티를 설정하여 사용할 수 있습니다. 이 옵션은 스크린 스페이스에서 레이 캐스트 길이를 조절하는 것으로, 1 은 화면 전체를 가로지르는 것입니다. 값이 크면 퀄리티와 퍼포먼스가 저하될 수 있으니, 모양이 잘 나오는 수준에서 최소한의 값을 유지하도록 하시기 바랍니다.

image alt text

컨택트 섀도가 사용되는 또 한가지 예는 임의의 라이트에서 발생한 패럴랙스(시차) 오클루전 매핑으로부터 셀프 섀도를 구하는 것입니다. 여기에는 머티리얼에서 픽셀 뎁스 오프셋 출력이 필요합니다. 다음 애니메이션에서 컨택트 섀도 길이를 0.1 로 설정한 상태의 패럴랙스 오클루전 매핑된 표면을 확인할 수 있습니다.

image alt text

신기능: 자동 LOD 생성

이제 언리얼 엔진은 스태틱 메시의 폴리곤 수를 자동으로 줄여 LOD 를 생성해냅니다!

image alt text

위 애니메이션은 다섯 개의 LOD 가 자동 생성되는 모습입니다. 각 레벨마다 트라이앵글 수가 절반으로 줄어듭니다.

자동 LOD 생성 기능은 2차(quadric) 메시 단순화라는 기법을 사용합니다. 이 기법은 두 버텍스를 합쳤을 때 생성되는 하나의 에지가 시각적으로 얼마나 차이가 나는지를 계산합니다. 그런 다음 시각적인 영향이 가장 적은 에지를 선택하여 접습니다. 그와 동시에 새로 병합된 버텍스의 최적 위치를 선택한 뒤 에지와 함께 접힌 트라이앵글이 있으면 지웁니다. 목표 트라이앵글 수가 될 때까지 이런 식의로 에지를 접는 작업을 계속합니다.

이 메시 단순화 기법은 생성된 라이트맵 UV, 노멀, 탄젠트, 버텍스 컬러를 포함한 UV 가 유지됩니다. UV 가 유지되기 때문에 같은 머티리얼을 사용할 수 있을 뿐만 아니라, 모든 LOD 가 같은 라이트맵을 공유할 수 있습니다.

생성되는 LOD 제어를 위한 일반적인 세팅은 스태틱 메시 뷰어의 LOD 세팅 아래 있습니다.

image alt text

'LOD 그룹'에는 프리셋 목록이 제공됩니다. 이 부분은 프로젝트마다 BaseEngine.ini 의 [StaticMeshLODSettings] 아래에서 변경할 수 있습니다. 프로젝트마다 이 카테고리를 잘 구성해 두고, 모든 LOD 를 일일히 제어하기 보다는 가급적 LOD 그룹을 사용할 것을 권장합니다.

한 가지 중요한 세팅은 'Auto Compute LOD Distances' (LOD 거리 자동 계산)입니다. 에지가 접힐 때마다 시각적인 차이를 얼마나 더하는지 알고리즘은 알고 있기 때문에, 이 정보를 토대로 거리상의 오차를 얼마나 허용할 것인지 결정할 수 있습니다. 즉 각각의 LOD 에 사용할 화면 크기도 자동으로 계산한다는 뜻입니다.

각 LOD 에서 자동 생성에 관련된 자세한 부분을 고치고 싶은 경우, Reduction Settings (감소 세팅)에서 옵션을 찾을 수 있습니다. 참고로 이 기능은 현재 스태틱 메시에서만 작동하며, 메시 프록시 LOD 생성은 아직 지원되지 않고 있습니다.

신기능: 프리컴퓨티드 라이팅 시나리오

이제 같은 지오메트리에 다수의 라이팅 구성을 사용할 수 있는 프리컴퓨티드 라이팅이 지원됩니다! 이 기능은 VR 이나 건축 시각화처럼 최대한의 퀄리티를 최대한의 퍼포먼스로 내야 하는 경우에 특히 중요합니다.

image alt text

image alt text

위 예제는 DayScenario 라는 Lighting Scenario(라이팅 시나리오) 레벨에 디렉셔널 라이트, 스카이 라이트, 스카이 박스를 배치한 것입니다. NightScenario 에는 가로등을 배치했습니다.

image alt text

라이팅 시나리오를 사용하려면:

  • 레벨 창에서 서브레벨에 우클릭한 다음 라이팅 시나리오로 변경합니다. 라이팅 시나리오 레벨이 보이게 되면, 그 라이트맵이 월드에 적용됩니다.

  • 라이팅 시나리오 레벨에서 레벨 스트리밍 메서드를 블루프린트로 변경합니다.

  • 레벨에 메시와 라이트를 배치하고 라이팅을 빌드합니다.

  • 퍼시스턴트 레벨의 레벨 블루프린트에 있는 BeginPlay 에서, 활성화시키고자 하는 라이팅 시나리오 레벨에 Load Stream Level 을 실행합니다.

image alt text

한계:

  • 게임에서 한 번에 하나의 라이팅 시나리오 레벨만 표시할 수 있습니다.

  • 라이팅 시나리오 레벨이 존재하면, 모든 서브레벨의 라이트맵 데이터를 그 안에 넣어, 낮일 때는 DayScenario 라이트맵만 로드되도록 합니다. 그 결과, 라이트맵은 더이상 서브레벨에 스트리밍되지 않습니다.

  • 라이팅 시나리오 레벨이 보이게 되면 강제로 리플렉션 캡처 업데이트가 이루어져, 로드 시간이 길어질 수 있습니다.

신기능: 픽셀별 반투명 라이팅 개선

디퍼드 렌더러에서도 이제 반투명 표면에 새로운 포워드 셰이딩 함수 기능을 사용하여 다수의 라이트에서 스페큘러 하이라이트를 구한다던가 시차 보정된 리플렉션 캡처에서 이미지 기반 리플렉션을 구한다던가 할 수 있습니다!

image alt text

image alt text

신기능: 전해상도(FULL RESOLUTION) 스킨 셰이딩

UE4 는 이제 서브서피스 프로파일 셰이딩 모델에 전해상도 스킨 셰이딩이 지원됩니다. 땀구멍이나 주름과 같은 표면 디테일에 높은 정확도의 라이팅을 제공해 줍니다.

image alt text image alt text

체크무늬 렌더링된 스킨 (왼쪽), 전해상도 스킨 (오른쪽) (주: 3D 헤드 모델링 Lee Perry-Smith 제공)

image alt text image alt text

표면 디테일 - 체크무늬 (왼쪽), 전해상도 (오른쪽)

이전에는, 스킨 라이팅은 체크무늬로 표현되었는데, 픽셀 절반에는 디퓨즈 라이팅이, 나머지 절반에는 스페큘러 라이팅이 들어있었습니다. 최종 서브서피스 프로파일 풀스크린 패스 도중 라이팅을 다시 합칩니다. 이러한 접근법으로도 서브서피스 라이팅에 괜찮은 결과가 나오기는 하지만 (그 속성상 빈도가 낮아), 표면 디테일의 정확도가 낮을 수밖에 없었습니다.

하지만 새로운 접근법에는 모든 픽셀에 디퓨즈와 스페큘러 라이팅 정보가, RGBA 인코딩에 패킹되어 들어있습니다. 이를 통해 최종 서브서피스 프로파일 풀스크린 패스 도중 전해상도 라이팅을 재구성할 수 있으므로, 표면 디테일 결과도 살아나고 템포럴 안티에일리어싱과의 안정성도 높아집니다.

호환성

전해상도 스킨 셰이딩에는 온전한 알파 채널을 하나 포함하여 최소 64 비트 씬 컬러 포맷이 필요합니다. 기본 FloatRGBA 씬 컬러 포맷은 정상 작동합니다만, FloatRGB 같은 32 비트 표현은 지원되지 않습니다. 씬 컬러 포맷이 전해상도 스킨과 호환되지 않으면, 체크무늬 기반 라이팅으로 돌아갑니다.

이러한 작동방식은 r.SSS.Checkerboard 콘솔 변수로 제어할 수 있습니다. 여기에 가능한 값은 다음과 같습니다:

0: 체크무늬 꺼짐 (전해상도)

1: 체크무늬 켜짐 (이전 방식)

2: 자동 (기본) - 씬 컬러 픽셀 포맷에서 지원하는 경우 전해상도 라이팅이 사용됩니다.

한계

전해상도 스킨 셰이딩은 추정 방식이라는 점 언급해 둘 가치가 있겠습니다. 거의 대부분의 경우 정상 작동할 것이지만, 특정 머티리얼은 인코딩 방식으로 인해 문제가 될 수 있습니다. 구체적으로:

  • 메탈릭 머티리얼

  • 이미시브 머티리얼

위 기능이 작동은 하지만, 패킹된 RGBA 디퓨즈/스페큘러 인코딩 방식의 차이로 인해 체크무늬와 비교하면 결과물 차이가 느껴질 수 있습니다.

이러한 문제는 머티리얼을 제작할 때 스킨 셰이딩이 불필요한 곳에 오파시티를 0 으로 설정하는 것으로 우회할 수 있습니다. 오파시티가 0 인 픽셀은 셰이딩에 기본 라이팅포함으로 처리됩니다.

주: 불투명 픽셀이 아닌 것도 이런 식으로 마스크를 적용하면 퍼포먼스 측면에서 좋을 수도 있는데, 그 픽셀은 서브서피스 포스트프로세스가 건너뛰기 때문입니다.

퍼포먼스 고려사항

타이틀에서 64 비트 씬 컬러 포맷을 사용하는 경우, 전형적으로 전해상도 서브서피스 라이팅이 체크무늬보다 텍스처 페치 수가 적어 더욱 빠릅니다. 하지만 타이틀에 32 비트 씬 컬러를 사용하는 경우, (하드웨어에 따라 다르긴 하지만) 감소된 텍스처 대역폭에서 얻는 퍼포먼스 이득 비중이 더 클 것입니다.

신기능: 리플렉션 캡처 퀄리티 개선

리플렉션 캡처를 사용할 때, 엔진은 리플렉션 캡처의 간접 스페큘러와 라이트맵의 간접 디퓨즈를 혼합합니다. 누수 현상 감소를 위해서인데, 리플렉션 큐브맵은 공간의 한 점에서만 캡처되는 반면 라이트맵은 받는 표면 전체에서 계산되고 로컬 섀도를 포함하기 때문입니다.

image alt text

(왼쪽은 라이트맵 혼합이 있고, 오른쪽은 없습니다.)

혼합은 거친 표면에는 잘 되지만, 부드러운 표면의 경우 리플렉션 캡처에서 온 리플렉션이 스크린 스페이스 리플렉션이나 플레이너 리플렉션 등 다른 리플렉션과 더이상 일치하지 않습니다.

라이트맵 혼합은 매우 부드러운 표면에서는 더이상 이루어지지 않습니다. 러프니스가 .3 이면 라이트맵이 최대로 혼합되고, 값이 낮아질 수록 라이트맵 혼합이 서서히 줄어들다가 .1 이하에서는 사라집니다. 이런 식으로 리플렉션 캡처와 스크린 스페이스 리플렉션이 훨씬 잘 어울리게 되며, 바뀌는 부분이 잘 눈에 띄지도 않게 됩니다.

아래는 거울 표면 리플렉션의 전후 비교입니다. SSR 과 리플렉션 캡처의 벽 리플렉션 차이를 살펴보세요. 움직여 보면 부작용이 확실히 눈에 띄는데, SSR 한계로 인해 카메라와 같이 움직이기 때문입니다.

image alt text

이는 기존 콘텐츠에 영향을 끼치는데, 부드러운 표면에 리플렉션이 새는 경우, 그 부분이 훨씬 더 잘 드러날 것입니다. 이러한 문제 해결을 위해서는, 리플렉션 프로브를 추가로 배치하여 새는 부분을 줄여야 합니다. 레벨에는 커다란 구체형 캡처가 최소 하나 있어야 합니다. 이전 라이트맵 혼합 작동방식으로 돌아갈 수도 있는데, 다음과 같은 렌더링 프로젝트 세팅입니다:

image alt text

신기능: Visual Studio '15' 지원

언리얼 엔진 4.14 는 이제 Visual Studio '15' 버전을 기본 지원합니다. Visual Studio 2015 역시 계속해서 지원됩니다. Visual Studio '15' 는 현재 Microsoft 의 Visual Studio 웹 사이트 에서 프리뷰 버전을 접하실 수 있습니다.

image alt text

Visual Studio 버전이 여럿 설치된 경우, '에디터 개인설정'의 'Source Code' (소스 코드) 섹션에서 사용할 버전을 선택할 수 있습니다.

image alt text

신기능: 액터에서 스태틱 메시 생성

이제 레벨 뷰포트에서 액터에 우클릭하여 그 현재 상태를 새로운 스태틱 메시 애셋으로 저장할 수 있습니다. 스켈레탈 메시에도 작동되는데, 포즈를 잡은 캐릭터에서 메시를 캡처할 수 있습니다.

image alt text

신기능: NVIDIA Ansel 지원

UE4 4.14 에는 NVIDIA Ansel Photography 가 지원됩니다!

Ansel 은 NVIDIA 에서 개발한 새로운 도구로, 플레이어가 게임내 스크린샷을 찍을 수 있습니다. Ansel 모드에서 게임은 일시정지되며 플레이어는 카메라를 제어하여 샷을 구상하고 다양한 스크린 이펙트를 적용할 수 있습니다. HDR 이나 360 스테레오와 같은 다양한 스크린샷 캡처도 가능합니다. 자세한 내용은 NVIDIA 웹사이트 http://www.geforce.com/hardware/technology/ansel 를 참고하세요.

image alt text

Ansel 은 UE4 플러그인 형태로 지원됩니다. 프로젝트에서 플러그인을 활성화시키면, 독립형 게임 세션에서 Ansel 에 접근할 수 있습니다.

image alt text

(웹 브라우저에서 Ansel 360 캡처를 확인하는 모습입니다.)

Player Camera Manager 클래스에 게임에서 Ansel 캡처 작동방식 커스터마이징에 쓰이는 함수가 노출되어 있어, 카메라 이동 거리 제한, UI 요소 비활성화, 특정 라이팅 또는 포스트 프로세싱 이펙트 켜고 끄기 등을 게임에서 제어할 수 있습니다. 구현을 제공해 주신 Adam Moss 와 NVIDIA 에 감사드립니다.

이 기능 사용 시작을 위해서는, NVIDIA Ansel Photography 플러그인 문서를 참고해 주세요.

신기능: 케이블 컴포넌트 개선

Cable Component (케이블 컴포넌트) 플러그인이 콜리전, 오브젝트 또는 이펙트를 붙일 수 있는 소켓 지원과 같은 기능으로 새롭게 업데이트되었습니다.

image alt text

현재 케이블 컴포넌트에 지원되는 기능은 다음과 같습니다:

  • 단순 콜리전, 마찰 세팅 포함

  • Stiffness (강성) 세팅, 접힘에 대한 저항

  • 케이블 양쪽 끝에 소켓 지원

  • 한쪽 끝을 '자유' 설정 가능

신기능: UI 폰트 윤곽선

UMG 및 슬레이트용 폰트에 이제 Outline(윤곽선)을 적용할 수 있는 옵션이 생겼습니다.

image alt text

폰트를 지정하는 위젯은 윤곽선 세팅, 색, 윤곽선에 사용할 머티리얼을 변경할 수 있습니다.

image alt text

윤곽선에 지정된 머티리얼은 윤곽선에만 적용된다는 점만 제외하고, 윤곽선에 있는 폰트 머티리얼은 다른 폰트 머티리얼을 사용하는 것과 같은 방식으로 사용할 수 있습니다. 폰트 머티리얼은 윤곽선에서 사용하여 여러가지 다양한 효과를 낼 수 있습니다.

image alt text

신기능: 맵 및 세트 프로퍼티 편집가능

이제 디테일 패널 안에서 **Map(맵) 및 Set(세트) 프로퍼티**를 편집할 수 있게 되었습니다!

**세트**는 배열과 비슷한데, 한 세트에 동일한 요소를 둘 이상 가질 수 없고, 순서가 보장되지 않는다는 차이가 있습니다. 하지만 어떤 요소가 포함되어 있는지 찾아보는 작업이 매우 빠릅니다.

image alt text

**맵**은 키와 값의 짝으로 이루어져 있으며, 둘 다 디테일 패널에서 편집할 수 있습니다. 세트와 마찬가지로 모든 키 값은 고유해야 하며, 요소의 순서가 유지된다는 보장은 없습니다. 하지만 어떤 요소의 키를 알고 있으면 그 값을 매우 빠르게 찾을 수 있습니다.

image alt text

신기능: 머티리얼의 벡터 노이즈

Noise (노이즈) 머티리얼 그래프 노드에는 단일 값 (스칼라) 결과를 내는 절차적 셰이딩에 유용한 함수가 여럿 포함되어 있습니다. |

image alt text

image alt text

image alt text

image alt text

image alt text

셀노이즈

벡터 노이즈

그레디언트

보로노이

새로운 Vector Noise (벡터 노이즈) 노드가 3D 또는 4D 벡터 결과 포함 다수 추가되었습니다. 이 함수들은 실행시간 비용이 비싸므로, 일단 모양을 개발한 후에는 4.13 에 도입된 Draw Material to Render Target 블루프린트 기능을 사용하여 그 계산 전체 또는 일부를 텍스처에 구워 넣을 것을 추천합니다. 이 머티리얼 그래프 노드들을 사용하면, 최종 텍스처의 절차적인 모습을 엔진에서 개발할 수 있으므로, 외부 프로그램에서 절차적으로 생성되는 텍스처를 만들어 엔진의 애셋에 적용하는 것이 가능합니다.

새로운 함수는 다음과 같습니다:

  1. Cellnoise 셀노이즈: (노드 입력에 적용된 수학적 floor 연산에서) 3D 그리드 내 각 셀에 무작위 색을 반환합니다. 그 결과는 주어진 위치에서 항상 일관되므로, 머티리얼에 안정적인 방식으로 무작위성을 추가할 수 있도록 해줍니다. 이 벡터 노이즈 함수는 계산 비용이 매우 싸므로, 퍼포먼스를 위해 텍스처에 구울 필요가 없습니다.

  2. Perlin 3D Noise 펄린 3D 노이즈: 3D 벡터 출력으로 계산한 Perlin Simplex Noise 의 한 가지 버전입니다. 각 출력 컴포넌트의 범위는 -1 에서 1 입니다. 노이즈 출력 세 채널을 한꺼번에 계산하는 것이 세 개의 스칼라 노이즈 함수 결과를 합치는 것보다 쌉니다.

  3. Perlin Gradient 펄린 그레디언트: 스칼라 Perlin Simplex Noise 의 분석적 3D 그레디언트를 계산합니다. 출력은 4 채널로, 처음 3 (RGB) 채널은 그레디언트이고, 네 번째 (A) 채널은 스칼라 노이즈입니다. 표면의 범프 및 플로우 맵에 좋습니다.

  4. Perlin Curl 펄린 컬: 벡터 Perlin Simplex Noise (소위 Curl Noise) 의 분석적 3D 컬 버전을 계산합니다. 출력은 3D 부호화 컬 벡터입니다. 플루이드 또는 파티클 플로우에 좋습니다.

  5. Voronoi 보로노이: 같은 보로노이 노이즈를 스칼라 노이즈 머티리얼 노드로 계산합니다. 스칼라 보로노이 노이즈는 3D 공간에 시드 포인트를 분산시키고 가장 가까운 것까지의 거리를 반환합니다. 벡터 노이즈 버전은 가장 가까운 시드 포인트 위치를 RGB 로, 그와의 거리를 A 로 반환합니다. 특히 셀노이즈와 같이 쓰면, 보로노이 셀 단위로 약간의 난수성을 낼 수 있습니다.

아래는 단순한 돌침대 머티리얼로, Vector Noise / Voronoi 의 거리 컴포넌트를 사용하여 표면에 굴곡을 주고, 갈라진 틈에 이끼를 혼합해 넣은 것입니다. 시드 포인트와 Vector Noise / Cellnoise 를 같이 쓰면 돌마다 색과 굴곡 높이를 바꿀 수 있습니다.

image alt text

펄린 컬과 펄린 그레디언트는 일반 펄린 노이즈처럼 옥타브에 같이 추가시킬 수 있습니다. 보다 복잡한 표현식의 경우, 표현식 결과의 그레디언트를 계산할 필요가 있습니다. 그 작업을 수월하게 하기 위해 표현식을 머티리얼 함수에 넣고, GradFrom3DDerivCurlFrom3DDeriv 중 하나, Prepare3DDeriv, Compute3DDeriv 등에 헬퍼로 사용하면 됩니다. 이들은 사면체 패턴으로 배치된 기본 표현식의 계산을 네 번 사용하여 이와 같은 파생형 기반 연산을 추정해냅니다. 예를 들어 다음은 그레디언트를 사용하여 범프 높이 함수에서 범프 노멀을 계산하는 망입니다.

image alt text

PhysX 3.4 업그레이드

언리얼 엔진은 이제 NVIDIA PhysX 최신 버전 3.4 를 사용합니다. 리짓 바디와 씬 쿼리의 퍼포먼스와 메모리 사용량이 (특히나 멀티코어에서) 향상됩니다.

image alt text

이 버전의 PhysX 는 키네마틱 오브젝트**에 Continuous Collision Detection **(연속 콜리전 감지, CCD)를 지원하여, 매우 빠르게 움직이는 리짓 바디 사이에도 정확한 충돌 처리가 가능합니다! 아래 로보 리콜 테스트 레벨의 애니메이션에서, 플레이어는 무기를 휘둘러 날아오는 총알을 때리고 있습니다!

image alt text

UE4 에서 바로 적용되는 신기능은 다음과 같습니다:

  • 키네마틱 오브젝트에 연속 콜리전 감지 (CCD) 지원 (위 애니메이션 참고)

  • 키네마틱 오브젝트 업데이트 속도 향상

  • 컨벡스 헐 쿠킹 속도 향상

앞으로 PhysX 최신 버전에서 사용할 수 있는 피직스 신기능을 더욱 많이 노출시키도록 하겠습니다.

애니메이션 에디터 구조 변경

애니메이션 관련 툴의 구조가 변경되었습니다! 하나의 에디터 안에서 여러 모드로 작업하던 것이 이제 다수의 개별 애셋 에디터로 나뉘었습니다.

image alt text

여러가지 개선된 부분도 있습니다. 각 에디터에 공통인 함수 기능은 이제 일반적으로 뷰포트와 개선된 스켈레톤 트리에서 찾을 수 있습니다.

  • 스켈레탈 메시 에디터의 레이아웃과 애셋 디테일 패널이 변경되었습니다. 특히 머티리얼 및 LOD 부분은 크게 바뀌었습니다.

  • 스켈레톤 에디터의 레이아웃 트윅 작업, 스켈레톤 트리 자체의 폴리싱 작업이 있었습니다.

  • 애니메이션 에디터의 레이아웃 트윅 작업, 애셋 브라우저에서 열을 추가하고 제거하는 기능 추가 작업이 있었습니다.

  • 애니메이션 블루프린트 에디터의 레이아웃을 표준 블루프린트 에디터 레이아웃과 비슷해 지도록 하는 트윅 작업이 있었습니다. 애님 프리뷰 에디터는 이제 옵션을 통해 프리뷰 프로퍼티에 가한 변경사항을 클래스 디폴트에 적용시킬 수 있습니다.

image alt text

애셋 바로가기 바

image alt text

개선된 애셋 바로가기 바를 사용하여 스켈레톤을 공유하는 연관된 애니메이션 애셋 사이를 점프할 수 있습니다.

녹화 기능 트랜스포트 컨트롤로 이동

image alt text

툴바의 버튼으로 실행하던 녹화 기능을, 시퀀서와 비슷하기 트랜스포트 컨트롤의 녹화 버튼으로 이동시켰습니다.

프리뷰 씬 셋업

image alt text

씬의 오브젝트와 그 애니메이션을 '씬 셋업' 메뉴를 통해 각각의 에디터에서 변경할 수 있습니다. 이를 통해 적용되는 애니메이션을 미리보고, 다양한 프리뷰 메시를 (스켈레톤 또는 개별 애니메이션에 대해 지정하여) 설정하며, 부가 메시를 붙일 수 있습니다. 부가 메시는 이제 주요 메시의 슬레이브로 구동되는 스켈레탈 메시 세트를 정의하는 별도의 에디터 전용 애셋으로 지정됩니다.

애니메이션 커브 창

이제 애니메이션 에디터의 애니메이션 커브 전용 창에서 커브를 쉽게 편집할 수 있습니다. 커브는 편집하면서 실시간 미리보기 가능합니다.

image alt text

기존에는 애니메이션 애셋 자체의 커브만 설정 가능했었는데, 이제 스켈레톤에 대해서도 설정할 수 있습니다.

자손 액터 템플릿

블루프린트에 추가된 자손 액터 컴포넌트는 자신의 프로퍼티를 자손 액터 템플릿을 통해 커스터마이징 가능합니다.

image alt text

Child Actor (자손 액터) 컴포넌트를 추가한 이후에는, 소유중인 액터 블루프린트 에디터의 디테일 패널에 펼칠 수 있는 템플릿이 보일 것입니다. 여기서 자손 액터의 모든 프로퍼티를, 퍼블릭 변수까지 포함해서 모두 접근할 수 있습니다.

예를 들어 Blueprint_A 가 있는 경우 퍼블릭 변수로 색을 구동시키는 PointLight 컴포넌트가 들어있고, 그 블루프린트를 Blueprint_B 내 자손 액터 컴포넌트로 만든다면, 그 색 변수를 Blueprint_B 의 디테일 패널에서 조절할 수 있게 되는 것입니다!

자손 액터 컴포넌트의 기본 프로퍼티에 묶여있고 게임플레이 스크립트를 통한 업데이트만 가능했던 기존 방식에 비하면 엄청난 발전입니다.

기본 애니메이션 블루프린트

스켈레탈 메시에 애니메이션 블루프린트를 할당하면, 컴포넌트에 할당된 애니메이션 블루프린트 이후 항상 실행되도록 할 수 있습니다. 이를 통해 메시를 애니메이션 툴에서 보든, 시퀀서 시네마틱이나 레벨에 그냥 배치했을 때든, 항상 적용되는 애님 다이내믹스 또는 기타 컨트롤러를 구성할 수 있습니다.

이를 통해 특정 다이내믹스, 컨트롤러, IK, 기타 애님 블루프린트 기능같은 것을 하나의 메시에 연관시켜, 해당 메시에 사용하도록 의도된 애니메이션 블루프린트마다 중복해서 만들어줄 필요가 없어졌습니다.

'포스트 프로세스' 애니메이션 블루프린트 역시 별도의 네이티브 및 블루프린트 업데이트 스텝이 있어, 애니메이션 그래프에서 사용할 파라미터를 읽거나 계산하도록 할 수 있습니다.

image alt text

image alt text

신기능: VR 에서 랜드스케이프 편집

이제 VR 에서 모션 컨트롤러를 사용하여 터레인 생성 및 조각 작업이나 랜드스케이프 머티리얼 페인트 작업을 할 수 있습니다!

image alt text

퀵 메뉴의 '모드' 패널에서 랜드스케이프 편집 툴을 불러올 수 있습니다. 그런 다음 UI 에서 브러시를 선택하고 칠하기 시작합니다! 모션 컨트롤러의 'Modifier' (다른 작업) 버튼을 누른 상태에서는 칠을 벗겨낼 수 있습니다.

비히클 지원 개선

타이어 포스가 적용되는 위치를 변경했습니다. 이전에는 비히클의 질량 중심에 적용되었었습니다. 이제 **타이어의 질량 중심**에 포스를 적용하여, 차량의 하중에 따른 흔들림을 처리하기가 쉬워졌습니다.

image alt text

Simple Wheeled Vehicle Movement Component (바퀴 단순화 비히클 이동 컴포넌트)를 추가, 복잡한 엔진 구동계 시뮬레이션 없이도 휠 서스펜션이나 타이어 마찰 효과를 냅니다. 이 컴포넌트를 통해 **개별 타이어에 토크 적용**을 쉽게 할 수 있습니다. Wheeled Vehicle Movement Component 를 상속하는 모든 컴포넌트는 이제 임의의 컴포넌트에서 사용할 수 있으며, 더이상 Wheeled Vehicle 액터에 의존할 필요가 없습니다.

기존 콘텐츠는 이전의 작동방식 유지를 위해 Deprecated Spring Offset Mode (폐기된 스프링 오프셋 모드)가 자동으로 true 설정됩니다. Suspension Force Offset (서스펜션 포스 오프셋) 옵션을 통해 추가적인 조정이 가능합니다.

Android의 벌칸 지원 개선

언리얼 엔진 4.14 에서는 벌칸 지원 게임을 쉽게 발매할 수 있습니다!

image alt text

  • UE4 는 벌칸 드라이버 포함 Android 7 (Nougat) 디바이스와 아울러 최근 OTA 업데이트를 실행한 삼성 갤럭시 S7 을 지원합니다.

  • Android 디바이스에서의 UE4 벌칸 렌더러 관련 여러가지 렌더링 이슈가 해결되었습니다.

  • 벌칸이 지원되지 않는 Android 디바이스에서 실행되면 렌더러가 자동으로 OpenGL ES 모드로 돌아갑니다.

  • 특정 디바이스와 드라이버 버전에서의 벌칸 지원 여부를 디바이스 프로파일에서 설정할 수 있으며, 여기에는 ES 3.1 이나 ES 2 로 돌아가는 옵션도 포함됩니다. 이를 통해 UE4 게임은 벌칸 구현이 불완전하거나 이슈가 있는 디바이스에서는 벌칸 지원을 비활성화시키고 OpenGL ES 를 사용하도록 할 수 있습니다.

신기능: 모바일에서 커스텀 뎁스 지원

모바일 렌더링 패스에서 커스텀 뎁스가 지원됩니다. 커스텀 포스트 프로세스 머티리얼은 이제 씬 뎁스, 커스텀 뎁스는 물론 씬 컬러에서도 샘플링 가능합니다.

image alt text

포스트 프로세싱을 요하므로, 모바일 HDR 기능을 반드시 켜야합니다. 이 기능은 현재 모바일 MSAA 기능이 켜진 상태에서는 작동하지 않습니다.

모바일에서 씬 캡처 개선

씬 캡처를 렌더링할 때, 역(Inverse) 오파시티와 뎁스 값을 출력하는 씬 캡처 소스 세팅이 모바일에 지원됩니다.

image alt text

  • 'SceneColor (HDR) in RGB, Inv Opacity in A' (RGB 에 씬 컬러(HDR), A 에 역 오파시티) 옵션은 반투명이 있는 오브젝트를 텍스처에 렌더링한 뒤, 그것을 씬이나 위젯 블루프린트 위에 알파 블렌딩하는 데 사용할 수 있습니다.

  • 비슷하게, 결과 텍스처를 사용할 때도 뎁스 값을 마스크로 사용할 수 있습니다.

  • 오파시티 데이터 생성에는 비용이 약간 드는데, 오파시티가 필요치 않은 경우 'SceneColor (HDR) in RGB, 0 in A' (RGB 에는 씬 컬러(HDR), A 에는 0) 옵션으로 퍼포먼스를 향상시킬 수 있습니다.

  • 씬 캡처는 이제 Android 6 이전 갤럭시 S6 등 부동소수점 타깃을 지원하지 않는 디바이스에서도 정상 작동합니다.

클로스 스키닝 개선

엔진 내에서 클로딩에 쓰이는 별도의 메시 대 메시 스키닝 데이터를 계산하는 기능을 추가, 이제 .apx 나 .apb 파일로 익스포트된 렌더 데이터를 사용하는 대신 UE4 가 이미 갖고 있는 렌더 데이터를 사용합니다. APEX 익스포트된 애셋에서 시뮬레이션 메시를 구한 다음, 그 메시에 렌더 데이터 스킨을 다시 입힙니다. 즉 최종 데이터가 원래 임포트한 데이터만큼 괜찮아 보인다는 뜻입니다.

여기에는 몇 가지 장점이 있습니다. 기존에는 노멀이 (아래와 같이) 잘못되어 보일 수 있었고, UV 채널 하나로 제한되어 있었습니다. 새로운 스키닝 시스템은 이 두 가지 문제를 동시에 해결합니다.

image alt text

머티리얼 어트리뷰트 노드

머티리얼 프로퍼티의 대대적인 확장성 개선 작업의 일환으로, 이제 머티리얼 어트리뷰트 작업시 읽기가 편해지고 오류에 강해졌습니다.

  • GetMaterialAttributes - BreakMaterialAttributes 간단 버전입니다.

  • SetMaterialAttributes - MakeMaterialAttributes 간단 버전입니다.

  • BlendMaterialAttributes - 머티리얼 어트리뷰트 구조체의 블렌딩을 쉽게 해주는 새로운 노드입니다.

Get 과 Set 노드의 주요 개선점은, 모든 어트리뷰트가 기본으로 노출되는 Break 및 Make 노드와 달리 핀이 선택적으로 추가된다는 점입니다. 이를 통해 모든 어트리뷰트 핀을 직접 연결해야 했던 기존의 작업방식에서 벗어날 수 있습니다. 노드를 선택하면 디테일 패널에 현재 핀 목록이 표시되어, 펼치거나 제거할 수 있습니다. 예를 들어 아래 머티리얼 함수는 어트리뷰트 세트를 받아 베이스 컬러와 러프니스를 블렌딩하여 빛나는 빨간색 표면을 만들어내고 있습니다.

image alt text

그래프의 지저분한 부분이 줄어들 뿐만 아니라, 이 노드들은 프로젝트에 추가할 수 있는 커스텀 머티리얼 어트리뷰트를 통해 다수의 백엔드 변경사항을 상위 호환되도록 하는 장점을 활용할 수 있습니다. 프로젝트간의 머티리얼 공유도 보다 쉬워지는데, 없는 어트리뷰트를 자동 감지하여 사용자에게 오류 처리 기회를 주기 때문입니다. 노드에 명시되지 않은 어트리뷰트는, 머티리얼 그래프 생성 이후 추가된 것을 포함해서, 메인 머티리얼 어트리뷰트 핀과 함께 그대로 전달됩니다. Make 및 Break 노드로 새 핀을 추가했다면, 모든 그래프에서 수동으로 업데이트해 줘야 했을 것입니다.

새로운 Blend 노드는 마스크를 사용하여 다수의 어트리뷰트 세트가 블렌딩 가능하도록 하기 위한 것인데, 이는 디테일한 머티리얼 레이어 작업을 할 때 흔히 하는 작업입니다. 아래 예제는 (함수로 정의된) Red 및 Green 머티리얼을 고르게 블렌딩한 다음 그 결과물에 클리어 코팅을 적용하는 것입니다:

image alt text

기본적으로 Blend 노드는 모든 머티리얼 어트리뷰트에 대해 알파 입력을 사용하여 선형 보간(lerp) 합니다. 이 노드에는 버텍스/픽셀 단위 블렌딩을 선택할 수 있는 체크박스가 있어, 버텍스 전용 또는 픽셀 전용 마스크 데이터를 사용할 때 쉽게 제어할 수 있습니다. 위의 새로운 Get 및 Set 노드와 비슷하게, Blend 노드는 추가 또는 제거되는 새 어트리뷰트를 자동 처리하므로, 어트리뷰트 등록시의 커스텀 블렌딩 작동방식을 프로그래머가 지정할 수 있습니다.

머티리얼에 스키닝 전 로컬 위치

머티리얼은 스켈레탈 메시의 레퍼런스 포즈 위치에 접근하여, 버텍스별 출력에서 사용할 수 있습니다. 애니메이션 캐릭터에 현지화된 이펙트가 가능합니다. 이 노드는 스태틱 메시가 표준 로컬 위치를 반환하기도 하는 대상에도 공유 가능합니다. 아래 그래프는 로컬 스페이스에 그리드 패턴을 만들어 애니메이션 도중 스켈레탈 메시에 상대적인 위치가 유지되는 예제입니다:

image alt text

image alt text

시퀀서 샷 임포트/익스포트 개선

프레임으로 무비 녹화 기능이 샷 별로 처리됩니다. 마스터 시퀀스는 이제 각 샷의 시작과 끝에 부가 프레임을 붙여 렌더링할 수 있습니다. 이 부가 프레임은 편집 결정 목록(EDL) 형태로 컷 인/아웃 되는데, 그 EDL 을 외부 비디오 편집 프로그램에서 샷 사이의 컷을 조절하는 데 사용할 수 있습니다. image alt text

카메라 릭 크레인 개선

카메라 릭 크레인의 작동방식이 물리적인 크레인의 움직임을 모방하도록 수정했습니다.

image alt text

  • 카메라 크레인 마운드의 롤 및 요는 0 입니다.

  • 크레인에 대한 마운트 핏치/요를 고정시키는 토글 옵션을 추가했습니다. 기본적으로 고정되어 있지는 않으므로, 카메라가 땅과 수평을 유지합니다.

신기능: 시퀀서 오디오 녹화

이제 마이크를 통해 시퀀스에 음성을 녹화할 수 있습니다.image alt text

포즈 드라이버 개선

Pose Driver (포즈 드라이버) 노드를 통해, '예제 포즈' 세트에 따라 애니메이션의 다른 부분을 본으로 구동시킬 수 있습니다. 이번 릴리즈에서는 본 트랜스폼은 물론 모프 타깃을 구동시킬 수도 있습니다. 예를 들어 팔의 회전값에 따라 어깨 패드 본을 구동시키는 것입니다. 구동하는 본의 회전 대신 이동을 사용하는 옵션도 추가했습니다. 디버그 드로잉도 개선되어 각 '타깃' 포즈와 현재 본이 거기에 얼마나 가까이 있는지도 표시됩니다.

image alt text

신기능: 가상 본

스켈레톤에 '가상 본'을 추가하는 기능을 추가했습니다. 가상 본은 스키닝이 불가능하지만, 스켈레톤의 두 본 사이에 제약되어 스켈레톤의 각 본에 대한 데이터를 자동 생성합니다. 예를 들어 손의 자손이지만 손바닥 조인트에 제약된 조인트를 추가할 수 있습니다. 그러면 이것을, 소켓과는 달리, 애니메이션 블루프린트에서 (IK 또는 룩앳) 타깃으로 사용하거나, 나중에 애니메이션 블루프린트에서 변경할 수도 있습니다.

image alt text

이는 캐릭터 반복처리 시간이 빨라집니다. 기존에는, IK 나 조준의 타깃 조인트 계층구조를 변경하려면, 엔진 외부의 디지털 콘텐츠 제작 프로그램에서 한 다음 모든 애니메이션을 다시 임포트하여 새로운 조인트가 포함되도록 애니메이션 에디터를 수정해야 했으나, 이제 가상 본을 통해 외부 작업을 건너뛰고 모든 작업을 엔진 내에서 처리할 수 있습니다. 하지만 애니메이션 데이터에 해당 조인트를 포함시켜 재압축은 해야합니다.

가상 본의 보다 실전적인 활용 방법은, '파라곤에 사용된 애니메이션 기법'을 참고하시기 바랍니다. 파라곤에서는 경사로 워프와 오리엔테이션에 사용되었으며, 컨트롤러에 대한 레퍼런스 프레임 변경이나 리타기팅이 쉬워집니다.

모프 타깃 디버그 뷰 모드

새로운 모프 타깃 뷰 모드는 각각의 모프 타깃에 영향받는 버텍스를 쉽게 확인할 수 있습니다.

image alt text

자손 애니메이션 몽타주

부모 몽타주를 기반으로 자손 몽타주를 만들면, 전체적인 타이밍을 유지한 채 애니메이션 클립을 대체할 수 있습니다. 게임플레이에 영향을 끼치지 않으면서 동작에 베리에이션을 추가하고자 할 때 좋습니다.

image alt text

신기능: MIDI 디바이스 플러그인

이번 릴리즈에는 음악 관련 하드웨어 작업에 쓰이는 'MIDI Device' 플러그인이 포함되어 있습니다. 간단한 MIDI 인터페이스로, 컴퓨터에 연결된 디바이스에서 MIDI 이벤트를 받을 수 있도록 해주는 것입니다. 현재 입력만 지원됩니다.

블루프린트에 사용하는 방법은 다음과 같습니다:

  • Plugins UI 에서 'MIDI Device' 플러그인을 활성화시킨 뒤 언리얼 에디터를 재시작합니다.

  • 블루프린트 우클릭 메뉴에서 'MIDI Device Manager' 를 검색합니다.

  • 'Find MIDI Devices' 를 호출하여 원하는 디바이스를 선택합니다.

  • 'Found MIDI Device' 구조체를 분석하여 어떤 것이 가능한지 확인합니다.

  • 원하는 디바이스에 대해 'Create MIDI Device Controller' 를 호출합니다. 그것을 변수에 저장합니다. (오브젝트에 대한 레퍼런스를 변수에 저장하지 않으면 가비지 컬렉팅되어 이벤트를 받지 못하게 됩니다!)

  • MIDI Device Controller 에서 자신의 이벤트를 'On MIDI Event' 에 묶어줍니다. 받을 새 MIDI 이벤트가 하나라도 있으면 매 게임 틱마다 호출됩니다.

  • 이벤트에 전달된 데이터를 처리하여 프로젝트에서 활용합니다!

신기능: 랜드스케이프 회전 툴

이제 랜드스케이프 미러링 툴로 미러링 면에 평행인 반사 지오메트리를 뒤집어, 대각선 방향으로도 반대되는 멀티플레이어 맵을 만들 수 있습니다.

image alt text

메시 머티리얼 슬롯 임포트 개선

스태틱/스켈레탈 메시에서 모든 머티리얼이 어떻게 사용되는지에 대해 보다 자세한 정보와 제어가 가능하도록, 그리고 메시를 리임포트할 때 머티리얼 순서가 일관되지 않던 문제를 개선시키기 위해 머티리얼 작업방식이 변경되었습니다.

image alt text

목록의 각 요소는 다음과 같은 정보가 들어있는 머티리얼 슬롯입니다.

  • 슬롯 이름

    • 머티리얼 리임포트시 일치시키는 데 사용되는 슬롯 이름입니다. 메시를 리임포트할 때 FBX 파일에서 이 이름을 검색하여 기존 머티리얼의 어디에 일치시킬지 결정합니다. 기존에는 인덱스 순서에 의존했기 때문에 망가지기 쉬웠습니다.

    • 이 변경사항 이전에 임포트된 메시는 머티리얼 슬롯이 없음으로 되어 있을 것입니다. 이 변경사항 이후 임포트되는 메시는 머티리얼 슬롯이 기본으로 임포트되는 머티리얼 이름으로 설정됩니다.

  • 머티리얼 애셋 레퍼런스

  • (툴팁에서) 임포트된 머티리얼 원본 이름입니다.

이제 블루프린트와 C++ 에서 하드코딩된 인덱스 대신 머티리얼 슬롯 이름을 사용하여 머티리얼 슬롯을 구해오는 것이 가능합니다. Set Material By Name 을 호출하면 스켈레탈 메시 또는 스태틱 메시 컴포넌트에 다이내믹 머티리얼을 설정합니다. 인덱스가 아닌 이름 룩업을 사용하면 메시의 머티리얼 순서가 변경되어도 게임플레이 코드가 정상 작동할 것입니다.

플랫폼 SDK 업그레이드

새 버전이 릴리즈될 때마다 엔진이 플랫폼 파트너의 최신 SDK 버전을 지원하도록 업데이트하고 있습니다.

image alt text

  • Xbox One: August 2016 QFE 2

  • Playstation 4: PSR SDK 4.008.061

  • HTML5: Emscripten 1.36.13

  • macOS: 10.12 Sierra, Xcode 8.1

  • iOS/tvOS: iOS10/tvOS10, Xcode 8.1

신기능: 모바일 다운로드/패치용 블루프린트 라이브러리

새로운 Mobile Patch Utilities Blueprint library (모바일 패치 유틸리티 블루프린트 라이브러리)에는 모바일 게임을 앱 스토어 초기 다운로드의 일부로 배포하는 방식이 아닌, 클라우드 웹사이트에서 **게임 콘텐츠와 패치를 다운로드하고 설치**할 수 있도록 해줍니다.

image alt text

업데이트된 게임 콘텐츠가 있는지 확인, 다운로드 시작, 진행상황 기록, 오류 처리, 다운로드에 성공한 콘텐츠 팩 설치와 같은 작업을 하는 함수 기능이 있습니다. 저장 공간은 충분한지, 와이파이 연결은 가능한지 확인하는 함수 기능도 있으므로, 블루프린트에서 그러한 경우에 대한 경고 발생이 가능합니다. Android와 iOS 모두 지원합니다.

신기능: Amazon Kindle Fire 용 GameCircle 플러그인

새로운 Online Subsystem GameCircle 플러그인이 포함되었습니다!

image alt text

GameCircle 업적, 순위표, 친구목록과 함께 Amazon 앱 내 구매도 지원합니다. 플러그인을 활성화시키면 Plugins 카테고리 아래 새로운 Amazon GameCircle 프로젝트 세팅 패널에 접근할 수 있습니다. AndroidManifest.xml 를 편집하여 Fire TV 를 활성화시키는 것도 여기서 가능합니다.

image alt text

신기능: 라이브 GPU 프로파일러

UE 4.14 에는 실시간 GPU 프로파일러가 포함되어 있어, 주요 렌더링 카테고리에 대한 프레임별 통계가 제공됩니다. 사용하려면 stat gpu 콘솔 명령을 입력하면 됩니다. 에디터의 뷰포트 옵션 - '통계' 서브메뉴를 통해 불러올 수도 있습니다.

image alt text

통계는 누적되며 계층구조가 없으므로, 이벤트 트리를 깊게 파내려가지 않고도 주요 카테고리를 확인할 수 있습니다. 예를 들어 섀도 프로젝션은 (모든 뷰에 있는) 모든 라이트의 섀도 프로젝션 전체를 합한 것입니다.

화면상에 표시되는 GPU 통계는 타이틀 실행 도중의 GPU 부하를 간단히 시각적으로 분석해 보여주는 것입니다. 어떤 변화가 끼치는 영향을 즉시 확인하기에도 좋습니다. 예를 들어 (리컴파일 셰이더 변경 상태로) 즉석에서 셰이더 변경 및 리컴파일할 때, 에디터에서 머티리얼을 변경할 때, 콘솔 변수를 변경할 때 등입니다.

GPU 통계는 타이틀 실행 도중 파일에 기록하여 나중에 분석할 때 쓸 수도 있습니다. 기존 통계와 마찬가지로 'stat startfile', 'stat stopfile' 콘솔 명령을 사용하여 통계를 ue4stats 파일에 기록한 뒤, 나중에 언리얼 프론트엔드 툴에서 열어 시각화시켜 볼 수 있습니다.

image alt text

언리얼 프론트엔드로 GPU 프로파일링 중입니다. 총, 포스트프로세싱, 베이스패스 시간이 표시됩니다.

통계는 코드에 플로트 카운터로 선언되어 있습니다:

DECLARE_FLOAT_COUNTER_STAT(TEXT("Postprocessing"), Stat_GPU_Postprocessing, STATGROUP_GPU);

렌더링 스레드의 코드 블록은 SCOPED_GPU_STAT 매크로에 그 통계 이름을 레퍼런싱하여 인스트루먼트 가능합니다. 이는 SCOPED_DRAW_EVENT 와 비슷한 방식으로 작동합니다. 예:

SCOPED_GPU_STAT(RHICmdList, Stat_GPU_Postprocessing);

명시적으로 인스트루먼트되지 않은 GPU 작업은 전부 담는 [unaccounted] 통계로 들어갑니다. 이 부분이 너무 커지면, 실종된 작업을 밝히는 데 SCOPED_GPU_STAT 이벤트가 추가로 필요하다는 것을 말합니다. 드로 이벤트와는 달리 GPU 통계는 누적입니다. 동일한 통계에 대한 항목을 몇 개씩 추가할 수 있으며, 이는 프레임 전반에 걸쳐 합산됩니다.

CPU 에 종속된 어떤 경우는, GPU 시간이 CPU 병목 (버블) 현상에 영향받을 수 있습니다. CPU 가 따라답을 때까지 GPU 가 기다리는 것인데, 드로 스레드 시간이 높은 경우 예상치 못한 결과가 보인다면 그러한 부분을 고려해 보시기 바랍니다. PlayStation 4 에서는 명령 목록 제출과 타이밍 사이의 시간을 제외하여 그러한 버블 현상을 보정하고 있습니다. 앞으로 다른 최신 렌더링 API 에도 그러한 기능을 확장하도록 하겠습니다.

액터 텍스처 아틀라스 병합 개선 (실험단계)

액터를 병합하여 머티리얼을 합칠 때 텍스처 스페이스를 활용하는 방식**을 변경했습니다. 각 머티리얼의 가중치가 동일한 아틀라스 텍스처를 만드는 대신, 가중치를 입힌(binned) 아틀라스 텍스처** 를 생성하는 옵션을 도입한 것입니다.

image alt textimage alt text

(왼쪽: 가중치가 동일한 머티리얼. 오른쪽: 가중치를 입힌 (Binned) 방식)

먼저 머티리얼이 샘플링하는 최대 크기 텍스처에 따라 개별 머티리얼의 중요성을 계산합니다. 그 후 이 값을 사용하여 머티리얼이 차지할 공간을 계산하고, 각 텍스처를 반복 처리해 가며 아틀라스 텍스처에 추가합니다. 이렇게 하면 아틀라스 텍스처가 입력 머티리얼을 보다 잘 표현하게 되는데, 원본 텍스처 데이터 크기가 아틀라스 텍스처에서 차지하는 공간을 계산하는 데 고려되기 때문입니다.

신기능: Linux에서 Android 지원

커뮤니티의 pull 요청 덕에 Linux용 Android 지원이 가능해졌습니다. CodeWorks for Android from NVIDIA for Linux 만 있으면 필요한 NDK 와 SDK 가 구성됩니다. 추가적으로 OpenJDK 1.8 도 설치하고, JAVA_HOME 을 설치 디렉터리로 설정해 줘야 합니다. 참고로 현재 Linux에서는 Android 벌칸이 지원되지 않습니다.

미디어 플레이어 에디터

이제 컴퓨터의 파일을 미디어 플레이어 뷰포트에 끌어 놓아 FileMediaSource (파일 미디어 소스) 애셋을 만들지 않고도 비디오 파일을 미리볼 수 있습니다.

image alt text

  • 디코더 퍼포먼스 통계를 위한 탭이 추가되었습니다. 출력은 재생에 사용되는 플레이어 플러그인에 따라 달라집니다.

    image alt text

신기능: 모바일용 VR 멀티뷰 지원

이제 모바일 디바이스에서 (지원되는 경우) 모바일 멀티뷰 패스를 사용할 수 있습니다! 모바일 멀티뷰는 데스크톱의 인스턴스드 스테레오와 비슷하며, CPU 의 스테레오 렌더링에 대한 최적화된 패스를 제공해 줍니다.

이 기능을 사용하려면, 프로젝트 세팅의 VR 섹션 아래에서 활성화시켜 줍니다. 이 기능의 정상 작동을 위해서는 Android 빌드 세팅을 OpenGL ES2 로 설정하고, 모바일 HDR 과 인스턴스드 스테레오는 꺼야 합니다. 현재 이 기능은 최신 Mali 기반 디바이스와 호환됩니다. 이 기능을 켠 채로 패키징을 해도 호환 CPU 가 없는 경우, 실행시간에 꺼집니다.

이 기능은 아직 실험단계 기능이며, 계속해서 피처 및 디바이스 호환성 확인을 하도록 하겠습니다.

image alt text

프로젝트 세팅 메뉴에서 위와 같이 Enable Mobile Multiview 옵션을 켠 뒤 에디터를 재시작하면 효과가 적용됩니다.

SteamVR 및 PSVR 용 레이어 지원

이제 SteamVR 과 PSVR 에 레이어가 지원됩니다! Oculus Rift 플러그인에서 Stereo Layer 컴포넌트를 사용하는 것과 똑같은 방식으로 작동합니다.

신기능: VR 무비 로드

이제 엔진은 Oculus, GearVR, SteamVR, PSVR 에서 무비 로드를 지원합니다. 이는 렌더링 스레드에서 실행되며, 콘텐츠 로드시의 프레임 속도 급변을 방지할 수 있습니다.

스플래시 화면을 사용하려면, 'Set Splash Screen' 노드에 텍스처를 설정하거나, 'Enable Auto Loading Splash Screen' 노드로 맵을 로드할 때 자동 표시되도록 하면 됩니다.

신기능: PSVR 다중 프레임 속도 타깃 지원

PSVR 에서 네이티브 90Hz to 90Hz 리프로젝션, 120Hz to 120Hz 리프로젝션을 지원합니다! 지연시간 최소화 및 리프로젝션 부작용 방지를 위해 높은 프레임 속도로 실행되도록 할 수 있다는 뜻입니다. 엔진이 선택된 프레임 속도로 제한시켜 주기는 하지만, 여전히 프레임 속도를 일관되게 유지하도록 노력하기는 해야 합니다!

image alt text

신기능: Windows 멀티터치 지원

이제 Windows 7, 8, 10 에서 터치 스크린을 사용할 때 터치 이벤트가 생성됩니다. 신형 Windows 태블릿에서 터치 가능 게임이나 체험을 만들 수 있으며, 모바일 게임을 타깃 디바이스에 설치하지 않고도 터치 컨트롤을 테스트할 수 있습니다.

신기능: 빠른 비동기 로딩 시스템 (실험단계)

쿠킹된 빌드는 이제 구형 스트리밍 코드보다 훨씬 효율적인 완전 새로운 Event Driven Loader (이벤트 주도형 로더)를 사용할 수 있습니다.

이벤트 주도형 로더를 사용하는 게임은 로드 시간이 약 50% 감소될 것이며, 상황에 따라서는 더욱 빨라질 수도 있습니다. 이벤트 주도형 로더에는 애셋을 로드를 위한 통합 코드 방식이 포함되어 있습니다.

모든 패키지는 구형 블로킹 방식이 아닌 신형 비동기 방식으로 로드된다는 뜻입니다. 이벤트 주도형 로더는 현재 실험단계 기능이어서 기본적으로 꺼져있으나, 프로젝트 세팅에서 쉽게 켤 수 있습니다.

image alt text

게임 모드 및 게임 스테이트 클래스 단순화

새로운 Game Mode Base 와 Game State Base 클래스를 기존 Game Mode 와 Game State 의 부모 클래스로 추가했습니다. 모든 게임에 필요한 핵심 기능은 이제 Base 클래스에 들어있는 반면, 레거시 기능이나 슈팅게임 전용 기능은 Game Mode / Game State 클래스에 들어있습니다. 새로 시작된 프로젝트는 Base 클래스를 상속하는 반면, 기존 프로젝트는 기본적으로 해당 레거시 클래스를 상속하도록 되어 있습니다. 추가적으로 블루프린트에 몇 가지 함수가 새로 추가되었습니다.

이와 같은 변경은 오래된 게임플레이 클래스를 이해하기 쉽고 모든 프로젝트 유형에 상속하기 적합하도록 업데이트하기 위해 지속적으로 노력하고 있는 부분 중 한 가지입니다. Shooter Game 이외의 모든 샘플은 Base 클래스를 사용하도록 업데이트된 반면, Shooter Game 은 레거시 클래스에서 보다 슈팅 게임에 특화된 기능 몇 가지를 사용하는 법을 보여주고 있습니다. Game Mode/Game State 는 계속해서 지원될 것이며, 자신의 게임에 적합한 버전을 상속해야 할 것입니다.

네트워크 리플리케이션 속도 향상

서버와 연결된 클라이언트 사이의 프로퍼티 리플리케이션 방법에 내부적인 리팩터링 작업이 있었습니다.

접속된 여러 곳에 프로퍼티 리플리케이션 효율을 높이도록 코드를 변경했습니다. 이 변경 이전에는, 조건이 없는 (DOREPLIFETIME_CONDITION 보다는 DOREPLIFETIME 로 등록된) 프로퍼티 작업만 공유했었습니다. 이제 모든 프로퍼티 유형에 대해 작업을 공유합니다. 즉, 프로퍼티 변경( 및 전송 필요) 시점을 검사하는 작업이 훨씬 적게 일어난다는 뜻입니다.

내부적으로는 40% 에 달하는 속도 향상이 있었습니다. 아직 작업할 부분은 남아있지만, 작업 과정의 기쁜 소식을 같이 공유하고 싶었습니다!

Release Notes

AI

  • New: Added an "Enable AI System" flag to the World Settings that controls whether the AI System will be created for the given map.

  • Bugfix: Fixed an issue with AI Sense Sight's time slicing unintentionally skipping queue-aging if the given time limit was reached.

  • Bugfix: Fixed an issue basing whether the AI should turn or not by comparing the current desired rotation vs the last update's desired rotation. The AI should be turning based on whether or not the current desired rotation is different from the rotation of the Pawn.

  • Improvements for the consistency of loudness usage in AI Sense Hearing.

  • Minor cosmetic fix to EQS test scoring function's preview.

  • Selecting Geometry trace mode will no longer project onto the Nav Mesh first in the Projected Points EQS generators.

Behavior Tree

  • New: Expanded the BT Decorator Is At Location function with an option to use AI Data Provider.

  • New: Multi-node comments are now supported in the Behavior Tree editor. This is similar functionality to the Blueprint editor.

  • Bugfix: Fixed an issue with BT Decorator Compare BB Entries function so that it works regardless of the order of the supplied BB keys.

  • Bugfix: Blackboard key synchronization mechanics correctly handle more edge cases and complex inheritance scenarios.

  • Bugfix: Fixed an issue in propagation of persistent Blackboard keys resulting in these keys missing or being doubled in child Blackboard assets.

  • Bugfix: Fixed an issue for derived Blackboard sometimes getting post-load mechanics run before their parents.

  • Bugfix: Aborting previous movement requests as part of requesting a new one no longer resets the agent's current velocity.

  • Bugfix: Blueprint "AI Move To" function no longer uses the default AI Controller's navigation filter.

  • Bugfix: Fixed navigation export for landscape not handling mirroring and async gathering correctly.

  • Bugfix: Fixed an issue with navigation export for the capsule component.

  • Bugfix: Navlink's "Snap to cheapest area" mode now works correctly with dynamic navmeshes.

  • Bugfix: Navmesh generation no longer gets stuck in an infinite loop.

  • Bugfix: Fixed an issue with parameters of vehicle RVO avoidance.

  • Bugfix: Fixed an issue with Path Following Component for "Has Reached" not using the Goal's Radius when "Use Nav Agent Goal Location" is set to false. When "Use Nav Agent Goal Location" is set to true, we want to avoid using the Goal's location on the navmesh, but instead the acceptability of a radius should be based on the Goal's radius.

  • Path Following Component distinguishes between partial and full paths in terms of acceptance radius used. This will make partial paths behave as expected with non-trivial big acceptance radii.

  • Layer limit for navmesh generation has been increased.

  • Update Move Focus will only clear the focus if the path following component is idle. This keeps the AI rotated in the correct direction when movements get paused.

Animation

  • New: Added "Strip Animation Data On Dedicated Server" option to Animation Settings. This will remove all compressed data from cooked server data. Disabled by Default.

  • New: Added "Aim Offset Look At" node. Aim Offset node that drives its inputs automatically from a Target Location and a Source Socket.

  • New: Added Conversion settings to the Alembic import process. This enables the following:

    • Inverting UV Channels.

    • Applying a conversion matrix to the Alembic File.

    • Presets for Autodesk Maya and 3DS Max.

  • New: Added "LegIK" Anim node, which supports two or more bones per limb with min compression rotational constraint.

  • New: Added logic to separate overlapping notifies onto separate tracks. Notifies can no longer end up hidden from the user by occupying the same time on the same track.

  • New: Added the option to copy selected Morph Target names to clipboard.

  • New: Added a start time to Montage Play node and Play Slot Animation as Dynamic Montage.

  • New: Added the ability to skip empty "preroll" frames when importing an Alembic file and improved the frame information for the Import Options UI.

  • New: The animation "Sequence Length" property can now be read in Blueprints.

  • New: Added the ability to open Anim Montage to open asset from the context menu of the segment.

  • New: Added ability for selected Morph Target to view the modified vertices while in the Persona.

  • New: Added option to now insert current pose to the Pose Asset with Insert Pose.

  • New: Added SmartName Deterministic Cooking:

    • SmartName discards GUID during cooking and DisplayName becomes the identifier during cooking.

    • The GUID created nondeterministic cooking causing patch size to become huge without any actual data change.

  • Bugfix: Fixed a crash when attaching slave components with differing bone counts.

  • Bugfix: Fixed a crash with retargeting Additive Animation Montage.

  • Bugfix: Fixed a crash when routing a wire through multiple re-route nodes in an Animation Blueprint.

  • Bugfix: Fixed a crash in "Get Post Curve" when importing a pose to pose asset.

  • Bugfix: Fixed a crash when retargeting Anim Blueprint with "Allow remapping to existing assets" was enabled.

  • Bugfix: Fixed a crash when calling "Set Animation Mode" on a component with no Skeletal Mesh.

  • Bugfix: Fixed an issue when re-creating a skeleton due to a merge conflict it will add all Skeletal Meshes back to the skeleton so that it recreates all hierarchy.

  • Bugfix: Fixed an issue with invalid bound calculation in Calculate LOD Count.

  • Bugfix: Ensure the runaway loop counter gets reset when processing parallel animation.

  • Bugfix: Fixed an issue for fast path struct copy being broken for Vectors.

  • Bugfix: Fixed an issue for warning triggered by calling "Get Bone Transform" before the master pose component has been registered

  • Bugfix: Fixed an issue where layered blend per bone odd/even connection counts alternately working/not working

  • Bugfix: Fixed an issue with offset of the floor mesh in Persona when Auto-Alignment was enabled.

  • Bugfix: Fixed an issue with pose flickering on LOD change when using "Layered Blend by Bone" node.

  • Bugfix: Fixed an issue to stop empty states being created when dragging montages into State Machines.

  • Bugfix: Fixed an issue with Anim Instance "Is Running Parallel Evaluation" check to correctly test if the Skeletal Mesh Component still references the Anim Instance being used.

  • Bugfix: Fixed an issue with "generated" string appearing for a Skeletal Mesh LOD that was previously auto-generated but had been reimported from an FBX.

  • Bugfix: Fixed an issue with displaying one more frame for an animation.

    • For example, for 30 frames, it was displaying 0-30, which is incorrect and should be 0-29.

    • To avoid confusion, now it doesn't display key count. It will display the last frame number, so it will look different, but the data is still the same.

  • Bugfix: Fixed an issue with a number of cases where sub-instance animation instance functions weren't being correctly passed through the main instance.

  • Bugfix: Fixed an issue with "auto" check box in the Morph Target panel.

  • Bugfix: Fixed an issue with functionality of "show uncompressed animation" option in Persona viewports.

  • Bugfix: Fixed an issue with entries in the Anim Curves tab losing "auto" state when hidden/reshown.

  • Bugfix: Removed errant asterisks in the tooltips on the "Rotation Multiplier" node.

  • Bugfix: Fixed incorrect tooltips on the "Hand IK Retargeting" node.

  • Bugfix: Fixed an issue in montages where the wrong section was updated with changes from a Details panel when clicking on a different section.

  • Bugfix: Fixed an issue when duplicating an Anim Sequence that has been layer-edited would apply the layer twice.

  • Bugfix: Fixed an issue where Geometry Cache objects would not be visible in Standalone (packaged) builds.

  • Bugfix: Fixed an issue with keyboard shortcuts for Pose Asset editor panel.

  • Bugfix: Fixed an issue with keyboard shortcuts in the Curve Viewer panel.

  • Bugfix: Fixed an issue with notify states not ending when the Animation Instance was cleared.

  • Bugfix: Fixed an issue with orphaned transition nodes being created when they were duplicated or pasted without two valid pin links.

  • Bugfix: Fixed an issue with Override Materials hanging around when setting Skeletal Meshes.

  • Bugfix: Fixed an issue with pin defaults on sub-instance nodes overwriting the defaults on the inner class.

    • The class defaults will now be copied out to the pin.

  • Bugfix: Fixed an issue with pose asset blending.

    • Normalization has been removed for weights that are less than one so the poses do not instantly snap.

  • Bugfix: Fixed an issue where Pose Asset was evaluating the curve in the wrong frame.

  • Bugfix: Fixed an issue where the Pose Asset editor list was not updating when changing the source animation.

  • Bugfix: Fixed an issue with "Remove Linear Key" for Additive Animations since DDC has been added.

  • Bugfix: Fixed an issue with "Root Motion from everything" calculating incorrect root motion when animations haven't been ticking.

  • Bugfix: Fixed an issue with sample rate not applied for non-default sample rate when importing an animation.

  • Bugfix: Fixed some inconsistencies in IK editing in the viewports inside Persona when changing effector spaces.

  • Bugfix: Fixed an issue with split struct pins on animation nodes sometimes losing their links on editor restart.

  • Bugfix: Fixed an issue where sub-instance automatic properties would appear in the Details panel.

  • Bugfix: Fixed a typo in "Root motion from everything" accumulation code where we calculated root motion weight using the wrong variable.

  • Bugfix: Fixed an issue where Undoing and Redoing would force the Skeletal Mesh into T-pose.

  • Bugfix: Fixed an issue when importing Morph Targets with fixed frame count.

  • Bugfix: Fixed an issue with Blendspace triangulation.

  • Improved editor response during dragging on additive frame index (stop animation compression happening for each mouse move).

  • Non-POD structs can now be copied using the 'fast path' in animation blueprints.

  • Prevented invalid GUIDs from being saved into SmartName containers.

  • Removed save warning about empty animations from assets that contain curve data.

  • Animation Curve Cached UID list has now been moved to Bone Container from Anim Instance in preparation of supporting curve linking to bone feature, so that you could cull out for a certain LOD.

  • Changed "Create Physics Asset" in the context menu for Skeletal Meshes to enable creation of a Physics Asset without having to assign it to the Skeletal Mesh. This makes it easier to make new assets for Capsule Shadows.

  • Changed inline curve name editing to only change the name of that specific curve, instead of renaming the SmartName itself.

Animation Blueprint

  • Bugfix: Fixed a crash using anim debug with sub-instances that are preceded by branching nodes.

  • Bugfix: Fixed a crash when forcing ref pose during Anim Blueprint initialization when using sub anim instances.

  • Bugfix: Fixed a crash when using sub-instances in non-entry states.

Tools

  • New: Added Skeletal LOD workflow refactor.

    • Now we track source files for LODs to save time when reimporting LODs often.

Audio

  • New: Added a debug command to solo specific sound waves, sound cues, and sound classes.

  • New: Audio thread is now enabled by default.

  • New: Gameplay Statics' "Create Sound 2D" and "Spawn Sound 2D" now have a boolean parameter that specifies the sound should persist across level transitions.

    • Note that the returned component must continue to be referenced by something (Game Instance is a good option) or else it will be garbage collected and the sound will stop.

  • New: Looping sounds are now searchable by the asset registry.

  • New: Making ability to suppress subtitles a UPROPERTY.

  • New: Added support for parsing .wav files with a WAVE_FORMAT_EXTENSIBLE format chunk.

  • New: Added support for pausing individual audio components.

  • Bugfix: Fixed a crash which would occur when copying and pasting an undefined custom sound node from one project to a project which doesn't have the custom node.

  • Bugfix: Fixed an issue for one-shot sound wave instances triggering unintentionally from active sounds when volume mix is 0.

  • Bugfix: Fixed an issue for sound cue delay not consuming startime correctly.

  • Bugfix: Fixed an issue with attenuation on 2D multi-channel sound sources.

  • Bugfix: Fixed an issue with concurrency resolution rule stop quietest with looping sound waves.

  • Bugfix: Fixed an issue with sound node distance cross fade for case of looping sounds.

  • Bugfix: Fixed an issue where Undo in Sound Cue editor does not undo looping changes.

  • Bugfix: Fixed various thread safety issues with occlusion on the audio thread.

  • Hooked up compression quality settings to AT9 files.

  • Prevent procedural sound waves from stopping if they generate 0 bytes of data.

  • Read Compressed Info calculates duration for ADPCM audio.

Automation

  • New: Added a json summary report file generation as part of all automated test summaries.

  • New: Functional tests now support warnings as errors on a per test basis.

  • New: Included .tps files in the installed build to make it easier for users to identify third party software in use. Also included source for additional programs to Installed Build.

  • New: Added Documentation/Extras in Installed Build.

  • Bugfix: Fixed an issue with Test Equal Add Error Message in Automation Test Base

  • Bugfix: Fixed issues with Mobile Device Interface in Installed Builds.

  • Bugfix: Fixed an issue with Android sessions not appearing in the Session Frontend.

  • Bugfix: Fixed support for PS4 in Installed Builds.

  • Bugfix: Fixed various connection reliability issues with TCP Message Transport used for automation testing on mobile devices.

  • Bugfix: Fixed various issues for PS4 deployment.

  • Bugfix: Fixed support for Xbox for Installed Builds created via Build Graph script.

  • Automation - Presets are now stored in json files stored in Config so they can be shared, and human readable. Working on screenshot automation, getting it where it needs to be to permit us to have repeatable tests for comparison.

  • Each session launched from the Session Frontend Launch tab now has a unique GUID and they will correctly appear as separate sessions in the Automation tab.

  • Excluded some more intermediates from the Installed Build.

  • Functional Tests now run correctly in non-editor build.

  • Functional tests will no longer move the camera if the user is using a debug camera.

Blueprints

  • New: Added a new "Is Standalone" node which returns true if the game is running in Standalone.

  • New: Added ability to change curves used by a Timeline at runtime.

  • New: Added an option in Editor Preferences Blueprint section to "Display Unique Names for Blueprint Nodes" rather than the node type.

  • New: Blueprint Nativization: Reduced size of the executable file.

  • New: Added ability to flag Components added via Blueprints as editor only.

  • New: Exposed "Get Component By Class" to Blueprints.

  • New: Exposed the method to "Is Any Rigid Body Awake" for primitive components to Blueprints. This enables a Blueprint to determine if Physics Simulation is being done on the object and fulfills a request to determine if an object is "awake" or "asleep".

  • New: Replication condition property flags are now exposed to Blueprints. This can be set in the Properties Details panel.

  • New: Single layout Blueprint is no longer an experimental feature. The option to disable it has been removed.

  • New: Widget and Animation rich diff tool is no longer experimental.

    • Some changes are not detectable by the diff tool, but they are mentioned in a warning to the user.

  • New: Enabled instances of Hierarchical Instanced Mesh Components to be moved around with the transform widget in the Blueprint Editor, just like Instanced Mesh Components!

  • Bugfix: Fixed a crash in the Blueprint Profiler when compiling or profiling that had the following:

    • Contains a loop.

    • Nested Macros.

    • Collapsed Nodes.

    • Called parent functions or events.

  • Bugfix: Fixed a crash caused when compiling a Blueprint after hot-reloading its base class.

  • Bugfix: Fixed a crash when compiling particularly cross-dependent Blueprints.

  • Bugfix: Fixed a crash when trying to pick a debug world for the Blueprint debugger.

  • Bugfix: Fixed a crash when implementing an interface to a child Blueprint and then implementing it with a parent Blueprint.

  • Bugfix: Fixed a crash that could occur when reparenting a child Blueprint class that had inherited its default scene root component from the parent class.

  • Bugfix: Fixed a crash that would occur on a right-click in the Blueprint editor's component tree view after having copied one or more BSP actors to the clipboard.

  • Bugfix: Fixed a crash that could happen when pasting a copied "Select" node.

  • Bugfix: Fixed a crash on load in "Remove Node and Promote Children" when removing a corrupted SCS node if it has no parent link (the children are moved to the root node instead).

  • Bugfix: Fixed a rare crash in "Get Default Value Visibility" after removing a pin from a Blueprint node.

  • Bugfix: Fixed a crash when one attempts to generate an abstract class from a Blueprint.

  • Bugfix: Fixed a crash in FCDODiffControl when CDOs being compared had different numbers of properties.

  • Bugfix: Fixed a crash that could occur when pasting graph nodes with orphaned connections to a different graph.

  • Bugfix: Fixed a crash when deleting many Blueprint assets.

  • Bugfix: Fixed an issue where a function, created from collapsed nodes, cannot have a parameter of a weak pointer type.

  • Bugfix: Fixed an issue with assets referenced by a function's local variables won't be garbage-collected.

  • Bugfix: Fixed an issue where the Blueprint Editor viewport now correctly displays the result of an undo action that changes the default transformation of the Blueprint Actor.

  • Bugfix: Fixed an issue where changes in User Defined Structure will be properly applied in local variables, without resetting the values.

  • Bugfix: Fixed circular dependencies introduced by default values on User Defined Structs that are now loaded correctly. This fixes on cause of data resetting to default on load.

  • Bugfix: Fixed an issue where compiling a Blueprint would trigger the World Outliner to sometimes detach.

  • Bugfix: Fixed an issue where entering "foreach" in the Blueprint Editor context menu will not result in "For Each Loop" being the first selection.

  • Bugfix: Fixed an issue where moving a variable from a child class to a parent class would break variable Blueprint nodes.

  • Bugfix: Fixed an issue in the Blueprint context menu where options would be unavailable when you hid a sub-level.

  • Bugfix: Fixed an issue so that the "Create Save Game Object" node will now change its output type to match the class you select.

  • Bugfix: Fixed an issue that caused comment bubbles to display incorrectly when using Play-In-Editor.

  • Bugfix: Fixed an issue where functions could lose inputs after adopting them from an interface.

  • Bugfix: Fixed an issue that would cause split-pins on latent "Gameplay Task" nodes to lose connection.

  • Bugfix: Fixed an issue that could hang the editor indefinitely during Blueprint Compilation.

  • Bugfix: Fixed an issue that prevented the option to split a struct pin from appearing on a "Get Variable" node.

  • Bugfix: Fixed an issue that prevented you from ctrl-dragging pin links from macro nodes.

  • Bugfix: Fixed an issue that would cause subsequent latent nodes to fail to execute once one was running.

  • Bugfix: Fixed an issue that would prevent saving a Blueprint after compiling a component that it used.

  • Bugfix: Fixed an issue where Blueprints were not properly inheriting their associated config file.

  • Bugfix: Fixed an issue with rotation struct input pins where splitting them would cause each of the values to shift to the wrong axis.

  • Bugfix: Fixed an issue in which data loss could occur for inherited component default value overrides within a child Blueprint class after recompiling a Blueprinted component class.

  • Bugfix: Fixed an issue that could lead to data loss at runtime when choosing to enable the optimized Blueprint component instancing path for a cooked build.

  • Bugfix: Fixed an issue that could lead to per-instance data loss in Blueprint-constructed components after renaming component variables in the components tree view.

  • Bugfix: Fixed an issue that would lead to Blueprint class compile errors caused by missing client-only component class reference properties in an uncooked server-only context (e.g. UE4Editor.exe -server)

  • Bugfix: Fixed an issue where "Custom Event" was no longer the top option when searching the Blueprint menu for "custom."

  • Bugfix: Fixed the directions of parameters in functions like "Get Overlap Infos."

  • Bugfix: Fixed an error when output references parameters of Blueprint Native Event are not in a specific order.

  • Bugfix: Fixed failed "ensures" when pasting linked Anim Blueprint nodes.

  • Bugfix: Fixed issues that could lead to per-instance component data loss after reconstruction of a Blueprint class containing one or more "Add Component" nodes in the Construction Script.

  • Bugfix: Fixed issues with Object Library. It now stores "Blueprint Generated Graph" object instead of "Blueprint" object.

  • Bugfix: Fixed an out-of-order registration issue with native and/or non-scene components and Blueprint-constructed components.

  • Bugfix: Fixed an issue with "Time Seconds To String" format so it matches the comment.

  • Bugfix: Fixed a validation of incompatible pines issues. It will now generate an error.

  • Graphs in a Blueprint can properly be deleted even if they were once part of an interface on the Blueprint.

  • Inherited components in a child Blueprint class will no longer trigger a warning message when the original component has been removed from its parent class.

  • Moving a child component in a child Blueprint doesn't force a parent to become dirty anymore.

  • Nested Default Sub-objects no longer trigger an assertion failure in "Static Allocate Object" when used by a Blueprint type.

  • Reduced PIE startup time significantly when auto-recompiling a Blueprint class with multiple dependencies.

  • Removed warning that would complain about "Make Struct" nodes that didn't have any properties exposed, enabling Blueprint users to return default struct data.

  • "Show World Context Object" markup is now fully inherited. Previously only inherited for one level of a hierarchy.

  • Stale breakpoints saved in Blueprint assets no longer trigger a warning on load. Message moved to 'Display' channel.

  • Struct Ref Pins in "Set Fields In Struct" node can no longer be split when optional pins as this created ambiguous behavior.

  • Blueprint function "Get Direction Vector" has been renamed "Get Direction Unit Vector" to reflect details of its result.

  • Can no longer drag child actor from World Outliner to a Level Blueprint and create an invalid actor reference.

  • Default event nodes in child Blueprints now wire up parent call inputs so you can use them as is without breaking functionality.

  • Duplicating levels that have Blueprints with "Knot" nodes attached to events will no longer fail with a "Graph is linked to external private object" error.

  • EaseIn/EaseOut descriptions corrected to match actual behavior.

Core

  • New: Added a config based system for specifying which classes should be stripped on dedicated server and client builds.

    • Class names can be specified in the project cooking settings in the editor

    • All engine classes that relied on "Needs Load For Server" or "Needs Load For Client" have been moved over to the config based system.

    • "Needs Load For Server" and "Needs Load For Client" still function as they previously did.

  • New: Added a new file into the ini hierarchy to begin fixing the Engine/Base > Project/Default > Engine/Platform > Project/Platform confusion.

    • We now have Engine/Base -> Engine/BasePlatform -> Project/Default -> Engine/Platform -> Project/Platform. However, Engine/Platform will soon be deprecated as we move things over to Engine/BasePlatform, that are safe to move.

  • New: Added ability for arrays of structs to specify a property to be the key.

    • So, with LODGroups, the Name key inside the struct can be the unique key, so when you have multiple .ini files in the hierarchy overriding the same LODGroup by name, it will replace the first with the second, instead of adding two entries with the same name. Set by @ArrayName=KeyPropertyName. Per Object Config sections need a little different handling, which uses * (see Base

  • New: Added new Module Types: "ClientOnly" and "ServerOnly"enabling better control of when modules are compiled and loaded.

    • Can be used to slim down server / client builds.

  • New: Added some extra information to an assert when "Cpp Structs Ops" has not been initialized.

  • New: Added the ability for plugins to reside outside of the Engine/Plugins and Game/Plugins directory.

    • This is useful for plugins that are shared across game teams, but don't want to be placed in Engine/Plugins.

  • New: Accepting comma in milliseconds separator when parsing Timespan.

  • New: Minor changes to pak file security delegate. Now all files that don't exist in the pak file will be passed through the security delegate, regardless of whether they exist on disc or not.

  • New: Only accept "log=" and "abslog=" command line values if the filename has a ".log" or ".txt" extension.

  • New: Refactored handling of some UI and rendering code when running headless (i.e. with -nullrhi switch).

  • New: Upgrading an existing UProperty from FVector to FVector4 is now seamless and preserves data properly.

  • Bugfix: Fixed a rare crash when async loading objects caused by linker being detached too early, before other package's import has been fully processed.

  • Bugfix: Fixed a crash on cooker exit due to unpredictable destruction order of static tickable objects and their collection.

  • Bugfix: Fixed a crash with potential memory corruption when loading Data Tables. It sometimes would allocate less memory than was required.

  • Bugfix: Fixed a crash in PhysX cleanup if an exception occurred during shutdown.

  • Bugfix: Fixed a thread safety issue in the load module code that could crash if multiple threads were trying to load the same module at the same time.

  • Bugfix: Fixed an issue where "Get All Assets" would not return data about live objects when passing bIncludeOnlyOnDiskAssets=false.

  • Bugfix: Fixed an issue with task graph memory leaks.

  • Bugfix: Fixed an issue with TMap deserialization in struct serializer and updated unit tests.

  • Bugfix: Fixed an issue to display a meaningful error and shutdown cleanly if Core modules fail to load on engine startup.

  • Bugfix: Fixed an issue so that dynamic delegates can no longer get double bound when copying an Actor.

  • Bugfix: Fixed a potential race condition and minor memory leak in FMonitoredProcess. This could result in the editor hanging on startup.

  • Bugfix: Fixed an issue where "Force Garbage Collection" might not force a GC immediately if run on a server with no clients connected.

  • Bugfix: Fixed a memory corruption when instancing subobjects of a TArray property.

    • Fixed a memory overrun when reading an SSL certificate.

    • Fixed an invalid memory access when shutting down FInputBindingEditorModule.

  • Bugfix: Fixed an issue where duplicate log lines appear when commandlet "Log To Console" is set.

  • Bugfix: Fixed an issue with FAssetPtr remapping issues for duplicated packages, which was a case with operations like Level Save As and Level Duplicate.

  • Bugfix: Fixed an issue with Malloc Binned "Get Allocation Size" for aligned allocations, which caused crashes with the poison proxy.

  • Bugfix: Fixed an issue with Parse "Value" when there is whitespace between the command and the argument.

  • Bugfix: Fixed an issue with "Is A" race condition during async loading.

  • Bugfix: Fixed an issue where Unreal Build Tool would fail when trying to delete a module's manifest file in a non-existent directory.

  • Bugfix: Fixed an issue where newline escape sequence wasn't written to the pipe.

  • FScopedCreateImportCounter will now always store the current linker and restore the previous one when it exits.

    • This should fix some of the linker warning messages reporting wrong package name.

  • Invalidate string asset reference tags after finishing up loading of an async package.

    • Fixes some problems with asset refs not updating correctly after a package was loaded asynchronously

  • Lines of output text from FMonitoredProcess are no longer truncated at the default pipe buffer size, and are no longer returned with trailing CR characters on Windows.

  • Made sure Skeleton assets are loaded before "PostLoad" is called on them to avoid crashes when async loading animations.

  • Silently skip creating exports from a package where the outer is also an export and has been filtered at runtime during loading.

  • Thread safety fixes for the async log writer + made the async log writer flush its archive more often.

  • Thread safety fixes when using the async loading thread.

  • We now abort a directory watch if we lose access to the directory in question to prevent an infinite loop.

Editor and Tools

  • New: Added a warning message to indicate that HLOD clusters do not have a valid proxy mesh, similar to the "lighting unbuilt" message.

  • New: Added a commandlet to enable command line importing of any asset type that the engine supports.

  • New: Added an ability to vsync the editor. This is disabled by default. Set "r.VSyncEditor" to 1 to enable it.

  • New: Added an option in the FBX importer to automatically convert the unit in the FBX file to Unreal Units.

  • New: Added asset cooking path length in their tooltips so that you can detect cooking path issue before you are cooking.

  • New Added checkbox for "Show All Advanced Details" config variable so that it will auto-expand all advanced property categories.

  • New added command line option to enable movie capture burnin.Use the commandline -UseBurnIn=yes.

  • New Added mesh simplification plugin picker to the Project Setting under Editor > Mesh Simplification. The menu to pick simplification plugins also contains a link to find other plugins in the Epic Games Launcher Marketplace.

  • New: Added metadata to remove "reset to default" button for certain properties.

  • New: added new shortcut "Ctrl + Shift + B" to build current level geometry.

  • New Added the ability to import grayscale Targa (.tga) files in the editor.

  • New Added the ability to search through all Editor Preferences and Project Settings at once. Use the selection in these windows at the top for "All Settings."

  • New: Added the possibility to preview a wave sound in the Content Browser from the thumbnail.

  • New: Added Undo/Redo functionality to the Editor Preferences and Project Settings windows.

  • New: Changed and unified saved shortcuts across all editors.

    • Save As is now Ctrl + Alt + S.

    • Save All is now Ctrl + Shift + S.

    • Save Current is now Ctrl + S.

  • New: Added shortcut Ctrl+Shift+Space to quickly rotate through different viewports (left, up, front, back ,etc).

  • New: Changed the FBX batch import workflow to let the user fix all missing source files before starting the FBX batch import process.

  • New: The Content Browser now supports hiding/toggling specific asset detail columns.

  • New: Added the ability for Ctrl + Middle Mouse drag will give options to switch to different viewports.

    • Drag to Left, Right, Up, and Down will match the viewport intuitively.

    • Drag to Up-Left is Front, Up-Right is Back, Bottom-Left and Bottom-Right are both for the Perspective viewports.

    • Dragging exceeding a certain distance will jump to that viewport directly whereas dragging a little will bring up a popup menu showing which viewport it's going to switch to.

  • New: Added a new view option for "Show C++ Classes" in the Content Browser to enable you to hide the C++ classes you may not want to see.

  • New: The Engine version including branch name will now be displayed in the Title bar by default.

  • New: Extended "Select all input nodes" function to general Blueprint editor.

  • New: FBX Exporter now exports all LODs.

  • New: The Date Time fields in the editor are now displayed and entered in the local user's timezone.

    • The time entered is saved into assets using the value converted in the UTC timezone.

    • The timezone that is used is configurable in the Editor Settings under Region & Language for Internationalization settings.

  • New: There's now support for generating a "Content-Only" plugin from the new Plugin Wizard.

  • New: Added Show Flags for Widget Components.

  • New: Reference viewer now provides options to show/hide soft and hard references and dependencies with different line color.

  • New: Added Asset Picker support to the Script Interface properties.

  • New: Added unique asset icons for Sound Concurrency assets.

  • New: The Widget Reflector now has a configurable delay between clicking to take a snapshot and taking the snapshot, which is helpful for reflecting widgets in a state that involves the cursor or other timing factors.

  • New: Added the ability for users to specify a Base material to create Material Instances instead of just creating materials when importing an FBX.

  • New: Added project file to source control when creating a new project.

  • Bugfix: Fixed a crash when moving Instanced Static Mesh Component in editor when it had no mesh set, but had instances.

  • Bugfix: Fixed a crash on undoing a deletion of a mesh in mesh painting mode in the VR Editor.

  • Bugfix: Fixed an occasional crash on editor shutdown due to a race condition in FTcpMessageTransportConnection.

  • Bugfix: Fixed several crashes in the Session Frontend when viewing profiles.

  • Bugfix: Fixed a crash issue where making changes to components in the Blueprint editor when there is an active component in the component visualizer.

  • Bugfix: Fixed an issue where batching optimization for dragging components onto Blueprints. Adding thousands of static mesh components now takes seconds instead of up to an hour.

  • Bugfix: Fixed an issue so that comments will now be preserved on "Parameter" nodes when converting them to "Constant" nodes within the Material Editor.

  • Bugfix: Fixed an issue that prevented a material from being saved when copying a comment node from a Material Function to a Material.

  • Bugfix: Fixed an issue so that the Crash Report Client can now correctly restart Editor sessions that were run from the Launcher.

  • Bugfix: Fixed an issue where the cursor would remain hidden after left-clicking in the Orthographic view.

  • Bugfix: Fixed an issue that would cause Custom keyboard shortcuts to no longer switch between the Command and Control keys on Mac when the editor was restarted.

  • Bugfix: Fixed an issue so that debug lines will now render correctly in orthographic views if their thickness has been specified.

  • Bugfix: Fixed an issue where FBX and OBJ files containing a UV channel with no name were not imported correctly into the editor.

  • Bugfix: Fixed an issue so that the FBX importer will correctly re-import a mesh when the combined mesh checkbox was set to true.

  • Bugfix: Fixed an issue with "On Mouse Button Up" not resetting SButton's Brush state from "Pressed" to "Hovered."

  • Bugfix: Fixed some issues with the LODGroup workflow:

    • During FBX Import, LODs are now recomputed with the correct settings.

    • In the Static Mesh editor, Extra LODs are removed when changing the LODGroup.

  • Bugfix: Fixed various crashes when manipulating BSP geometry in the editor.

  • Bugfix: Fixed a crash while importing FBX scenes if objects contain procedural textures, which is not supported.

  • Bugfix: Fixed a crash when setting a closed loop on a Spline component which has no spline points defined.

  • Bugfix: Fixed an issue where the dialogue "Actors are referenced, are you sure you want to delete?" from appearing when you are copying a lot of actors to another level.

  • Bugfix: Fixed a warning that would spam the log when opening the Editor's Blueprint menu.

  • Bugfix: Fixed an issue where an actor deletion while in Mesh Paint mode would not be undoable.

  • Bugfix: Fixed an issue where all collision would be disabled if you don't auto-generate a simple hull when importing an FBX.

  • Bugfix: Fixed an issue where importing a Texture asset while an editor window was open for that asset would cause the Details Panel to disappear.

  • Bugfix: Fixed an issue where occasionally changing tabs in the Editor would cause the UI to freeze briefly and undock the selected tab.

  • Bugfix: Fixed an issue where painting override vertex colors on a SpeedTree mesh would cause its wind animation to cease or look incorrect.

  • Bugfix: Fixed an issue where structs containing enum values with whitespace characters would not correctly serialize when copied from the Details Panel.

  • Bugfix: Fixed an issue where Unreal Frontend and other standalone tools would not display tooltips on dropdown menu items.

  • Bugfix: Fixed an issue with assigning of materials on components would not work if you multi-select multiple components of a Blueprint and assign the Material.

  • Bugfix: Fixed an issue when choosing "Yes to All" was not functioning properly when asked to delete many actors.

  • Bugfix: Fixed an issue with in-game console command parameter display to include all parameters.

  • Bugfix: Fixed an issue with loctext related warnings when opening the Blueprints submenus on the Level Editor toolbar.

  • Bugfix: Fixed an issue with missing widgets when using Mobile Preview mode with a Mobile HDR disabled project.

  • Bugfix: Fixed an issue with single player PIE so that the window position is correctly fetched and saved when running a dedicated server. This is held separately to stored positions for multiple client PIE.

  • Bugfix: Fixed an issue in the output log filter not updating when text was committed.

  • Bugfix: Fixed an issue where Mobile Packaging Wizard will not find any project maps if UE4 and the Project are installed on different drives.

  • Device button text in "Device Output Log" window should be more readable now.

  • Bugfix: Fixed an issue so that .exe icon is correctly set for packaged Windows games.

  • Bugfix: Fixed an issue so that String Asset Reference properties will now only open an Asset picker (not an actor picker) as the goal is to reference an asset.

  • Bugfix: Fixed an issue where "find culprit" dialog did not honor the user's choice.

  • Bugfix: Fixed an issue with Unreal Game Sync where database events were being returned out of order could cause builds to show as never completing.

  • Bugfix: Fixed an issue with Unreal Game Sync showing a build failure/warning dialog immediately if you submit while the build is yellow/red. This now ignores builds before your last submitted CL.

  • Bugfix: "Play in Standalone Game" does not assume -window as a launch parameter therefore you can now specify -window or -fullscreen.

  • "Select all input nodes" now have a corresponding "Select all output nodes" for nodes that are output nodes.

  • Deleting many assets at once will now batch them as a single source control command instead of one for each asset.

  • Directional Light icon in the viewport changed (the two arrows within the icon were removed), as the asset itself provide another arrow indicating the light direction.

  • "HighResShot" console command now supports the same functionality as the Editor UI version and improved the help with usage examples.

  • Improved editor hitching while using launch on by delaying package save until all data is cached.

  • Minor update to the layout of the User Defined Struct editor.

  • Improvements have been made to the Unreal Frontend Project Launcher Progress page:

    • The custom profile name is now visible above the progress bar when launching a profile.

    • The Task and Status views can now be resized.

    • Columns for "Errors" and "Warnings" have been added to the Task view to show which tasks have problems.

    • Previously completed tasks are no longer cleared when the launch is cancelled.

    • The message log will now only scroll to the newest message when the log is scrolled to the very bottom.

  • Removed the Experimental "Live Editor" feature from UE4

    • Live Editor was an early attempt at automation of editor features using external hardware, such as MIDI.

    • This feature was never fully completed and we have no plans to continue work on it.

    • If you'd like to use MIDI devices in your editor plugins or games, please check out the new "MIDI Device" plugin available in this release!

  • Unreal Game Sync: Improvements to "Clean Workspace" dialog.

    • Empty folders are now set to be deleted by default.

    • Added a context menu to select all/none/empty/default for a subtree, as well as to open Windows Explorer at that location.

  • We now export the collision mesh when exporting to FBX. Disabled by default.

    • Added an Editor Preference option to enable or disable the export of collisions. Editor Preferences > General > FBX Export Collision Mesh.

  • Focusing an Actor that has 0 size bounds now works.

  • Play in editor will no longer auto resume a game on focus received if it was previously paused.

  • Rebuild lightmaps commandlet now doesn't apply world transforms twice.

  • Removed duplicate platforms from deploy list in Unreal Frontend.

  • Scalability settings will no longer auto-apply if the low performance warning message is ignored.

  • Source file paths are now normalized when caching their state.

  • The Auto Distance Error value for Static Mesh LODs can now be set to a value smaller than 1.

  • The Hue value displayed in tooltips for colors within the Theme bar will now match the hue value displayed for that color in the Color Picker.

  • The orbit camera should no longer reverse zoom direction when zoomed with the mouse wheel.

  • The performance when selecting thousands of actors has increased and should no longer render the editor unusable when lots of actors are selected.

  • The pin-type filter now filters on both the localized and source type descriptions.

  • The placement mode now filters on both the localized and source item descriptions.

  • Undo/redo of mobility changes will also undo/redo the mobility changes on ancestors/descendants that were changed along with it.

  • Visual logger icon updated.

  • When importing a FBX file containing multiple animations, user can re-import any animation without overriding it with the first animation in the FBX file.

  • Updated Map and Set Properties so they can now be edited from within the Details Panel. Sets ensure that all of its elements are unique, and Maps ensure that all of its keys are unique.

Content Browser

  • New: Deleting folders in the Content Browser now removes the folder from disk.

  • Bugfix: Fixed a crash renaming a collection with multiple collections selected.

  • Bugfix: Fixed a crash when force deleting a blueprint with a child actor component from the Content Browser.

  • Bugfix: Fixed an issue with dynamic collections not returning anything.

  • Added ~ to the list of invalid characters for object/package names.

Landscape

  • New: Added 180° rotation support to the Landscape Mirror tool.

  • New: The Landscape LOD visualization mode now renders material tessellation while in the Viewport is in Wireframe mode.

  • Bugfix: Fixed a crash entering Landscape mode when there is a Landscape in a sublevel that is loaded but hidden.

  • Bugfix: Fixed a crash editing Landscapes with the "r.LightPropagationVolume" console variable enabled.

  • Bugfix: Fixed a crash when applying a material with tessellation enabled to a landscape or when painting a material with tessellation on a newly added component.

  • Bugfix: Fixed a crash when duplicating a level containing a Landscape through the Content Browser.

  • Bugfix: Fixed a crash when loading duplicated Landscape levels.

  • Bugfix: Fixed a crash when merging levels containing a Landscape.

  • Bugfix: Fixed a crash with Landscapes caused by using undo after using the Move-To-Level tool and then selecting a Landscape Proxy in a sub-level.

  • Bugfix: Fixed a crash if a Landscape Layer Info object is force deleted while it is in use.

  • Bugfix: Fixed an inability to import Landscape Layer weight maps when creating a Landscape.

  • Bugfix: Fixed an issue that would cause Landscape Components to be invisible when using tessellation on a Landscape.

  • Bugfix: Fixed an issue with Landscape rendering errors after using the "Change Component Size" tool.

    • Also affects initial import of a Landscape with weight maps.

  • Bugfix: Fixed a regression with performance when importing Landscape heightmaps.

  • Bugfix: Fixed some small typos in the Landscape tutorial.

  • Bugfix: Reduced material update log spam when creating and editing Landscapes. Some will remain since Landscape fundamentally manipulates a lot of material instances.

  • Removed "Cmd: UpdateLandscapeSetup" log file spam during while editing World Settings on maps with landscape.

Material Editor

  • New: Added the ability to clear the preview mesh on a material instance.

  • New: Added the ability to highlight all nodes connected to an input.

  • New: Added tooltips to the inputs of the Material Final Result node.

  • Bugfix: Fixed a crash when loading cooked Materials in the editor.

  • Bugfix: Fixed an issue where "Select all linked nodes" function would not show up in Material Editor for output nodes.

Matinee

  • Bugfix: Fixed an issue with incorrect subtitle timing and rendering when scrubbing.

Persona

  • New: Added better bulk import reporting so current progress through a bulk animation import can be seen, rather than only showing progress through the current animation.

  • Bugfix: Fixed a crash when changing scene settings and hitting undo in Persona with complex cloth active.

  • Bugfix: Fixed bounds calculations in Persona that include bones to respect LOD (and other required bones).

World Outliner

  • New: Added the ability to collapse and expand folders in the World Outliner.

Static Mesh Editor

  • New: Added Console Command "FORCELODGROUP" that will apply a Static Mesh LODGroup to selected groupless meshes in the editor. This can batch mesh-reduce (ie, Simplygon) all meshes in a level.

Source Control

  • Bugfix: Fixed an issue where history and merging do not work if the user has "format.pretty" setting in their gitconfig.

  • Silenced some redundant P4 errors that could be generated when running a "stat update" on a file. Some of the options produced errors when working with newly added files. These errors are now downgraded to infos like they are for the main stat command.

World Browser

  • Bugfix: Fixed a crash on Changing sub-level visibility under certain conditions.

  • Disabled use of World Composition with multiplayer PIE using separate process option, as it not properly supported now.

Foliage

  • New: Added console variables to discard grass and/or scalable foliage data on load.

    • If set in the scalability settings, it reduces the memory requirements of the "off" setting at the expense of having to reload the level when changing the setting from "off" to a higher level.

  • New: Implemented filter to enable painting foliage on other foliage (e.g. vines on trees).

  • Bugfix: Fixed an issue where painting foliage on blocking "query" actors was not working. Actors which are not themselves moving only need to be set to "Query" to be blocking, but the foliage tool was checking for both "Query & Physics."

  • Bugfix: Fixed an issue where disabling 'Use Landscape Lightmap' option was skewing Procedural Foliage Instances.

  • Prevent landscape grass generated in the editor viewport from being duplicated for Play In Editor (PIE) sessions.

Cooker

  • New: Added -mallocbinned commandline option to use it while cooking. Binned allocator is faster to cook in some cases.

  • New: Added experimental Partial Garbage Collection feature for cooker. Added "-partialgc" commandline option for cooker. Instead of cleaning all packages when GC, this cleans up packages which will not be required for cooking later.

  • New: Fixed an issue with deterministic cooking for bake distributions.

  • New: Improved peak memory usage by the cooker by only resolving string asset references for the current package being saved.

  • New: Now cooker processes async shader compilation while blocked doing other work. This gives a minor improvement in cook time.

  • Bugfix: Fixed an issue for partial LOD level deterministic cooking issue. Spawn Module now has its postload called before being used.

  • Cooker forces a shader compilation flush when it detects that it has passed the max memory budget. This helps to avoid out of memory problems when cooking large projects.

  • "Directories To Always Stage As UFS" now filters .uasset and .umap files. Cooked assets will no longer be replaced by their uncooked version during staging UFS.

  • Launch on in the editor will save required packages before cooking so that changes are correctly reflected.

Sequencer

  • New: Added an option to map the transform motion of a Skeletal mesh to the root bone on FBX export. This option is in the General Settings in the Miscellaneous section.

  • New: Added "Get Cine Camera Component" function from Cine Camera Actor.

  • New: Added option to convert a spawnable track to a possessable track.

  • New: Added option to create sub sequences for each master sequence shot.

  • New: Added the ability to keyframe Geometry Cache Actor properties in order to use it in sequencer.

  • New: Enable "Actor to Track" on the Cine Camera Actor as a keyable property.

  • New: Enabled subtitles for audio tracks.

  • New: Force the roll and yaw of the camera crane mount to be 0 so that the camera stays level to the ground. The yaw is controlled by the crane yaw control.

  • New: Sequencer can now playback Anim Montages.

  • New: Set Skeletal meshes to always tick pose and refresh bones when there's an Animation track in Sequencer.

  • New: Tweaked default Sequencer colors.

    • Audio track is brighter.

    • Transform, bool, event tracks are less saturated.

    • Recording subsection is more saturated.

    • Fade track now shows a gradient.

  • New: Added icons for Cine Camera, Camera Rig Rail, and Camera Rig Crane Actors.

  • Bugfix: Fixed a crash when using sequence recorder with -game. Added GEditor check.

  • Bugfix: Fixed an issue where it was impossible to animate a single component of a structure property while still enabling the original value for non-animated components to be set externally.

  • Bugfix: Fixed an issue where the values in the key editors in Sequencer would become out of sync with the property values.

  • Bugfix: Fixed an issue with the Fade track so that is only affects the current player and not all worlds.

  • Bugfix: Fixed an issue with Game Mode Override option in movie capture so that it works when capturing the Editor.

  • Bugfix: Fixed issues where properties were not getting bound when converting from Matinee to Level Sequence tracks.

  • Bugfix: Fixed an issue with Anim Notifies not working when playing an Animation on Blueprint-driven Skeletal meshes.

  • Bugfix: Fixed an issue with Anim Trails not playing in full with a Sequencer-driven animation.

  • Bugfix: Fixed an issue with byte and integer properties not being able to be exposed to Cinematics on Blueprints.

  • Bugfix: Fixed an issue where the cursor would jump around inconsistently when ending a drag.

  • Changed curve editor visibility so that it's no longer a toggleable saved config.

    • It's now just a toggleable state because it was unexpected to have Sequencer restart with the curve editor visible.

  • Changed FMovieScene3DTransformTrackInstance "Update" to properly update "Component Velocity."

  • Disabled auto-possess player for recorded pawns.

    • This fixes a bug where if you record a Third Person Template character when you open the Sequence the recorded character will possess the viewport.

  • Restore state when stopping the level sequence player so that objects controlled by Sequencer return to their positions.

  • Spawnables now use deferred spawning.

VR Editor

  • New: You can now instantly reset the world's scale to its default by tapping the touchpad button while gripping the world. This makes it easy to get back to your "Player's Size" while editing.

  • New: You can now disable VR Editor Tutorial in Editor Preferences > Experimental > VR.

    image alt text

  • Bugfix: Fixed an issue with blurry toolbar icon when "Use Small Toolbar Icons" was enabled in the Editor Preferences.

  • Bugfix: Fixed various issues and regressions with Mesh Paint in VR:

    • Brush preview not being rendered for lasers/mouse when not actively painting.

    • "Full press" over actors that was preventing the UI from being clickable.

    • Brush cursor displayed when hovering over UI (including selection bar/close button).

    • VR transform gizmo getting in the way of everything while painting, it is now hidden while in Mesh Paint mode.

    • Not being able to fully interact with UIs after messing around with Mesh Paint

Gameplay Framework

  • New: Added a cvar "t.FPSChart.OpenFolderOnDump" to control whether or not FPS charts automatically open the profiling folder when stopfpschart is executed.

    • This can be useful to avoid a bunch of open windows while doing automated testing.

  • New: Added "Suppress Stacking Cues" flag to Gameplay Effect options to avoid sending a Gameplay Cue RPC for each instance of a stacking Gameplay Effect.

  • New: Added "GameModeBase" and "GameStateBase" classes as parents of existing classes "GameMode" and "GameState." The core functionality needed by all games is in the Base classes, legacy and match-specific features are in the child classes.

    • Blueprint access has been added to Game State Base for "Has Begun Play", "Has Match Started", "Get Player Start Time", "Get Player Respawn Delay", "Game Mode Class", and "Spectator Class."

    • Game Mode Base "Must Spectate" and "On Change Name" are now called properly.

    • Added "Restart Player At Player Start" and "Restart PLayer At Transform" to manually control of where player pawns are spawned.

    • Updated the GameMode documentation to reflect these changes and add extra context.

  • New: Added access to both the game's "Unpaused Time Seconds" and "Time Seconds" from Blueprints.

  • New: Added the ability to set the mouse position from Blueprints via the Player Controller.

  • New: Components can now specify whether they replicate from the Blueprint Property editor.

  • New: Components that are referenced by an "Edit Anywhere" property but are not created as part of object construction can now be edited via the in-world component editing panel.

  • New: Cull Distance Volumes no longer globally update on every Actor property change. This should reduce hitches after changing properties entirely unrelated to cull distance in levels with large Actor counts.

  • New: More Cheat Manager functions have been made available to call and to override from Blueprints.

  • New: Added "Use Client Side Level Streaming" property added to World Settings.

    • When enabled, the server doesn't evaluate streaming volumes. Instead, each client independently decides what volumes to stream in/out, depending on its players' cameras.

  • New: Particle System and Audio Components now route "Activate" and "Deactivate" events to Blueprints.

  • The "Delta Seconds" passed to Tick functions when using a "Tick Interval" will now represent the amount of world time that has passed since the last tick of the function.

  • The levels of a world are now categorized into different collections: dynamic, static, or duplicated. Levels default to dynamic, and this preserves existing behavior.

    • Streaming levels can be marked as static in the Levels Details panel. This distinction has no effect on how the levels are rendered, but it will cause the levels to be placed into the corresponding collection.

    • Games may opt-in to duplicating the dynamic levels when the world is loaded, and they will be maintained separately from the original levels. The game may use these duplicated levels at runtime, if desired.

  • New: The logic for selecting which Game Mode to spawn for a URL can now be overridden in "Game Instance", implemented in "Preload Content For URL", "Create Game Mode For URL", and "Override Game Mode" Class.

    • The rules for selecting GameMode based on map prefix or alias is now modifiable in the Project Settings > Maps and Modes under the advanced options.

  • Bugfix: Fixed a crash undoing "replace actor with" when replaced object constructs child actors.

  • Bugfix: Fixed an issue where after duplicating a level you would have two instances of a Child Actor.

  • Bugfix: Fixed an issue where Child Actors would sometimes be created at the wrong location.

  • Bugfix: Client-side only components attached to a replicated component will no longer be removed from the "Attach Children" array when a change to attachment is made on the server.

  • Bugfix: Fixed a check in Character Movement's "Step Up" to properly account for distance the component is above the floor.

  • Bugfix: Fixed an out of date with Radial Force Component's "Collision Object Query Params" by adding a "Begin Play" event callback.

  • Bugfix: Fixed an issue with Gameplay Statistic's "Spawn Emitter Attached" using wrong scale when "Snap To Target (Keep World Scale)" option is used. It was being used as a relative scale. Also, improved the comments for "Spawn Emitter Attached."

  • Bugfix: Fixed an issue with bounds calculations for local camera animations.

    • Correctly calculated bounds as local to the initial transform in the track.

  • Bugfix: Fixed issues with "Can Jump" inconsistencies with previous versions.

  • Bugfix: Fixed a crash during garbage collection after deleting Audio Volume.

  • Bugfix: Fixed a crash in GetPredictionData_Server() when a player is destroyed and the server Player Controller checks to see if it needs to force a network update. This, also, fixes similar crashes when calling a Character's "Set Replicate Movement" when not on the server.

  • Bugfix: Fixed an error icon indicating lighting issues not going away after resolving the issue on a light that was created by copy/pasting a light that had a lighting issue.

  • Bugfix: Fixed some typos in "Only Trace While Ascending" and "Deproject Screen To World."

  • Bugfix: Fixed UK2Node_GetInputAxisValue using default flag for "Override Parent" value on the created binding, causing previous bindings to be squashed.

  • Bugfix: Fixed an issue with network replication for actors in "Always Loaded" sub-levels not working after seamless travel.

  • Bugfix: Fixed an issue with FPreviewScene-based worlds so that they now render correctly in-game.

    • Added new "Editor Preview" and "Game Preview" world types and deprecated old "Preview" world type.

  • Bugfix: Fixed an issue to prevent Camera Anims without a "Field of View" track from making any modifications to the camera's FOV.

  • Bugfix: Fixed "Set Game Paused" now correctly returns whether the paused state was changed when setting it to false.

  • Component "Activate" functions now fire for "auto-activate" components if the component belongs to an actor placed in a level.

  • Component's are now correctly removed from their World's needs end of frame update list. This fixes a rare crash when a component is moved between worlds as part of seamless travel.

  • Consolidated rotation settings (Rotation Rate, Use Controller Desired Rotation flag, Orient Rotation To Movement flag) in a new "Rotation Settings" category. The Character Movement Component's flag for "Use Controller Desired Rotation is no longer an advanced property. This makes it more easily discoverable.

  • Direct access to Static Mesh in "Static Mesh Component" has been deprecated. Please use "Get Static Mesh" and "Set Static Mesh" accessors.

  • Disabled some NaN checks in shipping builds.

  • Improved logic for when the transform of a static scene component can be modified.

  • Load game from slot will no longer sometimes fail if using a Blueprint defined class.

  • Mouse smoothing is now based on the application frame time rather than the dilated world time.

  • Native classes will now properly run construction script on PostEditMove.

  • Native Components created by "Create Default Subobject" that have been removed will no longer still exist in existing instances of that class.

  • Scene Component Attach Children will no longer periodically get duplicate entries on the client for some replicated components.

  • The FOV is now reset on the Player Camera Manager's Camera Actor when it's initialized.

    • This fixes cases of stale FOV values after playing Camera Anims that don't end with the FOV at its base value.

    • Base FOV can now be edited in the Camera Anim properties. This enables you to specify what the FOV keys are relative to. Previously it was always using a base FOV of 90 degrees.

  • The position of the (null) bounding volume of an empty Text Render component is now correct.

  • Wind source components now correctly "Activate" and "Deactivate."

Localization

  • New: Added a way to mark text in text properties as culture invariant.

    • This enables you to flag properties containing text that doesn't need to be gathered.

  • New: Added "As Time", "As Date Time", and "As Date" overrides to Blueprints to let you format a UTC time in a given timezone. This defaults to your local timezone. Previously you could only format times using the "invariant" timezone, which assumed that the time was already specified in the correct timezone for display.

  • New: FText properties/pins will now preserve their existing identity (namespace + key) where possible when changing the source text.

  • New: Translations are now exported/imported per-identity rather than collapsing identical strings within the same namespace.

    • This enables translators to translate each instance of a piece of text based upon its context, rather than requiring a content producer to go back and give the entry a unique namespace.

    • It also enables us to optionally compile out-of-date translations, as they are now mapped to their source identity (namespace + key) rather than their source text.

    • This change also adds FLocTextHelper as a high-level API for dealing with uncompiled localized text. This should be preferred for all new code rather than dealing with manifests/archives directly.

  • Bugfix: Fixed a crash when dealing with code-points outside the basic multilingual plane on platforms with UTF-32 FStrings.

  • Bugfix: Fixed a crash that could occur in the source code gatherer where it would sometimes underflow an array.

  • Bugfix: Fixed an issue where localized assets were not working with "Launch On" in the editor.

  • Bugfix: Fixed an issue where the PO exporter writing out invalid escape sequences.

  • FText can now format pre-Gregorian dates correctly.

  • Removed validity check on source cultures when remapping, as platforms may use invalid cultures that need to be remapped.

  • The internationalization system now correctly detects whether the local machine is in a timezone with daylight savings active

  • We now favor Traditional Chinese for Hong Kong and Macau.

Networking

  • New: World Origin rebasing has been added as an experimental feature!

    • This means that the World Origin can be different on both the client and the server.

    • This feature will continue to be improved over the next releases.

  • Bugfix: Fixed a crash that could occur with FCurlHttpRequest's "Debug Callback".

  • Bugfix: Fixed an assert that could occur when playing back a replay that was recorded on a client that uses torn-off actors.

  • Bugfix: Fixed an assert in channel cleanup code that could occur if the connection was cleaned up and there were "Keep Processing Actor Channel Bunches Map" in-flight still.

  • Bugfix: Fixed an issue where gameplay tags will work better with backwards compatibility in replays.

  • Bugfix: Fixed various issues with remapping objects that lose/gain relevancy.

  • Bugfix: Fixed an issue with replays that could cause scrubbing to a specific time to go to the wrong time.

  • Bugfix: Fixed an issue that could cause memory-constrained platforms (such as consoles) to run out of memory when scrubbing in replays in rapid succession.

  • Bugfix: Fixed an issue where replicated references that would remain null indefinitely due to becoming non relevant, and then becoming relevant again

  • Disable hot reloading when using single process MP PIE. This fixes some conflicts that can otherwise occur.

  • Don't strip map/package name from commandline on shipping config on dedicated server in the Game Instance's "Start Game Instance". Don't ever parse "-replay" on dedicated servers. This enables specifying map name on servers via commandline.

  • We no longer record dormant actors in replays for better performance

Physics

  • New: Added "Simple Wheeled Vehicle Movement" Component which allows for n wheels with no motor simulation.

    • Exposed "Wheeled Vehicle Movement Component 4W" so that it can be added to any Blueprint.

  • New: Added "Get Bone Mass" and "Get Skeletal Center Of Mass" functions for Skeletal meshes.

  • New: Added more vehicle stats for the profiler.

  • New: BSP now supports returning texture coordinates from line traces.

  • New: Exposed "Grab Rotation" for physics handle component. Also introduce hard vs soft physics handle.

  • New: Exposed the ability to separate reverse and brake on vehicles.

  • New: Improved cook times for "Procedural Mesh" Component collision. Fixed issue where "Update Mesh Section" on Procedural Mesh may update wrong collision verts due to mesh being cleaned in cooking.

  • New: Improved warning when trying to create a constraint between different scenes.

  • New: Improvements to data caching for Destructible meshes on save. This gives an 8x-10x improvement in load times for more complex meshes.

  • Bugfix: Fixed a crash when a physical animation component's mesh is changed out from under it.

  • Bugfix: Fixed an issue in PhAT so that multiple constraints can be selected and edited properly at the same time.

  • Bugfix: Fixed an issue where constraint component not using root body when no bone name is provided.

  • Bugfix: Fixed an issue where the constraint index was not being assigned correctly. Also, exposed "Find Constraint Bone Name" to Blueprints.

  • Bugfix: Fixed an issue with FConstraintingBaseParam's "Contact Distance" clamping.

  • Bugfix: Fixed an issue with PhAT "Snap Constraint To Bone."

  • Bugfix: Fixed an issue with physics handle component not accounting for bone rotation/offset.

  • Bugfix: Fixed an issue with "Set Root Body Index" so that it uses world space transform instead of reference skeleton.

    • Fixes a few issues when using ragdolls on Skeletal mesh assets that were imported with offset/rotation.

    • Also, fixes a crash when opening up old physics asset and changing its mesh.

  • Bugfix: Fixed an issue with vehicle suspension force offset to work from the spring location (in the z-axis) instead of the vehicle COM.

  • Bugfix: Fixed a crash caused by changing the collision response parameters of a Destructible mesh after it had been fractured.

  • Bugfix: Fixed a crash spawning complex Destructible meshes in multiplayer games.

  • Bugfix: Fixed a crash when creating a Destructible mesh from a static mesh that uses SpeedTree materials.

    • Added a warning message when attempting to do so now.

  • Bugfix: Fixed an issue with APEX Cloth disappearing if an actor containing a component with clothing had its custom time dilation set to 0.0.

  • Bugfix: Fixed an issue with box collision shapes not scaling correctly after using Merge Actor tool.

  • Bugfix: Fixed an issue with Destructible asset importing failing if one of the submeshes in the asset file had no geometry.

  • Bugfix: Fixed incorrect tooltips for collision channels.

  • Bugfix: Fixed an issue with line traces against a component not returning face index, where appropriate.

  • Bugfix: Fixed an issue with line traces against a specific component not returning closest hit in triangle mesh case.

  • Bugfix: Fixed an issue where mesh corruption in clothing assets would happen when importing a new mesh that requires a uint32 index buffer over a clothing asset that previously required uint16 indices.

  • Bugfix: Fixed an issue where scales like (1,0,1) not being clamped to something valid in physics code.

  • Bugfix: Fixed an issue where "Support UV From Hit Results" not informing user an editor restart is required.

  • Altered Skeletal mesh bounds calculations to ignore clothing actors if they aren't simulating on the currently active LOD.

  • Changed some exposed properties on Destructible meshes to be hidden as they are only supported for non-Destructible Skeletal meshes. This addresses an issue where Physics Shadow Assets were properties were visible.

  • Enforced block size of 16K for PhysX scratch memory when simulating.

  • Ensure that physics handle automatically wakes up any object it's grabbing on release.

  • Improved comments for Hit callbacks.

Platforms

  • New: Add HarfBuzz support for proper text shaping in languages the require it such as Arabic.

  • New: Add support to Windows and Linux for swapping allocators with -ansimalloc, -binnedmalloc, and -binnedmalloc2 to enable easy comparison at runtime.

  • New: Added "Is Gamepad Attached" to Android so users can determine when a gamepad is attached to the device.

  • New: Added support for Android local notifications using the existing local notification Blueprint mechanisms. Using these Blueprint nodes will work on both Android and iOS now.

  • New: Added support for making the game window borderless (no system border or title bar) on desktop platforms. Disabled by default.

    • Enabling requires adding "UseBorderlessWindow=True" to [/Script/EngineSettings.GeneralProjectSettings] in DefaultGame.ini.

    • The game using this is responsible for adding a "Window Title Bar Area" widget to its UI, as well as window minimize/maximize/close buttons.

  • New: Adding interstitial ad support for Android using AdMob, including Blueprint functions.

    • Four functions have been added: "Load Interstitial Ad", "Is Interstitial Ad Available", "Is Interstitial Ad Requested", and "Show Interstitial Ad."

  • New: AndroidManifest.xml will now include the texture format used in packaging. The appropriate "supports-gl-texture" tags will be added for the texture format chosen at packaging.

  • New: Engine will select the first shader platform in [/Script/WindowsTargetPlatform.WindowsTargetSettings] as the current RHI.

  • New: Support Metal shader compiling when cross compiling on Windows.

    • This must be enabled in the IOS Build Settings page since it can significantly increase build time.

  • New: Enable the ability to change ports for a firewall to pass them through rsync. This addresses UE-24679.

  • New: Upgrade emsdk toolchain to 1.36.11 - emscripten.

  • New: When launching the app on iOS within the editor, the device console logs are piped into the Editor's Console Log window.

  • Bugfix: Fixed an issue with cooking for compressed content where the bit window used for compression was consumed by the wrong parameter.

  • Bugfix: Fixed a couple of problems with Mac app bundles modifying their content that made them incompatible with the Mac App Store.

  • Bugfix: Fixed an issue that was causing Sound Mixes to not properly finish at the end of certain sound effects when played on a device. Now, their behavior now matches PIE.

  • Bugfix: Fixed an issue that was causing the module Android_ASTCTargetPlatform to fail to load on Mac.

  • Bugfix: Fixed an issue where setting a new Touch Interface to none would cause any input present on the Virtual Joysticks to continue on indefinitely. Input now clears before setting a new Touch Interface.

  • Bugfix: Fixed an issue where shader compression used the cooking host platform instead of the target platform when selecting shader compression settings.

  • Bugfix: Fixed a race condition in threading code that affected pthread-based platforms, such as Linux, Mac, Android, iOS, etc. Threads are now properly joined instead of busy waiting.

  • Bugfix: Fixed an issue where iOS Movie Player can't handle videos at resolutions that aren't multiple of 16. Now an assert is thrown when attempting to play a non-power of 16 resolution.

  • Bugfix: Fixed an issue where occasionally a movie isn't played on iOS.

  • Give a more friendly error message when UHT fails with an invalid error code. This will help when trying to build without the prerequisites installed.

  • Make the "Running on " Toast stay active when launching a game to an Android device until the game has finished running on the device. Previously the toast was closing prematurely.

  • Pass down any extras used to launch SplashActivity to GameActivity. This enables code that relies on intent data (such as GCM) to function as expected. The GameActivity will receive the info and not just SplashActivity.

  • The cooking process now respects the per-platform chunking manifest configuration in the game ini. If you specify -manifests it forces all platforms to generate a manifest.

  • Improved the error message that displays as Unknown Error when failing to supply a Remove Build server for iOS on Windows.

  • Changed the "OOM Backup Memory Pool" to enable each platform to set how much memory to allocate. See the "Get Back Memory Pool Size" function in "Platform Memory." Defaults to 0, which was the previous behavior with the now removed "Support Backup Memory Pool" function in "Platform Memory," which was only true in Windows and PS4.

Android

  • New: Updated libpng to 1.5.27 for Android to fix Google security notifications

  • New: Updated to CodeWorks for Android 1R5.

  • New: Enabled Windows types in vulkan.h from later SDKs.

  • New: ES 3.1 detection now handles 3.2 in the version string from newer devices.

  • Bugfix: Fixed a crash that would occur on Kindle Fire when trying to load a project that had enabled the Oculus plugins.

  • Bugfix: Fixed a crash on devices, such as Huawei Honor G750, which do not support the EXT_debug_lable and EXT_debug_marker extensions.

  • Bugfix: Fixed a crash that could occur when a Vulkan based project is resumed after losing focus.

  • Bugfix: Fixed an issue where some Android apps would crash if the device orientation changed when the launch splash screen was active.

  • Bugfix: Fixed an issue where OpenGL ES 3.1 detection was failing on devices which support OpenGL ES 3.2.

  • Bugfix: Fixed an issue with out of spec GLSL operations.

  • Bugfix: Fixed the Vulkan include path in the NDK check.

  • Disabled Google Play Games for ARM64 because native library causes crash on launch.

  • Hiding the virtual keyboard on Android properly closes input dialog.

  • Only use alternative event flow for Daydream packaged applications.

  • Pass through the intent action from Splash Activity to Game Activity.

  • We now properly handle seeking in Android Media Player, which did not work past 999ms before.

  • Read Android environment variables from .bashrc on Linux.

  • Restore texture filtering mode properly when movie played on Android.

  • Update cached length when file is written to on Android.

  • Use .sh extension for Android install scripts on Linux.

iOS

  • Bugfix: Fixed a crash with reflection capturing in Metal.

  • Bugfix: Fixed an issue with Metal Dynamic RHI's "RHIReadSurfaceData" for shared textures on iOS.

  • No longer allow ES2 shaders to be compiled for tvOS.

  • Worked around some bad Xcode headers to enable compiling with Xcode8 / iOS10.

Linux

  • New: Updated installation scripts to run on Ubuntu 16.10.

  • New: Added "offscreen" video driver to SDL so the engine can now create GL context on headless machines not running any display servers (EGL is enough).

  • New: Added support for creating Linux installed builds.

  • New: Bundled libc++ with the engine to guard against STL incompatibility problems.

    • Third party code that uses STL needs to to compiled against the bundled library to benefit from this.

  • New: Bundled SDL updated to trunk as of late September 2016.

  • New: Choose OpenGL version based on the first targeted RHI, which enables setting the version through the .ini.

  • New: Crash error message will print more details about erroneous memory access on Linux.

  • New: Last page of the signal handler alt stack is made read-only to guard against accidental smashing of it.

  • New: Added precompiled WebRTC (xmpp) libs.

  • New: Packaged non-code projects now include a 'bootstrap' shell script for convenience.

  • New: The engine will profile and choose the fastest available clock source, which also, fixes running on Windows 10 Linux subsystem.

  • New: Updated cross-toolchain to target CentOS7 and multiple architectures.

  • New: Enabled use of xgConsole in Unreal Automation Tool.

  • Bugfix: Fixed a crash when editing Widget Blueprints.

  • Bugfix: Fixed an issue with client and server hanging when decoding voice chat.

  • Bugfix: Fixed an issue with compilation of ARM (32-bit) server builds.

  • Bugfix: Fixed an issue with copy/paste failing on Linux when the clipboard was empty.

  • Bugfix: Fixed an issue with the heartbeat thread not being stopped during handling of a crash.

  • Bugfix: Fixed an issue with QtCreator and Makefile generators, which missed some include paths and had others duplicated.

  • Bugfix: Fixed an issue with SDL EGL API binding.

  • Bugfix: Fixed an issue with UBT hanging after Ctrl + C when mono thread creation fails.

  • Bugfix: Fixed an unnecessary execution of some binding steps even when nothing has changed.

  • Bugfix: Treat abort() / SIGABRT as a crash.

    • This fixes some abnormal exits not being reported.

  • Disabled rebuilding hlslcc during installation given that it is now built against the bundled C++ library and will always match the engine.

  • Equals character is now enabled as part of commandline parameter value.

  • Minor robustness improvement in Linux crash handler.

  • More robust check of installed packages on Ubuntu in installation scripts.

  • Reduce amount of logging when launching externals procs.

  • ShaderCompileWorker will be told to dump core on crash in Debug editor builds to aid debugging.

  • Startup time of modular builds (e.g. editor) are 10x faster due to exclusion of unnecessary symbols.

Mac

  • New: OpenGL support is now deprecated and Metal SM4 was replaced by SM5 in 4.13.

    • We no longer compile OpenGL and Metal SM4 shaders by default to save cook time and decrease cooked data size.

    • Running under OpenGL will now display a dialog warning that Mac OpenGL is no longer supported and may not run correctly.

  • New: Added a commandline switch for Mac "-RedirectNSLog" that will capture the output of NSLog using an NSPipe and write it into our log instead when not running under the debugger.

    • This will capture the output from underlying libraries that would otherwise be lost when outside a debugger.

  • New: Added a cvar named "r.Mac.OpenGLDisabled" to disable OpenGL support on Mac.

    • If a Mac that does not support Metal launches while this cvar is set to 1 then they will get a dialog box describing that they do not support Metal and the process will close.

  • New: Added more statistics for Metal to track how many textures are allocated a frame and how much buffer memory is allocated per frame.

  • New: Added support for compiling Vulkan shaders for Android on Mac.

  • New: Added optional cache inside Metal RHI for disposed texture objects so we may reuse them. This is controlled by the console variable "rhi.Metal.TextureCacheMode".

    • 0 = off.

    • 1 (default) = will attempt to reuse private memory texture objects within the frame they are released otherwise they are disposed of as before.

    • 2 = extends the caching to all textures - though Managed/Shared textures cannot be reused until after the frame in which they were released has been processed on the GPU. In this mode id objects are never returned to the OS so in order to conserve VRAM calls to setPurgeableState are made to enable the driver to reclaim unused memory if required.

    • This setting can't be changed at runtime.

  • New: On MacOS, tvOS and iOS, the RHI and shader platform initialised on startup will now be decided by the options specified in the project's target settings rather than assumed in code.

    • When the initial selection in the target settings is not available on the current device the code will gracefully fallback, if possible or alert the user if not.

    • On Mac: Order of initialisation is the order listed in TargetedRHIs specification.

    • On iOS/tvOS: Order is explicit: Metal MRT > Metal ES 3.1 > OpenGL ES 2.

  • Bugfix: Fixed a crash under the validation layer and Nvidia's El Capitan (10.11) drivers when Distance Field Particle Collisions are used without any scene Distance Fields available. We now bind the black volume texture when that is the case to avoid bad access on the GPU.

  • Bugfix: Fixed a crash caused by trying to restore Help menu item on Mac if MenuBlock didn't contain it.

  • Bugfix: Fixed a crash caused by Metal context releasing its contents in some cases on MacOS 10.12.1.

  • Bugfix: Fixed a crash in CoreAudio on unpause.

  • Bugfix: Fixed a crash in the editor on displaying a new window on MacOS 10.12+.

  • Bugfix: Fixed an issue to always bind buffers to all particle shader inputs to avoid a validation error in Metal.

  • Bugfix: Fixed an issue with AV Foundation video playback causing validation errors in Apple's debug tools, as the textures that it returns to us can't be used as render-targets and are stored in CPU-accessible memory.

  • Bugfix: Fixed an issue with AVFMedia plugin failing when a movie has captions.

  • Bugfix: Fixed an issue in MetalRHI that caused the first render query result to return the wrong result, which manifested as paused particle animations.

  • Bugfix: Fixed a focus problem in the asset picker that forced users to click on the search text field to be able to type.

  • Bugfix: Fixed an issue with game window not rendering its contents in some cases on macOS 10.12.1.

  • Bugfix: Fixed an issue with HLSL->Metal conversion for calls to asuint/asfloat where the input type matches the output type.

  • Bugfix: Fixed an issue MetalRHI's handling of calling "Set Render Targets Info" without any render targets.

  • Bugfix: Fixed an issue with TBasePassVertexShaderPolicyParamType not setting values for all shader parameters that would then cause an error in Metal's validation layer.

  • Bugfix: Fixed an issue for Metal shader translation retain more precision for float constants -1.0f >< 1.0f by emitting them in scientific notation.

    • This prevents Hammersley constant amongst others from being flushed to 0.

  • Bugfix: Fixed an issue with FMac Metal not natively supporting PF_G8 + sRGB as Apple claims that not all Mac GPUs have single-channel sRGB formats.

  • Changed the ShaderCache not to cache resource bindings in the draw states for shader platforms that don't use them.

  • Disabled the lazy-encoder construction in Metal for AMD. There is a situation that causes the lazy construction to perform a clear that isn't wanted.

  • Enabled more concurrent ShaderCompileWorker instances on Mac now that they don't consume such excessive amounts of memory.

  • Ensure that command-buffer failure in Metal is always fatal as there is no way to recover and make the default number of command-buffers sufficiently large to handle texture streaming in Mac games.

  • Rework Metal's handling of RHI Set Stream Source calls that override the stride of vertex declarations to be much more efficient.

  • Update the GPU identification code in Metal to handle changes made in macOS Sierra.

  • Use a read/write mutex to protect access to Metal's internal shader pipeline caches so that parallel threads can progress in the common case where new shaders are not being compiled.

  • Use Metal's internal setBytes API to upload buffer data that is less than a single CPU page as this is much faster and avoids fragmenting Metal's internal heaps. On Nvidia GPUs this is always used but for iOS versions without the feature or Macs running El Capitan on Intel GPUs an extra ring-buffer is used instead.

  • Use private memory for the Metal stencil SRV workaround needed on OS X El Capitan for a small performance improvement.

PlayStation 4

  • New: Added a PS4 Device Profile when connected to a 4K TV.

  • New: "Get Num Of Tracking Sensors" and "Get Tracking Sensor Properties" are now supported by PSVR. This will return the properties for the PS4 tracking camera.

  • New: When a game supporting PlayStation Pro is connected to a 4K TV, the game may choose to automatically create 4K backbuffers or to continue with 1080p backbuffers.

    • This choice should be made on a per-game basis taking memory cost and performance into account.

    • Use "r.PS4Allow4kOutput" to enable. Disabled by default.

  • Bugfix: Fixed a crash that could occur with audio threading when the Kernel took over core 7 and starved the audio thread.

  • Bugfix: Fixed a possible GPU hang on PS4 when using DrawIndirect or DispatchIndirect. This hang could be seen in projects using DistanceField AO or DistanceField Shadowing.

  • Bugfix: Fixed an issue with render target alignment bugs on PS4 Pro.

  • Bugfix: Fixed some audio drops on PS4 media playback.

  • PS4 Time's "SystemTime" now returns local machine time instead of UTC.

  • Stopped PS4 from always staging all ICU data files.

  • Upgradeable apps will now have the app_type field in Sony Project Files (.gp4) generated with the spelling 'upgradable' which is consistent with what Sony expects.

  • Removed the mapping for the Play controller's "Select" button, as it is reserved by the system.

Xbox One

  • New: The default Xbox One XDK is now August 2016 QFE 2.

  • New: Added support for multiple binaries in Xbox One deployments. Removed the need for binary renaming during deploy.

  • New: Added support for using the virtual keyboard on Xbox One.

  • New: D3D12 Movie player updated to a fast SIMD implementation. This will be replaced in a future SDK when the hardware decoder is supported.

  • New: Improved Xbox One deployment performance and iteration times.

    • Fixed an issue where staging could be performed twice per build from Visual Studio.

    • Ensured files that have not changed are not recopied for staging or deployment.

    • Modified manifest generation to avoid writing a new manifest if the contents are unchanged.

  • New: Refactored Xbox One controller handling to reduce Cross-OS calls to improve performance and to reduce memory usage.

  • New: Support for the media foundation player added for Xbox One.

  • New: Added better compression buffer sizing during pak creation, which will result in more files being compressed for use with hardware decompression.

  • New: Added support for staging era.xvd from the XDK, which is required by newer XDKs for application launch.

  • Bugfix: Fixed an assert when saving/loading games.

  • Bugfix: Fixed an ESRAM memory leak caused by Volume Textures.

  • Bugfix: Fixed an issue that would cause the leading character in complex AppxManifest settings to be ignored.

  • Bugfix: Fixed an issue where the shift key on a physical keyboard connected to an Xbox One kit could be ignored.

  • Bugfix: Fixed an issue with corrupted screenshots.

  • Bugfix: Fixed an issue where DirectX 12 support was not being marked as experimental for the Xbox One.

  • Bugfix: Fixed an issue with hardware compression and decompression to always fall back to the software implementation if the hardware implementation fails.

    • This could happen if data built before hardware compression support was added is decompressed through the hardware decompression path or if compression or decompression occurred before the RHI was initialized.

  • Disabled engine analytics on Xbox One shipping games.

HTML5

  • New: upgrade emsdk toolchain to 1.36.11

    • OSX binaries: clang.

    • Rebuilt ThirdPartySoftware libs for HTML5.

    • Windows binaries: clang.

Windows

  • New: Add support for multitouch in Windows 7-10!

  • New: When loading a UE4 module DLL, the engine now manually scans through project and plugin binaries and pre-loads dependent DLLs. This removes limitations caused by a maximum length of the PATH environment variable.

  • Bugfix: Fixed an issue where maximized borderless game windows would render their contents offset by 8 pixels from the top and left sides.

All Mobile

  • New: Provided access to project directory in UPL (Unreal Plugin Language) using $S(ProjectDir).

Programming

  • New: Generated project files now include intellisense definitions and include paths for all UE4 modules, rather than just those in the standard UE4 editor target.

  • New: Unreal Build Tool now supports the Intel C++ compiler on Windows.

  • New: Added a -nolink command line option for Unreal Build Tool, which enables compiling a target without linking it. This is useful for automated build tests, such as non-unity compiles.

  • Bugfix: Makefile is now invalidated if any generated headers are deleted that fixes an issue where files are moved from one module to another, and the original module no longer contains any generated headers; its include path needs to be removed from the compile environment.

  • The Unreal Build Tool now deletes any DLLs in output folders which share names with build products. The Windows loader reads DLLs from the first location it finds a file with a matching name, so we need to ensure that it doesn't load stale DLLs when output directories are changed (moving a module into a plugin, for example).

  • Updated the Unreal Build Tool so that programs can now be built as part of editor/client/server solution configurations.

  • Updated UnrealVS so that open documents are now saved before running a single file compile.

  • The GUBP build tools have been removed. Scripts to create binary UE4 distributions are now implemented in Build Graph.

Rendering

  • New: Added a new "Cinematic" Scalability level to the scalability system.

    • This level is intended for offline rendering of cinematics only.

  • New: The PS4 defrag pool size is now controlled by a new variable "r.PS4DefragPoolSize", and is not bound anymore to "r.Streaming.PoolSize." It will need to be configured to fit the project needs, in term of graphic resources.

  • New: Added 1000 nit HDR output option.

  • New: Added a cvar "r.DumpSCWQueuedJobs" to help tracking ShaderCompileWorker crashes.

  • New: Added -emitdrawevents command line parameter to enable draw events from startup. This can be useful when capturing with third party graphics debuggers.

  • New: Added material nodes "Atmospheric Fog Sun Direction" and "Atmospheric Fog Sun Color" so that materials can very easily get access to the direction and color of a directional light that has been marked as the atmospheric fog light. This can reduce the need to use MIDs or MPCs.

  • New: Added per-material UV density data for Static Meshes and Skeletal Meshes to improve texture streaming metrics.

  • New: Added Pre-Tonemapper HDR color to buffer visualization and frame capture.

  • New: Added Project Setting to enable Skincache Shader Permutations

  • New: Added shader resource compression. This will compress shader resources in memory. It is on by default for all platforms except for Xbox One.

  • New: DirectX 12 RHI implementations for PC and Xbox One are now mostly merged.

    • Some platform specific implementations remain, but optimizations and fixes will now affect both platforms at the same time.

  • New: Hierarchical LOD transition distances can now be adjusted based on Scalability settings. Use "r.HLOD.DistanceScale."

    • Defaults to 1, but higher values will make the transition happen farther away.

  • New: Make shadow radius culling take field of view into account.

    • Note that this may affect shadow depth rendering performance positively or negatively, depending on the camera's FOV.

  • New: New scalability setting "r.Streaming.LimitPoolSizeToVRAM" to limit the texture streaming pool to how much video memory is available.

    • Improved the behavior when using adaptative mip bias ("r.Streaming.UsePerTextureBias") so that the scalability bias is only used to generate over-budget warnings.

  • New: New texture streaming build status available through "r.Streaming.CheckBuildStatus." This is used to warn the user when a texture streaming build is required.

  • New: Particle cutout optimization no longer requires SubUV animation.

    • It is now on the "Required" module and there is now a Project Setting under Rendering > Optimization > Particle Cutouts by Default that will automatically set up the cutout optimization when materials change on an emitter.

  • New: Console variable "r.SSR.MaxRoughness" can now be used in a Shipping build rather than as a development-only feature.

  • New: Added support for "highresshot" on Vulkan.

  • New: Texture streaming MipBias, from Scalability Settings, does not affect the wanted mips computation anymore, to prevent low texture quality on characters.

  • New: The command "ListTextures" now outputs stats in terms of "in memory" and "on disk" to improve readability. Now, results are also more consistent between cooked builds and non cooked builds.

  • New: Vulkan shaders are now using glslang from SDK 1.0.24.0.

  • New: When running with the D3D11 RHI on Windows under RenderDoc, draw events are now enabled by default.

  • New: When running with the OpenGL RHI on Windows under RenderDoc, draw events are now enabled by default.

  • New: Added a fix for Vulkan drivers returning infinite number of swapchains.

  • Bugfix: Fixed a crash exiting VR Preview when using OpenGL 4 on Windows.

  • Bugfix: Fixed a crash when using High Quality Particle lights.

  • Bugfix: Fixed a potential crash when painting in the Landscape editor.

  • Bugfix: Fixed a crash when updating hierarchical instanced static meshes on the fly.

  • Bugfix: Fixed a crash in Procedural Mesh slicing when no verts are generated.

  • Bugfix: Fixed a crash when using tessellated materials with Blueprint "Draw Material To Render Target" nodes.

  • Bugfix: Fixed a crash with Post Process Volume when using Planar Reflections with Instanced Stereo.

  • Bugfix: Fixed an issue to always bind a value for "Is Stereo Parameter" in the Planar Reflection shader parameters to avoid an invalid GPU access on Metal in shaders that perform an if-test on this variable.

  • Bugfix: Engine no longer attempts to release Static Mesh resources if the mesh was never rendered, and therefore never initialized the resources. This also fixes some incorrect stats related to static mesh memory usage.

  • Bugfix: Fixed an issue for large spotlight culling issues.

  • Bugfix: Fixed an issue for "Auto Compute LOD Distances" option in static mesh LOD settings. Previously the calculation was incorrect and would give somewhat arbitrary distances.

  • Bugfix: Fixed an issue where Skylight Occlusion Tint would not properly apply the material's diffuse color.

  • Bugfix: Fixed a fencing bug with the async compute translucency lighting volume clear. This could cause a flickering or a rare GPU hang on PS4.

  • Bugfix: Fixed an issue with divide-by-zero in certain cases in the Motion Blur Post Process. This resulted in artifacts in certain cases.

  • Bugfix: Fixed an issue with Foliage where lighting would always needs to be rebuilt.

  • Bugfix: Fixed an issue where changing Detail Mode not propagating to components.

  • Bugfix: Fixed an edge-case when replacing texture references in a material that caused sampler type updates to fail.

  • Bugfix: Fixed an issue where gamma was being incorrectly applied to vertex colors of Procedural Meshes. Fixed Bounds Scale not being applied to Procedural Mesh Component.

  • Bugfix: Fixed an issue with "Get Capsule Mesh" not working correctly when oriented.

  • Bugfix: Fixed an issue with normals on cap section when slicing Procedural Mesh Components.

  • Bugfix: Fixed an issue with possible low resolution textures when they were used within UMG.

  • Bugfix: Fixed the Primitive filter in the Statistics window of the editor.

  • Bugfix: Scaled instanced static meshes will now correctly compute world normals.

  • Bugfix: For FRCPassPostProcessVelocityScatter use the Empty vertex declaration not the Filter vertex declaration as the vertex attributes aren't read in the shader, which fixed a Metal validation error.

  • Removed the console variable "r.Vulkan.UseGLSL", now we use SPIR-V everywhere.

  • Don't create material resources if we are in a build that can never render - Saves a few MB of memory

  • Made shadow radius culling take field of view into account. Note that this may affect shadow depth rendering performance positively or negatively, depending on the camera's FOV.

  • When using the GPU skin cache experimental feature, less shader permutations are now needed.

  • On XboxOne, the Vertex and Index buffers are now allocated with the right nextwriteoffset to prevent stomping old data on future writes.

FX

  • Bugfix: Fixed a rare crash in Particle Trail Emitter instances.

Lighting

  • New: Added "Capsule Indirect Shadow Min Visibility" to Skeletal Meshes, so that artists have control over indirect Capsule Shadow darkness without changing cvars.

  • New: Added flag for "Visible In Reflection Captures" to Primitive Component, which is useful for hiding objects too close to the capture point

  • New: Added "Distance Field Bias" to Static Mesh Build Settings for mesh Distance Fields, which is useful for reducing self shadowing on meshes that have ambient animation.

  • New: Changed the default Planar Reflection "Distance From Plane Fadeout End" from 600 to 100, which reduces artifacts and is a more intuitive initial setting.

  • New: Clamp Indirect Lighting Quality to 1 in preview builds to keep previews useful even with Indirect Lighting Quality jacked up to 10.

  • New: Distance Field Ambient Occlusion and Ray Traced Distance Field shadows are now enabled in High and Epic scalability settings by default.

  • New: Planar Reflection Actor show flags can now be edited.

  • New: Static light source shapes will no longer draw black in Reflection Captures. They will now fade out instead.

  • New: Static lights with Min Roughness = 1.0 don't get their source shapes drawn into reflection captures, since they are being used as virtual area lights.

  • Bugfix: Fixed an issue where lightmaps would not be applied because of how component transforms were computed.

  • Bugfix: Fixed an issue with double lighting of clear coat, cloth, and eye shading models.

  • Bugfix: Fixed an issue where the Global Distance Field was not dirtying previous object position on Update Transform. This left behind a phantom shadow on teleports.

  • Bugfix: Fixed an issue with Instanced Static Meshes being unbuilt after a lighting build if you ever cancelled a previous lighting build.

  • Bugfix: Fixed an issue with pre-shadow artifacts with multiple scenes, like the character receiving Stationary Light shadows from static environment.

  • Bugfix: Fixed an issue with Ray Traced Distance Field Shadows on PS4.

  • Bugfix: Fixed the "r.AllowStaticLighting" flag in the pixel inspector.

  • Bugfix: Fixed an issue Screen Space Reflections disappearing when the camera direction is near perpendicular to the pixel's normal.

  • Bugfix: Resolved HLOD self-shadowing interactions in Lightmass.

  • Bugfix: Scene captures and Planar Reflections force a scene color alpha channel to be used when they are capturing. This fixes Planar Reflections with "r.SceneColorFormat=3", which happens due to scalability.

  • Lighting channels can now be edited on components with static mobility, since dynamic lights can still affect them.

  • Lightmass area shadows only mark texels as mapped inside the light's influence, which fixes multiple Stationary Lights with the flag "Use Area Shadows For Stationary Light" interfering.

  • Now clamping light Min Roughness to .04 to avoid NaNs from Vis_SmithJointApprox on materials with Roughness 0

  • Shortened lightmass export filenames to prevent path length issues.

Materials

  • New: Added "pre-skinned local position" material graph node. Available in the vertex shader only but can be passed through Custom UV interpolators.

  • New: Added new material functions to engine\content:

    • Interior Cubemaps: Maps specified cubemaps to a virtual box. Useful for displaying insides of buildings without using polygons.

    • Ray March Heightmap: Performs a ray march through a heightmap as if it were a volume. Enables more volumetric lighting for heightmaps and flipbooks.

    • High Pass Function: Performs a high pass operation on a specified Function. Requires multiple offset samples of the function to be hooked up.

    • High Pass Texture: Performs a high pass operation on a texture object.

    • Unsharp Mask Function: Performs an unsharp mask operation on a specified function. Requires multiple offset samples of the function to be hooked up.

    • Unsharp Mask Texture: Performs an unsharp mask operation on a texture object.

    • Box Intersection: Returns the ray entry and exit positions and distance traveled inside a box.Box is axis aligned. To support arbitrary rotations, transform the view ray into the local space of the new coordinates.

    • Cylinder Intersection: Returns the ray entry and exit positions and distance traveled inside a cylinder.

    • Quadratic Formula: A simple helper function providing pins to solve the quadratic formula, providing T0 and T1.

    • Smooth Ceil: Like regular ceil but with a variable soft ramp before each integer cutoff.

    • Axis Aligned Fresnel: Performs fresnel restricted to a single axis. This is useful to restrict a rim light to only the edges of an object, even at glancing angles.

  • New: All noise material functions except "Fast Gradient Noise" now work on mobile.

  • New: Noise material functions have been made a little faster (up to 1.7x) by changing the GPU random number generators used.

  • New: Stereo planar reflection support.

  • Bugfix: Fixed a case where material functions would incorrectly flag as a re-entrant expression.

  • Bugfix: Fixed a case where material nodes containing a dot product or length calculation could optimize and ignore the actual vector sizes.

  • Bugfix: Fixed a number of issues with subsurface profile shading model.

    • Emissive lighting was being applied twice when rendering checkerboard skin.

    • Emissive lighting was modulated by basecolor in the recombine when rendering checkerboard skin.

    • Metallic materials were contributing specular lighting to the diffuse channel when rendering checkerboard skin.

    • Optimization: Fall back to default lit lighting for pixels where the opacity is 0.

  • Bugfix: Fixed an infinite loop crash when chaining multiple material attribute functions together.

  • Bugfix: Fixed texture streaming for instanced components like foliage.

  • Bugfix: Fixed world position in downsampled separate translucency.

  • Bugfix: Fixed cases where chained calls to the same function will overwrite input connections on previous calls in the chain by linking function inputs into the caller graph before re-entering after compiling an input.

  • Updated the Actor Position node to now be set to the position of the actor you are attached to instead of your owning actor.

Postprocessing

  • New: Added Alpha output support for postprocess materials (optional as a property of the material).

  • Anti Aliasing method has been removed from Post Process volume settings, and can now only be set from Project Settings under the Rendering section.

Optimizations

  • New: Added shadow stencil clear optimization - avoids clearing stencil for each projected shadow by zeroing the stencil buffer during testing.

    • This can give significant performance gains in cases with large numbers of per-object shadows (e.g. many characters with a single stationary light).

    • Note: Writing to stencil during testing negates the use of high stencil on many GPUs, but this change is still a clear win an all the cases we tested.

  • Updated material resources to not be created if we are in a build that can never render - This saves a few MB of memory.

Mobile Rendering

  • New: Improved Mobile Scalability options. Each mobile material quality level can now specify a CSM shadow filtering quality, and the Fog calculation can now be enabled and disabled for both HDR and non-HDR mobile games.

  • New: Added on screen warning for invalid reflection captures. It can be seen only in a game running with mobile renderer.

  • New: Added option to mobile quality level settings to control the quality of filtering applied when rendering with CSM shaders.

  • New: Android device profiles can now elect to disable support for Vulkan and fallback to OpenGLES.

    • Use the console command r.Android.DisableVulkanSupport to disable support for Vulkan.

  • New: Mobile vertex fog is now a project option.

    • It can now be enabled or disabled regardless of Mobile HDR project setting.

  • New: Added basic mobile support for global clip plane project setting.

    • This fixes rendering issues with planar reflections on mobile.

  • New: Added more stringent checks for Android ES3.1 compatibility.

    • Android ES3.1 devices must also support floating point render targets and shader IO blocks.

    • Improved logging when ES3.1 support has failed.

  • Bugfix: Fixed a crash on startup when using Vulkan on Android devices with Mali-based GPUs.

  • Bugfix: Fixed Average Brightness property being applied to reflections in gamma space in the mobile base pass. This would cause ES2 reflections to be overbright.

  • Bugfix: Fixed case where Sky Light could be rendered in green color on some Android devices.

  • Bugfix: Fixed an issue where the editor ES2 Feature Level Preview and Mobile Preview PIE modes were not correctly limiting materials to only the 8 textures available on ES2.

  • Bugfix: Fixed issues with modulated shadows and decals on some PowerVR54x based android devices (such as Galaxy S4).

  • Bugfix: Fixed issues with transparent depth reading materials reading invalid depths on some android devices.

  • Bugfix: Fixed planar reflections when running Vulkan on Android devices with Adreno-based GPUs.

  • Bugfix: Fixed possible rendering issues with gpu skinning on OpenGL ES 3.1 platforms.

  • Bugfix: Fixed Android to use single channel texture for Shadow Maps instead of 4 channel.

  • Bugfix: Fixed Black HDR compressed textures on devices with Mali GPUs.

  • Bugfix: Fixed Black rendering artifacts on Nvidia Shield Tablet device when project is built with Deferred OpenGL ES rendering support.

  • Bugfix: Fixed ES3+ devices to properly detect support for HALF_FLOAT and UNSIGNED_INT_2_10_10_10_REV vertex formats.

  • Bugfix: Fixed the Help text for SortBasePass console variable to now properly describe each option.

  • Bugfix: Fixed iPad Mini 4 devices to now correctly render refraction effect.

  • Bugfix: Fixed Particle Cutout crashes on certain devices (Samsung Galaxy Note 2).

  • Bugfix: Fixed Shader compile errors on NVIDIA Shield devices when project uses dynamic Point Lights.

  • Updated planar reflections on mobile to no longer cause GPU particles to be updated twice per frame.

  • Updated scene captures to now correctly decode scene color on devices that do not support floating point targets (such as the pre-updated Galaxy S6).

  • Previously, Mobile HDR setting implied vertex fog. If your project does not use Mobile HDR, you may wish to disable Vertex Fog in the Project Settings.

UI

  • New: Added delegate to the Game Viewport Client that notifies when the Game's platform specific window is being closed, and can be used to prevent the game from being exited (and the window from being closed).

  • New: Textures, Materials, and Paper2D Sprites can now be added to Widget Blueprints directly from the Content Browser.

  • New: Updated the Text Render Component to support multiple font pages.

  • Updated Circular Throbber widgets to no longer support Period values less than zero and they will no longer throw an error when set to zero.

  • Updated the viewport to no longer lose mouse focus if a visible cursor clicks inside of it when the cursor should be visible.

  • Updated drag operations to only be completed or canceled by the finger that started the operation, when using touch input.

Slate

  • New: Added support for underlined text rendering.

    • The Text Block Style can now specify a brush to use to draw an underline for text (a suitable default would be "DefaultTextUnderline" from the Core Style class).

    • When a brush is specified here, we inject highlights into the text layout to draw the underline under the relevant pieces of text, using the correct color, position, and thickness.

  • New: Added the Window Title Bar Area widget (and UMG wrapper for it), which can be used to specify which regions of the UI should enable the user to drag the window on desktop platforms.

  • New: You can now use the Content/SlateDebug folder to store any Slate resources that shouldn't be used in a shipping build.

    • LastResort.ttf has been moved to this folder.

  • Bugfix: Fixed jittering that could occur when using a fixed wrapping width with an editable text.

  • Bugfix: Fixed an issue preventing Editable Text and Multi Line Editable Text from setting the correct foreground color when painting.

  • Bugfix: Fixed volatility and invalidation issues for text widgets.

  • Bugfix: Fixed Editor freezes and memory leaks when slate remote is enabled.

  • Bugfix: Fixed Scroll Box right mouse/touch grab scrolling functionality.

  • Bugfix: Fixed engine compilation with defined LOG_SLATE_EVENTS.

  • Updated material blend states to match what is expected of Slate rendering, which differs a lot from the scene renderer with the way it treats alpha.

    • This fixes translucent rendering with the retainer widget, users will need to set their materials to Alpha Composite though for it to behave as expected.

  • Updated Menu Anchor and Scroll Box to now work with invalidation panels.

UMG

  • New: Added controller support to Combo Box widget.

  • New: Added support for outline fonts.

  • New: Updated the Copy, Cut & Paste animation tracks to be fully supported in UMG now, though not fully supported for Sequencer in general (outside of UMG).

  • New: Updated the safe zone widget in both Slate and UMG to have the ability to control which sides are accounted for.

    • This can enable the nesting of these widgets to solve situations where you want parts of your layouts to extend to the edge of the viewport.

  • New: Updated the selection of animation tracks in UMG to automatically update the selected widgets now.

  • New: Added an option to exclude all UMG widgets and slots from dedicated server builds.

    • Set bLoadWidgetsOnDedicatedServer=false for this behavior.

  • New: Exposed a trace channel for the Widget Interaction Component.

    • Defaults to Visibility.

  • New: Took the Widget Component and Widget Interaction Components out of experimental.

    • Removed old importing support for upgrading ancient versions of widget components.

    • Removed parabola distortion, as users can now do whatever they want in their custom MID they can override the widget with.

  • New: Updated the designer so that you can disable and enable the dashed lines around containers by using 'G' to toggle game mode. The option in the settings is now used as the default when you startup a designer.

  • New: Updated the UMG "Replace with" function to now support "Replace with Selected Widget".

  • New: Updated UMG Project settings to now show/hide different widget classes and categories in Palette view.

    • Set this option under Project Settings->Editor->UMG Editor.

  • Bugfix: Fixed an issue where renaming a widget would cause the slot content animation track to be invalid.

  • Bugfix: Fixed an issue where buttons inside a scroll list with a click method set to Precise Click would activate if the mouse was released when they are out of view.

  • Bugfix: Fixed an issue where removing a Widget from Panel Widget did not invalidate layout, which could leave it still visible accidentally.

  • Bugfix: Added missing base includes and forward declarations for Progress Bar and Text Block.

  • Bugfix: Fixed 3D widgets getting culled when using materials that disable depth testing.

  • Updated Combo Box (String) widgets to now correctly clear the currently selected option if that option is removed from a Selection Changed callback.

  • Prevented widget animation from being named the same as one of the override functions in a User Widget.

  • Updated the Experimental Class warning to now have a more detailed description.

  • Updated minimized windows to no longer behave like they are visible when determining what widgets are located under the mouse cursor.

  • Updated the grid panel to now properly set padding on slots as it is intended to.

  • Updated the wrap box so that the second row now properly receives "inner" vertical padding.

  • Documented the meta parameters allowed on widgets, like we do for regular UObjects.

    • For binding widgets from blueprints you can now do BindWidget (unchanged), and to simplify binding widgets optionally, you can now just use BindWidgetOptional, rather than the combination of BindWidget and setting OptionalWidget to true.

  • Improved setting focus for users on widgets.

    • If we are unable to set the focus immediately, possibly because the user is setting focus in the Construct callback before the widget is in the tree, we now update the Slate Operations FReply on Local Player to set focus in the next frame when it is more likely the widget will become focus-able.

  • Updated retainer widgets to now contain the Virtual Window directly in the hierarchy. This should now make it possible to reliably focus elements inside the retainer widget.

  • Updated Button and Widget to no longer multiply color and opacity twice.

VR

  • New: Added support for getting the HMD Device name (e.g. "OculusRift," "SteamVR," "PSVR," etc) through Blueprints and C++.

  • New: Added the "Start in VR" project setting, which enables projects to specify that they would like to automatically attempt to run in VR mode, regardless of whether or not -vr is passed on the commandline.

  • New: Added the ability to re-enter VR preview in the Editor after exiting from it using the quit option inside the SteamVR overlay. Previously one had to quit and restart the Editor to re-enable VR.

    • It is now possible to reliably exit a game from the Steam VR overlay exit button, even when previewing in the Editor.

  • New: Added the ability to select which HMD module to use on startup by passing "hmd=" on the command line.

    • This is useful if you have more than one type of device attached to your machine. If no device matches the name passed in, a warning will be printed to the log and VR will be disabled.

  • New: Added support to the Oculus Rift for the "r.ScreenPercentage" console variable if it is set manually.

    • The obsolete console command "HMD SCREENPERCENTAGE" will still work, but assigning to "r.ScreenPercentage" is now the preferred way.

  • New: Updated the PSVR 2DVR texture to now be a UTexture, so it can be a RenderTarget, etc. Also improved error reporting for this and some other PSVR features.

  • New: Added three options to the PSVR HMD Setup Dialog Cancel reactions.

    • Disallow Cancel - Put the HMD Setup Dialog up again. Appropriate for titles that only support VR output.

    • Switch To 2D - Switch to 2D output mode and send the HMD Connect Canceled Delegate. Appropriate for apps where 2D play is supported.

    • Delegate Defined - Fire the HMD Connect Canceled Delegate. The project needs to handle this delegate and take appropriate action while being mindful of TRC requirements.

    • Be sure to consider the case where the HMD is disconnected as the program starts up.

  • New: Added delegates for when the PSVR headset is taken off the head or put on the head.

  • New: Updated GoogleVR SDK to v1.01, which adds proper support for splash screens.

  • New: Updated OSVR plugin.

    • Fixes multiple crashes, and improves tracking.

  • New: Added VR splash screen for level transitions.

  • New: Updated UI elements that composite after reprojection to preserve quality.

  • Bugfix: Applied fix for Adreno GearVR devices rendering black on startup.

  • Bugfix: Fixed Add Controller Yaw Input with PSVR. The yaw was being reset every frame.

  • Bugfix: Fixed an issue where the main editor window was not restored after exiting VR preview in some cases.

  • Bugfix: Fixed crash when exiting PIE while a panoramic screenshot was in the process of being taken.

  • Bugfix: Fixed motion controller attachment movement when the game is paused.

  • Bugfix: Fixed PSVR reprojection prediction time. HMD motion now runs off the edge of the rendered area less easily.

  • Bugfix: Fixed saving the Oculus Rift INI setting "bPixelDensityAdaptive". It was previously saved as a floating point value instead of a boolean.

  • Bugfix: Fixed some static analysis warnings in Oculus Rift plugin code.

  • Bugfix: Fixed the "Get bounds node" for SteamVR to return the correct bounds if they have changed since initialization. This could happen if the HMD was outside of tracking area during start up.

  • Worked around a bug in SteamVR that caused VR to fail to initialize if SteamVR isn't running when launching the application.

  • Added positional tracking information on PSVR even when the device isn't optically tracked. This enables proper IPD to be taken into account for rendering.

  • Added support for the left menu button on the Oculus Touch controllers.

  • Adjusted Hidden/Visible area masks to eliminate black crescents at the top and the bottom edges of the PSVR HMD.

  • Updated changing world to meters scale while running in VR Preview mode in the Editor on Oculus Rift so that it now correctly applies the changes to the Oculus Touch controllers.

  • Updated VR play-in-editor to always use "Game has mouse focus" option, to ensure that motion controllers are routing input correctly to the game.

  • Added a PSVR Morpheus project setting to set the reprojection wrap mode to Mirror or Clamp To Border. This determines how left and right reprojection artifact pixels are filled.

    • Mirror, the default, fills them with some nearby pixels.

    • ClampToBorder fills them with the border color (usually black).

    • Most content works best with mirror.

  • Updated PSVR to now ignore partial HMD tracking data before the HMD has been tracked in a game session because orientation based re-projection does not function until that happens. There is a project setting to disable this, should the PS4 behavior change in the future.

Other

  • New: Added the ability to change Device Profiles at runtime.

    • Use "dp.override ". If you do it again to another one, it will reset the settings to what they were originally, before applying the second new Device Profile. This is because the second Device Profile may not set all settings the first one did, but we want to undo the first settings that the second doesn't contain.

    • Changed "Set Quality Levels" function, in Scalability.cpp, to no longer change the "SetBy" priority when setting console variables. This now keeps the "SetBy" the same as it was, which helps with conflicts between game settings and Device Profiles. See the "Set With Current Priority" function.

  • New: Added an option to toggle full screen with F11 key in addition to Alt+Enter in games.

  • New: Added Parse function to JsonObject.cs to be able to parse a string instead of only files.

  • New: Env Query Instance Blueprint Wrapper is now Blueprintable.

    • This enables you to make Blueprints that enable more complex 'wrapper' behavior when using the Blueprint node "Run EQS Query" (on the EnvQueryManager).

    • Made "EEnvQueryStatus" a Blueprint type, which makes it much easier to work with in Blueprints.

  • New: For Media Assets, added "Can Play Source" and "Can Play Url" methods to Media Player.

  • New: For Media Assets, added more verbose logging output, e.g. for dropped video frames.

  • New: For Media Assets, added "Open File" method to Media Player.

  • New: For Media Assets, implemented Platform Media Source.

  • New: For Media Assets, Implemented per-platform media player overrides in Media Asset derived classes.

  • New: For Media Player Editor, added "Original Size" viewport mode.

  • New: For Media Player Editor, added Stats tab to show decoder performance statistics during playback.

  • New: For Media Player Editor, added support for dragging and dropping media files into media player editor.

  • New: For Media Player Editor, implemented platform player overrides details customization for media assets.

  • New: For Media Player Editor, trimming leading and trailing whitespace in URL textbox.

  • New: Project-specific versions of identically named engine plugins are now supported.

    • Multiple plugins with the same name are prohibited at other times.

  • New: For PS4 Media, improved memory allocator to avoid "out-of-memory" issues when playing multiple videos.

  • New: For Wmf Media, added QuickTime to known video subtypes.

  • New: For Wmf Media, refactored playback topology handling to support multiple tracks and track switching.

  • New: For Avf Media, added missing supported media file extensions for macOS/iOS media player.

  • Bugfix: Fixed a crash when loading Unreal Stats in the Session Frontend.

  • Bugfix: Fixed a crash where sometimes the Crash Reporter Client would crash if it didn't receive a ping responses from the Epic crash server.

  • Bugfix: Fixed a crash when after playing media that requires a different conversion shader.

  • Bugfix: Fixed an issue with window centering when moving from fullscreen to windowed mode.

  • Bugfix: Fixed an issue with Media assets where existing native player not being reused when opening new media source.

  • Bugfix: For Media assets, improved the appearance of file media source paths.

  • Bugfix: For the Media Player Editor, fixed the media player selection is ignored if media specifies player overrides.

  • Bugfix: For the Media Player Editor, fixed where the URL box would sometimes incorrectly show media load error even though it loaded correctly.

  • Bugfix: For PS4 Media, fixed a crash with the CPU/GPU due to a race condition in destructor.

  • Bugfix: For Wmf Media, fixed an issue where FourCC types printing in reverse order.

  • Bugfix: For Wmf Media, fixed an issue with GuidToString printing the incorrect byte sequence.

  • Bugfix: For Wmf Media, fixed a memory leak while playing videos.

  • Bugfix: For Wmf Media, fixed an issue where WMV2 encoded videos were too bright.

  • Bugfix: Removed still image tracks and sinks.

  • Removed use of Windows Error Report API from engine crash handling. Fixes cases where WER settings in Windows could block UE4 crash report system.

Programming Release Notes

AI

  • Added sanity checks to NavDataSet elements access in UNavigationSystem.

  • CrowdAgentMoveDirection will be set while traversing a link, unless the agent is falling.

  • Made NavigationSystem call TickAsyncBuild on all navigation data instances while there is an ongoing navigation build in progress, regardless of whether auto navmesh update is enabled.

Animation

  • New: Made RawAnimationData (and associated structures) private and added accessors and new functionality to enable modification in a safer way than direct access.

Blueprints

  • New: Added GetConvenientWindowedResolutions to KismetSystemLibrary.

  • New: Added ability to use "AdvancedDisplay" metadata in MakeStruct nodes.

  • Bugfix: Fixed an issue in Blueprint compilation that could cause crashes with certain memory allocators.

  • Bugfix: Fixed an issue where components of inherited grandchild blueprints would sometimes use invalid components as their outer in cooked builds.

Core

  • New: Added UWorld::SetTimeUntilNextGarbageCollection to change the GC timer for use when doing automated performance capture measurements.

    • Note: Things that force a GC will still force a GC after using this method (and they will also reset the timer).

  • New: Added a method to extract swing and twist quaternions from FQuat.

  • New: Added a new Invoke function which enables member function pointers and data member pointers to be used as simple projections in algorithms.

  • New: Added a Super typedef to USTRUCTs which specify another USTRUCT as their base.

  • New: Added a TNot metafunction which inverts the Value of another boolean metafunction.

  • New: Added Algo::Sort which sorts a range like TArray::Sort but doesn't auto-dereference pointers.

  • New: Added Algo::SortBy which sorts a range via a projection of the elements.

  • New: Added an OOM delegate so other systems can get a callback after OOM occurs (after deleting the backup memory pool if it exists).

  • New: Added an optional size to MallocLeak Stop and made the default filter size 128 KB for both MallocLeak Dump and MallocLeak Stop if no size was specified.

  • New: Added array-new support to TUniquePtr and MakeUnique.

  • New: Added AsyncThread function to enable stack size and priority to be specified

  • New: Added ENGINE_API to FStripDataFlags so that it can be used outside of the Engine module.

  • New: Added extra context to FTableRowBase::OnPostDataImport.

    • It now takes the owning data table and the row name as parameters. This enables it to do more useful fix-up that depends on the context of where it is used.

  • New: Added Find and Contains functions to TBitArray.

  • New: Added FUNCTION_NO_NULL_RETURN_BEGIN and _END to statically annotate a function that never returns a null pointer.

  • New: Added GetData(), GetNum() generic functions, and TElementType, TIsContiguousContainer traits.

    • The generic GetData() is only valid for contiguous containers, which include C arrays, initializer lists, TArray and TArrayView.

  • New: Added Invoke support for TFunction, which enables a member function pointer or data member pointer to be bound to a TFunction.

  • New: Added Invoke() support to CopyIf

  • New: Added MakeShared to enable the construction of an object and its reference controller in a single allocation.

  • New: Added new Algo::Count and CountIf, for counting elements in a container which match a given value / predicate.

  • New: Added some extra checks to catch uninitialized pointers passed to the garbage collector.

  • New: Added support for custom versions in FArchiveProxy.

  • New: Added TLess<> and TGreater<> specializations which can take any argument type.

  • New: Disabled logging to memory in shipping builds by default. From now on FOutputDeviceMemory will be an opt-in for games.

  • New: Improved bitwise swapping for Swap so that it produces more optimal code in general.

  • New: New Objects can now be created as duplicate transient or PIE duplicate transient consistent with the flags of properties that reference them.

  • New: When the Event Driven Loader is enabled in cooked games, the engine will use the async loading path when loading all assets (even when using LoadObject function).

  • New: Added display of the name of the corrupt pak file in various pak file error messages.

  • New: Added FArchive::operator<< for enum classes, which serializes the underlying type.

    • Changed generated code to never use TEnumAsByte for generated code for enum classes.

  • New: Added TIsEnumClass metafunction, for determining if a type is an enum class.

  • New: Added TUseBitwiseSwap type trait for user-defined types to specialize (as 'false') if it enables better code generation.

  • Bugfix: Fixed bad format string in FLinkerLoad::VerifyImport.

  • Bugfix: Fixed a compile error when declaring a TFunction returning a reference type.

  • Bugfix: Fixed all static analysis warnings in editor builds.

  • Bugfix: Fixed an Unreal Header Tool code generation error when defining a UFUNCTION with a TArray>.

  • Bugfix: Fixed bulk data using source data pointer as an archive instead of raw data when saving.

  • Bugfix: Fixed constness of ILandscapeEditorModule::GetHeightmapFormatByExtension() and ILandscapeEditorModule::GetWeightmapFormatByExtension().

  • Bugfix: Fixed destructor calls not being called on the destination container during a TSparseArray, TMap and TSet move assignment.

  • Bugfix: Fixed FWeakObjectPtr/TWeakObjectPtr debugger visualization which depended upon C++ initialization order.

  • Bugfix: Fixed TCString::Strspn.

  • Bugfix: Fixed TSparseArray debugger visualizer.

  • Changed FMallocStomp::GetAllocationSize() to return the requested allocation size instead of the physical allocation size to make FMallocStomp work properly with FMallocPoisonProxy.

  • Changed checkSlow() to check() when verifying type compatibility in GetDefaultObject<> because this is potentially an unsafe static cast.

  • FindObjectWithOuter once again enables ClassToLookFor to be null as comment indicates is allowed.

  • Increased the initial memory allocation size for FLargeMemoryWriter to reduce the number of allocations when saving or cooking.

  • Lowered verbosity of several error messages that happen when deleting native properties or components.

  • Lowered verbosity of several warning messages that happen when deleting properties or components from parent classes. These issues used to require resaving the child blueprint or level.

  • Made FString::Mid assert when passed a negative count.

  • Made Unreal Header Tool able to parse final classes.

  • Moved RemoveNamesFromMasterList from UEnum destructor to BeginDestroy to avoid potential issues when its package has already been destroyed.

  • Removed blueprint stack warning messages from shipping builds, the stack was missing so the warnings were pointless.

  • Updated stack captures to now always go down the fast path. This avoids a game going unresponsive on Windows when printing or capturing large numbers of callstacks such as with the 'mallocleak' command.

  • Updated the JSON writer to now write floats with a suitable level of precision, where before it was always writing many redundant zeroes.

Editor and Tools

  • New: Added allocation tagging to MemoryProfiler2

    • See FMallocProfiler::AddTag and FMallocProfiler::RemoveTag. Tags should be in the format "Category:Tag", and the "Tag" part may include "/" to create levels in the tag hierarchy (as shown in the tool).

    • Added object, package, and class tags by default (this uses FScopeCycleCounterUObject, so the stats system is now enabled when malloc profiling).

  • New: Optimization and usability improvements of the MemoryProfiler2 tool

    • Optimized the processing of the Callgraph, Histogram, and Short lived allocations views.

    • Added a user-configurable list of allocator functions to trim (which now includes FMemory and operator new by default, and produces much cleaner callstacks).

  • Bugfix: Fixed FDetailCategoryImpl::ShouldBeExpanded not honoring bShouldBeInitiallyCollapsed when bRestoreExpansionState was true.

  • PostEditComponentMove will now be called correctly when stopping a drag operation of a scene component of an actor in a level.

  • UWorldComposition::GetTilesList function can now be used in game code (previously only in Editor).

  • Fixed all static analysis warnings in Editor builds.

Content Browser
  • Bugfix: Fixed an issue where re-scanning a package file may leave old assets in the asset registry.

    • It used to not clear out anything associated with the old package before scanning the file, which could result in old assets being left if they'd since been removed from the package.

    • This also exposes a PackageDeleted function to enable manually clearing anything associated with a package (if doing some custom asset work).

World Browser
  • UWorldComposition::GetTilesList function can now be used in game code (previously only in Editor)

Sequencer
  • New: Added interface to extend the matinee to level sequence converter.

Gameplay Framework

  • New: Actors can now specify via bRunConstructionScriptOnDrag whether PostEditMove should fire the construction script on every move or only when the move is considered finished.

  • New: Added a bWasCancelled parameter to GameplayAbility::EndAbility. This enables us to determine if an ability was ended prematurely. Added an OnAbilitySucceeded delegate for determining when an ability was successfully ended.

  • New: Added an FName constructor to FCollisionProfileName.

  • New: FLocalPlayerContext functions no longer check by default.

  • New: UPrimitiveComponent now has an optional list of components it will ignore collision with when performing movement sweeps.

  • New: UWorld now has a member that accumulates the dilated/clamped game time even when paused called UnpausedTimeSeconds.

  • Bugfix: Fixed an issue where FGameplayTagContainer::HasTag(Tag, IncludeParent, IncludeParent) would miss some matches. Added tests to find other issues.

  • Bugfix: Fixed an issue where FindTeleportSpot used when spawning actors would sometimes fail to find a valid nearby spot depending on the previous collision results.

  • Bugfix: Fixed CharacterMovement hanging on to a bad/penetrating floor check result and not continuing to check for a valid floor. This only occurred if bAlwaysCheckFloor was false.

    • This could in rare situations cause the character to continue to attempt to depenetrate an object far away from it until another floor check occurred.

  • Bugfix: Fixed tooltip text for p.NetEnableListenServerSmoothing command (it was a copy/paste from another command).

  • Updated bRemoteOwned to no longer be settable in FSpawnActorParameters as only spawning a replicated Actor from the replication code should ever have been setting this to true.

  • Updated Components to no longer need to specify whether they want begin play or not.

  • Updated GetNextViewablePlayer to now check and return correct PlayerState.

Localization

  • New: Added basic support for localizing plugins.

  • Wrapped UMaterialExpression::MenuCategories in WITH_EDITORONLY_DATA to avoid gathering it for game-only localization.

Networking

  • Updated UDPPing to enable a stack size to be set for the individual threads that the ping will be performed on to compensate for third party injected code that exceeds stack space available in default 32k limit.

Online

  • New: Added AddGenericToInQueueOnlineThread(), useful running a delegate on Online thread instead of game thread.

  • New: Added a UChatroom class that does some basic chat room join/create/leave functionality using the online chat interface.

  • New: Added an ExpirationDate field to FOnlineStoreOffer. This value is initialized as FDateTime::MaxValue().

  • New: Added GetSessionIdStr to FOnlineSessionSearchResult and FOnlineSession as convenience functions.

  • New: Added OSS.VoiceLoopback <0/1> to debug chat by including local talkers into remote talkers audio queue. Additionally added "ONLINE VOICE DUMP" exec command to print out known state of voice interface for troubleshooting.

  • Removed spurious log message during voice initialization as it is covered by other logging.

  • Added proper GetResolvedConnectString functions for PS4/Live.

  • UPartyGameState::ResetLocalPlayerState() iterates over local players rather than game state player array for the very rare cases where AGameState is null.

Physics

  • New: Kinematic actors now excluded from active transforms generation. This saves time in fetchResults.

  • New: PhysicsConstraintComponent now exported and can be subclassed outside Engine.

  • New: Sweeps can now take a rotation parameter that will enable the shapes used for the sweep to have their orientation changed.

  • Bugfix: PhysX no longer returns NaN from some penetration tests.

  • Bugfix: Fixed crash from user doing unsafe things during fetchResults by moving OnConstraintBreak delegate so that it fires outside of fetchResults.

  • Implemented copy and assignment operator for convexElem struct and aggregate geometry to avoid shallow copy of raw pointers.

  • Moved skeletal mesh component physics updating into EndPhysics so that other components can use it safely in PostPhysics.

Platforms

  • New: Added support for delay load DLLs for Xbox One.

  • New: libcurl 7_48_0 - headers and lib updates

  • New: libwebsockets 1.7.4 - headers and lib updates

  • New: openssl 1_0_2h - headers and lib updates

  • New: webRTC rev.12643 - headers and lib updates

  • New: zlib 1.2.8 - headers and lib updates

  • Bugfix: Fixed a parameter order issue that could cause incorrect compression settings to be used.

  • Bugfix: Fixed a threading issue with the virtual keyboard implementation that could cause the use of protected Slate functions from a non-game thread.

  • Bugfix: Fixed an issue where stats were using unsupported 64 bit atomics on Windows XP.

  • Bugfix: Fixed an issue where the wrong xdk.h header could be included by ShaderCompileWorker if a Tools SDK with a different version than the target XDK was installed.

  • Bugfix: Fixed an issue where Windows XP would not build if the Windows 10 SDK was installed.

  • Bugfix: Fixed an issue where Xbox One was warning about PDB files missing that are not meant to be present.

  • Bugfix: Fixed incompatible VR code being built for Windows XP.

  • Converted the PS4MallocCrash class into a generic one.

  • Split PLATFORM_HAS_BSD_SOCKET_FEATURE_GETADDRINFO off from PLATFORM_HAS_BSD_SOCKET_FEATURE_GETHOSTNAME.

iOS
  • New: Added PRAGMA_DISABLE_OPTIMIZATION_ACTUAL and PRAGMA_ENABLE_OPTIMIZATION_ACTUAL defines.

Mac
  • New: Changed the code responsible for generating RPATH entries to enable third party dylibs on Mac to be loaded from plugin subfolders.

  • New: Implemented IsGamepadAttached() function.

  • Bugfix: Fixed indexing of iOS and tvOS-specific files in Xcode project.

  • Changed FString(const NSString* In) constructor to use CFStringGetBytes instead of [NSString cStringUsingEncoding]. It's faster and solves the problem with the previous implementation's incorrect assumption that UTF32 string returned from cStringUsingEncoding would be zero-terminated.

Playstation 4
  • New: Added support for displaying one and two button message dialogs on Playstation 4.

  • New: Refactored symbol uploading in Unreal Automation Tool (UAT). The new system supports both Windows and Playstation, and handles the submission of build symbols to a symbol server as part of a UAT build script.

  • New: The "Play Together" feature is now implemented on PS4! You can override OnPlayTogetherEventReceived on UGameInstance to handle the event. Check out ShooterGame for an example implementation.

  • New: Upgraded to PlayStation 4 SDK version 4.008.061.

  • Bugfix: Fixed a bug introduced by trying to get the taskgraph broadcast to work on PC.

  • Changed the Playstation 4 exit behavior to avoid calling abort() when shutting down cleanly.

  • Updated GetBackMemoryPoolSize to now correctly return an integer.

  • Moved the Playstation 4 crash dump user callback registration to a much earlier point in engine initialization, to catch early crashes in engine preinit.

Xbox One
  • New: Added support for staging and loading DLLs on Xbox One.

  • Bugfix: Fixed a crash bug when using "recompileshaders changed" on Xbox One, with a cook-on-the-fly server.

  • Bugfix: Fixed an issue that could cause a memory overwrite when using compute fences.

  • Bugfix: Fixed a compile warning when the current XDK is built using the RTM version of Visual Studio 2015.

    • Note: Only Visual Studio Update 3 is officially supported in this release.

  • Bugfix: Fixed the incorrect DirectX header being included for the Xbox One target platform.

HTML5
  • Bugfix: Fixed a crash in WebSocketNetDriver. A chunk of code was missing that calls PacketHandler's "packet modifiers."

  • Updated HTML5 plugin OnRawReceive overflow to check for minimum expected size upon data received from network.

Windows
  • Bugfix: Fixed a crash bug during adapter selection, in the D3D11 RHI.

Programming

  • New: Upgraded the Perforce C++ API libraries to version 2015.2.

    • This version adds official support for Visual Studio 2015 from Perforce.

    • This also fixes an issue where the debug version of the Perforce C++ API libraries was not built with the correct debug settings.

  • New: Added list of Dependant modules to warning about code that fails our EULA check.

  • Bugfix: Fixed a typo in a define that could cause Visual Studio 2015 to crash.

  • Bugfix: Fixed Clean process during a Hot Reload.

  • Bugfix: Fixed issue where project-specific modules could be considered out of date, when building multiple targets through Visual Studio at once. Unique build id strings in .modules files are now shared until an existing file is modified.

  • Bugfix: Implemented various fixes for building with -nosharedPCH.

  • Bugfix: Implemented various fixes to enable the Editor to be compiled in Monolithic mode.

Rendering

  • New: Added delegates called after resolving scene color (e.g. to do custom post-processing).

  • New: Added direct support for the creation and binding of Pipeline State Objects at the RHI level. This is the first step on the road to moving PSO handling to the high level rendering code to have a unified solution for DX12, Vulkan, and Metal.

  • New: Updated DrawDebug functions to now compile out in Shipping and Test builds.

    • If you wish to generate compile errors for trying to call them at all, you can define SHIPPING_DRAW_DEBUG_ERROR=1

  • New: Exposed GPU revision ID as GRHIDeviceRevision and added it to the FPS chart analytics (gathered on D3D11 and D3D12 only).

  • New: Added the first implementation of the new RHI functions for Pipeline State Objects on DX12.

  • New: Refactored the GL shader compiler to enable GLSL variant platforms to modify behavior without a lot of #if checks everywhere in the GL code.

    • Added ability in the cross compiler to convert the global uniform arrays into named uniform buffer objects.

    • Added ability for GL shader compiler to return the original resources names ("VertColor" instead of "u_v[3]" or whatever) to the shader compiler shader parameter metadata. This does NOT change the generated GLSL code.

  • Bugfix: Fixed async compute parameter problems on PS4 by adding SetShaderValue() specialization for bools on AsyncCompute commandlists.

  • Bugfix: Fixed a D3D error with mismatched vertex/pixel shader registers for SV_POSITION input.

  • Bugfix: Fixed an ensure fail when initializing point light shadow maps and simplified the logic for cubemap render target resolution parameters.

  • Bugfix: Fixed a race condition where debug drawing code was trying to read data off the SceneProxy from the Gamethread.

  • Exposed full USceneCaptureComponent classes to plugins instead of select methods.

Materials
  • New: Refactored material properties during graph translation.

    • Fixed material properties are being phased out in favor of better encapsulated and more extensible attribute lists.

    • This is the first in a series of changes moving towards per-project attribute controls and improved high-level usability.

UI

Slate
  • Bugfix: Fixed SWrapBox InnerSlotPadding.Y not applying between the first and second lines.

VR

  • New: GetNumOfTrackingSensors and GetTrackingSensorProperties are now supported by SteamVR as well as Oculus Rift.

  • Bugfix: Fixed saving of a few VR related config flags. They were being saved under the wrong name, preventing them from being read in again.

  • Bugfix: Fixed the tracking camera orientation returned from GetTrackingSensorProperties on the Oculus Rift to now point in the correct direction. Previously it was pointing towards the back of the camera instead of its facing direction.

Other

  • New: Added ability for custom implementations of UGameplayModMagnitudeCalculation to specify they have dependencies external from the ability system that may invalidate their calculated magnitudes. Dependencies are specified by multicast delegate that is expected to fire when the magnitude needs to be updated.

    • Also added advanced variant of the implementation enabling clients to also trigger the dependency invalidation and update themselves appropriately. Designed to only be used for extreme cases (such as games relying heavily on network dormancy) and only on attributes that are not gameplay-impactful (and therefore safe for the client to locally compute).

  • New: Added new API function for DrawDebugSolidBox, which takes an FBox instead of a Center and Extent. It also enables specifying a transform as well (but defaults to using the identity transform for convenience).

  • New: Added option to disable uploads to Crash Report Receivers while they continue to answer pings from clients.

  • New: Crash Report Process now has option to output crash files to Amazon S3.

  • New: Crash Report Process now has optional, dedicated PS4 crashes queue.

  • New: Crash Report Process performance improvements.

    • Added -ForceUsePDBCache option to MinidumpDiagnostics to early abort runs that have no valid PDB cache entry. Early out for slowest reports.

    • Changed MinidumpDiagnostics logging locations to avoid speed cost of logging to a folder with thousands of files.

    • Improved CRP shutdown speed when updating.

  • New: Crash Reporter backend performance improvements.

    • Crash Report Process can discard crashes when crash queues become too long.

    • Crash Report Process can run multiple instances of MinidumpDiagnostics to speed up callstack generation.

    • MinidumpDiagnostics can place a system-wide lock on resources (Perforce workspace and the PDB cache) to enable multiple instances without multiplying storage requirements.

  • New: CrashReportProcess logging and Slack reporting improvements to monitor disk space.

  • New: CrashReportProcess passes new BuildVersion string to MinidumpDiagnostics for symbol lookup.

  • New: Introduced the concept of "evaluation channels" to non-instant gameplay effects within the ability system! Evaluation channels enable game-specific control over the order in which modifiers are evaluated in attribute calculations.

    • A game may specify how many channels it would like to use, as well as what they are named, and then modifiers can specify which channel they work on. The channels are evaluated in order, with the numerical output of the first channel serving as the input to the second channel, and so on.

    • Example: Imagine a sample attribute with a base value of 100. Now apply a multiplicative mod with magnitude 1.1 in channel 0 and a multiplicative mod with magnitude 1.1 in channel 1. The result will evaluate as ((100 1.1) 1.1) instead of (100 * 1.2).

    • To use channels in a game, two settings within the INI section for AbilitySystemGlobals must be configured. First, bAllowGameplayModEvaluationChannels must be set to true, and second, the channels that should be used (and their names) must be specified in GameplayModEvaluationChannelAliases. Additionally, a game can optionally specify a default channel to use via DefaultGameplayModEvaluationChannel.

    • In addition, added various new channel-related functionality to the ability classes' API, such as the ability to base the magnitude of a modifier off of an attribute only evaluated up to a certain channel.

  • New: Large Crash Report Process update.

    • Removed legacy queues for deprecated Crash Report Receivers.

    • Removed duplication tracking needed when using Crash Report Receivers as this was slow and didn't scale.

  • Bugfix: Fixed a header issue that was including 64k of test data into shipping builds, it is now stripped out appropriately.

  • Bugfix: Fixed issue wherein gameplay effects with non-snapshotted, attribute-based modifiers could potentially not replicate to clients correctly, resulting in incorrect values on clients.

  • Bugfix: Fixed problem where MinidumpDiagnostics used on CR backend would strip unnecessary lines from callstacks.

Upgrade Notes

C++ API Changes

  • New: Made the "RemoveAt" and "RemoveAtSwap" functions in TArray trigger a compile error when a boolean argument is passed as the count.

  • New: Renamed the Strfind function in TCString to Strifind, as it is case-insensitive.

    • Added the Strfind function to TCString, which is actually case-sensitive.

  • New: The default allocator for cooked Windows games is now BinnedMalloc2 to match other platforms. The argument "-binnedmalloc" will switch back to the older allocator.

  • New: Component Activate and Deactivate events now supply the component being affected as an argument. Any C++ functions bound to Component Activate and Deactivate events will need to add a component argument to the signature.

  • New: libwebsockets 1.7.4 - headers and lib updates. The libwebsockets API has changed.

  • New: Skip cooking editor content now defaults to true in project settings.

    • If your project uses content in "Engine\Editor*" you may need to disable the "Skip cooking editor content" project setting.

  • New: Refactored the View Matrices struct.

    • The members of the View Matrices struct have become private, there are now appropriate Getters for the values. Heavy cost functions have been renamed to Compute and functions that mutate the struct have been renamed to Hack

  • New: Split "RHIClear" into "RHIClearDepthStencilTexture," and "RHIClearColorTexture."

    • Anyone using the Clear function in "RHICmdList" will now need to use the appropriate version, passing in the current render target(s).

  • New: Moved the "Export/Import Text Item" functions from "Struct Property" to "Export/Import Text" functions in "Script Struct", and added a parameter to say whether to call native callbacks. This enables calling the standard "Import Text" from a native "Import Text Item" followed by post processing.

  • New: Refactored the "Add Item Data" function in "Env Query Instance" to get rid of the second template parameter and make it more type-safe.

  • New: Added "Ge ResourceSizeEx" and "GetResourceSizeBytes," and deprecated "GetResourceSize."

    • "Get ResourceSizeEx" populates a struct which reports not only how much memory is allocated, but also which arenas the memory was allocated from.

    • "Get ResourceSizeBytes" just wraps a call to "GetResourceSizeEx" and returns the total size from all arenas (this has the same behavior as the now deprecated "GetResourceSize").

    • Classes that used to override "GetResourceSize" should instead override "GetResourceSizeEx" and report their allocations as appropriate.

  • New: Deprecated the "Get Bone Tree" function in the Skeleton class and removed references in engine.

  • The "Clear Pause" function in the "GameMode" class now returns a boolean. Any virtual overrides will need to have their signature changed and return the appropriate result.

  • Made it a compile error to copy the "AIMessageObserver" class, as it was not designed to be copied. You should change the logic of your code to avoid copies of this type.

  • Removed Publish Dir property from Installed Engine Build script as it is no longer used.

  • Removed obsolete array slack tracking code.

  • Removed unused "ToBuildInfoString" function declaration.

  • Added the "final" specifier to the UWorld class. UWorld is now non-inheritable.

  • Removed some obsolete code and state from the "ScriptStruct" class.

    • The "InheritedCppStructOps" function has been removed. Any calls to it should be replaced with "false."

  • Since the HMD module names used when sorting by priority are now also used by the hmd=<name> command line option, the "GetModulePriorityKeyName" function in the "HeadMountedDisplayModule" class has now been renamed to "Get Module Key Name".

  • Removed the "UnregisterDebugDrawDelegate," "RegisterDebugDrawDelegate" and "DrawDebugLabels" functions from the "DebugRenderSceneProxy" class and moved them into a new struct called "Debug Draw Delegate Helper."

  • Direct access to the Static Mesh property in the Static Mesh Component class has been deprecated. Please use "Get Static Mesh" and "Set Static Mesh" accessors.

  • The version of the Create Component function in the Audio Device class that took a long list of arguments has been deprecated. Use the version that takes a parameter struct instead.

  • In order to support asymmetric POVs, such as the Vive , the number of "Get Tracking Sensor Properties" has been expanded to return four instead of two POV values. The now deprecated "Get Positional Tracking Camera Properties" is still available, but only returns horizontal and vertical POVs and only supports a single tracking device.

    • If you were previously using the data returned from "Get Tracking Sensor Properties" (or the now deprecated "Get Positional Tracking Camera Properties") on Oculus Rift, you may have to unflip any corrections you were doing on the orientation. This will also make your code compatible with other HMD plugins that support returning information about tracking devices.

  • Localization API changes for per-identity exporting:

    • Moved "TextLocalizationResourceGenerator" from Core to Internationalization.

    • Removed "IJsonInternationalizationManifestSerializer" and "IJsonInternationalizationArchiveSerializer."

    • JsonInternationalizationManifestSerializer and FJsonInternationalizationArchiveSerializer now use static functions (due to no longer inheriting or requiring polymorphism).

    • Removed the "Load From Manifest And Archives" function from "Text Localization Manager" (this is now handled by the "Generate And Update Live Entries From Config" function in "Text Localization Resource Generator").

    • Removed the RepairLocalizationData commandlet (it was for fixing data pre-dating the 4.0 release).

    • Removed the "FindEntryBySource" function from "InternationalizationArchive" as it is no-longer safe to use (use the "FindEntryByKey" function instead).

  • Refactored single node animation player APIs.

    • Animation player APIs are not safe to be used during construction script because they're not being serialized, so marked not safe for construction script.

    • Exposed override function that can be used in editor.

  • Replaced some hacky post-reflection-capture functions with "RHISubmitCommandsAndFlushGPU".

  • Made "FindShaderResourceById" and "Find Shader By Id" return a raw pointer instead of a TRefCountPtr to prevent creating temporary TRefCountPtrs. It is no longer necessary to use TRefCountPtrs as shader serialization has changed and shaders are no longer registered on the async loading thread.

  • Updated to Playstation 4 4.008.061

Core

  • Any projects that make use of -log or -abslog to specify log file names must make sure they are only using .txt or .log extensions.

  • FString's "Mid" no longer accepts negative counts as the resulting behavior was surprising. Please replace any usage with the desired behavior.

  • TArray "RemoveAt" and "RemoveAtSwap" no longer accept a boolean argument as a count, as it is likely this is intended to be the flag for "Allow Shrinking".

    • The argument should be cast to a non-boolean type if this was intentional or the code should be fixed if it is not.

  • TCString's "Strfind" is now case-sensitive. "Strifind" should be used instead to get case-insensitive behavior.

  • TEnumAsByte is no longer used for generated code involving enum classes.

    • If you get errors involving TEnumAsByte with your UENUM enum class, please provide a uint8 base to your type and remove the TEnumAsByte usage.

Gameplay Framework

  • Check the Game Mode Base notes and documentation to see if you should switch your existing GameMode to inherit from the new minimal Game Mode Base class.

    • Game Mode Base's "Start New Player" has been deprecated, and split into "Initialize HUD For Player" and "Handle Starting New Player" which can be overridden in Blueprints.

    • Several Login functions on Game Mode Base that take TSharedPtr are now deprecated correctly, they stopped working in 4.13, but were not deprecated

    • GameState's "Should Show Gore" and related matinee functions have been deprecated.

  • DumpFPSChartAnalytics has been removed.

    • Games that used it should switch to creating their own instance of FPerformanceTrackingChart and call DumpChartToAnalyticsParams on it directly.

  • HTML output for stopfpschart is now generated to a single file rather than two duplicate files, which now use both map name and capture time as part of the file name.

  • In general, games should have no reason to programmatically call GEngine->StartFPSChart anymore, instead creating their own instance (this prevents conflicts when using the engine console commands).

  • Previously the delta time value of a Tick Interval tick function was the same as if the function had no tick interval.

    • This means tick functions that were relying on getting just the frame time need to get the delta time from the world rather than using the value passed into the Tick function.

  • Refactored FPS chart creation to make it modular so many performance data consumers can be active at once, enabling greater flexibility and decoupling game analytics from FPS chart exec commands

    • DumpFPSChartAnalytics has been removed, games that used it should switch to creating their own instance of FPerformanceTrackingChart and call DumpChartToAnalyticsParams on it directly.

    • In general games should have no reason to programmatically call GEngine->StartFPSChart anymore, instead creating their own instance (this prevents conflicts when using the engine console commands).

    • HTML output for stopfpschart is now generated to a single file rather than two duplicate files (using both map name and capture time as part of the file name).

    • Removed PauseFPSChart, IsFPSChartActive, and GetFPSChartBoundByFrameCounts to reflect that the GEngine instances aren't meant for external use (Start/Stop are left public for automated testing that wants to use them to do logging, but may also be moved private in the future).

  • Removed PauseFPSChart, IsFPSChartActive, and GetFPSChartBoundByFrameCounts to reflect that the GEngine instances aren't meant for external use (Start/Stop are left public for automated testing that wants to use them to do logging, but may also be moved private in the future).

  • Several Login functions on Game Mode Base that take TSharedPtr are now deprecated correctly, they stopped working in 4.13 but were not deprecated

  • The config data for picking GameMode has moved to Game Maps Settings, with the old locations deprecated. Check BaseEngine.ini for an example.

  • Please replace all uses of EWorldType::Preview with either EWorldType's "EditorPreview" or "GamePreview."

  • If you desire the checking behavior of FLocalPlayerContext, you will need to change your code to opt in to it.

  • Actor Component's flag for "Wants Begin Play" is now deprecated and unused and all components will have "BeginPlay" called on them. Simply remove any code that sets "bWantsBeginPlay."

Platforms

Playstation 4

  • PS4 Time's "System Time" now properly returns the local machine time instead of UTC.

    • Existing projects using "System Time" should investigate if this change affects their game logic.

    • To continue using UTC time call "Utc Time" instead.

  • For projects targeting PlayStation 4, the engine now requires PlayStation 4 SDK version 4.008.061.

    • Please ensure to update your installed SDK to the correct version, for the engine to compile correctly. This can be done with Sony's SDK manager utility.

Windows

  • We are sunsetting support for Windows XP, 4.14 will be the last version to officially support running on Windows XP.

Rendering

  • The PS4 defrag pool size is now controlled by a new variable "r.PS4DefragPoolSize", and is not bound anymore to "r.Streaming.PoolSize".

    • It will need to be configured to fit the project needs, in term of graphic resources.

  • Try and avoid mutating the FViewMatrices and FSceneView on your own. It is currently practiced within the engine, but we would like to get rid of that.

  • The component should own a FDebugDrawDelegateHelper (or derived object) that copies off all needed state for drawing during Draw Debug Labels (which is called from the Game Thread) during Create Scene Proxy.

    • The function to copy off the state is usually called Init Delegate Helper. Then the Helper is used to draw the debug information instead of the Scene Proxy (which is solely owned by the RenderThread at this point).

Lighting

  • Due to a bug introduced 2 years ago, all clear coat and cloth was adding lighting twice for all direct lights. This has now been corrected so relevant materials will appear half as bright when in direct light. Indirect lighting such as lightmaps and reflections is unaffected. This makes it tricky to automate material fix up. We suggest reviewing all materials and deciding on a case by case basis whether modifications are required.

  • Fixed Reflection Captures having incorrect brightness when a Stationary Skylight is present.

  • Note that Lightmap data has been moved to a separate package, named *_BuiltData. Be sure to save these and check them into source control after doing a lighting build!

Materials

  • There may be lighting differences in certain cases with materials using Subsurface Profile due to the fixes described above. For the most part, the changes should improve the rendering quality, but it may be necessary to make some minor adjustments to affected materials.

Other

  • Epic's live Crash Report Receivers no longer accept crash reports. Newer Crash Report Clients (from 4.11 onwards) upload to our Data Router endpoint.