2015. 8. 31.

언리얼 엔진 4.9 릴리즈!

글쓴이 Alexander Paschall

이번 릴리즈에는 수백에 달하는 언리얼 엔진 4 업데이트가 포함, 여기에는 GitHub 의 언리얼 엔진 개발자 커뮤니티의 제출내용 129 개도 포함됩니다! 언리얼 엔진 4.9 에 기여해 주신 모든 분들께 감사드립니다:

Andrew Zhilin (zoon), Artem V. Navrotskiy (bozaro), Artyom Sovetnikov, Ben Rog-Wilhelm(zorbathut), Ben Wiklund (bwiklund), Black Phoenix (PheonixBlack), Błażej Szczygieł (zaps166), Brad Grantham (bradgrantham), Brent Scriver (FineRedMist), Cengiz Terzibas (yaakuro), chipgw, Christian Radich (yoyohobo665), Christopher P. Yarger (cpyarger), Clay Chai (chaiyuntian), Cliff Jolly (ExpiredPopsicle), Dave Newson (dave-newson), Derek van Vliet (derekvanvliet), Dorgon Chang (dorgonman), ewirch, Felix Laurie von Massenbach (erbridge), Gabriel Hare (GabrielHare), gatools, Hakki Ozturk (ozturkhakki), HueyPark, JaredTherriault, Jason Spangler (Stormwind99), Javier Osset (Xaklse), Jeff Rous (JeffRous), JohnAlcatraz, Kitatus Studios (KitatusStudios), Konstantin Nosov (gildor2), korypostma, Lee Berger (MrCrowbar), Maarten Scholl (maartenscholl), Marat Radchenko (slonopotamus), marynate, Matthias Huerbe (MatzeOGH), Maxim (maxpestun), Michael Allar (Allar), Michael3DX, MiniTurtle, Moritz Wundke (moritz-wundke), Nako Sung (nakosung), Nari Demura (demuyan), Nastenko Michael (deM-on), Nathan Stocks (CleanCut), Niels Huylebroeck (red15), Pablo Zurita (pzurita), Patrick Flanagan (valtrain), Pedja Ljubomirovic (3dluvr), Philipp Smorygo (fsmorygo), Pierdek, Piotr Bąk (Pierdek), Quadtree, Rajko Stojadinovik (rajkosto), Rama (EverNewJoy), Rem (rveilleux), rlefebvre, Robert Khalikov (nbjk667), Russ Treadwell (trdwll), Salamanderrake, Sebastian Witkowski (witkowski-seb), Sébastien Rombauts (Srombauts), Simon Taylor (simontaylor81), Stephen Whittle (stephenwhittle), szyszq, TK-Master, Tobias Mollstam (mollstam), Tomasz Sterna (smokku), user37337, Victor Xie (FTPiano), Vladimir Ivanov (ArCorvus), Will Stahl (merlin91), yamashi, Zhi Kang Shao (zkshao)

주요 기능

모바일 디바이스 지원 강화

모바일 플랫폼에 대한 지원을 대폭 강화하려는 노력을 계속한 결과, 이번 릴리즈에는 최첨단 모바일 타이틀 제작에 힘을 실어줄 흥미로운 렌더링 기능이 다수 포함되어 있습니다. 새로 추가된 내용에는 효율적인 다이내믹 섀도우, 무버블 라이트와 데칼입니다. 앞으로도 모바일과 HTML5 의 렌더링 퀄리티에 지속적인 향상을 볼 수 있을 것입니다. 이번 릴리즈에는 iOS 앱 내 구매 기능이 향상되었으며, 원격 푸시 알림과 CloudKit 도 지원합니다. 안드로이드의 경우, OpenGL ES 3.1, 몰립 모드, 비동기 오디오 압축해제, 향상된 종횡방향 기능이 추가되었습니다. NVIDIA AndroidWorks 역시도 포함되어 디바이스 준비 및 실행이 쉬워졌습니다. 이제 UE4 에 iOS 용 Flurry 애널리틱스 플러그인이 내장되어 배포되기도 합니다! 모바일 디바이스용 신기능 다수는 HTML5 게임에서도 사용 가능합니다.

image alt text

모바일용 다이내믹 캐릭터 섀도우

디렉셔널 라이트에서의 다이내믹 모듈레이트 캐릭터 섀도우가 모바일 디바이스에 지원됩니다!

image alt text

  • 스태틱 라이팅된 씬에도 다이내믹 모듈레이트 섀도우를 사용할 수 있습니다.

  • 이 기능을 켜려면, 디렉셔널 라이트의 "Cast Modulated Shadows" (모듈레이트 섀도우 드리우기) 옵션을 켜면 됩니다!

모바일용 다이내믹 포인트 라이트

이제 모바일 디바이스와 HTML5 에 다이내믹 포인트 라이트가 지원됩니다!

image_2.gif

  • 폭발, 발사체, 파티클 이펙트 등과 같은 단발성 비주얼 이펙트 강화에 사용할 수 있습니다.

  • 조명 대상 오브젝트 하나당 다이내믹 포인트 라이트가 최대 4 개까지 지원됩니다.

  • 주: 포인트 라이트에서의 다이내믹 섀도우는 아직 지원되지 않습니다.

모바일에서의 데칼

이제 모바일 렌더러에서 데칼이 지원됩니다!

image alt text

  • 반투명, 더하기, 변조 블렌드 모드가 지원됩니다.

  • 주: 현재 모바일과 웹에서는 라이팅되지 않은 데칼만 지원됩니다.

주요 VR 업데이트

Steam VR (HTC Vive)

언리얼 엔진의 SteamVR 플러그인에는 보다 사용 편의성과 퍼포먼스를 개선시켜주는 주요 픽스가 포함되어 있습니다.

image alt text

SteamVR 개선 사항:

  • 4.8 프리뷰 2+ 에 등장한 지연시간 문제를 고쳤습니다.

  • 표준 모션 콘트롤러 추상화가 지원되어, 양쪽 바이브 콘트롤러 다 같은 플레이어로 경유시킬 수 있습니다.

  • C++ 프로젝트가 이제 플러그인 API 에 깔끔히 지원됩니다.

  • 여러가지 버그 수정과 개선사항이 있었습니다.

Gear VR 이 모바일 SDK 0.6.0 으로 업데이트

이번 리비전에서는 0.5.0 릴리즈에 있던 주요 Gear VR 렌더링 버그와 문제점 및 하드웨어 호환성 문제도 몇 가지 해결되었습니다.

image alt text

VR 모션 콘트롤러 지원

이제 UE4 의 공용 추상 레이어를 통해 모션 콘트롤러가 지원됩니다!

image alt text

이제 공용 인터페이스를 통해 모션 콘트롤러 디바이스가 전부 사용가능해진다는 뜻입니다. 현재 HTC Vive 콘트롤러가 지원되며, 곧 (PlayStation Move 같은 것이) 추가 지원될 계획입니다. 입력 버튼 눌림 및 트리거는 이제 모션 콘트롤러 키 추상화를 사용하여 여러 콘트롤러에서 하나의 플레이어로 경유시킬 수 있습니다. 추가적으로 캐릭터에 모션 콘트롤러를 추가하는 것만으로도 연결된 모든 것이 자동으로 콘트롤러 위치를 따르도록 업데이트시키는 모션 트래킹을 프로젝트에 추가할 수 있습니다! 모션 콘트롤러용 플러그인 전부를 새 시스템으로 옮겨, 디바이스에 상관없이 작동하는 인터페이스의 일부로 만들 것을 추천합니다.

DirectX 12 실험단계 지원

DirectX 12 가 현재 실험단계 기능으로 지원됩니다! 윈도우 10 을 사용중이라면, 명령줄에 "-DX12" 를 붙여 엔진을 실행하면 됩니다.

image alt text

마이크로소프트의 개발자가 UE4 에 DirectX 12 지원을 추가하고, 저희가 협업하여 그 변경사항을 4.9 에 통합시켰습니다. 이 기능은 아직 신기능이라 실험단계로 간주됩니다. DirectX 12 는 보다 효율적인 훨씬 낮은 단계의 렌더링 API 를 제공, 여러 스레드에 걸쳐 다수의 렌더링 명령을 병렬 처리하는 것이 가능한데, 이는 콘솔 렌더링 API 에 영향을 받은 것입니다. 앞으로 계속해서 DirectX 12 지원을 강화시켜 갈 것이며, 추후 엔진 버전에서 이 새로운 API 를 보다 적극 활용할 수 있는 방안을 모색할 것입니다.

메시 디스턴스 필드를 통한 풀 씬 파티클 콜리전

디스턴스 필드 GPU 파티클 콜리전을 통해 전체 씬에 걸쳐 파티클의 보다 효율적인 충돌 처리가 가능합니다.

image alt text

표면에 충돌하는 스파크 등에 사용 가능합니다.

image alt text

표면에 쌓이는 눈과 같은 다양한 이펙트에도 사용 가능합니다.

image alt text

  • GPU 파티클 이미터의 콜리전 모듈에 새로 생긴 'Collision Mode' 라는 프로퍼티를 통해 'Distance Field' 설정이 가능합니다.

    image alt text

  • 파티클의 충돌을 위해서는 충돌시킬 면이 있어야 하는데, 이는 디스턴스 필드를 통해 아주 효율적으로 추상화 가능합니다. 디스턴스 필드의 단일 샘플링으로 가장 가까운 충돌 표면과의 거리가 나옵니다. 디스턴스 필드의 경향을 계산하여 그 표면의 방향과 표면 노멀을 구합니다. 이들을 합치면 충돌면이 나오는 것입니다.

  • 이러한 방법을 사용한 파티클 콜리전은 기존의 씬 뎁스 콜리전보다 안정적인데, 기존의 것은 화면상에 있는 것에 대해서만 충돌하므로 수명을 짧게 할 수 밖에 없기 때문입니다. 그러나 글로벌 디스턴스 필드는 해상도가 꽤 낮아, 파티클이 얇은 오브젝트를 통과해 버리거나 날카로운 구석이 둥글어질 것입니다.

  • 모든 디스턴스 필드 기능과 마찬가지로, 이는 렌더링 프로젝트 세팅에서 'Generate Mesh Distance Fields' (메시 디스턴스 필드 생성) 옵션을 켜줘야 합니다. 디스턴스 필드 파티클 콜리전은 셰이더 모델 5 기능이라, SM5 를 지원하지 않는 하드웨어에서 파티클은 원래대로 씬 뎁스 콜리전을 사용하게 됩니다.

  • 디스턴스 필드를 통한 파티클 콜리전은 매우 효율적이라, 씬 뎁스를 통한 파티클 콜리전과 비용이 거의 같습니다.

계층형 LOD 빠른 미리보기 및 클러스터링

Hierarchical Level-of-Detail (HLOD, 계층형 LOD) 시스템은 4.8 에 도입된 것으로, 레벨에 있는 다수의 오브젝트가 화면상에서 작아지면 소수의 오브젝트로 압축시켜주는 기능입니다. 이를 통해 오브젝트를 가까이서 볼 때 훨씬 높은 수준의 퀄리티를 내는 데 도움을 주며, 레벨의 전반적인 퍼포먼스도 향상됩니다. HLOD 는 4.9 뿐만 아니라 앞으로도 계속 개선될 것입니다.

빠른 HLOD 미리보기

계층형 LOD 빌드의 빠른 반복처리를 위해, 이제 프리뷰 HLOD 옵션을 사용할 수 있습니다. 그러면 HLOD 메시를 직접 병합 및 생성하지 않고도 HLOD 액터 바운드와 오브젝트의 시각적 표현만으로 된 HLOD 액터가 생성됩니다. 그 바운드는 특정 계층형 LOD 레벨에 대한 LOD System 세팅 내 Draw Distance 세팅에 따라 렌더링됩니다.

image alt text

위 그림은 뷰에 뜨는 첫째 둘째 계층형 LOD 레벨 클러스터 양쪽을 나타내는데, 이로써 계층형 LOD 메시를 병합하고 생성하는 데 따르는 지루한 과정을 거치지 않고도 어떻게 레벨 클러스터링이 이뤄지는지 명확히 알 수 있습니다. 미리보기 시스템은 구현 초기 단계라, 앞으로의 개선에 따라 바뀔 수 있다는 점 유념해 주시기 바랍니다.

커스텀 LOD 클러스터링 (HLOD 볼륨)

계층형 LOD 클러스터링 프로세스에 대한 보다 세밀한 제어를 위해, 이제 Hierarchical LOD Volume (계층형 LOD 볼륨)을 배치하는 것으로 그 안에 포함된 액터의 클러스터를 정의할 수 있습니다. 이 방법을 통해 레벨의 어느 영역과 오브젝트를 클러스터로 묶을 것인지 수동 정의할 수 있습니다.

image alt text

"Arch Vis" (건축 시각화) 캐릭터 콘트롤

새로운 "ArchVisCharacter” 플러그인으로 건축 시각화 어플리케이션에 딱 맞는 콘트롤을 바로 제공해 주는 캐릭터 클래스가 추가됩니다. 현실 세계의 스케일대로 편안하고 자연스러운 느낌을 내기 위한 것으로, 보다 부드러운 비디오와 라이브 데모가 가능합니다.

image alt text

ArchVisCharacter 를 Pawn Class 로 바로 걸어줘도 되고, 그를 기반으로 커스텀 블루프린트를 만들어 원하는 대로 조작 세팅을 해 줘도 됩니다.

위젯 깊이 순서

스크린 스페이스의 위젯 컴포넌트는 이제 관찰자와의 거리에 따라 자동 소팅, 가장 가까운 스크린 스페이스 위젯 컴포넌트가 항상 다른 컴포넌트 위에 오도록 할 수 있습니다.

image alt text

이제 카메라와의 거리에 따라 모든 위젯 컴포넌트 순서를 정렬합니다. 예전에는 수동 Z 순서, 다른 말로 뷰포트에 추가된 순서에 따랐습니다.

에리어 섀도우 (스테이셔너리 라이트용)

더이상 반그늘 크기가 균등한 날카로운 그림자에 제한되지 않습니다. 라이트매스 레이 트레이서는 이제 스테이셔너리 라이트에 대해 에리어 섀도우를 지원합니다!

image alt text

이 기능을 사용하려면 "Use Area Shadows for Stationary Light" (스테이셔너리 라이트에 대해 에리어 섀도우 사용) 옵션을 켜면 됩니다. 'Light Source Angle' (라이트 소스 앵글) (, 포인트 라이트의 경우 'Source Radius' (소스 반경))으로 이 그림자의 농도를 조절합니다.

image alt text

퍼포먼스 디테일:

  • 라이트맵 해상도가 낮은 경우 균등 반그늘 그림자가 여전히 더 나으므로, 기본값은 그대로입니다. 예전에 균등 반그늘 크기는 애매한 프로젝트 세팅으로 조절했으나, 이제 에리어 섀도우와 마찬가지로 'Light Source Angle' 프로퍼티로 조절합니다. 그림자의 농도를 두 배로 연하게 하려면 소스 앵글을 두 배로 높이면 됩니다.

  • 단일 스테이셔너리 라이트 채널(, 즉 스테이셔너리 디렉셔널 라이트 하나)에만 영향받는 맵 영역에 대한 최적화도 새로 도입되었습니다. 그 섀도우 맵은 4 채널 텍스처가 아닌 단일 채널 텍스처에 패킹되어, 메모리 비용이 1/4 이 됩니다.

앰비언트 오클루전 머티리얼 마스크

새로운 앰비언트 오클루전 머티리얼 마스크 기능으로 머티리얼의 라이트매스 계산 AO 에 접근할 수 있는데, 이는 순차적 텍스처링, 예를 들면 노화 효과나 특정 지역의 먼지 등 시간에 따라 누적되는 효과에 유용할 수 있습니다.

image alt text

위 스크린샷은 먼지 레이어를 환경 구석 속에 자동으로 블렌딩하는 AO 마스크를 사용한 것입니다.

AO 마스크를 사용하려면, 월드 세팅 -> 라이트매스 세팅 아래 있는 'Use Ambient Occlusion' (앰비언트 오클루전 사용)과 'Generate Ambient Occlusion Material Mask' (앰비언트 오클루전 머티리얼 마스크 생성) 옵션 둘 다 켠 다음 라이팅을 빌드하면 됩니다. Max Occlusion Distance (최대 오클루전 거리)같은 다른 AO 콘트롤로 모양을 미세조정할 수 있습니다. (반드시 Direct and Indirect Occlusion Fraction (직간접 오클루전 비율)은 0 으로 설정해야, 이 AO 가 실제 레벨 라이팅에 적용되지 않습니다).

image alt text

그런 다음 머티리얼에서 PrecomputedAOMask 노드로 AO 를 0-1 마스크로써 접근할 수 있습니다. 1 은 오클루전 적용 영역, 0 은 나머지입니다.

image alt text

퍼포먼스 디테일:

  • PrecomputedAOMask 노드 사용은 표준 텍스처 룩업입니다. 이 기능을 켜면 라이트맵 텍셀당 0.5 바이트가 추가되는데, 기본 가용량은 라이트맵 텍셀당 약 4 바이트입니다.

  • AOMaterialMask 텍스처 메모리는 ‘ListTextures' 콘솔 명령으로 조사할 수 있습니다.

메시 디스턴스 필드 머티리얼

이 기능으로 머티리얼과 스페이스 내 특정 지점 사이에서 가장 가까운 입체면 사이의 거리를 싸게 구할 수 있습니다. 머티리얼 에디터에서 글로벌 디스턴스 필드 프로퍼티를 접근하는 노드가 두 개 새로 생겼습니다.

image alt text

DistanceToNearestSurface 는 월드 스페이스 유닛으로 부호가 있는 거리를 반환합니다. 참고로 거리는 불투명 메시 표면상에서는 항상 0 근처일 것입니다. DistanceToNearestSurface 를 사용하면 이펙트가 가려지는 것을 피할 수 있습니다:

UE4 사용자 Roel Bartstra 가 이미 이를 활용한 재밌는 사례를 찾았습니다 - 하나는 소프트 바디 모양 내기, 또 하나는 표면을 자동으로 피하는 흐름 맵 만들기 입니다.

모든 디스턴스 필드 기능과 마찬가지로, 이것 역시 렌더링 프로젝트 세팅에서 'Generate Mesh Distance Fields' (메시 디스턴스 필드 생성) 옵션을 켜줘야 합니다. 디스턴스 필드 머티리얼 접근은 셰이더 모델 5 기능입니다. 셰이더 모델 4 하드웨어 대비를 위해서는 FeatureLevelSwitch 머티리얼 노드를 사용하세요.

개선된 디스턴스 필드 앰비언트 오클루전

스카이 오클루전은 하늘빛을 받은 오브젝트 주변에 멋진 연그림자를 내는데, 이는 구름낀 라이팅 상황에서 특히나 중요한 것으로, 보통 라이팅 미리계산 없이는 하이 퀄리티 렌더링에서 내기가 힘든 것이었습니다. 바로 디스턴스 필드 앰비언트 오클루전이, 하루의 시간이나 환경이 언제든 변할 수 있는 완전 동적인 게임에서 이러한 문제를 해결해줍니다. 이번 4.9 에서 이 기술의 퀄리티와 퍼포먼스 향상에 많은 노력을 기울였으며, 이제 전형적인 게임 씬의 경우 총 GPU 비용 4ms 미만으로 가능하니 중사양 PC 나 플레이스테이션 4 수준의 하드웨어에서 출시 가능하다 생각합니다!

예전 방법은 적응형 샘플링이었기에, 평평한 표면의 작업은 덜했지만, 깨끗한 환경에서 얼룩이 많이 생기기도 했습니다.

image alt text

이제 적응형 샘플링을 제거할 만큼 AO 계산이 충분히 빨라졌기에, 오클루전이 훨씬 부드러워졌습니다.

image alt text

주의점은 이 새로운 방법은 더욱 긴 히스토리 필터를 요하는데, 그로 인해 유령 현상이, 특히나 그림자를 드리우는 것이 움직였을 경우에 생길 수 있습니다. 앞으로 개선의 여지가 있는 부분입니다.

퍼포먼스

디스턴스 필드 AO 는 중사양 PC 와 PS4 에서 실행 가능하도록 훨씬 속도를 높였습니다. 이제 그 비용도 훨씬 안정화되어, 오브젝트 밀도에 약간 좌우될 뿐 거의 비용이 같아졌습니다.

고정 카메라에 거의 평면 표면의 경우, 이 새로운 방법은 1.6 배 빠릅니다. 폴리지가 있고 카메라가 빠르게 움직이는 경우, 새로운 방법은 5.5 배 빠릅니다. PS4 에서 전체 게임 씬에 대한 디스턴스 필드 AO 비용은 3.7ms 입니다.

테크니컬 디테일

주요 최적화는 카메라 주변을 따르는 글로벌 디스턴스 필드의 사용입니다. 일반적인 오브젝트별 디스턴스 필드 전부를 몇몇 카메라 주변 볼륨 텍스처, 소위 클립맵에 합성해 넣는 식으로 만듭니다. 새롭게 보이는 영역과 씬 변화에 영향받는 것들만 업데이트해 주면 되므로, 합성 비용은 많이 들지 않습니다.

클립맵 텍셀 크기 시각화 - 각 클립맵마다 색이 다릅니다.

image alt text

글로벌 디스턴스 필드는 오브젝트 디스턴스 필드보다 해상도가 낮으므로, 모든 것에 사용할 수는 없습니다. 스카이 오클루전에 대한 콘 트레이스 계산시, 오브젝트 디스턴스 필드는 셰이딩이 이루어지는 지점 근처에서 샘플링되는 반면, 훨씬 빠른 글로벌 디스턴스 필드는 더욱 멀리서 샘플링됩니다.

글로벌 디스턴스 필드 vs 오브젝트 디스턴스 필드에 대한 레이 트레이싱 시각화입니다. 글로벌 디스턴스 필드의 표면이 얼룩덜룩해지고 얇은 오브젝트가 사라집니다.

image alt text

콘텐츠 브라우저 고급 검색

이제 콘텐츠 브라우저에 고급 검색 문법이 지원됩니다. 언리얼 엔진 4 는 수백명의 개발자로 이루어진 몇몇 팀을 포함해서, 콘텐츠 라이브러리의 애셋이 수십만 단위에 이르는 대규모 프로젝트 다수에 사용되고 있습니다! 이러한 새로운 검색 기능 덕에 어떤 규모의 프로젝트에서든 콘텐츠를 쉽게 찾을 수 있습니다.

image alt text

기존 단순 검색 문법을 강화시키는 방법으로 애셋 메타데이터에서의 키->값 짝을 일치시키는 것 뿐만아니라 다음과 같은 특수 키도 제공합니다:

  • Name - 애셋 이름에 대해 테스트합니다.

  • Path - 애셋 경로에 대해 테스트합니다.

  • Class (또는 Type) - 애셋 클래스에 대해 테스트합니다.

  • Collection (또는 Tag) - 애셋이 들어있는 콜렉션 이름에 대해 테스트합니다.

콜렉션 개선

이번 릴리즈에는 콜렉션 관련 변경사항이 다수 포함되어 있어, 콜렉션 중첩, 스마트 콜렉션, 태깅 등 게임의 애셋 관리에 도움이 되는 기능이 추가되었습니다.

중첩 콜렉션
  • 애셋 콜렉션은 이제 계층구조식 체계 정리가 가능합니다.

    image alt text

  • 자손 콜렉션은 콜렉션에 주어진 맥락 메뉴에서 "New…" (추가) 옵션을 선택하여 새로 만들 수 있습니다. 다른 방법으로는, 드래그 앤 드롭을 통해 콜렉션 부모를 설정할 수 있습니다.

    image alt text

동적 콜렉션
  • 동적 콜렉션은 고급 콘텐츠 브라우저 검색 문법의 위력을 활용하여 콘텐츠 브라우저 필터 생성 및 공유가 가능합니다.

    image alt text

  • 콘텐츠 브라우저 텍스트 검색으로 할 수 있는 것이면 무엇이든 동적 콜렉션으로 저장하여, (정적이든 동적이든) 다른 콜렉션 레퍼런싱도 가능합니다.

  • 콘텐츠 브라우저 텍스트 필터 오른쪽의 "Save" (저장) 버튼을 사용하여 동적 콜렉션을 생성할 수 있습니다.

    image alt text

빠른 애셋 관리
  • 새로 생긴 Quick Asset Management (빠른 애셋 관리) 체크 박스를 사용하여 하나의 애셋을 다수의 콜렉션에 동시에 빠르게 추가시킬 수 있습니다.

    image alt text

  • 이들은 콜렉션 뷰 자체 안에서, 또는 선택된 애셋의 맥락 메뉴를 통해서도 사용 가능합니다.

    image alt text

안정성 개선
  • 콜렉션은 이제 자동으로 그 안에 들어있는 리디렉터를 따르도록 하여, 애셋을 콜렉션에서 제거 또는 이름변경했을 때 사라진 것처럼 보이도록 만드는 문제가 해결됩니다. 추가적으로 이제, 콘텐츠 브라우저를 통해 리디렉터 고치기(fix up, 궁극적으로 제거)시 이제 그 대상에 포함됩니다.

상태 보고 개선
  • 각 콜렉션의 행 항목 우측편에 작은 상태 표시기가 생겼습니다. 콜렉션의 현재 상태에 따라 색이 변하는데, 각 색의 뜻은 다음과 같습니다:

    • 빨강 - 콜렉션이 일종의 잘못된 상태이거나 읽기전용 상태입니다. 툴팁에서 문제 해결 방법을 확인할 수 있습니다.

    • 주황 - 콜렉션이 소스 콘트롤의 최신 버전보다 뒤쳐져 있습니다.

    • 파랑 - 콜렉션에 저장하지 않은 로컬 변경사항이 있습니다. 저장 또는 자동 체크인이 실패한 경우, 또는 콜렉션에 리디렉터가 따르는 경우 발생할 수 있습니다.

    • 초록 - 콜렉션이 비어있지 않고 최신 상태입니다.

    • 회색 - 콜렉션이 비어있고 최신 상태입니다.

애셋 툴팁 개선
  • 주어진 오브젝트에 대한 정적 콜렉션은 이제 콘텐츠 브라우저에서 툴팁의 일부로 표시됩니다.

    image alt text

플러그인 생성 마법사

언리얼 엔진 4 용 C++ 플러그인을 새로 만들기가 쉬워졌습니다! 새로운 플러그인 마법사를 살펴보세요.

image alt text

  • (창 메뉴에 있는) 플러그인 브라우저를 통해 새 플러그인을 만들 수 있습니다!

  • 새 플러그인 이름을 짓고 몇 가지 프리셋 플러그인 유형(공백, 툴바, 독립형 창)에서 선택할 수 있을 것입니다.

  • 그러면 플러그인 컴파일에 필요한 초기 파일을 전부 만들어 에디터에 로드할 것입니다.

커브 에디터 개선

커브 에디터가 여러가지로 개선되어 커브 키와 탄젠트 조작이 더욱 쉬워졌습니다.

image alt text

  • 가운데 마우스 버튼으로도 선택된 키프레임이나 탄젠트를 이동할 수 있습니다.

  • 이제 다중 탄젠트 선택 & 조작이 지원됩니다.

  • 이제 선택시 Ctrl (토글) & Shift (기존 선택에 추가)가 적용됩니다.

  • Shift 를 누르면 이동을 한 축으로 제한시킵니다.

  • 내비게이션: Alt + 가운데 마우스 버튼으로 뷰 이동, Alt + 오른쪽 마우스 버튼으로 뷰 줌 레벨 조정입니다.

  • 새로운 탄젠트 표시 옵션: 탄젠트 항상 표시, 선택된 점에 대한 탄젠트 표시, 탄젠트 표시 않음

  • 커브에 대한 사전-사후 무한 외삽 옵션이 새로 생겼습니다.

  • 키 추가 지점을 예상하기가 쉬워졌습니다.

    • 편집할 커브가 하나뿐인 경우, 키는 마우스 아래에만 추가됩니다.

    • 대상 커브가 여럿인 경우, 커브 클릭시 그 커브 안에 키가 추가되며, 커브 밖 클릭시 모든 커브에 키가 추가됩니다.

    • 메뉴 항목의 텍스트가 변경되어 무슨 일이 벌어질지 보다 명확히 알 수 있습니다.

블루프린트에서 다중 반환 노드

함수는 이제 여러 개의 반환 노드를 가질 수 있습니다. 실행이 반환에 도달하자마자 함수의 실행은 중단됩니다. 블루프린트 함수에서의 이른 반환이나, 분기를 통한 다른 값 반환을 위해 사용할 수 있습니다.

image alt text

블루프린트에서 커스텀 오브젝트 생성

블루프린트에서 이제, (액터/컴포넌트뿐만 아니라) 베이스 오브젝트 유형도 스폰시킬 수 있습니다. Construct Object From Class 노드는 클래스를 받아서 그 유형의 오브젝트를 새로 생성합니다. 액터가 아니라는 유형만 빼고는 Spawn Actor From Class 와 비슷합니다.

image alt text

  • "Outer" 입력은 새 오브젝트의 오너 역할을 하여, 생성되는 오브젝트의 수명을 제어합니다.

  • 액터 클래스의 경우, 여전히 Spawn Actor From Class 노드를 사용합니다. 그리고 위젯의 경우, Create Widget 노드를 사용합니다. 추후 버전에서 이렇게 여러가지로 나뉜 것을 합칠 수도 있습니다.

블루프린트 클래스 디폴트

블루프린트에서 이제, 새로운 Get Class Defaults 노드를 통해 클래스의 디폴트에 접근할 수 있습니다. 데이터 전용 블루프린트 작업시 인스턴스를 만들지 않고도 해당 블루프린트 값에 접근할 수 있어 유용하게 쓰일 수 있습니다.

image alt text

  • 출력 핀이 늘어 거추장스러워지지 않도록 하려면, 노드의 디테일을 통해 특정 디폴트를 표시/숨기면 됩니다.

레벨 블루프린트 통신

레벨 블루프린트는 이제 인터페이스를 통해 통신 가능합니다. 클래스 블루프린트와 마찬가지로 인터페이스 함수를 적용 및 구현 가능합니다. 인터페이스를 레벨 블루프린트에 추가한 이후에는, 인터페이스 메시지 노드를 통해 (스트리밍 레벨을 타겟으로 하여) 호출 가능합니다.

image alt text

  • Get Streaming Level 노드를 사용하여 통신할 레벨을 구합니다.

    • Get Streaming Level 을 사용하여 특정 레벨을 타겟으로 해야 하므로, 서브 레벨에만 통합니다.

수학 표현식 최적화

Math 표현식 노드가 일반 노드보다 높은 퍼포먼스를 내도록 최적화시켰습니다. 이제 Math 표현식 노드는 그와 동일한 일련의 연산/함수 노드 시리즈 표현식을 사용했을 때보다 약 두 배 빠릅니다.

image alt text

블루프린트 애셋 ID

블루프린트에서 요청시 바로 애셋 로드가 가능해졌습니다. 블루프린트에 새로 노출된 두 가지 데이터 유형이 있는데, "Asset ID" (애셋 ID)와 “Class Asset ID” (클래스 애셋 ID)입니다. 애셋 ID 는 로드 또는 언로드된 애셋을 나타내며, “Resolve Asset” 노드를 사용해서 오브젝트 속으로 분해해 들어갈 수 있습니다. 애셋이 로드되지 않은 경우, “Resolve Asset” 노드는 유효하지 않은 오브젝트를 반환합니다. “Load Asset” 노드를 사용해서 애셋을 로드할 수 있습니다. 비슷하게 “Class Asset ID” 는 클래스 속으로 분해해 들어갈 수 있으며, “Load Asset Class” 노드로 로드할 수 있습니다.

image alt text

몽타주 엘리먼트 타이밍 인터페이스

실행시간에 애니메이션 실행시 몽타주 이벤트 발동 순서를 조절하는 데 도움이 되는 새 패널이 몽타주 에디터에 추가되었습니다.

image alt text

비선형 애니메이션 블렌딩

애니메이션 포즈끼리의 전환 사이에 여러가지 다양한 블렌딩 함수가 지원됩니다!

image alt text

기존에는, 선형 또는 큐브형 블렌딩만 지원되었습니다. 이제 선형, 큐브형, 헤르밋 큐브형, 사인형, 2차형, 원형, 지수형, 커스텀 등 여러가지 중에서 선택 가능합니다. 대부분의 유형에서 커브에 부드럽게 드나들도록 하는 별도의 제어가 가능합니다.

커스텀 옵션은 “커브 플로트” 애셋이 필요합니다. 만든 이후에는, 관련 노드의 디테일 패널에서 할당할 수 있습니다:

image alt text

image alt text

그러면 원하는 어떤 블렌딩도 지정 가능합니다. 커브의 길이는 정규화 & 스케일 하향 조절을 통해 지정된 블렌드 시간에 맞추고 0-1 범위 밖의 값은 그 안에 맞도록 제한시킵니다 (이 제한은 곧 해제될 것으로 기대되니, 이 곳을 확인해 주세요). 커스텀 커브에 시스템이 지정되지 않은 경우, 예비로 선형 블렌드가 쓰입니다.

image alt text

본 주도형 애니메이션 콘트롤

하나 이상의 본 모션에 동적으로 영향을 끼치는 "Driver" 본이 생겼습니다. 장신구가 붙은 캐릭터에 좋습니다. 애니메이션 도중 지오메트리 겹침 현상을 피할 수 있습니다. 많은 수의 블렌딩이 사용될 때도 말이지요.

image alt text

위 예제에서 붙은 악세사리에는 (초록색) 저작된 애니메이션이 없으며, 캐릭터 허벅지 폰의 함수로써 양축 구동중입니다. 이 부분은 모두 실행시간에 계산되므로, 애니메이션 블렌딩은 심지어 별다른 트윅 수작업 없이도 여기서 잘 마무리됩니다.

멀티플라이어로 "Driver" 값을 바로 설정하고, 완전히 새로운 범위로 리매핑하거나, 그냥 커브 애셋을 사용하여 모션을 구동시키면 됩니다. 커브 사용이 보통 가장 좋은 접근법인데, 자연스러운 반응을 정의하고 실시간 변화를 확인하며 대화식으로 점/탄젠트 조정이 가능하기 때문입니다.

본 주도형 애니메이션 콘트롤러에 대한 새로운 세팅은 이렇습니다:

image alt text

애니메이션 트랜지션 룰

이번 릴리즈에는 애니메이션 블렌딩 트리, 특히나 트랜지션 룰 작동 방식이 개선되었습니다.

애니메이션 애셋 오버라이드 처리 개선

트랜지션 룰의 Time Remaining 같은 노드는 이제 자손 애니메이션 블루프린트에서 애니메이션을 덮어쓴 데 따른 애니메이션 길이 변화에 정상 반응합니다. 즉 트랜지션 룰에 레퍼런싱된 애니메이션이 더이상 모든 자손 애니메이션 블루프린트에서 동일한 길이일 필요가 없다는 뜻입니다.

연관성이 가장 높은 애니메이션 플레이어 레퍼런싱

스테이트 머신 관리를 보다 용이하게 하기 위해, 앞으로 변화될 애니메이션을 특정해 지정하기 보다는, 항상 원본 상태에서 가중치가 가장 높은 애니메이션을 선택하는 새로운 Getter 클래스를 사용할 수 있게 되었습니다. 사용할 수 있는 노드는 다음과 같습니다:

image alt text

커스텀 블렌드 그래프 개선

이제 커스텀 블렌드 그래프에 부가 정보가 노출되어 단순 일회성 이상의 커스텀 트랜지션 애니메이션에도 사용할 수 있습니다. 커스텀 블렌드 그래프에서 해당 트랜지션 노드 및 원본/대상 상태 관련 정보 제공을 위해 사용할 수 있는 노드는 다음과 같습니다:

image alt text

트랜지션 룰에서와 마찬가지로 애셋 플레이어를 레퍼런싱하는 Getter 메소드를 구할 수도 있습니다.

애니메이션 커브 이밸류에이션 변화

애니메이션의 업데이트 단계에서 일어나던 애니메이션 커브 이밸류에이션(평가)이 이제 평가 단계로 이동되었습니다. 그로 인해 다음과 같은 이점이 생겼습니다.

  • 가중치 혼합시에도 커브의 가중치가 제대로 평가됩니다.

    • 캐시 노드

    • 애디티브 노드: 애니메이션 본 트랜스폼 진행에 따라 베이스에서 현재 포즈까지 더하기식 커브 데이터의 델타를 적용합니다.

    • 레이어드 노드: 어느 커브가 조인트의 어느 부분에 영향을 끼치는지 알지 못하기에 정상 작동하도록 만들기가 조금 더 까다로웠습니다. 이제는 커브 블렌딩 방식 옵션을 제공합니다.

      • Max Weight(최대 가중치): 블렌드 포즈에서의 커브 최대 가중치를 선택합니다.

      • Normalize by Weight(가중치로 정규화): 모든 커브에 대해 블렌딩된 포즈의 모든 가중치를 더한 다음 1 로 정규화시킵니다.

      • 가중치로 블렌딩: 그냥 (가중치 * 커브 값) 을 더합니다.

image alt text

  • 병렬 평가를 사용하는 경우 커브 이밸류에이션이 멀티 스레드로 이동됩니다.

  • 이를 통해 결국 본 트랜스폼에서 커브를 구동시키거나 그 반대 작업을 할 수 있는 노드를 만들 수 있습니다.

  • 그러나, 아직 평가되지 않은 (틱은 하되 평가는 안된) 커브가 필요한 경우, 최신 데이터를 구할 수 없을 것입니다. 커브 데이터는 전에 노티파이로 취급되던 것과 반대로 이제는 본 트랜스폼으로 취급됩니다.

애니메이션 애셋 메타데이터 지원

이제 애니메이션 애셋에 추가시킬 수 있는 메타데이터를 지원합니다. 메타데이터는 Anim Meta Data 클래스에서 파생된 Blueprintable 클래스입니다. 이를 통해 애니메이션 애셋에 커스텀 메타데이터 추가가 가능합니다. 애님 시퀀스, 애님 몽타주, 애님 컴포짓, 블렌드 스페이스 모두 지원됩니다.

image alt text

C++ 에서 GetMetaData() 메소드를 호출하거나, 애님 몽타주에서 GetSectionMetaData() 를 사용하는 것으로 애니메이션 애셋에서 해당 데이터를 질의할 수 있습니다.

사운드 퀄리티 레벨

사운드 디자이너에게 오디오 관련해서 저사양 머신/디바이스의 메모리 사용량과 (일정 수준까지) 퍼포먼스 관리를 할 수 있도록 해주는 신기능이 추가되었습니다.

사용가능한 사운드 퀄리티 레벨은 프로젝트 세팅의 오디오 섹션에서 정의합니다. 각 퀄리티 레벨은 현재 오디오 디바이스에 의해 생성된 오디오 채널 최대 수를 지정할 수 있습니다 (일부 플랫폼, 특히 안드로이드는 그 값을 여전히 낮은 수로 제한시킬 수 있습니다).

image alt text

사운드 큐에서 Quality Level 사운드 노드를 배치하면 프로젝트 세팅에 정의된 각 퀄리티 레벨에 대한 입력 핀이 제공되어, 활성 퀄리티 레벨에 연결된 브랜치만 실행됩니다. 이를 통해 로드되는 변종 수를 줄이거나, 저품질 웨이브 파일을 지정하는 데 사용할 수 있습니다.

image alt text

독립형 게임 플레이시, 퀄리티 레벨은 게임 유저 세팅을 통해 지정되며, 해당 퀄리티 레벨에 필요한 사운드 웨이브만 메모리에 로드됩니다. 기본값은 적합한 GameUserSettings.ini 파일을 통해 게임별 또는 플랫폼별로 설정 가능하며, 그 세팅 UI 를 통해 값 설정이 가능합니다. 현재, 퀄리티 변경시 효과 적용을 위해서는 재시작이 필요합니다.

에디터에서 플레이의 경우 레벨 에디터 플레이 세팅을 통해 사용할 퀄리티 레벨을 지정할 수 있습니다. 이 값을 변경하면 플레이 세션 활성화 도중 작동하여 새로운 사운드는 현재 퀄리티 레벨을 사용할 것입니다.

커스텀 오디오 감쇠 커브

이제 사운드 감쇠가 단순 내장 알고리즘에 국한되지 않은, 별도로 정의된 커스텀 커브에 따라서도 가능합니다.

감쇠 세팅에서 Distance Algorithm 을 "Custom" 으로 설정하면 커스텀 커브 섹션이 나타나는 것이 보입니다. 콘텐츠 브라우저에서 외부 커브 애셋을 지정해도 되고, 디테일 패널에서 직접 커스텀 커브를 정의해도 됩니다.

image alt text

액터 틱 간격

이제 틱 함수가 실행되는 간격을 지정하여, 별다른 부하나 복잡한 타이머 없이도 프레임별 틱 실행에 따른 부하를 줄일 수 있게 되었습니다.

최종 사용자에게는 액터와 컴포넌트 디폴트 프로퍼티를 통해 노출되며, 프로그래머는 다른 Tick Function 프로퍼티와 비슷하게 C++ 에서 설정 가능합니다.

image alt text

유의해야 할 구현 세부사항 몇 가지:

  • 모든 틱 함수는 등록된 첫 프레임에 실행되고, 거기서부터 정의된 간격을 기다린 뒤 다음 틱이 일어납니다.

  • 이미 틱 중인 함수의 틱 간격을 변경해도 다음 예정 틱이 바뀌지는 않습니다. 효과를 즉시 적용시키려면 먼저 틱을 끄고, 간격을 조정한 뒤, 틱을 다시 켜야합니다.

  • 틱 함수는 다음 틱 스케쥴을 잡을 때 넘친 부분을 고려하여 가급적 지정된 간격에 근접해서 일어나도록 합니다. 예를 들어 함수가 1 초마다 실행되도록 지정되었는데, 지난 틱 이후 1.1 초가 지난 후 틱 함수가 실행되었다면, 다음 틱은 0.9 초 후에 일어나도록 스케쥴을 잡습니다. 하지만 프레임 도중 그 간격이 여러번 겹쳐 발생했다 하더라도 한 프레임에 틱 함수가 두 번 이상 실행되지는 않습니다.

  • 틱 함수의 DeltaTime (경과 시간)은 틱 간격과 상관없이 동일하게 유지됩니다. 이 함수의 지난 번 틱 이후 걸린 시간이 아닌, 항상 해당 프레임의 경과 시간입니다.

  • 액터의 커스텀 타임 딜레이는 틱 간격에 적용되지 않습니다. 틱이 발생되는 빈도는 애별 액터의 시간 딜레이와는 무관하게 일정하며, 그 시간 딜레이는 틱 함수에 전달된 경과 시간에만 적용됩니다.

액터 침범 감지

침범 감지 안정성이 높아지고 더욱 많은 상황에서 작동합니다. 침범에 대한 커스텀 옵션을 새로 추가하기도 했습니다.

image alt text

액터 스폰시 Spawn Even If Colliding (충돌한다 해도 스폰) 옵션(C++ 는 bNoCollisionFail)을 확장, 스폰 지점에서 지원되는 콜리전 처리 메소드가 넷이 되었습니다:

  • 그냥 거기 스폰합니다.

  • 가능하면 주변 적합한 위치에 스폰하고, 아니면 그냥 거기 스폰합니다.

  • 주변 적합한 위치가 있을 때만 스폰하고, 아니면 스폰하지 않습니다.

  • 그냥 스폰하지 않습니다.

기존 블루프린트는 올바른 선택 사항을 자동으로 선택하도록 업데이트될 것입니다. 일부 코드는 폐기되어 수동 업데이트해 줘야 할 것입니다.

액터 클래스에 Spawn Collision Handling Method 라는 블루프린트 노출 멤버가 새로 생겨 스폰 충돌 기본 처리 방식을 조절할 수 있습니다. Spawn Actor 노드의 세팅이나 함수 호출을 덮어쓸 수 있습니다.

Movement Component 포함 액터의 경우, 업데이트된 컴포넌트는 주요 콜리전 모양이라 가정하고 유일한 침입 검사 대상 컴포넌트가 됩니다. 다른 액터의 경우, 세팅이 적합한 모든 컴포넌트를 대상으로 검사합니다. 주의할 점이라면 이로 인해 액터 업그레이드 후 스폰이 안되는 상황이 발생할 수 있는데, 그렇다면 콜리전 세팅, 처리 방법, 스폰 트랜스폼을 다시 한 번 확인하시기 바랍니다.

포스트 프로세스 블렌딩

포스트 프로세스 "블렌더블" 은 각기 다른 상태의 포스트 프로세스 이펙트를 전환시키는 데 사용되는 것인데, 이 시스템이 강화되었습니다.

이제 각 블렌더블에 대해 블렌딩 가중치 값을 설정할 수 있습니다. 이 블렌딩 가중치는 블루프린트나 C++ 코드에서 실행시간에 변경할 수 있으므로, 포스트 프로세싱 전환을 가지고 재미난 작업을 할 수 있습니다.

또한 이제 포스트 프로세스 볼륨 바로 안에서 포스트 프로세스 세팅을 "인라인" 방식으로 정의하거나, 독립형 블렌더블 애셋으로 만들어 여러 오브젝트에 공유시킬 수도 있습니다!

image alt text

image alt text

또 자신만의 커스텀 블렌더블 세팅 정의를 보다 쉽게 할 수 있도록 만들었습니다. 더이상 엔진의 내장 PostProcessSettings 구조체를 변경할 필요가 없으며, 그 대신 위의 Light Propagation Volume Blendable 같은 세팅으로 새 구조체를 정의할 수 있습니다.

마지막으로 블루프린트를 사용해서 실행시간에 블렌더블의 블렌딩 가중치 값을 편집하는 법을 보여주는 예제입니다:

image alt text

런타임 애셋 캐시

어떤 게임에서는 게임 발매시 포함되지 않은 애셋의 로컬 사본을 저장하는 기능 지원이 필요합니다. 예를 들어 순차 생성 애셋이나 (광고 그래픽처럼) 서버에서 오는 애셋이 많은 경우입니다. 새로운 런타임 애셋 캐시는 일반 애셋 캐시 시스템으로, 실행시간 도중 환경설정 가능한 애셋 버킷으로 생성되는 데이터를 일관되게 저장하기 위해 사용할 수 있습니다.

image alt text

런타임 애셋 캐시에는 다음과 같은 특징이 있습니다:

  • 다수의 버킷 그 각각에는 사용자가 의도한 유형의 애셋, 예를 들변 캐릭터 이미지 캐시와 광고 이미지 캐시가 별도로 저장됩니다.

  • 각 버킷마다 크기를 별도로 환경설정할 수 있습니다.

  • 애셋 버전관리를 통해, 캐시를 쓸 수 없게되면 캐시 항목을 다시 만들 수 있습니다.

  • 동기 & 비동기식 캐시 질의가 가능합니다.

  • 캐시가 지정된 크기보다 커지면, 오래된 항목부터 지웁니다.

볼륨 데칼 (실험단계 전용)

3D 함수 필드 렌더링은 지오메트리 묘사용 폴리곤의 대안입니다. 그림자, 불리언 연산, 스무딩, 앰비언트 오클루전, 레이 트레이싱, 디포메이션과 같은 하드 렌더링 문제 해결에 적합한 것이지요. 2D 및 3D 거리 함수는 엔진 내에서 폰트, 라이트맵, 디스턴스 필드 섀도우/앰비언트 오클루전 등 여러 곳에서 이미 사용중입니다. 새로운 볼륨 데칼 기능을 통해 보통은 디퍼드 패스에 사용할 수 있는 모든 정보, 이를테면 앰비언트 오클루전, 스크린 스페이스 리플렉션, 라이팅, 뎁스 오브 필드를 포함한 전부를 사용해서 거리 함수가 불투명 오브젝트를 GBuffer 속에 렌더링해 넣을수 있도록 해줍니다. 다음 그림에서 그릇이 볼륨 데칼입니다.

image alt text

오브젝트 생성 방식은 (아래 그림의 왼쪽에서 오른쪽으로)

  • 데칼 중심까지의 거리와 텍스처 투명으로 구체를 정의합니다.

  • 또다른 구체를 정의하고 그 둘의 최대값을 취해서 (불리언 교차) 구체를 정의합니다.

  • 구체를 움직여 모양을 조절합니다.

  • 구체를 또하나 추가하고 머티리얼을 변경합니다 (불리언 빼기).

  • 모양을 다시 정의합니다.

image alt text

구체에 대한 거리 함수 정의 방식은 이렇습니다:

image alt text

이 기능은 마무리되지 않은 상태입니다. 그림자 드리우기, 노멀 맵 지원, 간접광이 빠진 상태이며, 퍼포먼스와 퀄리티 최적화 역시 이루어지지 않았습니다. 추가로 이 기능은 항상 GPU 비용이 많이 발생할 것입니다 (거리 함수는 각 픽셀당 아마도 수백번의 평가가 필요합니다). 앞으로 머티리얼 함수, 그림자 드리우기, 문서 등을 추가해서 다듬을 것이지만, 실시간에 적합할 만큼 빨라질 일은 절대 없을 것입니다.

UE4 문서 태그, 버전, 스킬 레벨

  • 문서 페이지에 이제 스킬 레벨, 엔진 버전, 카테고리 태그가 페이지 상하단에 표시되어 태그가 같은 다른 페이지를 쉽게 찾을 수 있습니다.

    image alt text

  • 이제 사이트맵 필터링이 펼쳐지는 트리 뷰 형태로 되어, 스킬 레벨 및/또는 엔진 버전별로 표시됩니다. 필터가 적용되면, 트리가 펼쳐져 일치되는 항목이 표시되면서 일치되지 않는 항목은 회색으로 탈색되어 보입니다.

    image alt text

  • 페이지의 스킬 레벨, 엔진 버전, 태그 역시 사이트맵으로 링크되어 필터가 자동으로 적용됩니다. 태그를 클릭하면 그 태그가 붙어있는 페이지만 표시하도록 사이트맵에 필터를 적용합니다.

    image alt text

  • 튜토리얼 (비법, 퀵스타트 등) 링크에는 그 튜토리얼의 스킬 레벨과 엔진 버전이 표시됩니다:

    image alt text

추가되고 업데이트된 UE4 문서

비동기 실시간 오디오 압축해제

실시간 ogg-vorbis 기반 오디오 압축해제를 지원하는 플랫폼(PC, 엑스박스 원, 맥, 안드로이드)는 이제 가능하면 비동기 압축해제를 통해 메인 게임 스레드 작업을 중단시키지 않습니다.

피처 팩 & 템플릿용 공유 리소스

이제 템플릿과 피처 팩에 공유 리소스가 지원됩니다. 템플릿과 피처 팩 모두 포함시킬 다른 피처 팩을 지정하는 방식으로 가능해 졌습니다. 즉 모든 템플릿에 공통인 애셋 다수가 딱 하나만 존재한다는 뜻입니다. 더이상 블루프린트와 C++ 버전 템플릿에 공유되는 애셋이 중복되지도 않는다는 뜻입니다.

다중 플랫폼이 지원되므로, 모바일 & 데스크톱 타겟용 템플릿 또는 피처팩에 다양한 애셋이 존재할 수 있습니다. 한 플랫폼에는 디테일을 낮추고 다른 데는 정상으로 놔두는 등으로 유용하게 쓰입니다.

HTML5 개선 (쉬운 셋업, 아마존 S3 지원, 네트워킹)

더이상 HTML5 개발 및 웹 브라우저용 게임 패키징 시작을 위한 써드 파티 SDK 설치를 할 필요가 없습니다! 패키징은 그냥 파일 -> 패키지 메뉴에서 HTML5 를 선택하면 됩니다.

그 외 개선사항:

  • 압축 자바스크립트 방출로 빌드 크기가 대폭 줄어듭니다.

  • 패키징 도중 로컬 테스트용 압축 파일 서빙 처리를 위해서 게임에 작은 웹 서버가 포함됩니다.

  • 이제 HTML5 네트워킹이 지원됩니다! 이제 HTML5 클라이언트를 지원하는 데디케이티드 서버 생성에 사용할 수 있는 언리얼 빌드 툴 환경설정 변수가 생겼습니다.

  • 이제 아마존 S3 패키징에 업로드가 지원됩니다. AWS 용 인증서를 채우고나면, 빌드가 S3 에 업로드되고, 게임이 S3 에서 브라우저에 바로 서빙됩니다.

    image alt text

Release Notes

AI

  • New: A dedicated AI asset category has been created and is available in Content Browser's context menu.

    image alt text

  • New: Added log errors when EQS (Environmental Querying System) queries take longer than 0.25 seconds (cumulatively). When the query completes we also log how long each test took to perform.

  • New: Added support for trace based projection in EQS generators.

  • New: Added Z offset for circle center(s) in the On Circle EQS generator that uses data bindings.

  • New: AI Controller's Path Following Component has been exposed to blueprint and can be tweaked via blueprint-created classes' default properties.

  • New: Blackboard assets have been made blueprint types to allow blueprint users to interact with them.

  • New: Exposed filtering and scoring options for multiple contexts of EQS query.

  • Fixed "Skip Item" in EQS not always showing results in debug view.

  • Fixed "Skip Item" acting like "Pass" and in some cases like "Fail" when handling filtering.

  • Fixed crash when unregistering the Pawn Actions Component when the Controlled Pawn is pending kill pending.

  • Fixed AI stimuli never expiring which resulted in AI never forgetting perceived actors.

  • Fixed crash in pathfinding batch EQS test.

  • Fixed crash on running a EQS query without valid options.

  • Fixed EQS pathing grid generator getting stuck on points inside geometry.

  • Fixed restoring EQS query asset with multiple options.

  • Fixed crash when doing a pathfinding batch EQS Query Test when test items are not considered valid.

  • Fixed "On Circle" EQS generator crashing if its query owner is not an actor.

  • Blueprint compilation and loading are much more efficient.

Behavior Tree
  • New: Added dynamic subtree injection support for behavior trees.

  • New: Added new restart mode for behavior tree tasks, they can now ignore restart which leads back into running the same task again. Use case depends on task type and its parameters: some of them work better with restarting every time (e.g. movement), some should finish their action (e.g. animation).

  • Blueprint based behavior tree tasks will now ignore Finish Execute and Finish Abort calls depending on state of task, fixed latent blueprint actions not being cleared when task finishes execution.

  • Fixed behavior tree decorators losing blackboard observers.

  • Fixed behavior tree restarts from blackboard decorator in On Value Change mode.

  • Fixed Behavior Tree tag cooldown decorator testing the current value of the tag cooldown end time against its duration. (Duration in the Tag Cooldown decorator should only be applied when we deactivate, not used for comparison.)

  • Fixed behavior tree's search update for branch with loop decorator.

  • Fixed bug with aux nodes losing all changes in memory block during discarded search.

  • Fixed crash on pasting composite decorator node in behavior tree editor.

  • Fixed drag & drop operation for composite decorators.

  • Fixed duplicated subnodes in behavior tree editor.

  • Fixed order of behavior tree nodes when creating a new node from existing pin.

  • Fixed rare crash on aborting behavior tree task connected to parallel node.

  • Fixed Rotate to Face task getting stuck on receiving abort event.

  • Replaced Has Reached Goal decorator with Is At Location.

Debugging Tools
  • New: Added "-LogNavOctree" command line parameter, to log Nav Octree debug geometry to visual logger, on stop logging.

  • New: Added new shapes to log with Visual Logger: mesh, convex polygon, navarea / pulled convex and Nav Octree dump from given bounding box.

  • New: Minor improvements to gameplay debugger.

    • Added multiple logs selection to Visual Logger tool, to analyze all selected objects simultaneously.

    • Added debug camera to gameplay debugger, to have a way to fly around (Tab key to switch between cameras).

    • Added alternate keyboard bindings to gameplay debugger, for keyboards without numpad (can be enabled in gameplay debugger settings). It uses Alt + [regular number] shortcuts.

  • Added more data about EQS queries to vlogs.

  • EQS score for the winning item will no longer be set to 1 when picking a single item. That way, scores can be compared appropriately since none of the other scores have been normalized. They will all be on the same relative scale.

  • Fixes Gameplay Debugger's client server issues. Everything should replicate to clients correctly again.

  • Tweaked description width for EQS debug display from 200 to 312 to allow for slightly longer descriptions without overlapping the next column. Item Description Width, Item Score Width, and Test Score Width can now be tweaked in code (they are now variables rather than in-line values).

  • New: Added a dedicated blueprint-bindable event to AI Perception Component that's being triggered for every newly sensed stimulus.

  • New: Added bUseNavAgentGoalLocation to pathfinding Reached tests for moving to Actors. (Sometimes it is useful to move towards / test against the actual actor's location, rather than its location projected into the navigation system.)

  • New: Added custom navigation export for skeletal meshes.

  • New: Added navigation agent selectors to navmesh bounds volume, defining zones per agent.

  • New: Added navigation updates for destructible mesh.

  • New: Added new option to navigation link, which allows connecting to cheapest area in snap radius.

  • A bug in editor-time navigation system, resulting in removing all the saved data in static navmesh on map load, has been fixed.

  • Abstract navigation data actor will no longer be visible in scene outliner.

  • Added timeout for path following's waiting state.

  • Fixed a bug in navigation system preventing collision-less shape components from affecting navmesh generation by other means (like nav areas).

  • Fixed bounds of "standalone" nav relevant components (without navigation parent), which caused them to be ignored during navmesh generation.

  • Fixed crash in crowd movement when AI is using direct path to location.

  • Fixed crowd simulation updates for moving without pathfinding.

  • Fixed Floating Pawn Movement component's issue resulting in teleporting AI following a path, ignoring Max Speed limits.

  • Fixed geometry projection for navmesh walking mode using cached location even if pawn moved far away on Z axis.

  • Fixed handling of custom navigation links loaded with map before navigation system is created.

  • Fixed issue with navigation system being stuck on Initial Lock in editor mode.

  • Fixed missing abstract navigation data (handling direct paths) in game.

  • Fixed missing navigation links with big snap height.

  • Fixed navigable collision export from convex elements of Body Setup not using element's local transform.

  • Fixed navigation relevancy and update order of custom navigation links in Nav Link Proxy actor.

  • Fixed Navigation System not handling properly deep Actor hierarchies. Now you can have Actors attached to Actors attached to Actors and all of them will affect navmesh generation just as expected!

  • Fixed updating Nav Relevant Components attached to an actor without collision component.

  • Navmesh's rendering component has been made transient and we made sure any navigation rendering component saved with old maps won't break anything.

  • Updated deprecation messages for Navigation System's "get random point" functions family to be more precise.

Animation

  • New: "Observe Bone" nodes for debugging animations.

  • These let you print out the current position of a bone (at that particular point in the animation tree) and have a couple of options for coordinate space and whether to display relative to the reference pose.

  • The observe bone nodes are meant for debugging. They don't cost much but are not currently compiled out of a shipping build, so you should probably remove them when you are done working with the graph.

    image alt text

  • New: Added turntable feature for Persona.

    image alt text

  • New: Added a "Remove this LOD" button to each LOD (after 0) in Persona's mesh mode.

  • New: Added an icon overlay to the 3D thumbnail for Animation Blueprint assets in the Content Browser.

  • New: Added 'Blend Out Trigger Time' to AnimMontages.

    • Time from Sequence End to trigger blend out.

    • <0 means using Blend Out Time, so Blend Out finishes as Montage ends.

    • >=0 means using "Sequence End - Blend Out Trigger Time" to trigger blend out.

    • Also added as an optional parameter to Play Slot Animation As Dynamic Montage.

  • New: Added compilation warnings to the Modify Bone skeletal control when it will do nothing (e.g., when all components are set to be ignored or no bone is selected).

  • New: Added event for Post Evaluation.

    • This gets triggered after bone evaluation is done.

    • If your mesh component has physics, it will trigger after bone is blended back to it.

  • New: Optimized animation evaluation by looping over the bones directly instead of indirectly.

  • New: Added flag to notifies to stop them triggering on dedicated servers.

  • New: Added friendly display names to Bone Modification Mode enumerants.

  • New: Added new node "Bind Cloth To Master Pose Component" that makes cloth on a slaved skeletal mesh component to reuse the simulation data from the master component, rather than processing the cloth separately.

  • New: Added new node "Is Section Using Cloth" to query whether a skeletal mesh section has cloth data.

  • New: Added reference pose toggle toolbar.

    • Also now you can edit during reference pose.

  • New: Added sorting of Smart Name curves.

  • New: Added support for Montage-to-Montage synchronization.

    • A montage can only have a single leader. A leader can have multiple followers.

    • Synchronization is performed once before any of the leader or followers are updated in a given frame.

    • Essentially, synchronization is performed one frame late, so tick order between montages is not an issue.

  • New: Allowed skeletal controls to specify the coordinate space that they would prefer the gizmo to be displayed in by implementing GetWidgetCoordinateSystem.

  • New: First pass of the dependency preloading system.

    • Uses asset information created during cooking to determine the dependencies for all packages and make them load BEFORE the requested package. When using pak files, the pak file will be ordered to match this load order, giving much reduced seek times.

    • Currently disabled by default, but can be enabled with "s.PreloadPackageDependencies 1" in the console.

  • New: Look At Control now supports look axis in local space.

  • New: Started moving animation nodes out of Engine into a new AnimGraphRuntime module.

  • New: Support Append Frames in the begin/end of the AnimSequence.

    • Also fixed to rearrange notifies and curve keys.

  • New: Wrapped re-entrancy checks during AnimationBlueprint node Update/Evaluate in DO_CHECK tests so that they are compiled out in shipping builds.

  • Animation and joint name now supports UTF-8 when importing.

  • Animation Record gives default path and available name.

  • Changed MasterPoseComponent serialization so that you can use it in a construction script.

  • Changed animation stat names to reflect whether they are running on the main game thread or a worker thread.

  • Changed new NativeNotify menu to display the localized class name.

  • Fix for crash in BlendSpaces when referenced AnimSequences have been deleted.

  • Fixed a bug where the latent action manager wasn't correctly removing actions.

  • Fixed a crash due to incorrect current time when switching a sequence player node's animation to one that is shorter than the current one.

  • Fixed a crash when compiling a malformed Animation Blueprint (containing a missing node caused by deleted code or a disabled plugin) and added a graph validation pass prior to compilation.

  • Fixed adding an extra frame when importing animations.

  • Fixed an issue where the message log was not displayed/refreshed when using the "click to recompile AnimBP" prompt rather than the Compile button.

  • Fixed client/server disagreements when playing root motion animations.

    • When a Montage ends, some left over root motion could stick around and be used the next time around, potentially creating positional differences between client and server.

    • If sending a DualServerMove when root motion starts, server can update root motion for a move that didn't use root motion on the client yet.

  • Fixed crash during animation blueprint compilation due to incorrect parent class being accessed during skeleton recompile.

  • Fixed crash during skeleton class recompile when structurally changing some animation blueprints.

  • Fixed crash in blend node with when evaluating a LOD'd skeleton (bones were stripped out.)

  • Fixed crash when enabling Show Uncompressed Bones.

  • Fixed crash when pausing the game and using "Tick when paused" on a SkeletalMeshComponent.

  • Fixed crash when you mix additive and non additive animations within montage.

  • Fixed crashes relating to animation notifies that had invalid slot indices when linked in montages.

  • Fixed divide by zero when importing zero-length animations. (Contributed by rajkosto, pull request 1148.)

  • Fixed incorrect state machine weights when using a custom blend on a transition.

  • Fixed montage linkable elements sometimes losing segment links when external animations had changed.

  • Fixed non-human-controlled characters moving much more than they should while running root motion on dedicated servers with AnimUpdateRateOptimizations and RootMotionFromMontages ON.

  • Fixed 'phantom' warnings that could show up the first time an Animation Blueprint was opened in an editor session but would go away when you recompiled interactively.

  • Fixed reimporting breaking RetargetBasePose.

  • Fixed variable initialization order bug that caused evaluation skipping on SkeletalMeshComponents to not function properly.

  • If you import a mesh that adds bones to a skeleton, but don't save the skeleton, it could cause a crash. Added the ability to recover these bones in the editor.

  • Minor style fixes for padding/fonts of bone references and the alpha scale/bias of a skeletal control.

  • Removed WITH_EDITOR define around GetActiveSocketList in QuerySupportedSockets so behaviour of QuerySupportedSockets is consistent between editor and non editor builds.

  • Reworked animation track segment looping logic to reduce floating point error problems.

  • When Skeleton detects inconsistent hierarchy, it will try fix up. You're going to notice merge bone effort with error message.

    • When this message comes up, please resave skeleton.

  • While piloting an object, 'move to' object button functionality works properly.

Audio

  • New: Added ability to set the volume headroom per platform with a new Engine.ini field.

  • New: Improved Gameplay Statics sound API:

    • New Spawn at Location functions return an Audio Component that allows manipulation of the played sound similar to the Attached version.

    • Play at Location still does not return the audio component and should be used for one-shot sounds.

    • Rotation parameter added to API calls that specify location or attachment. This causes non-spherical attenuation shapes to face the intended direction.

    • Play Attached renamed to Spawn Attached.

    • Sound and Dialogue APIs are now consistent.

  • Fixed volume differences on the Mac platform due to splitting and merging audio streams when using reverb, EQ, or radio effects.

    • Added low-pass filter for voice audio units to closer match PC audio.

  • Fixed to use proper linear-to-dB volume equation on the Android platform.

  • Fixed a Core Audio API crash for Mac when the number of active sounds exceeded the number of available audio units.

Automation

  • New: Basic lighting tests have been separated from the 'General Editor Test'.

    • They are now: "System.Promotion.Editor.Lighting.Place Scale Rotate", "System.Promotion.Editor.Lighting.Modify Properties", and "System.Promotion.Editor.Lighting.Duplicate and Copy Paste".

  • New: GenerateProjectFiles.bat will now exit with a non-zero exit code (1) when any failure happens.

  • New: Material Editor promotion tests are now contained in the MaterialEditor module. Fully exported UMaterialGraph.

  • New: Particle system promotion tests are now contained in the Cascade module.

  • New: The geometry automation tests have been separated from the 'General Editor Tests' automation test. It is now: "System.Promotion.Editor.Geometry Validation".

  • New: UAT and UBT will no longer wait for the global mutex, and will fail immediately instead. Previously, each instance would wait in line serially, hiding the fact that the command was not actually running.

  • Fixed UAT base path being invalid if the UE4 workspace is mounted directly onto a drive letter (e.g. C:\Engine, D:\Engine, etc.).

Blueprints

  • New: Added Blueprint-exposed GetBoundingBox function to StaticMesh.

  • New: Added Equals and NearlyEquals functions for Transforms to Blueprint math library.

  • New: Added TimeSecondsToString function to convert float seconds to formatted string.

  • New: Added a node icon to identify editor-only properties referenced in Blueprint script.

    • Properties like a Character's arrow component, or a TargetPoint's sprite.

    • Fixed crashes that would occur from referencing these properties in cooked builds (replaced with a logged exception instead).

  • New: Added editor .ini config settings that can be used to hide specific Blueprint menu entries.

    • Use the "[BlueprintEditor.Menu]" section header to add exclusions under in the .ini file.

    • In the .ini file, specific fields can be hidden like so: +BlueprintHiddenFields="/Script/Engine.Actor:GetTransform".

    • In the .ini file, specific nodes can be hidden like so: +BlueprintHiddenNodes="/Script/BlueprintGraph.K2Node_IfThenElse".

  • New: Added Get Map Range Value Unclamped and renamed Get Mapped Range Value to Get Mapped Range Value Clamped.

  • New: Added Invert Transform blueprint node.

  • New: Added support for expressing a per-parameter Display Name using the markup UPARAM(DisplayName="Something neat") before the parameter declaration.

    • This allows renaming parameters without using a K2ParamRedirect, and the use of names that are not legal C++ identifiers.

    • e.g. static void DoSomethingAwesome(UPARAM(DisplayName="Awesome Param") float BoringParam);

  • New: Added the ability to filter out library functions and macros from the Blueprint context menu.

  • New: Added various improvements related to Select node. The node doesn't return a copy of input parameter, it returns a reference to the input.

  • New: An "InternalUseParam" meta tag for UFUNCTION has been added to support hiding function parameters from Blueprints. The pin for that parameter will be hidden and not connectable.

  • New: Blueprint Timer API improvements.

    • Set Timer By Delegate now returns a Timer Handle to be used when interacting with the timer via other functions. Interacting with timers by handle is significantly more performant and enables the same timer delegate to be used for multiple timers simultaneously.

    • Set Timer By Name, and all timer manipulation functions, by name and delegate have been deprecated.

  • New: Blueprint Timeline UI updates:

    • Made individual tracks collapsable.

    • Added an option to turn off the view synchronization for an individual track.

    • General padding and layout tweaks.

  • New: Game/URL Options parsing nodes are now exposed to blueprints.

  • New: Can change a variable's type in the My Blueprint window by clicking on its type icon, or right-clicking to toggle whether or not it's an array.

  • New: Can drag and drop custom events from the My Blueprint window to add a call function for the event.

  • New: Can promote pins to local variables in Blueprint function graphs (or their child graphs).

  • New: Can set the Advanced Display flag on Blueprint member variables.

  • New: Made the boolean pin in Blueprints less subtle.

  • New: Fixed a crash that could occur with data-only Blueprints that explicitly called their parent's construction script.

  • New: Fixed error about missing World Context pin in blueprint library.

  • New: CreateEvent nodes are now more user friendly - they will use the current blueprint as the default context and no longer suggest that the user select an asset for context.

  • New: Improved details panel for nodes: Make, Break and Set Member. Properties are grouped in categories. Improvements for PostProcessSettings.

  • New: Improved the logic for when to reuse an existing graph tab versus open a new one.

    • All subgraphs will now open in the parent when double-clicking on a node in a graph.

    • Holding down Shift while clicking on an item in the My Blueprint tree or in the graph will force the creation of a new tab regardless of what is already opened.

  • New: Node "Set member in .." has an output pin for the post-modified struct.

  • New: Object Reference, Class Reference, Asset ID, Asset Class ID pin types have been spun off into a sub-menu on the item to reduce duplication of these items in the listview.

  • New: The output pin subtype for a GetClass function call node is now linked to the input pin's subtype.

  • New: Added support for multi-line editing to blueprint comment nodes.

    • To enter a newline in the comment title use shift + enter.

  • New: Exposed NOR and NAND node support to blueprints.

    • The nodes can be found in the math/Boolean section in the blueprint action menus.

  • "Color" name is not longer restricted.

  • Added "magnitude" keyword to vector length functions.

  • Adding or removing members from an editor created structure will no longer cause 'inappropriate outermost' warnings when blueprints that use that structure are saved without recompiling.

  • Adding pins to a MakeArray node will give the new pin a default values.

  • After context fail (Access None error) return data are properly cleared.

  • Attaching a bool to the "Select" nodes index pin will force the node to update it's pin names even when there are only two options.

  • Axis mapping value getters can no longer be called from other blueprints.

  • Blueprint Diff Tool no longer has buttons to switch between the components, graph, and defaults views. Navigation is now done via the list of differences.

  • Blueprint Editor context menu filtering is much more efficient.

  • Blueprint member variables of type component that are not generated by SCS now have the details options normally available to exposed variables.

  • Breakpoint is triggered on Access None error.

  • C++ Functions that are tagged as BlueprintImplementableEvent and are overridden as a function graph in Blueprints will display an error when attempting to drag and drop into the graph to inform the user that the function is not Blueprint Callable.

  • Call Function nodes will no longer change the function reference when duplicating the node or duplicating the entire Blueprint.

  • Can no longer split pins on Blueprint nodes if the struct does not have any valid properties.

  • Can now Make and Break the DateTime struct in Blueprints.

  • Can right click in collapsed graphs to add local variables that are part of the outer function graph.

  • Can right click on any node to search for references of it. Does initial search only in current Blueprint.

  • Can use unicode characters in Math Expression nodes.

    • All unicode "letters" are now allowed for variable/input/output names.

    • This does not extend to symbols and only the underscore symbol is still allowed.

  • Cannot name Timeline tracks the same as any of the native pins on the node.

    • Any nodes previously broken by this functionality should work again.

  • Changing a pin type on a Select node will recombine all sub pins on the option and result pins before setting the new pin type.

  • Changing the Class of a "Spawn Actor from Class" node will no longer disconnect the result pin's links if they are still valid.

  • Child components in a Blueprint Class asset attached to a default scene root will no longer be lost after reparenting to a Blueprint Class that also has a default scene root.

  • Connecting function result node array pins to a reroute node will no longer prevent the node from compiling with all its output parameters.

  • Copying and pasting a K2Node_CallFunction with an interface pin for the self pin will no longer change the self pin into a normal Object Reference pin.

  • Deleting a custom event when there are no other events in the Blueprint will no longer disallow you to name other items placed in the Blueprint the same as the deleted custom event.

  • Drag and dropping a component from the SCS editor to a graph will no longer incorrectly report that the graph is outside of scope when it is a part of the same Blueprint.

  • Dragging and dropping variables from the My Blueprint tab will no longer default to assuming that the variable is read-only.

  • Duplicating function or macro graphs that contain nodes with Text pins will no longer incorrectly link the original and duplicated pins so that changes in one appear to affect the other.

  • Duplicating the "Add Scene Component" node while the transform pin is split will no longer make visible the transform pin on the duplicated node.

  • Editing a blueprint that is instanced in a hidden sub level no longer resets transforms on the hidden instances.

  • Ensure 'bExchangedRoles' is not set after serialization of an Actor-based Blueprint Class asset.

  • Examining the value of an enum array pin will show the enum value's display name.

  • Fixed a crash when compiling a Blueprint while intermediate graphs are open.

  • Fixed a crash while compiling a Blueprint with a validated Get node that is missing a property.

  • Fixed a crash when compiling a Blueprint while Find-in-Blueprints is searching all Blueprints.

  • Fixed a crash when vectors are compared in Math Expression using operator!=.

  • Fixed a potential crash during component registration when constructing instances of a Blueprint Class.

  • Fixed a potential crash on load during component template serialization for older Blueprint Class assets.

  • Fixed a potential crash when copying an array of USTRUCTs from one Actor instance to another.

  • Fixed an issue where deleting the scene root component in the Blueprint editor could lead to incorrect state of instances of the Blueprint class post-reconstruction.

  • Fixed crash executing cast to a class that is not loaded (presumably due to referencing a class in an unloaded module).

  • Fixed crash on reload of maps saved with constructed component instances that match archetypes by name but no longer by type.

  • Fixed a crash that would occur when editing an instanced variable nested within another instanced variable.

  • Fixed propagation of material swaps when editing "native" component templates (i.e. inherited from the C++ class) in the Blueprint Class editor.

  • Fixed socket browsing in the Blueprint editor for inherited component templates.

  • Fixed stale components persisting in a Blueprint Class asset after changing a native parent class's inheritance hierarchy.

  • Fixed vector axis input event nodes displaying a float output pin instead of a vector pin.

  • Fixed a bug that prevented new components from having the same name as a deleted one (prior to a compile).

  • Fixed a bug that was preventing copy, duplicate, and rename hotkeys from working in the Blueprint viewport.

  • Fixed a bug where certain keywords for Blueprint menu items were being ignored.

  • Fixed a bug where dirty Blueprints were not being compiled before you selected "Launch".

  • Fixed a bug where static functions were being hidden from Blueprints with Hide Categories metadata.

  • Fixed a bug with cyclic parent/child dependencies, where inherited components could be trashed when compiled.

  • Fixed a bug with parent/child cyclic dependencies, where the child's overridden property values would be cleared on load.

  • Fixed a crash after renaming local variables when other functions have local variables of the same name.

  • Fixed a crash that could occur when passing a default Blueprint Session Result object to the "Join Session" Blueprint node. Instead of crashing, the join will fail an execution will continue from the "On Failure" pin, as normal.

  • Fixed a crash that could occur when undoing, after compiling an Actor Blueprint with components.

  • Fixed a crash that would occur in specific cyclic dependency cases involving an Actor and Actor Component Blueprints.

  • Fixed a crash that would occur when hovering over the "Edit Blueprint" button, for Blueprint instances that had components added in their construction script.

  • Fixed a crash that would occur when loading a Blueprint that depended on a plugin that was disabled.

  • Fixed a crash that would occur when removing an event/function param in a Blueprint that was associated with the set GameMode.

  • Fixed a crash that would occur when removing a pin that had a debug watch applied to it.

  • Fixed a crash when deleting a map while it's level Blueprint was opened.

  • Fixed a crash when restarting level after streaming sublevels in.

  • Fixed a cyclical dependency bug involving macro libraries, where Blueprints could load with a false error.

  • Fixed a potential failure to restore component instance data during reconstruction of an Actor-based Blueprint Class instance.

  • Fixed an issue where it would appear that the Increment/Decrement macros would occur twice when using the output pin from the macro.

  • Fixed an issue where some component property values on a Blueprint class instance in the current scene could be reset as a result of recompiling the Blueprint class.

  • Fixed crash when Local Variable of array type is compiled.

  • Fixed crash when making changes with multiple components selected in the blueprint editor.

  • Fixed crash when selecting for "None" class type on the Spawn Actor From Class node after having already selected another class.

  • Fixed crash when struct value is copied from invalid object using Set node.

  • Fixed crash, when two empty User Defined Enums have the same name.

  • Fixed decrement int macro node to actually decrement.

  • Fixed duplication of components within the component tree in the Blueprint editor.

  • Fixed editing of Instanced Static Mesh Component and Hierarchical Instanced Static Mesh Component.

  • Fixed exposed APEX cloth functions not appearing in blueprint editors.

  • Fixed incorrect tooltips between "Convert to validated Get" and "Convert to pure Get" options on Get variable nodes.

  • Fixed issues that could occur if an existing Blueprint class default object or instance contained one or more invalid property values for native (C++-defined) component subobjects on load.

  • Fixed issues with graph node bubbles rendering incorrectly when there is nothing in the top slot

  • Fixed issues with hiding categories in Blueprints not always hiding all the expected nodes.

  • Fixed issues with node titles being out of date (e.g., animation skeletal controls) by forcing node titles to be updated when a property on a graph node is modified

  • Fixed issues with Target pins being invalid after reparenting a blueprint.

  • Fixed rare crash in the Blueprint diff tool that occurred when user dragged certain UI elements.

  • Fixed the cause of a 'Critical Failure' that could occur when replacing references to one blueprint with references to a different blueprint.

  • Fixed crash with Find-in-Blueprints, fallout from changes to FString.

  • Hidden pins generated from native functions will correctly use their default values.

  • Improved the Pin Type Selector filter so order of words and case sensitivity does not matter.

  • In the pin type selector dropdown, hitting the shift key will no longer move the cursor back to the start of the search box and hitting the down and up arrow keys will again navigate the list view.

  • Input action and key events will no longer be placeable in Blueprint functions.

  • Input Touch event node cannot be placed in function or macro graphs.

  • Local variables in Blueprint functions will now be set to the default values of the user defined struct their type represents.

  • Math expression functions without any parameters will still provide their end parenthesis in the Math Expression node.

  • Math Expression nodes will again correctly lookup by the display name of a function.

  • Math Expression nodes will no longer always appear as changed when doing a diff on a Blueprint.

    • Improved diffing support to see how the expression has changed between revisions.

  • MathExpression nodes will not count function inputs as valid variables to access via getter nodes.

  • More strict restrictions related to WeakObjectPtr exposed to blueprint. No arrays of WeakObjectPtr.

  • On Blueprint enum pins, tooltips will appear when hovering over items in the drop down menu.

  • On the select node, setting the Index pin's type will always change the pin names of the option pins to "False" and "True".

  • Exposed FMath::FixedTurn to Blueprints. (Contributed by MatzeOGH, pull request 1254.)

  • Preventing in UK2Node::AutowireNode hidden pins from being auto-connected to passed in Wildcard pins.

    • This prevents issues with wildcards connecting to the "self" pin of functions when dragging off them.

  • Proper error is generated when incompatible Blueprint pins are connected.

  • Recompiling a Blueprint with a Component parent class now correctly re-registers any instances of the blueprinted component in the level. Previously existing instances could disappear.

  • Removed a check that was asserting when compiling a Blueprint with invalid Call Function or Call Parent Function nodes.

  • Renaming a component and then adding a new component of the same type in the Blueprint editor will no longer result in broken defaults editing.

  • Select nodes using enums with hidden values will no longer incorrectly match up the Option pin connections to the improper enum value.

  • Selecting a pin type for a Select node will not fail the first time.

  • Setting default values of Text properties in the User Defined Struct or for Local Variable properties in Blueprints will correctly assign the value and preserve the value between instances of the editor.

  • Splitting pins on the Function Result node will no longer attempt to compile the split pins as result pins.

  • The "Get" pin(s) on "Set" variable nodes will now display the name of the pin if the pin has been generated by splitting a struct pin.

  • The details view in Blueprints of non-member variables (either from a parent class or an external member reference) will no longer show various detail uneditable options as editable.

  • The eye icon appears now for marking a user created component variable as editable in the My Blueprints window.

  • Tooltips will display for sub-menu items in the Pin Type Selector.

  • Tweaked the tooltip for "Expand Nodes" menu option to better describe what the action will do.

  • When dragging off a pin in a function graph, local variable nodes will no longer be filtered out of the context menu for placement if they are valid for connection.

  • When indexing all Blueprints, hitting "No" will correctly skip checking out all un-indexed Blueprints.

  • When loading a blueprint pin types that don't match are no longer disconnected, instead we rely on compile errors to prevent the potentially broken blueprint from executing bad code.

  • When signature of a function is updated, its instances in the Event Graph are properly updated.

Core

  • New: A plugin with the same name but of different versions can be placed in multiple game projects. This allows studios with multiple projects to utilize the same plugin at different revisions as long as the plugin is part of the game project.

  • New: Added module path caching to improve editor startup t