언어:

언리얼 엔진 4.12 릴리즈 노트

언리얼 엔진 4.12 릴리즈 노트

이번 릴리즈에는 GitHub 의 언리얼 엔진 개발자 커뮤니티가 제출한 106 종의 개선사항을 포함해서 수 백 종의 언리얼 엔진 4 업데이트가 포함되어 있습니다! 언리얼 엔진 4.12 에 기여해 주신 모든 분들께 감사의 말씀 올립니다:

aninda, amcofi, Artem V. Navrotskiy (bozaro), Beau Hardy (psychogony), Black Phoenix (PhoenixBlack), Brent Scriver (FineRedMist), Cedric Neukirchen (eXifreXi), Céleste (CelPlays), chendi (cdsama), Courtland Idstrom (Frugality), David Palacios (Hevedy), DavidNSllva, Erik (erikbye), esdasuka, Frank Force (KilledByAPixel), Graham Hughes (graehu), Grimmick, Hannah Gamiel (hgamiel), Hongjun Han (h27han), Ian Fox (MaideCa), jamendxman3, James Baxter (TheJamsh), Jarl Gullberg (Nihlus), Jason (Abatron), Jeremy (JeroMiya), Jorge Martins (SNikon), Kartik (i64), Kim Sang Kyun (skkim-ginno), Konstantin Zaitcev (kosz78), Leon Rosengarten (lion03), M3d10n, MacAndor, Maik Klein (MaikKlein), Manny (Manny-MADE), Marat Radchenko (slonopotamus), Mathew Wadstein (MWadstein), Lucyberad, Matthias Hölzl (hoelzl), MAVRIN (artemavrin), Maxim Pestun (maxpestun), mbehensky, meChiel, mfortin-bhvr, mipg, Narendra Umate (ardneran), Nikola Dimitroff (nikoladimitroff), Pablo Zurita (pzurita), phoboz-net, Pierre-Luc Loyer (plloyer), Piotr Bąk (Pierdek), projectgheist, Rama (EverNewJoy), Robert Chubb (SaxonRah), Robert Khalikov (nbjk667), Robert Segal (robertfsegal), RobertTroughton, Ryan Nielson (RyanNielson), Samuel Groß (saelo), Sasha Petrovich (xulture), Sébastien Rombauts (SRombauts), Stephen Whittle (stephenwhittle), Taces, Temaran, Tim Lindeberg (timlindeberg), Tobias Mollstam (mollstam), wdhwg001, Will Stahl (merlin91), WymzeeLabs, Yohann Martel (ymartel06), Zelex.

새로운 내용

언리얼 엔진 4.12 에서는 Sequencer (시퀀서)를 사용할 수 있습니다! 이는 완전 비선형 실시간 시네마틱 & 애니메이션 툴 로, 마티네의 뒤를 잇습니다. 여러가지 강력한 기능이 많이 있는데, 자동 키프레임, 시네마틱 카메라, 라이브 게임플레이 녹화 등입니다. 시퀀서로 대규모 애니메이션 프로젝트의 공동 작업이 편해지는데, 시퀀스를 원하는 만큼 다수의 애셋으로 나누어 체계적인 관리가 가능하기 때문입니다. 기존 마티네 애니메이션을 열면 시퀀서로 임포트할 수 있으며, 기존 마티네 역시도 계속 지원됩니다.

언리얼의 VR 에디터 미리보기도 가능합니다. 가상현실에서 모션 컨트롤러를 사용하여 월드를 자유롭게 돌아다닐 수 있는 미래형 기능입니다. 액터의 선택과 이동, 새 오브젝트의 배치와 에디터의 UI 접근까지, 모두 가상현실 몰입 상태에서 가능합니다. 이 기능은 현재 HTC Vive 또는 Oculus Touch 개발 하드웨어를 필요로 합니다. 시험해 보려면, 에디터 개인설정의 실험단계 부분 Enable VR Editing (VR 편집 활성화) 옵션을 켜기만 하면 됩니다.

Windows에서 작업하시는 C++ 프로그래머 분들께 한 말씀, 이제 언리얼 엔진은 Visual Studio 2015 가 필수 입니다. Visual Studio 2015 모든 데스크톱 버전이 지원되며, (무료) Express 와 Community 에디션도 포함됩니다. 마음 편히 업그레이드해 주시기 바랍니다.

모든 릴리즈마다 렌더링, VR, 애니메이션, 오디오, 모바일 디바이스용 주요 신기능을 선보이는 것은 물론 퍼포먼스 향상이나 보고된 버그를 잡는 데도 열심히 노력하고 있습니다. 언리얼 엔진 4.12, 즐겨주시기 바랍니다!

주요 기능

시퀀서

비선형 에디터의 위력과 3D 애니메이션 편집 기능이 결합된 시퀀서는, 게임내 시네마틱은 물론 영화, 텔레비전, 사전 시각화의 시퀀스 샷 제작도 가능합니다.

image alt text

비선형 작업방식

시퀀서의 비선형 작업방식은 창의적이고 반복처리를 통한 해결 방법으로 샷의 구성 및 편집이 가능합니다. 라이트의 색 변경이나 포그 엘리먼트 추가처럼 특정 샷에 대한 변화가 쉽게 가능하며, 기존 테이크를 돌려보면서 시퀀스 조합을 실험해 보기에도 좋습니다. 다수의 아티스트들이 동시에 다수의 샷 작업을 하기에도 좋게끔 디자인되어 있습니다. 런처 학습 탭의 Subway Sequencer (지하철 시퀀서) 프로젝트를 열어 보면 실제 시퀀서 작동방식을 확인할 수 있습니다.

image alt text

  • 전통적인 비선형 편집 프로그램처럼 샷 재배치가 가능합니다.

  • 쉽게 한 샷의 다른 테이크를 찍고 되돌릴 수 있습니다.

  • 샷 단위 조정과 샷 전용 액터 스폰이 가능합니다.

  • 협업을 염두에 두고 디자인되었습니다.

직관적 유저 인터페이스

유저 인터페이스 디자인은 마티네와 전통적 3D 소프트웨어 패키지의 영향을 받아, 애니메이션 데이터의 확인, 편집, 체계 정리를 명확하고 간결한 방식으로 처리할 수 있습니다. 3D 콘텐츠 제작자는 인터페이스가 직관적이고 익숙하다고 느낄 것입니다. image alt text.

  • 액터 유형에 따라 자동 트랙 생성이 가능합니다.

  • 표준 키보드 단축키가 지원됩니다.

  • 자동 키프레임 기능이 지원됩니다.

  • 트랙과 키 편집/생성 위젯이 포함되어 있습니다.

  • 트랙 색을 사용자가 정의할 수 있습니다.

  • 키프레임 모양과 색을 보간 작동방식으로 정의할 수 있습니다.

  • 폴더와 라벨로 체계적인 관리가 가능합니다.

시네마틱 카메라와 시네마틱 뷰포트

새로운 카메라 릭 액터와 결합된 새로운 시네마틱 카메라 액터로 영화 제작자는 물론 초보자들도 현실적인 카메라 샷을 쉽게 만들 수 있습니다. 효율적인 새 뷰포트로 영화 제작에서 데일리용 샷 시퀀스를 확인할 수 있습니다.

image alt text

  • 시네마틱 카메라 액터의 프로퍼티로 현실의 카메라를 흉내낼 수 있습니다.

    • 렌즈와 필름백 세팅 커스터마이징이 가능합니다.

    • 초점 거리가 지원됩니다.

    • 바라보는 곳의 트래킹이 가능합니다.

  • 카메라 릭 크레인과 카메라 릭 레일 액터가 지원됩니다.

  • 시네마틱 뷰포트가 제공됩니다.

    • 타임라인과 트랜스포트 제어가 포함되어 있습니다.

    • 컷 지점의 샷 인/아웃을 나타내는 프레임 번호가 표시됩니다.

    • 원활한 구성을 위한 오버레이와 프레임 헬퍼가 있습니다.

시퀀스 녹화

시퀀스 녹화는 게임플레이를 녹화한 뒤 그 녹화된 요소를 샷에 바로 넣을 수 있습니다. 심지어 기존 녹화를 재생하는 장면을 녹화하는 것도 가능합니다.

image alt text

  • 게임플레이를 스켈레탈 애니메이션, 트랜스폼, 이벤트, 오디오 트랙으로 나눠 녹화합니다.

  • 녹화 재편집을 위한 트랙이 자동 생성됩니다.

시퀀서 관련 자세한 정보를 찾을 수 있는 링크입니다:

언리얼 VR 에디터 (프리뷰)

새로운 "VR 에디터" 모드로 가상현실 몰입 상태에서 레벨을 돌아다니며 편집할 수 있습니다! 오브젝트 선택과 이동은 물론, "월드" 자체를 잡아당겨 전체 레벨을 자유로이 이동, 회전, 스케일 조절까지 가능합니다! 가상현실 모션 컨트롤러로 자신의 관점에서 오브젝트에 대한 일대일 제어가 가능합니다.

image alt text

가상현실에서 콘텐츠 브라우저와 같이 익숙한 에디터 기능에 접근한 뒤 트랜스폼 기즈모를 사용해서 오브젝트를 정교히 배치할 수 있습니다. 스내핑 툴로 줄도 깔끔하게 맞출 수 있습니다.

image alt text

월드를 양쪽 손으로 잡아당겨 월드 스케일을 정말 크게 만들 수 있습니다. 레벨의 미세한 디테일을 조사하고 편집하기가 쉬워집니다.

image alt text

이 기능은 아직 초기 프리뷰 단계라, 에디터 개인설정의 실험단계/VR 부분 아래 Enable VR Editing (VR 편집 활성화) 옵션을 켜줘야 합니다. 그러면 새로운 "VR 모드" 툴바 버튼이 나타나 언제든지 VR 모드 토글이 가능합니다! 원하는 어떤 프로젝트든 VR 에디터를 사용할 수 있으며, (파일 - 새 레벨 옵션으로 접근할 수 있는) VR-Basic 맵에서 간단한 실험도 가능합니다.

중요: VR 에디터 모드는 월드와 UI 상호작용을 위해 모션 컨트롤러가 필요하므로, HTC Vive 또는 Oculus Rift 에 터치 컨트롤러 개발 하드웨어가 필요합니다.

참고로 이 기능은 아직 초기 실험단계인 점, 지속적으로 서서히 발전시켜 나갈 것이라는 점 유념해 주시기 바랍니다. 확인해 보시고, 피드백 감사히 받겠습니다!

언리얼 VR 에디터 관련 부가 정보를 많이 얻을 수 있는 링크입니다:

Daydream VR 지원

image alt text

4.12 에 Google의 새로운 Daydream 플랫폼이 지원됨을 발표하게 되어 기쁩니다! Daydream은 새로운 모바일 VR 플랫폼으로, Daydream 인증 폰에서 고품질 VR 체험을 선사할 수 있습니다. UE4 에는 모든 Daydream 세트에 포함된 모션 컨트롤러를 포함해서, 이 플랫폼이 완벽 지원됩니다.

Daydream 개발 키트가 없어도 바로 시작하실 수 있습니다! 같은 플러그인으로 Google 카드보드 앱을 만들 수도 있습니다. Daydream 폰이 아닌 다른 Android 디바이스에서는 해당 기능을 끄기만 하면 됩니다.

지원 활성화 방법은, 에디터의 플러그인 창에서 Google VR (Google VR) & Google VR Controller (Google VR 컨트롤러) 옵션을 켜주면 됩니다.

플레이너 리플렉션

이제 실시간 평면 리플렉션이 지원됩니다!

image alt text

리플렉션 방향에서 씬을 다시 한 번 렌더링하는 방식으로 작동하기에, 상당한 비용이 듭니다. 그러나 리플렉션 퀄리티가 스크린 스페이스 리플렉션보다 훨씬 좋습니다.

image alt text

왼쪽: 스크린 스페이스 리플렉션에 화면밖 부분 누수, 오른쪽: 플레이너 리플렉션

플레이너 리플렉션을 사용하려면, 먼저 렌더링 프로젝트 세팅의 Support global clip plane for Planar Reflections (플레이너 리플렉션에 글로벌 클립 면 지원) 옵션을 켜고 에디터를 재시작합니다. 그런 다음 플레이너 리플렉션 액터를 배치하고 씬에서 위치를 조정합니다. 주변의 리플렉션이 있는 머티리얼은 자동으로 플레이너 리플렉션에 영향을 받으며, 그 노멀을 사용하여 리플렉션에 디스토션 효과를 줘서 파동을 시뮬레이션해 냅니다.

이 기능은 아직은 신기능으로 몇 가지 제약이 따릅니다:

  • 리플렉션 패스에서 어떤 렌더링 기능을 켜고 끌지 제어할 수 있는 방법이 없습니다.

  • 리플렉션 패스에서는 다이내믹 섀도와 포그가 틀리게 나옵니다.

  • 러프니스 값은 상수만 지원되며, 플레이너 리플렉션 컴포넌트에서 지정합니다.

  • 플레이너 리플렉션은 모바일에서 작동은 하나, 플레이너 리플렉션을 사용하는 머티리얼은 머티리얼 프로퍼티의 Mobile 섹션 아래 Planar Reflections 플래그를 설정해 줘야 합니다.

하이 퀄리티 리플렉션

이번 릴리즈에는 고도로 사실적인 표면 리플렉션을 위한 여러가지 새로운 렌더링 기능이 추가되었습니다!

image alt text

매우 높은 퀄리티의 바삭한 리플렉션을 구현하여 무엇보다 사실적인 차량 도색 표현을 이뤄내고자 했습니다. 여기에는 지오메트리 데이터 처리와 인코딩 방식에서부터 씬의 고해상도 리플렉션 캡처 활성화에 이르기까지 여러 분야의 개선이 필요했습니다.

고정밀 스태틱 메시 버텍스 노멀 & 탄젠트 인코딩 - 하이 퀄리티 리플렉션을 내는 데 있어 단 하나 가장 중요한 요소는 버텍스 노멀 & 탄젠트 표현을 얼마나 정확히 할 수 있는가에 달려 있습니다. 그래서 노멀과 탄젠트를 채널 벡터당 16 비트 인코드 옵션을 추가했습니다. 이를 통해 개발자들은 버텍스 버퍼 인코딩에 있어 퀄리티와 메모리 사이의 균형을 쉽게 맞출 수 있게 되었습니다. 이 Use High Precision Tangent Basis (고정밀 탄젠트 베이시스 사용) 옵션은 스태틱 메시 에디터의 Build Settings (빌드 세팅) 섹션에서 찾을 수 있습니다.

스카이 큐브맵 & 리플렉션 프로브의 커스텀 해상도 - 하이 퀄리티 리플렉션을 내기 위한 두 번째 부분은, 배경과 로컬 리플렉션입니다. 기존에 엔진은 스카이 라이트와 리플렉션 프로브가 이용하는 쿠킹된 큐브맵 해상도를 하드코딩했었습니다. 이제 개발자가 해상도를 선택하여 퍼포먼스, 메모리, 퀄리티 사이의 균형을 맞출 수 있게 되었습니다. 참고로 스카이라이트 큐브맵 해상도는 스카이라이트 별로 설정 가능한 반면, 리플렉션 프로브의 큐브맵 해상도는 프로젝트 단위 세팅으로 설정됩니다. 매우 높은 해상도를 사용하면 GPU 메모리 요구치로 인해 퍼포먼스에 크게 영향을 끼칠 수 있습니다.

리플렉션 프로브용 커스텀 큐브맵 - 이제 각 리플렉션 프로브별로 커스텀 큐브맵을 지정할 수도 있게 되었습니다. 이를 통해 디테일이 살아있는 커스텀 큐브맵을 만들어 로컬 리플렉션을 강화 또는 미세 조정할 수 있습니다.

고정밀 GBuffer 노멀 인코딩 - 마지막으로 고정밀 GBuffer 노멀 인코딩 포맷을 선택할 수 있는 옵션을 노출시켜, 다른 기술보다도 SSR 이 고정밀 노멀에 의존할 수 있도록 했습니다. 고정밀 GBuffer 노멀 인코딩은 노멀 벡터를 채널 당 16 비트의 3 채널로 인코딩합니다. 이 인코딩은 GPU 메모리를 더욱 많이 쓰므로 퍼포먼스에 영향이 있을 것입니다.

이중 노멀 투명 코팅 셰이딩 모델

이제 Clear Coat (투명 코팅) 머티리얼에 복수의 노멀을 사용하여 카본 파이버같은 표면에 보다 사실적인 셰이딩을 낼 수 있게 되었습니다.

image alt text 왼쪽: 구형 UE4 투명 코팅, 가운데: 신형 UE4 클리어 코팅에 하단 노멀, 오른쪽: 실제 사진

투명 코팅 셰이딩 모델에 이제 투명 코팅층 아래 표면에 쓸 이차 노멀 맵을 지정할 수 있는 옵션이 생겼습니다. 이를 통해 카본 파이버처럼 투명 코팅층과 지오메트리 표면이 다른 복잡한 머티리얼을 보다 정확히 모델링해 낼 수 있게 되었습니다.

이 옵션은 프로젝트 세팅을 통해 켜줘야 합니다: 렌더링 -> Clear Coat Use Dual Normal (투명 코팅에 이중 노멀 사용). 이 기능을 켜면 모든 투명 코팅 머티리얼에 약간의 비용이 추가되고 메인 렌더링 코드에도 약간의 부하가 더해집니다.

사용하려면 반드시 머티리얼 그래프에 Clear Coat Bottom Normal 노드를 배치해야 합니다. 여기에 이차 노멀 계산의 출력을 연결합니다.

OSVR 지원 (프리뷰)

OSVR 팀의 노력 덕에 UE4 에 이제 기본적으로 OSVR 이 지원됩니다!

image alt text

OSVR 소프트웨어 플랫폼을 통해 이제 다양한 VR & AR 디바이스 및 주변기기와의 통신을 엔진 공용 층을 통해서 할 수 있게 되었습니다. 플랫폼 및 지원되는 디바이스 관련 상세 정보는 http://www.osvr.org/ 에서 참고하시기 바랍니다.

벌칸 모바일 렌더리 (프리뷰)

이번 릴리즈에서는 Vulkan (벌칸) 그래픽 API 를 사용한 모바일 렌더링의 초기 프리뷰가 가능합니다.

image alt text

위 스크린샷은 벌칸으로 렌더링된 ProtoStar (프로토스타) 데모로, 삼성 갤럭시 S7 언팩 이벤트에서 선보인 것입니다. 현재 모바일 렌더링 기능만 구현되어 있습니다.

고품질 모바일 포스트 프로세싱

컬러 그레이딩 포함 필르믹 톤매퍼가 이제 모바일 디바이스에서 작동됩니다!

image alt text

더 높은 품질의 가우시안 뎁스 오브 필드가 ES3.1 지원 모바일 디바이스에서 지원됩니다!

image alt text

모바일용 섀도 향상

단일 스테이셔너리 라이트에 대한 다이내믹 캐스케이드 섀도 맵이 이제 모바일 렌더러에 지원됩니다!

image alt text

스테이셔너리 디렉셔널 라이트는 이제 무버블 오브젝트에 대해서만 전체 씬 다이내믹 CSM 섀도를 드리우고, 씬의 스태틱 오브젝트가 드리우는 미리계산 그림자와 제대로 블렌드합니다. CSM 섀도는 모듈레이트 섀도에 보이는 이중 그림자 문제가 보이지 않으며, 이 기법은 다수의 오브젝트에 그림자를 드리울 때는 더욱 빠르기도 합니다.

  • 이 기능은 텍스처 샘플러를 하나 추가로 사용하나, 프로젝트 세팅에서 끌 수 있습니다: 렌더링 -> 모바일 -> Combined Static and CSM Shadowing (스태틱 & CSM 섀도 혼합). 그러면 머티리얼에서 샘플러를 하나 추가로 사용할 수 있습니다.

  • 혼합 섀도를 받는 컴포넌트는 Receive Combined Static and CSM Shadows from Stationary Lights (스테이셔너리 라이트에서 스태틱 & CSM 혼합 섀도 받기) 플래그를 설정해 줘야 합니다.

고사양 Android & iOS 디바이스용 GPU 파티클

벡터 필드 포함 GPU 파티클이 이제 고사양 모바일 디바이스에서 작동됩니다!

image alt text

  • 이 기능은 모바일 디바이스에서 MRT 지원 32 비트 부동소수점 렌더 타깃을 지원해야 합니다.

  • 애플은 A8 칩 이상이 탑재된 디바이스에서 지원됩니다 (아이폰 6, 아이패드 에어 2, 아이패드 미니 4 이상).

  • Android 6.0 이상 Adreno 4xx 와 Mali-T7xx GPU 탑재 디바이스에서 지원됩니다 (갤럭시 노트 4, 노트 5, S6, S7, 넥서스 6P 등).

블루프린트를 C++ 로 쿠킹 (프리뷰)

블루프린트 실행에 들어가는 가상머신 부하를 줄이기 위해, 블루프린트를 네이티브 소스 코드로 패키징해 주는 기능을 추가했습니다. 이 기능은 아직 실험단계라 발매되는 게임에는 사용을 자제해 주시고, 사용 후 피드백 주시면 감사하겠습니다!

image alt text

  • 에디터에서 프로젝트의 패키징 세팅을 통해 켤 수 있습니다: 실험단계 => Nativize Blueprint Assets (블루프린트 애셋 네이티브화).

    • UAT BuildCookRun 스크립트에 -NativizeAssets 파라미터를 붙여 실행시킬 수도 있습니다.

  • 생성되는 소스는 프로젝트의 Intermediate (중간) 폴더 내 플러그인으로 저장됩니다: ??Intermediate\<PLATFORM>\NativizedAssets\

  • 게임의 DefaultEditor.ini 내 [BlueprintNativizationSettings] 아래에서 특정 블루프린트를 프로세스에서 제외시킬 수 있습니다.

    • 블루프린트 일반 유형을 제외시킬 수 있습니다: +ExcludedBlueprintTypes=/Script/UMGEditor.WidgetBlueprint

    • 특정 애셋 역시 제외시킬 수 있습니다: +ExcludedAssets=/Game/Blueprints/MyBlueprint

그래스 & 폴리지 스케일 조정

스케일 조정(scalability) 시스템에 폴리지 스케일 조정 세팅이 새로 생겼습니다. 랜드스케이프 그래프와 폴리지 밀도를 현재 스케일 조정 세팅에 따라 자동으로 감소시킬 수 있으며, 이 세팅은 실행시간에 변경할 수 있으므로, 게임에서 폴리지 디테일 세팅 슬라이더를 구현할 수 있습니다.

image alt text

랜드스케이프 그래스는 폴리지 스케일 조정에 자동으로 포함되나, 폴리지에서는 폴리지 타입의 Scalability 섹션에서 Enable Density Scaling (밀도 스케일 조절 활성화) 옵션을 켜 줘야 합니다. 전형적으로 작은 바위나 덤불처럼 콜리전이 없는 디테일 폴리지에 켜줍니다. 나무와 같이 콜리전이 있는 폴리지 타입은 꺼줘야 하는데, 제거된 인스턴스에 대한 콜리전이 게임에 계속 남아있기 때문입니다.

밀도 스케일 조절은 grass.DensityScale 와 foliage.DensityScale 로 환경설정된 각 스케일 조절 레벨마다 그래스와 폴리지에 적용되는데, 이 변수들은 BaseScalability.ini 의 [FoliageQuality] 섹션 아래 있으며, 게임의 DefaultScalability.ini 에서 덮어쓸 수 있습니다.

iOS 용 UMG 웹 브라우저 위젯

UMG 웹 브라우저 위젯이 이제 iOS 에 지원됩니다!

image alt text

데스크톱 플랫폼의 웹 브라우저로는 Chromium 이 사용되나, iOS 와 Android 둘 다 UMG 레이아웃에 일치하도록 맞춰진 네이티브 WebKit 컨트롤을 사용하므로, 실행파일 크기가 최소화되고 퍼포먼스가 향상됩니다.

트위스트 보정형 애니메이션 노드

새로운 Twist Corrective (트위스트 보정형) 노드를 추가, 모프 타깃과 같은 것에서 어느 한 본을 기준으로 다른 본의 트위스트에 따라 커브 값을 구동시킬 수 있습니다. 예를 들어, 목이 오른쪽이나 왼쪽으로 너무 뒤틀린 경우, 목에 모프 타깃을 적용하여 보다 부드러운 모양새를 낼 수 있습니다.

image alt text image alt text

본 이름과 로컬 축, 트위스트 노멀을 트위스트 축으로 사용해서 베이스 프레임과 트위스트 프레임을 지정합니다. 지정한 커브를 사용하여 [레퍼런스 포즈 델타 각도, 최대 각도] 값을 [매핑된 최소 범위, 매핑된 최대 범위] 로 매핑시킵니다.

풀 씬 임포터

풀 씬 임포트로 이제 Max / Maya / Blender 에서 이미 만든 환경을 가져와 전체 씬을 에디터의 레벨에 임포트할 수 있습니다.

image alt text image alt text

환경에 새로운 씬 FBX 애셋이 생성되어, 다시 임포트하여 환경 반복처리 작업도 할 수 있습니다. 4.11 에서 사용할 수 있었던 초기 버전은 스태틱 메시가 들어있는 씬만 지원합니다. 4.12 버전에서는 스켈레탈 메시가 포함된 씬도 임포트할 수 있어 완성도가 높아졌습니다.

이 기능을 시험해 보려면, 메뉴에서 파일 > 씬 임포트 후 임포트할 FBX 환경을 선택하기만 하면 됩니다.

액터 병합

이제 손쉽게 레벨 뷰포트에서 바로 메시 액터를 병합할 수 있습니다. 드로 콜이 줄어 퍼포먼스가 향상됩니다.

image alt text image alt text

스태틱 메시 병합 예제로, 왼쪽 은 레벨 뷰포트의 이전 뷰 / 오른쪽 은 스태틱 메시 에디터의 이후 뷰입니다.

Merge Actor (액터 병합) 기능은 엔진의 실험단계 기능에서 탈피, 창/개발자/기타 아래에서 찾을 수 있습니다. UI 패널도 계층형 LOD 시스템용 병합 경로에 대한 최신 변경사항을 지원하도록 확장 및 업데이트 되었습니다.

image alt text

픽셀 조사 툴

새로운 Pixel Inspector (픽셀 조사 툴)는 씬의 픽셀을 클릭하면 그 색이 나오는 데 기여한 머티리얼과 렌더링 상태를 시각화시켜 주는 툴입니다.

image alt text

씬의 픽셀 색이 왜 이상하게 나오는지 궁금했던 적이 있나요? 어떤 머티리얼 입력때문에 그 픽셀 색이 그렇게 나오는지 알려주는 툴이 있다면 어떨까요? 픽셀 조사 툴 툴이 도와드립니다!

픽셀 조사 툴 툴은 툴바의 개발자 툴 아래에서 찾을 수 있습니다. Enable Pixel Inspector (픽셀 조사 툴 활성화) 박스를 체크한 뒤, 에디터 뷰포트( 레벨, 머티리얼, 블루프린트 등)에 커서를 올리면 표시됩니다. Esc 키를 치면 픽셀 조사 툴가 조사를 중단하고 마지막으로 조사한 픽셀을 분석해 볼 수 있습니다.

플랫폼 SDK 업데이트

매번 릴리즈마다 플랫폼 협력사의 최신 SDK 릴리즈를 지원하도록 엔진 업데이트를 하고 있습니다. 이번 릴리즈에는 콘솔 플랫폼과 아울러 HTML5 와 Android도 업데이트되었습니다.

image alt text

  • Xbox One: March 2016 XDK 로 업그레이드 되었습니다.

  • Playstation 4: PS4 SDK 3.508.031 로 업그레이드 되었습니다.

  • HTML5: Emscripten 1.35.0 으로 업그레이드 되었습니다.

  • Android: NDK 11c 로 업그레이드 되었습니다. CodeWorks for Android 1R4 인스톨러는 기존의 (Engine/Extras/AndroidWorks 에 위치한) AndroidWorks 1R1 을 대체합니다.

마스크 필드 변수

이제 인티저 프로퍼티를 비트마스크로 선언할 수 있으며, 여기에 선택적으로 비트플래그 값으로 캡슐화되는 Enum 을 연관시켜 줄 수 있습니다. 이 작업은 C++ 와 블루프린트 양쪽에서 작동합니다!

image alt text

  • 네이티브 프로퍼티는 Bitmask 메타데이터를 마킹하면, 블루프린트 에디터에 추가되는 변수는 Bitmask 체크박스가 생깁니다.

  • 비트마스크 변수에는 다양한 Default Value (기본값) 인터페이스가 있어, (Set 노드와 마찬가지로) 다수의 비트를 체크할 수 있습니다.

  • 비트마스크 연산을 지원하는 노드가 추가되었습니다: Make Bitmask, Bitwise NOT

TV 안전 지대 디버깅

콘솔 타이틀 작업시, UI 가 TV 화면 가장자리에 너무 가까이 나오지 않도록 하는 것이 중요합니다. 그러한 경우를 예방하는 데 도움이 되는 간단한 툴을 추가했습니다.

image alt text

사용하려면 DefaultEngine.ini 의 [SystemSettings] 아래 다음 줄을 추가하거나, 콘솔 명령으로 입력하면 됩니다:

r.DebugSafeZone.Mode 로 디버그 시각화 오버레이를 조절합니다 (0..2, 기본값 0).

  • 0: Safe Zone (안전 지대) 오버레이를 표시하지 않습니다.

  • 1: 제목 안전 지대 오버레이를 표시합니다.

  • 2: 액션 안전 지대 오버레이를 표시합니다.

r.DebugSafeZone.OverlayAlpha 로 디버그 시각화 오버레이 불투명도를 조절합니다 (0..1, 기본값 0.3).

기본적으로 안전 지대를 지원하지 않는 플랫폼에서는, 에디터에서의 빠르고 쉬운 테스트용으로 안전 지대 시뮬레이션이 가능합니다:

  • r.DebugSafeZone.TitleRatio 는 제목 안전 지대 여백을 FDisplayMetrics 단위로 반환합니다.

  • r.DebugActionZone.ActionRatio 는 액션 안전 지대 여백을 FDisplayMetrics 단위로 반환합니다.

  • 둘 다 0..1 범위이며 기본값은 1, 즉 디스플레이 100% 가 안전함을 나타냅니다. 전형적인 테스트 값은 0.9 입니다.

내장된 컴포짓 애니메이션

이제 애님 몽타주나 애님 컴포짓에 다른 애님 컴포짓을 내장시켜, 독립적인 애니메이션 애셋을 보다 유연하게 생성할 수 있습니다. 아래 그림에서 TEST_Montage 에 TEST_AnimComposite 이 들어있으며, 그 자체에도 여러가지 다른 애니메이션 시퀀스가 들어있습니다.

image alt text

image alt text

콜리전 메시에 선택적 LOD

이제 Complex (복합, 폴리 단위) 콜리전에 스태틱 메시의 어떤 LOD 를 사용할 것인지 선택할 수 있습니다. 이를 통해 Simple (단순, 컨벡스 헐) 콜리전이 적합하지 않은 메시에 대해 보다 단순한 형태의 콜리전 표현을 임포트 또는 생성 가능합니다. 이는 작동방식이나 퍼포먼스 향상으로 이어지고, 하이 폴리 메시의 메모리 사용량이 크게 줄어듭니다.

image alt text

메시의 기본 콜리전

스태틱 메시 컴포넌트는 이제 디폴트 콜리전을 지원, 즉 스태틱 메시 애셋에서의 콜리전 세팅을 그대로 사용합니다. 이로써 콜리전 정보를 한 곳에 지정할 수 있어, 인스턴스를 맵에 배치하면서 일일이 업데이트해야 하던 작업이 편해집니다. 스카이 돔 메시를 예로 들 수 있겠는데, 이제 애셋 자체에 콜리전을 끄면 각 인스턴스는 기본적으로 콜리전이 꺼진 상태로 배치됩니다.

image alt text

필요한 경우 스태틱 메시 컴포넌트의 세팅을 기본값 이외의 것으로 변경해서 인스턴스별로 세팅을 덮어쓰는 것도 여전히 가능합니다.

캐릭터 이동 속도 해킹 방지

네트워크 게임은 종종 사용자가 치트를 통해 불공정한 이득을 보려는 대상이 되곤 합니다. 일반적으로 게임에서 많이 사용되는 방법은 치트 소프트웨어를 사용하여 게임 클라이언트에서의 시간 흐름을 빠르게 하는 방법이 있습니다. 변경되지 않은 캐릭터 이동 함수성을 사용해서 만들어진 게임들은 이러한 치트에 취약하여, 종종 치트를 쓰는 사람은 보다 빠른 속도로 이동이 가능했었습니다.

이러한 유형의 치트 방지에 도움이 되고자 캐릭터 이동에 설정 가능한 시간 차이 감지법과 해결법(, 소위 스피드 핵 방지법)을 추가했습니다.

감지법은 서버가 지난 번 이동 신호를 받은 이후 알려진 서버 권위자 경과 시간과 클라이언트의 타임 스탬프를 비교한 뒤, 이 차이 누계 수치를 기록합니다. 이 시간 차이가 설정한 한계치를 넘으면 감지법을 발동시키고, 옵션을 통해 해결까지도 발동합니다. 해결법은 앞으로의 클라이언트가 보고한 경과 시간을 서버 시간으로 덮어쓰고 이러한 이동 경과 시간의 일정 부분을 시간 차이가 해소될 때까지 빼앗긴(감지된 총 차이) 시간을 갚는 데 사용합니다.

시간 차이 방지법은 기본적으로 꺼져있으며, 새로 생긴 설정가능 옵션은 GameNetworkManager 에 있습니다. 기본값은 BaseGame.ini 에서 찾을 수 있으며, 프로젝트 전용 게임 config 파일에서 덮어쓸 수 있습니다.

네트워크 리플레케이션 최적화

적응형 네트워크 업데이트 빈도라는 신기능을 추가, 보통은 액터에 아무런 변화가 없는데도 리플리케이트 중복 시도로 낭비되는 CPU 사이클을 절약시켜 줍니다. 시스템은 액터에 프로퍼티가 얼마나 자주 변하는지 학습한 뒤, 서서히 액터의 네트워크 업데이트 빈도를 동적으로 적응시켜 나갑니다.

이 신기능을 사용하면 리플리케이션 퍼포먼스가 대폭 향상될 수 있습니다!

네트워크 리플레이에 커스텀 데이터

리플레이는 이제 일반 네트워크 스트림과 별도로 정보를 저장할 수 있습니다. 이 기능은 캐릭터 무브먼트 컴포넌트의 위치 스무딩을 크게 향상시키는 데 사용되었습니다. 위치 데이더가 별도로 저장되므로, 이제 스트림을 미리 살펴 캐릭터의 위치를 정확히 예상할 수가 있게 되었고, 이펙트나 기타 이벤트와 더욱 잘 맞아떨어지게 되었습니다.

ACharacter::PreReplication 을 살펴보면 이 기능이 어떻게 사용되었는지 감을 잡을 수 있습니다. ChangedPropertyTracker.SetExternalData 를 사용해서 해당 프레임에서 액터에 원하는 데이터를 저장합니다. 그리고 CharacterMovementCompoment.cpp 를 살펴보면, UDemoNetDriver::GetExternalDataArrayForObject 를 사용해서 이 추가 정보를 구하는 방법을 확인할 수 있습니다.

사운드 믹스에 동적인 사운드 클래스 조정 덮어쓰기

UE4 사운드 믹스는 사운드 클래스 프로퍼티를 동적으로 조정할 수 있는 강력한 툴입니다. 하지만 이전 버전까지 커다란 한계점은, 사운드 믹스 애셋 자체가 게임플레이 도중 동적으로 변할 수 없었다는 점입니다. 이러한 한계점 우회법 한 가지는, 볼륨 조정만 다른 사운드 믹스를 다수 만들어 두는 것이었습니다. 그런 다음 게임플레이 도중 이러한 정적인 사운드 믹스를 푸시 / 팝 하여 게임의 사운드 클래스를 게임 상태와 짝짓는 것이었습니다. 이는 복잡하고 오류에 취약한 구현 전략이라 게임 상태와 사운드 클래스간의 부드럽고 연속적인 매핑이 불가능했습니다.

4.12 에서는 이제 블루프린트에서 새로운 블루프린트 함수 Set Sound Mix Class Override 를 사용하여 사운드 믹스가 자신의 사운드 클래스 조정을 동적으로 덮어쓸 수 있게 되었습니다.

image alt text

사운드 믹스 내 사운드 클래스 조정 값은 지정된 페이드 인 시간에 걸쳐 주어진 값으로 보간됩니다. 지정된 사운드 클래스가 사운드 믹스 내 존재하지 않는 경우, 사운드 클래스를 사운드 믹스에 덧붙이고, 1.0 에서부터 목표 값으로 (즉 미적용 값에서 적용 값으로) 보간해 갑니다. 이 기능을 통해 사운드 디자이너는 동적인 게임플레이 이벤트나 게임 상태에 맞춰 사운드 믹스 볼륨을 밀접하게 통합시킬 수 있을 것입니다. 예를 들어, 이제 사운드 클래스의 프로퍼티를 어떤 게임 상태, 즉 차의 주행 속도, 맵에서의 정교한 위치, 액터 생명력 수준, 플레이어의 공포 수준 등과 밀접하게 결합시키는 것이 가능해 졌습니다. 이 기능으로 또 한가지, 슬레이트에 게임의 볼륨 선호도 패널을 작성할 수가 있어, C++ 코드를 통해 사운드 클래스 볼륨을 수동으로 덮어쓴 뒤 정적인 애셋 데이터에 쓰지 않아도 되게 되었습니다.

덮어쓰기를 제거하려면 새로운 블루프린트 함수 Clear Sound Mix Class Override 를 사용합니다. 그러면 사운드 클래스 조정 값을 덮어쓰지 않은 상태의 원래 값으로 보간해 갑니다. 사운드 클래스가 원래 사운드 믹스 내에 없는 경우, 조정 값은 페이드 아웃 시간에 걸쳐 1.0 으로 보간해 가며, 완료시 사운드 믹스에서 자동 제거됩니다.

오디오 현지화 (프리뷰)

4.12 에는 (다이얼로그 웨이브와 다이얼로그 보이스 애셋을 통한) 오디오 현지화 내장 기능이 개선되어, 시도후 피드백을 제공받아도 괜찮은 시점에 이르렀습니다.

image alt text

  • 구어 텍스트는 이제 다이얼로그 웨이브 애셋에서 수집한 뒤 다른 애셋 기반 텍스트와 함께 번역할 수 있도록 PO 파일에 포함됩니다.

  • 다이얼로그 웨이브 애셋의 오디오 녹화 & 임포트 지원을 위한 여러가지 새로운 커맨드렛이 추가되었습니다 (현지화 대시보드에도 통합되어 있습니다).

    • ExportDialogueScript - 컬처 별 CSV 파일을 익스포트, 다이얼로그 각 줄과 그에 연관된 파일명이 들어있습니다.

    • ImportDialogueScript - 사본 수정된 컬처 별 CSV 파일을 임포트하고 녹음된 다이얼로그가 있는 번역을 업데이트합니다.

    • ImportLocalizedDialogue - 컬처별 녹음된 WAV 파일을 임포트하고 현지화된 다이얼로그 & 사운드 웨이브 애셋을 생성합니다.

Xbox One 에서의 비동기 계산

Async compute (비동기 계산) 기능이 Xbox One 에 지원됩니다. 이를 통해 그리기 도중 GPU 에 남는 자원을 다른 작업에 할당시켜, 전반적인 GPU 프레임 시간이 빨라집니다. 이는 현재 리플렉션 인바이런먼트와 SSAO 패스에 사용되고 있으며, 앞으로 추가될 예정입니다.

랜드스케이프 콜리전 개선

랜드스케이프는 이제 Simplified Player Collision (단순화된 플레이어 콜리전)을 지원합니다. 새로운 Simple Collision Mip Level (단순 콜리전 밉 레벨) 세팅을 통해 단순화된 콜리전에 사용할 랜드스케이프 LOD 레벨을 선택할 수 있습니다. 콜리전 밉 레벨 값은 여전히 디테일 콜리전에 사용할 랜드스케이프 LOD 레벨을 지정하는 데 사용됩니다.

이제 스플라인 메시에 대한 콜리전을 실행시간에 생성할 수 있습니다.

릴리즈 노트

AI

  • 어빌리티 시스템의 특성 v-로깅이 이제 g.debug.vlog.AttributeGraph 콘솔 변수를 통해 제어됩니다.

    • 참고로 DefaultEngine.ini 에 추가하여 전체 프로젝트에 끌 수도 있다는 뜻입니다.

  • 인바이런먼트 쿼리 시스템(EQS)에 너비가 아닌 깊이를 사용해서 테스트를 하도록 하는 옵션이 추가되었습니다.

  • 블루프린트에서 EQS 쿼리 실행시 사용할 수 있는 네임드 파라미터 설정을 위한 블루프린트 함수를 추가했습니다.

  • EQS 에 다수의 쿼리가 이루어지는 것을 감지하고 보고하기 위한 쿼리 수 경고 한계치를 추가했습니다.

    • 기본적으로 꺼져 있지만, Game ini (BaseGame.ini, DefaultGame.ini 등)의 QueryCountWarningThreshold 와 QueryCountWarningInterval 에 대한 환경설정 파일 값 변경을 통해 쉽게 켤 수 있습니다.

  • EnvQueryContext_BlueprintBase 는 더이상 쿼리어 액터가 NULL 이 아니어도 됩니다. 이제 (UObject* 이고 NULL 이 될 수 없는) 쿼리어 오브젝트를 지정하기도 합니다. 새로운 쿼리어 오브젝트는 위치 또는 액터를 반환하는 컨텍스트에 따라 모든 블루프린트 구현가능 함수에서 사용할 수 있습니다: Provide Single Actor, Provide Single Location, Provide Actors Set, Provide Locations Set.

  • AI 인지 시스템 안전성과 퍼포먼스가 향상되었습니다.

    • GetHostileActors 함수가 더이상 이미 AI 에 잊혀진 액터를 찾지 않습니다.

    • 소멸된 액터의 인지 자극이 그에 맞게 마킹되며, 제거되지는 않습니다.

  • 가끔 쿼리 애셋 로드시 스코어 공식을 리셋시키던 EQS 버그를 잡았습니다.

  • AI 인지 시스템이 더이상 미등록 감각에서의 정보 리스너를 알리지 않습니다.

  • AIController 의 SetFocus 함수는 이제 동일 우선권의 위치 포커스를 묵시적으로 소거합니다.

  • EQS 테스트의 Sweet Spot 기능 이름이 Reference Value (참조 값)으로 바뀌었습니다.

  • EQS 의 Average Instance Response Time (평균 인스턴스 반응 시간) 통계가 이제 초가 아닌 밀리초를 사용합니다.

비헤이비어 트리

  • 비헤이비어 트리 태스크에 서비스 노드를 바로 사용하는 기능이 지원됩니다.

  • 비헤이비어 트리 에디터가 이제 항상 노드의 자손 인덱스가 아닌 실행 인덱스를 표시합니다.

  • 비헤이비어 트리 강제 종료시 활성 태스크가 잠복성 중단 메커니즘을 필요로 해도 더이상 실패하지 않습니다.

  • 비헤이비어 트리 검색시 태스크 중단 도중 재시작 요청이 들어와도 브랜치를 건너뛰지 않습니다.

  • On Value Change (값 변경시) BT 데코레이터 관찰 모드의 정상 작동을 방해하던 버그를 잡았습니다.

  • 데코레이터 또는 서비스를 되돌리기해도 비헤이비어 트리 데이터가 깨지지 않습니다.

  • 비헤이비어 트리의 노드에 표시되는 실행 인덱스가 이제 이동 또는 되돌리기 작업 이후에도 정상 업데이트됩니다.

디버깅 툴

  • EQS 디버거에서 잇따르는 옵션이 최종 결과를 만들어 내는 것일 때도 데이터가 제대로 저장됩니다.

  • 비주얼 로그가 이제 액터가 아니라 할지라도 로그에 기록된 엘리먼트의 스냅샷을 잡아냅니다.

  • 일반적인 비주얼 로거 안정성이 향상되었습니다.

내비게이션

  • 가속도 구동 경로 따라가기를 추가, 무브먼트 컴포넌트의 Use Acceleration For Paths (경로에 가속도 사용) 플래그로 제어합니다.

  • 트라이 메시 콜리전을 내비게이션 장애물로 사용하는 기능이 지원됩니다.

  • 내비 모디파이어 컴포넌트에 대한 내비세미 마크업이 이제 단순한 박스를 생성하는 대신 부모 액터에 연관된 모든 모양을 합칩니다.

  • 내비게이션 필터가 개발 빌드와 디버그 빌드에서 내비게이션 영역 작동 방식에 차이가 날 수 있었던 버그를 잡았습니다.

  • 에이전트의 크라우드 시뮬레이션 상태가 이제 제대로 설정됩니다.

  • NavWalking 무브먼트 모드용 지오메트리 확인에서의 다중 히트 블로킹이 이제 정상 처리됩니다.

  • 크라우드 시뮬레이션 매니저의 메모리 누수를 고쳤습니다.

  • 콜리전이 없는 디스트럭터블 메시에 내비게이션 익스포트가 정상 작동합니다.

  • 에디터 월드에서 액터를 이동중일 때 어태치먼트의 내비게이션 업데이트를 수정했습니다.

  • 내비메시 레이캐스트가 더이상 지난 노드의 2D 체크 수행으로 인해 실패하지 않습니다.

  • Path Following Component 블럭 감지가 더이상 요청된 것과 다른 메커니즘에 대한 테스트를 하지 않습니다.

  • 맵 로드시 스마트 내비링크 초기화가 정상 작동합니다.

애니메이션

  • 상테 블렌드 아웃이 완전히 일어나지 않았어도 재진입하면서 강제 리셋시키는 기능이 추가되었습니다.

  • 시퀀스 이밸류에이터에 Teleport To Explicit Time (명시적 시간으로 순간이동) 옵션을 추가했습니다. 기본값은 true 로 기존 작동방식을 유지합니다. true 면 시간을 진행시키지 않아, 노티파이가 발동되지 않거나 무르 모션이 추출되지 않거나 합니다. false 면 시간을 진행시켜, 노티파이를 발동시키고 가능한 경우 루트 모션을 추출하고 합니다. 주: 싱크 그룹을 사용하면 이 옵션 설정과 무관하게 시간을 강제 진행시킵니다.

  • Copy Bone Delta 라는 노드를 새로 추가, 소스 본에서 그 원래 기준 위치로의 트랜스폼을 누산 또는 복사합니다.

  • 쿼드 오버드로 비용도 표시해 주는 새로운 버전의 셰이더 복잡도 뷰모드를 추가했습니다.

  • 페르소나 뷰포트에 애디티프 레퍼런스 포즈 애니메이션에 스케일이 0 인 경우의 오류 메시지를 추가했습니다.

  • 애님 다이내믹스 노드의 제목에 본 이름이 표시됩니다.

  • 몽타주에 슬롯 복제 옵션을 추가했습니다.

  • 스켈레탈 메시에 편집가능 고정 바운드를 추가, 블루프린트에 getter 를 노출시켰습니다.

  • Skeletal Mesh Component Initialize 에 애님 인스턴스 틱 대신 레퍼런스 포즈를 초기화시키는 플래그를 추가했습니다. 이 옵션은 스켈레탈 메시 컴포넌트의 스폰 시간을 줄여줍니다.

  • 본 구동 컨트롤러를 사용하여 애니메이션 데이터에서 네임드 파라미터를 구동시키는 함수성을 추가했습니다.

  • 페르소나에 Test Skeleton Curve Names for Use (사용할 테스트 스켈레톤 커브 이름) 메뉴 옵션을 추가, 모프 타깃 또는 머티리얼 파라미터를 구동시키지 않는 모든 애니메이션의 모든 커브를 나열합니다. 사용자가 퍼포먼스 향상을 위한 제거 가능 대상을 알아낼 수 있습니다.

  • 애니메이션 블루프린트 컴파일러와 애니메이션 인스턴스에 인스턴스의 내부 머신 스테이트 웨이트를 저장하고 더블 버퍼링하는 처리를 추가했습니다. 기계가 달라도 문제 없이 쿼리 가능합니다.

  • 애니메이션 블루프린트에 변수 참조 시퀀스에 대한 리타기팅을 추가했습니다.

  • 커브 트랙의 커브 이름변경이 기존 커브 이름에 대해서도 가능하도록 했습니다. 기존 커브는 단지 새로운 UID/이름을 받고, 다른 모든 것들은 보존합니다. 커브 이름을 현재 시퀀스에 이미 사용중인 것으로 변경하려 할 때의 경고를 추가했습니다.

  • 애니메이션 리타기팅이 스케일과 루트 모션을 지원합니다.

  • Import Material Curves 에 이제 Set Material Drive Parameter On Custom Attribute (커스텀 특성에 머티러일 구동 파라미터 설정) 옵션이 생겨, 커브 임포트시 머티리얼 파라미터 플래그를 자동 설정하도록 할 수 있습니다.

  • Look At 노드가 이제 소켓을 타깃으로 받습니다.

  • 최상위 스테이트 머신은 이제 연관생이 생기면 재초기화됩니다. 중첩 스테이트 머신의 작동방식에 일치됩니다.

  • 스켈레톤 리타기팅시 이제 소켓도 복사합니다.

  • 애님 몽타주 또는 애님 컴포짓의 메타데이터를 시리얼라이즈 안하던 문제를 고쳤습니다.

  • 애님 시퀀스 임포트 후 커브를 메타데이터로 변환하려 할 때의 크래시를 고쳤습니다.

  • 블렌드 스페이스는 이제 동일한 샘플의 웨이트를 병합합니다. 이는 최적화뿐 아니라 데이터가 다른 동일 샘플 내 마커 기반 동기화 평가 관련 문제도 해결됩니다.

  • 다른 머티리얼에 파라미터 이름이 같은 경우 애니메이션 커브에서 작동하지 않던 문제를 고쳤습니다.

  • Linear 알파 블렌드 옵션이 이제 클램프 적용된 알파 값을 반환합니다. 클램프 미적용 값은 스테이트 머신에서 음수 트랜지션 웨이트가 유발될 수 있었습니다.

  • RecordAnimation 명령 사용시 화면 밖 애니메이션도 제대로 녹화됩니다.

  • ZERO_ANIMWEIGHT_THRESH 조건 검사를 FAnimWeight 의 새로운 IsRelevant 와 IsFullWeight 함수로 추상화시켜 내었습니다.

  • 애님 시퀀스에 대한 압축 관련 애셋 레지스트리 태그를 추가했습니다.

  • 애니메이션 노드 애셋 선택기에 필터를 추가, 잘못된 유형의 애니메이션을 기존 노드에 설정할 수 없도록 했습니다.

  • 애니메이션 노드가 fasth path, 빠른 경로 사용시 그 알림을 표시합니다.

  • 스켈레탈 메시 컴포넌트의 Refresh Bone Transforms (본 트랜스폼 새로고침) 평가 로직에 유효하지 않은 캐시 커브 데이터 테스트를 추가, 유효하지 않은 캐시 데이터가 사용되지 않도록 합니다.

  • 이제 페르소나 그래프 에디터에서 애님 그래프 디버깅이 가능합니다.

  • 애님 블루프린트 노출 값 처리기가 더이상 TRASHCLASS 로의 함수 레퍼런스를 담지 않습니다.

  • 애님 인스턴스 프록시가 리졸브되었을 때의 가비지 컬렉션과 되돌리기/다시하기 관련 버그를 잡았습니다.

  • fast path 일 때 구조체에서 본별 레이어드 블렌드를 접근했을 때 값이 제대로 복사되지 않던 것을 고쳤습니다.

  • 분할된 핀이 이제 애님 그래프 노드 입력처럼 작동합니다.

  • 애니메이션 fast path 코너 케이스 관련 문제 다수를 고쳤습니다:

    • 비트필드 핀이 이제 제대로 지원됩니다.

    • 쿠킹된 게임에 오브젝트 핀이 제대로 지원됩니다.

  • 스테이트 머신 자체내에서 스테이트 머신 노드를 붙여넣으려 할 때 크래시가 날 수 있던 것을 고쳤습니다.

  • 애니메이션 블루프린트 스테이트 머신 편집시의 크래시와 스테이트 머신 서브그래프가 읽기 전용으로 잘못 마킹되던 문제 다수를 고쳤습니다.

  • 본이 현재 LOD 에 유효하지 않으면 본 트랜스폼을 더이상 포즈에서 모으지 않습니다.

  • 애님 그래프 트랜지션에서 시간 getter 사용시 정규화된 시간만 보고하던 블렌드스페이스 플레이어 문제를 고쳤습니다.

  • BP 노티파이는 이제 추상 베이스 클래스에서 파생될 때 Add Notify 컨텍스트 메뉴에 표시됩니다.

  • 병합된 스켈레탈 메시 마무리 전 합친 레퍼런스 포즈 매트릭스를 접근할 때 더이상 크래시가 나지 않습니다.

  • 샘플 수가 각기 다른 블렌드 스페이스를 전환해도 페르소나 애니메이션 프리뷰 툴팁이 더이상 크래시가 나지 않습니다.

  • 커스텀 블렌드 그래프가 복사/붙여넣기 작업 후 더이상 읽기 전용으로 부적절하게 나타나지 않습니다.

  • 애님 슬롯 그룹의 중복 슬롯 이름을 고쳤습니다.

  • 더이상 Set Skeletal Mesh 도중 잘못된 본 트랜스폼이 렌더러에 푸시되지 않습니다. 이는 에디터에서 모션 블러 부작용으로 나타났었습니다.

  • 본 스케일이 0 에 가까울 때 INF 가 생성(되었다가 NaN 으로 변환)되던 것을 고쳤습니다.

  • 스켈레탈 메시의 모빌리티가 스태틱으로 설정되던 유효하지 않은 상태를 고쳤습니다.

  • 마커 싱크 애니메이션 틱 도중 Prev Marker not found in GetMarkerIndicesForPosition 어서트가 더이상 발동되지 않던 것을 고쳤습니다.

  • 애니메이션 오브젝트가 더이상 게임에서 부적절하게 가비지 컬렉팅되지 않습니다. 또한 커브 녹화의 최적화를 통해 녹화 마무리 시를 제외하고 키를 추가하지 않도록 했습니다.

  • 캐시 본이 스테이트 머신에서 필요할 때 제대로 호출됩니다.

  • 애니메이션을 FBX 로 익스포트할 때 커브 스케일링이 빠지던 것을 고쳤습니다.

  • 서버가 Montage_JumpToSection 호출시 노티파이가 제대로 트리거됩니다.

  • 몽타주 내 애님 시퀀스 안의 노티파이가 이제 노티파이 시간 0 에서도 제대로 트리거됩니다.

  • 슬레이브 컴포넌트의 모프 타깃이 마스터 포즈 컴포넌트와 정상 작동합니다. 슬레이브 컴포넌트는 자체 모프 타깃으로도 덮어쓰기 가능합니다.

  • 이전 애니메이션 블루프린트의 몇몇 핀이 트랜잭션 안되던 것을 고쳤습니다.

  • 초기화되지 않은 구운 애니메이션 오브젝트 인덱스를 고쳐, CDO/디폴트 버전이 결정론적이 되도록 했습니다.

  • 페르소나에서 현재 보여지는 LOD 의 일부가 아닌 본을 변경해도 더이상 크래시가 나지 않습니다.

  • 자손 애님 블루프린트에서 이름으로 싱크 그룹 인덱스를 찾아보려 할 때의 크래시를 고쳤습니다.

  • 애니메이션 블루프린트가 바이트 코드 전용 리컴파일 플래그가 설정되어, 스크립트 인스턴스 재초기화에 실패하던 것을 고쳤습니다.

  • 몽타주 세그먼트 룩업에서 세그먼트 시작 시간이 아닌 세그먼트 애니메이션 시작 시간 비교시의 버그를 잡았습니다.

  • Get Instance Asset Player Time 이 더이상 블렌드 스페이스 애셋에 대해 정규화된 시간을 반환하지 않습니다.

  • Morphtarget DeltaTangentZ 은 더이상 PackedNormal 유형이 아닙니다. 이제 FVector 유형인데, 값 범위가 -2 에서 2 이기 때문입니다.

  • Set Skeletal Mesh 에서 컴포넌트 재등록 로직을 제거했습니다. 이를 통해 메시가 변경되어도 Set Skeletal Mesh 가 현재 포즈를 보존할 수 있습니다.

  • 재생 속도가 음수인 애니메이션을 레벨에 끌어놓을 때, 애니메이션 재생 초기 시작 위치라 애니메이션 끝으로 설정됩니다.

  • 독립형 게임이 이제 가능한 경우 병렬 애님 업데이트 혜택을 받습니다.

오디오

  • 블루프린트에서 현재 활성화된 리버브를 구하는 기능을 추가했습니다.

  • Windows 플랫폼 프로젝트 세팅에서 선호 오디오 디바이스를 설정하는 기능을 추가했습니다.

  • 블루프린트에서 자막을 켜고 끄는 기능을 추가했습니다.

  • 오디오 오클루전 트레이스 셀의 커스텀 트레이스 채널을 설정하는 기능을 추가했습니다.

  • 비동기 오디오 오클루전 레이 트레이싱을 기본으로 켭니다.

  • 상세 오디오 리포트를 생성하는 AudioMemReport 콘솔 명령이 추가되었습니다.

  • 콘텐츠 브라우저에서 사운드 미리듣기와 사운드 큐 미리보기는 마스터 볼륨에서 예외로 항상 최대 볼륨으로 플레이됩니다.

  • 레벨 뷰포트에서 스케일이 음수인 애님 몽타주 재생을 고쳤습니다.

  • 2D 사운드에 감쇠 적용시의 버그를 잡았습니다.

  • PS4 에서의 메모리 보고 관련 문제를 고쳤습니다.

  • 사운드 루픙시 자손 중 재생되는 사운드가 없을 때 중단되지 않던 것을 고쳤습니다. 예를 들어 무작위 노드에 연결되지 않은 핀이 있을 경우에 발생할 수 있었습니다.

  • PS4 에서의 리버브가 수정되었습니다.

  • ogg-vorbis 디코딩 부분이 개선되었습니다:

    • 초기 파일 정보 파싱 작업을 비동기로 만들어 Ogg-Vorbis 오디오 압축해제로 인한 CPU 지연을 감소시켰습니다.

    • 실시간 비동기 ogg-vorbis 디코딩 태스크 관리를 오디오 디바이스 스레드로 이동, 실시간 디코딩 버퍼 언더런 문제를 해결했습니다.

    • 이제 메인 스레드 퍼포먼스 지연 발생시 로딩 화면이나 기타 시간에 실시간 디코딩된 오디오 재생이 가능합니다.

  • 사운드큐 에디터에서 다이얼로그 웨이브 애셋 관련 삶의 질을 향상시켜주는 기능 개선이 다수 있었습니다.

  • 더이상 PS4 에서 AT9 오디오 애셋 중복 압축 문제가 발생하지 않습니다.

  • 사운드 컨커런시 해상도 StopLowestPriority 관련 툴팁을 업데이트, 이제 모든 사운드의 우선권이 동일한 경우 가장 오래된 사운드 재생을 중지한다고 알려주도록 했습니다.

  • Oculus Audio SDK 를 1.02 로 업데이트했습니다.

자동화

  • 바이너리 빌드에 BuildPatchTool 을 추가했습니다.

  • UAT 는 프로젝트 디렉터리의 Build\NoRedist\Keys.txt 파일을 자동으로 찾아봅니다. 존재하면, 모든 pak 파일은 그 키를 사용해서 사인합니다.

  • UAT 관련 서버 스테이징 타깃이 자신의 타깃 디렉터리를 사전에 제대로 비우지 않아 중복 데이터가 남던 문제를 고쳤습니다.

  • UAT VersionUpdater 유틸리티가 이제 실제 변경된 것이 없는 경우 타깃 파일을 건드리지 않습니다.

  • MakeFeaturePacks 노드가 Mac에서 실행될 수 있도록 UnrealPak 위치를 추가했습니다.

블루프린트

  • 관련 구조체 유형간의 핀 연결이 가능(자손 구조체를 부모 구조체 핀으로 경유)하도록 해주는 변환 노드를 추가했습니다. 직접 연결로 인한 크래시도 해결됩니다.

  • 블루프린트 그래프 복제시 자동으로 열고 포커스를 잡돌혹 하는 기능을 추가했습니다.

  • MakeHitResult 노드를 추가했습니다.

  • copy 노드를 새로 추가, 레퍼런스 출력이 원치않게 변경되지 않도록 해줍니다.

  • 이벤트 노드 복사 붙여넣기에 대한 새 이름과 경고를 추가, 이 사본은 원본으로 트리거되지 않는다는 것을 명확히 했습니다.

  • 스플라인 메시 컴포넌트에 대한 콜리전 생성을 추가, 실행시간 생성 및 업데이트 가능합니다.

    • 스플라인이 촉수처럼 이동하는 도중의 실시간 콜리전 변경에 쓰는 목적이 아니라, 절차적 생성 또는 블루프린트를 통해 생성되는 스플라인 메시 용도입니다.

    • 주: 스플라인 메시 컴포넌트는 기본적으로 스태틱 입니다. 실행시간에 스폰시키려면, 디테일 패널에서 모빌리티를 무버블로 바꿔주거나, add component 블루프린트 노드를 사용해야 합니다.

  • manifest 에 나열된 모든 애셋의 변환 단계를 재실행하는 커맨드렛을 추가했습니다. 문법은 -run=NativeCodeGen platformname1 platformname2 로, 예를 들면 C:\MyProject\MyProject.uproject -run=NativeCodeGen windowsnoeditor 식입니다.

  • 블루프린트 Line Trace 함수에 그리기 시간 & 부가 컬러 옵션을 추가했습니다.

  • Is Valid Index 노드를 블루프린트 배열 라이브러리에 추가했습니다.

  • 블루프린트 매쓰 라이브러리에 Make Plane From Point And Normal 을 추가했습니다.

  • Lerp (Transform) 노드에 EulerInterp, DualQuatInterp 옵션을 추가했습니다.

  • 포맷 스트링을 벡터, 로테이터, 플로트로 변환하는 노드를 추가했습니다.

  • Random Bool With Weight 노드를 추가, 퍼센트 값에서 무작위 결과를 생성합니다.

  • 내 블루프린트 패널에서 화살표를 Shift 클릭하여 트리 뷰를 완전히 펼치는 기능을 추가했습니다.

  • 실제 입력이 설정되지 않았더라도 Step Over, Step Out 을 키 매핑으로 추가했습니다. 새 함수성을 사용하려면, 에디터 개인설정/일반 - 키보드 단축키 /Play World 에서 step in/step over/step out 의 키 할당을 검토 또는 리매핑하면 됩니다.

  • 블루프린트 컴파일 오류시 이제 쿠킹 로그에 애셋 이름이 표시됩니다.

  • 이제 GUID 를 사용하여 블루프린트에서 생성된 프로퍼티를 식별합니다. 사용자 값 유지 효율이 훨씬 높아집니다.

  • 컴포넌트 클래스에 새 아이콘이 여럿 배정되었습니다.

  • 매크로가 이제 wildcard 유형 로컬 변수를 가질 수 있습니다.

  • 프로젝트 세팅에 이제 실행시간에 컴포넌트가 다수인 블루프린트 액터 유형의 동적인 인스턴싱에 대해 더욱 빠를 수 있는 경로를 활성화시키는 쿠커 옵션이 추가되었습니다.

    • 옵션 이름은 Cook Blueprint Component data for faster instancing at runtime 입니다.

    • 기본적으로 꺼져 있으나, 켜면 컴포넌트가 다수인 블루프린트 클래스 인스턴스(액터)가 실행시간에 동적으로 스폰되는 경우 쿠킹된 빌드의 퍼포먼스가 향상될 수 있습니다.

  • 블루프린트의 리플리케이트되는 프로퍼티만 표시하는 필터를 추가했습니다.

  • 에디터에서 플레이 전 블루프린트 리컴파일 도중의 에디터 크래시를 고쳤습니다.

  • 블루프린트에서 키 디버깅시 사용자가 블루프린트를 한 단계씩 진행시키며 디버깅하지 못하도록 만드는 문제가 해결되었습니다. 더이상 블루프린트를 한 단계씩 진행식켜도 그래프 포커스를 잃지 않습니다.

  • Actor 이외 클래스를 기반으로 한 블루프린트가 이제 데이터 전용으로 정상 감지됩니다.

  • SpawnActor/ConstructObject 노드가 이제 클래스 핀 변경시 커서를 올렸을 때의 텍스트가 제대로 업데이트됩니다.

  • 블루프린트 에디터의 프리뷰 뷰포트 안에서 스케일을 잡아 끌어도 변경되지 않던 버그를 잡았습니다. 0 근사 델타 값을 적용하지 않는 것으로 가능했습니다.

  • Ease 노드가 0 과 1 이외의 값에 대한 보간을 제대로 처리합니다.

  • 구조체 변수의 기본값 변경시 더이상 핀 연결을 끊지 않습니다.

  • 블루프린트 검색 툴에 철지난 블루프린트와 인덱싱되지 않은 블루프린트를 구분하기 위한 정보를 추가했습니다.

  • 블루프린트 에디터에 일관성 없는 함수 이름을 고쳤습니다.

  • 블루프린트 클래스 링크 변경시 PostConstructLink 체인이 제대로 종료됩니다.

  • 인터페이스 함수의 출력을 입력으로 전환시 발생할 수 있었던 블루프린트 컴파일러 오류를 고쳤습니다.

  • 다른 것에 레퍼런싱된 블루프린트를 강제 삭제한 후 크래시가 날 수 있던 버그를 잡았습니다.

  • 에디터 언어 세팅 변경 후 블루프린트 검색시 크래시가 날 수 있었던 버그를 잡았습니다.

  • 블루프린트 함수 안에서 로컬 오브젝트 변수를 사용해도 더이상 크래시가 나지 않습니다.

  • 커스텀 콜리전 채널은 저이상 그 연관된 이름과 동기화 상태가 깨지지 않습니다.

  • 노드를 통해 구조체 멤버가 노출된 액터에 대한 SpawnActor 노드 사용시 더이상 블루프린트 컴파일 오류가 나지 않습니다.

  • 접힌 그래프 노드를 삭제 후 되돌린 뒤, 유효하지 않은 상태를 벗어나지 못하던 버그를 잡았습니다.

  • 인터페이스 함수의 변수 레퍼런스가 블루프린트 검색에 나타나지 않도록 만들던 버그를 잡았습니다.

  • TimerHandles 배결이 더이상 단일 항목 제거 시도시 소거되지 않습니다.

  • 인터페이스를 구현하는 블루프린트 내 블루프린트 함수가 이제 검색됩니다.

  • 키보드 단축키를 통해 추가한 블루프린트 노드도 이제 되돌릴 수 있습니다.

  • 프로세스에 데디케이티드 서버가 실행중인 에디터에서 플레이시, 장식성 함수 호출이 더이상 생략되지 않습니다.

  • 핀의 '변수로 승격' 옵션을 통해 기형 변수가 생성되던 버그를 잡았습니다.

  • 블루프린트 함수 파라미터에 이제 기본값이 제대로 표시됩니다.

  • 변수 노드의 '변수를 다음으로 대체...' 옵션으로 변경된 블루프린트가 이제 컴파일 필요한 것으로 정상 설정됩니다.

  • Set Members in [Struct] 노드가 이제 출력 핀에 의해 레퍼런싱된 리터럴 구조체를 정상 처리합니다.

  • 블루프린트 인터페이스가 완전히 로드되지 않았는데 다른 블루프린트에서 사용하는 경우 발생할 수 있었던 쿠킹 오류를 고쳤습니다.

  • 값 중 하나에 디버그 감시값을 설정한 분할 핀을 접을 때 발생할 수 있었던 쿠킹 오류를 고쳤습니다.

  • 블루프린트 노드 추가, 선택, 또는 제거시 발생할 수 있었던 크래시를 고쳤습니다.

  • 블루프린트에 (텍스트 요소 배열이 포함된 경우) 인스턴스 변경 적용시 발생할 수 있던 크래시를 고쳤습니다.

  • 블루프린트 구조체 배열이 다른 구조체 유형을 사용하도록 변경할 때 발생할 수 있었던 크래시를 고쳤습니다.

  • (config 파일 등의) 텍스트 임포트 프로세스를 통해 잘못된 시간에 다른 블루프린트가 로드될 수 있었던 순환 종속 로드시의 구멍을 고쳤습니다.

  • 블루프린트 클래스가 이제 HideCategories 메타데이터를 제대로 상속합니다.

  • 블루프린트가 인터페이스 제거 도중의 함수 승격을 제대로 처리합니다.

  • 트랜잭션 버퍼가 비어 있는 상태에서 되돌리기를 해도 더이상 크래시가 나지 않습니다.

  • 블루프린트 에디터에서 드래그 앤 드롭을 통해 루트 컴포넌트를 대체한 이후 트랜스폼 스케일 작동방식이 일관되지 않던 것을 고쳤습니다.

  • 블루프린트 이벤트 레퍼런스에 대한 검색시 이제 이벤트 호출 위치가 포함됩니다.

  • 이벤트 그래프에서 잠복성 (Delay 등) 함수 호출 노드를 하나 이상 활용하는 액터 기반 블루프린트 그래프가 더이상 리컴파일 이후 크래시가 나지 않습니다.

  • 서로 순환 종속되는 블루프린트와 구조체가 있는 프로젝트 로드시 더이상 크래시가 나지 않습니다.

  • 심각한 컴파일 오류가 있는 블루프린트에서 만들어진 액터의 인스턴스별 커스터마이제이션이 오류를 해결해도 사라지던 문제를 고쳤습니다.

  • 상속된 컴포넌트에 대한 프로퍼티 편집이 더이상 블루프린트를 데이터 전용이 안되도록 만들지 않습니다.

  • 블루프린트 에디터에서 컴포넌트 붙이기 동작을 되돌리기/다시하기 한 이후 컴포넌트 트리 뷰가 다시 한 번 업데이트됩니다. 기존 버전에서 실수로 깨졌던 부분입니다.

  • 블루프린트에 Within 마크업이 추가된 컴포넌트가 있을 때 더이상 에디터 크래시가 나지 않습니다.

  • 컴포넌트 이름을 기존에 추가했다가 되돌리기 명령으로 되돌린 이름으로 변경해도 더이상 에디터 크래시가 나지 않습니다.

  • 네이티브 부모 클래스 생성자를 통해 생성된 중첩 디폴트 서브오브젝트가 하나 이상 있는 액터 기반 블루프린트 클래스 인스턴스를 동적으로 스폰 시도할 때 런타임 어서션이 발생할 수 있었던 근본 원인을 고쳤습니다.

  • 순환 콘텐츠 로드시 발생할 수 있었던 (프로퍼티/값 불일치 관련) 오해의 소지가 있는 로드 경고를 제거했습니다.

  • 라벨이 없는 실행 핀을 포함해서 설명이 짧은 핀의 마우스 클릭 감지 로직을 개선시켰습니다.

  • RInterpTo 와 RInterpTo_Constant 노드 문서를 보강했습니다.

  • CreateEvent 노드의 오류 메시지가 기대되는 시그너처에 더이상 일치하지 않는 이벤트/함수를 감싸도록 보강했습니다.

  • 레벨 로드시 블루프린트 소유 컴포넌트의 임포트 실패 관련 로드 오류 메시지의 설명을 보강했습니다.

  • 블루프린트 검색 시간이 다소 개선되었습니다.

  • ComponentTypeRegistry 스타트업을 최적화시켰습니다.

  • 블루프린트 클래스 유형에 대한 FObjectInitializer::InitProperties() 와 PostConstructLink 체인이 블루프린트 클래스 인스턴싱에 보다 빠른 경로를 생성하도록 개정했습니다.

  • 일부 블루프린트 검증 로직을 실행 그래프 정돈 작업 이후에 실행되도록 이동시켜, 미사용 노드로 인해 패키징이 막히지 않도록 했습니다.

  • Delete Unused Variables 기능이 이제 Get Class Defaults 노드를 고려하고, 연결되지 않은 변수 출력 핀을 제거합니다.

  • Get Class Defaults 노드는 이제 블루프린트 클래스의 구조적 변경사항(, 예로 변수 추가 & 제거)에 제대로 반응합니다.

코어

  • 동일 포인터의 중복 해제 방지를 위한 할당 검증 헬퍼를 추가했습니다.

  • FPaths 에 주어진 파일명의 확장자 변경을 위한 ChangeExtension 함수를 추가했습니다.

  • 로깅이 켜진 shipping 환경설정에서 기본으로 사용되는 메모리 전용 출력 디바이스를 추가했습니다.

    • 다른 환경설정에 메모리 로그를 강제시키는 -logtomemory 명령줄 파라미터를 추가했습니다.

    • test 와 shipping 에 파일 로그를 강제시키는 -nologtomemory 명령줄 파라미터를 추가했습니다.

    • 메모리 로그는 (shipping 이외 환경설정에서) 종료시 파일에 덤프되며, 항상 크래시 리포트에 첨부됩니다.

  • SCOPE_SECONDS_ACCUMULATOR 를 추가, 범위를 초 단위로 재어 제공된 누산기 통계를 포함시켜 기록합니다.

  • 뷰포트 작동방식 제어 향상을 위한 세팅을 추가했습니다.

    • 뷰포트가 캡처 획득시 마우스를 고정하도록 할 수 있습니다.

    • 어플리케이션 시작(첫 창 활성화)시 뷰포트가 캡처 획득하도록 할 수 있습니다.

  • pakfile 그룹에 부가 통계를 몇 가지 추가했습니다.

  • 로그에서 명령줄 인수를 필터로 제거하는 기능을 추가했습니다.

  • 엔진에서 디스크에 오래된 ini 파일 유지 갯수를 제한하는 기능을 추가했습니다. 현재 기본값은 10 이며, [LogFiles] MaxLogFilesOnDisk ini 세팅으로 설정 가능합니다.

  • dumpnonframe 통계 명령이 옵션 그룹 이름을 받아, 출력 필터링에 사용합니다.

  • 인라인이 아닌 벌크 데이터를 쿠킹시 원본 uasset 과 함께 별도의 ubulk 파일에 쓰도록 할 수 있습니다.

    • pak 파일 사용시 다음 파일에 도달하기 위해 읽지 않은 벌크 데이터를 생략하느라 파일 읽기 연속성이 깨지던 문제가 해결됩니다.

    • 프로젝트의 엔진 ini 파일의 [Core.System] 섹션 내 UseSeperateBulkDataFiles=True 줄로 켤 수 있습니다.

  • 앱이 런처를 통해 실행되었는지 확인하도록 할 수 있습니다.

  • 크래시 리포터가 프로젝트 디파인을 통해 켜졌을 때 명령줄 파라미터 필터링을 따르도록 변경했습니다.

  • FNames 시리얼라이즈 방식을 변경하여 기존의 FName 항목 로딩으로 인해 낭비되는 로드 시간 비용을 제거했습니다.

  • FMath::FindDeltaAngle 을 폐기시키고 FindDeltaAngleRadians 와 FindDeltaAngleDegrees 로 분할했습니다. 원래 함수는 래디언을 사용했습니다.

  • GitHub 2041 : USE_LOGGING_IN_SHIPPING 에서 FMaintenance::DeleteOldLogs 사용이 가능합니다.

  • IO 요청 취소 퍼포먼스가 향상되었습니다.

  • pak 사인 시스템 향상 및 최적화가 있었습니다.

    • pak 파일과 함께 pak 파일 128kb 청크마다 암호화 CRC 를 별도의 sig 파일에 저장합니다.

    • 가능하면 시그너처를 백그라운드로 복호화시킵니다.

  • 인티저 프로퍼티가 다른 인티저 유형으로 저장된 (즉 int16 으로 저장되었다가 uint32 로 로드되는) 경우, deserialize 시 제대로 변환됩니다.

  • 쿠킹된 빌드에 필요치 않은 머티리얼 표현식 오브젝트가 이제 쿠킹된 패키지에서 제거됩니다.

  • 게임이 런처를 통해 실행되었는지, 최신 상태인지 확인하기 위한 모듈을 추가했습니다.

  • UnrealPak 에 새로운 명령줄 스위치 -TestEncryption 을 추가, 비동기 키 사인 함수성 테스트를 실행합니다.

  • FBigInt 가 최적화되었습니다.

  • 프로젝트의 플러그인을 옵션으로 만들 수 있습니다. 찾지 못해도 프로젝트 로드에 실패하지 않습니다.

  • ConsoleVariables.ini 를 통한 치팅을 방지했습니다.

  • 프로젝트 파일이 명령줄에 지정된 경우 프로젝트 디렉터리에서도 플러그인을 찾아봅니다.

  • UnrealSync 가 코드베이스에서 제거되었습니다.

  • DirectoryWatcher 가 파일 이동에 실패하는 경우, 남은 디스크 공간을 로그에 기록합니다.

  • 그래픽 드라이버 크래시가 나는 경우, 크래시 리포트를 전송할 수 있도록 엔진에서 어스트가 발생합니다.

    • CrashReportClient 는 이제 포기하기 전 Slate Renderer 를 몇 번 더 초기화시켜 본 후에 무인 방식으로 크래시 리포트를 전송합니다.

  • UE4 프로그램의 종료 상태 설정을 위한 기능을 추가했습니다 (Linux에서만 구현).

  • 디스크 공간 및 여유 메모리에 대한 서버 퍼포먼스 카운터를 추가했습니다.

  • 이제 서버상의 Shipping 빌드에서 ini 오버라이드를 사용할 수 있습니다.

  • XGE 태스크 순서가 10 개 이상의 빌드에서도 보장됩니다.

  • FPS 차트에서 유휴 시간을 제외시킬 수 있습니다.

  • 리플렉션 캡처 컴포넌트, 서브 UV 애니메이션, 사운드 노드, 머티리얼 표현식은 더이상 데디케이티드 서버에 로드되지 않습니다.

  • config 파일이 더이상 실제 게임 디렉터리 경로에 저장되지 않습니다. 프로젝트를 다른 폴더에 복사하면 더이상 경고나 오류가 뜨지 않습니다.

  • 쿠킹된 애셋 레지스트리는 이제 종속성 그래프 데이터에 서브레벨 맵 레퍼런스를 포함합니다.

  • 사용할 수 있는 외부 프로파일러 DLL 이 없을 때의 경고 메시지를 보다 친근한 로그 메시지로 변경했습니다 (오류 상황은 아니므로).

  • 암호화 키 스트링을 파싱할 때의 크래시를 고쳤습니다.

  • 패키지 링커가 EndLoad() 의 실제 종료 전 절반쯤에서 해제되던 희귀한 크래시를 고쳤습니다.

  • 여전히 큐에 등록된 패키지가 있을 때 패키지 로드를 취소할 때의 문제를 해결했습니다 (반다이 남코 스튜디오의 히다 타케시 님께 감사드립니다).

  • NoLoadTrackClear 명령줄 파라미터 파싱이 수정되었습니다.

  • 프로파일러의 재귀 호출이 이제 올바른 통계를 보고합니다.

  • 크기가 2GB 이상인 레벨을 저장할 때의 크래시를 수정했습니다. 아직 다른 크래시가 남아있을 수 있습니다.

  • FLinkerLoad 매니저 픽스입니다:

    • GetLoadersWithNewImportsAndEmpty 함수가 더이상 잘못된 배열을 비우지 않습니다.

    • DissociateImportsAndForcedExports 함수가 쿠킹되지 않은 빌드만 임포트합니다.

  • 프로파일러에서 최소/최대/평균 포함 시간의 잘못된 데이터를 수정하고, 호출 최소/최대/평균 수를 추가했습니다. 이벤트 그래프 툴팁에 올바른 값이 표시되지 않는 것도 고쳤습니다.

  • 컴파일 버튼이 더이상 사라지지 않습니다.

  • MD5Hash LexicalConversion::FromString 이 이제 올바른 결과를 냅니다.

  • 불법 StaticClass 사용으로 인산 셧다운 크래시를 고쳤습니다.

  • IDE 를 통해 핫 리로드 발동시 보고되는 시간이 이제 정확해졌습니다.

  • -warningsaserrors 지정시 UnrealHeaderTool.exe 의 오류 코드를 수정했습니다.

  • -unversioned 플래그가 더이상 쿠킹시 무시되지 않습니다.

  • 어태치먼트 또는 스켈레탈 메시 컴포넌트에 음수 스케일을 사용한 미러링이 수정되었습니다. 스켈레탈 메시 컴포넌트는 애니메이션이 적용되므로, 퍼포먼스 영향이 있을 수 있습니다.

  • NewObject<T>(Outer, ExplicitClass) 함수가 이제 ExplicitClass 가 실제 T 의 서브클래스가 아닌 경우 어서트가 발생합니다. 잠재적인 메모리 오류가 해결됩니다.

  • 쿠킹된 게임 데이터의 잘못된 애셋 로딩을 고쳤습니다.

  • 엔진이 무인 모드에서 실행중이던 경우 D3D 디바이스가 제거/소실되면 엔진이 더이상 메시지 박스를 표시하지 않습니다.

  • 언리얼 자동화 툴이 더이상 명령줄을 파싱할 때 역슬래시를 먹지 않습니다.

  • PortalRPC 로딩과 서버에서의 관련 모듈을 수정했습니다.

  • 다중 실행 도중 FPS 차트가 잘못 생성되던 것을 고쳤습니다.

  • 메모리 프로파일러가 실제 월드 캡처 로드를 적당한 시간에 (시간 단위가 아닌 분 단위에) 합니다.

  • 프로파일러의 메모리 사용량을 약 50% 감소시켰습니다.

  • 비동기 로딩시 최고 메모리 사용량을 5.5x 에서 10x 로 감소시켰습니다.

  • 애셋 레지스트리 리디렉터 레졸루션이 순환 종속성을 처리하도록 개선시켰습니다.

  • 프로파일러의 라이브 연결 처리가 개선되었습니다.

  • 기존에 시리얼라이즈되었으나 (transient 로 만들거나 해서) 더이상은 아닌 태그 붙은 프로퍼티는, 유형 역시도 변경되었다 할지라도 더이상 로드되지 않습니다.

  • 중복 레이지 오브젝트 포인터 GUID 포함 오브젝트 로드시, 엔진은 더이상 새로운 GUID 를 생성하지 않습니다. 그 대신 구형 GUID 를 무효화시켜 비결정론적 쿠킹 빌드 문제를 회피합니다.

  • 서버 FPS 한계를 120 에서 1000 으로 올렸습니다.

  • -server 실행시 셰이더가 컴파일되지 않습니다.

에디터와 툴

  • 모바일 타깃 플랫폼 프로젝트에서 계층형 LOD 클러스터가 65536 버텍스를 초과하는 경우의 오류 메시지를 추가했습니다.

  • 세션 프론트엔드 프로파일러에 필터 텍스트 옆 AF 체크박스로 적극적인 필터링을 추가했습니다. 통계 트리를 다시 만들고, 일치하지 않는 옵션을 제거한 뒤, 동일한 이름의 통계 부모를 변경하여 특정 통계의 스레드 시간이 하나의 트리 행에 보이도록 합니다.

  • 미압축 고해상도 스크린샷 저장을 위한 r.SaveUncompressedEXRFrames 옵션을 추가했습니다.

  • 애니메이션 및 텍스처 애셋에 AssetUserData 가 지원됩니다.

  • 커브 에디터 툴에 선택된 키 또는 전체 커브를 굽고 감소시키는 기능을 추가했습니다.

  • 애셋 레지스트리 인터페이스에 ScanFilesSynchronous 를 추가, TAssetPtr 또는 StringAssetReference 대상 특정 파일을 강제 스캔하는 데 좋습니다.

  • 씬 깊이 선택기가 지원됩니다. 현재 새로운 시네마틱 카메라 액터의 포커스 깊이 샘플링에 사용됩니다.

  • 씬 아웃라이너에 월드 선택 기능을 추가했습니다.

  • 계층형 LOD 시스템 작동방식 시각화를 위한 뷰 모드를 추가했습니다.

  • 다중 PIE 창 사이의 Alt+Tab 전환이 독립형 게임의 Alt+Tab 전환과 훨씬 비슷하게 일어납니다.

  • 커브 에디터 컬러를 X, Y, Z 채널 일관되게 했습니다. 컬러는 각각 빨강, 초록, 파랑입니다. 다른 모든 커브는 기본적으로 회색입니다.

  • Rebuild Lightmaps 자동화 스크립트에 (맵 체크아웃, 오류 개선, 이메일 알림 등) 여러가지 개선사항이 있습니다.

  • 에디터의 맵 텍스트 박스가 이제 경로를 긴 패키지 이름으로 변환하여 이식하기 좋도록 만들었습니다.

  • 이제 AssetUserData 파생 오브젝트를 디테일 패널을 통해 에디터의 애셋에 추가시킬 수 있습니다.

  • 계층형 LOD 아웃라이너와 작동방식을 다듬었습니다.

  • '최근 사용된 레벨' 과 '즐겨찾기 레벨' 이 이제 절대 경로가 아닌 긴 패키지 이름을 담습니다. 이를 통해 프로젝트 상대적이 되어, 프로젝트 위치가 바뀌어도 유효성을 잃지 않습니다.

  • 커브 에디터의 입력 & 출력 스내핑을 두 개의 다른 토글로 분리시켰습니다.

  • 스플라인 컴포넌트에 디버그 렌더링 기능이 생겨, shipping 이외의 빌드에서 게임 내 시각화시켜보거나, 선택되지 않은 경우에도 에디터내에서 시각화시켜 볼 수 있습니다.

    • 콘솔의 스플라인 표시 플래그 (또는 show spline) 로 켤 수 있습니다.

    • 스플라인 컴포넌트에 SetDrawDebug 함수로 인스턴스별 켜고 끌 수도 있습니다.

  • 에디터가 이제 새 애셋 에디터를 여는 새로운 방법을 다수 지원합니다. 에디터 개인설정 > Appearance (모양) > Asset Editor Open Location (애셋 에디터 여는 위치)에서 탭이 열리는 위치에 매우 많은 옵션을 선택할 수 있습니다. 그러면 always open asset editors in new windows (항상 새 창에서 애셋 에디터 열기) 옵션이 리셋되고, 그 옵션이 완전히 대체 및 실행됩니다.

  • 색 선택 툴의 스포이드를 이제 Esc 키로 취소시키거나, 좌클릭으로 완료시킬 수 있습니다.

  • UnrealGameSync: 선택된 프로젝트 박스에 포커스가 있는 경우 마우스 휠 회전이 더이상 프로젝트를 전환하지 않습니다.

  • UnrealGameSync: change 선택 상태에서 Ctrl+C 를 누르면 그 changelist 번호를 클립보드에 복사합니다.

  • UnrealGameSync: 상태 패널에 이제 현재 선택된 스트림이 표시되며, 클릭하면 다른 스트림으로 빠르게 전환할 수 있는 메뉴가 뜹니다.stream.

  • .ini 파일이 중복 (.ini.ini) 확장자가 붙을 수 있던 문제를 고쳤습니다.

  • 여러 줄 텍스트를 프로퍼티 매트릭스의 스트링 또는 텍스트 필드 하나에 붙여넣어도 더이상 Windows 플랫폼에 \r 캐릭터가 남지 않습니다.

  • 시퀀서에서 컬러 프로퍼티가 올바른 값을 받지 못하던 것을 고쳤습니다.

  • 드래그 앤 드롭 프리뷰 액터가 이제 적당한 스케일로 나타납니다.

  • 에디터 시뮬레이트 모드에서 액터를 선택해도 더이상 로그 경고가 나지 않습니다.

  • 자손 액터는 더이상 디테일 패널에서 액터 레퍼런스 프로퍼티용으로 선택할 수 없습니다.

  • 커브 에디터에서 뷰포트 바운드 밖을 박스 선택해도 더이상 크래시가 나지 않습니다.

  • PIE 독립형 게임이 전체화면에서 실행되게 만들던 버그를 잡았습니다.

  • 항목이 비어있는 인터페이스 배열 프로퍼티를 리셋시키려 해도 더이상 크래시가 나지 않습니다.

  • 에디터를 종료할 때 뷰포트 세팅이 올바르게 저장됩니다.

  • 텍스트 프로퍼티 편집시 노티파이 또는 (되돌리기용) 트랜잭션이 제대로 실행되지 않던 문제를 고쳤습니다.

  • 수정 키와 다른 키가 둘 다 같은 프레임에 눌려도 PC 에서 수정 키가 제대로 등록됩니다.

  • 색 선택 툴의 크기를 고정시켜 화면 밖으로 벗어나지 않도록 했습니다.

  • 커브 구조체 커스터마이제이션에서 편집용으로 선택된 오브젝트가 없을 때의 크래시를 고쳤습니다.

  • 특정 리비전에 대한 SkeletonGenerated 클래스가 공백인 경우 블루프린트 비교시 발생할 수 있었던 크래시를 고쳤습니다.

  • 에디터 모드 입력 처리기가 다른 모드 가동시 ensure 가 더이상 발동되지 않습니다.

  • 프로젝트가 코드 프로젝트면서 플러그인을 사용한 경우, 에디터가 iOS 에서 실행되도록 하려 하는 문제를 고쳤습니다.

  • 액터 병합 함수성이 이제 최종 메시의 머티리얼 섹션을 합칩니다.

  • PIE 종료시 FlushPressedKeys 에 드물게 발생하는 크래시를 고쳤습니다.

  • 드물게 발생하는 툴팁 관련 크래시를 고쳤습니다.

  • 이제 텍스트가 선택된 경우 슬레이트 숫자 드롭다운을 콤보 박스 값에서 업데이트합니다.

  • 슬레이트 스로틀 조절이 더이상 뷰포트 크기조절 정상 작동을 방해하지 않습니다.

  • 레퍼런스 뷰어의 Make collection from referenced assets (레퍼런싱된 애셋에서 컬렉션 만들기) 기능을 수정했습니다.

  • 클래스 선택기 필터의 작동방식이 다른 모든 에디터내 필터와 일치합니다.

  • 메시 칠하기 툴의 여러가지 크래시 버그를 잡았습니다.

  • 에디터에서 독립형 실행시 레벨이 더이상 더티 마킹되지 않습니다.

  • 부모 & 그룹 자손 액터를 이동해도 더이상 델타가 두 번 적용되지 않습니다.

  • 정방향 또는 역방향 루핑시 일부 시퀀스 트랙이 모든 키를 역순으로 잘못 재생하던 문제를 고쳤습니다.

  • Replace Actors 사용 이후 되돌리기/다시하기 해도 더이상 크래시가 나지 않습니다.

  • Third Party Plugin 예제에 포함된 ExampleLibrary 를 업데이트, Mac에서 빌드 및 로드가 가능합니다.

  • 이제 .FBX 또는 .T3D 파일만 임포트 가능 유형으로 받습니다. 이전에는, 지원되지 않는 유형인 경우 에디터 크래시가 났었습니다.

  • 컨픽 에디터 버튼이 보다 잘 보이도록 만들었습니다.

  • 즐겨찾기 레벨 관리 중 크래시가 날 수 있었던 것을 고쳤습니다.

  • Media 애셋 경로 변경시의 크래시를 고쳤습니다.

  • VR 에디터내 튜토리얼을 업데이트했습니다.

  • UnmappedTexelsPercentage 가 이제 100 기준입니다.

  • 커스텀 빌드 단계 사용시, 비동기인 경우, 완료 즉시 빌드 단계로 진행합니다. 그렇지 않은 경우 그냥 같은 비동기 빌드 단계 작업을 계속합니다.

  • 랜드스케이프가 있어야 랜드스케이프 에디터내 튜토리얼이 다음 단계로 넘어갑니다.

  • 자동 리임포트 세팅을 변경, Detect Changes on Startup (시작시 기본 change) 기본값이 true 가 되도록 했습니다. 새로운 소스 애셋이 감지될 때마다 매번 확인창이 떠, 사용자가 원하는 경우 자동 리임포트를 거부할 수 있습니다.

  • 벌칸 프리뷰가 실험단계로 도입되었으며, 벌칸 지원이 컴파일되지 않으면 숨깁니다. 파일 메뉴의 "임포트" 옵션 기능을 명확히 했습니다. 이 옵션과 "씬 임포트" 옵션이 하나의 '레벨로 임포트' 옵션으로 합쳐졌습니다.

콘텐츠 브라우저

  • 미디어 애셋용 내장 타입 카테고리를 추가했습니다.

  • 새 콘텐츠 브라우저 폴더 생성용 UI 액션을 추가했습니다.

  • 애셋 타입 카테고리가 알파벳 순으로 정렬됩니다.

  • 저장된 경로가 더이상 존재하지 않을 때 흔히 발생하던 크래시 회피를 위하여 Path View 의 Load Settings 함수 내 어서트를 다운그레이드 했습니다.

  • 클래스가 들어있는 경로를 콘텐츠 브라우저의 애셋 뷰에 붙여넣을 때의 크래시를 고쳤습니다.

  • 메시를 콘텐츠 브라우저에 리임포트할 때 희귀하게 발생하는 크래시를 고쳤습니다.

  • 새로 생성된/저장되지 않은 애셋에 대한 (콘텐츠 브라우저의) '탐색기에서 표시' 컨텍스트 메뉴 옵션을 비활성화시켰습니다.

랜드스케이프

  • 랜드스케이프 바운드를 확장시키는 기능을 추가했습니다.

  • 랜드스케이프 머티리얼 월드 포지션 오프셋을 0 이외의 콜리전 밉 세팅에 대한 콜리전으로 구워넣는 기능이 지원됩니다.

  • 랜드스케이프 그래스 타입 내 Use Landscape Lightmap (랜드스케이프 라이트맵 사용) 세팅을 통해 랜드스케이프 그래스에 랜드스케이프의 스태틱 라이트/섀도 맵 사용이 지원됩니다. 다이내믹 라이트/섀도 처럼 좋아 보이지는 않지만, 훨씬 훨씬 쌉니다.

  • 랜드스케이프는 이제 스태틱 라이팅 계산에 머티리얼 월드 포지션 오프셋을 사용합니다. 랜드스케이프 액터의 Use Material Position Offset In Static Lighting (스태틱 라이팅에 머티리얼 포지션 오프셋 사용) 옵션으로 켤 수 있습니다.

  • 랜드스케이프 그래스에 Random Scale (랜덤 스케일) 옵션이 생겼습니다. 폴리지 버전과 똑같습니다.

  • 이제 월드 컴포지션의 타일드 랜드스케이프 임포트에 PNG 하이트맵이 지원됩니다.

  • 이제 랜드스케이프 단순 콜리전과 풀 디테일 콜리전에 다른 LOD 설정이 가능합니다. 단순 콜리전 LOD 가 설정되지 않았거나 풀 콜리전 LOD 와 동일하게 설정된 경우, (전과 같이) 같은 콜리전 오브젝트를 사용합니다.

  • Landscape Layer Blend 머티리얼 노드의 입력 필터링이 개선되었습니다. 이제 texture object (등)의 연결을 허용하지 않으며, 하이트 입력은 머티리얼 특성을 받지 않(고 레이어 입력만 받)습니다.

  • 랜드스케이프 비저빌리티 툴을 Landscape Visibility Mask 노드 포함 랜드스케이프 머티리얼 없이 사용하려 할 때의 경고를 추가했습니다. 머티리얼에 Landscape Visibility Mask 노드를 추가하고 '오파시티 마스크' 출력에 연결해 주기만 해도 (활성화 여부는 상관없이, 머티리얼을 'opaque' 블렌드 모드로 놔둬도) 나머지는 랜드스케이프가 처리해 줍니다.

  • 랜드스케이프 스플라인의 바운드 계산을 수정했습니다. 첫 랜드스케이프 스플라인 점이 보이지 않고 나중의 점은 깜빡이던 문제가 해결됩니다.

  • [+]/[-] + [클릭] 으로 잇따른 컴포넌트 화이트리스트 변경사항을 되돌릴 때의 크래시를 고쳤습니다.

  • 완전 평면인 랜드스케이프 컴포넌트가 더이상 바운드 사이즈를 0 으로 만들지 않습니다.

  • 랜드스케이프 & 폴러지 툴이 이제 직교 뷰포트에서 작동합니다.

  • 랜드스케이프 에디터가 비실시간 모드에서 뷰포트를 제대로 업데이트합니다.

  • 랜드스케이프 그래스가 이제 머티리얼 인스턴스를 랜드스케이프 머티리얼로 사용하고 머티리얼을 변경해도 업데이트됩니다.

  • 랜드스케이프 스플라인 선이 평면 랜드스케이프에 제대로 표시됩니다.

  • 컴포넌트에서 레이어 페인트를 완전히 벗겨낸 이후 되돌리기 할 때의 레이어 할당 문제를 고쳤습니다. 이로 인해 복수의 레이어가 같은 텍스처 채널에 할당되어 시각적인 결과가 매우 안좋아지던 문제가 해결됩니다.

  • 랜드스케이프에서 Change Landscape Component Size (랜드스케이프 컴포넌트 크기 변경) 툴 사용시 LODFalloff 세팅이 리셋되던 것을 고쳤습니다.

  • '새 랜드스케이프' 대화창에서 레이어 인포 선택시 필요치 않은 레이어 로드를 제거하여 멈춤 현상을 제거했습니다.

  • 로드시 Landscape Render 와 Collision 컴포넌트 사이의 깨진 레퍼런스를 고쳤습니다. 이로 인해 조각 모드에서의 크래시에서부터 콜리전이 업데이트되지 않는 몇 가지 문제가 해결되었습니다.

  • 공백 스플라인 컴포넌트 포함 Editor Apply Spline 호출시의 크래시를 고쳤습니다. 또한 PIE 에서도 더이상 아무것도 하지 않습니다 (블류틸리티 용이지, 런타임 용은 아닙니다).

  • 시뮬레이션 도중 랜드스케이프를 선택한 채로 랜드스케이프에 들어갈 때의 크래시를 고쳤습니다. 랜드스케이프 인포가 더이상 PIE/시뮬레이트 랜드스케이프에 대해 생성되지 않는데, 어차피 비어있었기 때문입니다.

  • 테셀레이션을 사용하는 랜드스케이프 프로젝트를 로드해도 더이상 크래시가 나지 않습니다.

  • 랜드스케이프 스플라인에 스피드트리 머티리얼을 적용할 때의 셰이더 컴파일 오류를 고쳤습니다.

  • 주어진 랜드스케이프에 그래스가 없는 경우 그래스에서 더이상 게임내 틱이 일어나지 않습니다.

머티리얼 에디터

  • 머티리얼 함수 호출 노드를 한 프로젝트에서 그 함수가 정의되지 않은 다른 프로젝트로 붙여넣을 때의 크래시를 고쳤습니다.

  • 랜드스케이프 레이어 블렌드 노드가 이제 입력이 웨이트/알파(1 입력)에서 하이트 블렌드(2 입력)로 또는 그 반대로 변경되어도 연결을 제대로 업데이트합니다.

마티네

  • 특정 그룹을 끌 수 있는 Enable Group 옵션을 추가했습니다.

  • 슬롯 노트가 다른 그룹에 있는 경우 동시에 복수의 애니메이션을 재생할 수 있습니다.

  • 재생 중지 전 스크러빙을 할 때 잘못 나오던 오디오 재생을 고쳤습니다.

  • 마티네 창 밖으로 선택 박스를 끌어도 더이상 에디터 크래시가 나지 않습니다.

캐스케이드

  • 캐스케이드에서 Convert to Seeded (시드로 변환) 사용시의 크래시를 고쳤습니다.

페르소나

  • Bone Draw 가 켬/끔 토글이었으나 이제 모두, 선택, 없음 옵션으로 분화되었습니다. 기본값은 선택 입니다.

  • 페르소나에 CPU 스키닝 옵션을 추가했습니다.

  • 포즈 이밸류에이터 커스터마이제이션이 이제 올바른 시간에 처리됩니다. 프로퍼티를 디테일 패널에서 제거해도 다시 추가되어 항목이 중복되던 문제가 해결됩니다.

  • 페르소나에서 자세한 메시 통계 표시 설정을 했을 때 보고된 트라이앵글 수가 더이상 클로스 섹션 수를 복제하지 않습니다.

  • 페르소나에서 이밸류에이터 변환 이후 선택된 그래프 노드를 접근할 때의 크래시를 고쳤습니다.

  • 로테이션 멀티플라이어 노드의 작명 오류를 고쳤습니다.

  • 바닥을 메시에 자동 조정이 이제 컨픽 파일에 저장됩니다.

프로젝트 브라우저

  • 현재 엔진 버전보다 구버전 프로젝트의 사본을 만들 때의 문제를 고쳤습니다. 이전에는 사본이 계속해서 원본 프로젝트의 애셋을 접근하려 해서, 패키징에 실패했었습니다.

스태틱 메시 에디터

  • Generate KDOP Collision 이 더이상 나쁜 콜리전 데이터를 생성하지 않습니다.

  • 매우 작은 메시에 자동 컨벡스 콜리전 툴을 실행할 때의 크래시를 고쳤습니다.

폴리지

  • 폴리지 스케일 조절(scalability) 그룹을 추가했습니다.

    • 기본적으로 폴리지 스케일 조절 옵션은 랜드스케이프 그래스가 렌더링되는 밀도를 0% (낮음)에서 100% (높음) 사이로 변경합니다.

    • FoliageType 의 Enable Foliage Density Scaling (폴리지 밀도 스케일 조절 활성화) 옵션을 통해 작동방식이 선택되는 폴리지 타입의 운명도 바꿀 수 있습니다. 게임플레이 관련 이펙트가 없는 폴리지에 추천합니다.

    • 주: 폴리지 밀도 스케일 조절은 에디터가 아닌 (PIE 포함) 게임 내에서만 적용되는데, 유용성과 기술적 이유때문에 그렇습니다. 그래스 밀도 스케일 조절은 여전히 에디터에서 가능합니다.

    • 주: 낮음 폴리지 세팅은 모든 그래스 & 디테일 폴리지를 제거합니다.

  • 프로시저럴 폴리지에 BSP, 스태틱 메시, 랜드스케이프, 반투명 필터를 적용하는 기능을 추가했습니다.

  • 이제 폴리지를 칠할 때 각 컬러 채널에 대해 버텍스 컬러 마스킹 규칙을 지정할 수 있습니다.

쿠커

  • cook 커맨드렛에서 셰이더 / 텍스처 캐시 도중 패키지 저장을 가능하게 하여 병렬화를 개선시켰습니다.

  • resave lighting 커맨드렛이 이제 라이팅 빌드를 옵션으로 지원합니다. 실행을 위해서는 머신에 비디오 카드가 설치되어 있어야 합니다.

  • 쿠킹된 패키지에 저장되던 클래스 플래그인 StaticMesh NavCollision 와 UParticleRequiredModule 임포트로 유발되는 결정론적 쿠킹 문제를 수정했습니다 (로드 순서에 따라 달라졌었습니다).

  • 더이상 가비지 컬렉션이 콘텐츠를 변경된 것으로 마킹하지 않습니다.

  • Fixup Redirects, Cook-on-the-fly Server 커맨드렛에 미세조정 작업이 있었습니다.

시퀀서

  • UMG 에 시퀀서 기능이 해제되었습니다.

    • 이제 이벤트 트랙을 사용할 수 있습니다.

    • 이제 PlayTo() 함수를 호출하여 애니메이션의 지정된 시간 재생이 가능합니다.

  • 이제 마티네 또는 시퀀서를 사용하여 4K 이미지 시퀀스 렌더링 출력이 가능합니다.

  • 컬러 트랙에 대한 컬러 그레디언트가 이제 색 선택 툴의 색에 일치합니다.

  • 첨부된 오디오 트랙에 스크러빙을 해도 더이상 크래시가 나지 않습니다.

게임플레이 프레임워크

  • CheatManager 에 cheatscript 함수성을 추가했습니다. 콘솔 명령 세트를 하나의 스크립트로 짜서 명령 한 번에 실행할 수 있습니다.

  • Actor 와 Component OnClicked/OnReleased 이벤트를 이제 좌클릭 이외로도 발동시킬 수 있습니다.

    • 이제 PlayerController 에는 OnClick/OnReleased 이벤트를 발동시키는 목록이 저장되고, 커서가 그 이벤트를 구현하는 Actor/Component 위에 있을 때 발동됩니다.

    • 이제 OnClick/OnReleased 이벤트에 인수를 붙여 어느 키가 어느 이벤트를 담당하는지 지정할 수 있습니다.

  • OnTakeAnyDamage, OnTakePointDamage, OnActorBegin/EndOverlap, OnBegin/EndCursorOver, OnClicked/Released, OnInputTouchBegin/End/Enter/Leave, OnDestroyed, OnEndPlay 액터 델리게이트 모두 새로 생긴 파라미터를 통해, 하나의 이벤트 도입부가 다수의 액터에 묶여있는 경우 바인더에게 어느 액터에서 이벤트가 발생했는지 알려줄 수 있습니다.

  • Constant Force 루트 모션 소스에 Strength Over Time 커브 플로트 파라미터를 추가, 지속기간에 가해지는 지속적인 힘의 스케일 조절이 가능합니다.

  • Gameplay Tag 구조체에 태그 리디렉터가 지원됩니다. Tag Container 와 마찬가지로 Engine.ini 의 GameplayTagRedirects 섹션을 사용합니다. (태그 딕셔너리에 더이상 없어) 유효하지 않은 게임플레이 태그는 이제 로드 시간에 경고를 발생시킵니다.

  • Apply Root Motion Move To Force 어빌리티 태스크 노드에 Velocity Mode On Finish 세팅을 추가했습니다. 이제 루트 모션 종료시 캐릭터 속도를 특정 값으로 설정할 수 있습니다.

  • 두 어트리뷰트가 한계치에 일치하기 시작/종료될 때 로직을 트리거시키는 AbilityTask_WaitAttributeChangeRatioThreshold 를 추가했습니다.

  • 어티프뷰트 상태가 어떤 비교 한계치와 일치하기 시작/종료될 때 트리거되는 AbilityTask_WaitAttributeChangeThreshold 를 추가했습니다.

  • 환경설정 가능한 느린 프레임 프린트아웃을 추가했습니다 (최대 t.SlowFrameLoggingThreshold 에 걸쳐 느린 프레이임 길이를 출력합니다).

  • 게임 유저 세팅에 Get Default Resolution Scale 라는 메서드를 추가, Desired Screen Height (원하는 화면 세로 크기)와 현재 해상도에 따라 추천 해상도 스케일을 반환합니다.

  • 액터에 Get Game Time Since Creation 함수를 추가했습니다.

  • Camera Shake 의 블렌드 아웃 시간에 따라 중지시 블렌드 아웃 시킬 수 있는 옵션이 추가되었습니다 (기본 방식은 변경하지 않습니다).

  • HUD DrawLine 함수에 LineThickness 파라미터 옵션을 추가했습니다.

  • 리슨 서버에 원격 캐릭터의 로컬 뷰에 대한 부드러운 보간을 위한 기능이 지원됩니다.

    • p.NetEnableListenServerSmoothing 콘솔 변수로 제어합니다. 기본적으로 켜져 있습니다.

    • 리슨 서버상 보간 랙의 별도 튜닝 세팅을 추가했습니다 (ListenServerNetworkSimulatedSmoothLocationTime, ListenServerNetworkSimulatedSmoothRotationTime).

    • 이 구현은 메시 위치를 (클라이언트에서와 비슷한 방식으로) 보간하지만, 클라이언트 업데이트 없이 서버가 업데이트하는 중간 프레임에서 콜리전 캡슐의 이동 시뮬레이션을 하지는 않습니다.

  • 블루프린트 함수 라이브러리에 Tau 를 추가했습니다.

  • 데이터 테이블 애셋에 메타데이터를 사용하여 행 필터링을 적용하는 기능을 추가했습니다. (meta = (RowType="MyRowName").)

  • 이제 모든 축 키는 자신의 프로퍼티 편집을 프로젝트 세팅의 입력 섹션에서 할 수 있습니다.

  • 이제 블루프린트에서 Actor Is Replicated (액터 리플리케이션 여부) 쿼리를 할 수 있습니다.

  • OnComponentHit, OnComponentBegin/EndOverlap, OnComponentWake/Sleep 프리미티브 컴포넌트 델리게이트 모두, 하나의 이벤트 도입부에 다수의 프리미티브 컴포넌트가 묶여있는 경우 바인더에게 어느 프리미티브 컴포넌트에서 이벤트가 발생했는지를 알려주는 파라미터를 추가했습니다.

  • Scene Component Snap To 와 블루프린트 버전 Attach To 가 성공 여부를 나타내는 부울 값을 반환합니다.

  • Text Render Component 에 이제 세로 간격을 조절할 수 있습니다.

  • Vertical Alignment 를 이제 Text Render Component 에 대한 블루프린트에서 설정할 수 있습니다.

  • 겹치는 컴포넌트가 소멸될 때마다 컴포넌트 오버랩이 종료(되며 OnComponentEndOverlap 이벤트가 발동)됩니다.

  • 이동중인 프리뷰 액터의 자손 액터가 더이상 바닥에 스냅할 때 콜리전이 일어나지 않습니다.

  • 자손 액터가 더이상 다른 블루프린트 썸네일로 새어나가지 않습니다.

  • 자손 액터가 이제 소유중인 컴포넌트와 액터 비저빌리티에서 그 비저빌리티를 상속합니다.

  • 게임 전용 World Settings 서브클래스가 사용중일 때 핫 리로드 이후 월드 세팅 관련해서 일어나던 크래시가 수정되었습니다.

  • ApplyRootMotionMoveToForce 어빌리티 태스크가 이제 Movement Mode 를 Falling 모드 이외의 것으로 설정 가능합니다.

  • 부모 컨스트럭션 스크립트에서 자손 액터에 적용된 커스터마이제이션이, 자손 액터의 클래스로 된 블루프린트를 다시 컴파일해도 더이상 없어지지 않습니다.

  • 오버랩 이벤트 도중 같은 컴포넌트를 다시 이동시킬 때의 중복 오버랩 이벤트가 더이상 발생하지 않습니다.

  • 게임의 기본 맵 로드가 실패할 때 발생할 수 있던 치명적 오류를 고쳤습니다. 예를 들어 프로젝트 세팅에서 기본 맵에 쓸 애셋이 삭제되었는데, 게임에서 서버에 연결하려 하다가 실패하는 경우에 발생할 수 있었습니다.

  • 박스 컴포넌트, 구체 컴포넌트, 캡슐 컴포넌트는 이제 크기, 반경, 캡슐 크기 변경시 바운드를 업데이트합니다.

  • Gameplay Cue Tag 의 상세 커스터마이제이션에서 선택된 태그 변경시 Notify 필드가 제대로 새로고침 되지 않던 버그를 잡았습니다.

  • 자손 액터 컴포넌트 사본이 에디터 레벨에서 고아가 될 수 있었던 문제를 고쳤습니다.

  • 자손 액터 컴포넌트가 킬 대기 상태로 마킹되어 있다가 가비지 컬렉션이 실행될 때까지도 깨끗하게 소멸되지 않았을 때의 크래시를 고쳤습니다.

  • Sound Quality 노드가 들어있는 사운드 큐를 네이티브 생생자에서 레퍼런싱해도 더이상 크래시가 나지 않습니다.

  • 플레이어가 스트리밍 아웃되는 Physics Volume 에 서있을 때의 크래시를 고쳤습니다. Should Update Physics Volume 이 true 설정된 프리미티브 컴포넌트는 스트리밍 아웃된 레벨의 Physics Volume 레퍼런싱을 계속할 수 없습니다.

  • 틱 간격을 끈 틱 함수가 리스케쥴을 기다리면서 발생하는 크래시를 고쳤습니다.

  • Movement Component 의 Plane Constraint Normal 편집 후 월드의 인스턴스에 전파되지 않던 것을 고쳤습니다.

  • 지오메트리 스윕이 이제 요청시 FaceIndex 를 반환합니다. 폴리지 컬러 마스킹 페인트 모드가 버텍스 컬러를 따르지 않는 문제가 해결됩니다.

  • 아이덴티티가 아닌 루트 컴포넌트 스케일을 가진 자손 액터가 이제 스케일이 제대로 조절됩니다.

  • Camera Anim FOV 가 이제 올바르게 적용됩니다.

  • BugItGo 사용시 플레이어가 월드속으로 떨어지던 문제를 고쳤습니다.

  • 캐릭터가 표면 위의 오브젝트에 부딛힐 때 물 밖으로 튕겨지던 문제를 고쳤습니다.

  • 독립형에 스폰된 플레이어 컨트롤러는 Is Locally Controlled 에 항상 true 를 반환합니다.

  • 잠재적 PlayerState 누수를 수정했습니다.

  • 위젯 컴포넌트 머티리얼이 이제 오파시티 마스크와 양면 모드하고도 정상 작동합니다.

  • 캐릭터에 반경보다 절반 높이 이하로 웅크리도록 요청해도 더이상 잘못된 Height Adjust 값으로 On Start Crouch 가 호출되지 않습니다.

  • 시뮬레이션 적용 캐릭터 프록시가 추가적인 네트워크 업데이트 없이 침해가 있는 와중에 속도가 0 에 도달하는 경우, 더이상 낙하 상태에 갖히지 않습니다.

  • 서브레벨이 로드되도록 설정되지는 않았느나 비저빌리티 상태가 true 로 설정된 경우, Is Streaming State Pending 가 잘못된 값을 반환하던 것을 고쳤습니다.

  • (Kismet Math Library 의) Convert Transform To Relative 가 이제 올바른 연산을 수행합니다.

  • 걷기 모드를 통과하는 기본 이동 모드로 전환을 시도하자 마자 바로 걷기 모드를 빠져나가는 경우, Character Z 속도가 유지됩니다.

  • 리플리케이트되는 자손 액터 컴포넌트를 포함한 리플리케이트되는 액터는 더이상 클라이언트에 그 액터 사본이 둘 생기지 않습니다.

  • 독립형 게임 도중 Set 콘솔 명령을 사용해도 크래시가 나지 않습니다.

  • IWCE 컴포넌트나 BP 생성 컴포넌트로부터 온 IWCE 컴포넌트의 어태치먼트 변화 되돌리기/다시하기가 이제 정상 작동합니다.

  • 콘솔이 닫히면 이제 뷰포트의 입력 상태를 (포커스와 캡처 둘 다) 제대로 복원합니다.

  • 가비지 컬렉션 도중 서브 컴포넌트에서 Destroy Component 를 호출할 때의 크래시를 고쳤습니다.

  • Engine.ini 에 지정된 Game Singleton 클래스가 유효하지 않아도 더이상 크래시가 나지 않습니다.

  • 액터 이터레이터가 이제 연관된 레벨에 액터의 결과를 포함시킵니다. 즉 스트림 인 되는 서브 레벨의 Begin Play 에서, 해당 서브 레벨의 액터가 Get All Actors Of Class 와 같은 함수에 의해 반환된다는 뜻입니다.

  • 메시가 자손 액터의 지오메트리와 겹친다고 해서 더이상 액터가 스폰에 실패하지 않습니다.

  • 네트워크 전권이 없는 상태에서 폰에 빙의하려 할 때의 경고 메시지를 추가했습니다.

  • 스켈레탈 메시에서 한 점에 가장 가까운 것을 구하는 블루프린트 노출 함수를 추가했습니다.

  • Set Control Rotation From Pawn Orientation 플래그를 AI Controller 에 추가, 포커스 포인트가 없을 때 폰 로테이션을 컨트롤 로테이션으로 복사할지를 제어합니다.

  • Character Movement 에 (본뿐만 아니라) 소켓을 기반으로 하는 기능이 지원됩니다.

  • Set Actor Rotation 에 텔레포트 플래그를 추가했습니다. 문서를 개선시켰습니다.

  • 소멸된 자손 액터는 항상 이름이 변경됩니다.

  • (Player Controller 의) Smooth Target View Rotation 이 튜닝 가능한 보간 속도 Smooth Target View Rotation Speed 를 사용하도록 변경했습니다.

  • Engine Settings 클래스를 찾지 못하면 크래시가 나는 대신 예비로 기본 클래스를 사용합니다.

  • Primitive Component 함수인 Get Collision Enabled, Is Collision Enabled, Is Query Collision Enabled, Is Physics Collision Enabled 를 노출시켰습니다.

  • FInterpTo 함수는 이제 다른 *InterpTo 함수와 일관되게 0 은 물론 음수 값도 즉시 속도로 취급합니다.

  • Get Time Down, Get Key Value, Get Raw Key Value, Get Vector Key Value 를 AnyKey 와 함께 사용한 경우 경고가 납니다.

  • 컴포넌트 & 액터 어태치먼트 API 가 개선되었습니다.

    • Enum 기반 어태치먼트 위치를 새로운 컴포넌트별 어태치먼트 규칙으로 대체했습니다.

    • 부모에 이미 스케일 조절을 한 경우 Snap to Target, Keep World Scale 이 정상 작동하지 않던 것을 고쳤습니다.

  • 변수 패킷 랙이 있는 현실적인 네트워크 환경 하에서 캐릭터 무브먼트의 선형 스무딩을 개선시켰습니다.

  • 물 표면에서의 수영 동작을 개선시켰습니다.

  • 게임내 콘솔을 개선시켰습니다.

  • 이탈리아어 키보드에 콘솔을 여는 적당한 기본 키가 생겼습니다.

  • 바인딩 불가능한 (멀티미디어 버튼과 같은) 키 누름이 더이상 플레이어 입력 시스템을 경유하지 않습니다.

  • 디스트럭터블 위로 걷는 것을 제대로 작동하도록 만들어 각 청크가 이동하는 것을 따라갈 수 있게 되었습니다.

  • On Teleported 개선을 통해 물에 들어갈 때의 임시 낙하 상태를 회피하고, Z 속도를 올바르게 유지시키며, 낙하에서 보행으로 전환할 때 Process Landed 를 호출합니다.

  • Create Render State For Hidden Components 부울을 이제 에디터 뿐 아니라 게임에서도 접근할 수 있습니다.

  • 이미터 스폰을 최적화시켜 등록 전 중복 트랜스폼 업데이트를 피하도록 했습니다.

  • 카메라 애님의 포스트 프로세스 웨이트가 이제 블렌드 인/아웃 포함 스케일 조절에 영향을 받습니다.

  • 프로시저럴 폴리지 컴포넌트가 이제 볼륨이 존재하지 않으면 레벨 바운드를 사용합니다.

  • 월드 컴포지션 관련 데이터를 쿠킹된 빌드의 레벨 패키지 안에서 중복해서 찾는 것을 제거했습니다.

  • 이제 캐릭터가 물리 시뮬레이션 오브젝트이면 (켜진 경우) 클라이언트측 카메라 업데이트를 전송합니다. 이를 통해 캐릭터가 시뮬레이션(, 또는 시뮬레이션 오브젝트에 부착)될 때 네트워크 연관성을 잃는 것이 방지됩니다.

  • 스태틱 & 스켈레탈 메시 소켓은 이제 제공된 Relative Scale 을 사용합니다. 이전 포맷 데이터는 스케일을 (1,1,1) 로 리셋시켜 업그레이드 할 때의 문제 유발을 회피합니다.

  • Timer Handles 가 이제 64 비트 값입니다.

  • (플레이어 카메라 매니저의) Calc Radial Shake Scale 이 액터 위치가 아닌 카메라 위치를 사용합니다. 액터 위치는 서버에 리플리케이트 되지 않기 때문입니다.

  • KismetEvent 또는 ke 콘솔 명령과 와일드카드 연산자를 사용하면 이제 특정 이벤트가 발동된 월드 내 오브젝트의 이벤트만 발동시킵니다.

  • Was Just Pressed, Was Just Released, Is Key Consumed, Is Pressed 가 이제 AnyKey 를 제대로 처리합니다.

  • 카메라 애님 블렌드 아웃할 때, 블렌드 아웃이 재시작되지 않습니다. 비즉시성 Stop 이 다시 요청되는 경우의 튀는 현상이 유발되던 것이 해결됩니다.

  • 이제 10 개 이상의 에디터에서 플레이 세션을 동시에 실행시킬 수 있습니다.

학습 자료

에디터내 도움말

  • Next Tutorial (다음 튜토리얼) 버튼이 이제 지정된 튜토리얼로 링크됩니다.

현지화

  • 콘텐츠 브라우저에 애셋 현지화 컨텍스트 메뉴를 추가했습니다. 어떤 소스의 애셋에서도 현지화된 애셋을 생성, 편집, 확인할 수 있을 뿐만 아니라, 어떤 현지화된 애셋의 소스 애셋을 편집, 확인할 수 있습니다.

  • 지원되는 컬처를 리매핑하고 한정시키는 메서드를 추가했습니다.

    • 이제 컨픽 시스템을 (DefaultGame, DefaultEngine, DefaultEditor 중 하나를) 사용하여, UE4 가 태생적으로는 이해하지 못하는 플랫폼 리매핑 처리를 할 수 있습니다.

      • 세미콜론으로 구분되는 매핑 항목 배열로 표현됩니다: SourceCulture;DestCulture.

      • 리매핑 처리는 FInternationalization::GetPrioritizedCultureNames 에 의해 이루어집니다.

    • 이제 특정 빌드에서는 (DefaultGame, DefaultEngine, DefaultEditor 중 하나를 통해) 견본이 될 수도 있는 특정 컬처를 끌 수도 있습니다.

      • 세미콜론으로 구분할 수도 있는 매핑 항목 배열로 표현됩니다: Culture[;BuildConfig[,BuildConfig,BuildConfig]] (빌드 컨픽이 없다는 것은 모든 빌드 컨픽임을 내포합니다).

      • 필터링 처리는 FInternationalization::GetCulturesWithAvailableLocalization 에 의해 이루어집니다.

  • 중국어 (또는 스크립트를 사용하는 다른) 컬처에 대한 예비 감지 방식을 개선시켰습니다.

    • 스크립트 코드가 없는 컬처가 주어진 경우, 가능한 컬처를 기반으로 어떤 스크립트를 사용해야 할 지 시도해 알아냅니다.

      • 예를 들어 zh-CN 가 주어진 경우, (zh-Hans-CN 에서) Hans 를 감지한 다음 zh-Hans-CN, zh-CN, zh-Hans, zh 순서대로 번역이 일치하는 것을 찾아봅니다.

    • 이를 통해 스크립트 코드를 지원하지 않는 플랫폼에서 문제없이 중국어 번역에 zh-Hans 와 zh-Hant 를 사용할 수 있습니다.

  • 4.11 이전 버전에서 만든 패키지에서 패키지 로드가 실패할 수 있었던 FText FFormatArgumentData 관련 문제를 찾아내어 수정했습니다.

  • Google Pinyin IME, QQ IME, Sogou IME 사용시 발생할 수 있었던 크래시를 고쳤습니다.

  • 배치 모드 Cube, Sphere, Cylinder, Cone 스트링 현지화를 수정했습니다.

  • 애셋 현지화 수집기가 충돌을 올바르게 보호가지 못하던 것을 고쳤습니다.

  • UE4 에서의 현지화 패키지 처리 방식을 개선시켰습니다.

    • FPackageName API 에 추가되었던 현지화 고려사항 대부분은, 로드시 패키지 현지화를 수행하는 몇몇 핵심 장소에서 FPackageName::GetLocalizedPackagePath 를 사용하는 것으로 제거됩니다.

    • 이 변화로 패키지 현지화가 패키지 로드시 덜 구체적인 컬처를 고려하지 않던 문제가 해결됩니다 (예로, 컬처를 en-US 로 설정하고자 하는 경우, en 패키지는 고려하지 않습니다). 또한 예비 현지화 패키지의 우선순위 처리도 가능합니다 (예로, 텍스처는 en-GB 와 en 이 있으나 오디오는 en 만 있을 수 있습니다).

  • 스트링 리터럴에서 파싱한 리터럴 이스케이프 캐릭터 시퀀스는 이제 현지화용으로 수집할 때 이스케이프가 해제됩니다.

  • UAT 가 이제 모든 프로젝트 번역 타깃을 스테이지에 올립니다.

네트워킹

  • 단일 패스에 일부분은 (강제로 최종 저장시키기 위해 맵을 변경할 필요는 없다던가 해서) 네트워크 프로파일 스트림을 만드는 기능을 추가했습니다.

  • demo.minrecordhz 콘솔 변수를 추가, 액터별 리플레이 녹화 속도의 바닥을 설정할 수 있습니다.

  • 새로운 리플리케이션 조건 COND_ReplayOrOwner 를 추가, 리플레이는 물론 소유중인 연결에도 프로퍼티를 리플리케이트 합니다.

    • 보통은 COND_OwnerOnly 지만, 리플레이에도 사용될 수 있는 프로퍼티에 좋습니다.

    • Ability System Component 의 Activatable Abilities 의 리플리케이션 조건이 이제 COND_ReplayOrOwner 라, 이 어빌리티는 리플레이에서 끌 수 있습니다.

  • 리플레이 재생시 비동기 월드 로드를 지원합니다 (demo.AsyncLoadWorld 1).

  • Network Replay Streaming 인터페이스에서 리플레이 ID 를 구하는 기능이 지원됩니다.

  • 일부 치명적이지 않은 네트워크 로그를 경고 단계에서 로그 단계로 낮췄습니다.

  • HTTP Network Replay Streamer 의 재생/스크러빙 반응속도 향상을 위해 다운로드한 정보를 캐시에 저장합니다.

  • IPv4/IPv6 와 멀티캐스트 처리를 뜯어고쳤습니다.

  • 리플레이용 액터 녹화가 이제 여러 프레임에 걸쳐 보다 고르게 분할됩니다. 리플레이 녹화시 CPU 사용량이 몰리는 것을 고르게 하는 데 도움이 됩니다.

  • 진짜 네트워크 포화 감지 기능이 지원됩니다.

    • UNetConnection::RemoteSaturation 에 포함된 0-1 값으로, 접속의 0-100% 포화 상태를 뜻합니다.

  • 만료된 트랜스포트 노드의 제거를 구현했습니다.

  • 이제 무브먼트 프로퍼티는 외부에 저장되므로 더이상 리플리케이트시키지 않습니다.

    • 리플레이를 제외시키는 새로운 리플리케이션 조건을 추가했습니다.

    • 최상 우선권의 리플리케이션 조건을 변경하는 기능을 추가했습니다.

  • 네트워크 접속 호환 여부를 확인하는 데 있어 더이상 패키지 guid 를 사용하지 않습니다. 이제 리플리케이트된 프로퍼티에서 만들어진 체크섬만 사용합니다 (그래서 패키지에 리플리케이트되는 프로퍼티를 변경하지 않는 한, 서버/클라이언트에서 다르더라도 로드가 가능합니다).

  • 네트워크 대역폭 통계에서의 SLIP 부하를 제거했습니다. 또한, 접속 별 대역폭 통계를 추가했습니다.

  • -notimeouts 를 사용하면 플레이어가 명시적으로 추방된 경우 더이상 PlayerController 소멸을 막지 못합니다.

  • 서버가 오브젝트를 GC 하고 클라이언트가 레퍼런싱하는 문제를 해결했습니다. 이제 서버가 그 오브젝트를 다시 로드하도록 할 수 있습니다.

  • (여러 프레임에 걸쳐) 스폰 지연된 액터가 초기화 완료되기도 전에 리플리케이션 대상으로 고려되어 버릴 수 있었던 네트워크 드라이버 버그를 잡았습니다.

  • Enum 이 네트워크를 통해 시리얼라이즈할 때 너무 작은 비트 수를 사용하던 버그를 잡았습니다.

  • 리플레이 경과 시간 초를 클램프하는 방법에 있어서, 서버가 슬로우 모션으로 실행중일 경우 문제가 생길 수 있었던 버그를 수정, 정상 상황에서의 경과시간 클램프 방법과 일관성을 유지하도록 했습니다.

  • 리플레이 녹화 도중 심리스 트래블 시도시 발생할 수 있었던 크래시를 고쳤습니다. 이는 editor 이외의 빌드 환경설정에만 영향을 끼칩니다.

  • Execute Console Command 블루프린트 노드에서 demoplay 명령을 사용하여 리플레이 재생을 시도하는 경우, 더이상 무한 정지 현상이 발생하지 않습니다.

  • 맵에 정적으로 배치된 액터의 리플리케이티드 프로퍼티가 리플레이에서 새로운 시간으로 스크러빙할 때 업데이트되지 않도록 만들던 문제를 고쳤습니다. 이제 이 프로퍼티에 대해서는 RepNotify 함수도 호출됩니다.

  • 서버의 원격 플레이어 컨트롤러가 더이상 심리스 트래블 이후 로컬 플레이어 컨트롤러로 잘못 플래그 설정되지 않습니다.

  • 특정 컴포넌트와 액터 관련해서 CDO 와 다른 기본값을 가질 수 있었던 문제를 고쳤습니다. 그러한 프로퍼티가 CDO 에서 기본값으로 변경된 경우 리플리케이트되지 않도록 만들었었습니다.

  • demo.SkipTime 콘솔 변수가 이제 음수 값으로도 작동합니다.

  • 클라이언트가 서버보다 심리스 트래블로 빠르게 이동하는 경우 진행되지 않던 문제를 고쳤습니다.

  • 터널 기본 세팅이 이제 올바르게 저장됩니다. 코드와 문서 정리 작업도 거쳤습니다.

  • AvgPing 퍼포먼스 카운터가 더이상 NaN 으로 읽히지 않습니다.

  • 몇몇 네트워크 통계가 접속 없이는 업데이트되지 않아 묵은 값을 남기던 문제를 고쳤습니다.

  • 테스크탑 이외의 플랫폼에서는 터널 지원을 컴파일에서 제외시킵니다.

  • HTTP Network Replay Streaming 모듈에 재시도 로직을 추가했습니다.

  • rep 레이아웃 히스토리 오버플로우의 상세도를 낮췄습니다 (대기 시간/접속 포화 관련해서 발생할 수 있는 양성 문제입니다).

  • PS4 소켓의 폴링 상태 읽기/쓰기를 분할, 읽기 상태를 확인하고자 할 때 풀 타임아웃을 제대로 대기할 수 있게 되었습니다.

  • ServerReplicateActors 를 크게 리팩터링하여, 가독성을 향상시키고 불필요한 코드도 제거했습니다.

  • 네트워크 스트림에서의 오브젝트 저장 방식을 리팩터링하여, 이제 필요에 따라 더욱 쉽게 건너뛸 수 있게 되었습니다. 이 새로운 방식은 보통 보다 안정적이기도 합니다.

온라인

  • HTTP 반응 헤더 관련해서, 하나의 반응 안에 두 번 이상 설정된 헤더 값이 마지막 설정된 값만 기억하던 문제를 해결했습니다. 이제 기존 값에 쉼표와 함께 덧붙입니다. HTTP 요청에도 동일한 문제가 있었는데, SetHeader 작동방식을 변경하기 보다, 기존 헤더에 값을 추가하는 AppendToHeader 라는 함수가 새로 생겼습니다.

  • HTTP Progress 델리게이트가 더이상 자신을 등록한 모듈이 언로드된 이후 호출되지 않습니다.

기타

  • 디바이스에 지원되는 경우 터치 이벤트를 HMD 에 푸시해 주는 기능이 추가되었습니다.

  • 엔진에 사용자 활동 추적 API 를 추가하고, 셧다운/크래시 애널리틱스에 연결하여 오류 보고에 컨텍스트를 추가할 수 있도록 했습니다.

    • 사용자 활동이 MTBF 애널리틱스와 에픽에 전송되는 크래시 리포트에 전달됩니다.

    • 게임 프로그래머는 FUserActivityTracking::SetActivity() 를 사용하면 됩니다.

    • 블루프린트 사용자는 Set User Activity 노드를 사용하면 됩니다.

  • MTBF 애널리틱스는 이제 (에디터에서 이동되어) 엔진 기능이 되었습니다.

    • 실행 유형 (에디터/게임) 및 프로젝트 이름 특성이 추가되었습니다.

    • DefaultEngine.ini 의 새로운 프로젝트 세팅으로 제어합니다.

    • PS4 의 SystemWideCriticalSections 을 지원합니다.

  • 길이를 알 수 없는 미디어 시각화가 개선되었습니다.

  • 오디오 트랙 스펙이 이제 매 프레임 업데이트되어 스트리밍 미디어와 가변 스트림이 더욱 잘 지원됩니다.

  • 창 모드 전체화면이 이제 게임 유저 세팅의 기본 창 모드가 되었습니다.

  • 애널리틱스 이벤트 부하 기록을 위한 별도의 로그 카테고리가 추가되었습니다.

  • UE 4.12 의 고급 선택 다운로드 기능이 추가되고, 런처에 아트 툴과 타깃 플랫폼 옵션이 포함됩니다.

  • 새로 추가된 로케일 설치 지원을 위한 고급 선택 다운로드 기능으로 특정 언어만 다운로드할 수 있도록 하여 런처의 다운로드 크기를 줄일 수 있습니다. 이는 게임과 앱에서 이 기능을 활용하는가 여부에 달려있습니다.

  • -log 콘솔 창이 .ini 파일에 값 저장 오류로 인해 화면 밖에 스폰될 수 있던 문제를 고쳤습니다.

  • GearVR 에서의 레벨 전환시 더이상 크래시가 나지 않습니다.

  • GearVR 에서 슬립 모드 후 깬 뒤에도 더이상 렌더링 응답 없음 상태가 되지 않습니다.

  • SteamVR 은 이제 Oculus 런타임 실행중에 초기화 가능합니다.

  • 렌더링에 전체화면 모드의 해상도를 사용하는 창 최대화 모드 관련 문제와, 사용자가 전체화면 해상도를 올리지 못하도록 하는 버그를 해결했습니다.

  • PS4 와 Xbox One에서의 MTBF 지원이 수정되었습니다.

    • PS4 에서는 앱 비활성화 콜백을 처리하고 비활성화 상태에서의 비정상 셧다운을 거부합니다.

    • XB1 에서는 앱 백그라운드 콜백을 처리하고 백그라운드 상태에서의 비정상 셧다운을 거부합니다.

    • PS4 에서의 비정상 셧다운을 AbnormalShutdownPS4 로 보고하는데, 해당 플랫폼에서는 크래시와 비정상 셧다운을 구분할 수 없기 때문입니다.

  • 네이티브 풀스크린 모드에서 Alt+Tab 으로 게임에 돌아간 후의 검정 화면 현상을 수정했습니다.

  • VR PIE 애널리틱스 이벤트가 이제 적합한 이벤트 이름을 갖습니다.

  • HMD 의 늦은 업데이트로 인한 컬링 문제를 수정했습니다.

  • 비동기 미디어 리졸브 처리 코드를 재작성하여 플레이어 소멸시의 경쟁 조건 크래시를 방지했습니다.

  • Shader Compiler Environment 는 이제 TCHAR 스트링 대신 ANSICHAR 를 사용하여 메모리에 저장할 값을 기록합니다.

  • 창이 마우스로 활성화되지 않은 경우에만 창 활성화시의 기본 위젯으로 포커스가 복원되어, 창으로 활성화시킨 경우에는 커서 아래 위젯에 포커스를 설정합니다.

피직스

  • 피직스 컨스트레인트의 선형 한계 스케일 조절을 위한 옵션을 추가했습니다.

  • 콜리전은 켜져 있으나 콜리전 지오메트리는 없는 스태틱 메시 액터에 대한 맵 체크 경고를 추가했습니다.

  • 애님 다이내믹스에 시뮬레이션 스페이스 및 외부 포스가 지원됩니다.

  • 기존 및 앞으로의 클로스 청크에 청크당 인플루언스가 4 개 이상 되지 않는지 확인하는 검증을 추가했습니다. 기존 청크는 오류는 아니지만 로그 경고는 납니다.

  • 접촉 오프셋 값을 프로젝트 피직스 세팅에 노출시킵니다. 이 값이 기존의 환경 변수 값을 덮어씁니다.

  • 피직스 애셋의 프리미티브 데이터는 이제 디테일 패널에서 편집 가능합니다.

  • 캐릭터 피직스 코드를 단순화시켜 임팩트시 푸시하도록 했습니다. 옵션을 통해 여전히 이전 오프셋 코드를 사용할 수 있습니다.

  • PhysicalMaterial 의 Friction, Restitution, Density, RaiseMassToPower 프로퍼티에 클램프를 추가했습니다.

  • 컴포넌트의 모빌리티가 스태틱으로 변경되면, 그 부모에 더이상 시뮬레이션 오브젝트 마킹이 남아있지 않습니다.

  • LOD 변경시 클로스가 부드럽게 작동합니다.

  • 블루프린트의 커스텀 콜리전 변경시 이제 재시작할 필요 없이 배치된 인스턴스가 업데이트됩니다.

  • 래디얼 포스 컴포넌트가 디스트럭터블 컴포넌트에 임펄스를 여러 번 적용하던 것을 고쳤습니다.

  • 히트 알림이 이제 페이스 인덱스별로 머티리얼을 제대로 보고합니다.

  • 컨스트레인트 설정이 컨스트럭션 스크립트에서 정상 작동합니다.

  • 시뮬레이션 피직스 오브젝트가 더이상 레벨이 완전히 로드되기 전 시뮬레이션을 시작하지 않습니다.

  • 비히클 기어 상하 비율이 기존에 잘못 할당되어 있던 것을 고쳤습니다.

  • 이미 결합(weld)된 그룹을 다른 것에 (한 액터를 다른 액터에) 결합할 때도 결합이 정상 작동합니다.

  • 액터 콜리전 활성화 변화가 디스트럭터블 메시 컴포넌트에 영향을 끼치지 않는 것을 고쳤습니다.

  • BP 호출가능 함수 중 스켈레탈 메시 컴포넌트 트랜스폼에 영향을 끼치는 것이 이제 물리 시뮬레이션 중에도 작동합니다.

  • 클로스 솔버 빈도가 더이상 1 아래로 떨어지지 않습니다.

  • 클로스 업데이트가 스켈레탈 메시 컴포넌트 업데이트 모드를 사용하여 렌더 상태가 아닌 업데이트를 결정합니다.tatus.

  • (에디터와 게임에서의) 콜리전 그리기가 숨겨진 스태틱 메시 인스턴스에도 정상 작동합니다.

  • 컴포넌트가 유효하지 않은 (작은 스케일의) 트랜스폼에서 유효한 트랜스폼으로 전환될 때 물리 상태를 생성하지 않던 것을 고쳤습니다. 이제 바디는 가급적 가장 작은 스케일로 초기화됩니다.

  • LOD 모델 정리가 되지 않아 발생하던 디스트럭터블 메시 리임포트 크래시를 고쳤습니다.

  • 페르소나에서 메시에 클로딩 애셋이 둘 이상일 때 클로스 할당을 해제해도 더이상 크래시가 나지 않습니다.

  • 모든 청크가 비활성 상태일 때 디스트럭터블 컴포넌트의 공백 바운드로 유발되던 ensure 를 수정했습니다.

  • Consider All Bodies 가 켜진 메시에 대해 바운드가 틀리던 문제를 고쳤습니다.

  • 클로스의 메모리 누수(렌더 생성시 클로스 청크 당 1.43 KB)와 다른 모든 버텍스 팩토리의 불안전 메모리 관리를 제거했습니다.

  • LOD 본 관련해서, 특정 LOD 에 웨이팅되지 않은 본을 사용하는 클로스 청크 할당시의 필수 사항을 고쳤습니다.

  • 자체 교차 집계가 이제 자체 콜리전 비트맵을 소거시켜, broadphase 크래시가 예방됩니다.

  • 고정 프레임 속도 사용시, 퍼포먼스가 예상보다 빠른 경우 슬립 상태에 들어갑니다.

플랫폼

  • 하나의 UFE 명령으로 다수의 플랫폼에 설치하고 실행시키는 기능이 지원됩니다.

  • iOS 와 Mac에서 IPv6 지원이 활성화되었습니다.

  • tvOS 가 바이너리 릴리즈에 활성화되었습니다. 이 플랫폼은 아직 실험기능 단계이며 iOS 와 비슷합니다. Windows에서는 콘텐츠 전용 프로젝트만 패키징 가능하나, Mac에서는 전체 툴 체인을 사용할 수 있습니다.

  • FMath::RandHelper 가 가끔 Windows 이외의 다수 플랫폼에서 상위 단계의 인티저 값을 반환하던 문제를 고쳤습니다.

Android

  • 바이너리 빌드에서 다양한 Android 아키텍처 옵션을, 설치된 플랫폼에 포함된 경우, 활성화시킬 수 있습니다.

  • 명령줄에서 UBT 에 -Architectures 와 -GPUArchitectures 를 전달하는 기능을 추가, 다른 Android 아키텍처를 UAT 에서 쉽게 빌드/배포시킬 수 있도록 했습니다.

    • 현재 -Arm64 버전이 바이너리 빌드에 추가되었습니다.

  • APL 에 addLibrary 와 removeLibrary 를 추가했습니다 (robertfsegal 님 기여).

  • 패키징 도중 다양한 Ant 상세도 세팅이 지원됩니다.

  • 이제 패키징된 프로젝트에 대해 언인스톨 bat 또는 스크립트 파일이 작성됩니다.

  • Supports Vulkan 옵션이 켜졌는데 로더 또는 드라이버 중 하나가 준비되지 않은 경우, 예비로 ES2 가 쓰이는 Android 벌칸 다이내믹 로더가 사용됩니다.

  • Android용 디플로이시 먼저 Ant 에 -quiet 옵션을 붙여 실행한 후, 로그를 얻는 데 오류가 발생하면 붙이지 않고 다시 실행합니다.

  • NDK r11c 를 지원하도록 업데이트했습니다.

  • Android는 OnlineSubsystemNull 을 켠 서버로 작동 가능합니다.

  • Android 무비 재생이 이제 일부 Android 디바이스에서 전체 표면이 사용되지 않는 경우를 처리합니다.

  • Android 6.0 디바이스에서 실행시 WebBrowser UMG 위젯 관련 크래시를 고쳤습니다.

  • Android 인앱 구매 데이터가 제품 식별자를 포함해 오는 리포트가 가격과 설명에 맞지 않던 것을 고쳤습니다.

  • Android UMG WebBrowser 위젯에 대한 LoadString 함수가 더이상 사용자가 HTML 텍스트를 바로 지정할 수 없도록 합니다.

  • UnrealBuildTool 이 프로젝트의 DefaultEngine.ini 파일 내 Android 툴체인 버전에 대한 오버라이드를 따르지 않던 것을 고쳤습니다.

  • 이제 Google 플레이 사용자가 외부 로그인 ID 를 사용했을 때 사용자의 별명과 플레이어 ID 를 올바르게 구해옵니다.

  • Android용 UBT 에 하드코딩된 Use Unity Build 변수를 제거했습니다.

  • 벌칸 셰이더 포맷에 대한 SupportsVulkan 체크를 수정했습니다 (SDK 가 아닌 glslang 라이브러리 필요).

  • Mac에서의 새로운 설치해제 스크립트 권한을 수정했습니다.

  • NDK 레벨이 19 이상 설정되면 minSdkVersion 를 21 이상으로 강제시켜 미지원 디바이스에서의 설치를 방지합니다.

  • 링커에 DT_SONAME 필드를 설정합니다 (신형 Android 버전에서의 경고 토스트가 멈춥니다).

  • NDK11 또는 VULKAN_SDK 를 사용할 수 없는 경우 이제 써드 파티 벌칸 헤더를 사용합니다.

  • 심볼 제거를 위한 부가 아키텍처 지원이 추가되었습니다.

  • cxa_demangle.Build.cs 와 종속성을 UEBuildAndroid.cs 에 하드코드 링크로 숨기는 대신 Core 에 추가했습니다.

  • ARM64 와 x86_64 툴팁에 요구사항을 추가했습니다.

  • 이제 점만 있고 실제 확장자는 없는 미디어 URL 을 사용할 수 있습니다.

  • 벌칸 전용 Android 코드 빌드를 만들 수 있습니다.

  • 구형 디바이스에서 KitKat 에 Input Device 메서드 호출헤 대한 보호장치를 추가했습니다.

  • 이제 미디어 열기에 성공하면 Media Opened 라는 미디어 이벤트를 방송합니다.

  • 오디오 경고가 적절한 오류 결과 코드를 표시하도록 이동했습니다.

iOS

  • Delta Copy 는 이제 UE4 에 번들이 되어 원격 컴파일에 쓰기 위해 별도로 설치할 필요가 없습니다.

  • 에디터에서의 패키지 수행이 이제 Xcode 호환 아카이브 파일을 생성합니다. 아직 작업중입니다.

  • iOS 디바이스에 실행시 tvOS 디바이스가 제대로 필터링에 걸러지며, 비슷하게 iOS 디바이스도 tvOS 디바이스에 실행시 걸러집니다.

  • 메탈에서 텍스처 리소스의 과도한 해제로 인해 간헐적으로 발생하던 크래시가 해결되었습니다.

  • In-App Purchasing 만 필요한데 IOS Online Subsystem 활성화가 안되던 문제를 고쳤습니다.

  • iOS 9 디바이스에서 시작 도중 IOS 에서 가끔씩 일어나던 크래시를 고쳤습니다.

  • 크기가 작은 IOS 게임 컴파일시 가끔 발생하는 렌더링 및 애니메이션 문제를 고쳤습니다.

  • 아이폰 SE 디바이스 프로파일 지원이 제대로 작동하며, 아이패드 프로 9.7 디바이스 프로파일 지원이 추가되었습니다.

  • A7 디바이스의 메탈에서 멀티플 렌더 타깃을 비활성화시켰습니다. GPU 파티클에 충분한 MRT 를 지원하지 않기 때문입니다.

  • iOS 8 디바이스에서 메탈을 다시 활성화시켰습니다. 애플이 IOS SDK 9.3 버전에서 셰이더 컴파일러 문제를 해결했습니다.

Linux

  • New: Added compiler hints so branches in check() are expected not to be taken.

  • New: Added code for CPU identification to Linux platform abstraction layer.

  • New: Crash folders on Linux now have predictable names based on crash GUID, which is passed in on the commandline.

  • New: We now attempt to set exec permissions before executing files.

  • Bugfix: Fixed crashes in crash handler when handling stack overflow. Adds 128KB of signal stack per thread.

  • Bugfix: Fixed CrashReportClient crashing in unattended mode.

  • Bugfix: hlslcc now strips asserts in Release.

  • Bugfix: Logs are no longer cut on normal quit on Linux.

  • Bugfix: We now switch to "crash malloc" on crashes and eliminate a rare deadlock during handling signals.

  • Linux crash/ensure data will now be saved in Saved instead of Binaries, making it easier to run from read-only media.

  • Case-insensitive search is used in the file open dialog on Linux.

  • To avoid excessive spam, warnings are no longer forwarded to syslog().

  • Linux crash handling is improved by ignoring signals except where explicitly handled, and forcing vfork() when starting crash reporter.

  • Hitches are reduced when generating ensure() callstacks by not parsing debug info. This also reduces memory consumption.

  • Ensure() is now reported via the crash reporter.

  • SIGTRAP is now treated as crash.

Mac

  • New: Added a "-metaldebug" command-line to force enable the Metal validation layer when running outside Xcode.

  • New: Added editor settings for selecting the direction of scroll gestures for 3D and Ortho viewports. This allows Mac users with trackpads or Magic Mouse to use Natural scrolling.

  • New: Crash logs produced while running commandlets from AutomationTool are now printed to the output log.

  • New: Enable full PostProcessSelectionOutling on OpenGL versions lower than 4.2.

  • New: Apple's Driver Monitor stats are exposed into UE4 stat groups. DriverMonitor has the common stats, DriverMonitorAMD, DriverMonitorIntel, and DriverMonitorNvidia have the vendor/GPU specific stats.

    • The Metal and OpenGL RHIs update the driver monitor stats group for the current GPU at the appropriate time.

    • These stats show details of GPU core, memory and bus utilisation that can be helpful when profiling.

  • New: Implement Async Compute support in MetalRHI for AMD GPUs which provide it.

  • New: Implement Metal support for index buffer SRVs.

  • New: Implemented operation threshold submission of Metal command buffers to keep the GPU busier and not just idle waiting for the CPU.

    • Whenever the Console Variable "rhi.Metal.CommandBufferCommitThreshold" is set to a positive value and the current command buffer has >= draw/dispatch operations outstanding then the command-buffer will be committed at the next encoder boundary.

  • New: Initial implementation of parallel execution in Metal RHI to support command-encoding across multiple threads.

  • New: Metal object lifetime tracking has been reimplemented as stats in the stat-group, though the old system is maintained as a debug-only tool that could (and probably should) be extended to track over/under-release bugs.

    • Currently the texture count will be distorted by texture SRVs so this will need improvement, but other stats should be reliable.

  • New: The mechanism to explicitly select the GPU to use on Mac has been unified so that it applies to both Metal and OpenGL.

    • The value is accessible from Mac Platform Misc's Get Explicit Renderer Index function and is specified as a 0-based index into the GPU listed in Get GPU Descriptors. Using a value of -1 will disable explicit selection and let the OS choose the default device.

    • The value can be set via the console variable 'Mac.ExplicitRendererID', by specifying the command-line '-MacExplicitRenderer=X' (where X is the index) or selected in the Mac Graphics Switching plugin's settings when using the Editor.

  • New: Added an explicit, experimental option for using OpenCL to accelerate the convex decomposition tool on Mac rather than assuming that it is desirable (defaults to off).

    • This may prevent a crash on the NVIDIA OpenCL drivers while enabling AMD & Intel users to run it if desired.

  • New: Added implementations of unpackHalf2x16, countbits, firstbitlow & firstbithigh for Metal.

  • New: Added autorelease pools around sensitive functions in Metal RHI such as Metal Viewport's Get Drawable call to ensure that we control all object lifetimes.

  • New: Added shader macro STENCIL_COMPONENT_SWIZZLE to access the stencil component of a texture - not all APIs can swizzle it into .g automatically.

  • Bugfix: Fixed a Metal validation error when trying to set a 0-sized scissor rectangle.

  • Bugfix: Fixed broken Metal uniform buffer allocation - the old Suballocate routine had been interfering with the sized-pools and potentially causing incorrect buffer usage.

  • Bugfix: Metal shaders now compile properly when Xcode isn't installed by falling back to the slower runtime compiled text format.

  • Bugfix: Fixed crashes when enabling ES2 emulation in the Editor when running on Mac Metal by adding an ES2 emulation shader platform.

  • Bugfix: Implementation of BeginRenderingPrePass was changed to clear the depth and stencil buffers only when it is asked to.

  • Bugfix: Metal reporting of GPU memory through the RHI is correctly treated as being in bytes, not MB.

  • Bugfix: Fixed synchronisation errors caused by overflowing the ring-buffer inside each Metal context. Instead, we now reallocate it so that it is sufficiently large.

  • Bugfix: GetPrimaryGPUBrand now returns the primary GPU as expected, which for dual GPU Macs means the discrete GPU connected to a display. Where no GPU is connected to a display, the first GPU will be reported.

  • Bugfix: The intermittent errors with editor selection outline on AMD 9000 GPUs under Metal (M295X & M395X) have been fixed.

  • Bugfix: Editor windows no longer reorder on Mac on app activation when a notification is on screen.

  • Bugfix: Fixed Matinee video recording when using Metal to render on Mac by inserting an intermediate texture before drawing to the screen. This ensures there is always a render-target to draw to and read from.

  • Bugfix: Fixed support for custom icon for non-monolithic games on Mac.

  • Bugfix: Compilation via Distcc on Mac OS X was fixed.

  • Bugfix: A submit-and-wait is enforced in Metal when contexts are being destroyed to prevent kernel panics in drivers which continue to process the now-abandoned command queue and encounter invalid resources.

  • Bugfix: Only spawn one ShaderCompilerWorker for each physical core on Mac as they consume so much memory and can cause OS X to suspend all running processes to display the ''Out of Application Memory" dialog, which requires user interaction.

  • Bugfix: Removed erroneous declaration of SM4_PROFILE and SM5_PROFILE when using METAL_SM4_PROFILE/METAL_MRT_PROFILE /METAL_SM5_PROFILE respectively and fixed up the few locations that care about these defines explicitly.

  • Bugfix: Fixed a memory leak in Metal by caching a temporary texture created in order to render the Material Editor properly.

  • Bugfix: Identifying the selected GPU in Mac OpenGL no longer crashes.

  • Bugfix: Added a workaround for a bug in OS X 10.11.5 that can cause a hang when an application switches the active GPU on a dual-GPU MacBook Pro.

  • We now use managed memory on Mac Metal for buffers.

  • We capture the system.log contents from the moment we boot to the point we crash to report GPU restarts and other system errors not written into our own logs.

  • Changes have been made to the shader-cache's default GameVersion that ensure only caches valid for the current build will be used. This is intended to keep load time growth down to what is strictly required.

  • Construction of command encoders in MetalRHI are deferred on AMD GPUs to eliminate empty encoders that don't perform a clear operation. This improves performance slightly.

  • Mac compile times in Development & higher have been improved at the expense of optimisations in Slate/Editor code wrapped with PRAGMA_DISABLE_OPTIMIZATION_ACTUAL or PRAGMA_ENABLE_OPTIMIZATION_ACTUAL. These pragmas are defined for Apple LLVM 7.3.0 and higher.

  • Metal is disabled on Mac OS X versions prior to 10.11.4 because the drivers are too buggy. Many issues that users would encounter have been fixed in 10.11.4.

  • Point-light shadowing on Intel's Metal driver as of 10.11.4 is enabled.

  • We no longer set shader resources from current uniform buffers in OpenGL when performing a shader predraw - the resources are tracked and set by the shader cache explicitly, so this may just access stale data.

  • Enabled Metal resource lifetime delay on all platforms, not just iOS, to try to address intermittent invalid resource errors.

  • Implemented the same stencil SRV fallback on OpenGL as for Metal by executing a blit at resource bind time so OpenGL versions at or below 4.2 can sample depth and stencil at the same time.

  • Implemented GetTextureBaseRHI for Metal to avoid unnecessary virtual function call chain to resolve the FMetalSurface* from an RHI texture.

  • Improved the shader cache code documentation.

  • In Metal, scissor rect is set correctly through the state cache so that it remains in-sync when rendering and things don't clip incorrectly.

  • Wants Selection Outline defaults to true so that editor selection outlines work reliably.

  • Fixed a typo in Metal Features enum.

  • RHI Block Until GPU Idle has been implemented on Metal.

  • On Mac, we probe IORegistry to provide basic GPU details which is used to implement Get GPU Driver Info and correctly specify the GPU capabilities in Metal RHI.

  • For performance reasons, we only verify the vertex attribute layout for Metal in debug builds or when using development with the Metal debug layer turned on.

  • We pull the dmucs coordinatior name/IP from the settings file if it is present rather than the user having to set it - this means you can run distributed compiles using a DistCode coordinator on a remote machine.

  • Reduced Metal's peak memory usage when streaming texture data during level load.

    • When uploading data to Shared memory, Metal textures dispose of the source buffer immediately because it won't be required after the call to Replace Region.

    • Added an optional Console Variable "rhi.Metal.MaxOutstandingAsyncTexUploads". If the current outstanding count of asynchronous texture uploads is greater than the specified Console Variable, wait for all operations to complete before purging the used buffers. By default, the Console Variable is set to 0, which disables the tracking and the game will use all available memory.

  • Removed the -fno-fast-math workaround for Atmosphere rendering on Mac Metal and instead modified the shader code to avoid the problem directly.

  • Removed the hlslcc major version from the Metal and OpenGL shader formats to ensure that there are enough bits to represent the different version components.

    • There's no expectation that the major version of hlslcc will change and it will soon be removed entirely.

  • Removed the presentable flag if present when creating a texture for predraw - for some RHIs like Metal this flag is invalid unless there is an attached viewport.

  • Removed the uniform buffer resource caching from Metal.

  • Removed the uniform buffer resource caching from OpenGLDrv & implemented GetTextureBaseRHI to avoid unnecessary virtual function.

  • Silenced stderr reporting from Apple's 'defaults' tool when accessing the settings for Mac distributed building.

  • Simplified Metal Context by having only one Submit Commands Hint implementation.

  • Slightly improved Mac Metal performance on AMD by only creating texture-views when absolutely necessary.

  • Switch uniform buffers to managed memory on Mac as this is more appropriate for AMD & NVIDIA GPUs.

  • Used a dispatch_semaphore, not an FEvent, for Metal free-list synchronisation as the dispatch_worker threads can't be properly set up for FStats.

  • We now warn the user when trying to run on OpenGL 3.2 GPUs that they are running unsupported and there may be rendering errors and performance problems.

  • Added a workaround for a Metal shader compiler problem on NVIDIA GPUs - sample_compare doesn't like taking level(0) as its LOD-option argument and may not currently support any LOD-option.

PlayStation 4

  • New: Added to/from json conversion functionality to Online Message Payload - message payloads are now sent/received as json instead of being serialized as byte arrays.

  • New: Replaced Tsc with Process Time Counter.

  • New: Added a timer around PS4 initialization and print the result out to the log.

  • New: Added ability to write the log to /temp0 in shipping builds.

  • New: Added BC6H and BC7 support.

  • New: Added mouse support.

  • New: Added Movie Stream improvements. Now uses GPU YUV conversion and Software2 decoder.

  • New: Added pragma optimization enable/disable macros.

  • New: Added RHI Bind Debug Label Name support for naming UAVs, Shaders and Render Targets to display in Razor GPU captures.

  • New: When querying for online play privilege, we now validate the signed-in user and check age restriction.

  • New: DualShock4 motion events are now disabled by default and controlled by the .ini option bDS4MotionEvents in the PS4Application section.

  • New: Implemented an experimental GPU memory defragger for streaming textures.

  • New: We load title-specific json configuration from \titledata\<titleid>\title.json.

  • New: PS4 "out of GPU memory" logging now has more detailed information.

  • New: PS4 will now fall back to allocating from flexible memory when the main memory area runs out. Most titles should see 100-200MB of extra memory available.

  • Bugfix: NumInstances is now reset after DrawIndirect calls.

  • Bugfix: Fixed Submit Done not getting called due to Save Data dialog.

  • Bugfix: Fixed an erroneous warning log indicating that initializing the session interface failed if rooms were disabled.

  • Bugfix: PS4 virtual keyboard no longer crashes if it is open when the text box that summoned it is destroyed.

  • Bugfix: Fixed a crash that could occur on PS4 when rendering very large scenes.

  • Bugfix: Cross thread file handle leaks have been resolved.

  • Bugfix: Fixed loss of keyboard input after display of IME dialog.

  • Bugfix: Fixed Media player seek and duration.

  • Bugfix: Fixed memory alignment for back buffers.

  • Bugfix: PS4 now uses the correct country codes for Spanish and Spanish - Latin American.

  • Bugfix: Fixed race condition and crash updating slate vertex buffers on the render thread while they are in use on the RHI thread.

  • Bugfix: Fixed session records not being written to the KeyValueStore.ini on packaged builds, now stored in /download0.

  • Bugfix: Fixed WebAPI handling of non-ascii data.

  • Bugfix: Fixed Grayscale SRGB support.

  • Bugfix: Added missing Get No Affinity Mask.

  • Bugfix: Disabled a layer of IO caching on PS4 that would cause large memory spikes during loading for little benefit.

  • Bugfix: GPU bubbles caused by the CPU falling behind on submissions during a frame are now subtracted from 'stat unit' time as they are in development builds.

  • Bugfix: OnlineExternalUI ShowWebUrl handles long URLs correclty now.

  • Bugfix: Processing many reflection captures during level loading will no longer cause large GPU memory spikes.

  • Bugfix: Fixed Render Target Output Format using the wrong output index for velocity rendering when using r.BasePassOutputsVelocity i set to True.

  • Bugfix: Unlocking linear textures on PS4 no longer crashes.

  • Bugfix: Fixed occasional WebRTC crash on SIGPIPE.

  • Disabled platform file cache wrapper on PS4 by default.

  • The presence of an external keyboard will now suppress the requirement for the virtual keyboard.

Xbox One

  • New: Created better default thread affinities. Added GetAudioThreadMask() to the list of used Xb1 affinities. Fixed up places where the audio thread affinity was being ignored.

  • New: Hardware decompression is now supported and used by default on Xbox One.

  • New: The March 2016 XDK is now the default supported XDK.

  • Added MemoryBarrier function to prevent compiler from reordering writes.

  • Changed GPUMalloc memory mode to write combined, as this was causing all kinds of rendering issues.

  • Enabled parallel occlusion queries.

  • Bugfix: Fixed a movie streamer memory leak and fixed playing multiple movies in a row.

  • Bugfix: Fixed possible texture corruption in rare circumstances.

  • Bugfix: RHIUpdateTexture2D/3D is now able to write to the destination texture.

  • Bugfix: UI no longer flickers when there is a lot of rendering happening.

  • Bugfix: Fixed an access error issue if a duplicate CulturesToStage entry existed during resource generation.

  • Bugfix: Fixed an issue that prevented tools from using non-default Xbox One targets.

  • Bugfix: Fixed an issue where an incorrect setting on Xbox One caused the wrong number of task threads to be created. This will improve performance in some cases.

  • Bugfix: Fixed an issue that would prevent in game console input from being processed before a control key (e.g. Backspace) was pressed on Xbox One.

  • Bugfix: Packaging settings are now correctly being pulled from game INI files instead of engine INI files.

  • Bugfix: Creating textures at non-power of 2 sizes with initial data no longer causes a crash.

  • Bugfix: Fixed missing GPU particles on XB1.

  • Bugfix: Motion blur is now properly applied to moving meshes.

  • Bugfix: Critical Sections now behave the same as on Windows.

  • Bugfix: Minor fixes to DFAO and DF Shadowing.

  • Rebalanced memory bus priority so that the CPU gets a bigger share.

  • Removed per-frame caching of uniform buffer resources. This is a small performance improvement.

  • Xbox One now uses lock-free lists for passing messages between threads.

  • Made occlusion query system more robust.

VR

  • New: Oculus Rift: Added support for letterboxed and cropped/filled mirroring modes.

    • "hmd mirror mode 3" (eMirrorWindow_SingleEyeLetterboxed) enables letterboxed mirroring.

    • "hmd mirror mode 4" (eMirrorWindow_SingleEyeCroppedToFill) enables cropped mirroring. (fills whole screen)

    • Only when cropping is required, we now clear the backbuffer to black.

  • New: VR Stereo Layers improvements.

    • Initial Oculus Rift support.

HTML5

  • New: Enabled emscripten SIMD for HTML5.

  • New: HTML5 SDK project settings - show user defined HTML5 browsers.

  • New: PhysX updated - code changes for HTML5 builds.

  • New: PhysX updated - generated Makefiles for HTML5.

  • New: PhysX updated - recompiled libraries for HTML5.

  • New: We now automatically reload the HTML5 page if a script download has failed. The error message will still be seen, but only briefly.

  • Bugfix: Corrected VS 2015 websocket lib to look at the right offset.

  • Bugfix: We fire off a "resize" event to force the canvas dimensions to be updated with browser's actual dimensions instead of starting off with hard coded 800x600 window size.

  • Bugfix: Emscripten config file timestamp is no longer unnecessarily modified. This prevents system libs from being recompiled all the time.

  • Bugfix: Load/save with "negative char size value" fixed - C++ functions used unsigned int 8 while javascript was running with signed types.

  • Updated HTML5 ThirdParty libraries built with emscripten 1.35.0: freetype2.6, ICU, libogg, libPNG, libvorbis, PhysX, zlib.

  • Chrome has been re-enabled to show up in the device manager.

  • We now use HOME (OSX) and USERPROFILE (Windows) on the appropriate target platforms during emscripten builds.

Windows

  • New: PC builds now log engine initialization time with the load time tracker.

  • Bugfix: Fixed a bug in Windows Application that was causing the Get Display Metrics function to incorrectly return the max resolution of the last enumerated monitor for all monitors.

  • Bugfix: Rejoining a Steam lobby quickly after leaving no longer causes the player to get booted from the session.

  • Bugfix: Applying windowed mode on Windows now works properly, instead of restoring the previous mode.

  • Click location accuracy at low framerates on PC is now greatly improved.

  • We now use the physical platform file when writing out steam_appid.txt, so that it still gets written to the correct location when running with cook on the fly.

All Mobile

  • Bugfix: Fixed In-App Purchase Callbacks so they still fire whether or not the game is paused.

  • Disabled heartbeat thread and checking on mobile platforms.

Programming

  • New: Added support for pre- and post-build steps specified inside .uproject and .uplugin files.

    • Steps are specified as a list of shell commands per target platform, and are written to a shell script for execution by UBT.

    • The following target properties are expanded automatically: $(EngineDir), $(ProjectDir), $(TargetName), $(TargetPlatform), $(TargetConfiguration), $(TargetType), $(ProjectFile), $(PluginDir).

    • Example: "PreBuildSteps": { "Win64": [ "echo Hello World", "echo The current project being compiled is $(ProjectFile)" ] }

  • New: Removed duplicate binary files and reduced the size of PDBs for CEF3 to reduce the total download size.

  • New: Support for the Visual Studio 2012 and 2013 toolchains has been deprecated.

    • The only supported toolchain for UE4 is now Visual Studio 2015.

      • Visual Studio 2015 Community Edition can be downloaded from: http://go.microsoft.com/fwlink/?LinkId=532606.

    • It is still possible to generate Visual Studio 2013 projects.

      • Visual Studio 2013 projects will be generated if a platform SDK that is not compatible with the Visual Studio 2015 IDE is detected or if -2013 is specified on the GenerateProjectFiles.bat command line.

      • Visual Studio 2013 projects only allow the use of the Visual Studio 2013 IDE. Projects will always build using the Visual Studio 2015 toolchain, so Visual Studio 2015 will still need to be installed on any PC building UE4.

  • New: The project Target.cs file can now specify a filename using for a set of signing keys which will automatically be compiled into the executable, restricting the use of pak files to only those signed with the same key

    • Have your project's target.cs file specify a workspace relative filename in the "PakSigningKeysFile" of your game/client Target Rules class

  • New: UBT writes to the log to indicate whether pak signing keys were found and included in the executable

  • New: Visual Studio visualizers now support non-ASCII text for FNames (Credit to Yoshifumi Ohtsu of ORCA).

  • Bugfix: Rebuild now works properly when binary version is installed in Program Files (x86).

  • Improved cooker performance by several minutes during long cooks by fixing an early out pathway to work properly when a cooked package was not ready to save and was still waiting on asynchronous tasks to complete.

  • Minor DDC performance improvement when using Get Async Results (move the result instead of copying it). Saves about 15sec during long cooks.

Rendering

  • New: 'r.VisualizeOccludedPrimitives 1' shows statically occluded primitives in dark red.

  • New: A new console variable 'r.ProfileGPU.Sort' was added to control the sorting mode of the 'profileGPU' output.

  • New: A slew of new material functions are available in the material editor:

    • Texture Bombing: Texture bombing takes a tiling texture input and blends multiple samples with offset coordinates with some flipping and rotation in order to reduce tiling artifacts. It blends to neighbors so it can be used with any textures, not just textures with tiles or borders. This implementation works using heightlerp so that the transition between offset samples avoids soft blending artifacts which can muddy the colors.

    • Chroma Key Alpha: This is a classic green screen node. It gives some basic flexibility for alpha thresholds as well as a despill mask that you can use to either desaturate or blend additional edge coloration to help remove spill from the original chroma color.

    • Contrast Preserve Color: This function lets you increase the contrast of a color texture without altering the relative colors. The behavior of this node is similar to what would happen in photoshop if you first duplicated a layer and set it to "Color" mode and then increased the contrast of the original layer.

    • Luminosity and Color: Similar to above but simply combines a single channel as luminosity with a color input. Also behaves like a combination of luminosity/color layers in photoshop.

    • Texture Bombing POM: This one is to be used with caution. Definitely way too expensive for any modern consoles, but may be of some use to archvis or cinematic teams. It performs texture bombing with Parallax Occlusion Mapping, which means a unique POM function is performed for each sample, which means 4 times for each use. So this means a POM-Bomb material with only 2 textures will perform hundreds of texture lookups considering the tracing.

    • Bricks and Tile UVs: This is mostly meant to help bake procedural textures from inside the editor. As a result, some things in this function assume you want the macro offsets to repeat ever 0-1 overall UV. This is important since with the "Stagger" offset, tiles need to match their other half on the other side. So the macro offset pattern is itself a tiling pattern.

    • Landscape Manual UVW: Returns a 0-1 gradient on each axis encompassing the bounds of the whole landscape based on the input min and max positions. Positions must be manually defined.

    • 1D to 2D Index: Converts a position from 1d to 2d based on given grid size.

  • New: Added a mesh texture coord size accuracy view mode to tweak texture streaming.

  • New: Added a primitive distance accuracy view mode to tweak texture streaming.

  • New: Added cvar "r.CustomDepth.Order" to get CustomStencil before DBuffer to allow masking in DBuffer decals.

  • New: Added cvar "r.CustomDepth.Order" to get CustomStencil before DBuffer to fix lighting issues on characters.

  • New: Added Pause Texture Streaming function to the Texture Streaming Manager interface to allow external systems to pause and unpause texture streaming.

  • New: Added Morph Target support for experimental Skin Cache feature.

    • Added Recompute Skin Tangent feature for Skin Cache.

  • New: Added a "Thickness" parameter to debug drawing functions.

  • New: Added "Warmup Time" and "CPU Collision" to content browser information for Particle Systems.

  • New: Added "Was Recently Rendered" function to Actor, with optional tolerance in seconds.

  • New: Changed HLOD textures to ignore r.streaming.mipmaplodbias. (Current detection is string based when the Streaming Texture is created, and should be replaced by a HLOD texture group in the future.)

  • New: Changed Resolution Quality scalability settings from int32 to float, to allow hitting exact 3D render resolutions that aren't an integer percentage like 900p from 1080p.

  • New: Depth Of Field Quality setting change to aid non-realtime workflows by enabling a faster (but still not realtime) very high quality setting.

    • r.DepthOfFieldQuality = 4 corresponds to the prior behavior of associated with = 3. Extremely high quality, intended for non realtime cutscenes, CircleDOF only. (Very slow)

    • r.DepthOfFieldQuality = 3 now corresponds to a new setting somewhere between the old 2 and 3. Very high quality, intended for non realtime cutscenes, CircleDOF only. (Slow)

  • New: Exposed "up direction" on Cable Component, to better support vertical cables.

  • New: The "listtextures" console command now prints a stat summary after the list per Texture LOD Group and per texture format.

  • Bugfix: Corrected a crashing bug in rendering shadows for objects with malformed transforms. The editor should now handle this more gracefully and log information about the offending object with an ensure message.

  • Bugfix: Exposed Material Sprite Element struct to Blueprints, and added a Set Elements function to Material Billboard Component.

  • Bugfix: Fixed a bug that caused separate translucency primitives to not be rendered into reflection captures.

  • Bugfix: Fixed a bug where file handles for streamed texture mips wouldn't be released under certain circumstances.

  • Bugfix: Rendering resources from a previous map are now immediately released during switching to a new map.

  • Bugfix: Texture LOD Bias is no longer applied twice in cooked builds.

  • Bugfix: Fixed a crash when updating material instances that were garbage collected.

  • Bugfix: Removed a potential crash when changing FOV angle in Matinee.

  • Bugfix: Fixed a potential memory leak when clearing MaterialShaderMaps.

  • Bugfix: Fixed a problem that could result in separate translucency primitives only being rendered in one eye in stereo mode.

  • Bugfix: Non-uniformly scaling the bounding decal region no longer affects decal normals.

  • Bugfix: Fixed a rare Slate threading crash when alt-tabbing from fullscreen applications.

  • Bugfix: Create Section function on Procedural Mesh Component no longer clears other sections inappropriately.

  • Bugfix: Fixed FBlendableManager when using aligned data.

  • Bugfix: Separate translucency shows up correctly in Shader Complexity view.

  • Bugfix: Materials using scene texture or global distance fields are now displaying correctly after a shader compile, including after the component is moved.

  • Bugfix: Fixed pre-pass stencil dither being cleared in split-screen.

  • Bugfix: Stretched decals work correctly.

  • Bugfix: Texture coordinates are now calculated correctly when building tessellated cubes with the brush tool.

  • Bugfix: Fixed varying tessellation multiplier, which caused cracks in geometry.

  • Bugfix: Fixed 'Vertex Color' input of ProceduralMeshComponent using the wrong Color type.

  • Bugfix: Fixed wrong stencil value being set on PS4.

  • Bugfix: The 'profileGPU' command now properly reports triangle and vertex counts at different levels of the marker hierarchy.

  • Bugfix: Attempting to read data from a null texture no longer causes a crash.

  • Bugfix: Fixed an occasional crash when accessing LPVs.

  • Bugfix: Fixed an issue with CastShadowAsMasked when using Embree.

  • Bugfix: Disabling the LightPropagationVolumeBlendable plugin no longer causes the engine to crash during startup.

  • Bugfix: Removed memory allocation for RHI resources when running with NullRHI.

  • Removed autocompletion for ToggleRHIThread and ShowMaterialDrawEvents. These features are now accessed by console variables r.rhithread.enable and r.showmaterialdrawevents, respectively.

  • Removed an unused cvar r.HLODEnabled. Everything related to HLOD cvars is done through r.HLOD.

  • MaterialParameterCollection will correctly rename entries when duplicate named items are added.

  • Optimized HLOD transition and visibility logic.

  • Render view items and LOD level can be frozen in place now.

  • UpdateShadowShapes now runs on the render thread rather than the game thread.

  • The variable "r.ViewDistanceScale" can now go above 1.0.

  • The screen percentage cvar can now be changed dynamically when using PSVR.

FX

  • New: BoneSocket module in cascade can now be used to spawn from all bones on a skeleton if no SourceLocations are provided. Allows sharing of a single effect across many skeletons.

  • New: Decal Components now have their lifetimes exposed such that they can be set to automatically be destroyed once the lifetime expires. The decal's lifetime as a t value (0 to 1) is also exposed as a material graph node to allow controlling the look of the decal as it's lifetime expires.

  • New: Mesh particles now support motion blur. Mesh particles motion blur can be configured to enable/disable based on detail/quality level settings.

  • New: Particle cutout optimization works on SubUVMovie module as well.

  • New: Significance feature for particle systems.

    • Game code can drive the required significance for each effect.

    • This is tested against an artist defined significance value for each emitter. Emitters can be progressively disabled based on game-specific calculation of the emitter's significance to the scene.

    • For example, Paragon uses distance, VFX performance, and relevance to the local player to drive the required significance for its VFX.

  • Bugfix: Disabled the Seconds Before Inactive optimization for non-looping effects because it can cause them to leak.

  • Bugfix: Global vector fields fixed to work with fixed-bounds particle systems.

  • Bugfix: Fixed a problem that could lead to emitter detail mode not being set properly when a particle system is first initialized.

  • Bugfix: Cascade preview now respects the detail mode setting in the Cascade UI.

  • Bugfix: Particle systems with emitters using both separate and non separate translucent materials now render correctly.

  • Bugfix: Fixed issue where Ribbon particles would render an erroneous sheet to the emitter origin.

  • Bugfix: Fixed rare crash bug accessing a console variable in particle code.

Lighting

  • New: Added a CaptureOffset variable to reflection captures, which lets artists decide how the cubemap resolution is allocated, but introduces some warping.

  • New: Added r.CapsuleMinSkyAngle with a default of 15, keeps capsule indirect shadows from becoming so sharp that capsules are apparent in the stationary skylight case.

  • New: Added several cvars to expose mesh distance field limits, which allows higher quality.

    • r.DistanceFields.MaxPerMeshResolution, r.DistanceFields.DefaultVoxelDensity, r.DistanceFields.AtlasSizeXY, r.DistanceFields.AtlasSizeZ.

  • New: Added the ability to apply DFAO to static indirect lighting, controlled by r.AOApplyToStaticIndirect.

    • Lightmaps, stationary skylight and reflection captures are all affected.

  • New: Heightfields are now represented in the global distance field, which is useful for fading out water normals near shores.

    • Global distance field max distance can now be set from WorldSettings, although it will be overridden if there is a Movable Skylight.

  • New: Capsule shadows are now supported in stereo rendering / VR.

  • New: Improved sphere area light diffuse quality.

  • New: Indirect lighting probes now use 3 band spherical harmonics, as opposed to 2 band previously.

  • New: Lightmass now respects owner bHidden, and bCastHiddenShadow.

  • New: Particle position is used for per-vertex lighting with particle cutouts (instead of vertex position) to give a stable result.

  • Bugfix: Fixed a bug where dynamic lighting would be updated with a one frame latency.

  • Bugfix: Fixed clear coat with movable skylight.

  • Bugfix: Fresnel is correct on SSS skin.

  • Bugfix: Fixed a crash with Ray Traced Distance Field shadows when r.DistanceFieldAO was disabled.

  • Bugfix: Movable skylight now matches stationary for subsurface shading models.

Materials

  • New: Added the option to the ScreenPosition node that will all the node to output viewport UVs.

  • New: In response to user requests, deferred decals now support a negative in the transform when defining the decal bounds.

    • In the past, the transform for a deferred decal had to have all positive scale values for the decal to be displayed. So if you had inadvertently hidden any decals in your content by using a negative scale they will now appear.

  • New: An early (and unfinished) version of Pivot Painter 2 is included in this build. The final and fully functional version of the script and its material functions will be in the next build.

  • Bugfix: AOMaterialMask restored to working order (was broken in 4.11).

  • Bugfix: Custom material nodes no longer cause compile errors with tessellation outputs.

  • Bugfix: Indirect lighting on skin renders at an appropriate brightness.

  • Bugfix: Shiny cloth looks correct under indirect lighting.

  • Bugfix: Subsurface scattering no longer reacts differently to indirect lighting.

  • Bugfix: Fixed a threading issue with Material Instance base property overrides that could cause incorrect rendering.

  • Bugfix: Opacity mask materials no longer produce incorrect shadows.

  • Bugfix: Fixed a bug within the "Vertex Animation Tool" MAXScript that broke compatibility with 3DS Max 2016. The resulting output images are now forced into linear color space.

  • Improved detection of unused material nodes and false positives enabling features.

Post-processing

  • New: To simplify workflows, decals will now be visible in lit orthographic views.

  • Corrected a problem with the post-processing fringe effect. The problem was most pronounced for large fringe values and could lead to unexpected fringe results when the window was resized.

  • Bugfix: Fixed a case where destructible meshes would use the wrong motion blur data.

  • Bugfix: Fixed stereo bloom rendering.

  • Bugfix: Post-process materials are now blended smoothly.

Optimizations

  • New: Added the option to discard override vertex color data on static meshes. Projects which don't use this data at runtime can save memory by discarding it. "r.KeepOverrideVertexColorsOnCPU".

  • New: Adding "-forced" to the "ListTextures" command now only shows textures with forced mip residency.

  • New: Finalized support for SSAO running on AsyncCompute when a full EarlyZPass is available.

  • New: Nearest-Depth Neighbor upsampling for half res separate translucency.

    • Enabled by default when r.SeparateTranslucencyScreenPercentage is 50.

    • Produces full resolution silhouettes of opaque objects in front of half res translucency.

  • New: Reduced texture streaming usage for meshes hidden by hierarchical LOD meshes.

  • New: Texture streamer can now compute bounds per mesh section.

  • New: Textures streamed for dynamic primitives are now processed on the async streaming task instead of on the game thread.

  • Minor optimization to material handing.

  • Minor tweaks to default scalability settings to provide a slightly better experience for low-end machines.

  • Removed unnecessary upfront allocation of 4MB in Niagara.

Mobile Rendering

  • New: Added mobile rendering support for planar reflections.

    • Requires 'Planar Reflections' material setting to be checked before use.

  • New: Materials can sample textures from the vertex shader with the mobile renderer, provided an absolute mip level is specified

  • New: Mobile High Quality Gaussian DoF.

    • To use enable 'High Quality Gaussian DoF on Mobile' in post-processing settings.

    • This feature is used for feature level ES3.1, if it used with ES2 devices then standard mobile DoF is used as a fallback.

  • New: New console varirables "r.OpenGL.StripExtensions" and "r.OpenGL.AddExtensions" add the ability to add or strip specific OpenGL ES extensions from the driver-reported extensions string.

    • This can be used to work around issues in specific devices.

    • For example to force specific device to use 32bpp targets for HDR rendering in DeviceProfiles.ini add: r.OpenGL.StripExtensions=GL_OES_texture_half_float,GL_OES_texture_float.

  • New: GPU particle support for iOS Metal (A8+ only) and Android devices with ES3.1 support. Collision for GPU particles is not supported on mobile devices.

  • New: Stationary lights can now combine CSM shadows with static shadows.

    • When a stationary light's dynamic shadow distance is > 0 and inset shadows are disabled, movable primitives will to render to CSM which can then be combined with pre-calculated static shadows.

    • For performance reasons, you must mark primitives which will receive both CSM and static shadows with 'Receive Combined Static and CSM Shadows from Stationary Lights' checked.

    • However, you can set r.AllReceiveDynamicCSM=1 to enable both CSM and static shadows for all primitives.

    • Using stationary lights with CSM requires an additional mobile texture sampler. You can reclaim this sampler and disable the feature with the project rendering setting: "Enable Combined Static and CSM Shadowing".

  • Bugfix: Resolved an issue where Canvas Text Items did not correctly display some Unicode characters when running on an Android devices.

  • Bugfix: Fixed an issue where Instanced Static Meshes were failing to render all instances when running in ES2.

  • Bugfix: Fixed possible crash on iOS in which 2D render target components could be initialized before a valid GSystemResolution was available.

  • Bugfix: "Hidden surface removal" is now properly detected on PowerVR Android devices.

  • Bugfix: Material tiles now render properly on Canvas in projects with mobile HDR off.

  • Bugfix: HDR rendering and bloom has been fixed on Galaxy S7 devices.

  • Bugfix: Precomputed lighting samples are now correctly shifted when the world origin changes.

  • Bugfix: Fix for precision issues causing incorrect modulated shadow positions on low end Android hardware.

  • Bugfix: Removed halos surrounding modulated shadows when RGBE encoding is active.

  • Bugfix: Resolved possible Z fighting issues with modulated shadows on iOS devices.

  • Bugfix: Mobile HDR path now works on Gear VR.

  • FeatureLevel es3.1's texture gamma with forward shading renderer now matches ES2's behavior.

UI

  • New: Added support for debugging safe zones (visualization on any platform and simulation on platforms that don't natively provide safe zone information).

    • r.DebugSafeZone.Mode controls the debug visualization overlay (0..2, default 0).

      • 0: Do not display the safe zone overlay.

      • 1: Display the overlay for the title safe zone.

      • 2: Display the overlay for the action safe zone.

    • r.DebugSafeZone.OverlayAlpha controls how opaque the debug visualization overlay is (0..1, default 0.3).

    • On platforms that don't natively support safe zones, you can simulate a safe zone for quick/easy testing in the editor:

      • r.DebugSafeZone.TitleRatio controls the title safe zone margins returned in FDisplayMetrics.

      • r.DebugActionZone.ActionRatio controls the action safe zone margins returned in FDisplayMetrics.

      • These both range from 0..1, and default to 1 indicating 100% of the display is safe. A typical test value would be 0.9

    • Important notes:

      • For now, you need to be running in windowed fullscreen or fullscreen for the ratio to be correct.

      • On PS4, you only need to enable debugging (r.DebugSafeZone.Mode 1), as the safe zone values are driven by the system setting you can pick in the PS4 OS menus.

  • Bugfix: Corrected a regression in noise-related nodes Slate UI materials.

  • Bugfix: Fixed a crash that could occur when editing an asset with an FText property.

  • Bugfix: Fixed a regression with UI material nodes that required world position.

  • Sub-fonts in a composite font are now only used when they contain the character to be rendered.

Slate

  • New: Added slider bar thickness as a new style property in FSliderStyle.

  • New: Added "Use Application Menu Stack" argument to SMenuAnchor, enabling programmers to create menu anchors that don't open one stack at a time.

  • New: The MoviePlayer now has an OnPrepareLoadingScreen callback that modules can hook instead of relying on the PreLoadMap, which, depending on when you hook it, may be before or after the movie player. To alleviate that ordering problem - if the movie player goes to play a loading screen and one has not yet been configured this callback will be triggered so that hopefully one is supplied.

  • Bugfix: Removed a crash in the menu system. Opening a new menu would lead to a window activation change which would result in the old root menu being dismissed.

  • Bugfix: Fixed an infinite loop when using Ctrl+Up/Down in a multi-line editable text.

  • Alt-tabbing out of a Standalone App or packaged version of a game will now trigger LostFocus.

  • Changed a massive amount of things attempting to improve the Slate and VR intermingling. Popup layers should now function on widget components, lots of changes to make focus work better.

  • Changing the way slate handles mouse enter/leave when the mouse is captured. Widgets in the capture path are now the only ones that get mouse enter/leave messages. Widgets in the capture path now actually get mouse enter messages after leave messages, previously they were only getting leave, along with all widgets you hovered over and later left, even if they were not part of the captor path - those same widgets did not receive mouse enter.

UMG

  • New: Add support for animating material parameters which are used on brushes.

  • Bugfix: Editing the navigation of a root UMG widget no longer crashes.

  • Bugfix: Fixed aspect ratios now correctly size the right side of the screen, so that right-anchored content will fit properly inside the black frame borders.

  • Bugfix: The user can no longer name an animation with a name the conflicts with a widget name. This fixes a runtime crash.

  • Bugfix: Fixed a crash when undoing adding a track to an animation.

  • Deprecated UWidget::GetEditorIcon and converted existing icon brushes to conform with FClassIconFinder expectations.

Programming Release Notes

AI

  • New: Added a function to AISenseConfig allowing native-code MaxAge configuration.

  • Fixed gameplay tasks stacking and pausing, added support for stacking move tasks.

  • Template AI counters (FAISenseID, FPerceptionListenerID, FAIResCounter) now work consistently across multiple compilation units.

Behavior Tree
  • New: Added a handy function to BlackboardComponent, IsKeyOfType, that allows one to check if given key is of specified type.

Debugging Tools
  • New: Added a way to define class-whitelist for Visual Log so that classes outside of specified list won't get recorded.

    • It does respect hierarchies, so if object A of not listed class is rerouted to an object B of whitelisted class then vlogs from that A will get recorded as well.

  • New: Added new version of Gameplay debugger tool: allows easier creation of project specific categories, without need for implementing a separate module. Tool is currently in early access preview state and disabled by default.

  • New: Added an extra parameter to ARecastNavMesh::FindDistanceToWall that allows user to retrieve found location on a closest wall

  • New: Added project specific flags to navigation links.

  • New: Navigation Query Filters can now be instantiated per querier object. This allows passing additional variables to custom scoring and filtering functions for pathfinding.

  • Fixed resetting navigation path data between repaths.

  • Fixed value of TraversingLink parameter in crowd agent's velocity update function.

Animation

  • New: Changed compressed animation data to have additives baked in and removed code in cook that did the same thing. Moved compressed data to the DDC.

Automation

  • New: Moved code to write config file entries into InstalledPlatformInfo so that it can be reused by anyone wanting to make installed builds.

  • Added AdditionalBundleResources to the list of external files used when packaging.

    • Ensures that these files are included in a packaged build.

  • Tweaked automation test framework by request from UDN post.

Blueprints

  • New: Added "BlueprintPure=false" metadata to allow const functions to be exposed to Blueprints as non-pure.

Core

  • New: Added TScopedDurationThreadsafeTimer<> allowing for threadsafe accumulation of cycles to either a 32 or 64 bit cycle accumulator.

  • New: Added a leak detection malloc proxy that can help track down memory leaks. Must define MALLOC_LEAKDETECTION

  • New: Added a ToHashSet extension method to IEnumerable.

  • New: Added AlignDown function for rounding an integer or pointer down to the next alignment.

  • New: Added an additional scale factor of 75% in the list to generate in GenerateConvenientWindowedResolutions.

  • New: Added basic custom deleter support to TUniquePtr.

  • New: Added better stats for SProfilerMiniView::ProcessData.

  • New: Added debug code to catch memory stomps in the async loading buffers that's independent from mallocstomp allocator. Changed the signature of PageProtect functions to be able to read-only protect memory.

  • New: Added FixupNeedsLoadForEditorGame commandlet to fixup exports saved with NeedsLoadForClient, NeedsLoadForServer and NeedsLoadForEditorGame set to false and then had NeedsLoadForEditorGame set to true.

    • Added -IgnoreChangelist option to ResavePackagesCommandlet.

    • Removed unused code from ResavePackagesCommandlet.

  • New: Added FThreadSafeCounter64, a 64-bit version of FThreadSafeCounter.

  • New: Added gc.FindStaleClusters console command to list any stale clusters.

  • New: Added new FCString::Strspn and FCString::Strcspn functions.

  • New: Added support perfect forwarding constructors to AsyncTask framework. References are now kosher to use, avoiding mysterious crashes that would otherwise occur.

  • New: Added TEnumRange - allows ranged-for iteration over enums when they are declared with an associated ENUM_RANGE_* macro.

  • New: Added the ability to detect when the engine hangs (enters infinite loop or a very long task).

  • New: Added the ability to dump memory reports every x seconds.

  • New: Added the ability to query the name of a thread given its TLS id.

  • New: Added the option to load all symbols for stack walking in non-monolithic builds.

  • New: Changed the FPS chart binning 'long frame' discard threshold to a cvar (t.FPSChart.MaxFrameDeltaSecsBeforeDiscarding) to allow it to be disabled or adjusted, still defaults to 1 second.

  • New: Changed the OnMountPak file delegate to take an optional FDirectoryVisitor* so that callers can get a list of the files contained within the PAK file that was mounted.

  • New: Cleaned up some of the hot reload implementation.

  • New: Core: Added microseconds support to FTimespan.

  • New: Dynamic Delegates can now have up to 9 parameters.

  • New: FOutputDeviceFile will now use a separate thread for writing to the file on disk so that it doesn't block the calling process. Reduces time spent in Serialize function by a factor of 5.

  • New: FTransform::GetLocation() now calls FTransform::GetTranslation().

  • New: Garbage Collection assumptions verification code will no longer assert immediately after detecting the first offender. Instead it will list all offenders first and then assert.

  • New: GetAllocatedSize function's return type has changed to SIZE_T.

  • New: Hot reload now only recompiles game modules and their dependencies, rather than every game module.

  • New: Increase name bucket count to 65k. Increase name pool allocator to 256kb.

  • New: Multiple TBigInt performance improvents - multiply is now 30x faster.

  • New: New FMallocBinned2 general memory allocator for PS4 and PC platforms. This allocator is better at recycling freed memory blocks across threads and has thread-local caches to reduce contention during concurrent allocations.

  • New: PR #1331 [Core] Added a stomp allocator that allows finding memory overruns, underruns, and read/write after free. (Contributed by Pablo Zurita)

  • New: Reworked the task graph to support multiple banks of task threads at different priorities. This allows tasks to preempt other tasks. Only enabled for consoles. Misc threading fixes and cleanups.

  • New: The engine will now assert if pak file is corrupted, even in shipping builds.

  • New: Tweaked out MallocBinned2. Removed several recyclers in the engine since MB2 is faster. Reworked the container slack policies to use the allocator granularity.

  • New: UCLASSes, UENUMs etc. are now prevented at being defined at global scope.

  • New: UnrealHeaderTool now builds modules ordered by type in order to minimize wasted time during a hot reload build.

  • New: UnrealHeaderTool plugins no longer need to be a separate plugin and don't require UnrealHeaderTool source code changes to work.

    • Merged ScriptGeneratorPlugin with ScriptPlugin.

    • Introduced the concept of UnrealHeaderTool plugin support for plugins so that UnrealHeaderTool's source files don't need to be modified to make it work with external plugins.

    • Added RuntimeNoProgram module type (module that can be used at runtime but not by program targets).

    • Fixed logic with project file path setting in the engine. It will no longer try to crate a full path from an already rooted path.

  • New: UnrealHeaderTool.manifest has been renamed to [TargetName].uhtmanifest to aid readability.

  • New: Updated IntelTBB to 4.4u3 to catch more allocator usage.

  • New: When maximum number of UObjects has been allocated, the engine will print the limit with the assert message.

  • Added a missing memory barrier which would occasionally cause a task to be lost and a task to be executed twice.

  • Added missing default tolerance value for FVector2D::Equal. (Contributed by MaikKlein)

  • Added some postcondition checks to FModuleManager.

  • Added some redundant cache checks to try to capture some spurious OOM reports.

  • Changed the 'UObject Hash' stat category to be verbose by default to reduce high-watermark memory overhead of using stats on extremely slow frames.

  • Code where LogUnion logging category is used will now properly compile outside of Core module.

  • Deprecated FName constructor's unused bUnused parameter.

  • Explicitly closing file handles after loading mips otherwise the handles never get closed.

  • FEvent objects will now always be reset when returning the to the pool.

  • Fix for class token stream sometimes not being initialized if the class was serialized.

  • Fixed a crash when cancelling async loading caused by detaching linker from objects that had RF_NeedLoad flag set.

  • Fixed a spurious error message being reported when hot reloading from Xcode when nothing had changed.

  • Fixed a TMap crash which could occur during a ranged-for iteration after a Compact.

  • Fixed ALIGNOF to work with abstract types.

  • Fixed async loading releasing references to objects created during serialization before packages have been fully loaded.

  • Fixed ConsoleCommandLibrary_DumpLibraryHTML accessing thrashed memory.

  • Fixed crash in FPackageReader::ReadAssetRegistryDataIfCookedPackage.

  • Fixed crash in UnrealBuildTool when compiling an individual module without a suffix.

  • Fixed crash when copying an uninitialized TUnion.

  • Fixed crash when move-constructing an unbound TFunction.

  • Fixed custom versions not being detected when used in blueprint packages.

  • Fixed deadlock in lockfreelist IsEmpty.

  • Fixed debugger visualizers for TMap, TSet and TSparseArray in Visual Studio 2013 Update 5 and onwards.

  • Fixed FIntPoint::Size() and FIntVector::Size() overflows when they contain large components.

  • Fixed FMallocDebug's alignment checks.

  • Fixed FStringAssetReferenceRenameSerializer not finding all references.

  • Fixed Memswap to work on unaligned pointers for sizes of 3, 5, 6 and 7.

  • Fixed some const-correctness issues in FModuleManager.

  • Fixed some places where FIntVector was assumed to be 2D.

  • Fixed some redundant array copies in hot reload.

  • Fixed stall when cleaning up large number of tasks.

  • Fixed the wrong max enum value used during net serialization.

  • Fixed TIsClass to work with union types.

  • Fixed TQueue::Peek's const-correctness.

  • Fixes for VS2015's static analysis of Core, CoreUObject and UnrealHeaderTool.

  • ForEachObjectWithOuter no longer filters out all children of an object that is filtered by the exclusion flags.

  • Github # 1543 [Windows] Remove remote debug prompt on fatal error. (Contributed by bozaro.)

  • Hot reload will no longer be available in test configs.

  • Improved performance of TSet::Intersect, Union, Difference, and Contains.

  • In case when GetLastError returns 0, don't log the error code message as an error as that confuses external log parsers.

  • IsReferenced function will now ignore references from an object to itself.

  • Made "checkCode(Code)" macro work without requiring a semicolon in the code block.

  • Made TQueue non-copyable.

  • Optimized weak object pointer.

    • Optimized FWeakObjectPtr operator== and operator!= to be faster when either object is valid.

    • Optimized IsValid() when using default/no arguments (removes 2 branches per call).

    • Made TWeakObjectPtr::Get() and TWeakObjectPtr::IsValid() with default/no arguments use the faster FWeakObjectPtr versions.

  • PR #2073: Spelling in App:UnfocusedVolumeMultiplier changes from 4.10 (Contributed by Temaran).

  • Reduced allocations in FStatNameAndInfo::ToLongName().

  • Reduced memory usage when triggering automatic FPS charts for analytics.

    • Added a new parameter to UEngine::StartFPSChart that indicates whether or not the per-frame arrays should be constructed, true when doing 'StartFPSChart' from the console but false from other programmatic uses.

    • Updated HTML output total frame time stats to be tracked explicitly rather than computed from the per-frame arrays.

  • Removed deprecated functions from TArray and TLinkedList.

  • Renamed GPU analytics event from GPU to DesktopGPU to reflect that it is the default desktop adapter and not the one we initialized (which is GPUAdapter).

    • Updated text/log based FPS chart events to print out GPUAdapter instead (with DesktopGPU in parens if they differ, e.g., in an optimus setup).

  • Replaced FMath::Fmod(x, y) with our own implementation on all platforms. Ensure on y=0 input, and return 0 in this case (rather than NaN).

  • Stack overflows will now be properly handled by crash reporting code.

  • StaticLoadObject will now respect LOAD_NoRedirects flag.

  • String referenced assets won't get cooked if referenced by editor-only properties.

  • The engine will no longer create crash reports from ensures that were triggered after the engine has crashed.

  • UnrealHeaderTool will now respect #if WITH_EDITORONLY_DATA properties inside of #if !CPP block.

  • UnrealHeaderTool: Fixed an issue with alpha handling in default value parsing for FColor literals.

  • UnrealPak will no longer be compiled with ICU support.

  • UObjectBase::Name, Class, and Outer have been renamed NamePrivate, ClassPrivate, and OuterPrivate to fix large numbers of shadow variable warnings in VS2015.

  • Updated UnrealHeaderTool error messages to refer to the new GENERATED_BODY macros instead of the old deprecated ones.

Editor and Tools

  • New: Added a new virtual function for Actors: IsSelectable(). Overriding this function allows users to make an actor not selectable in some or all cases rather than relying purely on editor modes to determine selectability. For example, if you have a purely transient actor created at editor time for some purpose and it cannot be deleted or edited, you may want it also to be unselectable.

  • New: Added UEngine::OnComponentTransformChanged delegate to Editor.

  • New: Transaction notification can now be temporarily squelched for uses of the transaction buffer that do not need to be displayed to users.

  • New: UActorFactory::SpawnActor now takes a FTransform instead of a FVector Location and FRotator Rotation.

  • New: Unreal Editor now supports multiple default editor "modes" active at the same time (FEdModeTools).

  • New: UnrealPak: Improved -diff output formatting to make it easier to save as .csv and view in Excel, also added it to the usage help for the tool.

  • New: When calling UTransBuffer::Undo you can now specify that the transaction cannot be redone.

  • Fixed PostEditChangeProperty being passed a null property when editing a vector or transform with a "3D property widget".

Content Browser
  • New: Added a file import code path that doesn't load the entire file into memory prior to importing.

  • New: Added the ability to spawn configurable one-off Content Browser widgets in C++.

    • This feature is used by the VR Editor to spawn a Content Browser in VR.

    • Various new options are available for customizing the spawned Content Browser:

      • You can set whether the sources view should initially be expanded or not.

      • You can set whether asset paths are shown in the Content Browser. Only useful if you only want to show collections.

      • You can force collections to be initially visible, regardless of defaults.

      • You can set a specific collection to view initially.

      • You can now opt to have no class name label under the asset.

      • Also, made a small tweak to the default splitter position for the sources view.

Gameplay Framework

  • New: AActor::ParentComponentActor has been deprecated and replaced with the private ParentComponent use the accessors IsChildActor() or GetParentComponent() instead.

  • New: Added a new overrideable function UGameplayAbility::ShouldActivateAbility, which can help decide whether or not an ability should be activated.

  • New: Added AActor::GetIsReplicated() accessor.

  • New: Added load time printouts to UEngine::LoadMap and the ListLoadedPackages command (load times in the former case are very useful, times in the latter are less so, since it represents wall time from start to finish, and can include overlapping times).

  • New: Added TSet version of UPrimitiveComponent::GetOverlappingActors.

  • New: Added TSet versions of AActor::GetOverlappingActors and GetOverlappingComponents.

  • New: AGameMode::OnMatchStateSet is a new virtual that allows game mode subclasses to insert handling between MatchState being set and notification dispatch to the GameState and Blueprints.

  • New: Avoided using TG_PrePhysics as the first tickgroup so that licensees can add tickgropups. https://udn.unrealengine.com/questions/279126/code-assumes-that-tg-prephysics-is-the-first-tick.html

  • New: Can now GetActorTransform on AActor instead of having to access each component piecemeal via GetActorLocation/Rotation/Scale.

  • New: FTraceHandle can now be used as a key in TMaps.

  • New: GameMode is no longer mandatory to carry over between Source and Transition levels during SeamlessTravel and is instead included as part of the default implementation of AGameMode::GetSeamlessTravelActorList.

  • New: There is now a OnPostEngineInit delegate on UEngine that is called after GEngine->Init has completed.

  • New: UActorComponent::World and Owner have been renamed WorldPrivate and OwnerPrivate.

  • New: UChildActorComponent can now be used as parent class from other modules.

  • New: UChildActorComponent::ChildActor, ChildActorName, and CachedInstanceData are now private members.

  • New: UPrimitiveComponent::MoveIgnoreActors is now a transient property array of AActor* instead of a non-property array of AActor WeakObjectPtrs and GetMoveIgnoreActors returns const TArray<AActor*>& instead of TArray<TWeakObjectPtr<AActor>>&.

  • New: USceneComponent::AttachParent, AttachSocketName, and AttachChildren have been marked as deprecated as a bridge step to their privatization in 4.13.

    • USceneComponent::SetupAttachment has been added and is intended to be used in constructors instead of setting AttachParent and AttachSocketName directly.

    • USceneComponent::AttachTo now routes to SetupAttachment when called from a constructor.

  • New: Widget Components now support rendering native Slate widgets directly (rather than only UMG widgets.)

    • Simply call SetSlateWidget() on the WidgetComponent in C++ code to bind a Slate widget to render

  • New: WorldSettings is now a member of ULevel instead of the (intended) invariant being that Actors[0] is always the World Settings object.

    • An effort is made to maintain World Settings in the Actors[0] index, but it is no longer guaranteed (particularly after hot reload).

  • AActor::GetNetDriver no longer crashes for Actors that are not currently in a World.

  • Add more logging when character is stuck.

  • Added check to Actor::PostActorConstruction to avoid calling BeginPlay on pendingkill Actor.

  • Added comment explaining how AttachmentReplication is updated (via GatherCurrentMovement).

  • Added DiagnosticCheckNaN() version to FRotator and FQuat that takes a string argument to prepend to the message.

  • Added logging to ResolvePenetration for location of other object and current netmode (to make networked PIE easier to debug).

  • Added logging to try to track down very rare case of level bounds actor with null RootComponent.

  • Added NaN check within UCharacterMovementComponent::HasValidData() for cached rotation.

  • Adjusted inline TArray sizes for Component and Actor arrays in FQueryCollisionParams. Used common define between that class and PhysX filtering code.

  • Avoid multiple iterations with axis flipping in FindTeleportSpot unless we are spawning something. The teleport spot could otherwise be placed on the other side of a wall.

    • Also avoid using a partial MTD result in EncroachingBlockingGeometry() when one of the MTD tests fails.

  • Changed UMovementComponent::UpdatedComponent and UMovementComponent::UpdatedPrimitive to be Transient.

    • They are not editable properties so should not be saved or loaded. UpdatedComponent is intended to be set in Actor constructors or via SetUpdatedComponent() at runtime.

    • UpdatedPrimitive is initialized as a cast on UpdatedComponent, it should never be loaded either.

  • Changed FQuat::IsIdentity() to use a stricter tolerance, and check all components rather than just W to better handle very small rotations.

    • Fixes root motion in character movement introducing error in rotations.

    • Also increased number of digits in FQuat::ToString() since the 8th and 9th digits are significant for small rotations.

  • Cleaned up NaN checks in CharacterMovement. Changed checks to ensures to avoid crashing, and added more details in some messages.

  • Fix root motion source jump forces not providing consistent in-air velocity on their last tick due to partial simulation times being the default. Added settings flag to DisablePartialEndTicks, enabled that setting by default on jump forces.

  • Fix shutdown crash caused by delayed cleanup tasks in tick task sequencer.

  • Fixed crash caused by TPlayerControllerIterator iterating out of bounds (thanks mollstam!).

  • Fixed FMath::Fmod(X, Y) sometimes returning small negative values for positive X and Y due to float imprecision.

  • Fixed issue in PlayerCameraManager where the priority-based sorting of CameraModifiers wasn't sorting properly.

  • Fixed matrix transforms inUCharacterMovementComponent::UpdateBasedMovement() causing slight position error.

  • FixupDeltaSeconds() now considers time dilation when clamping. Acceptable ranges for time dilation values and undilated frametimes are now config parameters on WorldSettings.

  • GameSession::SessionName is now respected in GameMode::InitGame. (Contributed by slonopotamus)

  • GetComponentByClass is no longer virtual, FindComponentByClass should be extended instead.

  • Ignore PlayerController::ServerUpdateCamera RPCs when bUseClientSideCameraUpdates is false. (Contributed by slonopotamus)

  • Improved logging for ResolvePenetration and Client/Server corrections.

    • ResolvePenetration now includes original location, object it's stuck in, and how far it's penetrating.

    • Client/Server correction logging (from p.NetShowCorrections) now include actor name, and more path to component base. Component name alone was not helpful as it does not give the actor context.

  • Made FTransform::GetSafeScaleReciprocal() tolerance SMALL_NUMBER instead of zero.

  • Made UCharacterMovementComponent::VerifyClientTimeStamp() virtual so projects can override with specific client timestamp verification logic

  • Made FOverlapInfo() constructors explicit. Fixed uses of this struct that violated this.

  • Modified minimum Duration values for JumpForce and MoveToForce ability tasks so that having minimum Duration values doesn't trigger check()s.

  • Moved UninitializeComponents outside bActorInitialized check in AActor::RouteEndPlay to always uninitialize components when actor fails to spawn due to blocking collision.

  • Moved various functions to ignore Move and Look input from PlayerController to Controller.

  • Optimized APlayerController::IsLocalController() in the case where the bIsLocalPlayerController is set, or on dedicated servers (always known at compile time).

  • Optimized USceneComponent::SetWorldTransform() to avoid unnecessary copies and avoid unaligned SIMD reads and writes.

  • Prevented UWorld::RemovePawn() from unpossessing the wrong pawn.

  • Savegames now serialize custom versions to ensure future compatibility.

  • USceneComponent::Pre/PostNetReceive and PostRepNotifies are now protected instead of private so subclasses can extend.

  • When adaptive network frequency is enabled and a character moves, force a net update.

    • This prevents a long delay between movement updates and the client's perception of movement, and avoids choppy movement while replication is ramping up, while still allowing frequency to go down when not moving.

    • Added UCharacterMovementComponent::ShouldCancelAdaptiveReplication() which checks for location, rotation, or velocity changes, and can be extended to check other values as well.

  • UEngine::DefaultPreviewPawnClass and DefaultPreviewPawnClassName have been removed.

Localization

  • Invalid invalid text format arguments now emit a warning.

    • Arguments that failed to parse as an index (either because they were a string or were empty) previously silently applied fallback behavior. This warning ensures they will be caught as they may break localization by preventing argument re-ordering.

Networking

  • New: Added a delegate that will be called as soon as a processing timeslice is exceeded while processing network connections in UIpNetDriver (processing still continues afterwards).

    • Controlled by a new cvar n.IpNetDriverMaxFrameTimeBeforeAlert, set to 1 second by default.

    • Adjusted existing warning for slow frames due to networking to be configurable with cvar.n.IpNetDriverMaxFrameTimeBeforeLogging (remains at 10 seconds by default).

  • New: Added a new replication condition, COND_ReplayOnly, for replicating properties only to replays.

  • New: Added basic ICMP echo request function to engine.

  • New: Added ImportTextItem() and To/FromJson() to FUniqueNetIdRepl struct to handle json import and export.

  • New: Added to JsonObjectConverter the ability for a UStruct to emit json as a string if type traits are setup with ExportTextItem / ImportTextItem. Allows a UStruct to convert to json as something other than FJsonValueObject.

  • New: Small optimization to network actors when beacons are in use. Network actors are only in the relevant net driver list (DemoNetDriver is the one exception). Made NetDriverName private (Use SetNetDriverName to change)

  • New: The list of network actors to replicate to clients has moved from per-world (UWorld::NetworkActors) to per network driver (UNetDriver::NetworkObjects).

    • This shouldn't affect you unless you have modified engine networking code, but it is an important step in enabling more networking optimizations.

    • It also helps simplify the handling of cases where there are multiple network drivers in one world, such as demo and beacon drivers.

  • Add progress delegate notification for http downloads on PS4.

  • Added NotifyPreClientTravel multicast delegate.

  • Default MaxSearchResults in FOnlineSessionSearch objects to 1 instead of 0, so that the default behavior is to find exactly one session instead of completing right away without searching for sessions.

  • Fixed an issue where during replay playback, FHttpNetworkReplayStreamer was calling the FOnStreamReadyDelegate with an incorrect second parameter, indicating that the streamer was recording instead of playing back.

  • Fixed FindInactivePlayer and AddInactive player to make sure to use valid unique IDs if they exist.

  • Removed an invalid assert in FHttpNetworkReplayStreamer.

Online

  • New: Add an optional parameter "bPrettyPrint" to FJsonObjectConverter::UStructToJsonObjectString and FOnlineJsonSerializable::ToJson (defaulted to true).

  • New: Add config options [HTTP]CurlMaxSimultaneousRequests and [HTTP]CurlMaxRequestsAddedPerFrame to limit number of simultaneous HTTP requests processed through curl and number of requests added to curl per frame to reduce hitches. Default values are uncapped to retain prior behavior.

  • New: Added a CheckAvailability function to the hotfix manager that simply checks for different/new/old hotfix files but doesn't apply them

  • New: Added ParseHttpDate/ToHttpDate functions to FDateTime - parses based on spec found at https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1

  • New: Added UParty::HasPendingPartyJoin(), which will return true if a player has accepted an invite, but it hasn't been processed yet.

  • New: Implement operator==/!= for FVariantData for bool type.

  • New: Renamed UPartyGameState::InitLocalPlayerPartyData() to UPartyGameState::InitPartyMemberStateFromLocalPlayer, and changed how SendLocalPlayerPartyData initializes UPartyMemberState objects to reduce duplicate code and extra looping.

  • New: WebBrowser: Adding a custom tag to devtool web browser windows.

  • Allow hotfixmanager to run on dedicated servers and client builds.

  • Improved FindInactivePlayer and AddInactivePlayer functions to better leverage UniqueIds per player if UniqueIds are in use in the game. Preferred over comparing via NetworkAddress.

Other

  • Cooker: Prevented log spew about moving items to chunk X when they were already pre-assigned to chunk X (items that are referenced by other chunk 0 items but hadn't been reached yet in the chunk traversal).

  • Make sure that SaveToINI doesn't try to save console window positioning information when bad/invalid handles are present.

Physics

  • New: Add the option to turn off active transforms for projects that don't use them.

  • New: Added Test option to async scene query API (sweeps, raycasts etc), in addition to existing Single and Multi options.

  • New: Allow efficient filtering by component or by actor in preFilter. Makes actor filtering thread safe.

  • New: Give the ability to turn off face remap table which saves memory in PhysX.

  • New: Make sub-stepping run on game thread. This is done for safety of various user callbacks and simplifies a lot of the code. The simulation is still not on the game thread of course, but the callbacks are.

  • New: Prevent non simulating actors from being put in the simulation scene.

  • New: Remove WITH_SUBSTEPPING as it is now supported on all platforms.

  • New: Share BodySetup for sphere component. This skips the need to create a NewObject whenever a blueprint with a sphere component is spawned.

  • New: Update HandlePhysicsCollisions_AssumesLocked so that it can filter hit events and modify impulses.

  • Fixed FBodyInstance::GetBodyBounds not working on static bodies.

  • PhysX fix for penetration test returning NaN.

Platforms

Android
  • Added a way to unregister signal handlers on Android by calling FPlatformMisc::SetCrashHandler((void(*)(const FGenericCrashContext& Context)) -1); (used in VulkanRHI.cpp).

  • Bugfix: Fixed linker warnings (mismatched function/variable declaration for glMapBufferOES and glUnmapBufferOES) for Arm64 with NDK11.

  • Improvements for debugging. We now use dwarf-4 and don't force inline for debug builds.

iOS
  • Make Xcode create a copy of iOS and TVOS apps in Payload folder when needed to work around the bug in Xcode where it tries to launch [GameName]-Mac-[ConfgName].app instead of [GameName].app.

Mac
  • OnControllerConnectionChange is dispatched on Mac when gamepad is connected/disconnected.

  • RunUAT.sh can now be run from any working directory.

PlayStation 4
  • New: Added a new interface in the platform features family, IVideoRecordingSystem, and an implementation for Playstation 4.

    • This interface allows programmatic control over the platform's video recording functionality and allows clips recorded through the interface to be shared via the "SHARE" button.

  • New: Implemented the SendSessionInviteToFriend and SendSessionInviteToFriends functions in FOnlineSessionPS4 so now invitations can be sent programmatically.

  • New: Moved BoundShaderStateHistory to the context instead of the RHI to avoid critical section.

  • Added a log statement when the gap between SubmitDone calls exceeds 2 seconds and removed a duplicate call to set the LastSubmitDoneTime.

  • Call SubmitDone immediately after flushing the GPU (to ensure it happens during a long frame in case additional work is generated after the flush).

  • Optimized PrepareForDrawcall.

  • When checking the results from sceNpGetParentalControlInfo, we no longer check the chatRestriction or ugcRestriction flags if sceNpGetParentalControlInfo returned an error, since these flags are not reliably set in that case.

Xbox One
  • New: Added support for FSystemWideCriticalSection to Xbox One.

  • New: Enabled the use of variadic templates on Xbox One.

  • XInputInterface now dispatches OnControllerConnectionChange messages.

HTML5
  • New: master build script for HTML5 ThirdParty libraries.

Windows
  • XInputInterface now dispatches OnControllerConnectionChange messages.

  • Window positions are now treated as being the top-left of the window client area. This only affects windows with an OS border, and matches the behavior of the other desktop platforms.

Programming

  • New: Added the ability to query body setup directly for distance to closest point. Added the ability to query closest point on physics asset.

  • New: Removed all code testing whether we are using a 'Rocket' build.

    • Changed to check whether build was installed where appropriate, unified behavior in some other areas

  • New: UnrealBuildTool: Exposed the ability to compile with checks enabled in shipping and test configurations by setting UEBuildConfiguration.bUseChecksInShipping in your Target.cs.

  • Added a build exception to give a message instead of crashing when trying to generate all project files from an installed build.

  • Added UnrealLightmass to list of programs to build when Build Solution is used and Editor configuration is selected.

  • Changed UnrealFileServer to be non-monolithic so that it doesn't include code that is not public.

  • Ensured that warnings from Dynamic Compilation of build.cs files are propagated up to user when compiling in IDE.

Rendering

  • New: Added a tiny state cache to the frontend of RHICmdList to get rid of redundant rasterizer and depthstencil states.

  • New: Added back support for draw event colors.

  • New: Added code to optionally move the lighting stuff from initviews to after the prepass.

  • New: Added detailed command list markers for GPU particles.

  • New: Added display of benchmark results to the 'scalability auto' command output, and also added them to FQualityLevels returned by BenchmarkQualityLevels so user code can make use of them.

  • New: Added render thread start and stop delegates. GitHub 2006.

  • New: Added stats down to the emitter level. New -leaf option for stat dump commands. HUD stats now correctly add new stats while the display is up.

  • New: Allow UTextureRenderTarget::GetRenderTargetResource to be called in parallel. By user request.

  • New: Allow collision and trail particles to run off the game thread.

  • New: Allow users to pass in multipliers for benchmark results to Scalability::BenchmarkQualityLevels (to scale the results prior to lookup in the scalability tables for the different quality levels).

  • New: Allowed spline meshes to share vertex factories.

  • New: Changed PC to default to parallel rendering when not in editor.

  • New: Enabled texture streaming over budget tracking even when stat tracking is not enabled (Test and Shipping) (via IStreamingManager::Get().GetTextureStreamingManager().GetMemoryOverBudget()).

  • New: Merged atmosphere, global distance field and perlin noise into the frame uniform buffer and disabled the BuiltinSamplersUB.

  • Avoid recalculating shader map ID in a cooked build; it was readily available.

  • Fixed a critical bug in the render thread fencing that could sometimes cause fences to complete before previous commands.

  • Fixed an issue with recurisve shader init on consoles.

  • Fixed async compute submits in the editor.

  • Fixed memory bug with HISMC.

  • Fixed race condition on particle system vertex factories.

  • Fixed recursive shader intialization crash on consoles.

  • Fixed rotation bug in DrawDebugSolidBox.

  • Fixed shadows updating static meshes while the prepass is in progress.

  • Fixed threading bug with atmosphere.

  • Fixed crash in FHierarchicalStaticMeshSceneProxy related to reflection captures and foliage.

  • Proper fix for shadow setup concurrent with prepass crash.

  • Safe, plausible fix for crash report replating to override vertex colors.

FX
  • New: Exposed FRawDistributionFloat and FRawDistributionVector outside Engine module.

Postprocessing
  • Optimized allocations in FFinalPostProcessSettings. Fixed bug skipping an element when updating the ContributingCubemaps array if one is removed during an iteration.

Optimizations
  • Removed unused TangentZDelta_DEPRECATED member from FVertexAnimDelta.

UI

Slate
  • New: Added a UObject stat around a cache miss in FCompositeFontCache::GetFontFace, so the load time is traceable to the specific asset that is getting unpacked from bulk data.

Upgrade Notes

AI

Debugging Tools

  • Please check GameplayDebugger.h for detailed upgrade instructions.

Blueprints

  • No specific upgrade instructions, but the new system will not take hold until a blueprint is recompiled and saved.

Core

  • Warnings may now issue on load when converting integer properties that lose information. This includes conversions like an int32 property saved as -1, then loaded as a uint32.

  • Any tools which rely on reading UnrealHeaderTool.manifest will have to be updated to read [TargetName].uhtmanifest instead.

  • UCLASS, UENUM etc. declarations are now illegal outside of global scope. If you have a type which is nested inside a UCLASS or USTRUCT, they should be moved to global scope.

Editor and Tools

Content Browser

  • UFactory::StaticImport will now call FactoryCreateFile for both text and binary files. The default implementation will load the file into a buffer/string and call FactoryCreateBinary/FactoryCreateText to preserve legacy behavior. New factories may override FactoryCreateFile to perform their own file processing instead.

Gameplay Framework

  • Deprecated the following functions: AActor::AttachRootComponentTo, AActor::AttachRootComponentToActor, AActor::DetachSceneComponentsFromParent, USceneComponent::AttachTo, USceneComponent::DetachFromParent

  • If you've overriden AGameMode::GetSeamlessTravelActorList and are not calling Super::GetSeamlessTravelActorList then must make sure to manually include this in the ActorList if you wish the GameMode to persist across the transition.

Localization

  • Packages that may have failed to correctly serialize in 4.11 should now automatically serialize correctly if they contain an FText property making use of the FFormatArgumentData.

Networking

  • Fixed byte ordering issues in IP address conversions

  • Non-desktop platforms now use a single (multicast) socket for Messaging

  • Simplified IPv4 API to make it easier to use

  • Added more unit tests, documentation

    • This also fixes most of XboxOne Messaging support. It is now possible to interact with Xbox One in UnrealFrontend. Until we have support for running IPv4 and IPv6 in parallel in the Editor, this requires a StaticEnd.

Online

  • Reimplement inherited implementations of void UPartyGameState::InitLocalPlayerPartyData() to UPartyGameState::InitPartyMemberStateFromLocalPlayer(const ULocalPlayer* LocalPlayer) and initialize UPartyMemberState objects one player at a time.

Platforms

  • From the command line, separate targets with a '+' character.

  • From the UI, set your Default Deploy Platform to None, then select the check box next to each intended target.

  • To select multiple targets:

    • From the UI, set your Default Deploy Platform to None, then select the check box next to each intended target.

    • From the command line, separate targets with a '+' character.

Programming

  • UE4 tools now require the Visual Studio 2015 Runtime to run.

Rendering

  • In case you see "Rendering of stretched decals" you might have to make some small blueprint/code changes to your project, more info see: "Streched decals - fix and details".

  • The CreateMeshSection and UpdateMeshSection functions on ProceduralMeshComponent have been changed to use LinearColor for the 'Vertex Color' input, as this is properly supported by Blueprints. Existing nodes will need to be replaced.

Lighting

  • Memory usage for light probes is slightly increased.

Materials

  • Fixed inconsistency in lighting (in shadow and not in shadow) with SubsurfaceScatteringProfile. A minor retweak of the material might be needed.

C++ API-Breaking Changes

  • Removed redundant include statement from K2Node_SwitchEnum.

  • Prevent cheating with consolevariables.ini and added ensure to see where the cheat flag would prevent a cvar from getting set.

    • Don't use consolevariables.ini for shipping/test. Cheat flag on cvars should be set in code.

  • Deprecated UWidget::GetEditorIcon and converted existing icon brushes to conform with FClassIconFinder expectations. Users should redefine their icons in slate style sets using the format ClassIcon.WidgetType, they will then get picked up automatically.

  • GetComponentByClass is no longer virtual, FindComponentByClass should be extended instead.

  • Timer Handles are now 64-bit values

    • Blueprint function "Clear Timer by Handle" has been replaced with "Clear and Invalidate Timer by Handle". The older version is now deprecated and should be replaced.

  • UActorFactory::SpawnActor now takes a FTransform instead of a FVector Location and FRotator Rotation

    • Any virtual overrides of UActorFactory::SpawnActor need to be converted to match the new signature taking a FTransform instead of a FVector Location and FRotator Rotation.

  • UChildActorComponent::ChildActor, ChildActorName, and CachedInstanceData are now private members

    • Direct accesses of UChildActorComponent::ChildActor, ChildActorName, or CachedInstanceData are no longer allowed. Use GetChildActor or GetChildActorName to access those variables. Direct access to CachedInstanceData is no longer possible.

  • Actor and Component OnClicked/OnReleased events can now be triggered by more than just Left Mouse Button

    • C++ events bound to OnClick/OnReleased events will need to have the new FKey parameter added.

  • USceneComponent::AttachParent, AttachSocketName, and AttachChildren have been marked as deprecated as a bridge step to their privatization in 4.13.

    • Instead of direct reads of USceneComponent::AttachParent, AttachSocketName, and AttachChildren you should use GetAttachParent, GetAttachSocketName, or GetAttachChildren. Direct writes should be replaced with SetupAttachment from constructors or AttachTo once components have been registered.

  • Changed the OnMountPak file delegate to take an optional FDirectoryVisitor* so that callers can get a list of the files contained within the PAK file that was mounted

    • Any existing uses of OnMountPak must be updated to pass in a FDirectoryVisitor* (nullptr is fine)

  • AActor::ParentComponentActor has been deprecated and replaced with the private ParentComponent use the accessors IsChildActor() or GetParentComponent() instead

    • Direct references to AActor::ParentComponentActor will need to be replaced either with IsChildActor() if simply checking if the Actor is a Child or with GetParentComponent()->GetOwner() if an actual reference to the parent Actor is desired.

  • Added editable fixed bounds for skeletal meshes, exposed getters to blueprints

    • Bounds member of USkeletalMesh no longer public, use GetBounds or GetImportedBounds to access now. GetBounds is the expanded custom bounds and GetImportedBounds is the original mesh bounds saved on import.

  • MTBF analytics is now an Engine feature (moved from Editor)

    • Removed FEditorAnalytics::InitializeSessionManager(), ShutdownSessionManager() and SessionHeartbeat() from public API

    • Replaced by private engine code FEngineSessionManager::Initialize(), Tick() and Shutdown()

    • These should only need to be called by the engine infrastructure.

  • Added AActor::GetIsReplicated accessor

    • IsReplicated functions on AGameplayAbilityWorldReticle and AGameplayAbilityTargetActor have been deprecated, use GetIsReplicated instead.

  • UActorComponent::World and Owner have been renamed WorldPrivate and OwnerPrivate.

    • UActorComponent WorldPrivate is now private instead of protected. Use GetWorld() instead.

  • UPrimitiveComponent::MoveIgnoreActors is now a transient property array of AActor* instead of a non-propery array of AActor WeakObjectPtrs and GetMoveIgnoreActors returns const TArray<AActor*>& instead of TArray<TWeakObjectPtr<AActor>>&

    • Any direct usages of MoveIgnoreActors or the return value from GetMoveIgnoreActors will need to be adjusted to operate on direct AActor* references instead of indirectly via the TWeakObjectPtr<AActor>

  • GetAllocatedSize functions' return type has changed to SIZE_T.

    • The return value type of GetAllocatedSize functions has changed and may need to be updated in any user overrides of that function.

  • Actor delegates OnTakeAnyDamage, OnTakePointDamage, OnActorBegin/EndOverlap, OnBegin/EndCursorOver, OnClicked/Released, OnInputTouchBegin/End/Enter/Leave, OnDestroyed, and OnEndPlay have all had a new parameter added to allow binders to know which Actor the event occurred on in cases where a single event entry point is bound to multiple Actors.

    • All C++ functions bound to any of these delegates will need to have the new AActor* parameter added to them. Similarly any blueprint bindings of a function via the Create Event node will require the event to have the new parameter added.

  • PrimitiveComponent delegates OnComponentHit, OnComponentBegin/EndOverlap, and OnComponentWake/Sleep have all had a new parameter added to allow binders to know which Primitive Component the event occurred on in cases where a single event entry point is bound to multiple Primitive Components.

    • All C++ functions bound to any of these delegates will need to have the new UPrimitiveComponent* parameter added to them. Similarly any blueprint bindings of a function via the Create Event node will require the event to have the new parameter added.

  • Optimized APlayerController::IsLocalController() in the case where the bIsLocalPlayerController is set, or on dedicated servers (always known at compile time).

    • AController::IsLocalPlayerController() is no longer virtual. It simply checks a new bool bIsPlayerController and the result of IsLocalController().

  • Added more logging when character is stuck.

    • UCharacterMovementComponent::OnCharacterStuckInGeometry() now takes an FHitResult parameter.

  • Changed how Hierarchical LOD system saves out generated content: meshes, materials and textures are now saved into a sub-folder called "HLOD".

  • Corrected URL path search when using "download maps on-the-fly" to allow pak file fetches to work from paths other than the "root" path.