이번 출시에는 수백에 달하는 언리얼 엔진 4 업데이트가 포함, 여기에는 GitHub 의 언리얼 엔진 개발자 커뮤니티의 제출내용 129 개도 포함됩니다! 언리얼 엔진 4.9 에 기여해 주신 모든 분들께 감사드립니다:
Andrew Zhilin (zoon), Artem V. Navrotskiy (bozaro), Artyom Sovetnikov, Ben Rog-Wilhelm(zorbathut), Ben Wiklund (bwiklund), Black Phoenix (PheonixBlack), Błażej Szczygieł (zaps166), Brad Grantham (bradgrantham), Brent Scriver (FineRedMist), Cengiz Terzibas (yaakuro), chipgw, Christian Radich (yoyohobo665), Christopher P. Yarger (cpyarger), Clay Chai (chaiyuntian), Cliff Jolly (ExpiredPopsicle), Dave Newson (dave-newson), Derek van Vliet (derekvanvliet), Dorgon Chang (dorgonman), ewirch, Felix Laurie von Massenbach (erbridge), Gabriel Hare (GabrielHare), gatools, Hakki Ozturk (ozturkhakki), HueyPark, JaredTherriault, Jason Spangler (Stormwind99), Javier Osset (Xaklse), Jeff Rous (JeffRous), JohnAlcatraz, Kitatus Studios (KitatusStudios), Konstantin Nosov (gildor2), korypostma, Lee Berger (MrCrowbar), Maarten Scholl (maartenscholl), Marat Radchenko (slonopotamus), marynate, Matthias Huerbe (MatzeOGH), Maxim (maxpestun), Michael Allar (Allar), Michael3DX, MiniTurtle, Moritz Wundke (moritz-wundke), Nako Sung (nakosung), Nari Demura (demuyan), Nastenko Michael (deM-on), Nathan Stocks (CleanCut), Niels Huylebroeck (red15), Pablo Zurita (pzurita), Patrick Flanagan (valtrain), Pedja Ljubomirovic (3dluvr), Philipp Smorygo (fsmorygo), Pierdek, Piotr Bąk (Pierdek), Quadtree, Rajko Stojadinovik (rajkosto), Rama (EverNewJoy), Rem (rveilleux), rlefebvre, Robert Khalikov (nbjk667), Russ Treadwell (trdwll), Salamanderrake, Sebastian Witkowski (witkowski-seb), Sébastien Rombauts (Srombauts), Simon Taylor (simontaylor81), Stephen Whittle (stephenwhittle), szyszq, TK-Master, Tobias Mollstam (mollstam), Tomasz Sterna (smokku), user37337, Victor Xie (FTPiano), Vladimir Ivanov (ArCorvus), Will Stahl (merlin91), yamashi, Zhi Kang Shao (zkshao)
주요 기능
모바일 디바이스 지원 강화
모바일 플랫폼에 대한 지원을 대폭 강화하려는 노력을 계속한 결과, 이번 출시에는 최첨단 모바일 타이틀 제작에 힘을 실어줄 흥미로운 렌더링 기능이 다수 포함되어 있습니다. 새로 추가된 내용에는 효율적인 다이내믹 섀도, 무버블 라이트와 데칼입니다. 앞으로도 모바일과 HTML5 의 렌더링 퀄리티에 지속적인 향상을 볼 수 있을 것입니다. 이번 출시에는 iOS 앱 내 구매 기능이 향상되었으며, 원격 푸시 알림과 CloudKit 도 지원합니다. 안드로이드의 경우, OpenGL ES 3.1, 몰립 모드, 비동기 오디오 압축해제, 향상된 종횡방향 기능이 추가되었습니다. NVIDIA AndroidWorks 역시도 포함되어 디바이스 준비 및 실행이 쉬워졌습니다. 이제 UE4 에 iOS 용 Flurry 애널리틱스 플러그인이 내장되어 배포되기도 합니다! 모바일 디바이스용 신기능 다수는 HTML5 게임에서도 사용 가능합니다.
모바일용 다이내믹 캐릭터 섀도
디렉셔널 라이트에서의 다이내믹 모듈레이트 캐릭터 섀도가 모바일 디바이스에 지원됩니다!
-
스태틱 라이팅된 씬에도 다이내믹 모듈레이트 섀도를 사용할 수 있습니다.
-
이 기능을 켜려면, 디렉셔널 라이트의 "Cast Modulated Shadows" (모듈레이트 섀도 드리우기) 옵션을 켜면 됩니다!
모바일용 다이내믹 포인트 라이트
이제 모바일 디바이스와 HTML5 에 다이내믹 포인트 라이트가 지원됩니다!
-
폭발, 발사체, 파티클 이펙트 등과 같은 단발성 비주얼 이펙트 강화에 사용할 수 있습니다.
-
조명 대상 오브젝트 하나당 다이내믹 포인트 라이트가 최대 4 개까지 지원됩니다.
-
주: 포인트 라이트에서의 다이내믹 섀도는 아직 지원되지 않습니다.
모바일에서의 데칼
이제 모바일 렌더러에서 데칼이 지원됩니다!
-
반투명, 더하기, 변조 블렌드 모드가 지원됩니다.
-
주: 현재 모바일과 웹에서는 라이팅되지 않은 데칼만 지원됩니다.
주요 VR 업데이트
Steam VR (HTC Vive)
언리얼 엔진의 SteamVR 플러그인에는 보다 사용 편의성과 퍼포먼스를 개선시켜주는 주요 픽스가 포함되어 있습니다.
SteamVR 개선 사항:
-
4.8 프리뷰 2+ 에 등장한 지연시간 문제를 고쳤습니다.
-
표준 모션 콘트롤러 추상화가 지원되어, 양쪽 바이브 콘트롤러 다 같은 플레이어로 경유시킬 수 있습니다.
-
C++ 프로젝트가 이제 플러그인 API 에 깔끔히 지원됩니다.
-
여러가지 버그 수정과 개선사항이 있었습니다.
Gear VR 이 모바일 SDK 0.6.0 으로 업데이트
이번 리비전에서는 0.5.0 출시에 있던 주요 Gear VR 렌더링 버그와 문제점 및 하드웨어 호환성 문제도 몇 가지 해결되었습니다.
VR 모션 콘트롤러 지원
이제 UE4 의 공용 추상 레이어를 통해 모션 콘트롤러가 지원됩니다!
이제 공용 인터페이스를 통해 모션 콘트롤러 디바이스가 전부 사용가능해진다는 뜻입니다. 현재 HTC Vive 콘트롤러가 지원되며, 곧 (PlayStation Move 같은 것이) 추가 지원될 계획입니다. 입력 버튼 눌림 및 트리거는 이제 모션 콘트롤러 키 추상화를 사용하여 여러 콘트롤러에서 하나의 플레이어로 경유시킬 수 있습니다. 추가적으로 캐릭터에 모션 콘트롤러를 추가하는 것만으로도 연결된 모든 것이 자동으로 콘트롤러 위치를 따르도록 업데이트시키는 모션 트래킹을 프로젝트에 추가할 수 있습니다! 모션 콘트롤러용 플러그인 전부를 새 시스템으로 옮겨, 디바이스에 상관없이 작동하는 인터페이스의 일부로 만들 것을 추천합니다.
DirectX 12 실험단계 지원
DirectX 12 가 현재 실험단계 기능으로 지원됩니다! 윈도우 10 을 사용중이라면, 명령줄에 "-DX12" 를 붙여 엔진을 실행하면 됩니다.
마이크로소프트의 개발자가 UE4 에 DirectX 12 지원을 추가하고, 저희가 협업하여 그 변경사항을 4.9 에 통합시켰습니다. 이 기능은 아직 신기능이라 실험단계로 간주됩니다. DirectX 12 는 보다 효율적인 훨씬 낮은 단계의 렌더링 API 를 제공, 여러 스레드에 걸쳐 다수의 렌더링 명령을 병렬 처리하는 것이 가능한데, 이는 콘솔 렌더링 API 에 영향을 받은 것입니다. 앞으로 계속해서 DirectX 12 지원을 강화시켜 갈 것이며, 추후 엔진 버전에서 이 새로운 API 를 보다 적극 활용할 수 있는 방안을 모색할 것입니다.
메시 디스턴스 필드를 통한 풀 씬 파티클 콜리전
디스턴스 필드 GPU 파티클 콜리전을 통해 전체 씬에 걸쳐 파티클의 보다 효율적인 충돌 처리가 가능합니다.
표면에 충돌하는 스파크 등에 사용 가능합니다.
표면에 쌓이는 눈과 같은 다양한 이펙트에도 사용 가능합니다.
-
GPU 파티클 이미터의 콜리전 모듈에 새로 생긴 'Collision Mode' 라는 프로퍼티를 통해 'Distance Field' 설정이 가능합니다.
-
파티클의 충돌을 위해서는 충돌시킬 면이 있어야 하는데, 이는 디스턴스 필드를 통해 아주 효율적으로 추상화 가능합니다. 디스턴스 필드의 단일 샘플링으로 가장 가까운 충돌 표면과의 거리가 나옵니다. 디스턴스 필드의 경향을 계산하여 그 표면의 방향과 표면 노멀을 구합니다. 이들을 합치면 충돌면이 나오는 것입니다.
-
이러한 방법을 사용한 파티클 콜리전은 기존의 씬 뎁스 콜리전보다 안정적인데, 기존의 것은 화면상에 있는 것에 대해서만 충돌하므로 수명을 짧게 할 수 밖에 없기 때문입니다. 그러나 글로벌 디스턴스 필드는 해상도가 꽤 낮아, 파티클이 얇은 오브젝트를 통과해 버리거나 날카로운 구석이 둥글어질 것입니다.
-
모든 디스턴스 필드 기능과 마찬가지로, 이는 렌더링 프로젝트 세팅에서 'Generate Mesh Distance Fields' (메시 디스턴스 필드 생성) 옵션을 켜줘야 합니다. 디스턴스 필드 파티클 콜리전은 셰이더 모델 5 기능이라, SM5 를 지원하지 않는 하드웨어에서 파티클은 원래대로 씬 뎁스 콜리전을 사용하게 됩니다.
-
디스턴스 필드를 통한 파티클 콜리전은 매우 효율적이라, 씬 뎁스를 통한 파티클 콜리전과 비용이 거의 같습니다.
계층형 LOD 빠른 미리보기 및 클러스터링
Hierarchical Level-of-Detail (HLOD, 계층형 LOD) 시스템은 4.8 에 도입된 것으로, 레벨에 있는 다수의 오브젝트가 화면상에서 작아지면 소수의 오브젝트로 압축시켜주는 기능입니다. 이를 통해 오브젝트를 가까이서 볼 때 훨씬 높은 수준의 퀄리티를 내는 데 도움을 주며, 레벨의 전반적인 퍼포먼스도 향상됩니다. HLOD 는 4.9 뿐만 아니라 앞으로도 계속 개선될 것입니다.
빠른 HLOD 미리보기
계층형 LOD 빌드의 빠른 반복처리를 위해, 이제 프리뷰 HLOD 옵션을 사용할 수 있습니다. 그러면 HLOD 메시를 직접 병합 및 생성하지 않고도 HLOD 액터 바운드와 오브젝트의 시각적 표현만으로 된 HLOD 액터가 생성됩니다. 그 바운드는 특정 계층형 LOD 레벨에 대한 LOD System 세팅 내 Draw Distance 세팅에 따라 렌더링됩니다.
위 그림은 뷰에 뜨는 첫째 둘째 계층형 LOD 레벨 클러스터 양쪽을 나타내는데, 이로써 계층형 LOD 메시를 병합하고 생성하는 데 따르는 지루한 과정을 거치지 않고도 어떻게 레벨 클러스터링이 이뤄지는지 명확히 알 수 있습니다. 미리보기 시스템은 구현 초기 단계라, 앞으로의 개선에 따라 바뀔 수 있다는 점 유념해 주시기 바랍니다.
커스텀 LOD 클러스터링 (HLOD 볼륨)
계층형 LOD 클러스터링 프로세스에 대한 보다 세밀한 제어를 위해, 이제 Hierarchical LOD Volume (계층형 LOD 볼륨)을 배치하는 것으로 그 안에 포함된 액터의 클러스터를 정의할 수 있습니다. 이 방법을 통해 레벨의 어느 영역과 오브젝트를 클러스터로 묶을 것인지 수동 정의할 수 있습니다.
"Arch Vis" (건축 시각화) 캐릭터 콘트롤
새로운 "ArchVisCharacter” 플러그인으로 건축 시각화 어플리케이션에 딱 맞는 콘트롤을 바로 제공해 주는 캐릭터 클래스가 추가됩니다. 현실 세계의 스케일대로 편안하고 자연스러운 느낌을 내기 위한 것으로, 보다 부드러운 비디오와 라이브 데모가 가능합니다.
ArchVisCharacter 를 Pawn Class 로 바로 걸어줘도 되고, 그를 기반으로 커스텀 블루프린트를 만들어 원하는 대로 조작 세팅을 해 줘도 됩니다.
위젯 깊이 순서
스크린 스페이스의 위젯 컴포넌트는 이제 관찰자와의 거리에 따라 자동 소팅, 가장 가까운 스크린 스페이스 위젯 컴포넌트가 항상 다른 컴포넌트 위에 오도록 할 수 있습니다.
이제 카메라와의 거리에 따라 모든 위젯 컴포넌트 순서를 정렬합니다. 예전에는 수동 Z 순서, 다른 말로 뷰포트에 추가된 순서에 따랐습니다.
에리어 섀도 (스테이셔너리 라이트용)
더이상 반그늘 크기가 균등한 날카로운 그림자에 제한되지 않습니다. 라이트매스 레이 트레이서는 이제 스테이셔너리 라이트에 대해 에리어 섀도를 지원합니다!
이 기능을 사용하려면 "Use Area Shadows for Stationary Light" (스테이셔너리 라이트에 대해 에리어 섀도 사용) 옵션을 켜면 됩니다. 'Light Source Angle' (라이트 소스 앵글) (, 포인트 라이트의 경우 'Source Radius' (소스 반경))으로 이 그림자의 농도를 조절합니다.
퍼포먼스 디테일:
-
라이트맵 해상도가 낮은 경우 균등 반그늘 그림자가 여전히 더 나으므로, 기본값은 그대로입니다. 예전에 균등 반그늘 크기는 애매한 프로젝트 세팅으로 조절했으나, 이제 에리어 섀도와 마찬가지로 'Light Source Angle' 프로퍼티로 조절합니다. 그림자의 농도를 두 배로 연하게 하려면 소스 앵글을 두 배로 높이면 됩니다.
-
단일 스테이셔너리 라이트 채널(, 즉 스테이셔너리 디렉셔널 라이트 하나)에만 영향받는 맵 영역에 대한 최적화도 새로 도입되었습니다. 그 섀도 맵은 4 채널 텍스처가 아닌 단일 채널 텍스처에 패킹되어, 메모리 비용이 1/4 이 됩니다.
앰비언트 오클루전 머티리얼 마스크
새로운 앰비언트 오클루전 머티리얼 마스크 기능으로 머티리얼의 라이트매스 계산 AO 에 접근할 수 있는데, 이는 순차적 텍스처링, 예를 들면 노화 효과나 특정 지역의 먼지 등 시간에 따라 누적되는 효과에 유용할 수 있습니다.
위 스크린샷은 먼지 레이어를 환경 구석 속에 자동으로 블렌딩하는 AO 마스크를 사용한 것입니다.
AO 마스크를 사용하려면, 월드 세팅 -> 라이트매스 세팅 아래 있는 'Use Ambient Occlusion' (앰비언트 오클루전 사용)과 'Generate Ambient Occlusion Material Mask' (앰비언트 오클루전 머티리얼 마스크 생성) 옵션 둘 다 켠 다음 라이팅을 빌드하면 됩니다. Max Occlusion Distance (최대 오클루전 거리)같은 다른 AO 콘트롤로 모양을 미세조정할 수 있습니다. (반드시 Direct and Indirect Occlusion Fraction (직간접 오클루전 비율)은 0 으로 설정해야, 이 AO 가 실제 레벨 라이팅에 적용되지 않습니다).
그런 다음 머티리얼에서 PrecomputedAOMask 노드로 AO 를 0-1 마스크로써 접근할 수 있습니다. 1 은 오클루전 적용 영역, 0 은 나머지입니다.
퍼포먼스 디테일:
-
PrecomputedAOMask 노드 사용은 표준 텍스처 룩업입니다. 이 기능을 켜면 라이트맵 텍셀당 0.5 바이트가 추가되는데, 기본 가용량은 라이트맵 텍셀당 약 4 바이트입니다.
-
AOMaterialMask 텍스처 메모리는 ‘ListTextures' 콘솔 명령으로 조사할 수 있습니다.
메시 디스턴스 필드 머티리얼
이 기능으로 머티리얼과 스페이스 내 특정 지점 사이에서 가장 가까운 입체면 사이의 거리를 싸게 구할 수 있습니다. 머티리얼 에디터에서 글로벌 디스턴스 필드 프로퍼티를 접근하는 노드가 두 개 새로 생겼습니다.
DistanceToNearestSurface 는 월드 스페이스 유닛으로 부호가 있는 거리를 반환합니다. 참고로 거리는 불투명 메시 표면상에서는 항상 0 근처일 것입니다. DistanceToNearestSurface 를 사용하면 이펙트가 가려지는 것을 피할 수 있습니다:
UE4 사용자 Roel Bartstra 가 이미 이를 활용한 재밌는 사례를 찾았습니다 - 하나는 소프트 바디 모양 내기, 또 하나는 표면을 자동으로 피하는 흐름 맵 만들기 입니다.
모든 디스턴스 필드 기능과 마찬가지로, 이것 역시 렌더링 프로젝트 세팅에서 'Generate Mesh Distance Fields' (메시 디스턴스 필드 생성) 옵션을 켜줘야 합니다. 디스턴스 필드 머티리얼 접근은 셰이더 모델 5 기능입니다. 셰이더 모델 4 하드웨어 대비를 위해서는 FeatureLevelSwitch 머티리얼 노드를 사용하세요.
개선된 디스턴스 필드 앰비언트 오클루전
스카이 오클루전은 하늘빛을 받은 오브젝트 주변에 멋진 연그림자를 내는데, 이는 구름낀 라이팅 상황에서 특히나 중요한 것으로, 보통 라이팅 미리계산 없이는 하이 퀄리티 렌더링에서 내기가 힘든 것이었습니다. 바로 디스턴스 필드 앰비언트 오클루전이, 하루의 시간이나 환경이 언제든 변할 수 있는 완전 동적인 게임에서 이러한 문제를 해결해줍니다. 이번 4.9 에서 이 기술의 퀄리티와 퍼포먼스 향상에 많은 노력을 기울였으며, 이제 전형적인 게임 씬의 경우 총 GPU 비용 4ms 미만으로 가능하니 중사양 PC 나 플레이스테이션 4 수준의 하드웨어에서 출시 가능하다 생각합니다!
예전 방법은 적응형 샘플링이었기에, 평평한 표면의 작업은 덜했지만, 깨끗한 환경에서 얼룩이 많이 생기기도 했습니다.
이제 적응형 샘플링을 제거할 만큼 AO 계산이 충분히 빨라졌기에, 오클루전이 훨씬 부드러워졌습니다.
주의점은 이 새로운 방법은 더욱 긴 히스토리 필터를 요하는데, 그로 인해 유령 현상이, 특히나 그림자를 드리우는 것이 움직였을 경우에 생길 수 있습니다. 앞으로 개선의 여지가 있는 부분입니다.
퍼포먼스
디스턴스 필드 AO 는 중사양 PC 와 PS4 에서 실행 가능하도록 훨씬 속도를 높였습니다. 이제 그 비용도 훨씬 안정화되어, 오브젝트 밀도에 약간 좌우될 뿐 거의 비용이 같아졌습니다.
고정 카메라에 거의 평면 표면의 경우, 이 새로운 방법은 1.6 배 빠릅니다. 폴리지가 있고 카메라가 빠르게 움직이는 경우, 새로운 방법은 5.5 배 빠릅니다. PS4 에서 전체 게임 씬에 대한 디스턴스 필드 AO 비용은 3.7ms 입니다.
테크니컬 디테일
주요 최적화는 카메라 주변을 따르는 글로벌 디스턴스 필드의 사용입니다. 일반적인 오브젝트별 디스턴스 필드 전부를 몇몇 카메라 주변 볼륨 텍스처, 소위 클립맵에 합성해 넣는 식으로 만듭니다. 새롭게 보이는 영역과 씬 변화에 영향받는 것들만 업데이트해 주면 되므로, 합성 비용은 많이 들지 않습니다.
클립맵 텍셀 크기 시각화 - 각 클립맵마다 색이 다릅니다.
글로벌 디스턴스 필드는 오브젝트 디스턴스 필드보다 해상도가 낮으므로, 모든 것에 사용할 수는 없습니다. 스카이 오클루전에 대한 콘 트레이스 계산시, 오브젝트 디스턴스 필드는 셰이딩이 이루어지는 지점 근처에서 샘플링되는 반면, 훨씬 빠른 글로벌 디스턴스 필드는 더욱 멀리서 샘플링됩니다.
글로벌 디스턴스 필드 vs 오브젝트 디스턴스 필드에 대한 레이 트레이싱 시각화입니다. 글로벌 디스턴스 필드의 표면이 얼룩덜룩해지고 얇은 오브젝트가 사라집니다.
콘텐츠 브라우저 고급 검색
이제 콘텐츠 브라우저에 고급 검색 문법이 지원됩니다. 언리얼 엔진 4 는 수백명의 개발자로 이루어진 몇몇 팀을 포함해서, 콘텐츠 라이브러리의 애셋이 수십만 단위에 이르는 대규모 프로젝트 다수에 사용되고 있습니다! 이러한 새로운 검색 기능 덕에 어떤 규모의 프로젝트에서든 콘텐츠를 쉽게 찾을 수 있습니다.
기존 단순 검색 문법을 강화시키는 방법으로 애셋 메타데이터에서의 키->값 짝을 일치시키는 것 뿐만아니라 다음과 같은 특수 키도 제공합니다:
-
Name - 애셋 이름에 대해 테스트합니다.
-
Path - 애셋 경로에 대해 테스트합니다.
-
Class (또는 Type) - 애셋 클래스에 대해 테스트합니다.
-
Collection (또는 Tag) - 애셋이 들어있는 콜렉션 이름에 대해 테스트합니다.
콜렉션 개선
이번 출시에는 콜렉션 관련 변경사항이 다수 포함되어 있어, 콜렉션 중첩, 스마트 콜렉션, 태깅 등 게임의 애셋 관리에 도움이 되는 기능이 추가되었습니다.
중첩 콜렉션
-
애셋 콜렉션은 이제 계층구조식 체계 정리가 가능합니다.
-
자손 콜렉션은 콜렉션에 주어진 맥락 메뉴에서 "New…" (추가) 옵션을 선택하여 새로 만들 수 있습니다. 다른 방법으로는, 드래그 앤 드롭을 통해 콜렉션 부모를 설정할 수 있습니다.
동적 콜렉션
-
동적 콜렉션은 고급 콘텐츠 브라우저 검색 문법의 위력을 활용하여 콘텐츠 브라우저 필터 생성 및 공유가 가능합니다.
-
콘텐츠 브라우저 텍스트 검색으로 할 수 있는 것이면 무엇이든 동적 콜렉션으로 저장하여, (정적이든 동적이든) 다른 콜렉션 레퍼런싱도 가능합니다.
-
콘텐츠 브라우저 텍스트 필터 오른쪽의 "Save" (저장) 버튼을 사용하여 동적 콜렉션을 생성할 수 있습니다.
빠른 애셋 관리
-
새로 생긴 Quick Asset Management (빠른 애셋 관리) 체크 박스를 사용하여 하나의 애셋을 다수의 콜렉션에 동시에 빠르게 추가시킬 수 있습니다.
-
이들은 콜렉션 뷰 자체 안에서, 또는 선택된 애셋의 맥락 메뉴를 통해서도 사용 가능합니다.
안정성 개선
-
콜렉션은 이제 자동으로 그 안에 들어있는 리디렉터를 따르도록 하여, 애셋을 콜렉션에서 제거 또는 이름변경했을 때 사라진 것처럼 보이도록 만드는 문제가 해결됩니다. 추가적으로 이제, 콘텐츠 브라우저를 통해 리디렉터 고치기(fix up, 궁극적으로 제거)시 이제 그 대상에 포함됩니다.
상태 보고 개선
-
각 콜렉션의 행 항목 우측편에 작은 상태 표시기가 생겼습니다. 콜렉션의 현재 상태에 따라 색이 변하는데, 각 색의 뜻은 다음과 같습니다:
-
빨강 - 콜렉션이 일종의 잘못된 상태이거나 읽기전용 상태입니다. 툴팁에서 문제 해결 방법을 확인할 수 있습니다.
-
주황 - 콜렉션이 소스 콘트롤의 최신 버전보다 뒤쳐져 있습니다.
-
파랑 - 콜렉션에 저장하지 않은 로컬 변경사항이 있습니다. 저장 또는 자동 체크인이 실패한 경우, 또는 콜렉션에 리디렉터가 따르는 경우 발생할 수 있습니다.
-
초록 - 콜렉션이 비어있지 않고 최신 상태입니다.
-
회색 - 콜렉션이 비어있고 최신 상태입니다.
-
애셋 툴팁 개선
-
주어진 오브젝트에 대한 정적 콜렉션은 이제 콘텐츠 브라우저에서 툴팁의 일부로 표시됩니다.
플러그인 생성 마법사
언리얼 엔진 4 용 C++ 플러그인을 새로 만들기가 쉬워졌습니다! 새로운 플러그인 마법사를 살펴보세요.
-
(창 메뉴에 있는) 플러그인 브라우저를 통해 새 플러그인을 만들 수 있습니다!
-
새 플러그인 이름을 짓고 몇 가지 프리셋 플러그인 유형(공백, 툴바, 독립형 창)에서 선택할 수 있을 것입니다.
-
그러면 플러그인 컴파일에 필요한 초기 파일을 전부 만들어 에디터에 로드할 것입니다.
커브 에디터 개선
커브 에디터가 여러가지로 개선되어 커브 키와 탄젠트 조작이 더욱 쉬워졌습니다.
-
가운데 마우스 버튼으로도 선택된 키프레임이나 탄젠트를 이동할 수 있습니다.
-
이제 다중 탄젠트 선택 & 조작이 지원됩니다.
-
이제 선택시 Ctrl (토글) & Shift (기존 선택에 추가)가 적용됩니다.
-
Shift 를 누르면 이동을 한 축으로 제한시킵니다.
-
내비게이션: Alt + 가운데 마우스 버튼으로 뷰 이동, Alt + 오른쪽 마우스 버튼으로 뷰 줌 레벨 조정입니다.
-
새로운 탄젠트 표시 옵션: 탄젠트 항상 표시, 선택된 점에 대한 탄젠트 표시, 탄젠트 표시 않음
-
커브에 대한 사전-사후 무한 외삽 옵션이 새로 생겼습니다.
-
키 추가 지점을 예상하기가 쉬워졌습니다.
-
편집할 커브가 하나뿐인 경우, 키는 마우스 아래에만 추가됩니다.
-
대상 커브가 여럿인 경우, 커브 클릭시 그 커브 안에 키가 추가되며, 커브 밖 클릭시 모든 커브에 키가 추가됩니다.
-
메뉴 항목의 텍스트가 변경되어 무슨 일이 벌어질지 보다 명확히 알 수 있습니다.
-
블루프린트에서 다중 반환 노드
함수는 이제 여러 개의 반환 노드를 가질 수 있습니다. 실행이 반환에 도달하자마자 함수의 실행은 중단됩니다. 블루프린트 함수에서의 이른 반환이나, 분기를 통한 다른 값 반환을 위해 사용할 수 있습니다.
블루프린트에서 커스텀 오브젝트 생성
블루프린트에서 이제, (액터/컴포넌트뿐만 아니라) 베이스 오브젝트 유형도 스폰시킬 수 있습니다. Construct Object From Class 노드는 클래스를 받아서 그 유형의 오브젝트를 새로 생성합니다. 액터가 아니라는 유형만 빼고는 Spawn Actor From Class 와 비슷합니다.
-
"Outer" 입력은 새 오브젝트의 오너 역할을 하여, 생성되는 오브젝트의 수명을 제어합니다.
-
액터 클래스의 경우, 여전히 Spawn Actor From Class 노드를 사용합니다. 그리고 위젯의 경우, Create Widget 노드를 사용합니다. 추후 버전에서 이렇게 여러가지로 나뉜 것을 합칠 수도 있습니다.
블루프린트 클래스 디폴트
블루프린트에서 이제, 새로운 Get Class Defaults 노드를 통해 클래스의 디폴트에 접근할 수 있습니다. 데이터 전용 블루프린트 작업시 인스턴스를 만들지 않고도 해당 블루프린트 값에 접근할 수 있어 유용하게 쓰일 수 있습니다.
-
출력 핀이 늘어 거추장스러워지지 않도록 하려면, 노드의 디테일을 통해 특정 디폴트를 표시/숨기면 됩니다.
레벨 블루프린트 통신
레벨 블루프린트는 이제 인터페이스를 통해 통신 가능합니다. 클래스 블루프린트와 마찬가지로 인터페이스 함수를 적용 및 구현 가능합니다. 인터페이스를 레벨 블루프린트에 추가한 이후에는, 인터페이스 메시지 노드를 통해 (스트리밍 레벨을 타겟으로 하여) 호출 가능합니다.
-
Get Streaming Level 노드를 사용하여 통신할 레벨을 구합니다.
-
Get Streaming Level 을 사용하여 특정 레벨을 타겟으로 해야 하므로, 서브 레벨에만 통합니다.
-
수학 표현식 최적화
Math 표현식 노드가 일반 노드보다 높은 퍼포먼스를 내도록 최적화시켰습니다. 이제 Math 표현식 노드는 그와 동일한 일련의 연산/함수 노드 시리즈 표현식을 사용했을 때보다 약 두 배 빠릅니다.
블루프린트 애셋 ID
블루프린트에서 요청시 바로 애셋 로드가 가능해졌습니다. 블루프린트에 새로 노출된 두 가지 데이터 유형이 있는데, "Asset ID" (애셋 ID)와 “Class Asset ID” (클래스 애셋 ID)입니다. 애셋 ID 는 로드 또는 언로드된 애셋을 나타내며, “Resolve Asset” 노드를 사용해서 오브젝트 속으로 분해해 들어갈 수 있습니다. 애셋이 로드되지 않은 경우, “Resolve Asset” 노드는 유효하지 않은 오브젝트를 반환합니다. “Load Asset” 노드를 사용해서 애셋을 로드할 수 있습니다. 비슷하게 “Class Asset ID” 는 클래스 속으로 분해해 들어갈 수 있으며, “Load Asset Class” 노드로 로드할 수 있습니다.
몽타주 엘리먼트 타이밍 인터페이스
실행시간에 애니메이션 실행시 몽타주 이벤트 발동 순서를 조절하는 데 도움이 되는 새 패널이 몽타주 에디터에 추가되었습니다.
비선형 애니메이션 블렌딩
애니메이션 포즈끼리의 전환 사이에 여러가지 다양한 블렌딩 함수가 지원됩니다!
기존에는, 선형 또는 큐브형 블렌딩만 지원되었습니다. 이제 선형, 큐브형, 헤르밋 큐브형, 사인형, 2차형, 원형, 지수형, 커스텀 등 여러가지 중에서 선택 가능합니다. 대부분의 유형에서 커브에 부드럽게 드나들도록 하는 별도의 제어가 가능합니다.
커스텀 옵션은 “커브 플로트” 애셋이 필요합니다. 만든 이후에는, 관련 노드의 디테일 패널에서 할당할 수 있습니다:
그러면 원하는 어떤 블렌딩도 지정 가능합니다. 커브의 길이는 정규화 & 스케일 하향 조절을 통해 지정된 블렌드 시간에 맞추고 0-1 범위 밖의 값은 그 안에 맞도록 제한시킵니다 (이 제한은 곧 해제될 것으로 기대되니, 이 곳을 확인해 주세요). 커스텀 커브에 시스템이 지정되지 않은 경우, 예비로 선형 블렌드가 쓰입니다.
본 주도형 애니메이션 콘트롤
하나 이상의 본 모션에 동적으로 영향을 끼치는 "Driver" 본이 생겼습니다. 장신구가 붙은 캐릭터에 좋습니다. 애니메이션 도중 지오메트리 겹침 현상을 피할 수 있습니다. 많은 수의 블렌딩이 사용될 때도 말이지요.
위 예제에서 붙은 악세사리에는 (초록색) 저작된 애니메이션이 없으며, 캐릭터 허벅지 폰의 함수로써 양축 구동중입니다. 이 부분은 모두 실행시간에 계산되므로, 애니메이션 블렌딩은 심지어 별다른 트윅 수작업 없이도 여기서 잘 마무리됩니다.
멀티플라이어로 "Driver" 값을 바로 설정하고, 완전히 새로운 범위로 리매핑하거나, 그냥 커브 애셋을 사용하여 모션을 구동시키면 됩니다. 커브 사용이 보통 가장 좋은 접근법인데, 자연스러운 반응을 정의하고 실시간 변화를 확인하며 대화식으로 점/탄젠트 조정이 가능하기 때문입니다.
본 주도형 애니메이션 콘트롤러에 대한 새로운 세팅은 이렇습니다:
애니메이션 트랜지션 룰
이번 출시에는 애니메이션 블렌딩 트리, 특히나 트랜지션 룰 작동 방식이 개선되었습니다.
애니메이션 애셋 오버라이드 처리 개선
트랜지션 룰의 Time Remaining 같은 노드는 이제 자손 애니메이션 블루프린트에서 애니메이션을 덮어쓴 데 따른 애니메이션 길이 변화에 정상 반응합니다. 즉 트랜지션 룰에 레퍼런싱된 애니메이션이 더이상 모든 자손 애니메이션 블루프린트에서 동일한 길이일 필요가 없다는 뜻입니다.
연관성이 가장 높은 애니메이션 플레이어 레퍼런싱
스테이트 머신 관리를 보다 용이하게 하기 위해, 앞으로 변화될 애니메이션을 특정해 지정하기 보다는, 항상 원본 상태에서 가중치가 가장 높은 애니메이션을 선택하는 새로운 Getter 클래스를 사용할 수 있게 되었습니다. 사용할 수 있는 노드는 다음과 같습니다:
커스텀 블렌드 그래프 개선
이제 커스텀 블렌드 그래프에 부가 정보가 노출되어 단순 일회성 이상의 커스텀 트랜지션 애니메이션에도 사용할 수 있습니다. 커스텀 블렌드 그래프에서 해당 트랜지션 노드 및 원본/대상 상태 관련 정보 제공을 위해 사용할 수 있는 노드는 다음과 같습니다:
트랜지션 룰에서와 마찬가지로 애셋 플레이어를 레퍼런싱하는 Getter 메소드를 구할 수도 있습니다.
애니메이션 커브 이밸류에이션 변화
애니메이션의 업데이트 단계에서 일어나던 애니메이션 커브 이밸류에이션(평가)이 이제 평가 단계로 이동되었습니다. 그로 인해 다음과 같은 이점이 생겼습니다.
-
가중치 혼합시에도 커브의 가중치가 제대로 평가됩니다.
-
캐시 노드
-
애디티브 노드: 애니메이션 본 트랜스폼 진행에 따라 베이스에서 현재 포즈까지 더하기식 커브 데이터의 델타를 적용합니다.
-
레이어드 노드: 어느 커브가 조인트의 어느 부분에 영향을 끼치는지 알지 못하기에 정상 작동하도록 만들기가 조금 더 까다로웠습니다. 이제는 커브 블렌딩 방식 옵션을 제공합니다.
-
Max Weight(최대 가중치): 블렌드 포즈에서의 커브 최대 가중치를 선택합니다.
-
Normalize by Weight(가중치로 정규화): 모든 커브에 대해 블렌딩된 포즈의 모든 가중치를 더한 다음 1 로 정규화시킵니다.
-
가중치로 블렌딩: 그냥 (가중치 * 커브 값) 을 더합니다.
-
-
-
병렬 평가를 사용하는 경우 커브 이밸류에이션이 멀티 스레드로 이동됩니다.
-
이를 통해 결국 본 트랜스폼에서 커브를 구동시키거나 그 반대 작업을 할 수 있는 노드를 만들 수 있습니다.
-
그러나, 아직 평가되지 않은 (틱은 하되 평가는 안된) 커브가 필요한 경우, 최신 데이터를 구할 수 없을 것입니다. 커브 데이터는 전에 노티파이로 취급되던 것과 반대로 이제는 본 트랜스폼으로 취급됩니다.
애니메이션 애셋 메타데이터 지원
이제 애니메이션 애셋에 추가시킬 수 있는 메타데이터를 지원합니다. 메타데이터는 Anim Meta Data 클래스에서 파생된 Blueprintable 클래스입니다. 이를 통해 애니메이션 애셋에 커스텀 메타데이터 추가가 가능합니다. 애님 시퀀스, 애님 몽타주, 애님 컴포짓, 블렌드 스페이스 모두 지원됩니다.
C++ 에서 GetMetaData() 메소드를 호출하거나, 애님 몽타주에서 GetSectionMetaData() 를 사용하는 것으로 애니메이션 애셋에서 해당 데이터를 질의할 수 있습니다.
사운드 퀄리티 레벨
사운드 디자이너에게 오디오 관련해서 저사양 머신/디바이스의 메모리 사용량과 (일정 수준까지) 퍼포먼스 관리를 할 수 있도록 해주는 신기능이 추가되었습니다.
사용가능한 사운드 퀄리티 레벨은 프로젝트 세팅의 오디오 섹션에서 정의합니다. 각 퀄리티 레벨은 현재 오디오 디바이스에 의해 생성된 오디오 채널 최대 수를 지정할 수 있습니다 (일부 플랫폼, 특히 안드로이드는 그 값을 여전히 낮은 수로 제한시킬 수 있습니다).
사운드 큐에서 Quality Level 사운드 노드를 배치하면 프로젝트 세팅에 정의된 각 퀄리티 레벨에 대한 입력 핀이 제공되어, 활성 퀄리티 레벨에 연결된 브랜치만 실행됩니다. 이를 통해 로드되는 변종 수를 줄이거나, 저품질 웨이브 파일을 지정하는 데 사용할 수 있습니다.
독립형 게임 플레이시, 퀄리티 레벨은 게임 유저 세팅을 통해 지정되며, 해당 퀄리티 레벨에 필요한 사운드 웨이브만 메모리에 로드됩니다. 기본값은 적합한 GameUserSettings.ini 파일을 통해 게임별 또는 플랫폼별로 설정 가능하며, 그 세팅 UI 를 통해 값 설정이 가능합니다. 현재, 퀄리티 변경시 효과 적용을 위해서는 재시작이 필요합니다.
에디터에서 플레이의 경우 레벨 에디터 플레이 세팅을 통해 사용할 퀄리티 레벨을 지정할 수 있습니다. 이 값을 변경하면 플레이 세션 활성화 도중 작동하여 새로운 사운드는 현재 퀄리티 레벨을 사용할 것입니다.
커스텀 오디오 감쇠 커브
이제 사운드 감쇠가 단순 내장 알고리즘에 국한되지 않은, 별도로 정의된 커스텀 커브에 따라서도 가능합니다.
감쇠 세팅에서 Distance Algorithm 을 "Custom" 으로 설정하면 커스텀 커브 섹션이 나타나는 것이 보입니다. 콘텐츠 브라우저에서 외부 커브 애셋을 지정해도 되고, 디테일 패널에서 직접 커스텀 커브를 정의해도 됩니다.
액터 틱 간격
이제 틱 함수가 실행되는 간격을 지정하여, 별다른 부하나 복잡한 타이머 없이도 프레임별 틱 실행에 따른 부하를 줄일 수 있게 되었습니다.
최종 사용자에게는 액터와 컴포넌트 디폴트 프로퍼티를 통해 노출되며, 프로그래머는 다른 Tick Function 프로퍼티와 비슷하게 C++ 에서 설정 가능합니다.
유의해야 할 구현 세부사항 몇 가지:
-
모든 틱 함수는 등록된 첫 프레임에 실행되고, 거기서부터 정의된 간격을 기다린 뒤 다음 틱이 일어납니다.
-
이미 틱 중인 함수의 틱 간격을 변경해도 다음 예정 틱이 바뀌지는 않습니다. 효과를 즉시 적용시키려면 먼저 틱을 끄고, 간격을 조정한 뒤, 틱을 다시 켜야합니다.
-
틱 함수는 다음 틱 스케쥴을 잡을 때 넘친 부분을 고려하여 가급적 지정된 간격에 근접해서 일어나도록 합니다. 예를 들어 함수가 1 초마다 실행되도록 지정되었는데, 지난 틱 이후 1.1 초가 지난 후 틱 함수가 실행되었다면, 다음 틱은 0.9 초 후에 일어나도록 스케쥴을 잡습니다. 하지만 프레임 도중 그 간격이 여러번 겹쳐 발생했다 하더라도 한 프레임에 틱 함수가 두 번 이상 실행되지는 않습니다.
-
틱 함수의 DeltaTime (경과 시간)은 틱 간격과 상관없이 동일하게 유지됩니다. 이 함수의 지난 번 틱 이후 걸린 시간이 아닌, 항상 해당 프레임의 경과 시간입니다.
-
액터의 커스텀 타임 딜레이는 틱 간격에 적용되지 않습니다. 틱이 발생되는 빈도는 애별 액터의 시간 딜레이와는 무관하게 일정하며, 그 시간 딜레이는 틱 함수에 전달된 경과 시간에만 적용됩니다.
액터 침범 감지
침범 감지 안정성이 높아지고 더욱 많은 상황에서 작동합니다. 침범에 대한 커스텀 옵션을 새로 추가하기도 했습니다.
액터 스폰시 Spawn Even If Colliding (충돌한다 해도 스폰) 옵션(C++ 는 bNoCollisionFail)을 확장, 스폰 지점에서 지원되는 콜리전 처리 메소드가 넷이 되었습니다:
-
그냥 거기 스폰합니다.
-
가능하면 주변 적합한 위치에 스폰하고, 아니면 그냥 거기 스폰합니다.
-
주변 적합한 위치가 있을 때만 스폰하고, 아니면 스폰하지 않습니다.
-
그냥 스폰하지 않습니다.
기존 블루프린트는 올바른 선택 사항을 자동으로 선택하도록 업데이트될 것입니다. 일부 코드는 폐기되어 수동 업데이트해 줘야 할 것입니다.
액터 클래스에 Spawn Collision Handling Method 라는 블루프린트 노출 멤버가 새로 생겨 스폰 충돌 기본 처리 방식을 조절할 수 있습니다. Spawn Actor 노드의 세팅이나 함수 호출을 덮어쓸 수 있습니다.
Movement Component 포함 액터의 경우, 업데이트된 컴포넌트는 주요 콜리전 모양이라 가정하고 유일한 침입 검사 대상 컴포넌트가 됩니다. 다른 액터의 경우, 세팅이 적합한 모든 컴포넌트를 대상으로 검사합니다. 주의할 점이라면 이로 인해 액터 업그레이드 후 스폰이 안되는 상황이 발생할 수 있는데, 그렇다면 콜리전 세팅, 처리 방법, 스폰 트랜스폼을 다시 한 번 확인하시기 바랍니다.
포스트 프로세스 블렌딩
포스트 프로세스 "블렌더블" 은 각기 다른 상태의 포스트 프로세스 이펙트를 전환시키는 데 사용되는 것인데, 이 시스템이 강화되었습니다.
이제 각 블렌더블에 대해 블렌딩 가중치 값을 설정할 수 있습니다. 이 블렌딩 가중치는 블루프린트나 C++ 코드에서 실행시간에 변경할 수 있으므로, 포스트 프로세싱 전환을 가지고 재미난 작업을 할 수 있습니다.
또한 이제 포스트 프로세스 볼륨 바로 안에서 포스트 프로세스 세팅을 "인라인" 방식으로 정의하거나, 독립형 블렌더블 애셋으로 만들어 여러 오브젝트에 공유시킬 수도 있습니다!
또 자신만의 커스텀 블렌더블 세팅 정의를 보다 쉽게 할 수 있도록 만들었습니다. 더이상 엔진의 내장 PostProcessSettings 구조체를 변경할 필요가 없으며, 그 대신 위의 Light Propagation Volume Blendable 같은 세팅으로 새 구조체를 정의할 수 있습니다.
마지막으로 블루프린트를 사용해서 실행시간에 블렌더블의 블렌딩 가중치 값을 편집하는 법을 보여주는 예제입니다:
런타임 애셋 캐시
어떤 게임에서는 게임 발매시 포함되지 않은 애셋의 로컬 사본을 저장하는 기능 지원이 필요합니다. 예를 들어 순차 생성 애셋이나 (광고 그래픽처럼) 서버에서 오는 애셋이 많은 경우입니다. 새로운 런타임 애셋 캐시는 일반 애셋 캐시 시스템으로, 실행시간 도중 환경설정 가능한 애셋 버킷으로 생성되는 데이터를 일관되게 저장하기 위해 사용할 수 있습니다.
런타임 애셋 캐시에는 다음과 같은 특징이 있습니다:
-
다수의 버킷 그 각각에는 사용자가 의도한 유형의 애셋, 예를 들변 캐릭터 이미지 캐시와 광고 이미지 캐시가 별도로 저장됩니다.
-
각 버킷마다 크기를 별도로 환경설정할 수 있습니다.
-
애셋 버전관리를 통해, 캐시를 쓸 수 없게되면 캐시 항목을 다시 만들 수 있습니다.
-
동기 & 비동기식 캐시 질의가 가능합니다.
-
캐시가 지정된 크기보다 커지면, 오래된 항목부터 지웁니다.
볼륨 데칼 (실험단계 전용)
3D 함수 필드 렌더링은 지오메트리 묘사용 폴리곤의 대안입니다. 그림자, 불리언 연산, 스무딩, 앰비언트 오클루전, 레이 트레이싱, 디포메이션과 같은 하드 렌더링 문제 해결에 적합한 것이지요. 2D 및 3D 거리 함수는 엔진 내에서 폰트, 라이트맵, 디스턴스 필드 섀도/앰비언트 오클루전 등 여러 곳에서 이미 사용중입니다. 새로운 볼륨 데칼 기능을 통해 보통은 디퍼드 패스에 사용할 수 있는 모든 정보, 이를테면 앰비언트 오클루전, 스크린 스페이스 리플렉션, 라이팅, 뎁스 오브 필드를 포함한 전부를 사용해서 거리 함수가 불투명 오브젝트를 GBuffer 속에 렌더링해 넣을수 있도록 해줍니다. 다음 그림에서 그릇이 볼륨 데칼입니다.
오브젝트 생성 방식은 (아래 그림의 왼쪽에서 오른쪽으로)
-
데칼 중심까지의 거리와 텍스처 투명으로 구체를 정의합니다.
-
또다른 구체를 정의하고 그 둘의 최대값을 취해서 (불리언 교차) 구체를 정의합니다.
-
구체를 움직여 모양을 조절합니다.
-
구체를 또하나 추가하고 머티리얼을 변경합니다 (불리언 빼기).
-
모양을 다시 정의합니다.
구체에 대한 거리 함수 정의 방식은 이렇습니다:
이 기능은 마무리되지 않은 상태입니다. 그림자 드리우기, 노멀 맵 지원, 간접광이 빠진 상태이며, 퍼포먼스와 퀄리티 최적화 역시 이루어지지 않았습니다. 추가로 이 기능은 항상 GPU 비용이 많이 발생할 것입니다 (거리 함수는 각 픽셀당 아마도 수백번의 평가가 필요합니다). 앞으로 머티리얼 함수, 그림자 드리우기, 문서 등을 추가해서 다듬을 것이지만, 실시간에 적합할 만큼 빨라질 일은 절대 없을 것입니다.
UE4 문서 태그, 버전, 스킬 레벨
-
문서 페이지에 이제 스킬 레벨, 엔진 버전, 카테고리 태그가 페이지 상하단에 표시되어 태그가 같은 다른 페이지를 쉽게 찾을 수 있습니다.
-
이제 사이트맵 필터링이 펼쳐지는 트리 뷰 형태로 되어, 스킬 레벨 및/또는 엔진 버전별로 표시됩니다. 필터가 적용되면, 트리가 펼쳐져 일치되는 항목이 표시되면서 일치되지 않는 항목은 회색으로 탈색되어 보입니다.
-
페이지의 스킬 레벨, 엔진 버전, 태그 역시 사이트맵으로 링크되어 필터가 자동으로 적용됩니다. 태그를 클릭하면 그 태그가 붙어있는 페이지만 표시하도록 사이트맵에 필터를 적용합니다.
-
튜토리얼 (비법, 퀵스타트 등) 링크에는 그 튜토리얼의 스킬 레벨과 엔진 버전이 표시됩니다:
추가되고 업데이트된 UE4 문서
-
게임내 애널리틱스 플러그인 제공사 페이지
비동기 실시간 오디오 압축해제
실시간 ogg-vorbis 기반 오디오 압축해제를 지원하는 플랫폼(PC, 엑스박스 원, 맥, 안드로이드)는 이제 가능하면 비동기 압축해제를 통해 메인 게임 스레드 작업을 중단시키지 않습니다.
피처 팩 & 템플릿용 공유 리소스
이제 템플릿과 피처 팩에 공유 리소스가 지원됩니다. 템플릿과 피처 팩 모두 포함시킬 다른 피처 팩을 지정하는 방식으로 가능해 졌습니다. 즉 모든 템플릿에 공통인 애셋 다수가 딱 하나만 존재한다는 뜻입니다. 더이상 블루프린트와 C++ 버전 템플릿에 공유되는 애셋이 중복되지도 않는다는 뜻입니다.
다중 플랫폼이 지원되므로, 모바일 & 데스크톱 타겟용 템플릿 또는 피처팩에 다양한 애셋이 존재할 수 있습니다. 한 플랫폼에는 디테일을 낮추고 다른 데는 정상으로 놔두는 등으로 유용하게 쓰입니다.
HTML5 개선 (쉬운 셋업, 아마존 S3 지원, 네트워킹)
더이상 HTML5 개발 및 웹 브라우저용 게임 패키징 시작을 위한 써드 파티 SDK 설치를 할 필요가 없습니다! 패키징은 그냥 파일 -> 패키지 메뉴에서 HTML5 를 선택하면 됩니다.
그 외 개선사항:
-
압축 자바스크립트 방출로 빌드 크기가 대폭 줄어듭니다.
-
패키징 도중 로컬 테스트용 압축 파일 서빙 처리를 위해서 게임에 작은 웹 서버가 포함됩니다.
-
이제 HTML5 네트워킹이 지원됩니다! 이제 HTML5 클라이언트를 지원하는 데디케이티드 서버 생성에 사용할 수 있는 언리얼 빌드 툴 환경설정 변수가 생겼습니다.
-
이제 아마존 S3 패키징에 업로드가 지원됩니다. AWS 용 인증서를 채우고나면, 빌드가 S3 에 업로드되고, 게임이 S3 에서 브라우저에 바로 서빙됩니다.
Release Notes
AI
-
New: A dedicated AI asset category has been created and is available in Content Browser's context menu.
-
New: Added log errors when EQS (Environmental Querying System) queries take longer than 0.25 seconds (cumulatively). When the query completes we also log how long each test took to perform.
-
New: Added support for trace based projection in EQS generators.
-
New: Added Z offset for circle center(s) in the On Circle EQS generator that uses data bindings.
-
New: AI Controller's Path Following Component has been exposed to blueprint and can be tweaked via blueprint-created classes' default properties.
-
New: Blackboard assets have been made blueprint types to allow blueprint users to interact with them.
-
New: Exposed filtering and scoring options for multiple contexts of EQS query.
-
Fixed "Skip Item" in EQS not always showing results in debug view.
-
Fixed "Skip Item" acting like "Pass" and in some cases like "Fail" when handling filtering.
-
Fixed crash when unregistering the Pawn Actions Component when the Controlled Pawn is pending kill pending.
-
Fixed AI stimuli never expiring which resulted in AI never forgetting perceived actors.
-
Fixed crash in pathfinding batch EQS test.
-
Fixed crash on running a EQS query without valid options.
-
Fixed EQS pathing grid generator getting stuck on points inside geometry.
-
Fixed restoring EQS query asset with multiple options.
-
Fixed crash when doing a pathfinding batch EQS Query Test when test items are not considered valid.
-
Fixed "On Circle" EQS generator crashing if its query owner is not an actor.
-
Blueprint compilation and loading are much more efficient.
Behavior Tree
-
New: Added dynamic subtree injection support for behavior trees.
-
New: Added new restart mode for behavior tree tasks, they can now ignore restart which leads back into running the same task again. Use case depends on task type and its parameters: some of them work better with restarting every time (e.g. movement), some should finish their action (e.g. animation).
-
Blueprint based behavior tree tasks will now ignore Finish Execute and Finish Abort calls depending on state of task, fixed latent blueprint actions not being cleared when task finishes execution.
-
Fixed behavior tree decorators losing blackboard observers.
-
Fixed behavior tree restarts from blackboard decorator in On Value Change mode.
-
Fixed Behavior Tree tag cooldown decorator testing the current value of the tag cooldown end time against its duration. (Duration in the Tag Cooldown decorator should only be applied when we deactivate, not used for comparison.)
-
Fixed behavior tree's search update for branch with loop decorator.
-
Fixed bug with aux nodes losing all changes in memory block during discarded search.
-
Fixed crash on pasting composite decorator node in behavior tree editor.
-
Fixed drag & drop operation for composite decorators.
-
Fixed duplicated subnodes in behavior tree editor.
-
Fixed order of behavior tree nodes when creating a new node from existing pin.
-
Fixed rare crash on aborting behavior tree task connected to parallel node.
-
Fixed Rotate to Face task getting stuck on receiving abort event.
-
Replaced Has Reached Goal decorator with Is At Location.
Debugging Tools
-
New: Added "-LogNavOctree" command line parameter, to log Nav Octree debug geometry to visual logger, on stop logging.
-
New: Added new shapes to log with Visual Logger: mesh, convex polygon, navarea / pulled convex and Nav Octree dump from given bounding box.
-
New: Minor improvements to gameplay debugger.
-
Added multiple logs selection to Visual Logger tool, to analyze all selected objects simultaneously.
-
Added debug camera to gameplay debugger, to have a way to fly around (Tab key to switch between cameras).
-
Added alternate keyboard bindings to gameplay debugger, for keyboards without numpad (can be enabled in gameplay debugger settings). It uses Alt + [regular number] shortcuts.
-
-
Added more data about EQS queries to vlogs.
-
EQS score for the winning item will no longer be set to 1 when picking a single item. That way, scores can be compared appropriately since none of the other scores have been normalized. They will all be on the same relative scale.
-
Fixes Gameplay Debugger's client server issues. Everything should replicate to clients correctly again.
-
Tweaked description width for EQS debug display from 200 to 312 to allow for slightly longer descriptions without overlapping the next column. Item Description Width, Item Score Width, and Test Score Width can now be tweaked in code (they are now variables rather than in-line values).
Navigation
-
New: Added a dedicated blueprint-bindable event to AI Perception Component that's being triggered for every newly sensed stimulus.
-
New: Added bUseNavAgentGoalLocation to pathfinding Reached tests for moving to Actors. (Sometimes it is useful to move towards / test against the actual actor's location, rather than its location projected into the navigation system.)
-
New: Added custom navigation export for skeletal meshes.
-
New: Added navigation agent selectors to navmesh bounds volume, defining zones per agent.
-
New: Added navigation updates for destructible mesh.
-
New: Added new option to navigation link, which allows connecting to cheapest area in snap radius.
-
A bug in editor-time navigation system, resulting in removing all the saved data in static navmesh on map load, has been fixed.
-
Abstract navigation data actor will no longer be visible in scene outliner.
-
Added timeout for path following's waiting state.
-
Fixed a bug in navigation system preventing collision-less shape components from affecting navmesh generation by other means (like nav areas).
-
Fixed bounds of "standalone" nav relevant components (without navigation parent), which caused them to be ignored during navmesh generation.
-
Fixed crash in crowd movement when AI is using direct path to location.
-
Fixed crowd simulation updates for moving without pathfinding.
-
Fixed Floating Pawn Movement component's issue resulting in teleporting AI following a path, ignoring Max Speed limits.
-
Fixed geometry projection for navmesh walking mode using cached location even if pawn moved far away on Z axis.
-
Fixed handling of custom navigation links loaded with map before navigation system is created.
-
Fixed issue with navigation system being stuck on Initial Lock in editor mode.
-
Fixed missing abstract navigation data (handling direct paths) in game.
-
Fixed missing navigation links with big snap height.
-
Fixed navigable collision export from convex elements of Body Setup not using element's local transform.
-
Fixed navigation relevancy and update order of custom navigation links in Nav Link Proxy actor.
-
Fixed Navigation System not handling properly deep Actor hierarchies. Now you can have Actors attached to Actors attached to Actors and all of them will affect navmesh generation just as expected!
-
Fixed updating Nav Relevant Components attached to an actor without collision component.
-
Navmesh's rendering component has been made transient and we made sure any navigation rendering component saved with old maps won't break anything.
-
Updated deprecation messages for Navigation System's "get random point" functions family to be more precise.
Animation
-
New: "Observe Bone" nodes for debugging animations.
-
These let you print out the current position of a bone (at that particular point in the animation tree) and have a couple of options for coordinate space and whether to display relative to the reference pose.
-
The observe bone nodes are meant for debugging. They don't cost much but are not currently compiled out of a shipping build, so you should probably remove them when you are done working with the graph.
-
New: Added turntable feature for Persona.
-
New: Added a "Remove this LOD" button to each LOD (after 0) in Persona's mesh mode.
-
New: Added an icon overlay to the 3D thumbnail for Animation Blueprint assets in the Content Browser.
-
New: Added 'Blend Out Trigger Time' to AnimMontages.
-
Time from Sequence End to trigger blend out.
-
<0
means using Blend Out Time, so Blend Out finishes as Montage ends. -
>=0
means using "Sequence End - Blend Out Trigger Time" to trigger blend out. -
Also added as an optional parameter to Play Slot Animation As Dynamic Montage.
-
-
New: Added compilation warnings to the Modify Bone skeletal control when it will do nothing (e.g., when all components are set to be ignored or no bone is selected).
-
New: Added event for Post Evaluation.
-
This gets triggered after bone evaluation is done.
-
If your mesh component has physics, it will trigger after bone is blended back to it.
-
-
New: Optimized animation evaluation by looping over the bones directly instead of indirectly.
-
New: Added flag to notifies to stop them triggering on dedicated servers.
-
New: Added friendly display names to Bone Modification Mode enumerants.
-
New: Added new node "Bind Cloth To Master Pose Component" that makes cloth on a slaved skeletal mesh component to reuse the simulation data from the master component, rather than processing the cloth separately.
-
New: Added new node "Is Section Using Cloth" to query whether a skeletal mesh section has cloth data.
-
New: Added reference pose toggle toolbar.
-
Also now you can edit during reference pose.
-
-
New: Added sorting of Smart Name curves.
-
New: Added support for Montage-to-Montage synchronization.
-
A montage can only have a single leader. A leader can have multiple followers.
-
Synchronization is performed once before any of the leader or followers are updated in a given frame.
-
Essentially, synchronization is performed one frame late, so tick order between montages is not an issue.
-
-
New: Allowed skeletal controls to specify the coordinate space that they would prefer the gizmo to be displayed in by implementing GetWidgetCoordinateSystem.
-
New: First pass of the dependency preloading system.
-
Uses asset information created during cooking to determine the dependencies for all packages and make them load BEFORE the requested package. When using pak files, the pak file will be ordered to match this load order, giving much reduced seek times.
-
Currently disabled by default, but can be enabled with "s.PreloadPackageDependencies 1" in the console.
-
-
New: Look At Control now supports look axis in local space.
-
New: Started moving animation nodes out of Engine into a new AnimGraphRuntime module.
-
New: Support Append Frames in the begin/end of the AnimSequence.
-
Also fixed to rearrange notifies and curve keys.
-
-
New: Wrapped re-entrancy checks during AnimationBlueprint node Update/Evaluate in DO_CHECK tests so that they are compiled out in shipping builds.
-
Animation and joint name now supports UTF-8 when importing.
-
Animation Record gives default path and available name.
-
Changed MasterPoseComponent serialization so that you can use it in a construction script.
-
Changed animation stat names to reflect whether they are running on the main game thread or a worker thread.
-
Changed new NativeNotify menu to display the localized class name.
-
Fix for crash in BlendSpaces when referenced AnimSequences have been deleted.
-
Fixed a bug where the latent action manager wasn't correctly removing actions.
-
Fixed a crash due to incorrect current time when switching a sequence player node's animation to one that is shorter than the current one.
-
Fixed a crash when compiling a malformed Animation Blueprint (containing a missing node caused by deleted code or a disabled plugin) and added a graph validation pass prior to compilation.
-
Fixed adding an extra frame when importing animations.
-
Fixed an issue where the message log was not displayed/refreshed when using the "click to recompile AnimBP" prompt rather than the Compile button.
-
Fixed client/server disagreements when playing root motion animations.
-
When a Montage ends, some left over root motion could stick around and be used the next time around, potentially creating positional differences between client and server.
-
If sending a DualServerMove when root motion starts, server can update root motion for a move that didn't use root motion on the client yet.
-
-
Fixed crash during animation blueprint compilation due to incorrect parent class being accessed during skeleton recompile.
-
Fixed crash during skeleton class recompile when structurally changing some animation blueprints.
-
Fixed crash in blend node with when evaluating a LOD'd skeleton (bones were stripped out.)
-
Fixed crash when enabling Show Uncompressed Bones.
-
Fixed crash when pausing the game and using "Tick when paused" on a SkeletalMeshComponent.
-
Fixed crash when you mix additive and non additive animations within montage.
-
Fixed crashes relating to animation notifies that had invalid slot indices when linked in montages.
-
Fixed divide by zero when importing zero-length animations. (Contributed by rajkosto, pull request 1148.)
-
Fixed incorrect state machine weights when using a custom blend on a transition.
-
Fixed montage linkable elements sometimes losing segment links when external animations had changed.
-
Fixed non-human-controlled characters moving much more than they should while running root motion on dedicated servers with AnimUpdateRateOptimizations and RootMotionFromMontages ON.
-
Fixed 'phantom' warnings that could show up the first time an Animation Blueprint was opened in an editor session but would go away when you recompiled interactively.
-
Fixed reimporting breaking RetargetBasePose.
-
Fixed variable initialization order bug that caused evaluation skipping on SkeletalMeshComponents to not function properly.
-
If you import a mesh that adds bones to a skeleton, but don't save the skeleton, it could cause a crash. Added the ability to recover these bones in the editor.
-
Minor style fixes for padding/fonts of bone references and the alpha scale/bias of a skeletal control.
-
Removed WITH_EDITOR define around GetActiveSocketList in QuerySupportedSockets so behaviour of QuerySupportedSockets is consistent between editor and non editor builds.
-
Reworked animation track segment looping logic to reduce floating point error problems.
-
When Skeleton detects inconsistent hierarchy, it will try fix up. You're going to notice merge bone effort with error message.
-
When this message comes up, please resave skeleton.
-
-
While piloting an object, 'move to' object button functionality works properly.
Audio
-
New: Added ability to set the volume headroom per platform with a new Engine.ini field.
-
New: Improved Gameplay Statics sound API:
-
New Spawn at Location functions return an Audio Component that allows manipulation of the played sound similar to the Attached version.
-
Play at Location still does not return the audio component and should be used for one-shot sounds.
-
Rotation parameter added to API calls that specify location or attachment. This causes non-spherical attenuation shapes to face the intended direction.
-
Play Attached renamed to Spawn Attached.
-
Sound and Dialogue APIs are now consistent.
-
-
Fixed volume differences on the Mac platform due to splitting and merging audio streams when using reverb, EQ, or radio effects.
-
Added low-pass filter for voice audio units to closer match PC audio.
-
-
Fixed to use proper linear-to-dB volume equation on the Android platform.
-
Fixed a Core Audio API crash for Mac when the number of active sounds exceeded the number of available audio units.
Automation
-
New: Basic lighting tests have been separated from the 'General Editor Test'.
-
They are now: "System.Promotion.Editor.Lighting.Place Scale Rotate", "System.Promotion.Editor.Lighting.Modify Properties", and "System.Promotion.Editor.Lighting.Duplicate and Copy Paste".
-
-
New: GenerateProjectFiles.bat will now exit with a non-zero exit code (1) when any failure happens.
-
New: Material Editor promotion tests are now contained in the MaterialEditor module. Fully exported UMaterialGraph.
-
New: Particle system promotion tests are now contained in the Cascade module.
-
New: The geometry automation tests have been separated from the 'General Editor Tests' automation test. It is now: "System.Promotion.Editor.Geometry Validation".
-
New: UAT and UBT will no longer wait for the global mutex, and will fail immediately instead. Previously, each instance would wait in line serially, hiding the fact that the command was not actually running.
-
Fixed UAT base path being invalid if the UE4 workspace is mounted directly onto a drive letter (e.g. C:\Engine, D:\Engine, etc.).
Blueprints
-
New: Added Blueprint-exposed GetBoundingBox function to StaticMesh.
-
New: Added Equals and NearlyEquals functions for Transforms to Blueprint math library.
-
New: Added TimeSecondsToString function to convert float seconds to formatted string.
-
New: Added a node icon to identify editor-only properties referenced in Blueprint script.
-
Properties like a Character's arrow component, or a TargetPoint's sprite.
-
Fixed crashes that would occur from referencing these properties in cooked builds (replaced with a logged exception instead).
-
-
New: Added editor .ini config settings that can be used to hide specific Blueprint menu entries.
-
Use the "[BlueprintEditor.Menu]" section header to add exclusions under in the .ini file.
-
In the .ini file, specific fields can be hidden like so: +BlueprintHiddenFields="/Script/Engine.Actor:GetTransform".
-
In the .ini file, specific nodes can be hidden like so: +BlueprintHiddenNodes="/Script/BlueprintGraph.K2Node_IfThenElse".
-
-
New: Added Get Map Range Value Unclamped and renamed Get Mapped Range Value to Get Mapped Range Value Clamped.
-
New: Added Invert Transform blueprint node.
-
New: Added support for expressing a per-parameter Display Name using the markup UPARAM(DisplayName="Something neat") before the parameter declaration.
-
This allows renaming parameters without using a K2ParamRedirect, and the use of names that are not legal C++ identifiers.
-
e.g. static void DoSomethingAwesome(UPARAM(DisplayName="Awesome Param") float BoringParam);
-
-
New: Added the ability to filter out library functions and macros from the Blueprint context menu.
-
New: Added various improvements related to Select node. The node doesn't return a copy of input parameter, it returns a reference to the input.
-
New: An "InternalUseParam" meta tag for UFUNCTION has been added to support hiding function parameters from Blueprints. The pin for that parameter will be hidden and not connectable.
-
New: Blueprint Timer API improvements.
-
Set Timer By Delegate now returns a Timer Handle to be used when interacting with the timer via other functions. Interacting with timers by handle is significantly more performant and enables the same timer delegate to be used for multiple timers simultaneously.
-
Set Timer By Name, and all timer manipulation functions, by name and delegate have been deprecated.
-
-
New: Blueprint Timeline UI updates:
-
Made individual tracks collapsable.
-
Added an option to turn off the view synchronization for an individual track.
-
General padding and layout tweaks.
-
-
New: Game/URL Options parsing nodes are now exposed to blueprints.
-
New: Can change a variable's type in the My Blueprint window by clicking on its type icon, or right-clicking to toggle whether or not it's an array.
-
New: Can drag and drop custom events from the My Blueprint window to add a call function for the event.
-
New: Can promote pins to local variables in Blueprint function graphs (or their child graphs).
-
New: Can set the Advanced Display flag on Blueprint member variables.
-
New: Made the boolean pin in Blueprints less subtle.
-
New: Fixed a crash that could occur with data-only Blueprints that explicitly called their parent's construction script.
-
New: Fixed error about missing World Context pin in blueprint library.
-
New: CreateEvent nodes are now more user friendly - they will use the current blueprint as the default context and no longer suggest that the user select an asset for context.
-
New: Improved details panel for nodes: Make, Break and Set Member. Properties are grouped in categories. Improvements for PostProcessSettings.
-
New: Improved the logic for when to reuse an existing graph tab versus open a new one.
-
All subgraphs will now open in the parent when double-clicking on a node in a graph.
-
Holding down Shift while clicking on an item in the My Blueprint tree or in the graph will force the creation of a new tab regardless of what is already opened.
-
-
New: Node "Set member in .." has an output pin for the post-modified struct.
-
New: Object Reference, Class Reference, Asset ID, Asset Class ID pin types have been spun off into a sub-menu on the item to reduce duplication of these items in the listview.
-
New: The output pin subtype for a GetClass function call node is now linked to the input pin's subtype.
-
New: Added support for multi-line editing to blueprint comment nodes.
-
To enter a newline in the comment title use shift + enter.
-
-
New: Exposed NOR and NAND node support to blueprints.
-
The nodes can be found in the math/Boolean section in the blueprint action menus.
-
-
"Color" name is not longer restricted.
-
Added "magnitude" keyword to vector length functions.
-
Adding or removing members from an editor created structure will no longer cause 'inappropriate outermost' warnings when blueprints that use that structure are saved without recompiling.
-
Adding pins to a MakeArray node will give the new pin a default values.
-
After context fail (Access None error) return data are properly cleared.
-
Attaching a bool to the "Select" nodes index pin will force the node to update it's pin names even when there are only two options.
-
Axis mapping value getters can no longer be called from other blueprints.
-
Blueprint Diff Tool no longer has buttons to switch between the components, graph, and defaults views. Navigation is now done via the list of differences.
-
Blueprint Editor context menu filtering is much more efficient.
-
Blueprint member variables of type component that are not generated by SCS now have the details options normally available to exposed variables.
-
Breakpoint is triggered on Access None error.
-
C++ Functions that are tagged as BlueprintImplementableEvent and are overridden as a function graph in Blueprints will display an error when attempting to drag and drop into the graph to inform the user that the function is not Blueprint Callable.
-
Call Function nodes will no longer change the function reference when duplicating the node or duplicating the entire Blueprint.
-
Can no longer split pins on Blueprint nodes if the struct does not have any valid properties.
-
Can now Make and Break the DateTime struct in Blueprints.
-
Can right click in collapsed graphs to add local variables that are part of the outer function graph.
-
Can right click on any node to search for references of it. Does initial search only in current Blueprint.
-
Can use unicode characters in Math Expression nodes.
-
All unicode "letters" are now allowed for variable/input/output names.
-
This does not extend to symbols and only the underscore symbol is still allowed.
-
-
Cannot name Timeline tracks the same as any of the native pins on the node.
-
Any nodes previously broken by this functionality should work again.
-
-
Changing a pin type on a Select node will recombine all sub pins on the option and result pins before setting the new pin type.
-
Changing the Class of a "Spawn Actor from Class" node will no longer disconnect the result pin's links if they are still valid.
-
Child components in a Blueprint Class asset attached to a default scene root will no longer be lost after reparenting to a Blueprint Class that also has a default scene root.
-
Connecting function result node array pins to a reroute node will no longer prevent the node from compiling with all its output parameters.
-
Copying and pasting a K2Node_CallFunction with an interface pin for the self pin will no longer change the self pin into a normal Object Reference pin.
-
Deleting a custom event when there are no other events in the Blueprint will no longer disallow you to name other items placed in the Blueprint the same as the deleted custom event.
-
Drag and dropping a component from the SCS editor to a graph will no longer incorrectly report that the graph is outside of scope when it is a part of the same Blueprint.
-
Dragging and dropping variables from the My Blueprint tab will no longer default to assuming that the variable is read-only.
-
Duplicating function or macro graphs that contain nodes with Text pins will no longer incorrectly link the original and duplicated pins so that changes in one appear to affect the other.
-
Duplicating the "Add Scene Component" node while the transform pin is split will no longer make visible the transform pin on the duplicated node.
-
Editing a blueprint that is instanced in a hidden sub level no longer resets transforms on the hidden instances.
-
Ensure 'bExchangedRoles' is not set after serialization of an Actor-based Blueprint Class asset.
-
Examining the value of an enum array pin will show the enum value's display name.
-
Fixed a crash when compiling a Blueprint while intermediate graphs are open.
-
Fixed a crash while compiling a Blueprint with a validated Get node that is missing a property.
-
Fixed a crash when compiling a Blueprint while Find-in-Blueprints is searching all Blueprints.
-
Fixed a crash when vectors are compared in Math Expression using operator!=.
-
Fixed a potential crash during component registration when constructing instances of a Blueprint Class.
-
Fixed a potential crash on load during component template serialization for older Blueprint Class assets.
-
Fixed a potential crash when copying an array of USTRUCTs from one Actor instance to another.
-
Fixed an issue where deleting the scene root component in the Blueprint editor could lead to incorrect state of instances of the Blueprint class post-reconstruction.
-
Fixed crash executing cast to a class that is not loaded (presumably due to referencing a class in an unloaded module).
-
Fixed crash on reload of maps saved with constructed component instances that match archetypes by name but no longer by type.
-
Fixed a crash that would occur when editing an instanced variable nested within another instanced variable.
-
Fixed propagation of material swaps when editing "native" component templates (i.e. inherited from the C++ class) in the Blueprint Class editor.
-
Fixed socket browsing in the Blueprint editor for inherited component templates.
-
Fixed stale components persisting in a Blueprint Class asset after changing a native parent class's inheritance hierarchy.
-
Fixed vector axis input event nodes displaying a float output pin instead of a vector pin.
-
Fixed a bug that prevented new components from having the same name as a deleted one (prior to a compile).
-
Fixed a bug that was preventing copy, duplicate, and rename hotkeys from working in the Blueprint viewport.
-
Fixed a bug where certain keywords for Blueprint menu items were being ignored.
-
Fixed a bug where dirty Blueprints were not being compiled before you selected "Launch".
-
Fixed a bug where static functions were being hidden from Blueprints with Hide Categories metadata.
-
Fixed a bug with cyclic parent/child dependencies, where inherited components could be trashed when compiled.
-
Fixed a bug with parent/child cyclic dependencies, where the child's overridden property values would be cleared on load.
-
Fixed a crash after renaming local variables when other functions have local variables of the same name.
-
Fixed a crash that could occur when passing a default Blueprint Session Result object to the "Join Session" Blueprint node. Instead of crashing, the join will fail an execution will continue from the "On Failure" pin, as normal.
-
Fixed a crash that could occur when undoing, after compiling an Actor Blueprint with components.
-
Fixed a crash that would occur in specific cyclic dependency cases involving an Actor and Actor Component Blueprints.
-
Fixed a crash that would occur when hovering over the "Edit Blueprint" button, for Blueprint instances that had components added in their construction script.
-
Fixed a crash that would occur when loading a Blueprint that depended on a plugin that was disabled.
-
Fixed a crash that would occur when removing an event/function param in a Blueprint that was associated with the set GameMode.
-
Fixed a crash that would occur when removing a pin that had a debug watch applied to it.
-
Fixed a crash when deleting a map while it's level Blueprint was opened.
-
Fixed a crash when restarting level after streaming sublevels in.
-
Fixed a cyclical dependency bug involving macro libraries, where Blueprints could load with a false error.
-
Fixed a potential failure to restore component instance data during reconstruction of an Actor-based Blueprint Class instance.
-
Fixed an issue where it would appear that the Increment/Decrement macros would occur twice when using the output pin from the macro.
-
Fixed an issue where some component property values on a Blueprint class instance in the current scene could be reset as a result of recompiling the Blueprint class.
-
Fixed crash when Local Variable of array type is compiled.
-
Fixed crash when making changes with multiple components selected in the blueprint editor.
-
Fixed crash when selecting for "None" class type on the Spawn Actor From Class node after having already selected another class.
-
Fixed crash when struct value is copied from invalid object using Set node.
-
Fixed crash, when two empty User Defined Enums have the same name.
-
Fixed decrement int macro node to actually decrement.
-
Fixed duplication of components within the component tree in the Blueprint editor.
-
Fixed editing of Instanced Static Mesh Component and Hierarchical Instanced Static Mesh Component.
-
Fixed exposed APEX cloth functions not appearing in blueprint editors.
-
Fixed incorrect tooltips between "Convert to validated Get" and "Convert to pure Get" options on Get variable nodes.
-
Fixed issues that could occur if an existing Blueprint class default object or instance contained one or more invalid property values for native (C++-defined) component subobjects on load.
-
Fixed issues with graph node bubbles rendering incorrectly when there is nothing in the top slot
-
Fixed issues with hiding categories in Blueprints not always hiding all the expected nodes.
-
Fixed issues with node titles being out of date (e.g., animation skeletal controls) by forcing node titles to be updated when a property on a graph node is modified
-
Fixed issues with Target pins being invalid after reparenting a blueprint.
-
Fixed rare crash in the Blueprint diff tool that occurred when user dragged certain UI elements.
-
Fixed the cause of a 'Critical Failure' that could occur when replacing references to one blueprint with references to a different blueprint.
-
Fixed crash with Find-in-Blueprints, fallout from changes to FString.
-
Hidden pins generated from native functions will correctly use their default values.
-
Improved the Pin Type Selector filter so order of words and case sensitivity does not matter.
-
In the pin type selector dropdown, hitting the shift key will no longer move the cursor back to the start of the search box and hitting the down and up arrow keys will again navigate the list view.
-
Input action and key events will no longer be placeable in Blueprint functions.
-
Input Touch event node cannot be placed in function or macro graphs.
-
Local variables in Blueprint functions will now be set to the default values of the user defined struct their type represents.
-
Math expression functions without any parameters will still provide their end parenthesis in the Math Expression node.
-
Math Expression nodes will again correctly lookup by the display name of a function.
-
Math Expression nodes will no longer always appear as changed when doing a diff on a Blueprint.
-
Improved diffing support to see how the expression has changed between revisions.
-
-
MathExpression nodes will not count function inputs as valid variables to access via getter nodes.
-
More strict restrictions related to WeakObjectPtr exposed to blueprint. No arrays of WeakObjectPtr.
-
On Blueprint enum pins, tooltips will appear when hovering over items in the drop down menu.
-
On the select node, setting the Index pin's type will always change the pin names of the option pins to "False" and "True".
-
Exposed FMath::FixedTurn to Blueprints. (Contributed by MatzeOGH, pull request 1254.)
-
Preventing in UK2Node::AutowireNode hidden pins from being auto-connected to passed in Wildcard pins.
-
This prevents issues with wildcards connecting to the "self" pin of functions when dragging off them.
-
-
Proper error is generated when incompatible Blueprint pins are connected.
-
Recompiling a Blueprint with a Component parent class now correctly re-registers any instances of the blueprinted component in the level. Previously existing instances could disappear.
-
Removed a check that was asserting when compiling a Blueprint with invalid Call Function or Call Parent Function nodes.
-
Renaming a component and then adding a new component of the same type in the Blueprint editor will no longer result in broken defaults editing.
-
Select nodes using enums with hidden values will no longer incorrectly match up the Option pin connections to the improper enum value.
-
Selecting a pin type for a Select node will not fail the first time.
-
Setting default values of Text properties in the User Defined Struct or for Local Variable properties in Blueprints will correctly assign the value and preserve the value between instances of the editor.
-
Splitting pins on the Function Result node will no longer attempt to compile the split pins as result pins.
-
The "Get" pin(s) on "Set" variable nodes will now display the name of the pin if the pin has been generated by splitting a struct pin.
-
The details view in Blueprints of non-member variables (either from a parent class or an external member reference) will no longer show various detail uneditable options as editable.
-
The eye icon appears now for marking a user created component variable as editable in the My Blueprints window.
-
Tooltips will display for sub-menu items in the Pin Type Selector.
-
Tweaked the tooltip for "Expand Nodes" menu option to better describe what the action will do.
-
When dragging off a pin in a function graph, local variable nodes will no longer be filtered out of the context menu for placement if they are valid for connection.
-
When indexing all Blueprints, hitting "No" will correctly skip checking out all un-indexed Blueprints.
-
When loading a blueprint pin types that don't match are no longer disconnected, instead we rely on compile errors to prevent the potentially broken blueprint from executing bad code.
-
When signature of a function is updated, its instances in the Event Graph are properly updated.
Core
-
New: A plugin with the same name but of different versions can be placed in multiple game projects. This allows studios with multiple projects to utilize the same plugin at different revisions as long as the plugin is part of the game project.
-
New: Added module path caching to improve editor startup times.
-
New: Added pre-allocated memory pool which is freed when the system runs out of memory to properly handle such crashes.
-
New: Added 'stat slow' console command.
-
Displays the game and render thread stats.
-
Can take two optional parameters -ms=x -depth=n that specify the minimum stat duration and the displayed hierarchy depth respectively.
-
-
New: Added the ability to force garbage collection when worker threads are inside of garbage collection lock.
-
In this case main thread will be blocked and wait until lock is over.
-
This can be configured in Project Settings under Garbage Collection section.
-
-
New: Added two new parameters to AutomationTool's BuildCookRun command:
-
IgnoreCookErrors - Ignores all cook errors and continues with deploying the project.
-
FastCook - Passes fast cook parameter to the cooker, which is handled on a per-project basis.
-
-
New: Changed the file reader to use async I/O for a 1.6x+ speedup reading files on Windows based platforms.
-
New: CMake project generator now works on Mac and Windows.
-
Pass -cmakefile to GenerateProjectFiles and use CLion or other IDEs to build UE4.
-
-
New: DirectoryWatcher can now optionally ignore changes in subdirectories (works on Windows and Linux; Mac implementation ignores this flag).
-
New: Exposed garbage collection settings to Project Settings under Garbage Collection category.
-
New: Exposed Streaming settings to Project Settings under Streaming section.
-
New: Improved missing import message to include the source asset name.
-
New: Improved the clean command in Unreal Build Tool. It will now properly clean up modules no longer referenced by the project.
-
New: Made zlib to also use standard Unreal memory allocators, which makes it easier to track them.
-
New: Memory stats will now also be reported when the engine crashes.
-
New: More verbose log message when the engine crashes because of a corrupted file.
-
New: Optimized transaction processing, saving unnecessary iteration when performing an ObjectRecord preload.
-
New: Improvement in garbage collection performance by implementing three micro-optimizations. (Contributed by pzurita, pull request 1348.)
-
New: Slightly optimized object loading by looking up the object in memory before flushing async loading.
-
New: Small optimizations for structure serialization:
-
Added native serialization for immutable structures.
-
Added POD flags for various math classes.
-
-
New: The amount of logging information displayed in the editor has been reduced. The removed logging is now only written to the log file.
-
New: TAssetPtr now supports conversion from derived to base.
-
Fixed a memory leak in the FLinkerLoad in debug builds, never clearing itself from the list of live linker loaders.
-
Added a system for deferring linker deletion to fix crashes during async loading.
-
Added attribute serialization to the XML File writer.
-
Added code to force exit when a worker thread crashes.
-
Added message log error for source name collisions in redirector ini sections.
-
Always use the Engine directory instead of the Process directory to locate executables on Windows.
-
Changed "CreateExport: Failed to load Outer..." message to be emitted to the message log so it is better surfaced to the user when running the editor.
-
Changed the message about missing config files on startup to make it more accurate.
-
Disabled runtime crash processing for launcher builds to reduce memory footprint. Callstacks will still be processed by CrashReporter.
-
Editing "Project Settings" value now only edits a single value in the config ini file.
-
With the exception of Arrays, which need a whole new implementation.
-
-
EPackageFlags & EObjectFlags can now be properly viewed in the debugger as a collection of enum entries, e.g. RF_Public | RF_Transactional, rather than just the raw numerical value.
-
Fixed crash reporting on Windows to make it more reliable.
-
Fixed "nearly equal" math comparisons not returning true when values are exactly equal and tolerance is zero.
-
Fixed a bug in TBB allocator that caused aligned allocations to overlap incorrectly.
-
Fixed Get Value Range function on Curve Base giving Min instead of Max. (Contributed by MiniTurtle, pull request 1314.)
-
Fixed a bug where game thread graph was not always enabled after loading a UE4Stats file in the profiler.
-
Fixed a bug where profiler could not perform 2 captures in a row through UI.
-
Fixed a crash after renaming a map or asset that couldn't have been renamed due to errors.
-
Fixed a crash in Online Async Task Manager Null when running the game with "-nothreading" on Windows.
-
Fixed a crash on exit after streaming levels in a cooked game.
-
Fixed an assert when checking for existing linker after async loading.
-
Fixed an intermittent deadlock when shutting down a game.
-
Fixed an issue where installed plugins would cause a content-only game to build when packaging.
-
Fixed Blueprint compilation errors after hot-reload.
-
Fixed build failures that could happen when user tried to add modules' dependencies.
-
Fixed crash on exit in packaged games caused by random order of destruction of some of the core UObject systems.
-
Fixed crash reporting and the engine not reporting correct windows version for Windows 8 and 10.
-
Fixed redirectors assets "Fail to load" messages that could appear in certain situations in the editor making redirector assets unusable and unfixable.
-
Fixed saving failure after hot-reload when blueprint node contained a reference to a class default object.
-
Fixed sporadic audio crash after hot reload.
-
Fixed the search order for detecting a target for game projects.
-
Fixed the search paths for plugins when running a packaged content-only game.
-
Fixed BSP texture align tools all being initialized to default. (Contributed by yamashi, pull request 1136.)
-
Fixed a crash if list of delayed linkers includes multiple entries of the same linker. (Contributed by MarcKamradt, pull request 1197.)
-
Fixed broken UnrealBuildTool dependency file caches when the process is terminated unexpectedly.
-
Fixed UnrealBuildTool not being able to harvest environment variables when the user's Windows login name contains non-ASCII characters.
-
Fixed UnrealBuildTool not updating the makefile when a .Build.cs or .uproject file changes.
-
Fixed UnrealHeaderTool crash that was occurring in some rare cases if parsing step had other errors.
-
Fixed UnrealSwarm "Channel already registered" error to log the actual reason why exception has happened, cause until now it was very misleading.
-
Fixed UnrealSwarm connection problems, which were happening if coordinator and agent were on the same machine and coordinator address in agent's settings was set to non-loopback IP.
-
Incredibuild binaries are now sought in Path and not just Program Files.
-
Integrated some UnrealBuildTool performance fixes which were added in 4.7 but omitted from 4.8.
-
Made sure default subobject (component) properties are not reset to default on actor construction.
-
Made sure packages are not marked as dirty when they're being streamed in.
-
Minor performance optimizations for UnrealHeaderTool that shave a couple of seconds off of an invocation for a typical game project.
-
Moved linker serialization from UObject to UPackage to fix inaccurate UObject mem reporting.
-
Optimized object referencing system when collecting garbage while streaming.
-
Profiler will now load all frames, previously the last frame was ignored.
-
Quadrupled trunc length for callstack lines when forming the human readable string for windows callstacks.
-
Removed some redundant calls from FPaths::MakeStandardFilename to make it faster.
-
Rendering thread callstacks are once again correctly printed to the log for non-editor builds.
-
Save to default config no longer writes out duplicate entries.
-
Smoke test added to ensure platform consistency on opening files for append, and ability to seek said file handles.
-
The TAttribute no longer allows you to directly compare another TAttribute for equality.
-
They've been deprecated, and corrected to only allow comparison against literal values instead of comparison attributes, which was causing implicit construction of attributes when comparing against a literal.
-
There's a new IdenticalTo() function on TAttribute which can actually compare two attributes to see if they are really the same.
-
-
When bAutoCompleteWhenLoadingCompletes is false in the MoviePlayer, the movie correctly continues playing until prompted to stop after loading completes.
-
When queueing new async packages, async loading code will also look for existing packages in loaded packages to process to prevent infinite streaming times.
Editor and Tools
-
New: Added "Zip Up Project" button under File -> Package Project to grab necessary project files and package into a zip. For easily sending the project to other people excluding unnecessary files.
-
Smart Resizing for Transform Details UI:
-
The vector and rotator widgets now support automatically rendering in a more compact mode as the details panel shrinks, making it possible to edit properties over a wider range of widths.
-
-
-
Rotator UI Consistency:
-
Rotators now display everywhere in a consistent order as XYZ, rather than being displayed as XYZ in the level editor but as Pitch, Yaw, Roll (YZX order) in Blueprints.
-
In a Blueprint:
-
In the level editor:
-
All existing content is automatically updated and will work as expected, but you may notice wires crossing that didn't cross before since the order has changed.
-
As a refresher (this information is also displayed in the tooltips):
-
X is the roll value (rotation about the X axis, typically the forward vector, e.g. tilting your head sideways).
-
Y is the pitch value (rotation about the Y axis, typically the right vector, e.g. looking up/down).
-
Z is the yaw value (rotation about the Z axis, typically the up vector, e.g. turning to face left/right).
-
-
-
New: "Add Auto Connect To Server" option to the advanced Play In Editor options, defaulting to old value of true. If set to false it will launch multiple clients but they won't connect to each other, which is useful for UI testing.
-
New: Added "No to All", "Yes to All" and "Cancel" options to the "Failed to Merge Bones" dialog when importing skeletal meshes to avoid having to dismiss large a large amount of windows.
-
New: Added "Save All" button to Visual Logger tool.
-
New: Added a check to determine whether plugins are compatible when opening a content only project. This is needed because a content only project will not attempt to build incompatible plugins later, users can now choose to disable them.
-
New: Added a support URL to plugins so that it is easy for users to know how to contact the creators of plugins for support.
-
New: Added file modified date and file size to map file asset tool tips. Allows sorting by these values in column view mode.
-
New: Added SkeletalMesh Resource Size in content browser.
-
New: Added support for multi-line text in the Note actor's text field.
-
New: Added support for positioning and always centering standalone play windows. Fields are added under Level Editor - Play advanced settings to position the standalone play window and turn always centering on and off.
-
New: Added the option to display the current Unreal Engine's version number in the project badge. This feature can be enabled in the Miscellaneous category inside of the Editor Preferences.
-
New: All integer property types are now supported in details panels instead of only int32 properties.
-
New: Allows play in editor windows to always be displayed on top of other windows, enabled/disabled under Level Editor - Play advanced settings.
-
New: Clarified the use of Server Game Options and Command Line Options in the tooltips for the Level Editor - Play settings.
-
New: Enabled engine/game plugin switch in plugin wizard. (Contributed by szyszq, pull request 1145.)
-
New: FBX importing detection has changed.
-
If you have animated curves, it will detect as Skeletal Mesh even if you don't have deformer.
-
This is so that it is easier to import animation for rigid bodies.
-
-
New: "Light Types” show menu:
-
"Lighting Components" -> “Ambient Occlusion” affects both DFAO and SSAO now.
-
Added "Screen Space Ambient Occlusion" show flag under ”'Lighting Features”.
-
-
New: Made the Blueprint Editor viewport camera speed a per-project editor user setting, which is saved between sessions.
-
New: Major optimizations to the BSP building process and BSP Undo.
-
New: Moved Plugins menu from Windows to Settings/Configuration.
-
New: Optimizations to setting the material or its texture transform on a BSP surface.
-
New: Placed cameras can now be looked through and piloted more quickly by using the camera dropdown in the level editor viewport.
-
New: Added hooks to Material Editor for plugin support. (Contributed by bradgrantham, pull request 1168.)
-
New: Removed the close button from the Convert Project modal dialog, as it was returning an undefined reason code (and was not necessary as there was already a Cancel button).
-
New: Removed the SaveBrushAsCollision command and its bindings, as the builder brush is no longer a user-facing concept.
-
New: Renamed the editor preference "Automatically Hot Reload New Classes" to "Automatically Compile Newly Added C++ Classes" to convey that it implies a compile.
-
New: Text FrontendFilter now tries to match with components of the path name, as well as the asset name itself.
-
New: The "Maximum Texture Size" property now yields an error dialog when attempting to change it for non-power-of-two textures which do not have a padded Power of Two Mode.
-
New: The RenderToTexture Blueprint toolset now has its own set of options for EXR exporting and does not require interfacing with the 'High Resolution Screenshot" dialogue box.
-
New: Users can now edit PlayerStateClass and SpectatorClass for a game mode via the Project Settings menu.
-
New: The green flash on tutorials will not return in future sessions once the tutorial is started. It is no longer necessary to dismiss the tutorial manually or complete it.
-
New: When building the plugin category tree, plugins are now also added to their parent category until we reach the root, so that all plugins can be searched from the root level.
-
New: When using "-List" command with UnrealPak, the files will now be printed out in the order they appear in the pak.
-
Actor Merging tool now correctly assigns user specified lightmap channel to a merged mesh.
-
Actors generated by 'Hierarchical LOD' system can no longer be transformed using Details panel.
-
Added an ensure to the main frame to indicate when it is being incorrectly loaded in a -game build.
-
Added an option to not use MikkTSpace tangent generation for static mesh importing.
-
Added error message if a material expression parameter name is too long.
-
All PIE world objects are now marked pending kill when exiting a play in editor session to break any references that could prevent garbage collecting the PIE world.
-
Attempting to enter greater than the maximum allowed number of FName characters into a name property will now show an error message in the text box in a details panel instead of crashing.
-
Changed common and divisions of 360 rotation grid snap values.
-
Changed Plugin Creator to allow plugins to be created in subdirectories.
-
Decals now drag and drop properly when dropped on top of meshes.
-
Disabled Plugin Creator plugin in content only projects as it currently won't generate projects/compile any plugins that are created.
-
Ensured that dependencies on missing plugins can be removed from the .uproject file when loading the editor.
-
Ensured that Plugin Browser displays correct results after adding a new plugin.
-
Fix for crash while trying to hide the Tick property category within a class.
-
Fixed "Multiple Values" being committed to property text blocks when they lose focus or when the user presses enter.
-
Fixed a crash executing source control commands with the Subversion source control provider.
-
Fixed a crash that could occur during a Play In Editor session with two or more players, using multiple processes, and having the editor multiplayer mode set to "Play as Client".
-
Fixed a crash when a level that has a Matinee Actor is unloaded at runtime.
-
Fixed a crash when changing a struct that was being used by an open Data Table editor.
-
Fixed a crash when dragging junk text from an external program into the graph editor.
-
Fixed a crash when immediately closing Visual Studio after opening a source file via the editor.
-
Fixed a crash when importing multiple objects with the same name at the same time when one of them is an FBX file.
-
Fixed a crash which could occur when attempting to open a map in the content browser that is currently loaded in the world composition browser.
-
Fixed an issue where selecting a surface with no actor selected did not bring up the details panel specialization for the surface properties.
-
Fixed an issue where some of the shape textures in engine/content did not have textures.
-
Fixed BSP selected surface rendering in Geometry Mode.
-
Fixed camera roll being applied to level viewport cameras after ejecting from the player in a Play in Viewport session.
-
Fixed crash accessing the engine when attempting to play a slate sound after the engine has been shut down.
-
Fixed crash converting texture sample to parameter when MipValue is set to "Level" or "Bias".
-
Fixed crash copy and pasting material function call nodes while live preview is disabled.
-
Fixed crash ending Play in Editor if transactions made before starting PIE were undone while PIE was running.
-
Fixed crash in visual logger when you run the editor with an invalid .uproject.
-
Fixed crash when reimporting a mesh while editing collision in the static mesh editor.
-
Fixed duplicated brush actors not appearing in game.
-
Fixed editor viewports not remembering maximized state after shutting down in immersive mode.
-
Fixed error where during Mesh Paint mode using the Remove button would only remove the Vertex Colours from the first LOD level.
-
Fixed existing collision not being restored if there is no collision in the FBX file when importing over existing Static Meshes.
-
Fixed FBX import failure caused by incorrect import factory attempting to handle incoming assets.
-
Fixed geometry surface alignment tools for BSPs.
-
Fixed issue where BSP surface texture transforms could break when rebuilding geometry if their parent brush had been rotated about more than one axis.
-
Fixed issue where BSP surface transforms could get broken when applying them to geometry surfaces which are out of sync with the owner Brush (because Auto Build BSP is disabled).
-
Fixed issue where cancelling unsaved packages dialog when launching resulted in the Launch button permanently disabled.
-
Fixed issue where creating a child of an anim blueprint would result in a regular blueprint being created. Also fixed a similar issue with GameplayAbilityBlueprints.
-
Fixed issue where the AssetImportData for an asset was being lost when loaded.
-
Fixed issue where warnings during PIE were not being announced via a notification at the end of a PIE session.
-
Fixed issue with EyeDropper tool returning incorrect colour due to lack of gamma-correction.
-
Fixed issue with selection box rendering in the Curve Editor.
-
Fixed issues with redirector fixup, so that redirectors are deleted cleanly and referencing map packages are correctly fixed up.
-
In addition, fixed an issue where sometimes it was necessary to perform redirector fixup twice.
-
-
Fixed issues with the Delete Assets dialog so that the operation is always performed cleanly where possible, and not erroneously requiring a "Force Delete" operation.
-
Fixed issues with the geometry Optimize operation so that it always works correctly, without sometimes first requiring a Triangulate operation.
-
Fixed lights not being hidden when changing the editor visibility via the World Outliner.
-
Fixed manually entered rotations in the editor sometimes not resulting in the correct object rotation (mainly when editing Pitch).
-
Component transform editing now makes sure to only edit the single component (Yaw, Pitch, or Roll) that has been changed, and makes sure Quat<->Rotation conversion does not mess with the end result.
-
-
Fixed manually entered rotations in the editor sometimes not resulting in the correct object rotation (mainly when editing Pitch).
-
Component transform editing now makes sure to only edit the single component (Yaw, Pitch, or Roll) that has been changed, and makes sure Quat<->Rotation conversion does not mess with the end result.
-
-
Fixed Matinee Editor Preview Viewport FOV lagging by a frame. (Esp. noticeable during cuts between cameras of different FOVs)
-
Fixed menus so that they set the widget to focus upon activation to the actual content widget, rather than the wrapper. This fixes issues with the Ctrl+Tab file selection shortcut.
-
Fixed mirror transforms on BSP / Volumes.
-
Fixed missing engine controls overlay for mac and linux in the lower-left part of the viewport.
-
Fixed numeric math expression input when using a combination of units in unit-based numeric entry boxes.
-
Fixed Paper2D JSON files no longer importing as Paper2D assets.
-
Fixed rare crash in Visual Logger during shutdown of engine.
-
Fixed rare editor crashes caused by proxy updates happening after proxy destruction.
-
Fixed rendering issue with the Collision Analyzer window when opened from a non-editor build via the console.
-
Fixed rendering of graph node popups (for example, dropdown boxes) in graph editors. They are now rendered and sized at 100% scale, regardless of the zoom of the graph itself.
-
Fixed some users being unable to create blueprinted components without visual studio installed.
-
Fixed Tag and Tag Query Editor windows on Mac.
-
These windows were parented wrongly on Mac and couldn't be clicked.
-
-
Fixed Undo in Geometry Mode so that the geometry selection state is correctly restored.
-
Fixes to Visual Logger tool, to fix how we use this tool only with keyboard.
-
If you import a Skeletal Mesh with scale 0 of bone for reference pose, it will print warning.
-
Improved Data Table handling of User Defined Enums:
-
The Data Table editor UI will now show you the friendly name of the enums in its grid panel (matching what the property panel shows).
-
The Data Table import will now fallback to trying to import using a friendly name if no matching enum entry was found for the given name.
-
-
Improved instructions for what to do after creating new plugins with the wizard.
-
Improved performance when importing thousands of mesh sections from one FBX file.
-
Improved the localization support of the class wizard dialogs.
-
Made StartPIEGameInstance virtual to allow for game-specific PIE code.
-
New game windows now default to being positioned centered on the screen.
-
Optimizations to histogram graphs from Visual Logger tool.
-
Optimized pasting of actors into levels that contain a large number of actors.
-
Option to enable Hierarchical LOD is now more discoverable and can be found in 'World Settings' under the LODSystem category.
-
Performance improvements to OpenEXR exporter.
-
Placement mode can now correctly place new actors at locations occupied by foliage meshes.
-
Fixed small but annoying typos in ContentWrangleCommandlet.
-
Fixed Animation Sequence 'Reimport With new Source' context action.
-
Fixed issue with Animation Sequence reimport not respecting 'Default Sample Rate' flag set by the import UI.
-
Reduced ULevel::BuildStreamingData editor hitches from 600ms to 30ms.
-
Removed the map check warning "has simple collision but is being scaled non-uniformly - collision creation will fail" as a collision shape is created regardless of the fact that an object is non-uniformly scaled.
-
Renamed "Tick" category in UActorComponent to "Component Tick" and Actor tick to "Actor Tick" to differentiate between the two when they are both shown in a details panel.
-
Resizing a viewport no longer flushes texture streaming, causing a hitch.
-
Stopped ensure being triggered when scaling a skeletal mesh to 0.
-
Textures are no longer compressed for auto-saves to reduce the time it takes to save.
-
The color picker no longer assumes a straight inverse gamma conversion from colors sampled on the screen using the eye dropper. This change makes it so sRGB is the assumed space all colors are sampled in, making sampling colors from Photoshop bring in the identical version of the color converted into linear space, which when transformed back into sRGB space will be the same color you saw in photoshop.
-
FColor and FLinearColors can now default to sRGB space using a UPROPERTY meta tag of sRGB=true (or false), you can force a specific default checking of the sRGB checkbox.
-
Several places in UMG now force this default since sRGB is the space UMG will be rendered in (on PC). Additional work will be needed on Mac where the final rendering space is gamma 2.2.
-
-
The editor now properly saves out array elements to the ini files.
-
The Far View Plane setting for level editor viewports is now saved between sessions.
-
The Scalability state is now saved back to the same .ini file that it was loaded from, so that launching the editor doesn't reset Scalability settings set by the game.
-
There is now no longer a max limit to the number of static mesh sections that can be generated when importing meshes. The previous limit was 64 sections.
-
Updated Material Preview Mesh properties to include Adjacency Info.
Content Browser
-
New: Improved the behavior of Ctrl+B in the Content Browser and Persona.
-
Ctrl+B in the Content Browser will now invoke the "Show in Folder View" command to allow you to easily sync to the actual location of an asset in the cases where you're viewing it via a search or a collection.
-
Ctrl+B in the Persona animation sequence browser will now invoke the "Find in Content Browser" command.
-
Ctrl+B will no longer do anything when Persona has no asset available for a given edit mode.
-
-
New: The "Move Folder Here" operation can now be aborted if there are a large number of assets within.
-
Auto reimporter now uses MD5 hashing to ensure that benign reimporting does not happen when only the timestamp has changed.
-
Can now use the "Show Developers Folder" option in the save/load dialogs.
-
Fixed an issue in which cancelling the attempted delete of read only files would still remove the asset from the Content Browser.
-
Fixed being able to rename or delete some read-only types in the Content Browser.
-
Fixed Content Browser drag-and-drop so that it works in all views (it only used to work in tile view).
-
Fixed Size Map incorrectly displaying assets with back-references in the "shared" node.
-
Fixed the "Show Collections" option appearing multiple times if multiple Content Browsers were open.
-
Fixed the Content Browser assets not updating their SCC state correctly when the SCC provider is changed while the editor is running.
-
Local collections are now preserved when creating a copy of your project.
Landscape
-
New: Added a "Mesh Vertical Offset" to landscape spline control points:
-
This new property is blendable along the spline and independent of the spline width, unlike the old "Offset" in the spline segment mesh settings.
-
The old "Offset" in the spline segment settings has been renamed to "Center Adjust", to more accurately describe what it does.
-
-
Added the p.bUseUnifiedHeightfield console variable to allow disabling the use of PhysX unified heightfields. (These are enabled by default):
-
When this feature of PhysX is enabled, landscape collision thickness does not function and CCD is the only option to prevent fast moving rigid body penetration.
-
You can set p.bUseUnifiedHeightfield=0 in your ConsoleVariables.ini file if you wish to disable the PhysX unified heightfield.
-
-
Fixed a crash generating landscape rendering data during mobile preview rendering level.
-
Fixed a crash when assigning a material to a LandscapeProxy.
-
Fixed crash when using the landscape resize tool.
-
Fixed a crash when colliding with landscapes with physical materials due to mismatch between the saved level and and data in the derived data cache.
-
Fixed external reference errors caused by moving components with an XY-offset map texture to another level.
-
Fixed Landscape Grass not updating after undoing a landscape painting operation.
-
Fixed landscape spline control point meshes not working.
-
Fixed problems with landscape cooking where launching on a mobile device or in the mobile previewer multiple times from the editor would not correctly cook changes made in the editor session.
-
Fixed rare crash caused by various UObjects used by the landscape tools getting garbage collected.
-
Fixed smooth tool being broken for strength > 1.
-
Fixed spline meshes stored in foreign levels disappearing in cooked builds.
-
Fixed the "Smooth" tool also causing a flattening effect.
-
Fixed the Landscape Editor keyboard shortcuts not working.
-
Note: The number keys are bound to bookmarks by default, and so these won't work for switching tools in the viewport unless you unbind or rebind them.
-
-
Landscape collision thickness value now correctly propagated to underlying PhysX heightfield when changed.
-
Note: Heightfield thickness requires the p.bUseUnifiedHeightfield=0 console variable setting in order to have any effect in PhysX.
-
-
Landscape tool now correctly shows layer names when new layer has been added.
-
Moving landscape components to a sub-level will now correctly move any attached foliage as well.
-
Precomputed visibility should now be correctly calculated for landscape actors.
-
Properly deform navigable geometry for spline mesh. (Contributed by mollstam, pull request 1295.)
-
The user is now prevent from attempting to use the World Grid Material as a landscape hole material. Overriding blend mode on the default material will cause a crash.
-
Undo now works correctly with "Clear Region Selection".
Material Editor
-
New: Added Map Check warning after loading a level in the editor that uses a material that needs one of its Usage Flags set. Unless resaved, such materials will render as the default material in cooked builds.
-
New: Added World<->View transforms to the TransformPosition node in the material editor.
-
New: The Material Editor now saves the toggle state of nodes' comment bubbles, so they are preserved when reopening the material.
-
Fixed a crash placing a Custom Output material node in the material editor. That node type should have been excluded from the material node list.
-
Fixed a material compile error generating when using a Custom material node together with a TextureObject on OpenGL platforms.
-
Fixed a small error which was causing some Material Functions in the library to not appear in the right click menu, despite being exposed.
-
Fixed issue where editing a Material Parameter Collection results in marking an unnecessarily large number of materials as dirty.
-
Fixed titles on math nodes to update when the pin connections change.
-
TextureSample material nodes now fetch the correct tooltips.
Matinee
-
Fix bug that could cause sounds to start not quite at the beginning during playback.
-
Fix matinee crash when running without audio device.
-
Fixed matinee sound preview playback so that it respects the loop section and correctly restarts. Improved the quality of audio playback when scrubbing.
-
Launching movie capture once again works when using a DebugGame binary.
-
Matinee can no longer be opened while there is an active Play in Editor or Simulate session as it is unsafe to change matinees during play sessions.
-
Switching editor modes will now warn before closing Matinee mode.
Cascade
-
All particle modules now reset to their distribution properties to their correct defaults instead of "None".
-
Fixed crash when setting the particle system Initial Velocity to defaults when configured as a Distribution Vector Uniform Curve.
-
Mesh particles now properly populate dynamic parameter names in Cascade.
Persona
-
New: Added key handling to Persona segment panel for montages so delete key now works correctly.
-
Fixed delete context menu option for animation notifies not correctly deleting notifies on some platforms.
-
Fixed a crash in reinstancing of Persona preview instances after compiling blueprints that are referenced in the Animation Blueprint event graph.
-
Fixed a crash when switching between edit modes with wind source actors active.
-
Fixed an issue in the type-in UI for blendspace sample coordinates where the Y coordinate could not be set to the same as the X coordinate.
-
Fixed APEX clothing files failing to import when non-ANSI characters were present in the file path.
-
Fixed crash in anim compression when retargeting an animation with a single key.
-
Fixed crash in Persona accessing stale preview instances. Now we reinitialize the animation correctly when the blueprint changes.
-
Fixed crash in Persona when undoing deletion or duplication of state nodes.
-
Fixed crash when undoing a change in custom blending graphs for state machine transitions.
-
Fixed deleted names in smart name managers remaining after deletion.
-
Fixed ordering of source and target bones in the details panel for the copy bone node to make them more intuitive.
-
Fixed UI refresh being triggered for any property edit event fired from any UObject. Now filtered to refresh only when notify data is changed.
PhAT
-
Fixed issue where changing the mesh rendering mode in PhAT would not update in the viewport until the second click.
-
Fixed PhAT Editor crashing due to being able to select nonexistent bones.
World Outliner
-
New: Changed the level name tooltip in the Levels Browser to display the full package path name.
Static Mesh Editor
-
New: Added the ability to push the bounds for StaticMesh objects manually.
-
The bounds can be altered by changing the value of the PositiveBoundsExtension and NegativeBoundsExtension properties for a StaticMesh.
-
-
New: Static mesh adjacency buffer generation is now set per-mesh. Controlled either through the mesh editor or on import.
-
This was previously controlled by an internal fixed triangle limit but needs to be optional to allow PN tessellation on high-poly meshes.
-
The flag will be auto-set for old meshes preserving existing behavior.
-
Source Control
-
New: Added make file writable button for advanced project setting pages, which allows files to be edited when non-writable and not connected to source control.
-
New: Once an asset is made writable (if it cannot be checked out), it will no longer continue prompting the user for check out when it is modified.
-
Fixed not being able to use collections with SVN or Git set as your SCC provider.
-
Fixed Subversion source control plugin to recognize the correct line terminator sequence depending on the platform. This was previously breaking the log output on Mac.
-
Subversion source control provider can now use the system default svn binary where it exists.
-
This addresses issues where users have repositories and checkouts that were made with different versions of SVN to the client binary we ship. We now attempt to detect a system-level svn binary, and only use the shipped binary as a fallback.
-
World Browser
-
New: LOD sub-level generation has more options for material simplification (texture size, constant material parameters).
-
Fixed a case where world composition would scroll the minimap view to an undefined location if the user selected a hidden tile.
-
Fixed X-axis orientation when importing tiled landscapes from World Machine.
-
The 'Bake Grass' option for LOD sub-level generation will now correctly bake grass across all landscape surfaces.
-
World composition now incrementally updates sub-level tile images, preventing large editor hitches when a large number of tiles need update at the same time.
Foliage
-
New: Added a bulk foliage instance removal Blueprint function to HierarchicalInstancedStaticMeshComponent
-
RemoveInstances takes an array of instance indices.
-
It can directly use the Instances array passed into the new FoliageInstancedStaticMeshComponent OnInstanceTakeRadialDamage event to remove all damaged instances.
-
-
New: Added Blueprint support for Foliage instances.
-
The foliage component class can now be overridden in the Foliage Type.
-
Users can create a Blueprint subclass of FoliageInstancedStaticMeshComponent to respond to Hit or Damage events and hide or remove instances, spawn effects, spawn real Actors in place of an instance etc.
-
The default class is FoliageInstancedStaticMeshComponent which is a subclass of HierarchicalInstancedStaticMeshComponent but has added support for Point and Radial Damage.
-
-
New: Added support for instanced mesh components (e.g. foliage) to FBX export.
-
New: Foliage painting now always trying to paint through filtered geometry. For example, when static meshes are filtered out foliage still can be painted on landscape bellow static mesh.
-
New: We no longer try to create physics data for InstancedStaticMeshComponent (eg Foliage) instances with a zero scale, which removes some PhysX warnings and improves performance.
-
Added a button to the Map Check warning about duplicate Instanced Foliage Actors to allow you to consolidate them.
-
Foliage can now be correctly spawned on top of Actors composed from Hierarchical Instanced Mesh components.
-
Running procedural foliage simulation will now mark only sub-levels that were actually affected by the simulation as dirty
-
Thumbnails in the foliage editor now update properly when hovered over.
-
We no longer try to create physics data for InstancedStaticMeshComponent (eg Foliage) instances with a zero scale, which removes some PhysX warnings and improves performance.
Cooker
-
New: General cooking performance optimizations.
-
New: Multiprocess cooking is in UnrealFrontend custom profiles.
-
New: New cooking stats system for more details ddc / package stats. Are saved into the
\Saved\Stats\ directory. -
New: Optimization to Save package improves cook times.
-
New: Performance improvements of saving and caching packages in the cooker.
-
Cooking dlc no longer includes assets from base game in the asset registry.
-
Fixed an occasional crash when cooking, where a material with a mismatching texture sampler type binding would try to looking an UEnum during cooking and hit a check().
-
Fixed asset registry getting out of date when using -iterate.
-
Fixed crash in cook on the fly when recompiling shaders.
-
Fixed failure to package a build when also playing via LaunchOn.
-
Fixed missing PS4 x64 dlls (pad/morpheus) and .uplugins during staging.
-
Fixed various issues that were only showing up during the process of packaging a project from the editor.
Gameplay Framework
-
New: Actor transforms when spawning.
-
The process of spawning actors has changed slightly. If an actor is spawned and its template's root component has a transform (for example, a RelativeRotation), that transform, including scale, will now be respected by the spawning code.
-
For certain cases where you are sure you want to spawn at the exact transform given and ignore any transform on the template's root component, we have added the SpawnActorAbsolute() function.
-
Check out DecalActor for an example of how this works in practice.
-
Notes when upgrading:
-
If you have custom actors or blueprints with transform data on the root component that was previously ignored, you will see different results when spawning them with 4.9. In this case the best fix is likely to be simply zeroing out the transform data, since it was ignored before anyway.
-
If you have added code somewhere to take this transform data into account before spawning, you will likely want to remove it, or else you will end up applying the transform twice.
-
-
-
New: A Remove Player analogue to Create Player is now available for use in Blueprints.
-
New: AActor::bPendingKillPending renamed to bActorIsBeingDestroyed and made private.
-
New: Added "BrakingFriction" for CharacterMovementComponent, optionally enabled by "bUseSeparateBrakingFriction" setting.
-
Previously GroundFriction was also used as the braking friction. This new setting allows separate control from the GroundFriction that affects turning control.
-
Added "BrakingFrictionFactor" which controls how friction is used in ApplyVelocityBraking(). (Note: this is 2 by default for historical reasons, but a value of 1 more closely matches the actual drag equation).
-
Different values are easily used in different movement modes by hooking in to OnMovementModeChanged and modifying BrakingFriction.
-
-
New: Added AbilityEndedCallbacks delegate to AbilitySystemComponent that broadcasts when an ability ends.
-
New: Added an automated test that will attempt to all variations of a new project. (IE C++ and blueprint and target platform for both mobile and desktop).
-
New: Added an automated test will parse and validate all available feature packs.
-
New: Added debug command ("p.VisualizeMovement") for showing in-world debug drawing of CharacterMovementComponent state including current velocity and acceleration.
-
virtual UCharacterMovementComponent::VisualizeMovement() can be overridden in child classes to add project-specific debug drawing.
-
-
New: Added GetServerWorldTimeSeconds() to return the simulated time in seconds of the server. This is safe to call on either the server or the client.
-
New: Added MaxRange and a Tag (FName) to noise parameters for AI hearing.
-
MaxRange is only used if > 0. It is modified (multiplied) by the loudness. Sensors must still pass their own range checks as well.
-
-
New: Added new Math functions to KismetMathLibrary:
-
RandomUnitVectorInConeWithYawAndPitch, creates an uniformly distributed random Vector within a cone defined by the given Yaw and Pitch values.
-
CreateVectorFromYawPitch, creates a Vector from the given Yaw and Pitch rotation values.
-
GetYawPitchFromVector, retrieves the Yaw and Pitch rotation values in degrees from the given vector.
-
-
New: Added optional interpolation curve to the MoveToLocation AbilityTask to support per-axis interpolation.
-
New: Added ShouldAcceptGameplayCue() function to GameplayCueInterface, to allow actors to opt-out of receiving gameplay cues under certain circumstances.
-
New: Adding the blueprint function GetSupportedFullscreenResolutions, which gets the list of supported full screen resolutions.
-
New: Can now bind mouse wheel not just as scroll up or scroll down, but also as an axis which returns the delta change in mouse wheel position.
-
New: Collision now supports a new "PhysicsOnly" option. These objects will only be used in the simulated physics scene, not the query scene.
-
Added ECollisionEnabled::PhysicsOnly option to round out all options of NoCollision, QueryOnly, PhysicsOnly, QueryAndPhysics.
-
Can be used for things like capes and hair that users may not want to be considered by scene queries.
-
-
New: Convenience function to get level name in BPs.
-
New: Exposed UPrimitiveComponent::CharacterCanStepUpOn variable and UPrimitiveComponent::CharacterCanStepUp() function to blueprints.
-
Also improved comments/docs on these to indicate that it only prevents step ups when bumping in to objects, not walkability on them (use walkable slope override for that).
-
-
New: Exposed some Vector : Integer arithmetic methods to Blueprints.
-
New: Gameplay Cues can now be specified via GameplayCueSets. Classes can implement IGameplayCueInterface to return a GameplayCueSet to use instead of the global set.
-
New: Performance: Optimized overlap detection during swept movement. Approximate 10% or greater reduction to swept movement cost when in the presence of overlaps (depending on scene complexity).
-
Overlaps at the end location are now computed based on tests against the individual candidates found during the sweep, rather than using a full scene query from UpdateOverlaps().
-
Changes in rotation still allow cached overlaps as long as the rotation is symmetric (ie couldn't have changed overlaps).
-
UpdateOverlaps() now avoids any processing for child components when done for the root component. This makes optimization simpler and children will test the parent anyway.
-
-
New: Revised feature pack parsing code. Feature packs can now be parsed via the manifest file eliminating the need to pack all feature packs.
-
This was used to implement the feature packs used for the shared resources now used in templates.
-
-
New: Smooth rotation for network corrections of simulated proxies in character movement.
-
New: Spawn Actor now accepts Scale properly.
-
Because of this, we added SpawnActor to accept FTransform as an input.
-
-
New: The class of the default physics volume can now be set via the World Settings properites.
-
New: When unloading a streaming level all objects are now marked pending kill to avoid any stray references to the objects that could prevent the level from being garbage collected.
-
New: You can now bind the Any key. This will respond to any key press/release event and follows the same rules for consumption that other keys follow.
-
"Always-loaded" sub-levels will now be fully loaded before gameplay begins when using seamless travel.
-
A graceful message for failure to load the default map is now shown followed by closing the application when travelling instead of crashing.
-
AActor::bPendingKillPending renamed to bActorIsBeingDestroyed and made private.
-
BeginPlay will no longer be called on a component that has seamlessly travelled from another level.
-
Broadcast PhysicsVolumeChangedDelegate even if the previous physics volume was null.
-
Bugfix to timers that are paused immediately after being set.
-
Calling TryActiveAbility will now call CanActivateAbility on the Primary Instance of the Ability Spec, if it exists. (If not we continue to do the previous implementation which will call CanActivateAbility on the CDO.)
-
Change FQuat tolerance within SceneComponent and PrimitiveComponent to allow smaller rotation changes to get through.
-
Changed KismetMathLibrary functions PointsAreCoplanar, LinePlaneIntersection, and LinePlaneIntersection_OriginNormal to be BlueprintPure.
-
Component attachment is now replicated correctly to clients.
-
Console command ServerTravel can now pass parameters to the map.
-
Fixed characters not rotating with a base object that is moving at a very low rotation rate in games with a high frame rate. Quat comparison tolerance was too strict.
-
Fixed Editor crashing due to SetMaterial getting called on a DestructibleComponent during the construction script.
-
Fixed crash exiting Play in Editor if you had travelled to or restarted the level being edited during the PIE session.
-
Fixed crash when the component specified as the player's audio listener component has been destroyed.
-
Fixed Sound Mix failing to be pushed if it had been popped in the same frame.
-
Fixed using the PIE prefixed map name when trying to seamless travel in multiplayer PIE.
-
Fixed a crash which occurred on PIE exit after enabling Show Collision in game.
-
Fixed an issue with feature packs registering for super search which could result in multiple registrations which then caused an assert.
-
Fixed camera jumping when trying to interpolate back to original view target. (Contributed by ArCorvus, pull request 1215.)
-
Fixed CameraModifier blending issue that occurred with blends longer than 1 second.
-
Fixed Character::CanJump() event no longer showing up as overridable in the BP event menu.
-
Fixed crash when adding an instanced component with a native sub-component to an actor with a blueprint created root component.
-
Fixed crash when loading a map that was saved with a WorldSettings object of a class that no longer exists.
-
Fixed crash when overlap events (triggered by toggling bGenerateOverlaps or changing collision setting) destroy components or cause other overlaps to end.
-
Fixed issue where a Matinee event which stops the Matinee sequence could cause a crash when updating subsequent tracks.
-
Fixed issue where EndAbility was not reentrant-safe due to EndAbility being called again from inside of the call to K2_OnEndAbility.
-
Fixed issue with camera shake oscillations not working in non-local play spaces.
-
Fixed GameMode potentially outputting misleading log message with incorrect class name. (Contributed by slonopotamus, pull request 1319.)
-
Fixed Navigation Mesh not getting created correctly for a ProceduralMeshComponent's mesh due to not having its bounds updated.
-
Fixed NavWalking movement mode replicating to network proxies as Custom movement.
-
Fixed one shot reverse behavior in interp to component.
-
Fixed physics volume change notifications not working for the first change in physics volume.
-
GameplayEffects now have a higher granularity on the client prediction of time remaining on active effects.
-
Improved comments on actor set location/rotation/transform functions, especially regarding bSweep and bTeleport.
-
Interpolate simulated position faster when network character proxy is coming to a stop. Reduces visual overshoot past end location.
-
Keys bound via key or action events will now count as having consumed the event even if there wasn't a pressed or released event this frame preventing axes using that key in lower priority input components from being active on other frame.
-
Made UCharacterMovementComponent::GroundMovementMode private, and provided Get/Set methods.
-
Enforces that GroundMovementMode is only ever Walking or NavWalking.
-
Set method will switch movement modes if currently a different ground walking mode.
-
Cleaned up constants in Pack/UnpackNetworkMovementMode() and made sure we only have a valid ground mode (Walking or NavWalking).
-
-
Made it clear that MoveIgnoreActors does not apply to movement from physics simulation.
-
Made some useful CameraShake instance variables public and BP-accessible. Also Added UCameraAnimInst::SetScale().
-
Make sure client and server perform movement with the same acceleration value after network rounding. Reduces accumulated client position error.
-
Marked bTeleport' flag as Advanced for blueprints wherever we do so for the bSweep flag.
-
Negative values are no longer allowed in the editor for CapsuleComponent radius or half-height.
-
Pawns whose Tick functions have bStartWithTickEnabled set to false will no longer start ticking when possessed.
-
Performance: Controller::SetControlRotation() now avoids doing work if nothing changes.
-
PlayerCameraManager crashing on empty entries in DefaultModifiers array.
-
PlayerController uses a reliable RPC to request that the pawn gets resent from the server if it has not yet replicated. Previously this was an unreliable call so it didn't always work.
-
Revised comment on interp to component bPauseOnImpact to better reflect functionality.
-
SceneComponent AttachChildren array is now replicated so that it is consistent with AttachParents.
-
SetCullDistance on UPrimitiveComponent now accepts 0 as a legal distance. A distance of 0 means the primitive is not culled at any distance.
-
The data for automated line test was incorrect causing false failures.
-
Timeline components will no longer execute their tick function when not active.
-
We no longer ignore hit testing in APlayerController::GetHitResultAtScreenPosition if the mouse isn't directly over the viewport. That function can be used regardless of the state of the mouse, so that logic has been moved elsewhere.
-
When transitioning levels EndPlay will no longer attempt to be executed for an Actor that was destroyed by another Actor's EndPlay call.
-
You can now set the GameMode HUD class to be none.
Learning Resources
Documentation
-
Improved docs for Add Yaw Input and Add Controller Yaw Input etc., to point to the scaling values that are applied.
-
Improved docs on Movement Component and Floating Pawn Movement to indicate that collision is wholly dependent on the Updated Component (normally the root component).
Sample Content
-
Fixed UI icons not being present in sample content.
Localization
-
New: Added game native culture setting to control which culture's localization data the editor loads for game assets. Game assets now display the specified culture's localization data when in the editor.
-
New: Added initial support for working directly with Localization Services in the editor. Allows you to upload and download translations to online services for localization. Allows plugins for specific localization service providers (OneSky, etc). Also created first localization service plugin for OneSky.
-
New: Added the source location information of a localization archive entry as an "extracted comment" in PO files when exporting.
-
New: Culture names now consistently use hyphens rather than underscores. Culture names with underscores are still accepted.
-
New: First pass of the OneSky plugin: Extend Localization Dashboard toolbar with OneSky buttons for "Import all cultures/targets from OneSky" and "Export all cultures/targets to OneSky".
-
New: Fixed live culture swapping when in certain configurations such as shipping. Enabled use of "-culture=" switch on command-line in all configurations.
-
New: Foreign archives now generate entries for the native translation of the native source as though it were the native source - the result is that the native translation will also be translated in the foreign culture. Localization resources now use the native translation of the native source as though it were the native source, specifically when looking up the foreign translation to use from archives - the result is that the native source will use the foreign translation of its native translation.
-
Fixed broken legacy support for SourceFileSearchFilters setting in GatherTextFromSource steps in localization configuration scripts.
-
Fixed dashboard handling of paths rooted in drives other than the current drive of the editor.
-
Fixed issues selecting language and region combinations for Chinese and Portuguese in the Region & Language page of the Editor Preferences.
-
Fixed non-functional PO import/export buttons from the translation editor.
-
Localization commandlet JSON file writing no longer fails if source control is enabled but the files don't already exist on disk.
-
Localization dashboard now appropriately adds the native culture setting to generated localization configuration scripts.
-
Retrieving localized metadata will prefer local changes to the metadata if they do not match what is expected by localization.
-
The Category Names of Components in blueprints are no longer gathered for localization when the "ShouldGatherEditorOnlyData" setting is false.
-
Updated logic in commandlet for gathering text from assets which was falsely reporting that nothing was gathered because no files were loaded. Now properly reports whether there were any packages found to be processed, rather than if any need to be loaded and processed in a deferred manner.
Networking
-
New: A warning will now be printed to the output log if an actor tries to send a non-multicast remote function but has no owning connection.
-
New: Added a check to see if the character is pending kill before calling TickCharacterPose() as the character can be marked for destroy after PerformMovement.
-
New: Added a file NetConstants.h which holds MAX_PACKET_SIZE which can be changed to update the MTU. Changed the MTU from 512 to 1000.
-
New: Added a macro CLOSE_CONNECTION_DUE_TO_SECURITY_VIOLATION to AssertionMacros.h which closes a connection, logs it, and provides a debug string to the client.
-
New: Added a scale component to PackageMapClient and now use a 1 bit check whether Location, Rotation, Scale, and Velocity have been serialized.
-
New: Added ability to save json in condensed format.
-
New: Added ability to search for replays by meta tag.
-
New: Added ability to track which users were in replays.
-
New: Added ability to view recently viewed replays.
-
New: Added LogRep and LogRepTraffic to EngineLogs.h and changed over some UE_LOG calls to use the new logs.
-
New: Added NMT_SecurityViolation where servers pass a debug string to clients to inform them of a disconnect.
-
New: Added support for the engine to notify the replay streaming service when players join in progress.
-
New: Added the ability to find replays that you participated in.
-
New: Added the Packet Handler Framework which allows for transformation of packets, including Encryption, Compression, Reliability.
-
New: Added Third Party Library CryptoPP to the Third Party Source directory.
-
New: Added UE_SECURITY_LOG to AssertionMacros.h which logs security events.
-
New: Encryption Handler components that use the CryptoPP library and Packet Handler system to encrypt packets.
-
New: Reduced bandwidth usage by up to 15% or more by compressing replicated location, velocity, and rotation values more aggressively.
-
The amount of bandwidth savings you see in your project will vary depending on how much of it consisted of actor movement replication.
-
This does reduce the precision of these values slightly, but it should not cause noticeable artifacts in most cases. The level of compression is now configurable in the "Replication" section of the Class Defaults, in case higher precision is needed.
-
Using "Round Two Decimals" for the location and velocity, and "Short Components" for rotation will be equivalent to the precision that was used in 4.8.
-
-
New: UNetConnection has a new GetWorld function. It will try to get the world from the owning net driver and failing that the owning actor.
-
Added #IF_WITH_EDITOR code guard to remove code that derives GetNetMode if in PIE.
-
Added voice-related exports to NetConnection.h. (Contributed by merlin91, pull request 1234.)
-
Added check in NetConnection for the MaxPacketSize being passed into InitConnection.
-
Added numerous changes to stop replicating client on the server when bReplicateMovement is false.
-
Added PreReplication of components when PreReplication of actors is called.
-
Added two functions which will attempt to derive the NetMode from other data if the NetDriver is null.
-
Added code guards around AttemptDeriveFromPlayInSettings instead of within the function so it won't be compiled in release builds.
-
Changed MTU back to 512 from 1000 as discussions of MTU changes are still happening.
-
Changed the serialization code in PackageMapClient.cpp to follow more consistent serialization conventions.
-
Changed FOnActorChannelSpawn from one param to two params.
-
Changed FOnReplicatedActorSpawn from two params to one param.
-
Disabled single process PIE seamless travel while we work on a long term fix.
-
Fixed crash that could occur while scrubbing in replays.
-
Fixed a bug where time dilation was incorrectly affecting gamepad during replay playback.
-
Fixed a crash that could occur if replay streaming failed after a "stop streaming" command was issued.
-
Fixed a crash that could occur when viewing live replays.
-
Fixed a crash when starting to record a network profile in some cases.
-
Fixed a rare bug that could cause network game clients to fail to load some assets in cooked builds.
-
Fixed a rare crash that could occur when a network client joins a game.
-
Fixed issue where the last checkpoint wouldn't load if there wasn't any stream info after it.
-
Fixed APlayerController::SpawnLocation not being replicated. (Contributed by bozaro, pull request 633.)
-
Fixed an issue where the engine was generating corrupted network profiler files if the URL of the loaded map contained more than about 255 characters.
-
Fixed potential crash if a demo net driver is left idling for too long.
-
Fixed the reported size of replicated functions in network profiles. Some bits that were incorrectly reported as being in the parameter section are now correctly reported as being in the header section.
-
Live replay timeouts when first connecting are handled correctly.
-
Multiple running instances of the same project can now record network profiles simultaneously.
-
Replay streamer now generates error messaging and stops demo recording when it fails.
-
Special cased PIE dedicated server or client without server in World.cpp.
-
The demo net driver for replays is destroyed when a seamless travel copies the world data to ensure it always gets destroyed.
-
We no longer spawn particle system components on dedicated servers, reducing both memory and performance overhead.
-
When viewing replays, character smoothing between updates should be much smoother.
-
When scrubbing replays, camera will continue to follow the original view target.
Online
-
New in BuildPatchServices:
-
Improved logic for detecting existing installations when running an installer.
-
Added support for SHA1 verification of chunk match so that generation does not need to load existing chunks.
-
Exposing list of files in the build via the manifest interface.
-
Patch generation now makes use of available CPU cores to improve processing speed.
-
-
Fixed a variety of issues with BuildPatchServices:
-
Detecting previous move when resuming a patch.
-
Resuming an installation on some platforms where the file API would not allow seeking on the file handle.
-
Verification stage not being capable of cancelling.
-
Incorrect error string generation.
-
Potential cloud enumeration deadlock for patch generation.
-
Optimising installer attribute setting logic, as well as improving reported progress information for this stage.
-
Removed uses of helper function FPaths::FileExists which is not robust on all platforms.
-
-
Fixed XMPP MUC room members populated correctly.
-
Fixed player's presence status on Steam so that it now shows their actual status instead of the string needed to connect to their game.
-
Fixed a rare issue where attempting to save out Steam achievements multiple times in the same frame could prevent further Steam tasks from executing.
Other
-
New: Added a generic motion controller key abstraction
-
This allows multiple physical devices (e.g. left and and right hand controllers) to be routed to a single player in the engine.
-
New motion controller inputs specify which hand they're for. E.g. Motion Controller (L) Grip 1.
-
-
New: Added a render array to texture maxscript which can be used to bake textures out of unreal's blueprints given a certain data format.
-
New: Added entitlement checking for Gear VR, which lets developers verify that their app has been purchased through the Oculus store.
-
New: Added functions to get and set the World to Meters scale from Blueprints.
-
New: Added in Motion Controller Component, which you can add to any actor, and will set its location and orientation to that of the player's motion controller.
-
New: Created a Flurry analytics plugin for iOS.
-
New: Improvements to the console:
-
Console commands are now searchable. To search, begin with a "?" followed by your search terms separated by spaces. For example, to search for commands that contain both foo and bar you would type "? foo bar".
-
The autocomplete feature has been updated so it will continue to display an exact match while you enter parameters to the command.
-
-
New: Leap Motion Controller now supports HMD mode, along with image passthrough.
-
New: The multicast (broadcast) analytics module is now a plugin to make it easier to use.
-
New: Updated engine code to support the Oculus 0.7 SDK. Engine will be hotfixed with 0.7 revisions when the runtimes are made public.
-
New: Updated Gear VR support to use the 0.6.0 mobile SDK.
-
Fixed Oculus plug-in forcing frame synchronization every frame. Engine will now allow one frame of buffering.
-
Fixed VR PIE not showing up when editor tabs with viewports are visible.
-
Fixed VR preview occasionally going black when other tabs are open.
-
Fixed a bug preventing the contents of web browser widgets from displaying properly when stretched across multiple screens.
-
Fixed a crash that occurred when the Oculus service was running, but no device was plugged in.
-
Fixed comments on linkable element types so the editor shows correct tool tips when selecting types.
-
Fixed example environment collision to ensure consistent results within level.
-
Fixed issues with post-processing not rendering correctly in stereoscopic when in ES2 / forward rendering.
-
Fixed jittery movement with Leap Motion hands.
-
Exported SteamVR function library, for use in projects that want to interface with SteamVR through C++.
-
Integrating fixes for Mac / Open GL virtual reality pipeline with Oculus.
-
Custom Present now works with the Open GL RHI.
-
Devices now update when paused.
-
-
Renamed the "Desktop" Target Platform to "AllDesktop" to stop conflicts with the Desktop directory.
-
Set the default frame buffering for HMDs to be one frame, to support compositor-based rendering. This fixes an issue in 4.8 where non-Oculus devices were feeling laggy.
-
Added a dialog box to alert users when there is a problem loading a plugin descriptor file.
Paper2D
-
New: Exposed a way to set collision thickness / offset for tile maps and tile layers, and added a RebuildCollision method for use after SetTile calls.
-
New: Tile Maps: Changed the default collision domain for Tile Maps from None to 3D.
-
Note: Collision must still be authored in the tile set editor per-tile in order for any actual collision geometry to be generated
-
-
Changed asset set methods on Paper2D components to use AreDynamicDataChangesAllowed, allowing asset updates on components with Movable=Static in a construction script.
-
Fixed a crash when building lighting for a map that contains a placed tile map component or grouped sprite component.
-
Fixed an issue where body elements of a 2D terrain spline do not have collision.
-
Fixed an issue where sprite sheets could not be reimported in a project that was converted from an older version.
-
Fixed an issue where sprite trim/rotate settings were not reimported properly. Also increased speed of reimport process.
-
Fixed inconsistency between vertex colors on Paper2D assets and static meshes.
-
All sprite colors are now treated as being defined in linear space, and existing assets will be converted on load.
-
Physics
-
New: Added GetPhysicsLinearVelocityAtPoint, SetCenterOfMass, SetMassOverrideInKg, GetClosestPointOnCollision to PrimitiveComponent.
-
Also allow specifying duration for PrintString & PrintText functions.
-
Both contributed by tk-master, pull request 1335.
-
-
New: Added a project wide setting for turning off the default per poly complex collision.
-
New: Added GetMassScale function to PrimitiveComponent and exposed it to Blueprints.
-
New: Added SetIgnoreMoveInput and SetIgnoreLookInput functions to PlayerController.
-
These functions reset the Move or Look ignore flag to its default value.
-
-
New: Added SetPlaneConstraintEnabled function to MovementComponent and exposed it to Blueprints.
-
New: Added support for parallel blend physics.
-
New: Added support for welding complex collision. This means we now support multiple trimeshes per BodySetup.
-
New: Added the ability to create Blueprint variables of the Physical material type.
-
New: Added time dilation in PhAT.
-
New: Exposed GetCollisionObjectType and GetCollisionResponseToChannel to blueprints.
-
New: Exposed skeletal mesh motor controls to blueprints.
-
New: Exposed the teleport flag for movement nodes and functions. This makes it easier to control velocity and collision of objects being moved.
-
New: Exposed UpdateJointsFromAnimation to PhAT. This makes it easier to tune animation driven motors.
-
New: Increased the default max angular velocity to 10 revolutions per second.
-
New: Introduce sleep and wake events that user can hook into. This allows you to get callbacks whenever physics simulation wakes or puts an object to sleep.
-
New: Sub-stepping physics is now supported on mobile.
-
New: Trimeshes with negative scale no longer need a separate cooked mesh. Saves memory and streaming time.
-
New: Turn constraint projection on by default and set their values to something reasonable.
-
Fixed collision shapes not being drawn for non-uniformly scaled objects.
-
Fixed wind forces being applied to APEX cloth even when no sources are present.
-
Fixed bIgnoreOwningActor option on URadialForceComponent not working for forces.
-
Fixed bReturnPhysMat not being respected for heightfields. Also made sure to init Hit.FaceIndex to INDEX_NONE when it's not filled in.
-
Fixed a crash when passing no component to Component Overlap Components.
-
Fixed a crash that occurred when using a material with PN Triangle tessellation enabled on Cloth.
-
Fixed cloth crash when transitioning between worlds containing the same cloth asset.
-
Fixed crash in auto-convex tool when no sections have collision, and simplify status message.
-
Fixed destructible component crash when transitioning between worlds with substepping enabled.
-
Fixed destructible mesh root chunk transforms not being correctly updated when not visible, leading to the render mesh being offset from the actual location of the chunk.
-
Fixed destructible meshes flickering in cooked builds due to incorrect root bone transforms.
-
Upgrade to final PhysX 3.3.3 (before we had a preview version) fixes various issues as found in their release notes.
-
Auto-convex generation now ignores sections with collision disabled (suggestion from @ManOfLode).
-
Changing PhysicalMaterial override on an instance now correctly updates mass properties.
Platforms
-
New: A prominent message is show when a user attempts to package a game that does not have binaries built.
-
New: Added support for optional packaging blacklist per platform and build configuration.
-
Create a text file in [Project]/Build/[Platform] called PakBlacklist-[Config].txt where Config is Development or Shipping
-
Each file being staged will be checked to see if the beginning matches any line in the file. If so, it is skipped. Check the log to see a list of excluded files.
-
-
New: The new event stats are now enabled for platforms that use the pthreads implementation.
-
New: When packaging a game for a platform, errors and warnings are now presented to the Message Log.
-
This means that errors and warnings can be identified quicker.
-
-
Config Hierarchy edit button is now enabled even when some files in the ini file hierarchy are read-only.
-
Fixed a bug during staging where plugins may not be discovered properly.
-
Fixed a cookonthefly bug where plugins would not be detected properly.
-
Fixed a mutexattr leak for pthread platforms.
-
Fixed issue where ChunkID assignments set by the editor are ignored.
-
Fixed Slate style warnings when loading a project on some platforms.
-
Remote Mac or iOS building from Windows now return clearer set-up errors.
-
Virtual joysticks now deal with screen resolution or orientation changes properly (repositioning and sizing the controls).
Android
-
New: NVIDIA AndroidWorks installer.
-
TADP replaced with NVIDIA AndroidWorks for Windows and Mac OSX.
-
Please remove any previous TADP installation before running the new AndroidWorks installer. An EXE for windows and a DMG for OSX are located in UE4/Engine/Extras/Android.
-
Included in new AndroidWorks:
-
NDK r10e (64-bit toolchain).
-
SDK (24.2.0).
-
Nsight 3.1 debugger Visual Studio extension with support for all Android ABIs.
-
-
-
New: Added support for Immersive Mode on Android devices of version 4.4 and up.
-
New: Project generation now compatible with AndroidWorks (Nsight 3.0+).
-
New: Supported added for ES3.1 builds. These can be built at the same time as ES2.0 builds of an application..
-
New: Enabled ld.gold on ndk r10e (clang 3.6), and added expermental arm64 compiler arguments.
-
Added long suffix to file length in generated OBBData.java. (Contributed by demuyan, pull request 1405.)
-
Added screenSize to android:configChanges in AndroidManifest.xml to prevent onDestroy issues on suspend.
-
Better handling of multiple Android build targets.
-
Corrections for ES 3.1 + AEP shaders.
-
Custom rules added to deal with newest SDK releases of build.xml not defining the paths to some tools.
-
Disable GearVR plugin for unsupported Android platforms.
-
Enabled shadow warning for Android targets and cleaned up the ones found.
-
Fixed a problem where pressing 'back' while downloading or verifying an OBB on Android could cause the application to crash.
-
Fixed Android ES 3.1 + AEP so it runs the high-end Rivalry demo again (regression from 4.8).
-
Fixed black-screen for ES 3.1 when not using MobileHDR (e.g. Tappy Chicken).
-
Fixed case where some Android devices did not render BSP meshes, e.g. Galaxy S3 (Mali) or Galaxy Note 2 (Mali).
-
Fixed releasing queries on Android ES 3.1. Before, it could leak query memory/resources.
-
Fixed: Rendering corruption when using a fully rough material on some Android devices (eg: Nexus7, Nexus4).
-
Fixed compiling problems with non-unity builds for Android.
-
Improved Android ARMv7 debug flags.
-
Invalidates cached resolution when application returns from background to handle receiving new window.
-
Keep the last export of each Android NDK/SDK path from .bash_profile instead of of the first one if not set in ini (Mac).
-
Make sure the UE4Game and UE4Game/[GameName] directories are created so save games and logs work properly.
-
Only use -fno-function-sections on Clang 3.6 or later on Android to correct issue with backward compatibility to older toolchains.
-
OpenWrite does not use O_APPEND but preserves seek to end of file behavior if append requested on Android.
-
Pass correct event for onDestroy so application terminating delegate called, but do NOT depend on this; there is no guarantee onDestroy will be called by the system. Any state you want to save should instead be handled by ApplicationWillEnterBackgroundDelegate.
-
Removed libGLES3 dependency from libvrapi.so (part of Oculus mobile VR library for GearVR) so older Android versions supported.
-
Resolved issues with incorrect screen resolution being using when returning back to the application from sleep mode or the home screen.
-
Sensor device orientation options are now supported.
-
Strips debug symbols from libgnustl_shared.so for distribution builds on Android.
-
Updated Android x86 PhysX libraries.
-
Updated FAndroidPlatformMemory::BinnedAllocFromOS for compatibility with SDK 21.
-
Use gnu-libstdc++ 4.8 for NDK level 19, and allow 4.9 for higher NDK levels.
-
Cleaned up some tooltips.
iOS
-
New: Added initial support for the Cloud Kit framework. Cloud-based databases can be accessed via the Online User Cloud Interface API and the Online Shared Cloud Interface API.
-
New: Added Remote Push Notifications courtesy of Get Set Games. All features of remote notifications can be accessed from blueprints and code.
-
New: Added some convenience functions to the In-App Purchase feature. These functions provide access to various localization data for the products. (Courtesy of Get Set Games.)
-
New: Added support for building games against the iOS 9 SDK.
-
New: The ability to restore In-App purchases has been added. This feature can be accessed via the Restore In-App Purchase blueprint or through code utilizing the Online Store Interface.
-
New: Updgraded Facebook SDK on IOS to version 4.01.
-
Fixed a crash on game startup when running on iOS 9.
-
Fixed a crash when entering text into a text edit field on IOS.
-
Fixed a hang when popping up the message box on iOS.
-
Fixed an intermittent crash on game startup when utilizing Metal on iOS.
-
Fixed an issue with initializing remote building for iOS on OS X 10.9.
-
Fixed an issue with non-existent dSYMs being added to the build receipt when building for iOS with dSYM generation enabled.
-
Fixed an issue with the xcode-select command when building using a remote Mac.
-
Fixed loading the project ini files for every file in a game project when building for iOS. This results in faster build times.
-
Fixed the date check when looking for valid signing certificates on the Mac.
-
Increased the heap size of the game thread on iOS. This prevents out of stack space crashes.
-
The iOS deployment server now correctly handles non-ASCII characters in the path or filename of files.
-
The splash screen will now properly be removed if a message box is displayed.
Linux
-
New: Added CodeLite project generator and source accessor. (Contributed by yaakuro, pull requests 1378 and 1379.)
-
New: Added Linux platform analytics.
-
New: Dedicated servers will now flush logs at regular intervals (30 seconds by default, configurable via ServerFlushLogInterval).
-
New: Setup scripts will refuse to run on Mono older than 3.x; old Mono versions are known to be unusable for building UE.
-
New: Significantly increased length limit for DDC (derived data cache) paths on Linux; previous numbers were based on smaller Windows MAX_PATH limit.
-
New: Switched file dialogs from Qt/GTK to Slate; engine no longer depends on presence of said libraries in the system.
-
New: The engine and tools will refuse to run with root privileges.
-
New: Upgraded Linux cross-toolchain to clang 3.6.0.
-
Engine libraries should no longer use initial-exec TLS model (this prevented loading libraries under certain circumstances).
-
Fixed a crash when saving assets with localized names.
-
Fixed building *Editor targets using QtCreator. (Contributed by salamanderrake, pull request 1171.)
-
Fixed crash on a dedicated server when the higher level code tries to access display metrics. (Contributed by Stormwind99, pull request 1232.)
-
Fixed file handles leak on Linux on program restart.
-
Fixed hot reload on Linux. (Contributed by zaps166, pull request 1178.)
-
Fixed inability to compile Linux ARM binary (regression introduced late in 4.8.x cycle).
-
Fixed inability to locate bundled Steam libraries.
-
Fixed Linux editor not honoring "Use less CPU when in Background" setting. (Contributed by zaps166, pull request 1207.)
-
Fixed Linux toolchain not honoring "enable exceptions" build configuration setting. (Contributed by zaps166, pull request 1135.)
-
Fixed minimize/maximize window events not being fired in certain circumstances. (Contributed by yaakuro, pull request 1115.)
-
Fixed multiple problems with localized project names and directories.
-
Fixed packaging failure on Linux when the project is placed next to the engine directory.
-
Fixed popups not appearing under certain circumstances or being non-interactive; mouse relative movement being wrong with multiple windows; multiple other improvements. (Contributed by yaakuro,pull request 1375.)
-
Fixed ungraceful handling of OpenAL initialization failure (Contributed by slonopotamus, pull request 1206.)
-
Fixed Unicode keyboard input.
-
ICU libraries are now properly accounted for in UBT/UAT as a run-time dependency.
-
Improved mouse position reporting when the frame rate is low. (Contributed by ExpiredPopsicle, pull request 1369.)
-
Including a libpng module in Linux dedicated server no longer breaks the build (that was an artificial limitation that is not relevant anymore).
-
Superfluous axis events from controllers are no longer sent multiple times per frame; controller IDs can be disjoint. (Contributed by chipgw, pull request 1122.)
-
Switched to using SDL key codes instead of raw keyboard scan codes. This fixes various improperly mapped keys and removes US QWERTY assumption in general.
-
UBT will properly recognize when UHT exits abnormally on Unix platforms (Linux, Mac) and report it as a crash.
Mac
-
New: Added support for Xcode 7 (for iOS 9 and MacOS 10.11).
-
Improved how the Xcode path is discovered in UBT. (No more hardcoding, unless desired - it uses the current Xcode, or xcode-select when building from command line.)
-
Added some UBT utility functions. (Log.TraceInformationOnce to print out a message only one time, and Utils.RunLocalProcessAndReturnStdOut to easily capture output.)
-
-
New: Bundled Mono for Mac updated to version 4.0.2.
-
New: CrashReportClient can now generate the source context showing where a crash has occurred in the diagnostic report on OS X.
-
New: Generate debug symbol files on Mac OS X for Development & Shipping build just as we do for Windows.
-
New: Mac users can now emulate right-click using Control key + left-click.
-
Changed the way the CrashReportClient is launched on Mac OS X to avoid a potential deadlock.
-
Disable OpenGL GPU timing on Nvidia GPUs and entirely on OS X 10.9 (Mavericks) to avoid crashes in the OpenGL drivers.
-
Fix a crash when launching an external process on Mac OS X caused by over-releasing the path to the executable.
-
Fix reflections on translucent surfaces for OpenGL by moving the ReverseBits32 function from MonteCarlo.usf to Common.usf and using it on platforms that don't natively support the reverse bits intrinsic.
-
Fix transition from WindowedFullscreen to regular FullScreen and back again on Mac OS X.
-
Fixed a problem with windows not rendering on OS X 10.11 beta.
-
Fixed emitting the callstack of the crashed thread to the log on Mac OS X.
-
Fixed a crash on auto-importing movies.
-
Fixed issues with playing multiple movies in a row.
-
Fixed Rename option in various context-menus on Mac OS X by ensuring that the correct window deactivation message is sent when closing the active window.
-
Fixed setting of the current working dir on Mac for paths that contain non-ANSI characters.
-
Fixed splash screen rendering on OS X 10.11 beta.
-
Fixed tooltips rendering on OS X 10.11 beta.
-
Fixed window activation in a case where mouse-down event changes focus to a new widget.
-
Fixed mouse position setting/reporting in fullscreen mode.
-
Fixed the Mac input event code generating incorrect key-up or key-down states for modifier keys.
-
Increased the stack size for all threads to work around some crashes.
-
Made the Xcode source accessor more robust on OS X by ensuring that the Xcode project required exists and allowing the user to switch to a different application while waiting for Xcode.
Playstation 4
-
New: Added RE_Z feature to shader definitions.
-
New: Added saving of Crash Context during coredump.
-
New: Added support for conservative depth optimization to PS4.
-
New: Added support for the FirstInstance draw optimization. Reduces the number of RHI commands generated for instanced drawing.
-
New: Added support for the new Wave shader compiler. Enabled by default. Controlled by console variable r.PS4UseWaveShaderCompiler.
-
New: Added support for the shader complexity view mode to PS4.
-
New: Added the option to strip PS4 shaders of optional debug data. Enabled by default. Saves approximately 75% of the memory cost of shaders. CVAR is r.PS4StripExtraShaderBinaryData and is enabled by default.
-
New: Always create a pak file when packaging for distribution and allow distribution builds of non-shipping configs.
-
New: Disabled DispatchDraw support form LCUE to reduce CPU overhead as this feature is not currently used.
-
New: Enabled compiler warning for shadowed variables and fixed known instances of the warning.
-
New: GPU memory allocator for PS4 has been changed to pool small allocations. Fixes problems some licensees were seeing with allocator performance gradually degrading over time.
-
New: MediaFramework movie playback on PS4 now uses the new AvPlayer decoder. Conversion to RGBA is now performed on the GPU.
-
New: PS4 ContinuousSubmit toggle is now available in shipping.
-
New: Reduced GPU Context Rolls by only setting setCbControl, setActiveShaderStages and changing ring buffers when needed. Saves about 100 context rolls and 0.1ms of GPU in RenderTestMap.
-
New: Removed support for the older 60hz Morpheus kits.
-
New: Support for SDK 2.0 has been removed.
-
New: Unused files are now deleted from the device during iterative deployment.
-
New: Updated the Windows DualShock plugin to work with PS4 SDK2.500.
-
Fixed a bug where leaving a PSN session would not leave the session properly.
-
Fixed a bug where MediaFramework audio playback was not working on PS4.
-
Fixed a crash when using the experimental LightGrid.
-
Fixed a race condition in the ps4 temporary block allocator that could cause intermittent crashes.
-
Fixed an intermittent crash in reflection captures.
-
Fixed audio not resuming after being paused.
-
Fixed crash in DrawPrimitiveUP when using parallel rendering on PS4.
-
Fixed Cursor CurrentPosition not getting initialized.
-
Fixed DevKitUtil project to use SCE env var for ORTMAPIlib path instead of hardcoded path.
-
Fixed failing to close the current running UE4 app when packaging which can cause the packaging to fail due to locked files.
-
Fixed handling of failure to launch elf when using PS4DevKitUtil.
-
Fixed huge timeout when automatically trying to turn on a devkit that is unreachable. Devkits must now be turned on manually.
-
Fixed memreport -full crashing inside of PS4 audio buffers.
-
Fixed movie streamer leaking audio ports.
-
Fixed permanently overriding the cache type of a texture when setting a UAV.
-
Fixed PS4 rendering artifacts when dbuffers are enabled, but there are no dbuffer decals rendering.
-
Fixed recenter command for Morpheus HMDServer builds.
-
Fixed Scissor GNM Validation errors.
-
Fixed tearing during startup movie playback. Also we now tick the startup movieplayer at a higher rate for smoother playback..
-
Fixed texture updating for certain texture formats.
-
Fixed the reported 'Physical' memory pool size for PS4 to correctly match the size of the main CPU memory heap.
-
Fixed TMap visualizer and added missing visualizers to the .natvis.
-
MediaFramework no longer waits a full 10 seconds to start movies on PS4 regardless of the time to actually start up the movie.
-
Morpheus projects will now fall back to normal 2D rendering rather than crashing if Morpheus is not detected on boot.
-
Optimized vertex and index buffer write locks on PS4 to no longer require an extra memcopy.
-
Path shortening is no longer applied when reading from /hostapp to support custom workflows.
-
PS4 draw call stats are now in a verbose stat group to avoid stat spam.
-
PS4 now always attempts to pan for surround sound.
VR
-
New: MSAA is now enabled by default when running on GearVR on Galaxy Note 4 and Galaxy S6 devices. You can disable this by setting gearvr.EnableMSAA=0 in your ConsoleVariables.ini file.
-
Fixed SteamVR public module interface class not hooked up to actual module class.
-
Fixed stereo rendering not working when Playing in VR while Blueprint editor was open.
HTML5
-
New: HTML5 networking plug-in is now enabled by default.
-
New: HTML5 SDK is now included with the Engine.
-
New: Packaging HTML5 on Mac deploys a double-click script for HTML5LaunchHelper to avoid the need to use the command line.
-
New: Reduced emitted build size by using compression.
-
New: upload to S3 for serving HTML5 builds.
-
Added the ability for HTML5LaunchHelper to server to remote machines not just localhost.
-
Changed the location of .emscripten SDK config file to no interact with the any other pre-installed SDK on the machine.
-
Fix issue with HTML5 web server not flushing sockets. Fixes issues with clients not disconnecting correctly.
-
Fixed 3d audio spatialization on HTML5 and Linux.
-
Unified HTML5 and Linux OpenAL implementation by having the HTML5 platform use the Linux implementation.
-
-
Fixed multiple HTML5 fullscreen issues across browsers.
-
Fixed texture read issue that caused landscapes to appear mostly black in HTML5.
-
We now properly copy the web server as part of the packaging process.
Windows
-
Changing OS Version for minimum supported OS on windows, no longer requires an editor restart.
All Mobile
-
New: Changed how non-power-of-two textures work on platforms that don't support them. Instead of silently failing, it will replace contents with an "error texture" so you can see on device what to do, instead of seeing nothing.
-
New: Games now have more control over the login process in Game Center on iOS and Google Play on Android.
-
The login UI no longer appears automatically during engine startup if the iOS or Google Play online subsystems are enabled. This was causing various timing issues, and games had no way to control when it appeared.
-
Games must now explicitly invoke the system's login UI by calling either "IOnlineExternalUI::ShowLoginUI" from C++ or "Show External Login UI" from Blueprints. These are asynchronous operations that allow the game to defer any other online operations, such as achievement or leaderboard queries, until after a user has successfully logged in.
-
Added a new Blueprint node "Is Logged In" to get the login status of a user.
-
Implemented the C++ function IOnlineIdentity::Logout and added a new Blueprint node "Logout" for the Google Play online subsystem.
-
This feature, along with the external login UI support, should allow games to implement a login/logout button.
-
Note that this functionality is not supported on iOS as Game Center itself does not support explicit logout from within a game.
-
-
-
Remove redundant checks for Pixel-Buffer-Object support from the OpenGL RHIUpdateTexture2D & RHIUpdateTexture3D functions to allow them to be called on mobile. (Contributed by deM-on, pull request 1086.)
Rendering
-
New: Added a material function that can convert RGB colors to HSV.
-
New: Added ability to create a texture UAV to a specific mip and create UAVs for additional texture types.
-
New: Added ability to create SRVs for additional texture types (3D, 2DArray and Cube).
-
New: Added experimental volumetric decals defined by a distance function. Can be useful, but might not be fast enough for some applications.
-
New: Added max displacement to materials to fix tessellation frustum culling.
-
New: Added View Property material expression with multiple values to expose more things to the material editor without using Custom.
-
New: Added wider Gaussian filter kernel to allow High Res Screenshot having larger bloom and Gaussian DOF. Added console variable "r.Filter.LoopMode" for experiments.
-
Improved Visualize DOF, especially for Circle DOF.
-
New: Updated Light Propagation Volume from Lionhead Studios.
-
Lower order SH is faster but a more blurry.
-
Directional Occlusion can be enabled in Settings. Affects Sky Light and Reflection Environments but not Ambient Cube.
-
Material "Block GI" feature.
-
Spotlight support. Uses AsyncCompute on XboxOne, but not order optimized yet.
-
-
New: Procedural Mesh Component improvements and fixes.
-
Add 'fast path' Update Mesh Section function to Procedural Mesh Component. Updates collision as well.
-
Add Set Mesh Section Visible & IsMeshSectionVisible functions.
-
Fix crash in Procedural Mesh Component when Triangles array was not a multiple of 3.
-
-
Altered the sprite material function. Removed the expansion vector normalization to allow for non quad meshes.
-
Exit gracefully when running out of video memory and notify the user.
-
Fixed hierarchical instanced static meshes. The cluster tree now gets rebuilt whenever there are unbuilt instances.
-
Fixed 16-bit float normal map detection for texture import.
-
Fixed a bug that would cause parallel rendering to be disabled in shipping builds.
-
Fixed a bug with the depth-write performance warning. Performance warning is also now more informative.
-
Fixed a crash when destroying Media Framework assets.
-
Fixed an ensure when using Responsive AA on Canvas tiles.
-
Fixed black viewport in split screen with full screen enabled.
-
Fixed Blendables in Post Process Component losing the array elements on load.
-
Fixed Crash when using of Circle Depth Of Field in Shader Model 4.
-
Fixed crash when using Post Process Material Blendables with weight of 0.
-
Fixed Depth Of Field material function for Circle DOF.
-
Fixed ElementalDemo crash due to nil constant buffer.
-
Fixed environment reflections not showing up on SM4.
-
Fixed issue in which alpha-only visualization of textures would display incorrect results with sRGB set to true.
-
Fixed issue preventing custom and procedural mesh components writing to custom depth pass.
-
Fixed missing rendering of some translucent geometry, editor/debug material had SeparateTranslucency on, which often it shouldn't be.
-
Fixed multiple issues and extended transform position especially for velocity computations (affecting Motion Blur and Temporal AA).
-
Fixed rendering artifacts in some editor viewports caused by wrong matrix computations.
-
Fixed Responsive AA feature which got broken by recent Temporal AA optimization.
-
Fixed scene captures showing incorrectly when switching to fullscreen.
-
Fixed shader complexity not working with decals.
-
Fixed SlaveComponent to support LOD change.
-
Fixed some issues in which the landscape gizmo would not render correctly until moved.
-
Fixed skeletal meshes with multiple translucent batches to render correct translucency types.
-
Fixed Scene Color node to render correctly in all modes.
-
Fixed Motion Blur exaggeration when Paused in Simulate mode.
-
Fixed shadows being occluded inappropriately for players who are not on-screen in split-screen mode.
-
Fixed crash when switching to Shader Model 4 with Light Propagation Volumes active.
-
Fixed Circle Depth of Field to be independent of Resolution.
-
Fixed wrong colors and artifacts when using color grading (extreme red in darks or more subtle ones).
-
Fixed wrong texture format when initializing an SRV.
-
Improved the error message logging in FScene::Release() when a component still has a reference to the dying scene to list the associated asset for any kind of component, not just UStaticMeshComponent.
-
Remove unused ShapeMaterial from ShapeComponent.
-
Reverting diffuse model back to Lambert for simplicity with capturing materials.
FX
-
New: Added DefaultValue property to Dynamic Parameter material node. Minor workflow improvement for VFX artists.
-
Fix for bug in SkelVert/Surf location cascade module in which skeletal mesh vertices would not be accessed correctly for some meshes.
-
Fix for rare crash in SkelVert/Surf Location Cascade module.
-
Fixed a bug that caused exporting emitters to a particle system with a higher number of LODs in the first emitter to crash the editor if the emitter to export was set to solo mode.
-
Fixed a problem with unclamped alpha during building of lookup tables for distribution values, that could cause unpredictable behavior.
-
Mesh particle collisions now consider the particle size by default. This should produce more accurate collisions for mesh particles with regular shapes. This can be disabled via the MeshTypeData property bCollisionsConsiderParticleSize.
-
Removed "Particle" options from Beam Source and Target options as these features are not implemented in UE4.
Lighting
-
New: Added bUseVertexNormalForHemisphereGather Lightmass primitive setting for foliage static lighting, in cases where artists want foliage lighting to match the underlying terrain.
-
New: Volume lighting samples are no longer placed inside geometry.
-
Volume lighting sample computation is now multithreaded in Lightmass so it can't bottleneck the lighting build.
-
-
Added lighting cache invalidation step when changing static mesh to avoid rendering stale data.
-
DDC commandlet now blocks on async mesh distance field tasks and actually writes the results to the DDC.
-
Fixed a bug where only emissive objects would render into the LPV.
-
Fixed an issue where self-shadow-only meshes would only shadow when selected in the editor.
-
Fixed bugs with the clear coat shading model.
-
Fixed crash building lighting due to zero area BSP nodes creating 0 resolution texture mappings.
-
Fixed lightmass exporter being deleted before the swarm connection is closed, causing occasional crashes when canceling a lighting build.
-
Fixed static objects rendering as fully lit when they should be fully shadowed.
-
This was reported for the case of having one landscape below another, but also affected static meshes or BSP.
-
-
More graceful handling of overflowing object count for distance field shadowing and DFAO.
-
Objects with 0 scale are excluded from the distance field scene, fixes bugs with several lighting methods with 0 scale objects.
-
Primitives affected by the indirect lightning cache will now be correctly updated when a precomputed lighting volume is streamed in or out.
-
Updated grouped shadow caster bounds calculation to ignore non-shadow casting primitives.
Materials
-
New: A few material functions have been added for generating and combining Shapes. These are mostly useful for the "Volumetric Decal" material type, but they may be useful in other situations as well.
-
Shapes: Sphere, Box, Capsule.
-
Combiners: Intersection, Subtraction, Union.
-
-
New: A few new material functions have been added for creating Shapes in the material editor.
-
DrawLine-2D and Drawline-3D: Specify a line in either 2D or 3D space. Has the option to behave as either capsules or transformed boxes.
-
BoxMask-2D and BoxMask-3D: Allow you to create 2D or 3D gradients similar to the "SphereMask" node but in the shape of a box.
-
-
New: A material function for generating a BullCurve has been added.
-
This is a simple bell curve aka "Normal Distribution" that has been re-scaled so that that inputs of -1 and 1 on X return 0. No control params. Uses the simplest form of the distribution: f(x) = e^(-0.5*x^2)
-
-
New: Added a Blueprint macro to convert Blueprint arrays into HLSL code that can be copied.
-
To use, you simply need to specify what type of input array you want (float through float4), a variable name and then pipe the results to an editable String variable. Then you use the editable text field to copy the result into the place where it is needed (for example inside of a Custom node in a material).
-
Note: In general using large arrays in HLSL will be slow. Often this is something more useful when you are trying to do something 'offline rendering-ish' inside of UE4, such as pre-computing a bunch of random ray directions for some kind of raytracing experiment.
-
-
New: Many of our VFX materials require HDR (high dynamic range) pixel values (Values above 1) in order to properly generate bloom and other engine effects, however multiplying an LDR (low dynamic range) texture into a high range often looks awful. This material function takes an LDR texture as an input, and remaps it to an HDR range defined by the user, This maintains the look and preserves the chroma of the input image and remaps it into HDR.
-
New: New material function 'CalcLightSourceAngle' can be useful to figure out the light source angle of a light as seen from any position in the world.
-
New: New material function 'Sphere_AO' returns an ambient occlusion value for any point in the world based on a sphere occluder of a given position and radius. Useful for blob shadows that fade in and out realistically.
-
New: New material functions for Sampling the Shadowing of a sphere based on lookup textures.
-
Sphere-ConeShadow-Texture: Returns the shadow response from a sphere in the world given a position and radius.
-
Ellipsoid-ConeShadow-Texture: Same as the above Sphere shadow but stretched along a specified axis. NOTE: This version is currently experimental and has a few issues. These issues will be fixed in the next release.
-
Both functions use the following default lookup texture: Texture2D'/Engine/EngineMaterials/T_SphereShadow_RGBA_5-15-30-60deg.T_SphereShadow_RGBA_5-15-30-60deg'
-
The texture is channel packed such that each of the channels has a different light source angle encoded. R=5, G=15, B=30, A=60 degrees.
-
-
-
New: Scalar material parameters can specify the slider min and max for the material instance editor.
-
New: Spherical-Cap-Intersection. This material function calculates the area of a spherical cap intersection given a light source angle and angle of visibility. Has option to use cheaper 'SmoothStep' calculation. In general this function is useful for pre-baking lookup textures but it can also be used in realtime when using the SmoothStep approximation.
-
Custom UV pins on Make/Break material attributes nodes now hide and show under the same conditions as their counterparts on the material result node.
-
Fixed rare crash in material editor when using custom UVs.
-
Fixed a crash that occurred when overriding a distortion material to be opaque in a material instance.
-
Fixed crash sometimes caused when reparenting a material instance.
-
Fixed issue in which all materials referencing a texture that is re-imported would turn black.
-
Fixed issue in which the tangent space normal property of materials would not function correctly when using material attributes.
-
Fixed issue where some parameters would not appear in material instances.
-
Fixed many transform nodes being broken in decal materials
-
Fixed materials that use Pixel Depth Offset not using the pixel shader during the prepass causing depths not to match up during the base pass.
-
Fixed wireframe materials to be considered "not writing every pixel". This fixes a few rare interactions causing corruption in shadow casting.
-
Modified the camera offset material function node to reference vertex world position instead of actor position to remove z-depth scaling.
Postprocessing
-
New: Improved Blendables, exposed weight on each blendable entry, better blueprint access.
-
New: Replaced experimental cylindrical postprocess projection with better but still experimental Panini projection.
-
Fixed blacks of old tonemapper not being black with new log space LUT.
-
Fixed light shaft rendering when used with upsampling.
-
Fixed pause with Temporal AA.
-
Improved SSAO quality with non-power-of-two viewport sizes, as recent optimizations made that worse.
-
Improved Temporal AA quality using bicubic filtering (slightly sharper).
Optimizations
-
New: Don't use IndirectLightingCache shaders when there are no precomputed lighting volumes.
-
New: Exposed console variable to access faster lower quality SSAO (r.AmbientOcclusionSampleSetQuality).
-
New: Implement the ScreenSpaceReflections stencil pre-pass (r.SSR.Stencil).
-
New: Indirect lighting cache point samples don't use the texture layout anymore, since they don't use the volume texture anyway.
-
New: r.ReflectionEnvironment is now usable in shipping builds.
-
New: Reflection environment console variables are now another scalability option.
-
Fixed the initialization of the texture streaming system so that it's initialized early enough to stream in textures at startup. Before this change, it would kick in a little bit later which could temporarily overload texture memory at startup.
-
Updated distortion pass to use a stencil mask which improves performance with lower screen coverage.
Mobile Rendering
-
New: Enabled limited post process support for devices that do not support full HDR rendering, meaning those which lack float16 render target support (e.g. Galaxy S6).
-
This replaces "mosaic" rendering when the color_buffer_half_float extension is not available but a framebuffer fetch gl extension is.
-
Bloom is supported.
-
Unlike "mosaic" mode, there are no resolution limitations.
-
-
New: Modulated shadow rendering for forward rendering (mobile path).
-
To use enable 'Cast modulated shadow' on a stationary directional light.
-
Dynamic shadows will then be rendered by modulating the light's 'Modulated Shadow Color' against the scene color.
-
-
Fixed stencil buffer rendering when using the Metal RHI.
UI
-
New: In game objects Mouse Enter and Leave Events no longer fire if UI (Slate/UMG) is over it.
-
New: Materials designed for UI now have a new material domain that can be set in the material editor. This replaces the "Used with UI" checkbox on materials. All existing materials using this checkbox will be automatically updated.
Slate
-
New: Editable text widgets in Slate now allow the context menu to be override or disabled.
-
New: Empty lines in a multi-line editable text now draw a little highlight so that you can tell that the line itself is selected.
-
New: Several improvements to the way sRGB is treated in the engine. Trying to standardize on the sRGB standard instead of pow(2.2). The key take away is - your textures should look like they do in Photoshop when rendered by Slate.
-
Now using a more accurate Gamma -> Linear space conversion function for converting FColor to FLinearColor.
-
Changing the way all FColors are converted into FLinearColor by default. Previously, we used pow(color, 1/DisplayGamma) for gamma correct. We now use the IEC 61966-2-1 standard.
-
Fixed a problem with Slate quantizing the lower range of black colors.
-
In Slate, you should now see an image matching Photoshop instead of being slightly darker in the lower ranges. However, because we don't want to invalidate all existing textures that users have authored, all existing UTextures have a UseLegacyGamma flag set to true, all new textures will be set to false.
-
-
-
New: Simplified Raw Texture Update function by using FSlateTextureData to pass the texture data and size to the render thread.
-
Activating a window now sets input focus for all users.
-
Clicking on the bottom/right most pixel of a slate widget now registers the click.
-
Fixed "Delete" on an empty line in a multi-line editable text being handled like a "Backspace".
-
Fixed an intermittent crash when using Ctrl+Arrow to move the cursor in an editable text control.
-
Fixed problem with menus not closing when clicking in another window on Mac.
-
Fixed SMultiLineEditableText Slate widget's ability to select and copy text from it.
-
Fixing a few issues with memory leaking in the Slate RHI resource manager. There was never a pass to remove stale entries in the dynamic resource map, so now we occasionally purge it of stale entries.
-
Fixing several issues involving multi-touch. Data stored involving widgets under cursor are now bucketed based on user and cursor index so that multiple pointer devices, as well as index can independently hold separate widget under cursor data.
-
Improved functionality for getting first chance access to key down events in SEditableText, SEditableTextBox, SMultiLineEditableText, and SMultiLineEditableTextBox.
-
Menus created from menu anchors no longer auto-dismiss when a parent (in the menu stack) receives focus.
-
Multiple causes to the often seen early clipping in Slate have been fixed. You might have sometimes noticed a column or two of pixels on the bottom or right of a widget getting cut off, those issues are now fixed.
-
Fixing the incorrect calculation of the clip rectangle which resulted due to pixel snapping along the extents of the box, instead of pixel snapping the corners of the clip box.
-
Disabling the float16 precision version of the slate shader on all platforms. Since the clip values are all in window space, it's terribly easy on modern monitors to exceed single digit precision (2048), causing multiple columns worth of additional pixel clipping erroneously.
-
-
Optimized the Slate Draw element batcher to perform fewer memory allocations per frame and pass off some processing to the render thread earlier to avoid additional memory copies.
-
Platforms using a virtual keyboard no longer attempt to show it when focus is received by a read-only text box.
-
Slate windows now take into account required border/tiitle bar sizes when resizing the window. This ensures that the client area stays at the requested size.
-
Text margins are now consistently calculated at all zoom levels and no longer do an immediate calculation, they instead just invalidate layout like all other operations do.
-
Additionally there is now a step in the UpdateLayout pass after justification and flow have been calculated, not doing it last leads to a lot of bugs and inconsistency.
-
This fixes the issue with zoom negatively affecting margins as well as the double application of margins to the justification of text, additional offsets were being calculated into the offset location of the text.
-
-
The SButton no longer attempts to handle MouseUp, if the button wasn't pressed. Previously pressing outside the button, and then releasing the mouse inside the button would cause the button to attempt to handle it, even though the down never originated on the button.
-
The STableViewBase now properly handles touch events when under editor conditions and sets up the callback to handle the inertial scrolling.
-
UE-18600 - Custom Draw elements no longer are attempted to be early clipped using the known scissor rect before going through the element batcher, since their clip rect info isn't valid we just ignore doing this step for those elements.
-
When we update the RHI data, we now also update what the slate render proxy thinks is the actual size of the texture, which might change due to a reimport.
UMG
-
New: Add features to allow for better in-timeline editing of animations.
-
Add combo buttons to object binding tracks for adding additional property tracks.
-
Add widgets for editing key values to the animation outliner.
-
Add buttons for navigating to previous and next keys, and for adding a key at the current time to the animation outliner.
-
-
New: Added some new methods to help convert positions inside a widget to pixel positions in the viewport. LocalToViewport & AbsoluteToViewport, they take the geometry data for a widget and a given location, and can give you both the Pixel and Viewport (Slate Unit) Position.
-
New: Added support for dragging multiple widgets to reparent them in the UMG Hierarchy view.
-
New: Adding a few extra scaling modes to the scale box, allowing it to Scale to Fit X, and Scale to Fix Y.
-
New: Adding the blueprint function CancelDragDrop, to allow you to programmatically cancel any drag/drop operation.
-
New: Adding the Highly New & Experimental SInvalidationPanel in Slate and the corresponding Invalidation Box in UMG.
-
Allows widget geometry to be cached to speed up Slate rendering. Widgets that are cached by an Invalidation Box are not Prepassed, Ticked or Painted. It's up to the user to call Invalidate (C++) or InvalidateLayoutAndVolatility (BP) on a child widget to force invalidation. Some core widgets do this automatically when certain properties are changed, more will do it over time.
-
You can force an invalidation directly on the panel too, by calling InvalidateCache, usually this is not required, but can be in certain situations - such as before child widgets have a chance to learn about their parent invalidation panel next tick.
-
Hit testing has not been tested heavily. You'll find more success caching widgets that are not hit testable, like in a HUD.
-
You may notice odd draw ordering issues in this version in heavy nesting of invalidation panels.
-
Currently caching only on the CPU. Additional improvements coming in the future to include caching on the GPU to make the panel even faster.
-
Any widget can be set to be Volatile. Volatile widgets act like normal Slate widgets pre-invalidation. They're redrawn every frame, including all their children. When combined with the invalidation panel, it allows you to only need to care about redrawing only the most dynamic bits of the UI, as invalidating a whole panel could be far more costly.
-
You can debug your invalidation panels using the widget reflector, with the [Invalidation Debugging] toggle.
-
White/Red Flash = Widget responsible for invalidation
-
Green Border = Invalidation Panel (Cached This Frame)
-
Red Border = Invalidation Panel (Cache Invalidated This Frame)
-
Dashed Yellow Border = Volatile Widget
-
-
-
New: Animation outliner node selection now respects control (toggle) and shift (select inclusive).
-
New: Animation outliner nodes are now sorted alphabetically.
-
New: Double click on a section will now focus the timeline range to the bounds of the section. Double click again will return to the previous timeline range.
-
New: DrawLines, DrawFormattedText added to the set of low level painting methods for UMG.
-
New: Enabled dragging of multiple widgets to move or reparent in the UMG Designer view.
-
New: Exposing the Next/Previous widget navigation options on all widgets.
-
New: Exposing the SScrollBox's ScrollIntoView function in a much better way.
-
We no longer allow/expect the user to pass in geometry for the scrollbox, instead they simply request the widget to scroll into view and on the next layout pass we make that happen.
-
The scroll into view function is now also exposed to blueprints for use in the UMG version of the scrollbox.
-
-
New: Removed appearance override properties from UMG widgets. Style property is now used.
-
New: The WidgetComponent has been reworked to use the new IGameLayer system to create a single shared canvas layer that all the components add themselves to when they're displaying their information in screen space, instead of world space. They now properly sort based on depth/distance from the camera.
-
Additionally, the layer widget now updates the positions for the widgets. Thereby solving the problem of tick groups causing weird update orders for objects touching the WidgetComponent's Actor as a base. The WidgetComponent now has a normal tick group.
-
-
New: Tooltips when moving widgets in the UMG Hierarchy view now match the style of those in the World Outliner.
-
New: Widget Components in World Space, now support for 3 blend modes, Opaque, Transparent, Masked (new). Masked allows you to have the transparency you need on edges, but writes to the depth buffer, so that it sorts correctly. There is also now an option for ticking when the in world widget is off-screen to continue to allow animations to play and tick to be called on the widget.
-
New: Widget Components now have a parabolic distortion option to give them a sort of curved glass appearance, this only works if they're rendered in World Space.
-
New: You can now use the arrow keys in the designer to nudge widgets in the canvas by the grid snap amount. If grid snap is enabled it will actually keep it snapped to the grid, otherwise it will just move by the current snap amount absolutely.
-
A WidgetComponent with Space set to World, will no longer crash if the draw size is set to 0.
-
AddChildVerticalBox renamed to AddChildToVerticalBox.
-
Drag/Drop now properly maps the cursor to a user widget and no longer shows the native cursor in addition to the custom cursor if any.
-
Also fixed a crash on mobile where the platform doesn't have a cursor object but we still attempted to interact with it on drag/drop operations.
-
-
DrawLines, DrawFormattedText added to the set of low level painting methods for UMG.
-
Fix several issues with UMG widgets crashing during map transitions.
-
Fixed a potential crash with cooked content.
-
Fixed incorrect default rotation for widget components. New widget components now face toward +X by default.
-
Fixing a bug in SObjectWidget that was preventing handled key presses from being returned as handled to the rest of slate.
-
Fixing a bug that was showing the category field in the details panel when nothing is selected.
-
Fixing a bug where the modifier keys and additional base class data were never passed to new copies for mouse pointer events. Preventing users from checking modifier key state in mouse events on UserWidgets. Only affected UMG and not Slate, as the VM makes copies of the struct.
-
Fixing animation and tick rates for widgets living in the world, they should now correctly be controlled by time dilation as they no longer are getting ticked twice, and the second tick using the wrong delta time. This broke when we introduced tick folding, which ticks again inside of paint, but continued to use the global slate delta time, as well as tick before hand.
-
Fixing several issues with brush and material utility functions not working correctly with the pins for input being displayed in the blueprint as output pins.
-
Fonts and other appearance properties on editable text widgets are now updated in real-time in the UMG editor.
-
If the owner player changes on a widget component, we now remove the widget from the screen if it's currently already on a user's screen to move it to the other users screen.
-
Keep animation outliner selection consistent across undos.
-
Making some improvements to the way the SScaleBox handles fill justification so that it actually fills the entire contents of the scalebox, and handles additional scale being applied to it.
-
Moving widgets in the UMG Designer no longer makes them move to the last slot in their parent.
-
Removing Thickness from the line painting function. It wasn't actually hooked up to anything, and there's no support in slate for it currently, only when rendering splines. Will add back once we've added support for it in Slate.
-
Rounding the projected location when calculating screen position from world position before applying inverse DPI scale, this produces a much more stable location with no half-pixel offsets due to later applied scale, since we do it before the inverse we more or less end up at the whole number we expect. This makes things like widgets above characters heads much more stable.
-
SConstraintCanvas no longer attempts to draw elements outside its view, and now draws them in the correct order.
-
Making a lot fewer calls to the enabled delegate when painting, prefiltering arranging children that are not visible and avoiding the math for them.
-
Now consistently drawing children in the correct order. Previously we only sorted based on ZOrder, and assumed a stable sort for equal elements, but this was not the case. So occasionally the order just appeared wrong, unless you manually set the ZOrder, that's no longer required.
-
-
The cursor property on widgets now works as it should. You can also call SetCursor and ResetCursor to set it at runtime on any UWidget, or clear your overridden cursor.
-
The Multiline Editable Text widgets should now properly notify when text is committed or changed.
-
The slatebrush's ResourceObject property is no longer directly accessible in a blueprint. You'll need to use the functions, GetBrushResource, SetBrushResourceToTexture, and SetBrushResourceToMaterial to change the value. This is to prevent the wrong types from being associated with the resource object.
-
The STooltipPresenter now calculates a post transformed, rounded layout position to ensure that tooltips do not start on a half pixel. This reduces a lot of the inner jittering of a tooltip as you move your mouse across the surface of a widget.
-
The Widget compiler now warns if you have events that return EventReplys that are unconnected to anything.
-
UE-17226 - The assignment operator for the FPaintContext wasn't copying the MaxLayerId, painting into layers and not telling slate they exist causes the graphics corruptions seen by several people.
-
UE-18029 - Making the SlotAs functions more robust against crashing when called at the wrong time from blueprints.
-
Updating the 3D rendering path in Slate the properly set the RT and clear at the same time it to fix a bug on iOS when using a transparent Widget Component.
-
Widgets removed by replacing them in the UMG editor hierarchy are moved to the transient package to stop name clashes.
-
Working on several general fixes to the navigation system.
-
Widgets other than the focused widget can respond to navigation requests with explicit or delegate based handling. Adding a new function to allow querying the if descendants of a widget are focused by a specific user.
-
Implementing controller support for the SScrollBox; it has custom logic for handling navigation inside of it scrolling the next element into view for the focuser and moving focus to the next logical child.
-
Programming Release Notes
AI
-
New: Added InvalidOrientation constant to AISystem.
-
New: AIController class now derives from IGenericTeamAgentInterface which will make team-handling easier in the near future
-
New: FAIResourceLocks now have the ability to count the number of locks for each LockPriority. (Default behavior remains the same, this functionality is an additional feature.)
-
FEnvQueryInstance::ItemIterator's "operator bool()" is now explicit. That prevents accidental (implicit) conversion to an int32 when you intend to get the index.
-
Fixed pawn action sequence not responding correctly to abort event.
-
Replaced EQS skip item mechanic with forcing item status.
Behavior Tree
-
Added support for behavior tree's action task losing its PawnAction due to some external events.
-
Fixed multiple default subobjects with the same names created for behavior tree's blackboard filters.
-
Unified behavior tree's StopTree & StopLogic functions.
Navigation
-
New: Added pruning for crowd agent's corridor when close enough to next intermediate point (corner vertex). Depends on angle between first 2 segments of path, should reduce twitching when large group is moving through narrow corridor.
-
Changed FNavMeshPath::DoesIntersectBox to ignore agent location, as it's not relevant to function's result.
-
Fixed Navmesh generation failing after hot-reloading
-
Fixed early out condition in navigation tile generator using async data gathering.
-
Fixed invalid pointer to owner of crowd agent's custom filter.
-
Fixed rare case of infinite loop in navmesh pathfinding.
-
Navigation system will store weak object pointers to all custom navlinks to ensure their validity.
Animation
-
New: Added DLL export to some skeletal control classes and methods, making them extensible in another module.
-
New: Allowed skeletal controls to specify the coordinate space that they would prefer the gizmo to be displayed in by implementing GetWidgetCoordinateSystem
-
Additive blending optimizations in FAnimationRuntime.
-
Replaced ApplyAdditiveSequence with AccumulateAdditivePose. No pose copy and fast path for weight == 1.
-
Replaced BlendRotationOffset with AccumulateMeshSpaceRotationAdditiveToLocalPose. No pose copy, removed one pose allocation, fast path for weight == 1, and mesh space transform done only on rotation part and not full FTransform.
-
Added ConvertMeshRotationPoseToLocalSpace.
Blueprints
-
New: BlueprintCallable functions can now specify the metadata HideSelfPin to indicate that the node should not show the Target pin, nor should it be connectable, thus filtering it from the context menu when dragging off a pin and ensuring it can only be used in the self context.
-
New: External modules can now append toolbar buttons to the Blueprint editor, using the BlueprintEditorModule's MenuExtensibilityManager.
-
New: External modules can now extend the Blueprint context menu by adding their own filtering through FBlueprintGraphModule::GetExtendedActionMenuFilters().
-
New: Graph Editor: Allowed graph nodes a chance to create a custom SGraphNode visual representation without having to manually register a factory (override the new method CreateVisualWidget).
-
Fixed a bug that caused instanced properties to be cleared on Blueprint compile.
-
Fixed a bug where functions with inaccurate WorldContext metadata were not accessible.
-
Fixed a bug where globally declared delegates could be mismatched with Blueprint nodes originally using a like named delegate, belonging to a specific class.
-
Fixed runtime blueprint use of atmospheric component.
Core
-
New: Add ForEachObjectWithOuter and ForEachObjectOfClass utility functions that will call a TFunctionRef for each object instead of using GetObjectsWithOuter/OfClass which requires copying each object in to a (potentially very large) array.
-
New: Added a console command, "abtest" to asses the impact of changing a console variable on performance in a dynamic, noisy gameplay session.
-
New: Added a console variable to control TimeBetweenPurgingPendingKillObjects at runtime.
-
New: Added basic support for flushing async loading of a specific package only.
-
New: Added command line param to dump commandlet stats to log file.
-
-LoadTimeStatsForCommandlet dumps all load time stats (LinkerLoad and AsyncLoad groups).
-
New: Added command line parameter ("-fullcrashdump") for forcing any Windows crash minidumps to contain full memory info.
-
New: Added logging to builds about the command line used to invoke UnrealHeaderTool and the duration.
-
New: Added a few more stats for async loading.
-
New: Added an extra parameter to FPlatformProcess::ConditionalSleep to be able to specify sleep timeout.
-
New: Added checks to ensure that two different custom versions aren't added with the same GUID.
-
New: Added checks to UnrealBuildTool for modules which are both a dependency and dynamically loaded.
-
New: Added debug.EnableLeakTest console command for stats based memory profiler testing.
-
New: Added FChar::ConvertCharDigitToInt function to convert digit characters to integer type.
-
New: Added FPaths::LaunchDir(), which is the directory the application was launched from. Useful for finding files relative to working directory for commandlets.
-
Improved UnrealPak to use LaunchDir to find .pak files in any location. (UnrealPak, to extract .pak files, is often run from non-standard locations.)
-
-
New: Added FString::Reset() which allows emptying a string without reallocating memory.
-
New: Added functions to access low-level file stat data as a single file-system request.
-
You can now use GetStatData to get all of the stat data for a file (its timestamps, size, read-only state, and whether it is a file or a directory) in a single file-system request.
-
Depending on the platform, this can be much more efficient than making multiple requests
-
-
This change also adds alternate directory iteration functions (IterateDirectoryStat and IterateDirectoryStatRecursive) for when you need the stat data along with the files/directories on disk.
-
For platforms that provide this stat data as part of the low-level directory iteration (such as Windows), this can yield much better performance than making two separate file-system requests.
-
Platforms that do not provide this information as part of the directory iteration will just perform a stat request while iterating.
-
-
-
New: Added guards to make sure linkers are only being deleted by linker manager.
-
New: Added guards to make sure two identical default subobjects can't be created in a class constructor.
-
New: Added implementations of VectorCeil, VectorFloor, VectorTruncate, VectorFractional when using UnrealMathDirectX.
-
New: Added more stats to Garbage Collector.
-
New: Added new stats command which adds a custom marker to the stats stream.
-
Can be used by typing stat namedmarker #markername## in console.
-
-
New: Added static_asserts to TSharedPtr
to ensure that it is not used in the opposite thread-safety mode of T's TSharedFromThis. -
New: Added stats for wait/trigger in events.
-
New: Added stats to detect BulkData async buffer leaks.
-
New: Added stats to triggering async event.
-
New: Added support for binding Lambdas to multicast delegates.
-
Note: lambdas bound to multicast delegates can only be removed via the handle returned by Add(), not the deprecated Remove(Delegate) API.
-
-
New: Added support for UObjectProperty, ULazyObjectProperty and UAssetObjectProperty as UMapProperty keys.
-
New: Added TMap property support in the reference chain.
-
New: Added TSet::Reset.
-
New: Added utility functions to TAssetPtr and FStringAssetReference to get package and asset name.
-
New: AVX support can now be enabled on a per-module basis by settings bUseAVX = true in a module's .Build.cs rules file.
-
New: Changed the default return value for GetResourceSize() to 0.
-
New: Declaring a BlueprintImplementableEvent function as virtual will now output a warning.
-
New: Deprecated FRotator::operator-() and created a new method FRotator::GetInverse(). Componentwise negation is a meaningless operation on a Rotator.
-
New: Enabled editability of subobjects in UnrealHeaderTool.
-
New: ensure() and ensureMsgf() macros will now only log/break the first time they fail.
-
Added ensureAlways() and ensureAlwaysMsgf() macros which act like the old ensure() macros, and added a 'debug ensureAlways' console command.
-
Removed the ensureMsg(), ensureOnce() and ensureOnceMsgf() macros.
-
-
New: Expanded TDoubleLinkedList API.
-
Nodes can now be removed and inserted without deleting and reallocating the node memory.
-
Added a Contains helper method.
-
-
New: FAssetPtr and TAssetPtr now provide a LoadSynchronous utility function.
-
New: FTickFunction::EnableParent has been removed.
-
New: Inlined fast UObject type checks and enabled them by default.
-
New: Made object delete listener more thread safe.
-
New: Made UnrealHeaderTool's error messages more helpful when it cannot find a type reference.
-
New: Non-monolithic targets now only build the plugins which they have enabled, unless bBuildAllPlugins is set to true in their target.cs file.
-
New: OnControllerAnalog, OnControllerButtonPressed, and OnControllerButtonReleased can now be used from plugins defining new input bindings.
-
Functions now take an FName (aliased as FGamepadKeyNames::Type).
-
Removed EControllerButtons and replaced with FGamepadKeyNames which provides FName mappings for all non-platform specific gamepad keys.
-
-
New: Optimized UnrealHeaderTool parsing.
-
Added new IsSorted algorithm.
-
Added new FindSortedStringCaseInsensitive algorithm for binary searching across multiple known strings.
-
-
New: PanicFlushThreadedLogs now also flushes the related output devices.
-
New: Performance: Added vectorized VectorSinCos for SSE platforms.
-
Optimized FRotator->FQuat conversion to use the vectorized version, and also vectorize the quaternion construction operations.
-
-
New: Added Polar/Cartesian conversion functions with FVector2D parameters. (Contributed by yoyohobo665, pull request 1108.)
-
New: PreUnloadCallback will be called on a module interface before shutdown. (Contributed by FineRedMist, pull request 1243.)
-
New: Only dump the script stack on assertion failure in the game thread. (Contributed by AndrewScheidecker, pull request 1281.)
-
New: Removed package type parameter from LoadPackageAsync as it was not used for anything.
-
New: Serialized FStringAssetReference properties can now be re-typed as TAssetPtrs and handled automatically during deserialization.
-
New: Stats can now be used in commandlets.
-
New: UEnums will now be tightly packed.
-
UnrealHeaderTool will no longer attempt to generate fake entries for missing enum values.
-
-
New: UEnums will now store values as uint8 instead of int8 (many enums defined values greater than 128).
-
New: UnrealBuildTool Makefiles are now also enabled on the Mac to speed up UnrealBuildTool startup times on this platform.
-
Fixed Makefile serialization when using Mono.
-
-
Fixed inaccurate calculation of non-frame stats on pooled threads.
-
Added UEngine::bForceDisableFrameRateSmoothing to enable external systems to force smoothing off without overwriting the desired base engine setting. Various HMD modules now use this to disable smoothing during stereo rendering. Fixes issue where framerate smoothing was disabled whenever a HMD was detected.
-
Added code to fixup command line if project path is incorrect.
-
Added code to make sure all objects that are being streamed in are referenced for Garbage Collector until loading has finished.
-
Added IsValidIndex to FString and had the [] operators use this to verify the index they were given was valid.
-
Added missing implementation for FLinkerLoad::FlushCache.
-
Changed UnrealBuildTool to generate UnrealHeaderTool's manifest using the same modules' order during hot-reload as during normal build.
-
Corrected config section used to save config values for PerObjectConfig objects that are contained in the transient package.
-
This brings the code in line with what is used in UObject::LoadConfig.
-
-
Directory watcher no longer reports reads when the watch is being shutdown
-
Disabled compiler warning C4351 (new behavior: elements of array 'array' will be default initialized)
-
The "new behavior" was in Visual Studio 2005, and is no longer considered unexpected.
-
-
Disallowed UClass* properties from having the "Instanced" keyword
-
This never worked, but now it is rejected. If you get this error when upgrading, remove the "instanced" keyword from your UPROPERTY.
-
-
Fixed a crash caused by token stream not properly handling AddReferencedObjects pointers when added just before the end of array tokens.
-
Introduced new token type that marks the end of a pointer data inside of a token stream to correctly handle return count for the array.
-
-
Fixed a crash related to RecastNavMesh when performing hot-reload.
-
Fixed a problem with UnrealHeaderTool not being able to parse some code comments.
-
Fixed a UnrealHeaderTool crash when generating code using a UObject type which was not parsed.
-
Fixed an error message in UWorld::ServerTravel.
-
Fixed an object name in a UObject::BeginDestroy assert.
-
Fixed crash in FGCReferenceTokenStream::ReplaceOrAddAddReferencedObjectsCall when using TMap properties.
-
Fixed crash in UMapProperty serialization.
-
Fixed FindObject function returning objects that have not yet been fully streamed in.
-
Fixed FString operator commutativity.
-
Fixed some FString comments.
-
-
Fixed FString::FindLastCharByPredicate when the string is empty.
-
Fixed hot reload crashes that were occuring when user added C++ enums to the code.
-
Fixed hot-reload crash that was occuring during obtaining class default object's duplicate.
-
Fixed navigation-related crash after performing hot reload.
-
Fixed operator<< return values in FObjectAndNameAsStringProxyArchive and FNameAsStringProxyArchive.
-
Fixed pointer alignment issues in binned allocator.
-
Fixed possible UELinkerFixup linker errors after a module gets updated.
-
Fixed rare case where UnrealHeaderTool assumed existance of a parent class in the wrong module during compilation.
-
Fixed some logic which was causing static code analysis warnings.
-
Fixed some path manipulation in UnrealBuildTool which could prevent some C++ projects being built in some locales.
-
Fixed some TSet compile errors when the ElementType differs from the KeyType.
-
Fixed stale linker pointers after streaming a package in.
-
Fixed stats not collecting all data on engine startup.
-
Fixed TBitArray ranged-for iteration after a call to Reset.
-
Fixed TBitArray::GetAllocatedSize and TBitArray::CountBytes.
-
Fixed the 1000 log filename limit in UnrealAutomationTool.
-
Fixed the FSphere::TransformBy(FTransform) function which wasn't multiplying W by the scale.
-
Fixed the functionality to track allocations that didn't happen within the engine's wrappers.
-
Fixed UEnum vtable linkage.
-
Fixed UnrealBuildTool failing to harvest environment variables when running from some paths containing non-ASCII characters.
-
Fixed UnrealBuildTool not rebuilding its makefile when hot-reloading modules.
-
Fixed UnrealBuildTool not updating the makefile when a new UHT type is added to a header which didn't have any previously or when the last one is removed.
-
Fixed UnrealHeaderTool crash when using a multicast dynamic delegate type in a Blueprint function declaration.
-
Fixed UnrealHeaderTool failing to compile delegates which use an enum from earlier in the same header.
-
Fixed UnrealHeaderTool failing to skip DECLARE_MULTICAST_DELEGATE declarations at the top of headers.
-
Fixed UnrealHeaderTool not parsing meta data information correctly in some situations.
-
Fixed VectorMod() working incorrectly for negative values (now matches std fmodf). Fix VectorSinCos() doing incorrect range reduction. Improved math tests at startup.
-
Math tests: added VectorMod, VectorSinCos.
-
Math tests: added more FQuat <-> FRotator conversions and cleaned them up (make more important tests earlier, because those could cause later ones to fail).
-
-
Fixed FInterpCurve serialization and fixed edge case results from EvalDerivative and EvalSecondDerivative.
-
Fixed 'You are attempting to compile on a machine that does not have a supported compiler!' and other build exceptions in UnrealAutomationTool.
-
Inlined calls to ConditionalSleep to avoid TFunction + lambda overhead in FMultiReaderSingleWriterGT.
-
Made sure UAT builds content-only projects as well to avoid issues with missing/outdated UE4Game binaries.
-
Made the message about failure to route PostInitProperties more clear.
-
Made UnrealHeaderTool throw an error when it encounters bad UENUM() specifiers.
-
More accurate InvSqrt() and InvSqrtEst() on some platforms.
-
Matches results for SSE platforms with other platforms that perform 2 Newton-Raphson iterations on the hardware estimate (iOS), or non-SSE that uses the fully accurate sqrt.
-
Scalar functions now match the vectorized versions (VectorReciprocalSqrtAccurate) so that comparisons within 1e-8f are possible for normalizing normalized values (important for FQuat which uses both scalar and vector).
-
Allows normalize vector (1,0,0) to return the same vector rather than (0.9999998xx, 0, 0).
-
Fixed InvSqrtEst() on some platforms actually using higher precision (slower) FGenericPlatformMath InvSqrt().
-
-
More accurate VectorReciprocalSqrtAccurate on SSE platforms.
-
Matches results for SSE platforms with other platforms that perform 2 Newton-Raphson iterations on the hardware estimate (Xbox, iOS), or non-SIMD that uses the fully accurate sqrt.
-
Allows NormalizeRotation (0,0,0,1) to return the same vector rather than (0,0,0,0.99998...).
-
-
Optimized FPaths::GetCleanFilename, GetPath and GetBaseFilename.
-
Prevented UnrealHeaderTool from parsing array parameters in UFUNCTIONs.
-
Remove unused UObject::CreateArchetype and unimplemented UObject::UpdateArchetype
-
Removed "VectorBitwiseAND" defined only for UnrealMathSSE. There is already "VectorBitwiseAnd" defined for all platforms.
-
Removed deprecated delegate and timer functions.
-
Removed USE_MATRIX_ROTATOR from FQuat. It's not maintained and makes the code less readable.
-
Stats from other threads like task graph or pool thread should now be synced with the game thread.
-
UnrealHeaderTool will now be able to parse TSubclassOf
& parameters without reporting errors.
Editor and Tools
-
New: You can now help the blueprint utility functions create the correct blueprint for you. Previously, all classes created a standard blueprint. Now, the compiler module is asked Engine/Content/Types/Textures/SupportAndSettings/index.html if there is any registered IBlueprintCompiler with a special blueprint class for a particular UObject class. This fixes the problem of the new asset buttons creating UBlueprints for UUserWidget subclasses, instead of UWidgetBlueprints.
-
AutomationTool now correctly handles command line arguments that end with slashes.
-
IntroTutorials and Blutilities modules are now loaded when running commandlets, enabling asset inspection, resaving, etc.
-
SPropertyEditorEditInline now respects the "noclear" UProperty flag.
-
UnrealVS improvements:
-
v1.36 Fixed Set Startup Project bug in which the startup project could be forgotten when set via the UnrealVS toolbar.
-
v1.38 Improved handling of command line arguments stops bad uproject paths in user created projects.
-
v1.39 Moved UnrealVS development to VS2015. This and subsequent versions will be available for VS2012/13/15.
-
-
Moved KismetNodeInfoContext.h to be publically accessible outside of the GraphEditor module.
Content Browser
-
Changing the Content Browser path via the breadcrumb now notifies you of the change.
-
Fixed SPathView::OnPathSelected being called with an empty string after the editor loads.
Landscape
-
Moved implementation details of the Landscape Editor into the Private folder.
Gameplay Framework
-
New: Added GameplayStatics::DeprojectScreenToWorld and ProjectWorldToScreen functions.
-
Added simpler version of FSceneView::DeprojectScreenToWorld that takes a single view projection matrix.
-
Added FSceneView::ProjectWorldToScreen.
-
Added PlayerController::GetLocalPlayer().
-
-
New: AActor::bPendingKillPending renamed to bActorIsBeingDestroyed and made private.
-
New: Actors spawned from a non-CDO template will now have be named similarly to the template's name.
-
New: Add FQuat::GetNormalized() that returns a normalized copy.
-
New: Add FTransform methods CopyTranslation(), CopyRotation(), CopyScale3D().
-
Avoids intermediate copies and unaligned loads/stores between VectorRegister and FVector.
-
SceneComponent now uses these in CalcNewComponentToWorld().
-
-
New: Added FBodyInstance::OverlapTestForBody().
-
Avoids heap allocation when only method was one that took a TArray.
-
Templatized OverlapTestForBodies() to allow TArray with different allocator types (namely TInlineAllocator for OverlapTestForBody()).
-
-
New: Added Draw Shadow option to HUD DebugText allowing setting shadow per debug line.
-
New: Added ensures that transforms are valid in various places in SceneComponent operations.
-
New: Added ETeleportType flag to MovementComponent::MoveUpdatedComponent, SafeMoveUpdatedComponent to match SceneComponent::MoveComponent.
-
Note: currently always treated as not teleporting when used within FScopedMovementUpdate.
-
-
New: Added FMath::GetMapRangeValueUnclamped and renamed GetMappedRangeValue to GetMappedRangeValueClamped.
-
New: Added new FActorRange, TActorRange and FSelectedActorRange types to support ranged-for iteration of those concepts.
-
New: Added parallel queueing of ticks.
-
New: Added stat counter for CharacterMovementComponent::FindFloor().
-
New: Added stats for PlayerController in "stat Game" and "stat PlayerController".
-
New: Allow TriggerSphere/Capsule/Box classes to be subclassed outside Engine module.
-
New: Clean up Character movement stats. Add new stat for AdjustFloorHeight.
-
New: Default implementation of USoundNode::CreateStartingConnectors will now make at least GetMinChildNodes() connections.
-
New: Exported FOverlapInfo with ENGINE_API.
-
New: Exposed the ability to set the tick group for actors and components in Blueprints (using either SetTickGroup or by editing the value for the default object).
-
New: Performance: 30% Faster FQuat::Normalize() and FQuat::GetNormalized() when vector intrinsics are enabled.
-
New: Performance: Added FTransform methods which on vectorized platforms can avoid the cost of converting to FVector first before the operations.
-
Added static methods AreRotationsEqual, AreTranslationsEqual, AreScale3DsEqual, AddTranslations, SubtractTranslations.
-
Added RotationEquals(FTransform), TranslationEquals(FTransform), Scale3DEquals(FTransform).
-
-
New: Performance: Added vectorized FRotator::Equals() and IsNearlyZero() implementations.
-
New: Performance: CharacterMovement nav mesh projection uses cheaper line-plane-intersection, and avoids it altogether when at the destination.
-
New: Performance: Implemented faster Quaternion Vector rotation.
-
Scalar FQuat::RotateVector() takes ~18% less time.
-
VectorQuaternionRotateVector() takes ~25% less time.
-
Vectorized FTransform * FTransform takes ~33% less time.
-
-
New: Performance: Optimized FQuat comparison when vector intrinsics are available.
-
New: Performance: Remove unnecessary encroach check every time a simulated proxy position or rotation replication is received.
-
Network character proxies only need to check for encroachment when they teleport with zero velocity. Normal movement handles encroachment already.
-
-
New: Performance: Rotation conversions in SceneComponent are cached to avoid Quat<->Rotator conversion when possible.
-
Added FRotationConversionCache which caches Quat<->Rotator conversions and returns the cached conversion if the source rotation is the same.
-
SceneComponent uses this cache for internal uses of RelativeRotation (FRotator) and calls to GetComponentRotation() (returning a FRotator from ComponentToWorld's quaternion).
-
As a result, GetActorRotation() and GetComponentLocation() only perform a conversion if the rotation has changed since previous calls.
-
-
-
New: Performance: Rotational movement can now avoid UpdateOverlaps when the rotation is symmetric even when currently overlapping components in most cases.
-
New: Refactored vectorized Quaternion Vector rotation to a single method (VectorQuaternionRotateVector), rather than two calls to VectorQuaternionMultiply2().
-
This allows other rotation methods to be implemented more easily.
-
Also added VectorQuaternionInverseRotateVector().
-
-
New: Simplify FindGeomOpposingNormal() return value (and remove out param).
-
New: Spawning an actor will now respect any default transform on a native root component.
-
New: TInlineComponentArray can now also be initialized with a const AActor*.
-
New: UGameInstance::InitializeStandalone can now be called when running in editor code.
-
New: USoundWaveStreaming has been renamed USoundWaveProcedural to better describe its purpose.
-
CameraComponent::SetCameraMesh will now update the proxy mesh if it exists.
-
Actor iterators will no longer ever return Actor's that have become marked pending kill while the iteration has been underway.
-
Actor::GetActorEnableCollision() is now const.
-
Add separate stat for SceneComponent::MoveComponent. It was not tracked as part of "MoveComponent Time" previously.
-
Added virtual destructor for FDamageEvent (PR#1141, thanks bozaro!)
-
Check that Actor or Component collision is enabled when adding to ignored components list in FCollisionQueryParams.
-
Create UWorld::DefaultPhysicsVolume on demand.
-
Fixes crash when dealing with physics volumes when world is not initialized (commandlets etc).
-
-
Fix blocking hit notifications being triggered in invalid cases (pending kill or null actors/components). Fix SceneComponent trying to move when pending kill (PrimitiveComponent already aborts in this case).
-
Fix blocking hits dispatched from FScopedMovementUpdate() being dispatched when collision response has changed (from overlaps or other blocking hits).
-
Fix character mesh relative translation being applied incorrectly in UCharacterMovementComponent::SmoothClientPosition().
-
Fixed APlayerController::ReceivedSpectatorClass() to take a class of the correct type.
-
Fixed Character::bSimGravityDisabled not being restored to false for simulated pawns under some conditions.
-
Fixed crash trying to use SSSwapControllers debug command with 0 players.
-
Fixed GameInstance execs not firing with 0 players, which prevented re-adding a player.
-
-
Fixed crash when Character capsule is marked pending kill and set null by MovementComponent::TickComponent.
-
Fixed crash when UpdatedComponent for Projectile or Rotating movement are marked pending kill and set to null in the next tick.
-
Fixed scalar versions of FTransform::TransformFVector4() and TransformFVector4NoScale() setting W to 1 or 2 instead of 0 or 1.
-
Fixed SlideAlongSurface pushing out away from the original direction of movement when hitting multiple surfaces.
-
This fixes jitter when characters push against corners of multiple surfaces at once.
-
-
Fixed stat tracker in "stat game" for CharacterMovement not tracking the total cost. Add stats for Character network movement and smoothing.
-
FNotifyBufferFinishedHooks can now be used by modules other than the Engine module.
-
Fully exposed ADecalActor so that you can derive from it.
-
Game/URL Options parsing nodes are now exposed to blueprints.
-
Made UCharacterMovementComponent::GroundMovementMode private, and provide Get/Set methods.
-
Enforces that GroundMovementMode is only ever Walking or NavWalking.
-
Set method will switch movement modes if currently a different ground walking mode.
-
Cleaned up constants in Pack/UnpackNetworkMovementMode() and made sure we only have a valid ground mode (Walking or NavWalking).
-
-
Optimized various uses of Pop to prevent incremental reallocation for short-lived or frequently used TArray instances.
-
Performance: Avoid recomputing transforms and Quat<->Rotator conversions in FAnimNode_RotateRootBone::Evaluate() when neither Pitch nor Yaw are set.
-
Performance: Faster FQuat::operator!=.
-
Performance: Faster Quat->Rotator conversion.
-
We only need to normalize 1 axis and only rarely (when pitch is -90 or 90). ASin and ATan2 already produce normalized results (as in [-pi, pi]).
-
-
Performance: Inlined some frequently used Actor, FBodyInstance, and FCollisionResponse functions.
-
Performance: Moved static initialization of some text out of functions and into global scope. Avoids branches and extra instructions in these functions.
-
Performance: Optimized and simplified CharacterMovementComponent functions: IsFalling(), IsMovingOnGround(), IsSwimming(), IsFlying().
-
Performance: Optimized CharacterMovement::PhysicsRotation() to reduce FRotator comparisons.
-
Performance: Optimized usage of MasterPoseComponent weak pointer in SkinnedMeshComponent.
-
Performance: Optimized weak pointer usage in UPrimitiveComponent::DispatchBlockingHit().
-
Performance: Optimized weak pointer usage in USkeletalMeshComponent::CalcBounds().
-
Performance: Remove unnecessary FRotator normalization before comparisons in CharacterMovementComponent::PhysicsRotation().
-
Performance: Removed static initialization in VectorNormalizeRotator, and moved constants to GlobalVectorConstants.
-
Performance: UMovementComponent::SlideAlongSurface internally uses FQuat instead of FRotator.
-
Remove GetSafeNormalPrecise() and GetClampedToMaxSizePrecise() from CharacterMovementComponent source.
-
The stock FVector methods are now sufficiently precise after the InvSqrt() changes.
-
-
Remove stale (null, pending kill) overlaps from OverlappingComponents array when an invalid overlap is found in UpdateOverlaps().
-
Removed unused InactivePlayerArray variable from GameState.
-
Simulated CharacterMovement now uses SetPostLandedPhysics() when landing, rather than hardcoded walking mode.
-
Fixed SetPostLandedPhysics() not respecting default land movement mode that is not a walking mode.
-
-
Sound Node pin and title names are now properly localizable.
-
TActorIterator now properly filters out Actors in hidden levels the same as FActorIterator.
-
UCharacterMovement::StepUp() no longer uses SafeMoveUpdatedComponent for its movement.
-
This could cause movements to reverse direction or violate step-up height rules.
-
-
Various minor fixes and improvements to CharacterMovementComponent.
-
Added "virtual" modifier to some existing functions.
-
Improved "const" correctness at several places.
-
Improved standing downward force code and moved it to the new overridable function ApplyDownwardForce().
-
Moved calculation of root motion velocity code to the new overridable function CalcRootMotionVelocity().
-
Minor improvements in functions GetLedgeMove() / MoveAlongFloor() / PhysWalking() / StepUp() / ApplyRepulsionForce()
-
-
When clearing a PlayerController's spectator pawn, its regular pawn is used for attachment and auto-managed camera target, if regular pawn has already been set up.
-
Zeroed out FRepMovement::AngularVelocity when it's not used. More efficient for replication if it previously had non-zero values (switched from simulated to not simulated).
Localization
-
New: Created a new localization module for all the editor's general needs with regards to localization configuration scripts and localization pipeline configuration.
-
Corrected behavior of FText::FindText, which would not properly ensure that the text found actually has a display string that is associated with the source string (if provided).
-
Writing manifest to file now uses full/absolute/rooted path to avoid any ambiguity when debugging.
Networking
-
New: Added a for loop to call PreReplication on all replicated components when Actor::PreReplication is called
-
New: Added connection state tracking to online beacons so their state can be inspected during use. APartyBeacons also return more useful information about reservation removals.
-
New: Added GetMaxAvailableTeamSize function to beacon. It shows the max number of new players that could be accommodated on the existing teams.
-
New: Added UStruct to FVariantData converters - very basic, converts UPROPERTY to key-value pairs.
-
New: All beacon derived classes have access to new GetNetDriverName function rather than direct access to the name.
-
New: Moved majority of ConsoleCommand out of APlayerController and into UPlayer to allow for better sharing (beacons can now use ConsoleCommand).
-
New: Party beacons can now handle updates to their existing reservations. Clients can send reservation updates and get acknowledgement or rejection.
-
New: Party beacons have new rejection responses to help disambiguate failure cases (Bad Session, Invalid Reservation).
-
New: Party reservation beacons can now handle updates to the party leader when the current leader leaves the game. Clients will report the newly negotiated leader to the server.
-
New: Party reservation beacons now send updates to all connected clients when a new client joins the beacon. It will send the current remaining reservations at that time.
-
New: The code in UWorld::Listen will no longer be compiled into client builds so that it is impossible to execute.
-
New: Added PreReplication of components when PreReplication of actors is called.
-
Fixed an issue where actors spawned on beacon net drivers weren't properly destroyed because DestroyActor assumed they were on the game net driver.
-
Made APartyBeacon duplicate reservation checks first so that other size checks don't fail before it has realized the reservation was a duplicate.
-
OnlineBeacon derived objects will dispose of their net drivers correctly on EndPlay, fixing cases where a netdriver wasn't destroyed beforehand and causing garbage collection issues with the world.
-
Party beacons start in the NonePending request type state now and will return there after the beacon is finished communicating.
-
PreReplication is called for all replicated subcomponents on an Actor.
-
Prevent possible DestroyBeacon crashes when there is no world (possibly during GC in server travel for instance).
-
The ShowInviteUI API now takes a session name.
-
AOnlineBeaconClient::ClientOnConnected is no longer virtual, use OnConnected instead.
-
Removed NetConstants.h and added MTU changes to CoreNet.h.
Online
-
New: FOnlineExternalUI::ShowProfileUI has now been implemented for Steam. This displays a specific player's profile in the steam overlay.
-
New: FUniqueNetId now derives from TSharedFromThis so that AsShared can be called on const references that are passed around from the OSS. All references have been marked as const as well.
-
Added GetInstanceName to IOnlineSubsystem interface. It returns the name of the OSS interface. Games only use "default", but PIE has the name of the instance for referencing the world context.
-
Added GetTypedHash function to FUniqueNetIdRepl so that it may be used in TMaps.
-
Fixed a possible string buffer overflow issue in Steam matchmaking code when processing advertised keys.
-
Party beacons no longer attempt to send reservation updates when there are no clients connected.
Other
-
New: Users can now provide functionality to web browser widgets to handle creation of popup windows.
-
New: Users can now provide functionality to web browser widgets to handle the closing of popup windows created by the browser.
-
New: The multicast (broadcast) analytics module is now a plugin to make it easier to use. Anyone previously including that module as part of their build will now need to include it via the Plugins UI.
-
Made Base.ini no longer be an empty file to avoid some warnings.
-
Optimized away Slate vertex buffer stalls on platforms that support parallel rendering.
-
Minor improvements to the ParticleSystemAudit commandlet. You can specify an output folder via "-AuditOutputFolder=
" and only more important data is now shown. -
Cooked builds no longer load editor-only FindInBlueprint data, resulting in less memory allocated.
-
Clear colors for hardware clears are now bound to rendertargets at creation time.
Physics
-
New: Add Distance to FHitResult info returned from traces & sweeps. (Contributed by EverNewJoy, pull request 1054.)
-
New: Changed cloth-enable cvar to be checked on any thread instead of just the game thread.
-
New: Perf: Optimize usage of weak pointers in collision conversions. Remove copy of FHitResult when filling in results. Avoid expensive MTD code for overlaps because this is only for blocking hits.
-
Fixed wrong variable in ensure in ConvertOverlappedShapeToImpactHit().
-
Performance: Avoid Quat->Rotator->Quat conversion for every physics component that moves during simulation.
-
Performance: Inlined FBodyInstance::IsInstanceSimulatingPhysics() and the accessor for bSimulatePhysics.
-
Performance: inlined some common PhysX<->Unreal type conversions.
-
Removed deep copy of hit results in UWorld::ComponentSweepMulti().
-
This also ensures that sweeps with multiple shapes actually return a correctly sorted list of hits, since all hits are now sorted together rather than appended in individually sorted chunks.
-
Added note that GeomSweepMulti_PhysX does not clear the incoming OutHits array, only appends to it. Note that GeomSweepMulti_PhysX is now marked DEPRECATED_FORGAME.
-
-
Remove VERIFY_GEOMSWEEPSINGLE and VERIFY_GEOMSWEEPMULTI from PhysXCollision.
-
Reorder calls to SetHitResultFromShapeAndFaceIndex in CollisionConversions to better match memory layout of FHitResult.
Platforms
-
New: Added process enumeration abstraction FProcEnumerator in FPlatformProcess. Now it's much easier to obtain system-wide processes information when you need it!
-
New: Enabled syntax highlighting for MetalRHI module in Xcode project.
-
Fixed %*s formatting on platforms that don't use system vswprintf.
-
Fixed IPlatformFile::OpenWrite so that with bAppend set to true behavior is the same across platforms.
-
Specifically, we make sure the file handle returned is set to the end of the file.
-
-
Fixed redundant initialization of target platforms.
Mac
-
Added few warning ignore pragmas on Mac to make the engine compile with new Clang in Xcode 7.
-
Fixed linking with CoreAudio frameworks when building with OS X 10.11 SDK.
-
Fixed paths to Mac targets in Xcode schemes.
Playstation 4
-
New: Minor fixes to PS4 parallel translate code including removal of "late resolve".
-
Add code so the bound shader state cache works with parallel translate on PS4.
-
Fixed webapi deprecation warnings.
Xbox One
-
Fixed warnings being displayed for missing ICU PDB files when building Xbox One.
Programming
-
New: We are now using the 64 bit Windows linker, even on 32 bit targets. This linker is faster and can handle larger link jobs without running out of memory.
-
New: Added GameplayTagContainer debug visualizer.
-
New: Added support for distributed compilation of Win64 builds using SN-DBS.
-
SN-DBSv2.4.0.61 and SN-DBS-VC-Extension-2013v1.0.7.0 are required.
-
-
New: Compiling the engine using Clang on Windows (Beta)
-
It's now possible to compile UE4's C++ code using the LLVM/Clang compiler on Windows
-
This feature is still very experimental, and will need additional work to be generally useful
-
If you're interested in trying it out or helping us to improve Clang support for UE4, please check out the forum thread below
-
https://forums.unrealengine.com/showthread.php?54770-Using-Clang-to-compile-on-Windows
-
-
New: Fast XML parser for UE4
-
This is a simple XML parser that can load XML files very quickly.
-
The new FFastXml class has a single static method ParseXmlFile() for loading XML files. The parser is designed to load files efficiently, but may not support all XML features or be resilient to malformed data.
-
Unlike the FXmlFile class, FFastXml does not generate an XML node tree. Instead, you must supply a callback class using IFastXmlCallback and respond to elements and attributes as they are parsed. Call the ParseXmlFile() function and pass in either the full path to the XML file to parse (XmlFilePath parameter), or load the file yourself and pass the contents using the XmlFileContents parameter.
-
One of either XmlFilePath or XmlFileContents must be valid for ParseXmlFile() to work.
-
-
To process the XML data:
-
Create your own class that implements the IFastXmlCallback interface. This class will be responsible for processing the XML elements as they are loaded by FFastXml::ParseXmlFile().
-
You'll receive a ProcessElement() call for every XML element that is encountered, along with a corresponding ProcessClose() when that element's scope has ended. ProcessAttribute() will be called for any attributes found within the scope of the current element.
-
-
Remember to add a module dependency on "XmlParser" in order to be able to call FFastXml::ParserXmlFile().
-
This XML parser is based on John W. Ratcliff's "FastXml".
-
-
New: It is now possible to use