언리얼 엔진 4.8 릴리즈 노트

4.8 릴리즈 노트

Windows
MacOS
Linux

이 릴리즈에는 언리얼 엔진의 뛰어난 개발자 커뮤니티 일원들의 변경사항 189 개가 포함되어 있습니다. 언리얼 엔진 4.8 에 기여해 주신 모든 분들께 감사드립니다:

3dluvr, Adrian Gasinski (gasnica), Adrian Irwin (adrianirwin), Albino Rodrigues (Bino-), Alexander O'Mara (AlexanderOMara), Andrew Zhilin (zoon), Angelo Miner (angjminer), Artem V. Navrotskiy (bozaro), Ash Matheson (Nuclearfossil), Audiokinetic Inc. (audiokinetic), Ben Rog-Wilhelm(zorbathut), BhaaL (BhaaLseN), Black Phoenix (PheonixBlack), Błażej Szczygieł (zaps166), Cengiz Terzibas (yaakuro), Christopher P. Yarger (cpyarger), codetackler, Craig Wilson (hamo2k1), Dainius Masiliūnas (GreatEmerald), Daniel Mahashin (dmahashin), Daniel Zeligman (dzeligman), David Palacios (hevedy), Derek van Vliet (derekvanvliet), devbm, Dewitt Buckingham (DaJoker29), Eugene Elkin (eelkin2000), Ezekiel Warren (zaucy), gatools, Henrik Danielsson (TwoD), Jackson Egan (Sneagan), JaredTherriault, Jason (Abatron), Jason Maskell (TamedTornado), Jay Mattis (braindx), jdh84, Jeff Rous (JeffRous), Jefferson Pinheiro (Ixiguis), Jeremy (OPTIPlanet), jlamarche, Joshua Sheard (jsheard), karolz, Kazumasa Ohashi (KazumasaOhashi), Korshikov Anton (tnako), korypostma, Lee Berger (MrCrowbar), Leon Rosengarten (lion03), Leszek Godlewski (inequation), Lucas Dohring (nykac), Lukasz Baran (iniside), Luna Duclos (PSG-Luna), Marat Radchenko (slonopotamus), Marc Kamradt (MarcKamradt), Marco Antonio Alvarez (surakin), marynate, Maurice Laveaux (mlaveaux), Michael Allar (Allar), nsf, Omar Pakker (Omar007), Paul Eremeeff (PaulEremeeff), Pierdek, PjotrSvetachov, radu-danciu, Rama (EverNewJoy), Rene Rivera (grafikrobot), Richárd Németh (hsdxpro), Richard Biely (richardbiely), Robert Chubb (SaxonRah), Robert Williams (Rottbott), Salamanderrake, Sasha Petrovich (xulture), Satheesh (ryanjon2040), Sebastian Köcke (byte3), Sébastien Rombauts (SRombauts), Stephen Whittle (stephenwhittle), Simon Taylor (simontaylor81), Spencer Brown (JedTheKrampus), thk123, Thomas Mayer (tommybear), threadlock, Tobias Mollstam (mollstam), Tore Lervik (hallatore), Will Stahl (merlin91), x414e54, Yohann Martel (ymartel06), zombiesnu

주요 기능

에디터 안전성 및 삶의 질 개선

언리얼 엔진 4.8 에 정말 큰 초점을 맞춘 부분인데요. 언리얼 엔진 새 버전을 릴리즈할 때마다 수백종의 버그와 많은 신기능을 추가하곤 하지만, 이번 언리얼 엔진 4.8 에서는 에디터 및 게임 안전성 향상은 물론, 엔진 사용시 자주 접하게 되는 문제와 자잘한 기능 요청을 다수 처리하고자 열심히 노력했습니다. 그 결과 엔진 런타임 및 에디터의 안정성이 향상되었기를 바라며, 앞으로의 릴리즈마다 안전성에 계속해서 신경쓰도록 하겠습니다.

SteamVR/HTC Vive 지원

언리얼 엔진에 이제 Valve 의 SteamVR API 및 HTC Vive 하드웨어가 완벽 지원됩니다!

image alt text

  • "VR 프리뷰" 버튼으로 연결된 HTC Vive 에서 게임을 즉시 미리봅니다!

  • 모든 HTC Vive 모션 컨트롤러 기능이 지원되며, 컨트롤러 버튼/터치패드 바인딩도 가능합니다.

  • 방 스케일 및 착석 경험이 완벽 지원됩니다.

Playstation 4 Morpheus VR, 120Hz 리프로젝션

이제 최신 Sony Morpheus 하드웨어가 지원되며, 템포럴 리프로젝션을 사용한 120Hz 렌더링도 지원합니다.

image alt text

  • 이제 언리얼 엔진은 60hz 와 120hz Morpheus 개발 키트 둘 다 지원합니다.

  • VR 에서의 3D 오디오 재생 역시 이번 릴리즈에 크게 향상되었습니다.

랜드스케이프 그래스 렌더러

새로운 그래스 시스템이 플레이어 주변 랜드스케이프의 그래스 인스턴스와 지상 잡동사니 메시를 동적으로 렌더링합니다.

image alt text

  • 플레이어가 월드를 이동함에 따라 새로운 인스턴스가 추가되고, 더이상 범위에 있지 않은 인스턴스는 제거됩니다.

  • 아티스트는 랜드스케이프 머티리얼을 통해 풀의 밀도를 정하는데, Landscape Grass Output 노드에 밀도를 출력하면 됩니다. 이로써 풀의 배치를 터레인 텍스처에 일치시키는 것이 가능합니다!

  • 풀 인스턴스는 풀 밀도 맵에 따라 백그라운드 태스크로 절차적 생성됩니다.

  • 풀의 렌더링은 컬링을 구현하면서도 드로 콜을 최소한으로 유지시키는 계층형 인스턴싱 시스템을 사용해서 효율적으로 렌더링됩니다. LOD 전환은 픽셀 단위로 이루어지며, 템포럴 AA 로 인해 거의 끊기지도 않습니다.

  • 자세한 구성법은 아래 "랜드스케이프 그래스 툴" 부분을 참고하세요!

계층형 레벨 오브 디테일 시스템

새로 등장한 Hierarchical LOD (계층형 LOD) 기능은 메시 그룹별로 LOD 를 자동 생성해 주는 기능입니다! 멀리서 볼 때의 드로 콜과 폴리곤 수를 대폭 줄여줍니다. 오픈 월드 게임에 뛰어납니다!

image alt text

  • 합칠 메시 그룹은 자동으로 찾습니다. Simplygon 이 있는 경우 사용해서 한 그룹의 로우 디테일 메시를 생성합니다. 없는 경우, 각 메시의 LOD 버전을 (Merge Actors 기능을 사용해서) 합칩니다. 머티리얼은 가능한 경우 자동으로 병합시켜 섹션 (머티리얼) 수를 줄입니다.

  • 계층형 LOD 를 사용하려면, 월드 세팅 에서 Enable Hierarchical LOD System (계층형 LOD 시스템 활성화)를 True 로 설정합니다. 활성화 이후 LODSystem 섹션에서 세팅 편집이 가능할 것입니다.

  • 개별 액터마다 별도의 Enable Auto LOD Generation (자동 LOD 생성 활성화) 옵션을 꺼서 이 옵션을 선택할 수 있습니다.

  • LOD 메시는 '레벨 빌드' 프로세스의 일환으로 생성되며, 빌드 메뉴의 LOD 빌드 를 선택해서도 가능합니다.

프로시저럴 폴리지 생성기 (실험단계)

거대한 (또는 작거나 중간 크기라도) 폴리지 인스턴스 구역을 빠르게 절차적 생성하는 실험단계 기능이 새로 생겼습니다.

image alt text

  • Foliage Type (폴리지 타입) 애셋에 시뮬레이션 도중 식물군의 성장 및 확산 방식을 조절할 수 있는 프로퍼티가 생겼습니다.

  • 다수의 프로시저럴 폴리지 타입을 동시 시뮬레이션하여 전체 숲 조성이 가능해 졌습니다!

돌려보기 가능 네트워크 리플레이

언리얼 엔진 게임에 완벽한 게임 리플레이 녹화 및 재생 기능이 지원됩니다. 4.8 에 새로 등장한 기능으로, 네트워크 리플레이 재생 중 특정 시간대로 "스크러빙" 하여 돌려보는 것이 가능합니다!

image alt text

Shooter Game 에서 이 기능을 확인해 보세요.

  • 메인 메뉴에서 새 게임을 호스팅합니다.

  • 봇으로 채웁니다 (재미지게 하기 위해서요).

  • "Record Demo" (데모 녹화) 기능이 켜져있는지 확인합니다.

  • 경기를 진행합니다.

  • 충분히 찍었으면 메인 메뉴로 빠져나갑니다.

  • 메인 메뉴에서 "Demos" (데모)를 선택합니다.

  • 리플레이 브라우저에서 저장한 리플레이를 찾은 다음 선택하여 재생합니다.

리플레이 재생 도중:

  • 마우스 휠로 재생 속도를 조절합니다.

  • 화면에 일시정지/재생 버튼이 있습니다.

  • 타임라인 바 아무데나 클릭하여 해당 위치로 스크러빙 가능합니다!

기본적으로 엔진은 리플레이를 로컬에 저장하도록 환경설정되어 있습니다. 리플레이 스트리머를 쉽게 바꿀 수 있는 시스템이 있어, 이를 통해 리플레이를 로컬에 저장하는 스트리머를 사용하거나, 스트리밍 지원 클라우드에 리플레이를 저장하도록 디자인된 스트리머를 사용할 수도 있습니다. 자세한 내용은 앞으로의 릴리스에 공개됩니다!

하이 퀄리티 뎁스 오브 필드 및 톤 매핑

image alt text

  • "Circle DOF" (원형 DOF) 라는 뎁스 오브 필드 알고리즘이 새로 생겼습니다.

    • 원형 보케와 인/아웃 포커스가 멋지게 전환되는 하이 퍼포먼스 DOF 기법입니다.

    • 원형 DOF 는 물리적 카메라 파라미터를 통해 제어됩니다: fstop, 초점 길이, 초점 거리

    • 거리 기반 블러링을 지원, 대기에 퍼지는 빛의 산란 효과를 시뮬레이션합니다.

  • 새로운 필름같은 색 및 톤 반응

폴리지 에디터 디자인 변경

폴리지 에디터가 최근 디자인이 변경되었습니다! 사용성이 개선되었을 뿐만 아니라, 새로운 레이아웃을 통해 한 번에 팔레트에서 보다 많은 수의 폴리지 타입 작업을 더욱 쉽게 할 수 있게 되었습니다.

image alt text

  • "Add Foliage Type" (폴리지 타입 추가) 버튼으로 폴리지 뷰에서 바로 새로운 폴리지 타입을 쉽게 생성할 수 있습니다.

  • 폴리지 썸네일에 표시여부 토글 및 애셋 저장용 버튼뿐 아니라, 총 인스턴스 수까지도 알 수 있습니다.

  • 다중 선택을 통해 한 번에 다수의 폴리지 타입 활성화 또는 비활성화가 가능합니다.

오픈월드용 다이내믹 내비게이션 메시

대규모 오픈 월드에 다이내믹 내비메시를 지원하는 전혀 새로운 시스템이 생겼습니다.

image alt text

  • 엔진에서는 이제 필요한 영역에 요청이 있을 때 동적으로 내비메시를 생성합니다.

  • 이 기능을 켜려면, 프로젝트의 내비게이션 시스템을 이 모드로 환경설정하고 연관된 액터에 Navigation Invoker Component 를 추가합니다.

새로운 언리얼 예제 캐릭터

새로운 고해상도 버전의 언리얼 예제 캐릭터가 템플릿에 포함되었습니다!

image alt text

  • 고해상도 모델과 모바일 디바이스에 적합한 저해상도용, 두 가지 버전이 있습니다.

  • 포함된 것은 고해상도 버전으로, 저해상도 캐릭터는 마켓플레이스에서 무료로 구하실 수 있습니다!

언리얼 모션 그래픽 UI 용 커브 편집

언리얼 모션 그래픽에 커브 에디터가 생겼습니다!

image alt text

  • 위젯 애니메이션에서 수치 값 트랙을 선택, 새로운 커브 에디터를 사용하여 그 값을 애니메이팅 가능합니다.

  • 새로운 Transport (이동) 제어 버튼으로 애니메이션을 미리보면서 재생, 되감기, 반복도 가능합니다.

반투명 표면에 스크린 스페이스 리플렉션

이제 반투명 표면이 화면상의 다른 오브젝트를 동적으로 반사시킬 수 있습니다!

  • 반투명 머티리얼에 'Screen space reflections' (스크린 스페이스 리플렉션) 옵션으로 활성화시킵니다.

image alt text

빠른 창 전환 (Ctrl+Tab)

이제 Ctrl+Tab 키로 여러가지 애셋 에디터와 툴 전환을 위한 팝업 메뉴를 띄울 수 있습니다.

image alt text

  • Ctrl+Tab 또는 Shift+Ctrl+Tab 키를 누르면 최근 열었던 순서대로 애셋을 순환시켜 보여주며, Ctrl 키를 놓으면 선택된 애셋을 활성화시킵니다.

  • 현재 선택된 애셋에 대해 에디터에서 툴 탭을 활성화시킬 수도 있으며, 마우스를 사용해서 콘텐츠 브라우저에 애셋을 표시할 수도 있습니다.

랜드스케이프 그래스 툴

풀 렌더링 시스템에 메시 인스턴스를 구성하는 에디터 신기능이 추가되었습니다.

image alt text

  • 각 풀 유형은 새로운 '랜드스케이프 그래스 타입' 애셋으로 부연 설명되며, 각 그래스 타입은 다수의 스태틱 메시를 지정하여 다변화시킬 수 있습니다.

  • 랜드스케이프의 머티리얼에서 그래스 덴시티 (풀 밀도) 맵이 생성됩니다. Landscape Grass Output 노드를 랜드스케이프 머티리얼에 추가시키고, 하나 이상의 Landscape Grass Type 애셋을 할당해야 합니다. 각 그래스 타입별로 새로운 입력 연결이 나타나며, 이를 통해 풀의 밀도를 지정할 수 있습니다.

  • Landscape Layer Sample 노드를 직접 연결하면 랜드스케이프 레이어에 풀 밀도를 지정하는 것이 가능합니다. 노드 망을 연결해서 표면 노멀이나 고도에 따라 풀 배치를 자동 제거한다든가, 다수의 랜드스케이프 레이어를 사용한다든가 하는 복잡한 배치 규칙을 만드는 것도 가능합니다.

액터 블루프린트 인스턴스의 프로퍼티 편집

서브클래스에서와 마찬가지로, 블루프린트의 컴포넌트 섹션에 추가된 컴포넌트의 프로퍼티도 액터 단위로 변경 가능합니다.

  • 액터 프로퍼티와 마찬가지로, 변경된 컴포넌트 프로퍼티 역시 블루프린트에 적용 버튼으로 블루프린트 디폴트에 적용시킬 수 있습니다.

  • 몇 가지 주의점: 컨스트럭션 스크립트로 생성된 컴포넌트는 변경 불가능하고, 컨스트럭션 스크립트로 컴포넌트상에서 변경된 프로퍼티 역시 인스턴스에서 변경 불가능하며, 액터 디테일 패널에 읽기전용으로 나타납니다. 하지만 컨스트럭션 스크립트에서 프로퍼티 값을 디폴트로 명시적 설정하는 경우, 전혀 설정하지 않도록 하는 것과 구분할 수가 없어서 인스턴스 레벨에서 편집 가능할 것입니다.

애셋 사이즈 매퍼

애셋이 메모리를 얼마나 차지할지 궁금한 적 있던가요? 자, "Size Mapper" (사이즈 매퍼)라는 에디터 신기능으로 알아내는 데 도움이 됩니다!

image alt text

  • 모든 종속성을 포함해서 애셋에 사용된 메모리를 표시해 줍니다. 마우스 휠을 사용해서 참조된 애셋을 깊이 파고 내려갈 수도 있으며, 더블클릭으로 콘텐츠 브라우저에 해당 애셋으로 점프할 수도 있습니다.

  • 한 번에 다수의 애셋 사이즈를 확인할 수도 있습니다! 사이즈 매퍼는 선택된 애셋에 공유된 모든 애셋을 별도의 탑 레벨 그룹 안에 표시해 줍니다.

  • 이 기능은 모든 에디터에서 접근 가능합니다:

  • 콘텐츠 브라우저: 애셋 (또는 애셋이 가득 들어있는 전체 폴더)에 우클릭한 다음 "Size Map" (사이즈 맵) 을 선택하면 됩니다.

  • 레벨 에디터: 액터에 우클릭한 다음 "Size Map" (사이즈 맵), 또는 액터를 선택한 상태로 Alt+Shift+M 을 누르면 됩니다.

  • 레퍼런스 뷰어: 노드에 우클릭한 다음 "Size Map" (사이즈 맵)을 선택합니다.

  • 아무 애셋 에디터: 파일 메뉴를 열고 "Size Map" (사이즈 맵)을 선택합니다.

공유 에디터 레이아웃 및 키바인딩

에디터 레이아웃 및 키바인딩 세팅이 모든 프로젝트에 공유됩니다!

이전에는, 모든 프로젝트가 별도의 레이아웃/키바인딩 세팅을 저장하고 있었어서, 프로젝트를 전환할 때마다 레이아웃 재배치 작업을 하려면 번거로웠습니다. 앞으로는 보다 많은 에디터 개인설정을 모든 프로젝트에 공유되는 전역 설정으로 옮기도록 하겠습니다.

그래프 에디터내 와이어 작업

이제 아무 그래프 에디터에서나 와이어 직접 작업이 가능합니다!

image alt text

  • Alt+좌클릭으로 연결을 끊습니다.

  • Ctrl+좌클릭 드래그로 연결을 다른 핀으로 옮깁니다.

  • 와이어에 커서를 올려 강조하거나 관련된 핀의 툴팁을 확인합니다.

  • 더블클릭으로 경유지 노드를 삽입합니다 (블루프린트 그래프 전용)

프로시저럴 메시 컴포넌트 (실험단계)

새로운 프로시저럴 메시 컴포넌트를 통해 C++ 나 블루프린트를 사용해서 실행시간에 메시를 생성할 수 있습니다.

image alt text

  • 기존 커스텀 메시 컴포넌트와 비슷하지만, (머티리얼) 다중 선택, 콜리전 지원, 노멀 / 탄젠트 / UV / 버텍스별 컬러 지정같은 기능이 많이 추가되어 있습니다.

  • 메시 버텍스 위치와 UV 를 준 상태에서 부드러운 노멀과 탄젠트를 생성하는 함수가 포함된 유틸리티 라이브러리도 포함시켰습니다.

자동 컨벡스 콜리전 메시 강화

스태틱 메시 에디터를 사용하여 모델의 콜리전 메시를 자동 생성할 때, 생성된 메시의 퀄리티가 훨씬 향상되고 완료 시간도 훨씬 빨라질 것입니다!

image alt text

환경설정 가능 애니메이션 노티파이 트리거

애니메이션 노티파이 트리거 발동 시점 조절에 도움이 되는 세팅이 모든 노티파이에 새로 추가되었습니다:

image alt text

  • Notify Trigger Chance 노티파이 트리거 확률 - 0.0 에서 1.0 사이 수치로 노티파이 발동을 위한 확률을 나타냅니다 (0.0 = 발동 안됨, 1.0 = 항상 발동)

  • Notify Filter Type 노티파이 필터 유형 - 노티파이에 적용할 필터링 모드로, 현재 두 가지가 있습니다:

    • No Filtering 필터링 없음 - 노티파이가 (Trigger Chance 세팅을 통과했다 가정하고) 항상 발동됩니다.

    • LOD LOD - 소유 메시가 이 LOD 이하일 경우에만 이 노티파이가 발동됩니다. 예를 들어 세팅이 2 이면 LOD 는 메시 컴포넌트가 LOD 0 또는 1 에 렌더링중일 때만 트리거가 발동됩니다.

요청시 애셋 쿠킹 ("Cook on the Side")

  • "Cook on the Side" 는 새로운 프로젝트 세팅으로, 게임을 디바이스에서 매우 빠르게 시작시킬 수 있습니다.

  • 게임에 이 기능을 켜려면, 프로젝트 세팅의 Cooker 섹션에서 "Enable cook on the side" 옵션을 확인하면 됩니다.

    • 켜면, Launch On (실행) 버튼은 에디터 안에서, 요청이 있을 시, 네트워크를 통해 모든 애셋 쿠킹을 합니다. 이를 통해 ("Cook on the Fly" 기능을 사용할 때와 비슷하게) 게임 시작이 훨씬 빨라집니다.

    • 게임을 디버거같은 것에서 실행중일 때는, -filehostip=xx.xx.xx.xx (에디터 실행중인 컴퓨터의 IP 주소) 옵션을 붙여서 실행해 줘야 합니다.

  • 4.8 이전에 이 기능은 실험단계 기능으로 있었습니다. 이제 4.8 에서는 완벽 지원됩니다!

**다운로드 가능 콘텐츠 (DLC) 지원**

  • DLC (다운로드 가능 콘텐츠) 쿠킹이 지원됩니다. 이를 통해 나중에 사용자에게 배포시킬 수 있는 Pak 파일을 만들 수 있습니다.

    • 선택을 통해 DLC 가 (에픽에서 주기적으로 바꾸는) Engine 콘텐츠를 참조하지 않도록 할 수 있습니다.

    • 언리얼 프론트엔드에서, 커스텀 프로파일을 만든 다음, Cook -> Release / DLC / Patch Settings -> Include Engine Content 를 선택합니다.

**콘텐츠 패치 지원**

이제 기존 게임 릴리즈에서 변경된 콘텐츠 파일만 포함된 패치 파일을 생성할 수 있습니다!

image alt text

  • 새로운 애셋을 원래 발매된 게임에 있던 파일과 비교하여 생성합니다. (위와 같이) 새로 생긴 언리얼 프론트엔드 세팅을 확인해 보세요.

  • 게임 발매시 프로젝트 런처의 "Create release version" (릴리즈 버전 생성) 박스를 체크한 다음 이름을 ("1.0" 식으로) 짓습니다.

  • 그 릴리스 기준 패치를 생성하려면, 프로젝트 런처에서 "generate patch" (패치 생성) 박스를 체크합니다.

현지화 대시보드

이제 현지화 대시보드를 실험단계 기능으로 사용 가능합니다. 이 기능을 사용해서 프로젝트의 현지화 파이프라인을 관리할 수 있습니다.

image alt text

  • 현지화 타깃 (현지화 데이터 세트) 관리 및 대상 컬처 (언어, 지역, 스크립트) 지정이 가능합니다.

  • 기존 현지화 데이터 관련 현안 관리는 물론, 현지화 데이터 관련 모든 부분이 여기에 모여있습니다.

Paper2D: 스프라이트 텍스처에 직접 칠하기

스프라이트 컴포넌트는 페인트 모드에서 선택 및 페인트 가능합니다.

image alt text

  • 소스 텍스처, 부가 텍스처, 머티리얼을 통해 참조된 텍스처 등을 선택해서 칠할 수 있습니다.

  • 주: 텍스처 페인트 모드만 지원되며, 버텍스 페인트 모드는 현재 스프라이트 컴포넌트와 작동하지 않습니다.

Paper2D: 타일 맵이 실험단계 기능에서 초기 접근 미리보기 단계로 승격

image alt text

  • 이제 블루프린트에서 타일 맵 컴포넌트로 프로그래밍적 작업하는 것이 (질의를 통해서는 처음부터 만드는 것이든) 완벽 지원됩니다.

  • 타일 맵 컬러는 이제 레이어 단위는 물론 전체 타일 맵 단위로도 제어 가능합니다.

  • 이제 Staggered Isometric (시간차 등각 투영) 및 Staggered Hexagonal (시간차 육각 투영)이 지원되며, 모든 모드에서 그리드/커서 미리보기가 향상되었습니다.

  • 회전 및 반전 타일이 지원됩니다.

  • 작업/편집방식이 여러모로 개선되었습니다 (레이어 작업용 키바인딩, 예상대로 작동하는 드래그 앤 드롭, Shift+좌클릭+드래그로 기존에 칠한 타일 선택 가능, 등).

  • 콜리전 지오메트리와 커스텀 메타데이터 키를 타일 세트 에디터에서 타일 단위로 지정할 수 있게 되었습니다.

    image alt text

Paper2D: 다수의 짝 텍스처를 요하는 스프라이트 지원

스프라이트용 머티리얼에 부가 텍스처 '슬롯'을 정의하여 각 스프라이트 애셋 내 실제 텍스처를 정의하여, 다중 텍스처 스프라이트를 쉽게 사용할 수 있게 되었습니다.

  • 이것을 사용하기 좋을 몇 가지 예제라면, 부가 마스크 텍스처가 필요한 커스텀 머티리얼 (예: 진동형 발광 눈/선), 노멀 맵이 할당된 릿 스프라이트, Android에서의 ETC1 압축용으로 반투명 텍스처를 (하나는 알파 데이터가 들어간) 불투명 텍스처 둘로 나누는 것입니다.

  • 머티리얼에 SpriteTextureSampler 노드를 배치, 각각 소스 텍스처에서 샘플링할지 부가 텍스처 중 하나에서 샘플링할지를 정의합니다.

  • 스프라이트 애셋에 부가 텍스처를 연결합니다.

    image alt text

  • 스프라이트를 생성하거나 스프라이트 시트를 임포트할 때, 소스 폴더에 베이스 텍스처와 같은 이름에 N 또는 Normal 접미사가 붙은 것이 있는지 자동 검사한 다음, 있으면 0 번 부가 텍스처 슬롯에 자동으로 연결해 줍니다. 이 부분은 프로젝트 세팅 (Paper2D - Import) 에서 환경설정 가능합니다.

  • 주: 각 텍스처가 반드시 같은 크기일 필요는 없지만, 특정 스프라이트에 해당하는 부분은 각각 같은 상대 위치여야 합니다 (스프라이트당 정의되는 소스 구역은 딱 하나입니다).

Paper2D: 빠른 2D 레벨 레이아웃을 위한 스냅 레이어

2D 스냅 레이어는 2D 게임 (또는 게임플레이가 2D 인 3D 게임) 작업시 레벨 레이아웃 관리를 편하게 해 줍니다.

  • 스냅 레이어를 사용하면 지정된 레이어에 액터를 자동 또는 수동 스냅시킬 수 있습니다 (예: 전경, 배경, 플레이 공간).

  • 스냅 레이어 기능에 대한 세팅은 프로젝트 세팅 - 2D 에 있습니다.

    image alt text

  • 전체 기능을 켜거나 꺼서, 에디터 뷰포트 내 스냅 레이어 컨트롤 존재 여부를 제어할 수 있습니다.

  • 스냅 축과 스냅 깊이 / 이름 역시도 커스터마이징 가능합니다.

  • 레이어 스냅 모드가 켜졌을 때, 새로 배치되는 액터는 자동으로 활성 스냅 레이어에 달라붙습니다.

  • 언제든지 (심지어 꺼졌을 때도) 키보드 단축키 시리즈를 사용해서 활성 스냅 레이어에 갖다붙이거나 레이어 변경이 가능합니다.

    image alt text

  • 현재 레이어 스냅 (Ctrl+SpaceBar)

  • 선택 레이어를 한 단계 위로 이동 (Ctrl+PageUp, 활성 레이어 역시 변경)

  • 선택 레이어 한 단계 아래로 이동 (Ctrl+PageDown, 활성 레이어 역시 변경)

  • 선택 레이어를 맨 위 레이어로 이동 (Shift+Ctrl+PageUp, 활성 레이어 역시 변경)

  • 선택 레이어를 맨 아래 레이어로 이동 (Shift+Ctrl+PageDown, 활성 레이어 역시 변경)

  • 활성 스냅 레이어 앞으로 순환 (Alt+PageUp)

  • 활성 스냅 레이어 뒤로 순환 (Alt+PageDown)

Paper2D: 대화식 스프라이트 추출 대화창

스프라이트 추출 대화창은 텍스처에서 스프라이트를 분리해 내는 데 대해 보다 세밀한 제어가 가능하여, Paper2D 에 사용할 애셋 임포트/준비 작업이 빠르고 쉬워집니다.

  • 대화창을 띄우는 방법은 콘텐츠 브라우저에서 텍스처 컨텍스트 메뉴에 스프라이트 액션 - 스프라이트 추출을 하거나, 기존 스프라이트의 경우 소스 구역 편집 모드에서 툴바 버튼을 사용하면 됩니다.

    image alt text

  • 생성되는 스프라이트에 대한 이름 규칙과 시작 오프셋을 지정하면 됩니다.

  • 모드가 두 가지 있는데, Automatic (자동) 및 Grid-based (그리드 기반)입니다.

    • 자동은 연속 픽셀군을 식별하여 각각을 하나의 스프라이트로 취급하는 것으로, 여러 종류의 애셋이 잘 돌아가지만, 높이가 다르거나 파티클 시스템처럼 스프라이트를 너무 많이 만드는 플립북 애니메이션의 경우에는 커스텀 피벗이 필요할 수 있습니다.

    • 그리드 기반은 한 그리드 셀의 폭/높이를 지정할 수 있는 것으로, (같은 텍스처를 공유하는 다른 크기 그리드가 있는 경우) 옵션을 통해 추출할 셀의 폭/높이를 지정할 수 있습니다.

Paper2D: 그룹 스프라이트 컴포넌트

그룹 스프라이트 컴포넌트는 하나 이상의 스프라이트 애셋으로 된 다수의 인스턴스를 최소한의 뱃치를 통해 한꺼번에 그리는 것이 가능합니다 (별개의 머티리얼 또는 텍스처는 여전히 뱃치에서도 나뉩니다).

image alt text

  • 그룹 작업은 꽤나 간단합니다:

    • 3D 메시의 경우 UInstancedStaticMeshComponent 를 사용하는 것과 같은 방식으로 프로그래밍적 빌드가 가능하나, 제약이 적습니다 (스프라이트와 머티리얼을 하나로 혼합/일치시킬 수 있으며, 필요한 경우 추가 드로 콜을 생성합니다).

    • 레벨 에디터에 선택된 것이 전부 스프라이트 액터인 경우 디테일 패널의 Merge (병합) 버튼을 사용해서, 선택이 섞인 경우 우클릭 컨텍스트 메뉴를 통해 그룹 컴포넌트로 변환할 수 있습니다 (스프라이트 오브젝트가 아닌 경우는 놔두고, 스프라이트 액터는 삭제한 뒤 병합된 액터로 대체합니다).

    • 무언가 이동/위치 조정을 해야할 필요가 있는 경우 스프라이트 그룹을 다시 별개의 액터로 나눈 뒤 이동하고서 재병합하면 됩니다.

    • 렌더링 프로젝트 세팅 TranslucencySortAxis 에 따라 소팅이 가능하여, 반투명 스프라이트가 포함된 뱃치가 제대로 렌더링되게 할 수 있습니다.

  • 주: 그룹 내 모든 스프라이트는 하나 또는 소수(머티리얼 및 텍스처에 필요한 최소 횟수) 드로 콜로 그려집니다. 무슨 뜻이냐면:

    • 컬링은 전체 유닛별로 이루어집니다. 올 오어 낫띵, 모든 인스턴스를 그리느냐 아니면 아무 인스턴스도 그리지 않느냐지요. 맵의 한 쪽 끝에서 다른 쪽 끝까지 이어지는 스프라이트를 그룹으로 삼지는 않는 것이 좋을 것입니다.

    • 소팅은 전체 유닛별로 이루어집니다. 반투명 전경 스프라이트 조금, 반투명 배경 스프라이트 조금 있는 경우, 같이 그룹으로 묶지 않는 것이 좋습니다. 소트 버튼을 통해 서로를 기준으로 올바르게 소팅되기는 하지만, 중간의 반투명 플레이어가 그 사이를 지나가지는 못합니다. 그 둘의 앞 또는 뒤에만 그려지기 때문입니다.

    • 이런 종류의 소팅 문제는 반투명 머티리얼에만 해당하는 것으로, 마스크드 머티리얼에는 이런 문제가 없지만 이항 (0 또는 1) 불투명도에만 통합니다.

'Interpolate To' 컴포넌트

새로운 "Interpolate To" Movement 컴포넌트를 액터에 드롭할 수 있습니다. 그러면 액터가 자동으로 움직입니다!

image alt text

  • 다수의 보간 지점 지정은 물론, (루핑, 핑퐁 등) 여러가지 작동방식 옵션이 가능합니다.

대규모 Android 게임 지원

Google Play Store 에서의 .obb (큰 데이터) 파일 다운로드를 지원합니다.

image alt text

  • 가끔 데이터 파일이 스토어에서 다운로드되지 않는데, 이를 통해 게임 다운로드 및 실행이 보장됩니다.

  • 다운로드 화면의 커스텀 백그라운드 이미지 지원이 가능합니다.

Windows에서 iOS 프로젝트 빌드 (원격)

SSH 를 사용해 원격 Mac에서 iOS 코드 프로젝트를 빌드하는 기능이 지원됩니다.

image alt text

  • 요구사항:

    • Xcode 가 설치된 Mac에 로그인해야 합니다.

    • system keychain 에 iOS Signing Certificate 가 설치되어 있어야 합니다.

    • Windows용 DeltaCopy 또는 다른 SSH 및 Rsync 소프트웨어가 필요합니다.

  • Generate SSH Key 버튼으로 로컬 인증서를 생성해야 컴파일시 암호를 요구하지 않습니다.

    • 키를 소스 컨트롤에 체크인하여 팀과 공유할 수 있습니다.

    • DefaultEngine.ini 의 bUseRsync 를 false 로 설정하는 것으로 지원되지 않는 기존의 (UnrealRemoteTool) 방식을 계속해서 사용할 수는 있습니다.

버텍스 애니메이션 머티리얼용 모션 블러 및 안티에일리어싱

World Position Offset 을 사용한 버텍스 애니메이션이 있는 머티리얼은 이제 정확한 모션 벡터 출력이 가능합니다. 모션 벡터는 시퀀스 애니메이션에서 픽셀별 모션 블러가 가능합니다. 추가적으로 템포럴 안티에일리어싱 및 디스턴스 필드 앰비언트 오클루전 역시 바람직하지 못한 블러링 방지를 위해 올바르게 재투영 가능합니다.

World Position Offset 으로 애니메이팅되는 나무에서의 픽셀별 속도 시각화입니다.

image alt text

  • 새로운 프로젝트 세팅 'Accurate velocities from Vertex Deformation' (버텍스 변경해서 정확한 속도)를 켜야합니다. 이 기능은 베이스 패스 도중 모션 벡터가 출력되도록 만드는데, 이런 머티리얼 사용 여부에 따라 약간의 퍼포먼스 비용이 발생합니다. 이 세팅을 변경하면 에디터를 재시작해야 합니다.

  • 'Support accurate velocities from Vertex Deformation' (버텍스 변형에서 정확한 속도 지원) 세팅을 통해 머티리얼별로 이 기능을 끌 수 있습니다.

  • Speedtree 바람 노드는 'Accurate Wind Velocities' (정확한 바람 방향) 옵션을 켜야합니다.

  • 참고로 이 기능은 시간 변환에 따른 속도만 지원하며, 블루프린트나 게임 코드로 설정된 파라미터는 지원되지 않습니다.

멀티 스레드 비동기 애셋 로딩

쿠킹된 빌드는 패키지 스트리밍에 타임 슬라이스 방식 대신 패키지 스트리밍 전용 스레드를 사용할 수 있습니다. 이 옵션은 프로젝트에 새로 생긴 환경설정 옵션으로 켤 수 있습니다. 그러면 애셋 비동기 로딩 시간이 최대 3 배 빨라집니다!

  • PostLoad 의 경우 여전히 메인 스레드에서 타임 슬라이스 방식으로 이루어지는데, 대부분의 PostLoad 함수가 스레드 안전성이 확보되지 않았기 때문입니다.

  • 이제 UObject 와 UStruct 용으로 정의된 Serialize 함수 모두 스레드 안전성이 확보되어야 합니다.

  • 위 제약으로 인해 비동기 로딩 스레드는 기본적으로 꺼져 있는데, 모두에게 코드가 스레드 안전성 요건을 갖췄는지 확인할 시간을 드리기 위함입니다. 비동기 로딩 스레드는 [Core.System] 섹션 아래 AsyncLoadingThreadEnabled 세팅으로 켤 수 있습니다.

  • 비동기 로딩 스레드는 멀티스레드를 지원하지 않는 플랫폼이나 데디케이티드 서버에서는 자동으로 꺼집니다.

  • UObject 생성은 이제 스레드 안전성이 확보되어 워커 스레드에서 수행 가능합니다. 여기에는 모든 UObject 파생 클래스 생성자 역시 스레드 안전성이 확보되어야 합니다.

  • StaticFindObject, FindObject, FindObjectFast 함수 역시도 이제 스레드 안전성이 확보되었습니다. 워커 스레드에 사용되고 반환값이 스택에서만 참조된 경우, 해당 오브젝트가 어떤 것에도 참조되지 않은 것으로 가비지 컬렉터가 간주할 수 있다는 점을 염두에 두시기 바랍니다.

  • 현재 영역이 워커 스레드에서 실행중인 동안에는 GC 실행을 막는다는 점만 빼면 FScopeLock 와 비슷한 기반으로 작동하는 FGCScopeGuard 헬퍼 구조체를 도입했습니다.

  • 워커 스레드가 FGCScopeGuard 영역 안에서 코드를 실행하는 경우 가비지 컬렉션을 생략시키는 TryCollectGarbage 함수를 도입했습니다. TryCollectGarbage 는 이제 레벨 틱 코드에 기본으로 사용됩니다.

  • 비동기 로드율은 stat levels 를 통해 접근 가능하며, 이제 PostLoad 를 계산에 넣습니다.

릴리즈 노트

AI

  • AI: EQS 에 블루프린트 지원

    • 이제 블루프린트에서 인바이런먼트 쿼리 시스템(EQS)을 사용할 수 있습니다!

    image alt text

    • 쿼리 실행시 '쿼리 인스턴스' 를 얻는데, 여기에는 쿼리가 끝나면 발동되는 On Query Finished Event 라는 이벤트가 있습니다. 인스턴스에는 쿼리 결과 접근을 위한 함수도 있습니다.

  • Perception Component 에 주어진 컨텍스트에서 인지되는 모든 액터를 구하는 함수를 추가했습니다.

  • 뱃치 길찾기 EQS 테스트를 추가했습니다. 단일 지역의 다수 항목에 대한 점수를 매기는 퍼포먼스는 더 좋으나, 서로간에 멀리 떨어져 있는 소수 항목에 대해서는 적합하지 않습니다.

  • DestroyAllPawnsExceptTarget 콘솔 명령을 추가, 가리키는 중인 논-플레이어 폰 이외 모든 것을 소멸시킵니다.

  • 다중 컨텍스트에 대해 EQS 테스트의 스코어/필터링에 대한 새로운 모드를 추가했습니다.

  • EQS 쿼리에서 하나의 결과를 선택하는 모드를 추가했습니다: 최고 (상위 5%) 항목 중 랜덤, 좋은 (상위 25%) 항목 중 랜덤 입니다.

  • EQS 제너레이터에 PhysX 기반 투영이 지원됩니다.

  • AI 인지 시스템이 개선 및 수정되었습니다.

    • AI 감각이 새로운 폰을 이 감각 자극원으로 자동 등록 요청하도록 할 수 있는 방법을 추가했습니다.

    • 감각이 이제 자극에 대해서 AI Perception 컴포넌트의 On Perception Updated 를 (시각처럼) 인지 상태가 변했을 때만 호출되도록 할 것인지, (청각처럼) 업데이트때마다 할 것인지를 지정할 수 있습니다.

    • 기본적으로 모든 폰이 시각 자극원으로 자동 등록되도록 만들었습니다.

    • 액터에 추가하면 그 액터가 AI 인지 시스템에 자동 등록되게 만드는 컴포넌트를 추가했습니다.

    • AI 노이즈 이벤트, 대미지 이벤트, 예측 업데이트 요청을 쉽게 만들 수 있는 블루프린트 함수를 추가했습니다.

  • 표시여부 검사시 AI 가 자신의 폰을 무시하지 않도록 고쳤습니다.

  • 블랙보드 컴포넌트가 블루프린트 스폰 가능하도록 하여, 블루프린트 사용자가 AI 컨트롤러 밖에서도 사용을 시작할 수 있도록 만들었습니다.

  • 블랙보드의 키 이름을 키의 디테일 탭에서 편집가능하도록 만들었습니다.

  • AI 에디터(비헤이비어 트리, EQS)에서 중첩 노드, 복사 & 붙여넣기, 드래그 & 드롭 작업이 통합 지원됩니다.

  • 블랙보드 애셋에 대한 에디터 시간 변경사항이 해당 애셋에서 파생된 다른 모든 애셋에도 전파되도록 했습니다.

  • AI Perception 컴포넌트의 Get Actors Perception 함수의 깨진 조건을 고쳐, while 함수가 어떤 정보도 반환하지 않아 무용지물이던 것을 고쳤습니다.

  • AI 컨트롤러의 버그를 잡아, 이미 유효한 폰이 설정되어 있는 상태에서 Null 폰을 빙의하기 위해 AI 컨트롤러를 호출한 경우 발생하던 크래시를 고쳤습니다.

  • Blackboard 컴포넌트의 ClearValue (값 소거) 함수가 이름대로 작동하지 않던 것을 고쳤습니다.

  • 인바이런먼트 쿼리 시스템 쿼리 에디터의 메뉴가 주어진 에디터 세션 도중 생성된 새 블루프린트 클래스를 포함하도록, 그리고 새로이 삭제된 클래스를 제거하도록 개선시켰습니다.

  • 다수의 AI 인지 버그픽스 및 개선을 통해 블루프린트에서 사용가능한 상태로 만들었습니다.

  • AISenseConfig_Blueprint 를 abstract 마킹하여 센스의 드롭다운 메뉴에 지저분하게 나타나지 않도록 했습니다.

  • Character Movement Component 의 Set Avoidance Enabled 함수를 블루프린트 컨스트럭션 스크립트에 안전하지 않은 것으로 마킹했습니다. 거기서는 안전하게 호출할 수 없습니다.

  • 내비메시에서의 중복 데이터 수집을 제거, 내비 메시 렌더링을 최적화시켰습니다.

디버깅 툴

  • 폰을 디버깅하려 했는데 맵에 내비게이션 데이터가 존재하지 않을 때 크래시가 발생하던 게임플레이 디버거 버그를 잡았습니다.

  • 초기화되지 않은 블랙보드에서 비주얼 로그 스냅샷을 수집할 때 발생하던 크래시를 고쳤습니다.

내비게이션

  • 내비메시 타일을 동시 리빌드 갯수를 제한시키기 위한 방법이 추가되었습니다.

  • 설정하면 멀티플레이어 클라이언트에서 내비게이션 시스템을 만들 수 있는 환경설정 가능 플래그를 내비게이션 시스템에 추가했습니다.

  • 내비메시에 포함시킬 수 있는 총 타일 수를 제한하기 위한 환경설정 가능 옵션을 추가했습니다.

  • 스태틱 메시 에디터에 스태틱 메시가 내비게이션 시스템에 어떻게 나타나는지 미리보는 기능을 추가했습니다. 그에 대한 툴바 버튼도 있습니다.

  • 내비게이션 관련 액터의 내비게이션 콜리전 수집을 사후에 또는 즉시 하도록 하는 인스턴스별 환경설정 방식을 추가했습니다.

  • 보다 안전한 파라미터 보정을 위해 내비메시 생성 프로퍼티의 유효성을 확인하는 방법을 추가했습니다.

  • 동적인 장애물 생성을 포함해서 Shape Component 에 대한 내비게이션 익스포트를 추가했습니다.

  • 내비게이션에 관련있는 프리미티브 컴포넌트에서 내비게이션 가능 지오메트리 익스포트를 생략하는 옵션을 추가했습니다.

  • 내비메시 보행이 아래 놓인 지오메트리에 보다 가깝게 일치시키기 위한 옵션 레이캐스트를 추가했습니다.

  • 내비메시 쿼리 크기에 대한 세로 보정을 추가했습니다.

  • 내비메시 폴리곤과 보행가능 지면 사이의 높이차가 심한 영역의 내비메시 투영 방식을 고쳤습니다.

  • 크라우드의 회피 질의 범위가 속도와 무관해 졌습니다.

  • 커스텀 내비게이션 컴포넌트가 이제 부모 액터의 연관성을 덮어쓸 수 있습니다.

  • 충돌 우회 해상도를 커스터마이징 가능한 내비게이션 시스템 세팅으로 노출시켰습니다.

  • 실패한 이동 요청에 대한 AI 컨트롤러의 로그를 개선시켰습니다.

  • 내비게이션 링크는 이제 스냅 반경 내 최저비용 지역으로 연결됩니다.

  • 내비게이션 메시에 런타임 리빌드용 옵션이 생겼는데, 다이내믹 모디파이어 전용입니다. 완전 정적인 내비게이션 메시와 똑같지만 내비메시 모디파이어를 통한 메시 변경을 지원합니다 (동적 장애물). 완전 동적인 버전에 비하면 약간의 메모리 부하가 추가됩니다. 스트리밍을 지원합니다.

  • "AI Move To" 블루프린트 노드의 Acceptance Radius 파라미터 기본값을 조정하여 AI 안전성을 높였습니다.

  • "항상 로드됨" 서브레벨에서 액터 처리를 제대로 하지 못했던 내비게이션 시스템 문제를 고쳤습니다.

  • 사용자가 프로젝트 세팅을 통해 내비메시 생성 프로퍼티를 변경한 데 따른 내비메시 생성 크래시를 고쳤습니다.

  • 에디터가 이제 내비게이션 메시의 청크를 제대로 스트림 인 할 수 있을 것입니다. 이전에는 게임 월드에서만 작동했었습니다.

  • "AI Move To" 블루프린트 노드가 동적인 액터에 제대로 이동할 수 없던 버그를 잡았습니다. 목표 액터의 위치가 변경된 경우 AI 는 그냥 경로 업데이트를 하지 않습니다.

  • 경로의 최종 지점이 내비메시 위에 있지 않아서 액터로 이동이 가끔 실패하던 것을 고쳤습니다. 실제로 이 점은 보통 내비메시 너무 위에 있었습니다.

  • AI 가 외부 요인에 의한 내비게이션 경로 업데이트를 제대로 받지 못하던 것을 고쳤습니다. 예로 Move Goal Actor 의 위치가 변하는 경우입니다.

  • AI 가 일직선 경로를 따라가려는데 레벨에 내비게이션 데이터(내비메시)가 없는 경우 발생하던 AI 길찾기 크래시를 고쳤습니다.

  • AI 길 따라가기시 경로상 마지막 부분에서 동적인 골 액터로 따라가는 도중 AI 가 내비메시를 신경쓰지 않던 문제를 고쳤습니다.

  • 내비게이션 데이터의 런타임 생성 옵션을 프로젝트 세팅에서 "스태틱" 으로 설정할 수 없었던 것을 고쳤습니다.

  • AI 가 핫스팟 상호작용 또는 낙하 종료 후 이동 재개시의 자동 길 다시찾기를 고쳤습니다.

  • (길찾기 없이) 직접 내비게이션 경로 사용시 나던 크래시를 고쳤습니다.

  • 길찾기 없는 이동에 대한 크라우드 시뮬레이션을 고쳤습니다.

  • 크라우드 시뮬레이션에서 희귀하게 AI 가 벽을 뚫고 바로 보내버리던 것을 고쳤습니다.

  • 과대평가형 발견적 가중치를 사용해서 길찾기를 할 때의 주기를 고쳤습니다.

  • 목표 이동 또는 무효화 이후 지연된 경로의 즉각 리빌드를 고쳤습니다.

  • 에디터에서의 내비메시 렌더링 관련 문제를 고쳤습니다. 이제 다른 표시 플래그 옵션과 같아졌습니다.

  • 내비메시 생성시 Min Region Area 파라미터가 사용되지 않던 것을 고쳤습니다.

  • 스태틱 내비메시 로드 이후 내비게이션 링크가 빠져있던 것을 고쳤습니다.

  • 내비게이션 시스템이 내비게이션 데이터를 생성할 것으로 기대하지 않는 경우 내비게이션 옥트리를 생성하지 않도록 정책을 고쳤습니다.

  • 단일 레이어에 (255 셀을 초과하는) 거대한 높이차가 있는 경우 내비메시 생성시 발생하던 버그를 잡았습니다.

  • 내비메시 계층형 그래프 연결의 버그를 잡았습니다.

  • 속도가 제대로 보고되도록 내비메시 이동을 고쳤습니다.

  • 내비메시 생성 프로퍼티 변경시 내비메시가 적당한 세팅으로 리빌드되지 않던 것을 고쳤습니다.

  • 느리게 움직이는 에이전트가 가끔 떨던 것을 고쳤습니다.

  • 새로운 경로 수신시 경로의 시작점을 결정하는 데 있어서 Path Following Component 에 있던 문제를 고쳤습니다.

  • 단일 내비게이션 폴리곤 경로가 잘못해서 그 비용을 0 이라 하던 것을 고쳤습니다.

  • 내비메시의 디테일 폴리곤 내 트라이앵글화 문제를 고쳤습니다.

  • 에디터에서 플레이 세션 도중 단순 Move To 함수에 보고되던 경고를 고쳤습니다.

  • 내비메시 경계 근처에서의 크라우드 회피를 향상 및 최적화시켰습니다.

  • Primitive Component 가 내비메시 생성에 영향을 끼쳐야 하는지 알아내는 메커니즘을 향상시켰습니다.

  • 컴포넌트의 내비게이션 연관성 결정에 있어 그 신뢰성 향상을 위한 변경을 가했습니다. 내비메시 생성시 컴포넌트의 콜리전 토글 영향력에 직접 영향을 끼칩니다.

  • Floating Pawn Movement 를 변경, AI 에 소유되지 않았더라도 "플레이어같은" 입력으로 제어할 수 있도록 했습니다. 이러한 종류의 제어는 현재 AI 가 경로를 따라가지 않을 때만 가능합니다.

  • 씬 프리뷰가 내비게이션 시스템 인스턴스를 생성하지 않도록 만들었습니다. 내비게이션 관련 이상한 결함 다수의 원흉이었습니다.

  • 내비게이션 시스템이 내비메시 생성 퍼포먼스를 높이도록 향상되었습니다.

  • 월드 컴포지션 관련 내비메시 생성 문제를 고쳤습니다.

애니메이션

  • 애니메이션 슬롯 편집 개선

  • 이번 릴리즈에는 (몽타주에 사용할) 슬롯 이름 변경 및 삭제 기능이 추가되었습니다.

  • 이 신기능은 슬롯 그룹 창을 통해 접할 수 있습니다. 주: 사용자는 삭제 전 기존 몽타주 내 해당 슬롯에 대한 레퍼런스를 먼저 해결해야 합니다.

  • 슬롯 매니저는 레퍼런스를 검색하여 통합 전 작업을 수행하겠냐고 물어봅니다.

    image alt text

  • Humanoid Rig 에 커스텀 필드를 5 개 추가, 게임 전용으로 추가하는 데 쓸 수 있습니다.

  • 본 이름에 음영을 추가, 페르소나 뷰포트에서 렌더링됩니다.

  • 페르소나에서 애니메이션 편집 도중 프레임을 삽입하는 기능을 추가했습니다.

  • 에디터 개인설정에 애니메이션 에디터 세팅 페이지를 추가했습니다.

    image alt text

  • 프로젝트 세팅에 애니메이션 세팅 페이지를 추가했습니다.

    image alt text

  • 페르소나의 애셋 미리보기 메뉴에 필터링을 추가, 붙일 수 없는 항목이 표시되지 않도록 했습니다.

  • 액터 병합 도중 머티리얼 병합에 머티리얼 이름 로그를 추가했습니다.

  • Look at 컨트롤러 보간/제한 옵션을 추가했습니다.

  • AnimInstance 에 Montage_Pause 함수를 추가했습니다.

  • 네이티브 트랜지션 룰에 대한 네이티브 지원을 추가했습니다.

  • 상태 진입/종료 콜백에 대한 네이티브 지원을 추가했습니다.

  • 스켈레탈 메시 업데이트율 최적화를 위해 모든 것에서의 루트 모션 지원을 추가했습니다.

    • 매 프레임 틱 필요 없이 루트 모션이 가능합니다.

    • 추후 일정 기간 이후의 포즈를 계산하여 그에 대한 보간을 합니다.

  • 애님 노티파이 에디터 변경사항:

    • 기존 노티파이 노드에 대한 우클릭 메뉴에 "Replace with" (다음으로 대체) 옵션을 추가했습니다.

    • 동시에 다수의 애니메이션을 지우면 잘못된 노티파이가 지워지던 문제를 고쳤습니다.

  • 애니메이션 스테이트 머신의 자동 트랜지션 룰 프로토타입

    • 트랜지션 노드에 넣을 수 있는 옵션으로, 소스 스테이트에 시퀀스 플레이어 노드가 딱 하나 있을 때만 사용 가능합니다.

    • 'can take transition' (트랜지션 수용 가능) 룰 계산식은 Player.CurrentTime + CrossfadeDuration >= Player.SequenceLength 입니다.

    • 이 옵션을 켜면 블루프린트에서 정의된 트랜지션 룰은 무시되고, C++ 에서 자동 룰을 직접 평가하여 룰이 충분할 때마다 속도와 작업방식상의 이점을 얻을 수 있습니다.

  • Skeletal Mesh Component 의 Find Socket 함수를 블루프린트 시스템에 노출시켰습니다.

  • 피직스 바디/콜리전 모양이 애니메이션에 일치되도록 업데이트하는 코드를 최적화시켰습니다.

  • 최적화된 스테이트 머신 틱

    • 트랜지션 평가용 할당 및 재할당 대부분을 방지합니다.

    • C++ 룰이 있는 경우 블루프린트 트랜지션 룰 호출을 피합니다.

  • 페르소나에 "Auto align floor to mesh" (바닥을 메시에 자동 정렬) 옵션을 껐다켰다 토글시키는 옵션을 추가했습니다.

    image alt text

  • 이전에는 자동 정렬이 켜진 상태였습니다. 그러면 페르소나에서 메시 경계 하단에 정렬되도록 바닥을 이동시킵니다. 자동 정렬 옵션을 끄면 바닥을 원점으로 다시 이동시킵니다.

  • 뷰포트의 표시 -> 씬 셋업 -> 바닥을 메시에 자동 정렬 메뉴를 통해 접근합니다.

  • 이제 틱 도중 몽타주 이벤트를 대기열에 등록하여, 애님 노티파이 이후 발동되도록 했습니다.

  • 애니메이션 임포트시 기존 모프 타깃 커브를 전부 지우는 옵션이 제공됩니다.

  • 리타기팅 창 검색시 본 이름, 표시명, 노드명이 포함되도록 하는 기능을 추가했습니다.

  • 애셋 저장이 필요함을 제대로 마킹해주는 애님 노티파이 스테이트를 애니메이션에 추가했습니다.

  • 이제 페르소나에서 메시에 있지 않은 본을 클릭하여 본 선택을 해제시킬 수 있습니다.

  • 리타기팅 옵션을 스켈레톤 탭의 고급 옵션으로 변경했습니다. 여러가지 다른 옵션이 많이 들어있습니다.

  • 압축 종료후 애님 압축 대화창이 자동으로 닫히도록 변경했습니다.

  • 콘텐츠 브라우저에서 애니메이션을 새로 만들지 못하도록 했습니다. FBX 파일을 임포트하는 것으로 애니메이션 애셋을 생성해야 합니다.

  • FBX 임포트/익스포터는 이제 메시, 본, 머티리얼, 모프 타깃 이름에 UTF8 을 지원합니다.

  • 애디티브 애니메이션에 루트 모션이 소거되지 않던 것을 고쳤습니다. 페르소나에서 프리뷰 메시가 움직이지 않아야 할 때 움직이게 만들었었습니다.

  • 루트 모션의 곱하기 순서를 고쳤습니다.

  • 싱크 그룹에서 애니메이션간의 블렌딩시 루트 모션 가중치 문제를 고쳤습니다.

  • 애니메이션 그래프에서 기존 "Two Bone IK" 노드 선택시 발생하던 크래시를 고쳤습니다.

  • 애니메이션 시스템을 깨뜨리던 다양한 음수 재생 속도 경우를 고쳤습니다.

    • 음수 재생 속도 도중 루트 모션 출력을 고쳤습니다.

    • 재생 속도가 -1 이고 현재 위치가 0 인 몽타주가 진행되지 않던 문제를 고쳤습니다.

    • 음수 재생 속도가 있는 세그먼트 포함 애님 몽타주의 역재생시 크래시를 고쳤습니다.

    • 음수 재생 속도 포함 몽타주 재생시 발생하던 무한 루프를 고쳤습니다.

    • 컴포짓 애니메이션에서의 음수 재생 속도 사용을 고쳤습니다.

    • Single Node Anim Instance 가 "is finished" 로직 수행시 애셋 재생 속도를 계산에 넣도록 변경했습니다.

  • Blend Space 입력 미리보기가 처음 열었을 때는 작동하지 않던 문제를 고쳤습니다.

  • Native Transition Delegate 가 컨듀잇 엔트리 룰 처리시에는 검사하지 않던 문제를 고쳤습니다.

  • 리타깃 트랜슬레이션 옵션이 다른 압축 세팅에서 에디터 크래시가 나던 문제를 고쳤습니다.

  • 본 드롭박스를 선택하면 리타깃 매니저에서 검색한 이후 표시되지 않던 문제를 고쳤습니다.

  • 길이를 리샘플 레이트로 나눌 수 없는 애니메이션 임포트시 애니메이션 길이 계산이 잘못되던 것을 고쳤습니다.

  • 시뮬레이션중이 아닐 때는 애니메이션 녹화를 할 수 없던 것을 고쳤습니다.

  • 액터 병합 도중 출력 패키지 생성시의 버그를 고쳤습니다.

  • "modify bone" 노드 본 이름을 None 으로 설정시 크래시를 고쳤습니다.

  • 단일 키로 애니메이션 리타기팅을 시도할 때의 크래시를 고쳤습니다.

  • 마스터 포즈 컴포넌트에서 본이 숨겨져 있을 때 슬레이브 본 숨김을 고쳤습니다.

  • 부모가 구조적으로 변경되고 자손은 데이터 전용 블루프린트일 때 자손 애님 블루프린트의 인덱스 불일치가 잘못된 동작 및 크래시를 내던 것을 고쳤습니다.

  • 노티파이 트랙 패널에서 패널 세로 스크롤이 트랙 패닝보다 우선시되던 문제를 고쳤습니다.

  • 업데이트 속도가 단일 액터의 모든 스켈레탈 메시 컴포넌트에 제대로 적용되지 않던 문제를 고쳤습니다.

  • Play Particle Effect 블루프린트 노티파이에 위치 오프셋 값이 제대로 걸리지 않던 것을 고쳤습니다.

  • 컨스트럭션 스크립트에 마스터 포즈 컴포넌트가 할당될 수 있었던 것을 고쳤습니다.

  • 몽타주가 발동된 이후 Blend Out Time 이 변경되면 몽타주가 멈추지 않던 것을 고쳤습니다.

  • 모프 타깃 식별자가 가끔 로드시 깨지던 것을 고쳤습니다.

  • 모프 타깃 로딩시 순서로 인해 똑똑한 이름이 깨지던 문제를 고쳤습니다.

  • 싱크 그룹 포함 시퀀스 플레이어 노드에 대한 노드 제목 표시를 고쳤습니다.

  • 몽타주의 애니메이션 시퀀스 끝에 있는 노티파이가 블렌드 아웃 때문에 발동되지 않던 것을 고쳤습니다.

  • 더블 버퍼 본으로 인한 피직스 본 블렌딩 문제를 고쳤습니다.

  • 재생중인 몽타주 변경시 페르소나의 플레이 상태가 리셋되는 것을 고쳤습니다.

  • 블렌드스페이스 프리뷰 관련 잠재적 크래시를 고쳤습니다.

  • 컴포넌트 스페이스가 액터 스페이스에 일치하지 않을 때의 루트 모션 계산을 고쳤습니다.

  • 애님 블루프린트 리타깃 도중 에임 오프셋이 제대로 변환되지 않던 것을 고쳤습니다.

  • 레벨에 배치된 스켈레탈 메시 액터가 디테일 패널에서 애니메이션 변경시 애니메이션을 업데이트하지 않던 것을 고쳤습니다.

  • 소켓이 붙어있는 본이 현재 LOD 의 일부가 아닌 경우 스켈레탈 메시의 소켓 위치가 잘못되던 것을 고쳤습니다.

  • 페르소나 프리뷰 인스턴스 삭제로 인해 발생된 스테이트 머신 업데이트 크래시를 고쳤습니다.

  • Parallel Anim Evaluation 로 실행시 Spring Bone Controller 관련 크래시를 고쳤습니다.

  • 스켈레탈 메시의 머티리얼 변경시 되돌리기가 정상 작동하지 않던 것을 고쳤습니다.

  • 다수의 숨겨진 페르소나 인스턴스가 더이상 에디터 퍼포먼스를 갉아먹지 않도록 페르소나 내 뷰포트 표시여부 계산을 고쳤습니다.

  • 스켈레톤 리임포트를 향상시켰습니다. 스켈레톤의 계층구조가 리임포트 도중 대폭 변경된 경우, 모든 애니메이션 애셋을 고칠 것입니다.

  • Mixamo Fuse 로 생성된 메시 임포트 지원이 개선되었습니다.

  • 에디터 리로드시 노티파이 스냅 문제를 개선시켰습니다.

  • FBX 파일에서 커브 탄젠트 임포트 방식을 개선시켰습니다.

  • 애님 노드 업데이트 방식이 약간 최적화되었는데, 하나 이상의 포즈가 아닌 입력 핀이 그래프의 표현식 또는 변수에 연결된 경우, 빠른 호출 경로를 사용합니다.

  • 레퍼런스 스켈레톤에 대한 레퍼런스가 아닌 그냥 복사를 하던 애니메이션 코드를 최적화시켰습니다.

  • 스테이트 머신 틱을 최적화시켰습니다.

    • 트랜지션 평가용 대부분의 할당 및 재할당 부분이 최적화되었습니다.

    • C++ 룰이 있을 때는 블루프린트 트랜지션 룰 호출을 피합니다.

  • 스켈레탈 메시 LOD 에 버텍스가 0 인 경우의 크래시를 방지했습니다.

오디오

  • 이제 각 PIE 창에 대해 고유의 오디오 디바이스 인스턴스가 생성될 것입니다.

    • 이를 통해 각기 다른 플레이어 관점에서 보다 정확한 오디오 재현이 가능합니다.

    • 한 디바이스는 에디터의 "메인" 오디오 디바이스이자 "실시간" 오디오가 재생되며, 새로운 PIE 세션에는 고유의 오디오 디바이스가 새로 생성됩니다.

    • 새로운 오디오 디바이스는 저사양 머신에서 에디터 퍼포먼스에 영향을 끼칠 수 있으므로, 현재 기본 오디오 디바이스 수는 2 입니다 (메인 오디오 디바이스에 1, PIE 세션에 1). PIE 세션이 1 이상이면 메인 오디오 디바이스를 사용하게 됩니다.

    • 실행되는 모든 PIE 세션에 대해 새로운 오디오 디바이스를 만들도록 하려면, 새로 생긴 고급 멀티플레이어 옵션이 있습니다.

      image alt text

  • 오디오 컴포넌트의 Is Playing 함수가 이제 Pure 블루프린트 함수가 되었습니다.

  • 내부 사운드 큐를 사용하는 앰비언트 사운드를 복사해 붙여넣어도 정상 작동합니다.

  • 오디오 컴포넌트에 대한 통계 표시가 연관된 애셋을 포함시키지 않던 문제를 고쳤습니다.

  • 소스 .wav 리임포트시 재생중이던 사운드가 재시작되지 않던 버그를 잡았습니다.

  • 사운드 큐 에디터가 실행 경로를 표시하지 않던 문제를 고쳤습니다.

  • "Log Reverse" 감쇠 함수 관련 수학 오류를 고쳤습니다.

  • 오디오 애셋에 대한 메모리 통계 추적 관련 문제를 고쳤습니다.

  • 사운드 큐의 Sound Node Random 에서 임의 가중치 선택 알고리즘을 고쳤습니다.

  • Android 플랫폼의 사운드 소스 볼륨 세팅이 선형 볼륨에 정확히 일치되고 0.0 이면 들리지 않도록 고쳤습니다.

  • 사운드 큐에 대한 최대 거리 계산시 Sound Node Param Cross Fade 의 요소로 거리를 사용하던 것을 제거했습니다.

  • 멀티 채널 사운드에 사용되는 공간화가 해당 사운드 웨이브 재생시마다 한 번이 아닌, 사운드 웨이브 애셋마다 딱 한번씩만 보고됩니다.

  • 사운드 큐 에디터가 닫히면 재생중이던 사운드 큐 미리듣기가 중지됩니다.

자동화

  • 애니메이션 그래프의 로테이션 멀티플라이어 본 컨트롤러 노드에 애디티브 플래그를 추가했습니다.

  • 엔진 자동화 테스트는 이제 System 과 Project, 두 카테고리로 나뉩니다.

    • 'system' 카테고리는 프로젝트에 무관한 테스트 또는 툴 용입니다.

    • 'project' 카테고리는 특정 프로젝트 전용 테스트 또는 툴 용입니다.

  • 스태틱 메시 UV 검사를 리팩터링하여 이제 'complex' 테스트가 되었습니다.

    • 모든 메시를 한꺼번에가 아닌, 개별 메시를 검사할 수 있습니다.

    • 스태틱 메시 UVs 검사는 더이상 엔진 콘텐츠 애셋에 실행되지 않습니다.

  • 애셋 유형 열기 자동화 테스트가 다시 'complex' 테스트가 되었습니다.

    • 이를 통해 애셋 유형이 동일한 모든 애셋에 대해 한꺼번에가 아닌 개별 애셋별로 이 테스트를 실행할 수 있습니다.

    • 애셋 유형열기 테스트는 언리얼 프론트엔드 내 자동화 테스트 계층구조의 툴 섹션에서 찾을 수 있습니다.

  • 연결된 모바일 디바이스 나열을 위한 자동화 스크립트를 추가했습니다.

  • 콘텐츠에 의존하는 특정 복합 자동화 테스트는 애셋 레지스트리의 전체 로드를 요합니다. 이제 자동화 프레임워크는 테스트 실행 전 레지스트리 로드를 기다립니다.

  • exFAT 파일 시스템에서의 쿠킹 프로세스를 고쳤습니다. 타임스탬프 저장 방식으로 인해 실패하고 있었습니다.

  • 에디터 자동화 테스트의 Load All Maps (모든 맵 로드) 테스트는 더이상 엔진 콘텐츠 폴더에서 찾은 맵을 대상으로 실행되지 않습니다.

블루프린트

  • 블루프린트: 드래그 앤 드롭으로 새 핀 생성

    • 함수 및 매크로 입구/결과 노드, 접힌 그래프 노드 (및 해당 그래프의 입구/결과 노드), 커스텀 이벤트 노드상에 핀 연결을 드래그 앤 드롭해 놓으면 핀 연결이 생성됩니다.

    • 이 기능을 사용하려면, 그냥 핀 연결을 끌어 노드 위에 놓으면 됩니다:

    image alt text

    • 그 결과 새로운 핀이 생기고, 이미 이름도 지어져 있고 연결도 되어 있습니다.

  • Get 노드가 유효성 검사 가능

    • 이제 아무 GET 변수 노드에 우클릭한 다음 "impure" 노드로 변환하면 값의 유효성에 따라 분기됩니다. 오류 처리가 쉬워집니다.

    image alt text

    • GET 노드에 우클릭한 다음 "Convert to Validated Get" 를 선택하는 것으로 기능이 토글됩니다!

    image alt text

  • "실행 경로가 반환 노드로 끝나지 않습니다." 블루프린트 컴파일러 노트를 추가했습니다.

  • "경로가 절대 실행되지 않습니다." 블루프린트 컴파일러 노트를 추가했습니다.

  • "경로가 절대 실행되지 않습니다." 블루프린트 컴파일러 노트를 추가했습니다.

  • Actor SetOwner 를 이제 블루프린트에서 호출 가능합니다.

  • 블루프린트 그래프 메뉴에 "타깃 컨텍스트" 메뉴를 추가, 사용자에게 메뉴의 컨텍스트를 더욱 자세히 제어할 수 있도록 했습니다. 사용자는 이제 오브젝트 핀에서 끌어올 때, 그 블루프린트에 속하는 함수를 검색할 수 있습니다.

    image alt text

  • 블루프린트 노드 우클릭시 해당 노드의 문서를 열람할 수 있는 메뉴 옵션을 추가했습니다.

    image alt text

  • 블루프린트 에디터 세팅에 옵션을 추가하여, 디테일 패널 내 컴포넌트 트리 뷰에서 컨스트럭션 스크립트에 추가된 컴포넌트의 표시여부를 제어할 수 있습니다.

    • 에디터 개인설정 -> 블루프린트 에디터 -> 디테일 뷰에서 컨스트럭션 스크립트 컴포넌트 숨김 (기본은 켜짐)

  • Blueprint Spawn Actor From Class 노드에 옵션 "Owner" 파라미터를 추가했습니다.

  • 새 블루프린트에 배치되는 기본 노드의 활성화/비활성화용 블루프린트 에디터 세팅을 추가했습니다. 기본적으로 켜져있습니다.

  • Enum 비동일성 테스트를 위한 블루프린트 노드 (!=) 를 추가했습니다.

  • 리니어 컬러를 반환하는 블루프린트용 Get Light Color 블루프린트 접근자를 추가했습니다.

  • 오브젝트에서 스트링으로의 자동 형변환을 받을 수 있는 GetDisplayName 을 추가했습니다.

  • UObject 의 정확한 오브젝트 이름을 반환하는 GetObjectName 을 추가했습니다.

  • 새로운 increment (증가), decrement (감소), negate (부정) 매크로를 새로 추가했습니다.

  • 역방향 이동하는 경유지 노드용 방향 전환이 지원됩니다. '상투' 효과를 피할 수 있습니다.

    image alt text

  • 블루프린트 Call Function 노드는 이제 현지화된 함수 이름이 표시됩니다.

  • 블루프린트 검색이 멀티프로세서를 더욱 잘 활용하여, 일부 머신에서는 검색속도가 배가됩니다.

  • 다수의 컴포넌트 변수를 블루프린트에 드래그 앤 드롭하여 전부 노드로 배치되도록 할 수 있습니다.

  • 변수 드래그 앤 드롭으로 카테고리를 변경했던 것도 되돌리기 가능합니다.

  • 경유지 노드 코멘트 핀 기능 구현을 변경, 사용자에게 커서를 올렸을 때 현재 디스플레이에 대한 대안을 제공합니다.

  • 두 날짜 시간 빼기를 블루프린트에 노출시켰습니다.

  • 제대로 호출되지 않던 이벤트 디스패처를 고쳤습니다.

  • 제스처 키가 이제 블루프린트 바인딩 가능합니다.

  • 교정된 이름과 교정되지 않은 이름으로 검색할 때 클래스, 구조체, Enum, 오브젝트 검색을 위한 핀 유형 클래스 검색을 개선시켰습니다.

  • "지역과 언어" 에서 모든 그래프 에디터의 노드와 핀 현지화 토글이 가능합니다.

  • PIE 실행 도중 무한 루프 메시지가 이제 모달 대화창이 아닌 메시지 로그 대화창에 게시됩니다.

  • 블루프린트에 역보간 함수를 추가했습니다.

  • 하나의 Append 노드에 우클릭하여 '핀 추가'를 하는 것으로 여러 스트링을 덧붙일 수 있게 되었습니다.

  • 블루프린트에 Grip Snap 노드를 추가했습니다.

  • 전에는 3D 벡터에만 가능했었던 보간 함수를 이제 2D 벡터에도 사용 가능합니다.

  • Select 노드를 컨텍스트 메뉴에서 만들 때, 끌어온 핀을 Select 노드의 인덱스 핀에 연결합니다.

  • Join String Array 함수를 추가했습니다.

  • 이제 블루프린트를 통해 Light Component 클래스 서브클래싱이 가능합니다.

  • Math 표현식 노드가 로컬 변수를 지원합니다.

  • 타이머용 함수를 새로 추가, 이벤트의 이름이 아닌 이벤트의 델리게이트를 받습니다.

  • 오브젝트 및 클래스 핀은 이제 파라미터 메타데이터에 따라 나열 항목을 필터링합니다.

  • 플레이어 스타트가 이제 블루프린트를 통해 서브클래싱 가능합니다.

  • 레벨 뷰포트에서 액터를 대체하면 레벨 블루프린트에서도 모든 레퍼런스가 자동 대체됩니다.

  • 스트리밍 레벨 LOD 가 이제 블루프린트에 노출되었습니다.

  • 스트리밍 레벨은 이제 Is Streaming State Pending 함수를 블루프린트에 노출시킵니다. 이를 사용해서 서브레벨이 완전 스트림 인/아웃 되었는지 검사할 수 있습니다.

  • 블루프린트를 통해 정의된 액터 컴포넌트의 서브클래스는 이제 자체적으로 Destroy Component 호출 가능합니다.

  • Render To Texture 블루프린트 카메라 오리엔테이션을 뒤집어 월드 스페이스에서의 노멀 맵 렌더링 방식에 일치시켰습니다. 이를 통해 캡처된 텍스처의 채널을 뒤집을 필요가 없어졌습니다.

  • Render To Texture 블루프린트는 이제 플립북용 모션 벡터 렌더링이 가능합니다. 모션 벡터는 프레임 모핑에 사용하여 적은 프레임으로도 부드러운 결과를 내기 위해 쓰입니다. Flipbook_MotionVectors 라는 비슷한 머티리얼 함수가 있는데, 다른 프로그램에서 생성된 모션 벡터와 함께 사용할 수도 있습니다. 임포스터에도 곧 등장합니다.

  • Render to Texture 블루프린트에 두 가지 모드가 새로 생겼습니다:

    • "Random Tiling Physics Drop" 은 목록에서 주어진 수만큼의 메시가 면에 충돌하는 시뮬레이션을 한 다음, 그 결과를 자동으로 타일링 텍스처로 변환합니다. 강둑이나 타일식 자갈을 만드는 데 좋습니다. 콜리전을 꺼서 풀이나 꽃처럼 간단한 임의 메시 분포를 만들 수 있습니다. K 키를 누르면 시뮬레이션을 계속하여 겹겹이 쌓인 결과를 얻을 수 있습니다.

    • "Tiling Hand Placed Meshes" 는 캔버스에 걸쳐 배치된 메시 각각을 자동으로 감싸서 타일링 텍스처를 만드는 모드입니다. 이 모드는 고해상도의 원본 바위에서 타일식 바위 텍스처를 만들 때 가장 좋습니다.

  • 고급 사용자가 환경설정 파일에서 블루프린트 기본값을 설정한 다음 각기 다른 프로젝트와 환경설정 구성상에서 커스터마이징할 수 있도록 하는 기능을 추가했습니다.

    • 이 옵션은 블루프린트 변수 디테일 패널의 고급 부분에 있으며, 값 설정에 사용할 환경설정 파일을 지정해 줘야 합니다.

  • 변수를 그래프에 끌어놓을 때, 배치 시작 전에만 Ctrl/Alt 를 눌러야 Get/Set 노드가 배치되는 것이 아닌, 그 중간 아무때나 눌러도 되도록 변경했습니다.

    • Ctrl + Alt 를 동시에 누른 상태에서 배치하면 Get 과 Set 노드 둘 다 배치되는 기능도 추가했습니다.

  • 노드 코멘트 말풍선에 기본 코멘트 노드 제목 색을 노출, 사용자가 원하는 색을 설정할 수 있도록 했습니다.

    • 이 세팅은 에디터 개인설정의 그래프 에디터 섹션 아래 찾을 수 있으며, 이름은 Default Comment Node Title Color 입니다.

    • 이 세팅은 코멘트 노드 기본색도 조절합니다.

    • 이 세팅을 변경하면 열려있는 그래프 에디터를 닫고 다시 열어야 효과가 적용됩니다.

  • 카메라 컴포넌트가 이제 Blueprintable 이 되어, 자체 독립적인 스마트 카메라를 보다 쉽게 만들 수 있습니다.

  • 텍스트 및 스트링 핀이 이제 여러줄이 가능합니다. Shift+Enter 를 치면 새 줄로 넘어갑니다.

  • 블루프린트에 영향을 끼치지 않는 되돌리기/다시하기 동작이 더이상 열었을 때 미저장 상태가 되도록 하지 않습니다.

  • Increment, Decrement, Negate 매크로에 간략 표현을 사용합니다.

  • 블루프린트 형변환 노드를 impure 에서 pure 로 변환할 때, 주변의 실행선이 자동으로 고정되어 실행 흐름이 유지됩니다.

  • Spawn Actor From Class 노드가 더이상 클래스 변경시 나머지 핀의 연결을 끊지 않습니다.

  • 스태틱 배열이 들어있는 네이티브 구조체가 블루프린트 내 함수의 파라미터가 될 수 있습니다.

  • Absolute (int) 와 Sign (int) 함수가 키즈멧 매쓰 라이브러리에서 보통의 작명 규칙을 따르도록 업데이트되었습니다.

  • 블루프린트 에디터에서 네이티브 C++ 컴포넌트 디폴트 편집시 디테일 뷰에 액터 프로퍼티가 더이상 나타나지 않습니다.

  • 유예식 종속성 로딩에 자잘한 픽스가 여럿 추가되었습니다 (4.7 에 추가된 시스템으로, 블루프린트 순환 종속성 로드 문제를 해결했었습니다).

  • 블루프린트 에디터의 노드 메뉴가 잘못된 입력시 크래시가 나던 것을 방지하는 보호 기제를 강화시켰습니다.

  • 오브젝트 핀을 연결하는 인터페이스 핀이 지원됩니다. 변환 노드는 이제 생성시 자동 주입되며, 형변환 노드는 어떤 유형이든 받습니다.

  • 새로운 부모 변수와 충돌을 일으키는 블루프린트 변수를 잡아내는(catch) 기능이 지원됩니다. 이름 충돌을 피하기 위해 자손의 변수 이름을 자동 변경합니다.

  • 블루프린트에서 함수 핀을 추가하거나 이름변경하면, 그 함수를 현재 사용하는 부분도 제대로 새로고쳐집니다.

  • Set member in .. 노드의 모든 입력 핀은 기본적으로 숨겨집니다.

  • 매크로 입력에 대해 자동 생성된 배열은 공백입니다. 이전에는 기본적으로 엘리먼트가 하나 있었습니다.

  • 블루프린트 노드는 반환 노드에 도달한 이후 실행되지 않습니다. 그림의 Print String 노드는 실행되지 않습니다.

    image alt text

  • 블루프린트 부모를 변경하면 더티 마킹됩니다.

  • 블루프린트는 더이상 Cull Distance Volume 활성화/비활성화 시도를 하거나, 동적으로 Cull Distance 변경이 불가능합니다.

  • 블루프린트 디테일에서 액터 클래스 내 Tick 카테고리 표시를 숨길 수 있습니다.

  • 내 블루프린트 창에서 더이상 타임라인 변수를 복제할 수 없습니다.

  • 블루프린트 "불필요한 형변환" 오류를 경고로 변경했습니다.

  • 블루프린트 팔레트 툴팁이 해당 노드의 툴팁을 보다 밀접하게 반영하도록 변경했습니다.

  • 블루프린트 버전비교 툴의 Changelist 번호가 더이상 쉼표로 표시되지 않습니다.

  • 레벨 에디터 툴바의 블루프린트 드롭다운을 통해 게임모드에 가해진 변경사항은 게임모드/레벨 을 더티 마킹합니다.

  • 커스텀 이벤트의 리플리케이션을 변경하면 즉시 노드의 제목이 갱신됩니다.

  • 이제 핀 값 변경을 되돌릴 수 있습니다.

  • 블루프린트 클래스 애셋 인스턴스의 컴포넌트 프로퍼티 값을 변경하면, 이전 값에 참조된 컴포넌트 인스턴스 상의 델리게이트에 바인딩된 이벤트가 소거됩니다. 이를 통해 값이 바뀔 때마다 기존 바인딩이 지속되던 문제가 해결됩니다.

  • 코멘트 풍선 색이 코멘트 노드에 설정된 프로퍼티를 따라갑니다.

  • 마우스/화면 위치에서 월드로의 변환, 그리고 화면 위치로의 역변환이 Resolution Quality 감소시 정상 작동합니다.

  • pure 에서/로의 형변환 노드가 되돌리기/다시하기 작업에 추가됩니다.

  • 블루프린트 게임 인스턴스가 할당된 쿠킹 프로젝트가 더이상 크래시가 나지 않습니다.

  • 이름에 공백이 포함된 핀이 있는 커스텀 이벤트를 복사해 붙이면 더이상 각 단어마다 개별 핀이 생성되지 않습니다.

  • 이름이 공백이 포함된 접힌 그래프 노드를 복사해 붙이면 더이상 핀 연결 데이터를 잃지 않습니다.

  • 애셋 레지스트리 태그를 구하려 하는 레벨 내 블루프린트와 그 부모를 지울 때 발생하던 크래시를 고쳤습니다.

  • None 오브젝트에서 네이티브 함수로 Text 가 전달되었을 때의 크래시를 고쳤습니다.

  • 다른 블루프린트를 기반으로 블루프린트를 만들어도 더이상 "노드 추가" 작업이 유발되지 않습니다.

  • Current Max Draw Distance 는 블루프린트에서 읽을 수만 있지, 쓸 수는 없습니다.

  • 블루프린트에서 스폰된 데칼과 이미터가 더이상 의도치 않게 가비지 컬렉팅되지 않습니다.

  • 블루프린트에 기본 배치된 이벤트에 코멘트 풍선이 정상 표시됩니다.

  • 사용자 정의 구조체에서의 기본값이 블루프린트의 값을 제대로 덮어씁니다.

  • 블루프린트 함수 내 실행시간의 Divide-by-zero (및 기타) 경고는 명령줄에 -scriptstackwarnings 를 붙인 경우 스크립트 콜스택에 포함됩니다.

  • Do Once Multi Input 이 이제 영어 이외의 언어에서도 작동합니다.

  • 내 블루프린트 창의 다른 액션 위에 로컬 변수를 끌어 놓으면 그렇게 할 수 없다는 오류가 납니다.

  • 블루프린트 노드 컨텍스트 메뉴 필터에 많은 양의 텍스트를 붙여넣어도 에디터가 버벅이지 않습니다.

  • 범위가 현재 블루프린트인 함수 노드가 포함된 함수 노드를 펼쳐도 더이상 Call Function 노드가 없어지지 않습니다.

  • Get Actor Eyes Viewpoint 를 블루프린트에 노출시켰습니다 (Pawn 클래스).

  • 사용자 정의 함수의 'const' 특성을 고급 옵션으로 노출시켜 다른 블루프린트 함수가 'const' BlueprintImplementableEvent 오버라이드에서 호출되도록 했습니다.

    • 참고로 'const' 와 'pure' 는 함수 특성으로써 블루프린트 에디터에 다른 의미를 갖습니다. 'pure' 는 실행 핀이 함수 호출 노드에 나타나도록 할 것인가를 제어하며, 진짜 순수 함수성은 현재 집행되지 않습니다.

    • 또는 고급 섹션을 노출시키고 'const' 를 체크하면 함수 그래프 내 읽기전용 'self' 컨텍스트를 집행하는 몇몇 컴파일 시간 체크가 활성화됩니다.

  • 배열 분할 노드 핀이 블루프린트 로드시 재결합될(, 그래서 특정 선 연결이 끊어질) 수 있었던 버그를 잡았습니다.

  • 씬 컴포넌트 제거시 블루프린트 리컴파일 도중의 크래시를 고쳤습니다.

  • 덮어쓴 함수에 로컬 변수 추가시 크래시를 고쳤습니다.

  • 데이터 전용 블루프린트의 "외부 오브젝트에 그래프 링크됨" 오류에 대해 고쳤습니다.

  • 클래스 뷰어( 또는 클래스 선택기 인스턴스)에 새로운 블루프린트가 즉시 나타나지 않던 것을 고쳤습니다.

  • 별도의 기본 서브오브젝트가 있는 블루프린트 생성 컴포넌트 포함 액터가 들어있는 맵 저장시의 외부 오브젝트에 그래프 링크됨 오류를 고쳤습니다.

  • 컨스트럭션 스크립트 재실행에 의해 곧 소멸될 컴포넌트가 재등록되어 발생되는 되돌리기/다시하기 이후 문제를 고쳤습니다.

  • 게임 동작 사용에 의한 블루프린트 미리보기 창 결과 관련 문제를 고쳤습니다.

  • 되돌리기/다시하기 시 소멸된 블루프린트 생성 컴포넌트가 액터에 붙은 채 남아있을 수 있던 문제를 고쳤습니다.

  • 컴포넌트 복사하기/붙여넣기에 의해 유발되는 "외부 오브젝트에 그래프 링크됨" 오류를 고쳤습니다.

  • 컴포넌트 차이 확인 시도시의 블루프린트 병합 툴 크래시를 고쳤습니다.

  • 우클릭 컨텍스트 메뉴 사용시 크래시를 유발하던 Physics Collision Handler Blueprint 내 버그를 잡았습니다.

  • 블루프린트 부모변경 및 컴포넌트 순서변경시 크래시가 나던 블루프린트 컴포넌트 계층구조 내 버그를 잡았습니다.

  • 배열이 아닌 핀에서 드래그할 때 배열 노드 옵션을 표시하지 않던 블루프린트 컨텍스트 메뉴 내 버그를 잡았습니다.

  • Mac에서 블루프린트 에디터 뷰포트에 선택된 컴포넌트를 삭제할 수 없었던 버그를 잡았습니다.

  • 블루프린트에서 기본값을 덮어쓰는 노드를 컨스트럭션 스크립트에서 제거해도 기본값으로의 복원을 막을 수 있었던 버그를 잡았습니다.

  • 상위 클래스에서 블루프린트 함수 이벤트 삭제시 크래시가 날 수 있었던 버그를 잡았습니다.

  • 지워진 이벤트를 구현하는 블루프린트가 있는 레벨 로드시 크래시가 날 수 있었던 버그를 잡았습니다.

  • "다음을 사용해서 블루프린트 생성..." 옵션을 통해 콘텐츠 브라우저에서 생성된 블루프린트 내 컨텍스트 메뉴를 열 때 크래시가 날 수 있었던 버그를 잡았습니다.

  • 자손이 열린 블루프린트에 변경을 가한 이후 블루프린트 컨텍스트 메뉴를 여는 도중 크래시를 유발할 수 있던 버그를 잡았습니다.

  • (애셋 삭제 중단이 일어난 후) 블루프린트 에디터를 연 뒤 잠시 후 랜덤 크래시를 유발할 수 있었던 버그를 잡았습니다.

  • 로드시 이벤트 디스패처 노드에 바인딩된 액터를 깨뜨릴 (관련된 액터의 이벤트 트리거시 더이상 발동되지 않을) 수 있었던 버그를 잡았습니다.

  • 블루프린트 이벤트 디스패처 노드가 잘못된 시그너처를 갖도록 만들 수 있었던 버그를 잡았습니다.

  • 블루프린트 인터페이스를 다른 블루프린트에서 제거하기 전 삭제할 때 크래시가 날 수 있었던 버그를 잡았습니다.

  • 에디터에서 플레이 도중 블루프린트의 디폴트를 변경할 수 있도록 하던 버그를 잡았습니다.

  • 블루프린트가 완전 컴파일되기 전까지 새로운 Function Call 노드에 오류 마킹을 하던 버그를 잡았습니다.

  • 타임라인 노드 이름을 변경하면 타임라인 변수 노드가 업데이트되지 않는 버그를 잡았습니다.

  • 블루프린트 컨텍스트 메뉴에 콘텐츠 브라우저에서 선택된 애셋에 연관된 AddComponent 옵션이 표시되지 않던 버그를 잡았습니다.

  • Multi Gate 노드에서 여러 함수의 다중 실행시 메모리가 뭉개져 크래시가 날 수 있었던 버그를 잡았습니다.

  • 블루프린트 에디터의 디테일 탭에서 닫고 다시 열면 크래시가 날 수 있었던 버그를 잡았습니다.

  • Get Data Table Row 노드에서 출력 유형이 로드시 복원되어 핀 연결이 해제될 수 있었던 버그를 잡았습니다.

  • Restrict To Class 메타데이터 키워드의 부적합한 처리로 인해 유발되던 크래시를 고쳤습니다.

  • 블루프린트 에디터 내 기본값 입력 노드에 포커스가 있는 상태에서 F7 키로 블루프린트를 컴파일할 때의 크래시를 고쳤습니다.

  • 변수가 선택된 와중에 블루프린트 에디터를 닫을 때의 크래시를 고쳤습니다.

  • C++ 클래스를 기반으로 블루프린트 생성 도중 선택된 대상 폴더가 없을 경우의 크래시를 고쳤습니다.

  • Custom Event 노드 붙여넣기를 되돌릴 때의 크래시를 고쳤습니다.

  • 매크로 블루프린트 라이브러리 또는 함수 블루프린트 라이브러리 생성 후 기본 이벤트를 스폰하려 했을 때의 크래시를 고쳤습니다.

  • 블루프린트 디폴트에 가한 변경사항이 먼저 블루프린트를 컴파일하기 이전까지 저장되지 않던 순환 종속성 버그를 잡았습니다.

  • 블루프린트 클래스 디폴트 에디터에서 메시 컴포넌트의 머티리얼을 변경해도 블루프린트 클래스의 인스턴스에 적용되지 않던 퇴보를 고쳤습니다.

  • 이벤트 덮어쓰기용 '부모 함수로의 호출 추가' 를 고쳤습니다.

  • PIE 세션에서 애니메이션 블루프린트가 고아로 끝나, 이벤트 그래프 디버깅 도중 디버그 필터 메뉴에 가용 인스턴스가 둘 이상 될 수 있었던 문제를 고쳤습니다.

  • 종속성 부모/자손 블루프린트 관련해서, 자손의 프로퍼티 값이 로드시 리셋될 수 있었던 문제를 고쳤습니다.

  • Format Text 노드 관련 동작 되돌리기/다시하기 이후의 블루프린트 컴파일 관련 문제를 고쳤습니다.

  • Format Text 노드 삭제 이후의 블루프린트 컴파일러 오류를 고쳤습니다.

  • "Directions are not Compatible" (방향이 호환되지 않습니다) 블루프린트 오류를 고쳤습니다.

  • 부모와 자손 액터가 같은 블루프린트 클래스 유형일 때 컴파일 이후의 리인스턴싱 도중 액터에 붙은 것이 깨지던 것을 고쳤습니다.

  • 그래프의 이름 충돌로 인해 유발되던 크래시를 고쳤습니다.

  • 데이터 전용 그래프에 이벤트 그래프가 매달리는(hanging) 것에 의해 유발되던 크래시를 고쳤습니다.

  • 버려진 클래스가 컨텍스트 메뉴 데이터베이스에 의해 참조되어 유발되던 크래시를 고쳤습니다.

  • 블루프린트 컴파일 도중 DateTime 변수에 의해 유발되던 크래시를 고쳤습니다.

  • 명령줄을 통해 실행된 블루프린트 디프 또는 블루프린트 병합 툴 종료시 발생하던 크래시를 고쳤습니다.

  • 노드에서 삭제된 구조체에 대한 핀 확장시의 크래시를 고쳤습니다.

  • 레벨에 있는 액터의 부모 클래스가 리컴파일될 때의 크래시를 고쳤습니다.

  • 액터의 생성자에서 호출된 컴포넌트 상의 이벤트가 삭제될 때의 크래시를 고쳤습니다.

  • 액터의 리인스턴싱이 필요한 경우 블루프린트에 변경사항을 적용할 때의 크래시를 고쳤습니다.

  • 블루프린트의 자손 부모변경 이후 즉시 컴파일할 때의 크래시를 고쳤습니다.

  • 블루프린트가 인터페이스 함수를 사용할 때, 다른 인터페이스의 파라미터로 받는 경우의 크래시를 고쳤습니다.

  • 핫 리로드시 애님 블루프린트에 의해 유발되는 크래시를 고쳤습니다.

  • 트랜스폼 구조체의 회전값 편집시의 크래시를 고쳤습니다.

  • 널 오브젝트에서 Text 프로퍼티를 읽었을 때의 크래시를 고쳤습니다.

  • Timeline Play Rate Blueprint 노드를 복사하여 다른 블루프린트에 붙여넣었을 때의 크래시를 고쳤습니다.

  • 블루프린트에서 Canvas Render Target 오브젝트 사용시의 크래시를 고쳤습니다.

  • 블루프린트 이름변경 도중의 크래시를 고쳤습니다.

  • 블루프린트 부모변경 도중의 크래시를 고쳤습니다.

  • 블루프린트 컴파일 도중의 크래시를 고쳤습니다.

  • 상속된 변수가 자손 블루프린트에서 설정될 때의 에디터 크래시를 고쳤습니다.

  • Make Struct 노드에서 사용자 정의 구조체에 텍스트 배열 추가시의 잘못된 어서트를 고쳤습니다.

  • 로컬 블루프린트를 변경할 필요가 없을 때의 블루프린트 병합 처리를 고쳤습니다.

  • 블루프린트 함수 라이브러리 로드 이후 같은 라이브러리 내 다른 함수를 참조하는 함수가 들어있는 블루프린트 함수 라이브러리 애셋을 저장할 수 없었던 것을 고쳤습니다.

  • 원형 종속 블루프린트 실행시 TRASHCLASS 오류와 함께 크래시를 유발할 수 있었던 문제를 고쳤습니다.

  • 블루프린트가 다른 오브젝트 블루프린트를 기반으로 할 수 없게 만들던 문제를 고쳤습니다.

  • 마티네 파티클 트랙에 트리거를 추가하면 관련된 마티네 블루프린트 노드에 중복 핀이 생기게 만들던 문제를 고쳤습니다.

  • 블루프린트에 사용된 중복 구조체의 기본값이, 특정 조건에서 원래 기본값으로 리셋되던 문제를 고쳤습니다.

  • 노드 새로고침 또는 리로드시 몇몇 Ease 노드 핀이 자체적으로 리셋되던 문제를 고쳤습니다.

  • 로컬 변수를 여러 번 편집하는 데 있어서, 벡터나 트랜스폼 편집시 종종 보이던 문제를 고쳤습니다.

  • 다른 출력 핀을 끌어놓을 때 출력 핀 오브젝트의 멤버 함수가 나타나지 않던 것을 고쳤습니다.

  • 다른 출력 핀을 끌어놓을 때 일부 출력 핀 오브젝트의 멤버 함수가 나타나지 않던 것을 고쳤습니다.

  • 블루프린트에 새 변수나 이벤트 디스패처 추가시의 작명 규칙 문제를 고쳤습니다. 이제 블루프린트의 다른 항목같은 포맷이 될 것입니다: New[Type]_[Number].

  • 블루프린트 생성 컴포넌트에 대한 되돌리기/다시하기 버퍼에 의해서만 참조된 오브젝트가 가비지 컬렉팅되는 것을 고쳤습니다.

  • 블루프린트 컴파일을 막을 수 있던 컴포넌트 변수와 컴포넌트 노드 사이의 이름 충돌 가능성을 고쳤습니다.

  • 블루프린트 로드 도중 불필요한 경고가 많이 발생되던 문제를 고쳤습니다.

  • 에디터에서 플레이 발동 이후 블루프린트가 더티 마킹되던 문제를 고쳤습니다.

  • 이벤트 디스패처 이름변경 및 제거 관련 문제를 고쳤습니다.

  • Make Array 노드의 새로고침 작동방식을 고쳤습니다. 기존에는 어느 핀이 분할(split)되었는지 기억하지 않았습니다.

  • 액터 컴포넌트 블루프린트에 정의된 리플리케이티드 변수를 고쳤습니다. 이 변수가 이제 실제로 리플리케이트됩니다.

  • 독립형 게임 내 게임 인스턴스의 Receive Init 이벤트에서 특정 함수 호출시의 여러 크래시를 고쳤습니다.

  • 블루프린트의 스플라인 메시 컴포넌트가 맵이 로드될 때마다 콜리전 데이터에 대해서 DDC 에 새 항목을 매번 추가하던 것을 고쳤습니다.

    • 이로 인해 DDC 크기가 엄청나게 커졌으며, 같은 맵을 작업중인 사람이 여럿인 네트워크 공유 DDC 의 경우 특히나 더했습니다.

  • Cross Product 노드의 이름이 제대로 "X" 라벨이 붙도록 고쳤습니다.

  • 일부 Set/Break Struct 노드에 대한 블루프린트 초기 로드시 나타나는 후미 숫자와 문자를 고쳤습니다.

  • 네이티브 C++ 컴포넌트에 정의된 프로퍼티 변경 되돌리기/다시하기를 고쳤습니다.

  • 클래스 뷰어에 관련된 에디터 종료 도중 블루프린트 관련 크래시를 고쳤습니다.

  • 블루프린트 바인딩 가능하지 않은 키는 더이상 키 선택기 드롭다운에 나타나지 않습니다.

  • For Loop With Break 및 For Each Loop With Break 가 더이상 Break 이후 인덱스가 증가하지 않습니다.

  • Format Text 노드는 더이상 자체적으로 중단점을 설정할 수 없습니다.

  • 함수 툴팁에 다른 툴팁을 사용할 것이 없는 경우 처리된 함수 이름이 표시됩니다.

  • 함수 라이브러리에서의 함수는 블루프린트의 숨겨진 카테고리 메타데이터에 따라 블루프린트 컨텍스트 메뉴에서 필터링되지 않습니다.

  • 숨겨진 코멘트 버블이 더이상 무관한 동작중에 다시 나타나지 않습니다.

  • 노드 제목 새로고침이 개선 및 최적화되었습니다.

  • 매크로에 대한 입력 핀을 다시 '와일드카드' 유형으로 설정할 수 있습니다.

  • Function Call 노드의 입력 핀이 핫 리로드 이후 제대로 업데이트됩니다.

  • 반환값과 입력 파라미터가 없는 함수가 내 블루프린트 드롭다운에 덮어쓰기 가능한 것으로 나타납니다.

  • Float to Int 변환은 기본적으로 작은 정수가 아닌 그냥 소수점을 버립니다. 기존 블루프린트의 작동방식은 변하지 않습니다.

  • 바이트코드 레퍼런스 그래프 이름의 스트링은 더이상 블루프린트를 컴파일할 때마다 변하지 않습니다.

  • 몇몇 블루프린트 수학 노드의 기본값이 개선되었습니다. 기존 블루프린트에는 영향을 끼치지 않습니다.

  • 블루프린트 클래스의 기본값을 사라지게 만드는 원인 하나를 고쳤습니다.

  • 자손 블루프린트 클래스 애셋의 저장을 수 있었던 비호환 매크로 동작의 그래프 추가가 더이상 가능하지 않습니다.

  • 유효 레벨 스크립트 블루프린트 액션 수집시 오직 에디터 월드만 고려되도록 하는 사소한 픽스가 있었습니다.

  • 컴파일 이후 리인스턴싱 도중 레퍼런스를 찾을 때 약간의 퍼포먼스 향상이 있었습니다 (전체적인 블루프린트 클래스 컴파일 시간이 약간 감소했습니다).

  • 한 번에 여러 수학 표현식 노드를 변경해도 더이상 크래시가 나지 않습니다.

  • 'Edit Anywhere' 마킹된 네이티브 C++ 컴포넌트는 이제 블루프린트 에디터 디테일 패널에서 'None' 으로 설정한 이후에도 다시 편집할 수 있습니다.

  • 새로 생성된 블루프린트는 더이상 컴파일이 필요한 것으로 마킹되지 않습니다.

  • 내 블루프린트 창의 우클릭 메뉴에서 매크로 라이브러리에 있는 덮어쓰기 함수로의 옵션이 더이상 주어지지 않습니다.

  • 블루프린트 컴파일시, 특히나 다른 블루프린트에서 많이 파생시킨 블루프린트를 상세 모드로 컴파일할 때 "파일 체크아웃 필요!" 스팸이 더이상 발생하지 않습니다.

  • 내 블루프린트의 덮어쓰기 가능 함수 목록이 이제 클래스 계층구조에 대해 숨겨진 카테고리와 함수를 제대로 숨깁니다.

  • 로컬 변수를 범위 외부에 붙여넣는 것이 더이상 유효한 것으로 표시되지 않습니다.

  • 블루프린트 클래스 컴포넌트 에디터의 컴포넌트 붙이기/떼기 동작으로 인한 상대 트랜스폼 업데이트는 이제 블루프린트 클래스의 인스턴스에 즉시 적용됩니다.

  • 블루프린트 에디터 로드시 중복 미리보기 액터 생성 패스를 제거했습니다 (약간의 퍼포먼스 향상이 있었습니다).

  • 블루프린트의 컨텍스트 메뉴에서 반복된 컴포넌트 함수 옵션을 제거했습니다.

  • 블루프린트 변수를 "Editable" 마킹하여 다른 블루프린트에서 접근할 수 있도록 하는 데 대한 요건을 제거했습니다.

  • 코멘트 블록에 @return 대신 @returns 사용시 return 핀 툴팁 시작에 붙던 's' 를 제거했습니다.

  • Find Sessions 노드가 세션을 찾을 때 과도하게 상세했던 로그 몇을 제거했습니다.

  • 블루프린트 에디터의 레거시 노드 메뉴 시스템을 제거했습니다.

  • 그래프를 스폰하는 Custom Event 노드 및 기타 노드를 제거하면 이름이 해제됩니다.

  • 매크로 핀 이름을 변경하면 더이상 같은 이름의 핀이 있는 그래프 내 매크로 이름이 변경되지 않습니다.

  • 씬 기반 유형에서 비-씬 기반 유형 사이로 컴포넌트 기반 블루프린트 클래스 애셋 부모를 변경해도 더이상 액터 기반 블루프린트 클래스 애셋의 컴포넌트 계층구조가 깨지지 않습니다.

  • 접힌 그래프 내 함수 로컬 변수 대체가 작동합니다.

  • 경유지 노드는 이제 애니메이션 컴파일 이후 애니메이션 그래프에서 정상 작동합니다.

  • 키바인딩을 통한 그래프 내 모든 노드 선택시 더이상 그래프 목록 내 빈 노드로 인한 어서트가 발생하지 않습니다.

  • 자손 노드 겹칩으로부터 부모 노드가 자동 추가되는 것을 막는 픽스가 추가되었습니다.

  • 내 블루프린트 패널 내 하위 항목의 카테고리가 더이상 함수의 섹션속에 잘못 들어가지 않습니다.

  • "Access None ..." 오류를 억제시켰습니다.

  • "No value will be returned by reference." (레퍼런스에 의해 반환되는 값이 없을 것입니다) 라는 잘못된 경고를 억제시켰습니다.

  • Switch On String 노드는 기본적으로 디테일 뷰에 설정된 대로 대소문자 구분을 따르지 않습니다.

  • Custom Event 노드는 이제 표준 비-멀티캐스트 델리게이트 핀에서 끌었을 때 적합한 시그너처 생성을 처리합니다.

  • Days In Month 블루프린트 함수는 이제 잘못된 달 사용시 어서트 대신 경고를 로그에 냅니다.

  • Render to Texture 블루프린트는 시각화 버퍼 익스포트시 'r.BufferVisualizationDumpFrames 1' 콘솔 명령을 입력해서 처리하므로, 더이상 "고해상도 스크린샷" 대화창을 사용할 필요가 없습니다.

  • 게임플레이 태그 위젯 관련해서 그래프 창의 줌 레벨이 변경되었을 경우 팝업 메뉴를 사용할 수 없게 되던 문제를 고쳤습니다.

    • 메뉴의 내용을 잘라버리기 보다는, 줌 레벨에 맞춰 팝업 메뉴의 스케일을 조절합니다.

  • 경유지 노드와 다른 노드에서 코멘트 풍선 작동방식이 다르던 것을 고쳤습니다.

    • 이제 경유지 노드 코멘트도 다른 코멘트와 마찬가지로 핀 및 표시/숨길 수 있습니다.

  • 숨겨진 경유지 노드 위에 커서를 올리면 코멘트가 표시됩니다.

    • 에디터에서 새줄 모디파이어 키 코멘트 풍선이 있는 노드가 비슷한 예제에 일치하지 않는 문제가 해결됩니다.

  • 코멘트 풍선에서 텍스트 편집시 새 줄을 삽입하려면 Shift + Enter 를 입력해야 합니다.

  • 에디터에서 플레이 범위의 애셋을 현재 편집중일 때 에디터에서 플레이 종료시 열린 애셋 에디터도 자동으로 종료시키는 기능을 추가했습니다.

  • 메인 에디터의 액터 디테일 패널에서 블루프린트 컴포넌트 인스턴스 편집시의 문제를 고쳤습니다.

  • 컴포넌트 블루프린트를 컴파일하면 컴포넌트 값이 철지난 것으로 잘못 표시되던 것을 고쳤습니다.

  • 이제 컴포넌트 블루프린트 컴파일을 추적, 액터 디테일 패널의 관련 부분을 최신 상태로 업데이트합니다.

  • 블루프린트 문서 노드 관련 텍스트 표시여부 문제를 고쳤습니다. 이전에는 검정 바탕에 검정 글씨였어서 읽을 수 없었습니다. 이제 연한 바탕에 표시되도록 변경되었습니다.

  • 여러줄 코멘트 풍선의 텍스트가 에디터 표준에 맞는 삽입 방식으로 변경되었습니다. 코멘트에 새 줄을 삽입하려면 이제 Ctrl + Enter 를 눌러야 합니다.

  • 중첩된 코멘트를 사용자가 선택하기 어려웠던 문제를 고쳤습니다.

  • 코멘트가 다른 코멘트를 포함하도록 크기변경할 때의 버그를 잡았습니다. 포함된 모든 코멘트의 상대 깊이를 수정하여 나중에도 선택이 가능하도록 했습니다.

  • 커스텀 이벤트에 파라미터가 있을 때 에디터 블류틸리티에 크래시가 유발되던 문제를 고쳤습니다.

  • 함수를 그래프에 끌어놓을 때 오소리티브 클래스가 아닌 스켈레톤 클래스를 사용해서 자손 클래스에 배열 파라미터 핀이 사라지던 문제를 고쳤습니다.

  • 글로벌 에디터 유틸리티 기반 블루프린트 함수 감지를 수정, 액터 디테일 패널을 통해 Call In Editor 액터 블류틸리티에 블루프린트 편집가능 변수를 노출시켰습니다.

  • 블루프린트 디버거의 감시값이 스스로 범위를 벗어났다고 잘못 보고하는 문제를 고쳤습니다.

  • 맵 변경시 사용가능한 레벨 스크립트 블루프린트 액션 업데이트를 개선시켜 보다 동적으로 유지되도록 했습니다.

  • 실제 타임라인 노드 이름이 사용자에게 명료하게 드러나도록 타이밍 컴포넌트 작명 방식을 변경했습니다.

  • 블루프린트 컴포넌트의 부모를 액터 컴포넌트 및 파생 클래스 이외의 것으로 잘못 변경하지 못하도록 했습니다.

  • 코멘트 풍선의 표시여부나 핀 상태가 읽기전용 그래프에 있을 때는 변하지 않도록 했습니다.

  • 외부 레벨 스크립트에서의 레벨 스크립트 액션이 현재 블루프린트에 잘못 배치되지 않도록 했습니다.

  • 소유 그래프가 읽기 전용일 때 노드에 잘못된 핀의 추가/제거가 불가능하도록 했습니다.

  • 읽기 전용 그래프에서 노드 코멘트 풍선의 표시여부 상태를 변경하지 못하도록 했습니다.

    • 이 변화 이후 소유 그래프가 읽기 전용인 경우, 풍선의 제목줄 토글 버튼이 더이상 표시되지 않습니다.

  • 사용자가 레퍼런스 뷰어에서 코멘트 텍스트 편집을 하지 못하도록 했습니다.

  • 코멘트 풍선에 힌트 텍스트 표시를 위한 우회 코드를 제거하고 텍스트 필드 위젯에 힌트를 표시하는 새로운 함수성을 활성화시켰습니다.

  • 코멘트 노드에서 그 코멘트 풍선 관련 올바른 함수성을 복원했습니다. 여기서 코멘트 풍선의 디자인 목표는 코멘트 노드 제목을 읽기 힘들 만큼 줌 레벨이 변경되었을 때 표시하기 위함입니다.

  • 기본 레벨을 컴파일하는 경우 어서트가 발생하던 블루프린트 액션 데이터베이스 새로고침 버그를 잡았습니다.

  • 컴파일 도중 맵 레벨 스크립트 이름변경 및 재생성 방식 관련해서 어서트가 유발되던 문제를 고쳤습니다.

  • 읽기 전용 그래프에서 코멘트 풍선이 코멘트 텍스트를 변경할 수 있었던 문제를 고쳤습니다.

  • 커브가 타임라인에 소유된 것처럼 외부 커브를 포함한 타임라인이 커브를 깊이 복사(deep copy)하려 하는 문제를 고쳤습니다. 외부 커브는 이제 레퍼런스를 원래대로 놔둔 채 건너뜁니다. 추가적으로 소유된 커브의 깊은 복사는 이제 블루프린트 리인스턴싱 도중 과다하게 깊이 복사되지 않습니다.

  • 블루프린트 그래프 액션 관련 특정 상황에서 레벨 전환시 가비지 컬렉션이 실패하게 만드는 문제를 고쳤습니다.

  • 머티리얼 표현식에서 코멘트 풍선 관련 다음과 같은 문제를 고쳤습니다.

    • 코멘트가 영향을 끼치는 코멘트 텍스트 대신 커스텀 이벤트 이름으로 적용되던 것.

    • 블루프린트 컴파일 또는 닫을 때 코멘트가 사라지는 것.

    • 코멘트 풍선과 머티리얼 표현식 프로퍼티 사이의 비일관성.

  • 블루프린트 디버거에 변수가 영역 밖인 것으로 표시되던 문제를 고쳤습니다.

  • 기존에 간과되었던 배열 노드에서 빠져있는 코멘트 풍선을 구현했습니다.

  • 액터를 블루프린트로 변환할 때 사용자가 선택한 컴포넌트 이름이 보존되도록 액터 작업방식을 변경했습니다.

  • 컨텍스트 메뉴를 통해 코멘트를 입력했을 때 코멘트 스트링 콘텐츠에 따라 풍선이 자동으로 표시/숨겨지도록 코멘트 풍선을 업데이트합니다.

  • 카테고리가 없는 함수는 현재 선택된 레벨 액터에 대해 표시될 때 블루프린트 노드 컨텍스트 메뉴에 "Class" 카테고리로 들어가지 않습니다.

  • "Apply Changes to Blueprint" (블루프린트에 변경사항 적용)을 되돌리면 에디터가 유효하지 않은 상태로 남아서, 되돌리기/다시하기 또는 선택된 컴포넌트를 이동하면 크래시가 나던 문제를 고쳤습니다.

  • 내 블루프린트 창에서 선택을 위해 위 아래 화살표 키를 사용하면 제대로 선택됩니다.

  • 변수 이름변경시 더이상 그 이름을 활용하는 수학 표현식 노드를 깨뜨리지 않습니다.

  • 이제 컴포넌트 블루프린트 클래스가 그 부모 클래스를 변경할 때, 레벨 에디터 내 선택된 액터의 컴포넌트 트리를 새로고칩니다.

  • 블루프린트 애셋 삭제시, 자손 블루프린트가 삭제 착수될 때에도 부모변경 및 리컴파일되지 않을 것입니다.

  • 내 블루프린트 창에서 함수를 끌어오면, 마우스 데코레이터가 즉시 표시됩니다.

  • PIE 에 들어설 때, 레벨 블루프린트 내 Function Call 노드에 영역이 없다는 로그 오류가 더이상 생기지 않습니다.

  • 블루프린트의 이벤트 노드를 붙여넣을 때, 해당 이벤트의 유령 노드 버전이 있는 경우, 그 노드는 새로이 붙여넣은 이벤트를 위해 제거될 것입니다.

코어

  • HSV 기반 리니어 컬러 인터폴레이션 함수를 추가했습니다 (블루프린트 및 C++)

    • 새 블루프린트 함수: "Lerp Using HSV (Linear Color)" (C++ 에서는, FLinearColor::LerpUsingHSV 를 호출하면 됩니다)

    • HSV 스페이스에서 컬러를 보간하여, 색조(hue) 사이 최단 경로를 구합니다. 알파도 보간합니다.

  • 'togglecvar' 콘솔 명령을 추가, 두 값 사이에 임의의 CVar 토글이 가능합니다 (키 바인딩을 해 두면 좋습니다).

  • 엔진이 환경 변수 읽기에 실패했을 때의 경고 로그 메시지를 추가했습니다.

  • 월드 사이의 전환이 일어날 때 레퍼런스가 남아 기존 맵의 가비지 컬렉션을 막는 현상을 피하기 위해 월드에 들어있는 모든 오브젝트는 가비지 컬렉션 마킹됩니다.

    • 이를 통해 Seamless Travel 전환과 Load Map 전환이 일치됩니다.

  • 이제 쿠킹된 빌드에서 Alt+Enter 키를 치면 전체화면으로 토글됩니다.

  • 자동 월드 오리진 리베이싱 동작(거리, 3D, 2D)을 환경설정 파일에서 조정할 수 있게 되었습니다.

  • 콘텐츠 프로젝트에 써드 파티 개발자의 플러그인을 포함시킬 수 있도록 했습니다. 게임 실행 도중 게임과 그것을 만드는 플러그인을 연결시켜 줍니다.

  • Child Actor Class 를 캡슐화하여 블루프린트에 Set Child Actor Class 를 노출시켰습니다.

  • (디스크 공간 부족 등) OS 상태의 결과로 벌어질 수도 있는, 자동 저장 실패 와중의 에디터 크래시를 고쳤습니다. 이제 크래시 없이 사용자에게 그에 대한 오류 및 크래시를 로그에 기록합니다.

  • 원점에서 매우 먼 곳에서 렌더링할 때의 float 정밀도를 향상시켰습니다. 이 변화로 카메라나 버텍스 떨림과 같은 미묘한 버그 방지가 가능합니다.

  • 프로젝트의 PackageFileUE4Version 이 현재 실행중인 엔진보다 높은 경우 프로젝트 열기를 중단하는 보호장치를 추가했습니다.

  • 커다란 프로파일러 데이터 세트의 로딩 시간을 개선했습니다.

  • 이제 비동기 로딩 취소가 가능합니다.

    • 블루프린트에서 Cancel Async Loading 함수를 통해 가능합니다.

    • 네이티브 C++ 함수는 CancelAsyncLoading() 입니다.

    • 콘솔 명령은 "CANCELASYNCLOAD" 입니다.

  • 레벨 스트리밍 오브젝트에 "Disable Distance Streaming" 라는 프로퍼티가 새로 생겼습니다. 블루프린트에서 특정 스트리밍 레벨에 대해 임시로 거리 기반 스트리밍을 끄고자 할 때 사용합니다.

  • 'stat levels' 출력에 패키지 임포트 로딩 진행상황을 로드 백분율로 포함시키도록 개선되었습니다.

  • 다운로드 크기 축소를 위해 템플릿 데이터에서 피처 팩 만드는 방식을 변경했습니다.

  • 틱 부하를 줄이고 태스크 그래프를 최적화시켰습니다.

  • 콘솔 변수가 변경되었는지 검사하는 기능을 제거했습니다.

  • stat 을 사용한 메모리 할당 프로파일러를 추가했습니다.

    • 게임에 프로파일러를 붙이려면 "-memoryprofiler" 파라미터를 붙여 실행하고, "stat stopprofile" 로 프로파일러를 중지하면, \Saved\Profiling\UnrealStats 폴더에 확장자가 ue4statsraw 인 파일이 새로 생성됩니다.

    • 결과를 확인하려면 언리얼 프론트엔드 명령을 사용합니다: "UnrealFrontend.exe -run=MEMORYDUMP -INFILE=", 그러면 모든 메모리 할당이 포함된 CSV 파일이 두 개 생성됩니다.

  • 스탯 그룹 "LoadTimeVerbose" (로드 시간 상세)를 새로 추가, 기본적으로 꺼져있는 이 그룹은 매우 잦은 통계 모티너링에 사용되며, 퍼포먼스 감소를 막기 위해 기본으로는 꺼져 있고, 현재는 메모리 프로파일러가 활성 상태일 때만 사용됩니다.

  • 메모리 프로파일러 정확도 향상을 위한 통계를 추가했습니다.

  • 스레드 풀에 실행중인 태스크에 대한 퍼포먼스 통계를 추가했습니다.

  • "StopFPSChart" 명령 실행 이후 통계 위치가 파일 탐색기를 통해 열립니다.

  • 오디오 워커 압축해제용 통계가 개선되었으며, 웨이브 이름도 포함됩니다.

  • 에디터에서 이제 플러그인 브라우저의 사용자 플러그인 대한 메타데이터 변경이 가능합니다.

  • 에디터는 이제 설치 루트 디렉터리의 UE4CommandLine.txt 파일에 저장된 부가 명령줄 인수를 검사합니다. 이 파일을 만들어 에디터에 항상 실행시킬 인수를 설정할 수 있습니다.

  • Flush Level Streaming 함수는 이제 블루프린트에 노출됩니다. Flush Level Streaming 은 모든 레벨 스트리밍이 끝날 때까지 게임 스레드를 블록합니다.

  • 이제 Timeline Set Playback Position 에 재생 위치 변경 이후 핀 업데이트 발동 여부를 결정할 부울 파라미터가 생겼습니다.

  • 60 fps 이상의 더 나은 퍼포먼스를 위한 통계 처리를 조정했습니다.

  • 태스크 그래프 비주얼라이저가 화면에 보다 많은 요소를 표시하도록 조정했습니다.

  • 패키지 저장 도중 중복 오브젝트를 건너뛰도록 하는 검사를 추가했습니다. 이를 통해 엔진이 일관되지 않은 상태에 있을 때 저장시 애셋이 깨지는 것을 막습니다.

  • 매우 작거나 비어있는 깨진 패키지를 열 때 엔진 크래시를 막기 위한 보호장치를 추가했습니다.

  • 이제 쿠킹된 빌드에서 Alt+Enter 키를 치면 전체화면 모드로 전환됩니다.

  • 붙은 액터가 더이상 월드 원점에서 튀어나와 소멸 과정의 일부로 오버랩 이벤트를 유발시키지 않게 되었습니다.

  • Begin Play 는 더이상 Pending Kill (곧 소멸) 마킹된 액터에서 호출되지 않습니다.

  • 대소문자 고정 검색 패턴을 사용하는 스트링 대체/비교/찾기 작업 다수를 대소문자 구분하도록 변경했습니다. 마침표나 나눗셈표시 검색시의 불필요하게 비싼 대소문자 구분 작업을 피할 수 있습니다.

  • 부모 클래스 변수 값 변경이 핫 리로드 이후에도 제대로 업데이트됩니다.

  • Owner Only 같은 커스텀 리플리케이션 조건이 이제 커스텀 델타 시리얼라이제이션 검사를 합니다. 기존에는 항상 조건을 무시하고 리플리케이트 했었습니다.

  • 날짜 & 시간 오브젝트가 이제 32 비트가 아닌 64 비트 값을 사용해서 정확한 유닉스 날짜 타임스탬프를 제공합니다.

  • 동적으로 스폰된 스태틱 액터/컴포넌트는 이제 Cull Distance Volume 에 영향을 받습니다.

  • 위치가 없는 액터는 네트워크 우선권 계산시 0,0,0 에 있는 것으로 간주되어, 카메라 위치에 따라 리플리케이션 차이가 나게 만들던 버그를 잡았습니다.

  • 컴포넌트 바인딩된 이벤트가 델리게이트 시그너처를 소유하는 클래스에 제대로 바인딩되도록 고쳤습니다. 이벤트 이름변경 관련 문제가 해결됩니다.

  • 복잡한 구조체 파라미터로 RPC 호출시의 크래시를 고쳤습니다.

  • 소유 액터 없이 자손 액터 컴포넌트를 사용했을 때의 크래시를 고쳤습니다.

  • PIE 에서 심리스 레벨 트랜지션을 할 때 가비지 컬렉션이 기존 월드를 비우는 데 실패해서 발생하던 크래시를 고쳤습니다.

  • 액터가 클라이언트에서 Begin Play 를 두 번 호출하게 만들 수 있었던 문제를 고쳤습니다.

  • 심리스 트래블 도중 기존 레벨에서 넘어와서 Begin Play 가 이미 호출된 액터에 Begin Play 가 다시 호출되던 문제를 고쳤습니다.

  • 새로운 폰 빙의 해제(depossess) 및 빙의(possess)시 Client Restart 가 호출되지 않던 것을 고쳤습니다.

  • 여러줄 자막 사용시 각 줄마다 한 번씩 표시되지 않고 같은 줄이 여러번 표시되던 것을 고쳤습니다.

  • (이펙트 등의) 디스토션이 있는 (메시 등의) 스태틱 프리미티브가 화면에 존재하지 않는 경우 디스토션을 사용하는 다이내믹 프리미티브가 전혀 렌더링되지 않게 만드는 버그를 잡았습니다.

  • 유효하지 않은 패키지 버전의 패키지 로딩시 진행상황 보고 오브젝트가 제대로 비워지지 않아 발생하던 크래시를 고쳤습니다.

  • 프로젝트의 엔진 환경설정 파일에서 같은 셰이더 포맷이 두 번 지정되었을 때의 스타트업 어서트를 고쳤습니다.

  • 콘솔 변수가 특정한 순서로 설정될 때의 check() 를 고쳤습니다.

  • 게임 환경설정 디렉터리 밖의 파일 편집시 기본 ini 문법이 사용되지 않도록 의도했던 환경설정 시스템 버그를 고쳤습니다.

  • 이벤트 디스패처에 Pointer Event 가 전달되었을 때의 크래시를 고쳤습니다.

  • 디스트럭터블이 APB 에서 임포트된 대미지 파라미터를 무시하던 것을 고쳤습니다.

  • 액터의 Attachment Replication 구조체를 철지난(out of date) 것으로 만들어 클라이언트의 첨부 계층구조를 망가뜨릴 수 있었던 문제를 고쳤습니다.

  • 비동기 로딩 플러시 관련 문제를 고쳤습니다.

  • 저장 도중 충분히 (약 4 GB) 커다란 파일에 대해 발생하던 라이트매스 크래시를 고쳤습니다.

  • 맵 저장 전 애셋이 저장되지 않은 경우 맵에 애셋 레퍼런스가 빠질 수 있었던 현상을 고쳤습니다. 이 상황은 에디터에 새로 생성되는 오브젝트에 일어날 수 있었습니다.

  • 엔진 시동시 환경설정 파일을 병합할 때 엔진을 멈추게 만들 수 있었던 것을 고쳤습니다.

  • 새로 스폰된 틱 그룹이 두 번 실행되지 않도록 고쳤습니다.

  • 기본 오브젝트에서 그 인스턴스로의 프로퍼티 변경 전파를 고쳤습니다.

  • 심리스 트래블 도중의 희귀한 크래시를 고쳤습니다.

  • 에디터의 BSP 연산 중 주어진 오브젝트의 클라이언트 또는 서버 로드 금지 여부를 나타내는 플래그를 실수로 지우던 것을 고쳤습니다.

  • 부팅시 크래시가 날 수 있었던 텍스처 DDC 스레드 문제를 고쳤습니다.

  • 언리얼 스웜에서의 간헐적 "Error: A 32 bit processes cannot access modules of a 64 bit process." (오류: 32 비트 프로세스는 64 비트 프로세스의 모듈에 접근할 수 없습니다) 를 고쳤습니다.

  • 머신에 네트워크 어댑터가 둘 이상 있을 때 언리얼 스웜이 IP 주소를 자체적으로 해석하도록 수정했습니다.

  • 가비지 컬렉션 퍼포먼스를 향상시켰습니다.

  • 컨스트럭션 스크립트 도중의 동적인 데이터 변경이 (실행시간에 다른 방식으로는 변경 불가능한) 무버블 이외의 컴포넌트를 타깃으로 할 수 있도록 메서드를 개선시켰습니다.

  • 링커 순환 종속성 픽스: CDO 생성 시도 전 부모 디폴트 서브오브젝트가 로드되도록 합니다.

    • 파생 블루프린트의 컴포넌트가 부모 블루프린트의 기본값을 상속하지 않도록 합니다.

  • 프로파일러 - "필터와 프리셋" 창이 이제 선택된 프로파일에 따라 제대로 업데이트될 것입니다.

  • 프로파일러 - 프로파일러에 라이브 데이터 미리보기 실행 상태에서 애셋을 열 때의 크래시를 고쳤습니다.

  • 몇몇 임시 메모리 할당을 워커 스레드로 옮겨 텍스처 스트리밍 도중의 버벅임 확률을 줄였습니다.

  • 환결설정 캐시의 최종 사용자 ini 에서 엇나간 '/' 글자를 제거했습니다.

  • shipping 빌드의 블루프린트에서 발동된 단순 통계 명령이 더이상 게임을 멈추게 만들지 않습니다.

  • 통계 - 계층형 뷰에 빠진 통계를 추가했습니다.

  • 통계 - 'stat groupname+' 명령 사용시 hud 에 모든 통계가 보일 것입니다.

  • 통계 - 통계를 처음부터 캡처할 때의 크래시를 고쳤습니다.

  • 통계 - 스레드 소멸시의 메모리 누수를 고쳤습니다 (Linux, Mac)

  • 통계 - 스태틱 메시에 대해 잘못된 메모리 계산을 고쳐, 디스턴스 필드 메모리 사용량을 추가했습니다.

  • 기본값과 값이 다른 구조체가 제대로 저장됩니다.

  • "Access None" 오류를 억제시켰습니다.

  • 레벨 전환 사이에 존재하는 오브젝트의 타이머 함수가 이제 새 레벨에도 계속해서 발동됩니다.

  • UAT 가 Linux 이외 플랫폼상의 심볼릭 링크를 건너뛰지 않습니다 (데이터 중복제거가 활성화된 Windows 서버에서의 프로젝트 패키징이 수정됩니다).

  • 패키징된 게임에서 생성된 환경설정 파일을 업데이트했습니다.

  • 더이상 쓰이지 않는 ini 파일을 합쳤습니다.

  • XML 파서가 이제 특성 스트링의 중첩된 '=' 글자 및 이름붙인 개체를 제대로 파싱 가능합니다.

에디터 및 툴

  • 콘텐츠 전용 프로젝트에 대해 빌드 세팅 지정 및 플러그인 활성화가 가능하도록 했습니다.

    • 프로젝트를 코드 기반 프로젝트인 것으로 간주하도록 만듭니다.

    • 에디터는 선택된 옵션으로 프로젝트 빌드를 시도할 것입니다.

    • 이를 통해 사용자는 비표준 플러그인 활용은 물론 다양한 옵션으로 기본 게임 실행파일 컴파일도 가능할 것입니다.

  • 플러그인 생성 마법사 추가

    • 주: 마법사 플러그인은 초기 접근 미리보기 단계로, 기본적으로 꺼져있으며, 플러그인 브라우저에서 켜줘야 사용할 수 있습니다.

    • 그 후 메인 메뉴의 파일 - "플러그인 추가..." 로 불러올 수 있으며, 현재 세 개의 템플릿이 포함되어 있습니다:

      • 공백: 함수성 없는 최소한의 플러그인을 생성합니다.

      • 기본: 메인 프레임 툴바에 버튼이 추가된 플러그인을 생성합니다.

      • 고급: 메인 프레임 툴바의 버튼을 통해 불러오는 표준 탭 창을 생성합니다.

  • 오디오 리임포트 개선

    • 모니터링중인 디렉터리 내에 대한 이름변경 및 이동을 자동 감지하여 올바르게 반응합니다.

    • 사용자는 이제 모니터링된 디렉터리에 대해 가상 매핑된 경로를 지정할 수 있습니다 (이를 통해 새로운 콘텐츠 파일이 지정된 매핑 디렉터리를 기준으로 애셋을 자동 생성하도록 창을 띄우는 것이 가능합니다).

    • 모니터링 대상 디렉터리에서 와일드카드를 통해 특정 파일 추가/제거가 가능합니다.

    • 초기 에디터 로드시 애셋 소스 변경사항을 무시하는 옵션을 추가했습니다. 소스 컨트롤 작업시 정말 유용한데, 에디터를 실행할 필요 없이 최신 파일을 받아, 그 변경사항을 전부 리임포트하지 않아도 되기 때문입니다.

  • 자동 애셋 체크아웃

    • 에디터 개인설정에 "자동 체크아웃" 모드를 도입했습니다.

    • 이제 옵션을 통해 애셋이 변경되면 창을 통해 사용자의 확인을 받는 대신 자동으로 체크아웃되도록 할 수 있습니다.

    • 추가적으로 (다른 사용자가 독점 체크아웃 했다던가, 헤드 리비전이 아니든가 해서) 체크아웃 불가능한 애셋을 변경하려 하는 경우, 경고창이 뜹니다.

  • 세 가지 직교 뷰포트 모드 새로 추가

    • 월드를 모든 각도에서 시각화시켜 볼 수 있게끔, 직교 뷰포트 모드 목록에 오른쪽, 아래, 뒤 를 추가했습니다.

  • 이제 원근 뷰포트와 직교 뷰포트 둘 다에서 피벗 위치를 조정할 수 있습니다.

    • 이동 위젯을 Alt+휠버튼으로 끌면 어느 뷰포트 모드에서는 피벗 위치가 이동됩니다.

  • 레벨 툴바에 소스 컨트롤 액션 버튼을 추가했습니다.

    • 레벨 툴바에 소스 컨트롤 버튼이 새로 생겼습니다.

    • 여기서 여러가지 소스 컨트롤 관련 작업을 할 수 있으며, 현재 소스 컨트롤 접속 상태를 확인할 수도 있습니다. 이전에 에디터 창 우상단에 있던 아이콘은 제거되었습니다.

  • 에디터 레이아웃과 키바인딩 세팅은 이제 모든 프로젝트 공용으로 저장됩니다.

  • 프로퍼티에 단위를 지정할 수 있는 기능이 추가되었습니다.

    • 이제 트랜스폼 및 회전시 기본으로 단위가 표시됩니다. 프로젝트 세팅 -> 에디터 -> 외형에서 프로젝트 단위로 커스터마이징 가능합니다.

    • 단위는 Units= 메타 태그로 지정할 수 있습니다.

  • 액터 컨텍스트 메뉴에 "오브젝트를 뷰에 스냅" 을 추가했습니다.

  • 이제 픽셀 텍스처당 64 비트 익스포트가 가능합니다. (.tga 도 .bmp 도 64 비트 텍스처를 지원하지는 않기에) 익스포트된 텍스처의 비트 깊이가 감소되기는 합니다.

  • A.R.T. OSX 포트가 이제 사용가능합니다.

  • 블루프린트 애셋을 참조하는 액터는 이제 에디터에서 Ctrl+E 를 누르면 참조된 다른 애셋에 대해 선호하는 블루프린트를 엽니다.

  • 크래시 리포트 클라이언트에 "재시작" 버튼을 추가했습니다.

  • 콘텐츠 브라우저의 엔진 콘텐츠를 표시/숨길 수 있는 블루프린트 호출가능 함수를 추가했습니다.

  • 하드웨어 세팅 변경시 에디터 재시작 버튼을 추가했습니다.

  • 옵션을 통해 추가시킬 수 있는 웹 브라우저용 더미 플러그인을 추가시켰습니다.

  • 그래프 에디터에서의 줌 레벨 관련 키바인딩을 추가했습니다. 기본 키는 줌 인/아웃에 +/- 입니다.

  • 클래스를 '수퍼 서치' 등록하여 검색 스트링 처리 결과 반환뿐 아니라 그에 따른 동작도 가능하게 하는 메서드를 추가했습니다.

  • 출력 로그 창 안에 우클릭 드래그를 하는 새로운 스크롤 모드를 추가했습니다. SMultiLineEditableText 위젯의 다른 인스턴스에도 똑같이 적용됩니다.

  • 애셋 에디터에서 L+클릭으로 프리뷰 라이트 방향을 바꿀 때의 시각화를 추가했습니다 (마우스 버튼을 놓은 뒤 1 초 동안 유지됩니다).

  • Cable 컴포넌트에서 Attach End To 위치를 구하고 설정하는 블루프린트 호출가능 함수를 추가했습니다.

  • 플레이어 컨트롤러에 환경설정 가능 Hit Result Trace Distance 프로퍼티를 추가, 액터 마우스 클릭 및 터치 인터페이스에 사용되는 트레이스 거리의 커스터마이징이 가능합니다.

  • 크로스페이드 파라미터 표시 개선을 위한 커스터마이제이션을 추가했습니다.

  • 특정 환경설정 파일에서 프로젝트 세팅을 편집할 수 있는 함수성을 추가했습니다.

    • 프로퍼티 단위로 활성화됩니다.

    • 다수의 iOS 프로젝트 세팅에 활성화됩니다 (Enable Game Center 등).

  • 가비지 컬렉터 호출 전 스트리밍 플러싱을 활성화시킬 수 있는 ini 옵션을 추가했습니다.

    • 엔진 ini 의 [Core.System] 섹션 아래 FlushStreamingOnGC 값을 통해 활성화시킬 수 있습니다.

  • 웹 브라우저 오류에 대한 로그 메시지를 추가했습니다.

  • 뷰포트 클라이언트에서 언리얼 위젯의 기본 표시여부 설정을 위한 메서드를 추가했습니다.

  • 저장 대화창에서 취소가 아닌 거절할 수 있는 옵션을 추가했습니다. 모두 저장 대화창은 이제 '저장' 또는 '취소' 옵션만 제공합니다.

  • 스크립트 플러그인에 대한 스크립트 임포트시 스크립트 콘텐츠 유효성 검사를 추가했습니다. 스크립트 플러그인에 커스텀 파일 확장자가 지원됩니다.

  • 패키지 안에 오브젝트의 이름을 지정하지 않고 StaticLoadObject 로 오브젝트를 로드하는 기능이 지원됩니다. 그러한 경우에는 짧은 패키지 이름을 오브젝트 이름으로 간주합니다.

  • 튜토리얼에 '수퍼 서치' 박스로 검색할 수 있는 태그를 넣을 수 있는 기능을 추가했습니다.

  • 에디터 시작시 마지막 열었던 레벨을 로드하는 기능을 추가했습니다.

  • 월드에 스플라인 컴포넌트 인스턴스 시각화시 다수의 스플라인 키 포인트를 선택할 수 있는 기능을 추가했습니다. 그런 다음 모든 포인트에 (트랜스폼, 유형 변경 등의) 작업을 한꺼번에 할 수 있습니다.

  • 레벨 에디터 뷰포트에 우클릭한 다음 "Go to" 를 선택하여 클릭한 위치로 뷰포트 카메라를 이동시키는 기능을 추가시켰습니다.

  • RHI 뷰포트에 대한 픽셀 포맷을 지정하는 기능을 추가했습니다.

    • 지정된 RHI 뷰포트에 대해 어떤 백 버퍼 포맷을 사용할 것인지 제어할 수 있도록 해줍니다. (Metal, gnm 등) 일부 RHI 에서는 있을 필요가 없으니 무시됩니다.

  • Draw Debug Directional Arrow (디버그 방향 화살표 그리기) 함수에 Thickness (두께) 파라미터를 추가했습니다.

  • 콘텐츠 브라우저 행열에 툴팁이 지원됩니다. 에디터 빌드에 Asset Registry Tag Metadata 클래스를 추가, 부가 태그 정보 보고용입니다.

  • 다양한 지오메트리 모디파이어 위젯에 툴팁 텍스트를 추가했습니다.

  • 웹 브라우저 창에 LoadString 을 사용하도록 추가, html 코드를 직접 표시할 수 있도록 했습니다.

  • SCS 에디터 뷰포트에 뷰 모드 메뉴를 추가했습니다.

  • 런처 빌드에 디렉터리 검색 추가를 위해 .uprojectdirs 존재여부 검사를 가능하도록 했습니다.

  • 이제 셰이더가 컴파일중인 경우 자동저장이 유예됩니다.

  • 사용가능 플랫폼 에디터 모듈은 이제 하드코딩 보다는 검색됩니다.

  • 블루프린트 애셋의 컨텍스트 메뉴에 "Create Child Blueprint Class" (자손 블루프린트 클래스 생성) 옵션을 추가, 기본 이름으로 블루프린트 에디터에서 즉시 여는 대신 콘텐츠 브라우저에서 애셋을 새로 만들어 바로 이름을 변경할 수 있도록 했습니다.

  • 텍스처 에디터 기본 배경을 체크무늬로 변경했습니다. Saturation 뷰 옵션 이름을 Desaturation 으로 변경했습니다.

  • 즐겨찾기 메뉴의 상한선이 없도록 변경했습니다. 즐겨찾기는 이제 가장 최근 추가/열었던 것이 목록 상단에 오도록 정리됩니다. 메인 메뉴에는 즐겨찾기 레벨 다섯 개까지만 표시되고, 나머지는 하위 메뉴에 들어갑니다.

  • 입력 세팅 UI 에서 전에는 읽기 힘들었던 구두점 키에 대해 (콤마 등) 전체 이름을 사용하도록 변경했습니다.

  • 파일에 쓰는 데 관련된 오류의 경우 그 오류가 발생한 파일명을 포함하도록 변경했습니다.

  • 텍스처 에디터가 마스크 채널보다는 알파를 사용할 것 같은 몇몇 종류의 텍스처에 대해 알파 채널을 기본적으로 표시하도록 변경했습니다.

  • 웹 브라우저 뷰포트가 로컬 사이즈를 사용하도록 변경, 어플리케이션 스케일이 변경되면 이미지의 줌 레벨도 변경되도록 했습니다.

  • 기본 씬 루트 컴포넌트 편집 방식을 변경했습니다.

    • 기본 액터에 디폴트 씬 루트가 있습니다. 기존에는 처음 추가한 씬 컴포넌트에 의해 삭제되었었습니다.

    • 디폴트 씬 루트는 이제 지우거나 루트 위치에 다른 씬 컴포넌트를 끌어올 때까지 남아있습니다.

    • 부모 제거시 자손 컴포넌트의 부모변경 방식도 형제 관계 유지를 위해 약간 변경되었습니다.

  • 데이터 테이블 에디터의 사용성에 약간의 개선이 있었습니다.

    • 데이터 테이블 에디터의 모양과 느낌이 새로워져, 열 크기 임의조정, 행 순서 변경, 되돌리기 / 다시하기 기능 등이 완벽 지원됩니다.

    image alt text

    • 이제 데이터 테이블 에디터 안에서 애셋과 클래스 프로퍼티를 편집할 수 있으며, 이제 배열 프로퍼티가 익스포트/임포트 프로세스에 지원됩니다.

    image alt text

    • 이제 데이터/커브 테이블을 CSV 또는 JSON 파일로 익스포트하고, JSON 에서 데이터/커브 테이블을 임포트할 수도 있습니다 (물론 기존 CSV 도 지원합니다).

  • 레벨 뷰포트로 텍스처 애셋이나 머티리얼을 끌어오면 이제 커서 데코레이터 창이 유지됩니다. 텍스처나 머티리얼을 적용할 수 없는 씬 컴포넌트 위에 커서를 올린 경우 '허용되지 않음' 이라 표시됩니다.

  • 이제 에디터 세션에서 원근 / 직교 뷰포트의 뷰 모드 설정을 기억합니다.

  • 웹 브라우저 창 크기가 제대로 설정되도록 했습니다.

  • 실험단계 및 초기 접근 단계 경고 배너가 블루프린트 및 레벨 에디터 컴포넌트 트리 양쪽에서 컴포넌트가 선택되는 디테일 패널에 표시됩니다.

  • 여러줄 편집가능 텍스트 위젯에서 복사해올 때 Windows에 새줄 시퀀스가 잘못되던 문제를 고쳤습니다.

  • 직교 모드 확대 상태에서 드래그 시작 위치가 틀려지는 문제를 고쳤습니다. 드래그 시작 트리거가 스케일이 적용된 데이터로 결정되었기 때문입니다. 이제 RawDelta 프로퍼티를 사용합니다.

  • 블루프린트를 통해 닫힌 루프 프로퍼티 설정/해제시 스플라인이 업데이트되지 않던 문제를 고쳤습니다.

  • (고해상도 또는 일반) 스크린샷을 찍을 때의 여러가지 문제를 고쳤습니다. 모든 에디터/게임 창 유형에 정상 작동합니다. 기본 이미지 포맷은 이제 .png 입니다.

  • 심플리곤이 있는 경우, 새로 만들 필요 없이 LOD 재생성이 가능합니다.

  • 애셋 삭제 대화창 "레퍼런스 대체" 부분의 필터링을 개선, 블루프린트 애셋을 부모 클래스로도 필터링할 수 있게끔 했습니다.

  • 스플래시 화면이 초기화 진행 상태를 보다 정확히 반영하도록 개선시켰습니다.

  • 텍스처 임포트시의 노멀맵 감지 경험법칙을 개선시켰습니다. 이제 알파가 있는 노멀맵을 제대로 식별할 것입니다.

  • 큰 배열 프로퍼티가 많을 때 디테일 패널 표시가 조금 최적화되었습니다.

  • 디테일 패널의 BSP Surfafce Properties 카테고리에, 이제 스케일이 선택된 표면 스케일로 초기화됩니다.

  • 레벨 에디터 뷰포트 트랜스폼 위젯은 이제 이동 불가능한 액터에 대해 숨겨지는데, 씬 컴포넌트가 없기 때문입니다.

  • 레벨 익스포트가 이제 스켈레탈 메시, 자손 액터 컴포넌트 (재귀), 카메라를 포함한 모든 것을 지원합니다.

    • 에디터 유저 세팅의 Keep Hierarchy (계층구조 유지) 옵션도 지원합니다 : 현재 붙은 계층구조를 유지합니다.

  • 게임을 독립형으로 실행할 때에도 현지화 실행 및 콘솔 명령이 작동합니다.

  • 에디터 전반적으로 동작 및 탭에 아이콘이 빠진 부분이 다수 추가되었습니다.

  • 액터 병합 툴의 스킨이 변경되어 이제 별도의 탭을 갖습니다. 실험단계 세팅에서 켜 준 다음, 창 메뉴에서 그 탭을 열어주기만 하면 됩니다. 그런 다음 병합하고자 하는 액터를 선택한 뒤, '액터 병합'을 선택합니다.

  • 에디터에 탭을 닫는 명령이 추가되었습니다.

    • Close Major Tab (주요 탭 닫기) 명령은 포커스 상태의 주요 에디터 탭을 닫습니다 (기본키 Ctrl+F4)

    • Close Minor Tab (사소 탭 닫기) 명령은 현재 창의 활성 사소 탭을 닫습니다. 활성 사소 탭은 탭 제목줄에 강조되어 있는 탭을 말합니다.

  • 에디터에서 플레이(PIE)에 서브레벨이 이미 에디터에 로드되어 있어도 디스크에서 강제로 스트림 인 시키는 옵션이 새로 생겼습니다. '에디터 개인설정->플레이->에디터에서 플레이 도중 서브 레벨 스트리밍'.

    • 보통 PIE 는 게임 월드가 스트림 인 하고자 하는 레벨을 이미 메모리에 복제합니다. 이 옵션이 설정된 PIE 는 실제 게임플레이 도중의 레벨 스트림 인 방식과 유사한 작동방식을 보입니다.

    • 참고로 에디터에서 변경은 했으나 저장은 하지 않은 레벨은 계속해서 스트리밍 되기 보다는 복제됩니다.

  • 프로파일러: 네임드 이벤트 목록 크기를 변경하는 기능을 추가했습니다.

  • 프로젝트 타이틀이 이제 PIE 창에 표시됩니다.

  • Actor Locking (액터 고정) 에디터 기능의 이름을 Actor Pilot (액터 파일럿)으로 변경했습니다.

    • 액터 파일럿은 이제 뷰포트의 무관한 메뉴가 아닌 액터의 컨텍스트 메뉴에서 시작됩니다. 마찬가지로 파일럿은 액터의 컨텍스트 메뉴를 통해 멈출 수 있으며, 파일럿이 시작되면 보이는 뷰포트 툴바에서도 가능합니다.

  • 클래스 뷰어의 "블루프린트 클래스 생성" 대화창을 다시 만들었습니다.

  • 러시아어 키보드에 이제 기본 콘솔 키가 매핑되어 있습니다.

  • 스플라인 메시 컴포넌트에 커브의 바운드를 메시 바운드가 아닌 수치로 지정할 수 있는 Min/Max Boundary 프로퍼티가 생겼습니다.

  • 스플라인 메시 컴포넌트에 대한 바운드 계산이 주어진 커스텀 경계를 토대로 올바르게 계산되도록 고쳤습니다.

  • 레벨 뷰포트 컨텍스트 메뉴의 선택 서브메뉴에 일반적이지 않거나 폐기된 항목을 제거시켰습니다.

  • 텍스처 LOD 세팅은 이제 디바이스 프로파일별로 환경설정 가능합니다.

    • 타깃 플랫폼 및 디바이스에 따라 텍스처 LOD 를 지정할 수 있는 사용자 제어권이 크게 향상됩니다.

    • 에디터에서 뷰->개발자 툴->디바이스 프로파일을 통해 환경설정 가능합니다.

  • "액터 병합" 툴은 이제 메시의 LOD 도 병합해 줍니다.

  • "액터 병합" 툴에 머티리얼도 병합시킬 수 있는 옵션이 생겼습니다. 각 소스 머티리얼의 컴포넌트(베이스 컬러, 노멀, 러프니스 등)는 하나의 텍스처로 평탄화(flatten)시켜 텍스처 아틀라스에 배치해 넣습니다. 불투명 머티리얼만 지원합니다.

  • 언리얼 위젯, 특히나 회전 위젯의 일반적인 느낌이 개선되어, 사용자의 마우스 이동에 부드럽게 반응할 것입니다.

  • 메시지 로그 시스템은 이제 깨진 콘텐츠 수리와 같은 일회성 동작 수행을 위한 버튼 추가를 지원합니다. 버튼을 눌러 동작이 수행되면, 버튼은 제거됩니다.

  • LOD 임포트시 이제 OBJ 파일 포맷이 지원됩니다.

  • 이제 지오메트리 모드의 펜 툴을 통해 에지가 자체 교차하는 지오메트리를 만들 수 없습니다.

  • 심플리곤 메시 프록시 툴은 이제 메탈릭, 러프니스, 스페큘러 머티리얼 프로퍼티를 지원합니다.

  • 씬 컴포넌트 서브클래스의 트랜스폼 및 벡터 프로퍼티를 레벨 에디터에서 조작할 수 있습니다.

    image alt text

    • 씬 컴포넌트와 액터 서브클래스의 편집가능 프로퍼티는 C++ 에서 meta=(MakeEditWidget) 또는 블루프린트에서 "Show 3D Widget" 을 사용하여 태그 가능합니다.

    • 트랜스폼 또는 벡터 프로퍼티 배열에도 작동하는데, 배열 각 요소마다 위젯이 하나씩 표시됩니다.

  • 팩토리 임포트 소팅 및 우선순위 방식이 업데이트되었습니다.

  • 존재하지 않는 바이너리 패키징시 사용자에게 경고창이 뜹니다.

  • 이제 게임내 콘솔 자동완성 목록에 유효한 stats 콘솔 명령이 나타나며, 더이상 '알 수 없는 명령' 이라는 메시지가 출력되지 않습니다.

  • 이제 블루프린트 또는 액터 디테일의 컴포넌트를 더블클릭하여 뷰포트의 포커스를 컴포넌트에 맞출 수 있습니다.

  • 녹화된 무비에 UMG/Slate HUD 를 포함시킬지 여부를 지정하는 세팅을 마티네 무비 녹화 툴에 추가했습니다.

  • 스태틱 메시에 MiKKTSpace 탄젠트 생성 사용을 토글하는 세팅을 다시 추가했습니다.

  • 마우스 캡처 뾰족부분이 접히거나 히트 테스트에 보이지 않도록만 조정했습니다. 기존에는 테두리가 보여 클릭을 막고 있었습니다.

  • 모든 사용자 포커스는 PIE 에서 메인 뷰포트에 설정되며, PIE 뷰포트에 직접 클릭하기 전까지는 두 번째 이상의 플레이어 컨트롤러는 컨트롤을 받지 못합니다.

  • 스태틱 메시로 변환된 BSP 는 더이상 레벨에 BSP 브러시를 남겨두지 않습니다.

  • 여기에서 플레이 위치에 스냅이 적용되지 않도록 변경했습니다.

  • 피처 팩 삽입시 임포트할 폴더 이름을 교정했습니다.

  • 작은 아이콘 모드에서 커브 애셋 에디터에 아이콘이 표시되지 않던 문제를 고쳤습니다.

  • 렌더 타깃 리임포트 시도시의 크래시를 고쳤습니다. 렌더 타깃은 소스 아트 데이터에서 생성되지 않으므로 리임포트 불가능합니다.

  • 터치 인터페이스 레이아웃에서 이미지 애셋을 없음으로 설정해야 할 때 실행중인 게임/PIE 크래시를 고쳤습니다.

  • FBX 임포트 도중 머티리얼을 찾지 못한 경우 스켈레탈 메시에 어떤 머티리얼 편집도 허용되지 않던 것을 고쳤습니다.

  • 새 에디터 또는 창에서 PIE 중일 경우, (Pause 키로) PIE 세션 일시정지가 실제로 작동하도록 고쳤습니다.

  • 자손 액터 컴포넌트를 소멸에 따른 비동기 로딩 플러시로 인해 서브레벨 스트림 인 도중 멈추는 현상을 고쳤습니다.

  • "BugItGo" 콘솔 명령이 에디터에서 플레이 모드에서 작동하도록 고쳤습니다.

  • 맵 로드 도중 추가된 "맵 체크" 오류 메시지가 표시되지 않던 것을 고쳤습니다.

    • 에디터에서 맵 로드시 전체 맵 체크를 하지는 않으나, 일부 오브젝트가 로드시 자체 검사를 하여 맵 체크 오류를 추가하는 것입니다.

  • 월드 아웃라이너의 "select immediate children" (직계 자손 선택)이 재귀 선택되던 것을 고쳤습니다.

  • 에디터에서 플레이 클라이언트 인스턴스가 현재 맵이 저장되지 않은 경우 잘못된 맵을 로드하게 만들 수 있었던 버그를 잡았습니다.

  • 라인 어트랙터의 시작점과 끝점 위치가 같은 경우 엔진 크래시가 날 수 있었던 버그를 잡았습니다.

  • OpenGL 하에서 에디터 크래시가 날 수 있었던 버그를 잡았습니다.

  • 호스트 플랫폼이 정의되지 않은 경우 자동화 테스트에 크래시가 날 수 있던 버그를 잡았습니다.

  • 디테일 패널 검색시 슬레이트 브러시의 "이미지" 칸을 찾지 못하는 버그를 잡았습니다.

  • 애널리틱스가 비활성화된 경우 FBX 파일 임포트의 크래시를 고쳤습니다.

  • GUID 구조체 커스터마이제이션의 크래시를 고쳤습니다.

  • 인스턴스가 없는 상태에서 외부 프로퍼티 유효성 검사시 프로퍼티 에디터의 크래시를 고쳤습니다.

  • 소스 메시 중 하나에 할당된 머티리얼이 없을 때 심플리곤 메시 프록시 유틸리티의 크래시를 고쳤습니다.

  • 패키지 스트리밍 실패 이후 게임 종료시의 크래시를 고쳤습니다.

  • 저장되지 않은 레벨 이름변경시의 크래시를 고쳤습니다.

  • BSP 박스에 테셀레이티드 설정시의 크래시를 고쳤습니다.

  • 뷰포트가 몰입 모드일 때 컴포넌트 비주얼라이저 컨텍스트 모드를 띄울 때의 크래시를 고쳤습니다.

  • 엔진 초기화가 끝나기 전 로딩 화면에 머티리얼이 사용된 경우의 크래시를 고쳤습니다.

  • 사용자 정의 구조체에 텍스트 배열 추가시의 크래시를 고쳤습니다.

  • 너무 큰 폰트 텍스처 생성 시도시의 크래시를 고쳤습니다.

  • 지오메트리 모드에서 에지를 돌리려 할 때 연관된 폴리곤이 일치하는 경우의 크래시를 고쳤습니다.

  • 가비지 컬렉터가 찾은 오브젝트가 스트리밍 코드에 의해서만 참조되어 유발된 스트리밍 도중 가비지 컬렉터가 발동될 때의 크래시를 고쳤습니다.

  • 깨진 애셋 로드시의 크래시를 고쳤습니다. 대신 경고창이 뜹니다.

  • BSP 브러시를 미러링할 때의 크래시를 고쳤습니다.

  • 레벨에 레벨 이름과 같은 액터가 있는 경우, 레벨 블루프린트를 처음 열 때의 크래시를 고쳤습니다.

  • 액터를 새로운 액터로 연달아 두 번 대체할 때의 크래시를 고쳤습니다.

  • 에디터에서 플레이 또는 시뮬레이트 중지시의 크래시를 고쳤습니다. 뷰포트의 액터를 드래그하는 도중 키보드 단축키를 사용해서 에디터에서 플레이 또는 시뮬레이트를 시작한 경우 발생했습니다.

    • 액터를 뷰포트에 끌어온 상태에서 에디터에서 플레이 또는 시뮬레이트가 시작된 경우, 드래그 작업을 취소 및 되돌린 이후 게임을 시작합니다.

    • 에디터에서 플레이 또는 시뮬레이트 시작시 (에디터에서 되돌릴 수 있는) 다른 수정을 가한 경우, 시작 명령은 무시되고 그 이유를 설명하는 메시지가 표시됩니다.

  • 페인트 모드에서 텍스처를 칠할 때의 크래시를 고쳤습니다.

  • 이미 많은 수의 액터가 선택된 경우 직교 모드에서 액터를 범위 선택할 때의 크래시를 고쳤습니다.

  • 텍스처 에디터에서 할당된 LOD 그룹이 BaseEngine.ini 에서 삭제된 텍스처를 열 때의 크래시를 고쳤습니다.

  • 대규모 데이터 로드시의 오랜 탐색 시간으로 인해 콘텐츠를 스트리밍할 때 약간의 프레임 속도 폭증을 고쳤습니다.

  • 쿠킹된 빌드에서 콜리전 표시를 시도하려 할 때 크래시가 날 수 있었던 문제를 고쳤습니다.

  • 메시 리임포트 이후 커스텀 설정된 LOD 머티리얼이 없어지던 작은 문제를 고쳤습니다.

  • 최대 텍스처 크기를 2 제곱수 이외의 텍스처로 할당 시도할 때의 에디터 크래시를 고쳤습니다.

  • 월드에 스트리밍 레벨로 참조되어 있는 레벨을 콘텐츠 브라우저에서 이름변경할 때의 에디터 크래시를 고쳤습니다.

  • '되돌리기'와 칠해진 버텍스 컬러 사용시의 에디터 크래시를 고쳤습니다.

  • 프로젝트 생성시 소스 컨트롤에 새 프로젝트 파일을 추가할 수 없는 경우 오류가 생성되던 것을 고쳤습니다.

  • 클래스 뷰어에서 현재 선택된 클래스를 레벨에 끌어놓을 수 없었던 문제를 고쳤습니다.

  • 액터의 클래스가 변경된 경우 핫 리로드 이후 액터의 루트 컴포넌트가 사라지던 문제를 고쳤습니다.

  • 프로젝트나 엔진이 UE4 가 플랫폼 이름으로 사용하는 디렉터리에 위치한 경우, 전체 프로젝트 또는 엔진이 게임 빌드/생성시 제거되던 문제를 고쳤습니다.

  • 프로젝트 세팅이 두 항목으로 기본 환경설정 파일을 업데이트하던 문제를 고쳤습니다.

  • 스타트업 무비가 뷰포트에 렌더링되지 않던 문제를 고쳤습니다.

  • 데이터 테이블 에디터가 창 레이아웃에 따라 작업이 중지될 수 있었던 문제를 고쳤습니다.

  • 궤도 카메라가 다음 업데이트 전까지 마우스 커서 숨김을 지연시키던 문제를 고쳤습니다.

  • 출력 로그가 가끔 초기화 도중 하단으로 자동 스크롤되지 않던 문제를 고쳤습니다.

  • PIE 레벨 스트리밍에서 리디렉터를 통해 월드를 로드할 때, 월드 유형이 바뀔 수 있었던 문제를 고쳤습니다.

  • 애니메이션 및 UMG 블루프린트의 코너 텍스트가 잘못된 것을 고쳤습니다.

  • 디테일 패널의 탐색 버튼이 값 편집이 불가능할 때는 오브젝트 프로퍼티에 사용할 수 없도록 수정했습니다.

  • 브러시 트랜스폼 세팅을 디테일 패널에서 변경한 경우 실시간 업데이트되지 않던 것을 고쳤습니다.

  • BSP 미러링 작업의 되돌리기가 정상 작동하도록 수정했습니다.

  • 색 선택 툴에서 취소를 누르면 원래 색이 제대로 복원되지 않던 버그를 잡았습니다.

  • 시작 시간이 설정된 사운드가 페이드 인 될 때의 버그를 잡았습니다.

  • 텍스처 시각화 창의 열에 클릭할 때의 크래시를 고쳤습니다.

  • 디폴트 서브오브젝트의 프로퍼티를 제거하지 않고 생성을 담당하는 코드를 제거한 이후 핫 리로드 도중의 크래시를 고쳤습니다.

  • 사운드큐 에디터를 열 때의 크래시를 고쳤습니다.

  • 소스 구역이 여럿인 스프라이트를 반복해서 클릭할 때의 크래시를 고쳤습니다.

  • 여러 애셋을 같은 이름으로 한꺼번에 임포트할 때의 크래시를 고쳤습니다.

  • '이펙트 동굴' 및 '엘리멘탈' 데모 실행시 PIE 실행 또는 중지할 때의 크래시를 고쳤습니다.

  • 이미 타일 맵 페인트 모드에 있는 상태에서 Shift 를 누를 때의 크래시를 고쳤습니다.

  • 이름이 매우 긴 오브젝트 프로퍼티에서 디테일 패널 버튼이 클릭되지 않던 것을 고쳤습니다. 애셋 버튼 위치에 대해 약간의 조정이 있었습니다.

  • 씬 아웃라이너에서 월드로 자손이 붙은 액터를 끌어 놓으면 가짜 오류 메시지가 나던 것을 고쳤습니다.

  • 다중 브러시 선택 상태의 BSP 편집/돌출 작업을 수정했습니다. 딱 하나의 표면을 선택한 제한된 경우 대비 스케일도 수정했습니다.

  • 탭이 활성 또는 보이는 상태가 아닐 경우의 에디터 뷰포트 그리기를 고쳤습니다.

  • UMG 에디터의 디테일 패널에 빈 카테고리가 나타나던 것을 고쳤습니다.

  • FBX 익스포트가 스태틱 메시에 대한 버텍스 컬러를 익스포트하지 않던 것을 고쳤습니다.

  • FBX 임포트 메뉴가 잘못된 디테일 패널 오브젝트를 사용하던 것을 고쳤습니다.

  • FBX 임포트 창이 가끔 스태틱 메시를 스켈레탈 메시로 임포트할 때 일관되지 않은 상태로 잠기던 것을 고쳤습니다.

  • 폴리지 튜토리얼이 새로운 세팅과 UI 변화에 맞게끔 수정했습니다.

  • UMG 위젯 틱 이벤트 내에 중단점이 있을 때 에디터의 그래프가 깨지던 것을 고쳤습니다.

  • 타일 맵 에디터에 포커스가 있을 때 Ctrl 단축키를 사용할 수 없었던 것을 고쳤습니다.

  • 폴더의 리디렉터를 고칠 때 "애셋을 로드할 수 없습니다" 알림이 잘못 나타나던 것을 고쳤습니다.

  • PropertyEditor 가 지정되지 않은 경우 액터 프로퍼티가 액터 라벨에서 이름을 가져오지 않던 것을 고쳤습니다.

  • 독립형 모드 실행시 특정 피직스 시뮬레이션 컴포넌트에 트랜스폼이 틀리던 문제를 고쳤습니다.

  • 다이얼로그 웨이브가 잘못된 사운드 클래스로 재생되던 문제를 고쳤습니다.

  • 액터를 한 레벨에서 현재 선택된 레벨로 옮길 때, 숨겨진 경우, 액터가 변형되거나 완전 삭제되는 문제를 고쳤습니다.

  • 새 프로젝트의 최상위 폴더에 맵 파일명을 지을 때의 문제를 고쳤습니다.

  • 액터를 새 레벨로 옮길 때 가끔 삭제되던 문제를 고쳤습니다.

  • 부모 브러시가 회전 또는 스케일 조절되었을 때 BSP 표면 텍스처 트랜스폼 관련 문제를 고쳤습니다.

  • 브러시 클립 툴에서 잘린 브러시를 복사/붙여넣지 못하게 하던 문제를 고쳤습니다.

  • 로컬 트랜스폼 보존 옵션이 가끔 FBX 임포트 UI 에 빠지던 것을 고쳤습니다.

  • 빌보드 컴포넌트 및 머티리얼 빌보드 컴포넌트에 대한 LOD 세팅이 숨겨지던 것을 고쳤습니다.

  • LOD 가 있는 메시 리임포트 관련 크래시/문제를 다수 고쳤습니다 (대부분 머티리얼 인덱스 관련 문제였습니다).

  • 피벗을 액터 원점에서 옮겼을 때의 오브젝트 스케일을 수정했습니다.

  • 브러시 컴포넌트에 대한 직교 뷰포트 박스 선택을 수정, 더이상 에지나 버텍스를 지나지 않는 데도 모두 선택되지 않습니다.

  • 쿠킹된 빌드에서 패키지 요약을 열 때의 퍼포먼스 불안정을 고쳤습니다.

  • 컴포넌트를 자손이 붙은 기본 액터에 붙일 수 없었던 문제를 고쳤습니다.

  • 에디터의 빌드 도중 진행상황 창 업데이트 문제를 고쳤습니다.

  • 다중 씬 환경에서 씬 캡처 액터가 잘못된 씬에서 데이터를 업데이트하던 것을 고쳤습니다. 씬 캡처 액터는 이제 연관된 씬이 업데이트될 때만 업데이트됩니다.

  • 씬 캡처 컴포넌트가 에디터에서 또는 블루프린트의 일부일 때 제대로 업데이트되지 않던 것을 고쳤습니다.

  • 독립형 언리얼 프론트엔드를 사용해서 게임 프로젝트 빌드시의 여러 빌드 오류를 수정했습니다.

  • BSP 브러시 작업을 되돌릴 때의 여러가지 크래시를 고쳤습니다.

  • 로딩 화면 무비 플레이어에서 크래시가 날 수 있었던 경쟁 조건을 여럿 고쳤습니다.

  • 'show volumes' 및 'show collision' 콘솔 명령을 수정, 볼륨 및 BSP 가 제대로 표시되도록 했습니다.

  • 스트리밍 코드가 패키지 요약 로드 실패를 제대로 처리하지 못해 무한히 로드하게 되던 것을 고쳤습니다.

  • 클래스 디폴트 오브젝트 이외의 템플릿에서 새 오브젝트 생성시의 서브오브젝트 인스턴싱을 고쳤습니다.

  • 모델 오브젝트의 텍스트 익스포트를 수정, 브러시 오브젝트가 정의되기 전 앞서 선언되도록 했습니다. 이때문에 "모호한 검색" 이라는 메시지가 출력 로그에 가득차도록 만들었었습니다.

  • 회전 또는 스케일 조절된 브러시에 대한 "브러시 버텍스 정렬" 작업을 수정했습니다.

  • 커브 에디터에서 다른 컬러 채널처럼 알파 그래프도 편집할 수 있게끔 고쳤습니다.

  • 델타 이동 기능을 되돌릴 수 없던 것을 고쳤습니다.

  • "외부 프라이빗 오브젝트에 링크된 그래프" 포함 패키지 저장시의 "참조 프로퍼티" 표시를 고쳤습니다.

  • 그래픽 태블릿이 연결되면 가끔 에디터가 멈추던 것을 고쳤습니다.

  • GPU 프로파일러 창을 독립형 게임에서 열었을 때 여러 텍스처가 빠지던 것을 고쳤습니다.

  • PIE 종료시 레벨 에디터가 활성 탭이 아니어도 항상 포커스가 잡히던 것을 고쳤습니다.

  • 마티네가 열려있을 때 직교 뷰포트에서 측정 툴이 작동하지 않던 것을 고쳤습니다.

  • 언로드된 블루프린트 컴포넌트에 가끔 아이콘이 잘못되던 것을 고쳤습니다.

  • 머티리얼 빌보드 컴포넌트상의 UV 좌표를 고쳤습니다.

    • 머티리얼의 실행시간 읽고 쓰기도 가능해 졌습니다.

  • 공간화 활성 상태의 스테레오 사운드 플레이시의 경고를 고쳤습니다.

  • 가비지 컬렉터에서 퍼지 종료 도중 영구 오브젝트 풀에 상주하는 오브젝트에서 퍼지가 소멸자를 호출하지 않던 버그를 잡았습니다.

  • 에디터 비행 제어가 조합키(Ctrl, Alt, Shift, Cmd)가 눌리지 않은 상태에서만 효과를 발휘하도록 변경했습니다. [조합키]+PgUp 를 다른 동작에 바인딩하는 작업이 가능하도록 하기 위해서입니다.

  • 트랜스폼 프로퍼티가 "Use 3D Widget" 마킹되어, 이제 위젯 회전이 로컬 스페이스 모드에서 제대로 표현됩니다.

  • 컴파일 오류로 인해 새 클래스 추가가 실패할 때의 오류 메시지를 개선시켰습니다.

    • 클래스 자체를 추가하는데도 "클래스 추가에 실패했다"는 오류 메시지가 혼동을 야기했습니다.

    • 새 클래스 추가시 (아마도 컴파일 오류에 의해) 핫 리로드에 실패하는 경우, 이제 클래스 자체는 추가되었으나 모듈을 컴파일해 줘야 에디터에 나타난다고 알려주며, 좀 더 자세한 컴파일러 출력 확인을 위해 출력 로그를 쉽게 열 수 있는 방법을 제공합니다.

    • 클래스 마법사 또한 자동으로 닫아서 "클래스 이름이 이미 사용중"이라는 오류 메시지를 보고있지 않도록 했습니다.

  • 초기 로드 도중 생성된 모든 오브젝트가 아닌, 로드된 오브젝트만 루트 세트로 마킹합니다. 이로써 블루프린트 로드 및 생성 문제 몇 가지가 해결됩니다.

  • 에디터에서 플레이 시작시 진행중인 스트리밍 요청이 없도록 했습니다.

  • PIE 에서의 맵 이동 실패시 기본 맵 로드를 시도하기 보다는 그냥 PIE 를 종료시킵니다. 기본 맵 역시도 로드에 실패하는 경우 치명적 오류가 날 수 있던 문제가 해결됩니다.

  • 머티리얼 평탄화가 이제 씬 프로퍼티를 사용하는 머티리얼에서 더 나은 결과를 냅니다.

  • 고해상도 스크린샷용 머티리얼 함수성은 이제 에디터 빌드에서만 로드됩니다.

  • 타일 맵 칠하기 완료 이후 더이상 마우스 커서가 시작 지점으로 되돌아가지 않습니다.

  • 버퍼 시각화 셋업 코드가 덮어쓰기 적용 이후 표시 플래그를 사용할 수 있도록 이동시켜, 에디터 이외의 모드에서도 디버그 뷰 모드가 허용되었을 때도 정상 작동합니다.

  • 모듈이 사용불가일 때 키보드 단축키로 툴박스를 부를 수 없게 되었습니다.

  • 에디터 재시작이 필요한 프로젝트 세팅은 이제 변경되면 토스트기 알림이 떠, 재시작하겠냐고 묻습니다.

  • 레퍼런스 뷰어에서 배경에 우클릭했을 때 유효하지 않은 컨텍스트 메뉴를 제거했습니다.

  • 디테일 패널에서 프로퍼티 값을 디폴트로 리셋시키면 이제 그 변경내용이 블루프린트 자손 인스턴스에 전파됩니다.

  • 일부 비인기 에디터 뷰포트 세팅을 에디터 세팅 내 고급 섹션으로 옮겼습니다.

  • 게임 메뉴 빌더의 사용성 개선을 위한 개정이 조금 있었습니다.

  • 메뉴 오너, 메뉴 스타일, 다양한 클릭 델리게이트 설정을 위한 함수를 추가했습니다.

  • 커스텀 메뉴 아이템 추가용 템플릿 함수를 추가했습니다.

  • ini 파일 파싱을 여러 번 하던 것을 멈추어 에디터 시작 시간을 빠르게 했습니다.

  • 게임 뷰에서 뷰포트에 그룹 액터를 묶는 꺾쇠가 렌더링되지 않도록 했습니다.

  • "액터 병합" 툴은 이제 '노멀 재계산' 옵션이 꺼진 스태틱 메시를 제대로 처리합니다.

  • "액터 병합" 툴은 이제 병합된 메시에 소스 메시 애셋 이름 대신 소스 액터 이름을 사용합니다.

  • 클래스 선택기 여는 속도가 빨라졌습니다.

  • Git 소스 컨트롤 플러그인의 접속 오류 팝업 메시지가 복원되었습니다.

  • 새 맵을 만들거나 기존 맵을 로드해도 현재 피처 레벨 모드는 지속됩니다.

  • GIt 소스 컨트롤 플러그인은 이제 조금 더 여러 경로에서 필수 Git 실행파일을 검색합니다.

  • 그룹 액터 피벗 위치는 이제 그룹에/서 액터 추가/제거를 제대로 업데이트합니다.

  • 마티네가 열렸을 때도 직교 뷰포트에서 측정 툴이 정상 작동합니다.

  • 카메라 액터 및 포스트 프로세스 볼륨의 포스트 프로세스 세팅을 비우고, 이제 디테일 패널의 Post Process Settings 필드 내 자체 카테고리에 표시됩니다.

  • 내비게이션 속도 향상을 위해 레퍼런스 뷰어가 더이상 우클릭한 애셋을 로드하지 않습니다.

  • 소스 메시 중 하나에 빈 머티리얼이 있을 때 더이상 심플리곤 메시 프록시 툴이 크래시가 나지 않습니다.

  • 심플리곤 메시 프록시 툴이 더이상 불투명하지 않은 머티리얼이 있는 메시를 병합하려 하지 않습니다.

  • UMG 팔레트 뷰가 이제 기본적으로 공통(common) 카테고리를 엽니다.

  • 에디터 사용에 방해되는 자동저장 팝업을 피하기 위해서, 에디터 관련 작업이 있었던 경우 자동저장이 잠깐 중지됩니다.

  • 게임 빌드시 실행 플랫폼에 대한 디바이스 프로파일만 로드되던 또다른 문제를 고쳤습니다.

  • "여기에 카메라 생성" 명령이 이제 현재 카메라의 FOV 는 물론 위치와 방향까지도 복사합니다.

  • 프로젝트의 시스템 세팅에서 VSync 를 켰다 하더라도 에디터 이외의 런타임에서는 더이상 에디터에서 강제로 켜지지 않습니다.

  • 레벨 에디터에서 인스턴싱된 컴포넌트의 프로퍼티/어태치먼트를 변경한 이후, 컨스트럭션 스크립트에서 그 값에 의존하는 경우라면 이제 컨스트럭션 스크립트를 재실행합니다.

  • 행 이름을 바꾼 뒤 엔터를 치지 않고 새 행을 선택하면, 이전 행 이름이 변경되는 반 직관적 방식이 아닌, 새로 선택한 행의 이름이 바뀝니다.

  • Make Edit Widget 트랜스폼 프로퍼티에 표시되는 위젯이 이제 방향에 일치되도록 정상 회전됩니다.

  • 계층구조 없이 기본 환경설정 파일을 작성해도 더이상 크래시가 나지 않습니다.

콘텐츠 브라우저

  • 프로토타입 환경설정 가능한 애셋 태그 필터를 추가했습니다.

    • 필터 바 버튼에 대한 컨텍스트 메뉴의 태그, 값, 비교 작업 환경설정이 가능합니다.

    • 주: 프론트 엔드 필터 관련 현재 가정으로 인해, 한 번에 하나의 필터만 활성화 가능합니다.

      image alt text

  • 콘텐츠 브라우저를 통해 C++ 클래스에서 블루프린트를 파생시키는 기능을 추가했습니다.

  • 디스트럭터블 메시 애셋의 썸네일 렌더러를 새로 만들어, 더이상 스켈레탈 메시 렌더러를 사용하지 않습니다. 불필요한 출력 로그 스팸이 생겼었습니다.

  • 콘텐츠 브라우저의 퀵 점프 텍스트가 리셋되기 전 활성 상태로 남아있는 시간을 늘렸습니다.

  • Resource Size 태그가 콘텐츠 브라우저에서 애셋의 툴팁에 나타나도록 다시 초기화시켰습니다.

  • 이제 새 클래스를 추가한 이후 콘텐츠 브라우저 뷰를 동기화시키고, 새 블루프린트 클래스 추가시 블루프린트 에디터를 열기도 합니다.

  • 콘텐츠 브라우저의 "컬렉션 표시"가 이제 기존 에디터 세션의 상태를 기억합니다.

  • 콘텐츠 브라우저의 "폴더에서 표시" 및 "탐색기에서 표시" 컨텍스트 메뉴 옵션이 자주 사용되는 관계로 서브메뉴에서 이동시켰습니다.

  • 텍스처 썸네일 렌더러가 TEXTUREGROUP_Pixels2D 를 TEXTUREGROUP_UI 처럼 취급하도록 변경, 텍스처가 반투명으로 표시됩니다.

  • 피처 팩 임포트시 깨진 데이터가 에디터 크래시 또는 멈춤을 유발하던 문제를 고쳤습니다.

  • 콘텐츠 브라우저가 뷰 옵션을 통해 특정 뷰를 비활성화시킨 경우 계속해서 Engine 또는 Plugin 클래스를 살펴보던 버그를 잡았습니다.

  • 블루프린트 에디터에서 시각적인 컴포넌트 노드를 전부 삭제한 경우 콘텐츠 브라우저 썸네일 아이콘이 소거되지 않던 퇴보를 고쳤습니다.

  • 이름이 변경된 애셋은 콘텐츠 브라우저에서 "레벨에 사용중" 필터를 껐다 켜기 전까지 제대로 나타나지 않던 문제를 고쳤습니다.

  • 콘텐츠 브라우저에서 "체크아웃됨" 필터를 수정했습니다.

  • 파일이 들어있지 않은 Pak 파일을 열 때의 크래시를 고쳤습니다.

  • 고유 애셋 이름 생성을 위한 로직을 개선시켰습니다.

  • 콘텐츠 브라우저의 경로 변경시의 로그 스팸을 줄였습니다.

  • "프로퍼티 매트릭스..." 이름을 "프로퍼티 매트릭스를 통한 대량 편집..." 으로 보다 친숙한 용어로 변경했습니다.

  • 애셋 이름을 변경해도 더이상 콘텐츠 브라우저에 기타 필터가 비활성화되지 않습니다.

  • 콘텐츠 브라우저에서 현재 레벨을 복제하는 기능을 복원시켰습니다.

  • 애셋 발견시 이제, 애셋 뷰에서 경로 선택 이후 백그라운드 파일 검색에 더해 백그라운드 검색 결과 우선순위까지 매깁니다.

랜드스케이프

  • 랜드스케이프 스플라인은 이제 랜드스케이프 스트리밍 레벨 사이에 메시를 분할시킬 수 있습니다.

  • 랜드스케이프 스플라인 세그먼트와 컨트롤 포인트에 이제 bPlaceSplineMeshesInStreamingLevels (스트리밍 레벨에 스플라인 메시 배치)라는 옵션이 새로 생겼습니다.

    • 이 옵션은 새 스플라인에는 기본으로 켜지며, 기존 동작 유지를 위해 기존 콘텐츠에는 꺼져있습니다.

    • 이 옵션을 켠 상태로, 메시가 있는 랜드스케이프 스플라인은 그 아래 해당하는 랜드스케이프 스트리밍 레벨에 메시 컴포넌트를 자동 배치합니다.

    • 스플라인이 지나는 랜드스케이프가 두 개의 레벨로 나뉘는 경우, 메시는 랜드스케이프 컴포넌트의 레벨에 맞게끔 자동으로 나뉩니다.

  • 에디터( 블류틸리티) 내 블루프린트에서 주어진 스플라인을 사용하여 랜드스케이프를 변형(deform)시키는 기능을 추가했습니다.

    • 이를 통해 프로시저럴 랜드스케이프 변경이 가능하나, 변경은 영구적이라는 점 주의하시기 바랍니다!

  • 랜드스케이프 "패턴" 브러시에 월드 스페이스 세팅을 추가했습니다.

  • "랜드스케이프 홀 머티리얼" 생성 및 지정이 더이상 필요치 않습니다!

    • 랜드스케이프에 구멍을 지원하는 랜드스케이프 머티리얼을 만들려면 이제, 단순히 "Landscape Visibility Mask" 머티리얼 노드를 메인 랜드스케이프 머티리얼의 (회색으로 탈색된) "오파시티 마스크" 출력에 연결해 주기만 하면 되며, 별도의 머티리얼이나 인스턴스를 만들 필요가 없습니다!

    • 머티리얼이 (기본이자 추천 세팅인) 불투명으로 설정된 경우, 구멍이 있는 랜드스케이프 컴포넌트는 자동으로 "마스크드" 블렌드 모드를 사용하도록 변경되며, 구멍은 "그냥 작동"합니다.

    • 물론 계속해서 대신 사용할 "랜드스케이프 홀 머티리얼"을 지정할 수도 있습니다. 더이상 필요치 않지만, 구형 프로젝트의 깔끔한 업그레이드를 가능하게 하기 위한 것입니다.

  • 랜드스케이프 스플라인 메시에 "Translucency Sort Priority" (반투명 소팅 우선권)을 노출시켰습니다.

  • 랜드스케이프 스플라인 스프라이트는 이제 랜드스케이프 스플라인 편집 모드에 있지 않을 때 숨겨집니다.

  • 랜드스케이프 액터의 LOD 세팅에 가해진 변경사항은 이제 에디터에서 서브레벨을 로드할 때 서브레벨 랜드스케이프 프록시에 전파됩니다.

  • 텍스처 퀄리티 세팅을 변경해도 더이상 랜드스케이프 지오메트리에 영향을 끼치지 않습니다!

  • 리토폴로자이즈 툴로 칠한 컴포넌트에 대해서, '콜리전 밉 레벨' 프로퍼티 변경 후 랜드스케이프 콜리전 작동이 멈추던 버그를 잡았습니다.

  • '콜리전 밉 레벨' 프로퍼티 변경 또는 RecreateLandscapeCollision (랜드스케이프 콜리전 재생성) 콘솔 명령 실행 이후 랜드스케이프의 피지컬 머티리얼이 깨지던 버그를 잡았습니다.

  • 에디터 뷰포트의 랜드스케이프 오버라이드 LOD 메뉴 항목을 사용하여 랜드스케이프의 최대 LOD 보다 큰 LOD 를 선택할 때의 크래시 또는 랜드스케이프 렌더링이 깨지던 것을 고쳤습니다.

  • 랜드스케이프에 PN 테셀레이티드 머티리얼을 할당한 뒤 되돌리기를 했을 때의 크래시를 고쳤습니다.

  • 랜드스케이프가 들어있는 서브레벨이 로드는 되었으나 레벨 창에 현재 숨겨진 경우 에디터에서 플레이 시작시의 크래시를 고쳤습니다.

  • 컴포넌트 크기가 작거나, Forced LOD 또는 LOD Bias 가 설정된 컴포넌트가 포함된 랜드스케이프에 대한 텍스처 스트리밍시의 랜드스케이프 렌더링 크래시를 고쳤습니다.

  • Landscape Visibility Mask 노드가 머티리얼의 '오파시티 마스크' 출력 이외의 것에 연결된 경우 발생하던 머티리얼 컴파일러 오류를 고쳤습니다.

  • 랜드스케이프 편집 관련 메모리 누수를 잡았습니다.

  • 사용자가 보고한 랜드스케이프 브러시 코드의 잠재적 크래시를 고쳤습니다.

  • '리토폴로자이즈' 툴 사용 이후 랜드스케이프 콜리전이 없어지는 문제를 고쳤습니다.

  • 랜드스케이프 '컴포넌트 삭제' 툴이 붙은 폴리지 인스턴스 전부를 제거하는데 실패하는 문제를 고쳤습니다.

  • 랜드스케이프 '현재 레벨로 컴포넌트 이동' 툴이 붙은 폴리지 인스턴스를 현재 레벨로 이동하는데 실패하던 문제를 고쳤습니다.

  • 사용자가 새 레이어 생성을 시도할 때 '새 랜드스케이프' 툴이 크래시가 나던 문제를 고쳤습니다.

  • 단일 랜드스케이프 레이어에 데이터를 임포트할 때 덮어쓰기 보다는 다른 레이어의 기존 데이터로 평균내도록 고쳤습니다.

  • 한 랜드스케이프에서 다른 랜드스케이프로 복사 시도할 때 랜드스케이프 기즈모 복사/붙여넣기가 이동 및 스케일 조절되던 것을 고쳤습니다.

  • 텍스처 풀이 가득찼을 때의 랜드스케이프 지오메트리 오류를 고쳤습니다.

    • 랜드스케이프 하이트맵에 대한 스트리밍은 이제 다른 텍스처보다 우선권이 높습니다 - 랜드스케이프의 지오메트리를 정의하므로, 필수 밉에 스트림 인 불가능한 경우 시각적으로 심각한 문제를 유발할 수 있습니다.

  • 랜드스케이프 복사/붙여넣기 툴 사용 이후 랜드스케이프 피지컬 머티리얼이 틀려지던 것을 고쳤습니다.

  • 랜드스케이프 스태틱 라이팅 오류를 고쳤습니다.

    • 랜드스케이프 구멍이 빛을 투과시키지 못했었습니다.

    • 랜드스케이프가 스태틱 라이팅에 잘못된 컬러를 반영할 수 있었습니다.

  • 널 랜드스케이프 레이어가 제대로 지워지지 않는 문제를 고쳤습니다. 이때문에 나중에 페인트/비저빌리티 툴을 사용하려 하면 크래시가 났었습니다.

  • 수치 오버플로우 문제로 인해 컴포넌트 크기가 매우 큰 랜드스케이프 렌더링 관련 문제를 고쳤습니다.

  • Android, iOS, HTML5, 에디터 내 모바일 프리뷰어에 디플로이할 때의 랜드스케이프 렌더링 문제를 고쳤습니다. 모바일 렌더링 데이터가 쿠킹 도중 PC 데이터를 덮어써서 발생했던 문제입니다.

  • 랜드스케이프 웨이트맵 페인팅 툴의 세기를 수정했습니다.

  • 전체 서브레벨 LOD 사용시 실제 랜드스케이프 컴포넌트와 랜드스케이프 프록시 메시 사이의 시각적 균열과 금을 고쳤습니다.

  • 랜드스케이프 조각 & 칠하기 툴이 이제 미러링된 랜드스케이프(, 즉 한 축의 스케일이 음수인 랜드스케이프)에 정상 작동합니다.

  • 랜드스케이프는 이제 레이어의 피지컬 머티리얼이 변경되면 피직스 콜리전 데이터를 제대로 업데이트합니다.

  • 월드 컴포지션 모드에 생성된 랜드스케이프는 더이상 툴에 의한 섹션 좌표가 조정되지 않습니다. 랜드스케이프 UV 좌표 관련 문제를 유발했었습니다.

  • 랜드스케이프 편집 브러시의 깜빡이 효과를 중지시켰습니다.

  • 에디터는 이제 파생 데이터 캐시(DDC)에서 비동기적으로 랜드스케이프 콜리전 데이터를 요청합니다. 에디터에서 플레이 모드에서 랜드스케이프 레벨 스트리밍시의 버벅임 문제가 해결됩니다.

  • 랜드스케이프 모드 활성화 도중 레벨 창에서 서브레벨의 비저빌리티를 토글할 때 더이상 랜드스케이프 툴이 크래시가 나지 않습니다.

머티리얼 에디터

  • 새 머티리얼 함수 'TransformToZVector' 는 월드 스페이스의 벡터를 Z 벡터로 정의된 스페이스로 변형시키는 데 좋습니다. X 와 Y 기반 벡터는 입력 Z 벡터의 직교 벡터로 생성됩니다.

  • MatLayerBlend_BlendAngleCorrectedNormals 라는 머티리얼 함수를 새로 추가, "Material Attributes" (머티리얼 특성)을 따로 떼어낼 필요 없이 BlendAngleCorrectedNormals 를 사용해서 머티리얼 레이어에 부가 노멀 맵을 추가하는 데 쓰입니다. 마스크 옵션도 있습니다.

  • 머티리얼 함수를 셋 추가했습니다: MatLayerBlend_SeparateNormalandColorClamps: 두 레이어를 블렌딩하지만 컬러 맵과 노멀에 다른 값을 사용해서 알파 블렌딩을 제한시킵니다. MatLayerBlend_StandardWithDisplacement: _Standard 처럼 작동하나, 디스플레이스먼트 레이어도 블렌딩합니다. 랜드스케이프 머티리얼에 매우 유용합니다. MatLayerBlend_StandardWithMaskEdgeTint: 탑 블렌딩된 레이어의 에지를 분수별로 어둡게 만듭니다.

  • 머티리얼 함수 내 정의된 파라미터의 기본 파라미터 값이 제대로 구해집니다.

  • 이름이 'MaterialExpression' 으로 시작하지 않는 머티리얼 표현식이 메뉴에 나열되던 방식을 수정했습니다.

  • 특정 머티리얼 노드 프로퍼티를 디테일 패널에 여러줄로 표시되도록 하여, 가독성과 명확성을 높였습니다.

  • 새로운 머티리얼 함수 'TransformNormals_Tangent_to_Vertex' 로 모든 탄젠트 벡터를 무시하면서 벡터 노멀을 사용하여 월드 정렬된 텍스처에 대한 노멀 맵 트랜스폼을 쉽게 할 수 있습니다.

  • 새 머티리얼 함수 'WorldPosition-XY' 로 XY 좌표의 빠른 매핑이 가능합니다. 랜드스케이프 또는 땅 머티리얼의 빠른 구성에 좋습니다.

  • 새로운 머티리얼 레이어 블렌드 함수 'MatLayerBlend_MultiplyBaseColor' 가 추가, 머티리얼 레이어의 베이스 컬러 변조에 좋습니다. V3 컬러 입력뿐 아니라 스칼라 마스크 입력도 있습니다.

  • 머티리얼 에디터가 표준 뷰포트내 툴바를 사용하도록 전환되었습니다.

  • '미리보기 모양' 툴바를 우하단으로 옮기고 '실시간' 및 '그리드 표시' 옵션을 제거, 이제 표준 메뉴 위치로 돌아갔습니다.

  • 머티리얼 에디터에서 머티리얼에 사용되는 노멀 맵 텍스처 리임포트시 그 머티리얼 애셋 썸네일과 프리뷰 머티리얼이 깨지던 문제를 고쳤습니다.

  • 이전 머티리얼 함수 로드시 크래시가 날 수 있었던 것을 고쳤습니다.

  • 머티리얼 플래트닝 관련 일부 머티리얼에서 잘못된 노멀 맵이 생기던 문제를 고쳤습니다.

  • 함수에 정의된 파라미터에 대한 그룹 관련 문제를 고쳤습니다.

  • SphereGradient-3D 머티리얼 함수를 개선시켰습니다. 실감나는 3D 포그를 위해 카메라 교차 계산시 실제 월드 깊이값을 사용합니다.

  • 머티리얼 에디터 뷰포트의 "Set Preview Mesh" (프리뷰 메시 설정) 선택시 강조되도록 했습니다.

  • 파라미터를 머티리얼 인스턴스 에디터 상단으로 옮겼습니다.

  • 머티리얼 컴파일시, 엔진은 이제 더이상 머티리얼을 사용하는 컴포넌트를 완전히 재등록하기 보다는, 그냥 컴포넌트의 렌더 스테이트를 재생성합니다. 이로써 머티리얼 에디터에서 적용 버튼을 누를 때 걸리는 시간이 단축됩니다.

마티네

  • 마티네로 구동되는 스켈레탈 메시에 커스텀 애님 블루프린트를 사용할 수 있도록 했습니다.

    • 아직 블렌딩은 지원하지 않지만, 마티네로 애니메이팅되는 메시에 'Look At' 이나 기타 절차적 본 컨트롤러를 사용할 수 있습니다.

  • 마티네 카메라 페이드 트랙에 Fade Color 와 Fade Audio 옵션을 추가했습니다.

  • 마티네 익스포트시 'Keep Hierarchy' (계층구조 유지) 옵션을 추가했습니다.

  • 마티네 익스포트에 어태치먼트 계층구조 포함 익스포트 옵션이 생겼습니다.

    • 이 옵션은 마티네에서 찾을 수 있는 계층구조 유지 입니다. 활성화된 트랙만 익스포트하며, 애님 트랙이 포함됩니다.

  • 카메라 애님 편집시, 카메라 애님 오브젝트의 프로퍼티를 기본으로 디테일 패널에 표시합니다.

  • 마티네 격투 씬 시작 전 역이 잠깐 보이던 버그를 잡았습니다.

  • 새 트랙 임포트시 기존 중복 마티네 그룹 위에 덮어쓰여지지 않던 것을 고쳤습니다.

  • 마티네 컬러 페이드를 수정했습니다.

  • bActivateSystemEachUpdate 활성화시 마티네 토글 트랙이 작동하지 않던 것을 고쳤습니다 (하위호환 기능입니다).

  • 마티네에서 PNG 프레임 익스포트시 가짜 알파 값이 출력되던 것을 고쳤습니다.

  • 사운드가 할당되지 않은 사운드 키가 있는 마티네에서 스크러빙할 때의 잠재적 크래시를 고쳤습니다.

  • 스크러빙 도중 재생되는 애니메이션의 커브로 구동되는 머티리얼 파라미터 변경사항 미리보기를 고쳤습니다.

  • 마티네 무비 녹화 기능이 이제 마티네 녹화 창에서 Hide HUD 옵션이 꺼진 UMG/Slate HUD 를 캡처합니다.

  • 카메라 그룹 이름변경을 되돌리기 하면 디렉터 그룹에 표시된 것과 같은 이름으로 정상 되돌려집니다.

캐스케이드

  • LOD 가 꺼진 이미터도 계속 살려둬서 LOD 범위에 재진입하면 이펙트가 다시 보일 수 있도록 했습니다.

    • 다른 여러 이펙트와의 문제가 유발되어 이미터 프로퍼티의 Disabled LODs Keep Emitter Alive 라는 부울 뒤로 이동되었습니다. 기본적으로 꺼집니다.

  • 파티클 시스템 리로드후 콜리전 채널 세팅이 제대로 사용되지 않던 버그를 잡았습니다. 모든 콜리전이 WorldStatic 으로 되돌아가도록 만들었습니다.

  • 스켈/버텍/표면 모듈 파티클이 이미터 원점 위치에 스폰되던 버그를 잡았습니다.

  • 캐스케이드 탭을 한꺼번에 너무 많이 열면 에디터 퍼포먼스가 심각하게 저하될 수 있었던 문제를 고쳤습니다.

  • 스켈/버텍/표면 모듈의 Spawn Using Surface Normal (표면 노멀을 사용해서 스폰) 기능을 수정했습니다.

페르소나

  • 노티파이 패널에 줌을 통해 스크롤 가능한 스크롤 바를 추가했습니다.

  • 애님 노티파이에 트리거 프레임 또는 트리거 시간을 직접 설정할 수 있는 컨텍스트 메뉴 옵션을 추가했습니다.

  • 애니메이션 뷰포트에 모프 타깃 시각화를 끄는 옵션을 추가했습니다.

  • 애님 노티파이 스테이트에 대한 핸들 크기조절을 위한 크기조절 커서를 추가했습니다.

  • 애니메이션 디테일 탭에 검색칸을 추가했습니다.

  • 몽타주 동기화에 몽타주가 지원됩니다.

  • 페르소나의 뷰포트에 턴 테이블 기능이 추가되었습니다.

  • 다중 애셋 열기 지원 전까지 페르소나에서 애니메이션 블루프린트 생성을 비활성화시켰습니다.

  • 프로퍼티 변경시 애님 노티파이 이름 생성이 업데이트되지 않는 것을 고쳤습니다.

  • 페르소나에 선택된 파일명이 ANSI 가 아닌 APEX 클로딩 애셋 파일을 임포트할 때 실패하던 것을 고쳤습니다.

  • 본 목록을 열 때 릭 애셋에 대한 커스터마이제이션의 크래시를 고쳤습니다.

  • 이름이 일치하는 첫 노티파이 삭제시의 애님 노티파이 삭제 작업을 수정했습니다.

  • 일부 플랫폼에서 애니메이션 노티파이 컨텍스트 메뉴의 삭제 옵션이 정상 작동하지 않던 것을 고쳤습니다.

  • 페르소나에서 그림자를 드리우는 머티리얼과 함께 사용시 라이트 이동가능 여부로 인해 깜빡이던 것을 고쳤습니다.

  • Mac에서의 잘못된 노티파이 리스트 파싱을 고쳤습니다.

  • 페르소나에서 컴포넌트 재등록 후 모프 타깃이 표시되지 않던 것을 고쳤습니다.

  • 페르소나에서 클로딩 APB 파일 리임포트시의 세팅 플래그 보존시 세팅 덮어쓰기가 되지 않던 것을 고쳤습니다.

  • 애님 노티파이에 대한 디테일 패널에 프라이빗 프로퍼티가 표시되던 것을 고쳤습니다.

  • 페르소나 스크러빙 패널의 정/역방향 스테핑이 프레임 스냅이 적용되도록 고쳤습니다.

  • 노티파이 추가 메뉴가 유효 클래스를 찾는 데 긴 상속 체인을 탐색하지 않던 것을 고쳤습니다.

  • 애님 노티파이 스테이트 기간 변경 후 되돌리기를 해도 작동하지 않던 것을 고쳤습니다.

PhAT

  • PhAT 에 스케일 적용 본이 지원됩니다.

  • PhAT 에서 오리엔테이션 모터가 정상 작동하지 않던 것을 고쳤습니다.

  • 본에 대한 콜리전을 만들 때, 스케일 전파를 위한 컴포넌트 스페이스 매트릭스가 제대로 적용됩니다.

프로젝트 브라우저

  • 프로젝트 브라우저 창을 약간 크게 하여 템플릿 이미지 아래 설명 문구가 잘 보이도록 했습니다.

  • 새로운 프로젝트에 기본적으로 임의의 프로젝트 ID 가 설정됩니다.

월드 아웃라이너

  • 월드 아웃라이너에서 폴더를 삭제하면 그 자손을 바로 루트로 설정하는 대신 그 상위 폴더로 설정합니다.

  • PIE 씬 아웃라이너에서 AI 컨트롤러( 및 다른 휘발성 액터)가 숨겨지지 않도록 했습니다.

  • 월드 아웃라이너 뷰에서 레벨 블루프린트를 제거했습니다.

    • 레벨 블루프린트를 여는 또 한가지 방법이었을 뿐, 이 항목에 대한 디테일을 표시할 수 없기에, 아웃라이너 뷰에는 딱히 속하지 않는 것으로 결정내렸습니다.

    • 레벨 블루프린트는 전과 마찬가지로 여전히 툴바의 블루프린트 드롭다운에서 열 수 있습니다.

스태틱 메시 에디터

  • 소켓 버텍스에 스냅, 소켓 메타데이터를 추가했습니다.

  • 소켓 매니저의 모양과 느낌 개선판을 기본적으로 활성화시켰습니다.

  • 스태틱 메시 에디터가 뷰포트내 표준 툴바를 그대로 사용하도록 전환했습니다.

  • 트랜스폼 툴바는 이제 기즈모를 통한 변경이 가능한 것이 선택되었을 때만 표시됩니다 (콜리전, 소켓, 등).

  • 스태틱 메시 에디터에 LOD 그룹 변경시 LOD 가 삭제되던 문제를 수정, 더이상 LOD 리임포트시 커스텀 머티리얼 / 메타데이터를 잃지 않습니다.

  • 스태틱 메시 에디터에서 소켓 프리뷰 메시가 그 부모 소켓 트랜스폼을 조정하면 같이 조정되도록 수정했습니다.

  • 스태틱 메시 에디터에서의 콜리전 볼륨 스케일 조절 퍼포먼스를 향상시켰습니다.

소스 컨트롤

  • 에디터에서 파일 삭제 요청을 할 수 있는 기능을 추가했습니다.

  • "소스 컨트롤에 접속" 버튼을 누르면 이제 "애셋 체크아웃" 대화창에 애셋 목록이 업데이트됩니다.

  • 체인지리스트를 받는 Annotate File (파일 주석) 구현을 추가했습니다.

  • SVN 에서의 애셋 체크인 검사가 빨라졌습니다.

  • SVN 서버에서 사용자명이나 암호에 공백이 포함되어 있을 때의 오류를 고쳤습니다.

  • 애셋 저장 도중 "체크아웃" 대화창을 취소했을 때 전체 작업이 취소되지 않던 문제를 고쳤습니다.

  • SVN 상태 업데이트가 오래 걸리던 것을 고쳤습니다.

  • 환경설정 파일의 URL 프로퍼티가 잘리던(truncate) 것을 고쳤습니다.

  • 소스 컨트롤 없이 애셋을 이름변경하면 이제 사용자가 소스 컨트롤에 접속하도록 할지, 작업 수행 전 파일을 쓰기가능으로 만들지 묻습니다.

  • 체크아웃 불가능한 파일을 쓰기가능으로 만들었을 경우 소스 컨트롤 대화창이 더이상 뜨지 않습니다.

  • 리비전 표시를 인덱스가 아닌 스트링을 표시하도록 업데이트했습니다.

  • Git 제공사에 리비전을 해시로 표시할 수 있도록 했습니다.

월드 브라우저

  • 서브 레벨에 생긴 프로퍼티로 월드 컴포지션 타일 뷰에서 서브레벨을 숨길 수 있습니다. 서브레벨 디테일 패널에서 "Hide in Tile View" (타일 뷰에서 숨김)입니다.

  • 월드 컴포지션 뷰에서의 스트리밍 프리뷰는 이제 LOD 서브 레벨을 다른 색으로 강조하여 보통 레벨과 구분합니다.

  • 전체 서브레벨 LOD 생성 툴은 이제 서브레벨이 랜드스케이프를 가지면 항상 접근 가능한데, 랜드스케이프에 대한 전체 서브레벨 LOD 생성은 심플리곤이 필요치 않기 때문입니다.

  • '타일식 랜드스케이프 임포트'는 이제 퍼시스턴트 레벨에 빈 랜드스케이프 액터, 임포트된 각 타일의 서브레벨마다 랜드스케이프 프록시 액터를 생성합니다. 이를 통해 랜드스케이프 타일을 로드하지 않고도 공통 랜드스케이프 프로퍼티 편집이 가능합니다.

  • 월드 컴포지션에 마티네 시작 전 시네마틱에 필요한 모든 의존 서브레벨을 전부 스트리밍하는 옵션이 생겼습니다. 프로젝트 환경설정을 통해 활성화 가능합니다: [/Script/Engine.WorldComposition] bLoadAllTilesDuringCinematic=True

  • 월드 컴포지션 맵이 이제 (세팅->미리보기 에서 활성화 가능한) '자동 레벨 스트리밍 활성화' 옵션을 켠 상태에서도 작동합니다. 주: 서브레벨을 실제로 로드/언로드하지는 않고 그 표시여부 시뮬레이션만 합니다.

  • 서브레벨 바운딩 박스 계산에 사용되는 레벨 바운드 액터가 이제 폴리지 액터를 무시합니다.

  • "레벨" 창이 닫혀있을 때도 "월드 컴포지션" 옵션을 켤 수 있게 되었습니다.

  • 월드 컴포지션의 레이어 버튼에 이제 툴팁이 생겼습니다.

  • 레벨 바운드 액터는 이제 "실시간 뷰포트" 옵션이 꺼졌어도 서브레벨 바운딩 박스 재계산을 제대로 합니다.

  • 플레이어가 싱글 맵에서 월드 컴포지션 맵으로의 이동에 착수할 때 더이상 에디터에서 플레이(PIE)가 크래시나지 않습니다.

폴리지

  • 폴리지 타입 목록의 우클릭 메뉴에 해당 폴리지 타입의 모든 폴리지 인스턴스를 선택/해제할 수 있는 항목을 추가했습니다.

  • 폴리지 '선택' 툴에 이제 유효하지 않은 인스턴스 전부를 찾아 선택하는 명령이 생겼습니다. 유효하지 않은 인스턴스란, 어떤 베이스 오브젝트에도 붙지 않았거나, 베이스까지 거리가 예상보다 긴 인스턴스를 말합니다.

  • 폴리지가 이제 베이스 컴포넌트로의 레벨 교차 레퍼런스를 지원, 폴리지는 이제 칠한 오브젝트와 다른 스트리밍 레벨에 있을 수 있습니다.

    • 레벨 브라우저에 새로 생긴 명령을 통해 선택된 폴리지 인스턴스를 다른 레벨로 옮길 수 있습니다. 폴리지는 계속해서 칠해진 오브젝트로의 링크를 유지합니다.

  • "폴리지 세팅" 애셋의 이름이 "폴리지 타입"으로 변경되었습니다.

    • 콘텐츠 브라우저에서 (기타 아래) 폴리지 타입 애셋을 바로 만들 수 있으며, 필터링도 가능합니다.

  • 폴리지 툴이 이제 여러 레벨에 걸친 심리스 폴리지 페인팅을 지원합니다.

    • 이 기능의 정상 작동을 위해서는 공유 폴리지 타입 애셋을 사용해야 합니다.

    • 폴리지 툴의 기존 아이템에 우클릭하고 공유 폴리지 타입 애셋으로 저장하거나, 콘텐츠 브라우저에서 폴리지 타입 애셋을 끌어오면 됩니다.

  • 레벨 창에 선택된 폴리지 인스턴스를 다른 서브레벨로 옮기는 명령이 생겼습니다.

  • 폴리지 모드에서 다음과 같은 방식으로 브러시 크기 조절이 가능합니다:

    • Ctrl + 휠버튼 스크롤

    • Ctrl + 휠버튼 + 드래그

    • 왼쪽 대괄호 ([) 로 축소, 오른쪽 대괄호 (]) 로 확대

  • 콜리전 또는 라이팅 등의 폴리지 세팅 변경시, 재생성하지 않고 기존 컴포넌트에 바로 적용시켜 훨씬 빨라졌습니다. 스태틱 라이팅은 이제 라이팅 프로퍼티 변경시에만 무효화됩니다.

  • 액터 복사/붙여넣기 또는 복제할 때 붙은 폴리지 인스턴스도 전부 제대로 복제합니다.

  • 폴리지 모드 진입시 이제 액터 선택 소거 전 에디터 다른 부분에 제대로 알립니다.

  • 랜드스케이프 크기조절시, 유효하지 않은 폴리지 인스턴스로 인해 유발되던 크래시를 고쳤습니다.

  • 스태팅 라이팅이 빌드된 인스턴스 폴리지가 들어있는 레벨을 열 때의 크래시를 고쳤습니다.

  • 폴리지 모드 재적용 툴 사용시 밀도와 다른 프로퍼티를 동시에 조절하려 할 때의 크래시를 고쳤습니다.

  • 인스턴스드 폴리지 액터 삭제를 되돌릴 때 폴리지 컴포넌트가 제대로 복원되지 않던 문제를 고쳤습니다.

  • 폴리지가 붙은 랜드스케이프 조각시 되돌리기 작업 후 폴리지가 공중에 떠있던 문제를 고쳤습니다.

  • 에디터에서 폴리지가 많은 맵의 로드 속도가 빨라진 것을 알 수 있을 것입니다.

  • 에디터에서 인스턴스드 폴리지 액터 복사/붙여넣기 또는 복제시 예상외의 결과가 나던 것을 고쳤습니다.

  • 레벨 편집 도중 공유 폴리지 타입 변경시 더이상 같은 공유 폴리지 타입을 사용하는 다른 레벨의 폴리지 렌더링 컴포넌트가 재생성되지 않습니다.

  • 폴리지 팔레트에서 (스태틱 메시를 끌어 팔레트에 놓아 만든) 애셋이 아닌 폴리지 타입의 프로퍼티에 되돌리기/다시하기가 지원됩니다.

  • 되돌리기/다시하기 이후, 폴리지 팔레트의 선택이 유지됩니다.

  • 폴리지 툴은 이제 공유 폴리지 타입을 사용하는 레벨이 로드되지 않은 상태에서도 공유 폴리지 타입의 프로퍼티(콜리전 또는 라이팅 등) 변경을 감지합니다. 다음 번 에디터에서 레벨이 로드될 때 변경사항이 전파됩니다.

쿠커

  • 패키징시 쿠킹할 맵 서브 세트를 지정할 수 있는 기능을 추가했습니다. 파일/패키지가 전체 콘텐츠를 쿠킹하지 않도록 만드는 데 사용됩니다. 프로젝트 세팅의 패키징 부분을 참고하세요.

  • 다운로드가능 콘텐츠 쿠킹시 엔진 콘텐츠에 접근할 때의 오류를 추가했습니다.

  • Cook on the fly 는 이제 여러가지 플랫폼에서 동시에 다수의 클라이언트 접속을 지원합니다.

  • 쿠커 시작 시간 및 에디터에서 쿠킹 캐싱 시간이 빨라졌습니다.

  • 에디터 모드에서 쿠킹을 위한 캐싱 루틴을 개선시켰습니다.

  • 쿠커의 시작 퍼포먼스가 향상되었습니다.

  • 종속성 생성을 위한 퍼포먼스가 향상되었습니다.

  • 에디터의 패키지 세팅에 압축 세팅을 노출시켰습니다.

  • 버전없는 쿠킹 콘텐츠로 실행시키고자 할 때 선택할 수 있도록 버전없는 쿠킨 변수를 노출시켰습니다.

  • 쿠킹 결정방식이 향상되었습니다.

  • 반복처리형(iterative) 쿠킹은 커스텀 버전이 업그레이드되거나 UE4 버전 / 라이선시가 올라가면 쿠킹된 콘텐츠를 비웁니다.

  • 언리얼 프론트엔드는 이제 콘텐츠 릴리즈 버전, 패치, dlc 생성을 지원합니다.

  • 에디터에서 쿠킹은 이제 반복처리형 쿠킹 사용시 중요 cvar 변경사항을 감지합니다.

  • 쿠킹시 가끔 셰이더가 부적절하게 출력되는 버그를 잡았습니다. 게임에서 기본 머티리얼로 보였었습니다.

  • 쿠킹된 프로젝트가 셰이더 컴파일이 제대로 되었는데도 디폴트 머티리얼로 보이던 문제를 고쳤습니다.

  • cook on the side 가 패키지를 쿠킹하는 데 예상보다 오래 걸릴 수 있었던 문제를 고쳤습니다 (에디터 쿠킹에만 영향을 끼칩니다).

  • 반복처리형 쿠킹 애셋 레지스트리가 철지나버리던 것을 고쳤습니다.

  • 반복처리형 쿠킹이 기존 쿠킹에서 패키지를 찾지 못하던 것을 고쳤습니다.

  • 셰이더 타입 저장시 일부 셰이더가 불필요하게 컴파일되던 소팅 문제를 고쳤습니다.

  • 또한 쿠킹 순서도 반쯤 렌덤이라 같은 소스 콘텐츠에서 쿠킹한 콘텐츠가 달라지는 문제도 해결되었습니다.

  • 반복처리형 쿠킹 사용시 기존 쿠킹된 파일 감지가 향상되었습니다.

  • 오브젝트 수가 많은 프로젝트의 쿠킹을 빠르게 하기 위해 약간의 조정이 가해졌습니다.

게임플레이 프레임워크

  • 블루프린트에서의 게임 모드 커스터마이제이션

    • 이제 블루프린트에서 바로 게임 모드 관련 모든 작업이 가능하며, C++ 의 여러 API 가 정리되었습니다.

    • 이미 완료된 엔진 기능 미리보기 참고 게시물을 참고해 주세요: Engine Feature Preview

  • 카메라 셰이크에 대한 블루프린트 API 를 추가했습니다. 카메라 셰이크 코드의 확장성, 명확성, 단순성을 위해 리팩터링했습니다. 셰이크 인스턴스 구조체를 제거, 인스턴스 데이터는 이제 카메라 셰이크 오브젝트의 일부분이 되었습니다.

  • 카메라 모디파이어에 블루프린트 API 를 추가했습니다. 카메라 모디파이어의 확장성, 명확성, 단순성을 위해 리팩터링했습니다.

  • 카메라 애님에 Relative To Initial Transform (초기에 상대적 트랜스폼) 옵션을 추가했습니다. 필요한 경우 (예로 시작->루프->끝 구성의 반복 부분), 초기 오프셋이 있는 카메라 애니메이션 저작을 위한 옵션이 제공됩니다.

  • 캐릭터 무브먼트 코드 관련 세부 통계 확인용 'Character' 통계 카테고리가 추가되었습니다.

  • 직교 카메라에 대한 근거리 / 원거리 클립 면 컨트롤을 노출시켰습니다.

  • 카메라 페이드 지원이 개선되었습니다. C++ API 개선, 블루프린트 API 는 추가되었습니다.

  • 직교 카메라의 프러스텀 시각화가 지원됩니다.

  • 카메라 셰이크는 이제 스케일이 0 또는 음수인 Play Camera Shake 호출을 무시합니다. 0 에 도달하는 셰이크는 진동기를 계속 업데이트하다가 결국 제거됩니다.

  • 게임에서 모든 플레이어 제거 후 콘솔을 열 때의 크래시를 고쳤습니다.

  • 몇몇 블루프린트가 오브젝트 라이브러리 필터링에서 부적절히 제거되게 만드는 버그를 잡았습니다.

  • 스트리밍 레벨 로드시 스트리밍이 렌더링을 일시정지할 때의 크래시를 고쳤습니다.

  • 뷰 위치가 직교 카메라에 대해 계산된 투영 행렬에 잘못 영향을 끼치던 문제를 고쳤습니다.

  • 노트 액터의 애로우 컴포넌트를 수정했습니다.

  • Event Destroyed 에 의해 Set Game Paused 함수 호출시의 에디터 크래시를 고쳤습니다.

  • 게임플레이 태그 이벤트 델리게이트 안에서 활성 게임플레이 이펙트 제거시의 문제를 고쳤습니다.

  • 카메라 포스트 프로세스 세팅이 의도된 수명보다 길게 유지될 수 있었던 문제를 고쳤습니다. CameraCache 는 각 프레임 부분적으로만 소거되고 있어서, 몇몇 경우에 오래된 PP 세팅은 멈출 수 있었습니다.

  • 루핑 타이머 사용시 TimerManager 의 타이머 누수 가능성을 고쳤습니다. 시간에 따른 퍼포먼스 저하가 유발될 수 있었습니다.

  • 게임 유저 세팅이 이제 제대로 저장됩니다.

  • 게임플레이 태그 커스텀 디테일 패널이 사용자 정의 구조체 에디터에서 작동합니다.

  • ChildActorComponent 가 있는 액터를 스케일 조절하면 자손 액터의 스케일도 같이 조절됩니다.

  • "AlwaysLoaded" (항상 로드됨) 마킹된 서브레벨은 이제 게임플레이 코드가 플레이어의 스폰 지점을 찾으려 할 때 전체 로드됩니다.

학습 자료

  • 피처 팩 사용법 관련 간단한 튜토리얼이 추가되었습니다.

  • 피처 팩 매니페스트에 소트 키 제공을 위한 프로비전을 추가했습니다. 보다 세밀한 메뉴 순서 제어가 가능합니다.

  • 일인칭 블루프린트 템플릿의 DefaultEngine.ini 에 불필요한 항목을 몇 가지 제거했습니다.

  • 템플릿: 일인칭 블루프린트 템플릿의 애니메이션 스테이트 관련 문제를 고쳤습니다.

에디터내 도움말

  • 도킹된 튜토리얼 브라우저가 튜토리얼을 전혀 표시하지 않던 것을 고쳤습니다.

  • 튜토리얼의 멈춤 현상을 고쳤습니다.

콘텐츠 예제

  • 콘텐츠 예제의 오디오 섹션 1.8 내 텍스트에 빠진 공백을 추가했습니다.

  • 콘텐츠 예제에서 조절된 노멀이 원치않는 깜빡임 효과를 내던 텍스처 문제를 고쳤습니다.

  • 일인칭 템플릿에서 LOD 바이어스 관련 퍼포먼스 문제를 유발하던 것을 고쳤습니다.

  • 고급 비히클 템플릿에서 Z 파이팅 현상을 유발하던 겹침을 고쳤습니다.

  • 태양의 사원에서 퍼포먼스 문제를 유발하던 해상도 문제를 고쳤습니다.

  • 플레이어 블루프린트의 그림자를 고쳤습니다.

  • 태양의 사원을 원거리에서 봤을 때 벽에 시각적으로 보이던 갭을 고쳤습니다.

  • 이펙트 동굴의 땅 애셋 경계선에 시각적으로 보이던 갭을 수리했습니다.

  • 시작용 콘텐츠 내 CobbleStone 머티리얼의 노멀을 업데이트 / 수리했습니다.

샘플 콘텐츠

  • 2D 및 3D 횡스크롤 템플릿에 레이어 스내핑이 기본적으로 켜지며, 샘플 콘텐츠에 맞는 적당한 깊이의 레이어가 셋 미리 정의되어 있습니다.

  • 전략 게임의 방향 화살표에 일어나는 Z 파이팅 현상을 수정했습니다.

현지화

  • 모든 현지화 환경설정 스크립트가 경로 세팅을 프로젝트 루트 디렉터리에 상대적인 것으로 일관되게 취급합니다.

  • 현지화 manifest 및 archive 생성을 위한 커맨드렛의 로그 출력이 개선, 파일 작성 실패 진단에 유용합니다.

  • Windows 플랫폼의 일본어 키보드의 경우, 에디터 시작시 Windows 입력 언어가 일본어로 설정된 경우 기본 게임내 콘솔 키로 @ 키를 사용합니다.

  • 불필요한 초기화 부하 최소화를 위해 국제화 리소스의 초기화를 개선시켰습니다.

  • 메타데이터 값에서 "{FieldPath}" 값을 사용하여 수집한 현지화가능 텍스트는 현지화 키 생성을 위한 것으로, 이제 더 단순하고 덜 상세한 현지화 키를 생성합니다.

  • 현지화 환경설정 스크립트 세팅의 이름이 보다 직관적으로 바뀌었으며, 현지화가능 텍스트 수집을 위해 무엇을 처리할지에 대해 보다 뛰어난 제어가 가능합니다.

  • 이제 대상 파일을 소스 컨트롤에서 체크아웃할 수 없는 경우 현지화 충돌 리포트와 단어 수가 치명적 오류가 아닌 경고를 보고합니다.

  • 현지화 데이터에 대한 단어 수 및 충돌 보고서 생성용 커맨드렛이 버전 시스템 환경설정이 된 경우 소스 컨트롤/버전 시스템 사용을 시도합니다.

  • GatherTextFromSource 커맨드렛은 이제 검색 대상 경로 제거에 있어 ExcludePathFilters 커맨드렛 등과 같은 세팅을 사용합니다.

  • 이제 현지화 매니페스트와 archive에서 익스포트하여 생성한 PO 파일에는 각 텍스트에 대한 키가 PO 메시지에 대한 참고용 코멘트로 포함됩니다. 텍스트 현지화시 현지화 팀에 보다 풍성한 컨텍스트 정보를 제공해 줍니다.

  • 보다 적합한 기본 타임 존을 사용하여 몇 가지 비정상적인 날짜 & 시간 텍스트 포맷 방식을 보정했습니다.

  • 텍스트 자동화 테스트에서 날짜와 시간 포맷이 텍스트로 잘못 보고되는 오류를 교정했습니다.

  • 현지화 커맨드렛 종료시 추가/체크아웃된 파일의 자동 리버트 기능을 꺼서, 사용자가 변경사항을 소스 컨트롤에 수동 제출할 수 있도록 했습니다.

  • 비교 대상으로 요청된 컬처가 아직 현재 컬처가 되지 않은 요청된 컬처 대신 현재 컬처의 부모 컬처로 우선순위가 잡히던 문제를 고쳤습니다.

  • UMG 애니메이션에서 그 이름/바인딩이 현지화가능 텍스트로 수집되지 않도록 시퀀서 코드를 수정했습니다.

  • 유일하게 지정된 컬처가 네이티브 컬처인 경우, 더이상 단어 수 및 현지화 충돌 보고서가 실패하지 않습니다.

  • 현지화 커맨드렛이 이제 조건상 추가 마킹이 허용되지 않는 파일에 대한 소스 컨트롤 작업을 정상 처리합니다.

  • 현지화된 텍스트 프로퍼티 편집시 그 키 & 네임스페이스가 보존됩니다.

  • 이제 현지화 텍스트 수집 도중 다른 패키지를 로드한 결과 로드된 패키지 역시 현지화 가능 텍스트 수집에 정상 처리 가능합니다.

  • 애셋에서 현지화가능 텍스트를 수집할 때 처리 시간을 길어지게 만들던 중복 작업을 제거했습니다.

  • 번역 에디터에 대한 창 메뉴 레벨의 메뉴를 제거했습니다.

  • 애셋 안의 텍스트 내 정체성 충돌 및 키 소실 관련 문제 해결 후 제대로 수집되지 않던 문제를 해결했습니다.

  • 현지화가능 텍스트에 대한 텍스트 파일 파싱을 위한 커맨드렛이 이제 커맨드렛 실행 플랫폼과 무관하게 텍스트 파일 내 새 줄을 제대로 처리합니다.

  • 현지화 임포트/익스포트 커맨드렛이 이제 둘 다 지정된 경우 익스포트 전에 임포트를 실행합니다. 더이상 임포트할 데이터가 익스포트에 훼손되어 임포트 불가능하게 되지 않습니다.

  • 번역 에디터: 저장시 소스 컨트롤이 꺼져있는 경우, 어쨌든 파일 쓰기를 시도합니다.

네트워킹

  • 명령줄에 리플레이를 끄는 기능이 추가되었습니다. -noreplays 입니다.

  • 기본 검사에 내부 네트워크 프로토콜 버전 번호를 추가, 클라이언트와 서버가 호환되는지 알아봅니다.

  • 리플레이 탐색 속도 향상을 위해 체크포인트를 추가했습니다.

  • 게임모드가 이제 데디케이티드 서버에 대한 리플레이 녹화 자동 시작/중지가 가능합니다. 이 기능을 사용하려면 ini 에 Handle Dedicated Server Replays 를 설정하세요.

  • 멀티캐스트 리모트 프로시저 콜(RPC)가 네트워크 리플레이에서 제대로 재생됩니다.

  • 네트워크 ID 를 가급적 적은 바이트로 패킹하여 리플리케이션 대역폭 사용량을 줄였습니다.

  • "DemoRec" 콘솔 명령이 이제 파라미터 없이 실행 가능합니다. 그러면 현재 맵 이름이 리플레이 이름으로 사용됩니다.

  • 네트워크 프로파일러 툴이 이제 대역폭 정보를 보다 정확하고 세밀하게 추적하며, 새로운 차트 뷰 모드가 생겼습니다.

    • 리모트 프로시저 콜과 액터 프로퍼티에 사용되는 대역폭이 헤더, 페이로드, 푸터 (머릿말, 본문, 꼬릿말)로 나뉩니다. 엔진 프로토콜 내부적으로 사용되는 대역폭 역시도 보다 세밀하게 나뉩니다.

    • Acknowledgement ("ack") 는 이제 개별적으로 보고됩니다.

    • Fast Array Serializer 를 사용하는 배열에서의 대역폭도 보고됩니다.

    • 차트에 "누적 번치 크기" 뷰가 새로 생겼습니다. 이 동글 버튼을 클릭하면 누적 영역 그래프가 표시되어, 각 프레임마다 대역폭 사용량이 어디서 오는지 확인하기가 쉬워집니다.

      image alt text

  • 네트워크 프로파일러 툴에서 비신뢰성 멀티캐스트 리모트 프로시저 콜(RPC) 트래킹을 추가했습니다. 네트워크 프로파일에 이제 이 정보가 추적됩니다.

  • 완전 접속되기 전까지는 netspeed 를 전송하지 않습니다. 접속 시도가 거부되었을 때의 스팸이 해결됩니다.

  • 에디터에서 플레이 세션 도중 액터 컴포넌트가 클라이언트로 잘못 리플리케이트되게 만들던 버그를 잡았습니다.

  • C++ 에서 구현된 멀티캐스트 함수가 블루프린트에서 호출되었을 때 몇몇 클라이언트에서 잘못된 파라미터 값을 받게 만들 수 있었던 문제를 고쳤습니다.

  • 클라이언트가 서버 참가 도중 접속해제 이벤트를 수신했을 때 가끔 클라이언트가 멈추는 문제를 고쳤습니다. 이 경우 클라이언트는 이제 기본 월드로 돌아갑니다.

  • 부분 패킷 시퀀스 관련해서 잘못 연장(roll over)시킬 수 있었던 문제를 고쳤습니다.

  • 네트워크 리플레이 재생시 마지막 패킷이 가끔 읽히지 않는 문제를 고쳤습니다.

  • 에디터에서의 네트워크 프로파일 캡처를 고쳤습니다. 이 파일은 이제 네트워크 프로파일러 툴에 차트가 제대로 표시됩니다.

  • 플레이어에게 플레이어 오브젝트가 붙지 않은 플레이어 컨트롤러가 있는 상태에서의 호스트 접속끊김으로 인한 네트워크 전환 도중 게임 렌더링이 중지되는 희귀한 경우를 고쳤습니다.

  • 리플레이 녹화 도중의 네트워크 프로파일 기록을 수정, 캡처된 프로파일은 이제 네트워크 프로파일러 툴에서 보다 정확한 정보를 표시합니다.

  • 안전성 향상 시도를 위한 다수의 액터 채널/닫기 온전성 검사가 추가되었습니다.

  • 보이스 채팅 오디오가 공간화되지 않은 것으로 마킹, 플레이어가 이야기하는 한 음소거가 아니라 가정하고 계속 들리도록 했습니다.

  • PIE 넷 접속 타임아웃은 이제 접속 처음 몇 틱에서도 제대로 비활성화됩니다. 로드 시간이 길 경우 넷 접속에 월드가 뜨기도 전에 타임아웃이 되어버리는 경우를 방지합니다.

  • 비콘에 타이머가 켜져있고, 그 타이머를 실존하지 않는 월드를 통해 끄고자 할 때에, 비콘에 관련된 서버 트래블 도중 크래시가 날 수 있었던 것을 막았습니다.

  • 액터 채널 종료시, 등록된 모든 서브오브젝트도 같이 소멸됩니다.

온라인

  • 액터에 "Relevant For Network Replays" (네트워크 리플레이는 연관성) 프로퍼티를 추가, false 설정을 하면 액터를 네트워크 리플레이에 저장하지 못하게 막습니다.

  • BuildPatchServices 는 이제 스테이지 전용 설치를 지원합니다. 설치에 새로운 인스톨 파일 배치에 대한 별도의 처리가 가능합니다.

  • BuildPatchTool 는 이제 manifest 출력에 저장되는 파일 특성 메타 데이터 목록을 지원합니다. 이 특성은 인스톨러에 적용됩니다. 아직 초기 개발단계입니다.

  • Steamworks 가 1.32 버전으로 업그레이드되었습니다.

  • BuildPatchTool 이 UObject 기반 manifest 파일을 폐기 처분합니다. 현재 사용은 가능하지만, 앞으로는 보장되지 않습니다.

  • 네트워크 리플레이는 이제 "Should Be Loaded" 옵션이 선택된 스트리밍 레벨만 로드합니다.

기타

  • iOS 용 Flurry 애널리틱스를 추가했습니다.

  • 에디터 뷰포트에서 뷰 로테이션의 HMD 제어를 가능하게 하는 에디터 세팅을 추가했습니다.

  • 비주얼 로거의 로그 아이템에 색을 추가, 오류는 빨강으로 경고는 노랑으로 표시합니다. 로그 항목에서 중요한 정보를 파악하기가 수월해집니다.

  • 게임플레이 디버거에 디버그 카메라를 추가하여 날아다닐 수 있도록 했습니다 (카메라 전환 기본 키는 Tab 입니다).

  • 비주얼 로거 툴에 선택된 항목에서의 필터/카테고리 강조 기능을 추가, 자잘하지만 일상적 사용에는 유용합니다.

  • 비주얼 로거 툴에 로그를 클래스별로 필터링하는 옵션 추가 및 에디터 세션간 필터가 유지되도록 했습니다.

  • 각 새로운 PIE/SIE 세션( 또는 파일에서 로드된 각각의 새로운 데이터)에 대해 비주얼 로거 툴에서 기존 모든 데이터를 리셋 또는 제거하는 옵션을 추가했습니다.

  • 비주얼 로거 툴에서 항상 마지막 프레임에 커서가 오도록 하는 옵션을 추가했습니다.

  • 비주얼 로거 툴에 옵션을 추가, 일반 일시정지와 레벨에서 필요한 경우 게임플레이를 일시정지시키는 PlayersOnly (플레이어 전용) 일시정지를 선택할 수 있습니다.

  • 비주얼 로거에 보다 정확한 모양 기록을 위해 오리엔테이션 적용된 박스 모양을 추가했습니다.

  • SteamVR 에 앉기 모드와 서기 모드를 지원합니다.

  • 익스텐션 없는 스트리밍 미디어 URI 스키마를 지원합니다.

  • 메시지 엔드포인트 핸들러에 람다 및 함수 오브젝트가 지원됩니다.

  • 인스턴싱된 어빌리티에 대한 재발동이 지원됩니다.

  • 메시지 핸들러가 메시지 처리를 하도록 할것인지, 문서 업데이트가 있습니다.

  • 커뮤니티 개발자 이름의 오자를 수정했습니다.

  • GitHub 에 대해 다운로드한 바이너리 종속성이 .git/ue4-gitdeps 폴더에 캐시되어, 브랜치 전환이나 리포지터리 소거시에도 더이상 종속성이 다시 다운로드되지 않습니다.

  • 블루프린트에 Notify Apex 를 노출, 그 노티파이에 커스텀 이벤트 바인딩도 가능합니다.

  • 비주얼 로거의 상태 정보를 확장시켜 여러 단계로 접히는 상태 정보 기록이 가능합니다.

  • 기능적 테스팅 프레임워크 사소한 향상

    • 테스트가 이제 레벨에 배치된 관련 액터를 지정하면 디버그 드로잉에 그것을 가리키는 화살표를 그려, 사용자는 주어진 테스트에 관련된 액터를 맵에서 확인할 수 있습니다. 일부 테스트는 디버그 카메라나 AI 스폰 포인트같은 몇몇 액터를 그 목록에 자동으로 추가합니다.

  • GitHub 종속성 다운로드 툴은 http_proxy 환경 변수의 프록시 서버 세팅을 감지합니다.

  • 게임플레이 디버거의 길 통로 그리기를 개선, 내비 지역을 색으로 렌더링합니다.

  • Leap Motion 플러그인의 업데이트된 문서 및 코드 코멘트를 통합시켰습니다.

  • 이제 Git 용 Linux 파일은 LINUX_ROOT 환경변수가 설정되지 않은 이상 Windows에서 다운로드되지 않습니다.

  • 메시징: Recipient (수신인) 스레드가 이제 추적됩니다.

  • Oculus SDK 가 0.6 으로 업데이트되었습니다.

  • PC 플랫폼에서 3D 헤드폰 공간화에 대한 Oculus Audio SDK 가 지원됩니다.

  • 새로운 "컴포지터" 시스템이 지원됩니다.

    • 씬의 GPU 활용이 훨씬 나아진 것이 보일 것입니다.

  • Git 종속성 다운로드를 위한 프록시 서버 세팅은 이제 --proxy=http://<login>:<password>@<server> 인수 하나로 지정할 수 있습니다.

  • IMessageHandler.h 에 헤더 종속성이 없도록 리팩터링했습니다.

  • 메시지 추적기가 델리게이트 대신 람다를 사용하도록 리팩터링했습니다.

  • 미디어 플레이어 애셋의 자동 재생 기능을 제거했습니다.

  • 미디어 플레이/일시정지 중이지 않을 때 ClearColor (소거색)을 렌더링합니다.

  • 커뮤니티 개발자 크레딧을 업데이트했습니다.

  • 모든 채팅 타임스탬프는 이제 일관성을 위해 로컬 머신 시간을 사용합니다.

  • 게임플레이 디버거 툴의 타깃 선택을 변경했습니다. 이제 타깃 선택은 클라이언스-서버 환경의 클라이언트에서 이루어집니다.

  • Oculus 런타임이 설치되었으나 HMD 가 부착되지 않은 경우의 "No Oculus detected" 치명적 경고를 제거했습니다.

  • Oculus Rift 헤드셋이 연결은 되어 있으나 켜 있지는 않은 경우 시작시의 크래시를 고쳤습니다.

  • CDO 에서 인스턴스로 프로퍼티 변경사항을 전파하는 데 관련된 문제를 고쳤습니다.

  • HMD 함수 라이브러리에서 Set Base Position 및 Offset 의 실패 검사가 잘못되던 버그를 잡았습니다.

  • 튜토리얼에서 해상도 저하가 표시되지 않던 버그를 잡았습니다.

  • 기존 세션의 접속을 끊은 뒤 이전 로그인 정보가 사라지기 전 다시 참가했을 때 희귀하게 발생되는 강제 접속해제를 고쳤습니다.

  • 호스트 접속이 끊기고 메인 메뉴로 돌아가는 희귀한 상황에서 플레이어에게 별다른 내용 없이 검정 화면이 나타나던 문제를 고쳤습니다.

  • 특정 비디오 세팅에서 글자가 뿌옇게 보이던 문제를 고쳤습니다.

  • BasedMovement 가 루트 모션을 떠난 뒤 (SimulatedProxy) 싱크가 어긋날 수 있었던 것을 고쳤습니다.

  • VR 에서 스크린샷을 찍을 수 있던 것을 고쳤습니다.

  • 에디터에 뷰포트 없이 PIE 세션을 실행할 때의 크래시를 고쳤습니다.

  • 전략 게임 프로젝트에서의 디버그 카메라 ('ToggleDebugCamera' 치트)를 수정했습니다. 디버그 카메라는 이제 어떤 상황에서도, 심지어 마티네 도중에도 작동할 것입니다.

  • 에디터에서 비주얼 로거 툴의 EQS 렌더링을 수정했습니다.

  • FBX 임포트 메뉴에서 이름 영역 플래그가 잘못 사용되던 것을 고쳤습니다.

  • 지속 필터 포함 비주얼 로거 툴에서 접근할 수 없는 vlog 가 나오던 문제를 고쳤습니다.

  • 비주얼 로거 툴에서 시간 범위 밖의 타임라인의 커서 관련 문제를 고쳤습니다.

  • 데디케이티드 서버에서 EnableAILogging 명령줄 인수를 사용한 비주얼 로거 관련 로깅 문제를 고쳤습니다.

  • 에디터에서 MediaPlayer 프로퍼티 변경시의 미디어 리로드를 고쳤습니다.

  • 메시지 추적기가 메시징 디버거를 열기 전까지 추적 내용을 처리하지 않는 것을 고쳤습니다.

  • 독립형 및 클라이언트-서버 게임에서 게임플레이 디버거 툴의 내비메시 렌더링을 수정했습니다.

  • 파일을 기반으로 하지 않는 (http://, rtsp:// 등의) URL 이 미디어 플레이어 에디터에서 뭉개지던 것을 고쳤습니다.

  • SimpleConstructionScript 내 오브젝트 작명규칙을 수정했습니다.

  • 루핑없는 무비 완료 후 플레이 버튼이 비활성화되던 것을 고쳤습니다.

  • 루핑없는 무비 완료 후 플레이 버튼이 비활성화되던 것을 고쳤습니다.

  • 미디어 플레이어 에디터에서의 재생 속도 라벨을 수정했습니다.

  • SlotNode 가 State 안에 있을 때 여러 번 등록되던 것을 고쳤습니다 (?FAnimNode_StateMachine::SetState 에 발동됩니다).

  • 친구 참석 정보가 잘못되어서 "게임 참가" 버튼이 제때 나타나고 사라지지 않던 경우를 고쳤습니다.

  • 어플리케이션이 파일 서버 접속에 실패했을 때의 로그 메시지를 올바르게 재시도하겠다고 고쳤습니다.

  • PawnAction 중단 처리 방식을 고쳤습니다 - 다른 폰 액션 이벤트와 마찬가지로 처리됩니다.

  • 새로운 슬레이트 슬립(sleep) 메커니즘으로 인해 비디오 재생이 거칠던 것을 고쳤습니다.

  • 작은 아이콘 에디터 세팅에 대한 비주얼 로거의 툴바를 고쳤습니다.

  • WmfMedia 가 루핑 비디오 재생 사이에 ClearColor 를 그리도록 고쳤습니다.

  • 접속된 모든 클라이언트에서 게임플레이 디버거를 사용할 수 있을 것입니다.

  • Git 종속성 툴은 이제 Mac에서 HFS 이외 드라이브에도 정상 작동합니다.

  • HMD 는 이제 커맨드렛 실행시 초기 시도를 막습니다.

  • 디버그 카메라가 전반적으로 수정되어 홈베이스나 마티네에서도, 관람자 있는 어떤 맵 도중이든 정상 작동할 것입니다.

  • 미디어: 미디어 플레이어가 웹 URL 및 상대 경로가 아닌 것을 제대로 처리하지 못하던 것을 고쳤습니다.

  • 미디어: 빈 URL 을 제대로 처리합니다.

  • 자주 사용되는 데이터 구조체의 레이아웃을 조정하여 메모리 사용량을 줄이고 효율을 높였습니다.

Paper2D

  • 스프라이트 에디터: 뷰 모드에 있지 않을 때 뷰포트 구석에 현재 모드를 나타내는 텍스트를 추가했습니다.

  • 레벨 에디터에 2D 회전 / 이동 복합 위젯을 추가했습니다. 프로젝트 세팅 .. 2D 에서 켤 수 있습니다.

  • 타일 세트 애셋에서 타일 맵을 생성하는 컨텍스트 메뉴 옵션을 추가했습니다.

  • 스프라이트 및 플립북 컴포넌트에 디테일 커스터마이제이션을 추가, 스프라이트 카테고리를 머티리얼 카테고리 위로 올려 상대적 중요성을 일치시켰습니다.

  • 소켓 검색시 다른 컴포넌트가 붙어있지만 소켓에 붙은 것은 아닐 경우의 불필요한 검색을 방지하여 약간 최적화시켰습니다.

  • 커다란 타일 맵의 안정 상태 렌더링을 최적화시켰습니다. 타일 맵은 이제 인스턴스별 버텍스 버퍼로 구워집니다.

  • Paper2D 플러그인 콘텐츠 디렉터리의 기본 릿 스프라이트 머티리얼에 네임드 노멀 맵 슬롯을 추가했습니다.

  • 콘텐츠 브라우저의 애셋 필터 목록에 Paper2D 카테고리를 추가했습니다.

    image alt text

  • 확장 지점을 추가, 새로운 프론트 엔드 필터 정의 및 콘텐츠 브라우저에서의 사용이 쉬워집니다.

    • UContentBrowserFrontEndFilterExtension 서브클래스를 만들어 AddFrontEndFilterExtensions 를 덮어씁니다.

  • 에디터 세팅에 (에디터 개인설정..콘텐츠 에디터) 스프라이트, 플립북, 타일 맵, 타일 세트 에디터에 대한 세팅을 추가했습니다.

  • Paper2D 렌더 씬 프록시에 통계를 추가했습니다.

  • 스프라이트 에디터 디테일 패널의 Rendering 및 Collision 카테고리 제목줄에 요약 정보를 추가했습니다.

    • 렌더링에 어떤 종류의 (마스크드/불투명/반투명) 머티리얼이 사용되고 있는지 표시됩니다.

    • 콜리전은 (없음, 2d, 3d) 콜리전 영역이 표시됩니다.

  • UPaperTileMap 에 픽셀과 언리얼 유닛간 스케일 인수를 지정하는 (PixelsPerUnrealUnit) 기능을 추가했습니다.

  • 플립북 에디터 사용성이 개선되었습니다.

    • 플립북 에디터에 표준 뷰포트내 트랜스폼 툴바가 추가되었습니다.

    • 키 프레임을 끌어놓을 때와 키 프레임 스트립에 스프라이트 이름 표시를 추가했습니다.

    • 플립북 에디터 타임라인의 스타일 및 작동방식을 개선했습니다.

    • 창 폭보다 큰 타임라인도 편집할 수 있도록 스크롤 바를 추가했습니다.

    • 타임라인 위에서 시간 스케일을 변경하는 단축키(Ctrl+마우스 휠)를 추가했습니다.

    • 프레임마다 바뀌는 배경을 추가했습니다.

    • 키프레임 스트립의 스타일을 변경, 잡아 끄는 손잡이를 위에 두고 프레임 전체 기간에 걸쳐 늘일 수 있도록 했습니다.

    • 연관된 스프라이트에 작동하는 키 프레임 메뉴 옵션을 추가했습니다 (콘텐츠 브라우저에서 찾기, 스프라이트 편집, 다른 것으로 대체).

  • 소켓 편집이 개선되었습니다.

    • 소켓 선택이 강조됩니다.

    • 소켓 이름에 음영이 추가됩니다.

    • 선택된 소켓 삭제가 가능합니다.

    • 키 프레임에서의 소켓을 이제 플립북 에디터에서 보는 것이 (하지만 편집은 불)가능합니다.

    • '뷰 모드' 에서 스프라이트 소켓 선택 해제가 가능합니다.

    • '소스 구역 편집 모드' 에서 스프라이트 소켓 표시를 막습니다 (별로 유용하지도 않았고, 잘못된 좌표계에서 표시되고 있었습니다).

  • 소스 구역 편집 모드가 개선되었습니다.

    • 각 스프라이트 이름이 소스 구역 중앙에 표시됩니다 (툴바를 통해 껐다켰다 할 수 있습니다).

    • 같은 텍스처를 공유하는 다른 스프라이트 표시를 툴바에서 껐다켰다 할 수 있습니다.

    • 툴바에 "스프라이트 추출" 버튼을 추가했습니다.

    • 소스 구역 편집은 이제 좌클릭만 가능, 우클릭 드래그는 예상대로 항상 이동입니다.

  • 타일 선택기 패널의 줌 개선

    • F 키는 화면에 맞춘 줌입니다.

    • 최대/최소 줌 범위가 늘었습니다 (16x, 32x, 1:16, 1:32 추가).

  • 2D 터레인 스플라인이 개선되었습니다.

    • 터레인 스플라인 콜리전 생성이 개선되었습니다.

    • 터레인 섹션 겹치기 및 머티리얼 그리기 순서가 지원됩니다.

    • 이제 채움 대 닫힘이 별개로 제어 가능하여, 내부 구역 없는 고리 생성이 가능합니다.

    • 조밀한 구석에서 (90 도가 넘어) 꼬일 스프라이트를 펼치는 방식으로 겹침 부작용을 줄였습니다.

    • 터레인 스플라인 포인트는 이제 XZ 면에 제한됩니다.

    • 주: 터레인 스플라인은 아직 실험단계 기능입니다.

  • Paper2D 애셋 임포트 및 세팅 컨디셔닝

    • 픽셀과 언리얼 유닛간의 기본 스케일 인수가 이제 1.0 (1 센티미터당 1 픽셀) 입니다.

    • 릿 / 언릿 디폴트 머티리얼 둘 다 프로젝트 세팅 - Paper2D 임포트에서 정의 가능합니다.

    • 이제 임포트된 스프라이트 시트에 적용되는 텍스처 그룹 및 압축 세팅을 환경설정 가능합니다.

      • 기본값은 전과 마찬가지로 유지되나 (미압축, 가장 가까운 필터링), 게임 스테일에 맞게끔 변경 가능합니다.

      • 이 세팅은 콘텐츠 브라우저의 "Apply Paper2D Texture Settings" (Paper2D 텍스처 세팅 적용) 컨텍스트 메뉴 옵션을 통해 텍스처에도 적용할 수 있습니다.

    • 소스 텍스처 크기가 변하는 경우의 자동 크기조절 옵션을 노출시켰습니다 (Paper Runtime Settings 내 Resize Sprite Data To Match Textures).

      image alt text

    • 타일 세트에서 새 타일 맵을 생성하면 이제 텍스처를 분석하여 최적의 머티리얼을 선택합니다.

  • Paper Flipbook Component 가 초기 접근 미리보기 단계에서 완벽 지원 단계로 승격되었습니다.

  • Tiled 에서 익스포트된 JSON 임포터의 호환성을 크게 개선시켰습니다.

    • 이제 Tiled 0.11.0 부로 정의된 모든 데이터를 파싱합니다. 여전히 내부 유형으로 변환하는 도중 많은 부분이 (가장 눈에 띄는 것은 이미지와 오브젝트 레이어가) 손실되기는 합니다.

  • 스프라이트와 타일 콜리전 지오메트리는 이제 원형/구형 모양을 포함할 수 있습니다.

    image alt text

  • 이제 머티리얼 에디터에서 스프라이트 애셋을 프리뷰 '메시'로 (연관된 Mesh Component 서브클래스 포함 다른 종류의 애셋도 함께) 사용할 수 있습니다.

  • 스프라이트 아틀라싱 개선

    • 아틀라스 텍스처 옵션을 노출시켰습니다 (텍스처 압축, 밉 수, 필터링, 등).

    • 영향받은 아틀라스는 스프라이트 애셋의 AtlasGroup 이 변경되면 자동 리빌드됩니다.

    • 이제 밉맵 생성시 스프라이트 사이의 누수를 줄이기 위해 기본 제한 사각 접근법을 사용합니다.

    • 아틀라스 리빌드는 가급적 점증형 업데이트로, 낭비가 심할 때까지 스프라이트 위치를 보존합니다.

    • 도움이 되는 상황에서 스프라이트 업데이트를 피하기 위해 아틀라스 텍스처를 재사용합니다.

    • 주: 스프라이트 아틀라스 그룹은 여전히 실험단계 기능입니다.

  • 스프라이트 생성 및 스프라이트 시트 임포트가 연관된 노멀 맵을 자동으로 찾습니다.

    • 두 작업 모두 비슷한 이름에 N 또는 Normal_ 을 붙인 파일이 있나 찾습니다 (세팅에서 환경설정 가능합니다).

    • 노멀 맵이 감지되면, 디폴트 언릿 머티리얼 대신 디폴트 릿 머티리얼 중 하나를 자동으로 사용합니다. 둘 다 'Paper2D - 임포트' 세팅 페이지에 정의됩니다.

    • 텍스처 패커에서 익스포트할 때, "Pack with same layout" (같은 레이아웃으로 패킹) 옵션으로 해야 합니다. 각각의 부가 텍스처는 반드시 이미지와 같은 구역의 스프라이트를 포함해야 하기 때문입니다.

  • 스프라이트 에디터: 소스 구역 편집 모드에서 편집중인 스프라이트 편집시의 알림 메시지를 추가했습니다.

  • 스프라이트 에디터: 스프라이트 디테일 커스터마이제이션의 렌더링 섹션 제목줄에 '릿/언릿' 표시를 추가했습니다.

  • 타일 맵 에디터: 타일 세트가 선택되지 않은 경우 보이는 경고창을 추가, 클릭하면 타일 세트 선택기가 열립니다.

  • 타일 맵: 타일 맵 에디터의 타일 선택기 패널 위에 타일 세트 애셋을 끌어 놓는 기능을 추가했습니다.

  • 타일 맵: 빈 타일 맵이 어디인지 쉽게 알 수 있도록, 에디터에서 타일맵이 선택되지 않았을 때 레이어 0 의 와이어프레임 바운드를 항상 표시하도록 변경했습니다.

  • 타일 세트에 '조건'을 사용하여 타일 세트 줌 인 / 아웃시 사용할 타일 시트 텍스처를 준비할 수 있게 되었습니다.

    • 인접 타일의 픽셀이 타일 맵 렌더링 부분으로 새들어 가는 부작용이 방지됩니다.

    • 이 옵션은 콘텐츠 브라우저의 우클릭 컨텍스트 메뉴에서 "Condition Tile Sheet Texture" (타일 시트 텍스처 컨디셔닝)을 사용하여 타일 세트 애셋에 실행 가능합니다. 그러면 타일 시트 텍스처의 각 타일 주변으로 확장된 경계를 가진 사본을 만들어, 타일 세트의 공간과 여백을 타일별로 업데이트합니다.

    • 이 옵션에 대한 세팅은 에디터 개인설정 .. 타일 맵 에디터에서 찾을 수 있습니다.

  • 스프라이트 및 타일 지오메트리 편집 작업방식 및 사용성이 개선되었습니다.

    • 콜리전/렌더링 모양에 회전이 지원됩니다.

    • 구은 콜리전 지오메트리에 대해 (프리미티브 유형별 분할 등의) 보다 구체적인 통계가 추가되었습니다.

    • 사각형을 이루는 커스텀 지오메트리 자동 식별을 추가, 컨벡스로 취급할 때보다 효율적인 콜리전 모양이 생성됩니다.

    • 콜리전 렌더링 색을 노랑에서 선택 색과 혼동되지 않도록 파랑으로 변경했습니다.

    • 모양에 채워진 배경이 생겨 클릭하면 전체 모양이 선택됩니다.

    • 피벗 표시 위젯의 히트 테스트를 중지, 겹친 모양이나 선을 선택하려 할 때 잘못 클릭한 느낌이 나지 않도록 했습니다.

    • 폴리곤 추가 툴을 뜯어고쳐 보다 직관적으로 만들었습니다.

      • 최소 세 개의 버텍스가 있을 때 첫 버텍스를 클릭하거나 아무데나 더블클릭하는 것으로 폴리곤을 닫을 수 있습니다.

      • 진행중인 폴리곤 미리보기를 표시하고, 현재 커서가 있는 곳을 클릭했을 때 벌어질 일이 표시됩니다.

      • 세 번째 버텍스가 처음 추가되면 와인딩 방향이 항상 밖이 되도록 했습니다.

      • 기존 버텍스와 거의 같은 버텍스 추가를 방지합니다.

  • 폴리곤이 닫혔을 때 모양을 선택합니다.

  • 스프라이트 에디터: Alternate Material (대체 머티리얼) 프로퍼티를 Rendering 카테고리로 옮기고 지오메트리 모드를 썰기(Dice) 전까지 숨깁니다.

  • 단순 콜리전 지오메트리의 비균등 스케일 포함 스프라이트 컴포넌트에 어떤 것과도 충돌하지 않는다는 맵 체크 경고를 추가, 스태틱 메시 컴포넌트에 나는 경고와 일치시켰습니다.

  • 스프라이트 편집시 이름이 고유하며 공백이 아닌지 확인하는 소켓 이름 인증을 추가했습니다.

  • 스프라이트나 타일 지오메트리 편집시 폴리곤 모양의 중심이 가중치 적용 평균이 아닌 바운딩 박스 중앙이 되도록 변경했습니다.

  • 반투명 렌더링 보조를 위해 타일 맵에 대한 레이어 일괄 제출 순서가 처음으로 돌아가도록 변경했습니다 (컴포넌트는 여전히 단일 개체로 소팅되기에 정면에서 볼 때만 작동합니다).

  • Tiled 에서 임포트한 타일 맵이 레이어간 항상 양수를 사용하도록 변경, Tiled 에서의 레이어 순서를 역순으로 하도록 했습니다. .JSON 에서 역순으로 저장되기 때문입니다.

  • 플립북 애셋의 최대 프레임 속도를 1000 fps 로 제한시켰습니다.

  • 타일 세트 뷰포트에서 타일 선택 사각형의 타일별 우하단 여백을 제거했습니다.

  • 주: 현재 다수의 타일 선택시 여백은 내부에서만 포함됩니다.

  • 맵 폭/높이 프로퍼티 편집 되돌리기 후 타일 맵 레이어가 데이터를 잃고 유령보다 작은 크기에 갖히던 버그를 잡았습니다.

  • 기존에 영향받은 타일 맵은 로드시 수정됩니다.

  • 타일 세트 에디터에서 텍스처 레퍼런스 소거시 또는 타일 크기보다 작은 텍스처 선택시의 크래시를 고쳤습니다.

  • 디테일 패널을 통해 타일 맵 레이어 생성을 되돌릴 때의 크래시를 고쳤습니다.

  • 타일 세트 애셋의 Drawing Offset 에 음수값을 사용할 수 없었던 문제를 고쳤습니다.

  • 정사각형이 아닌 타일 맵 레이어 병합시의 문제를 고쳤습니다.

  • JSON 스프라이트 시트 리임포트시 기존 텍스처 페이지를 리임포트하지 않던 문제를 고쳤습니다.

  • Paper2D 에디터에서 원근 뷰로 전환시 스프라이트/플립북/등을 바라보는 것이 아닌, 얇은 에지 부분을 바라보던 문제를 고쳤습니다.

  • 타일 세트 에디터 또는 타일 선택기 대화창에서 타일의 첫 행/열을 클릭해 타일을 선택할 수 없던 문제를 고쳤습니다.

  • 독립형 타일 맵 에디터에서 선택 윤곽선이 나타나지 않던 문제를 고쳤습니다.

  • 타일 세트 Drawing Offset 이 타일 맵의 Pixels Per Unreal Unit 세팅을 무시하던 문제를 고쳤습니다.

  • 소스 구역 편집 모드에서 회전된 스프라이트에 트랜스폼 기즈모 작동 방식 관련 문제를 고쳤습니다.

  • 스프라이트와 타일 맵의 탄젠트 생성 관련 문제를 고쳤습니다.

  • 타일 세트에 지정된 DrawingOffset 방향이 나머지 타일 맵 좌표계와 Tiled 에 일치하도록 수정했습니다.

  • 양수 DrawingOffset.Y 값은 타일 맵 그리드를 기준으로 타일을 위가 아닌 아래로 밀어줍니다.

  • 타일 세트 에디터에서 타일 세트 프로퍼티를 변경했을 때 타일 선택 사각형이 업데이트되지 않던 것을 고쳤습니다.

  • 스프라이트/타일 맵/등 빌드에 플랫폼 전용 텍스처 데이터를 사용하던 모든 부분을 제거하여 쿠킹/패키징된 빌드의 여러가지 문제를 고쳤습니다. 이제 항상, 애초에 에디터에서 저작했던 크기인 임포트된 크기로만 작동합니다.

  • Paper2D 에디터를 여럿 열었으나 모두가 보이지는 않을 때, 안보이는 에디터 뷰포트 처리를 피하는 방식으로 에디터 퍼포먼스를 향상시켰습니다.

  • 스프라이트 에디터의 디테일 패널에서 프로퍼티 스포너를 끌 때의 반응성을 향상시켰습니다 (콜리전 및 렌더 데이터 리빌드는 스피너를 놓을 때까지 유예됩니다).

  • 타일 맵 최대 크기를 1024x1024 로 제한시켰습니다 (그래도 단일 컴포넌트 추천 크기보다는 훨씬 큽니다).

  • 스프라이트 편집시 매 프레임 일어나는 불필요한 텍스처 분석 패스를 중지시켰습니다.

  • 타일 세트에 맵과 다른 높이가 있을 때의 작동방식을 새로 정의했습니다. 이제 타일 좌상단 구석을 맵 셀의 좌상단 구석에 놓기 보다는, 좌하단 구석을 좌하단 구석에 놓습니다.

  • Tiled 에서의 작동방식과 일치되며, 높이 가변 아이소메트릭 타일 작업 느낌이 좋아집니다.

  • 스프라이트 애셋에 대한 'Shrink Wrapped' (펼침 수축) 지오메트리 유형의 퀄리티와 퍼포먼스를 크게 향상시켰습니다.

  • 알고리즘을 보수적으로 바꾸어, 스프라이트 픽셀의 에지를 절대 잘라 들어가지 않습니다.

  • 분석 실행 해상도를 제어하는 디테일 어마운트 프로퍼티가 새로 생겨, 커다란 텍스처 사용시의 작업방식이 개선됩니다.

  • 몇몇 캔버스 텍스트 그리기를 정수 오프셋으로 끌어붙여 스트링 길이 변화에 따른 폰트 '가중치' 변화감을 줄였습니다.

  • 이제 스프라이트 에디터 뷰포트에서 위젯을 통해 소켓의 이동 뿐 아니라 회전과 스케일 조절도 가능합니다.

  • 스프라이트 에디터: 꼭 에지 가운데가 아닌 아무데나 클릭해도 소스 구역의 에지 편집이 가능합니다.

  • 스프라이트 에디터: 렌더 지오메트리 편집 모드에 있을 때는 디테일 패널에 콜리전 지오메트리 프로퍼티를 숨기고, 없을 때는 다시 표시하여 혼동을 줄였습니다.

  • 스프라이트 에디터: 기본 포커스 키를 Home 에서 F 로 변경하여 나머지 에디터와 맞췄습니다.

  • 스프라이트 에디터: 편집중인 스프라이트 변경시 스프라이트 목록의 선택을 동기화시켰습니다.

  • 머티리얼이 설정되지 않은 타일 맵과 스프라이트 컴포넌트는 이제 안보이기 보다는 기본 머티리얼을 사용해서 렌더링됩니다.

  • 타일 맵 편집: Tile Map 과 Setup 카테고리를 Materials 카테고리 위로 옮겼습니다.

  • 타일 맵 편집: 빈 타일이 포함된 브러시로 칠하면 이제 기존 셀을 지우기 보다는 구멍이 있는 브러시처럼 작동합니다.

  • 타일 맵 에디터: SeparationPerLayer 가 음수였던 경우 커서 프리뷰가 렌더링되지 않던 문제를 고쳤습니다.

  • 타일 맵 에디터: 타일 세트에 대한 선택 표시가 경계 마진과 타일별 여백 옵션을 따릅니다.

  • 타일 맵: 가득 채우기(flood fill) 툴과 타일 맵 초기화시 삭제된 영역을 전혀 칠한 적이 없는 영역과 동일하게 간주하지 않던 문제를 고쳤습니다.

  • 타일 맵: 피벗 표시 플래그가 독립형 타일 맵 에디터에서 작동하지 않던 것을 고쳤습니다.

피직스

  • 실행시간에 컨스트레인트 프로젝션을 켜고 끄는 기능을 추가했습니다.

  • 많은 양의 피직스 바디 생성 속도를 높이기 위해 피직스 바디 초기화에 디퍼드 패스를 추가했습니다.

  • 인스턴스드 스태틱 메시 컴포넌트에 맞게 더 빠른 스태틱 이니셜라이제이션 패스를 추가했습니다.

  • 폴리지 통계 함수 라이브러리에 메서드를 추가했습니다.

  • 모든 포스/토크 유형 함수에 질량을 무시하는 기능을 추가했습니다. AddForce, AddTorque, 등 호출시 AccelChange = true 설정해 주기만 하면 됩니다.

  • 비히클 피직스 서브스테핑을 추가했습니다.

  • Character Movement Component 세팅을 체계적으로 정리하여 카테고리를 보다 세분화시켰습니다.

  • PCM 다중 접점 옵션을 추가했습니다. 접점 정확도가 중요한 경우 도움이 됩니다.

  • 고정 시간 스텝을 일반 프로젝트 세팅으로 노출시켰습니다.

  • 리짓 바디에 대한 고정 자유도를 어느 수준으로 할 것인가에 대한 모든 제어를 노출시켰습니다.

  • 복원력 복합 모드 및 BounceThresholdVelocity (탄력 임계 속도)를 노출시켰습니다.

  • 블루프린트에 여러가지 PhysicsHandleComponent 프로퍼티를 노출시켰습니다.

  • GetMomentOfInertia 를 통해 리짓 바디의 관성 순간을 노출시켰습니다.

  • PhysX 3.3.3 업그레이드입니다. 자세한 정보는 PhysX 릴리즈 노트를 확인하세요.

  • PhysX 콜리전 데이터의 퇴화된 트라이앵글로 유발되는 여러가지 문제를 고쳤습니다.

  • 내비 이동 투영에 보간 속도 옵션을 추가, 에이전트가 내비메시 위로 너무 높이 튀지 않도록 합니다.

  • 인스턴스드 메시 컴포넌트 안의 인스턴스 피직스 바디에 스케일이 지원됩니다.

  • 캐릭터 웅크리기/해제는 이제 목표 캡슐 높이에 있는지와 상관없이 웅크리기 상태를 변경합니다. Can Crouch 함수는 더이상 높이 조건을 검사하지 않습니다.

  • 캐릭터의 On Walking Off Ledge (턱에서 걸어 내릴 때) 이벤트는 커스텀 속도 계산을 쉽게 하기 위해 다수의 파라미터를 받습니다.

    • 엔진 코드는 더이상 Start Falling (낙하 시작)에서 0 의 Z 속도를 강제하지 않으며, On Walking Off Ledge 의 새로운 속도를 그대로 따릅니다.

    • 블루프린트는 자동으로 업데이트됩니다. C++ 는 새로운 함수를 위해 구형 빈 함수를 폐기시켰습니다 (호출되지 않습니다).

  • Character Movement Component 는 Updated Component 가 피직스 시뮬레이션중일 때 보통의 Check Still In World 를 실행합니다.

    • 래그돌이 KillZ 또는 월드 바운드를 따르지 않는 것을 고쳤습니다.

  • Pawn 에서 Unpossessed 또는 Restart 호출시 이제 이동 입력을 소모합니다.

  • 비균등 스케일 적용시 BSP 폴리곤 노멀이 틀려지던 것을 고쳤습니다.

  • 액터에 다른 컴포넌트가 겹치기 시작하면서 On Overlap 이 여러 번 호출될 수 있었던 버그를 잡았습니다.

  • Capsule Half Height = Capsule Radius (캡슐 절반 높이가 캡슐 반경과 같은) Capsule Component 가 절반 높이보다 약간 높은 콜리전 지오메트리를 만들던 것을 고쳤습니다. 단순히 구체를 만들어야 할 것입니다.

  • orient-to-movement (이동방향에 맞춰 회전) 또는 컨트롤러향 회전을 사용하는 캐릭터가 움직이는 베이스를 따라 회전하지 않던 것을 고쳤습니다.

  • Enable Camera Rotation Lag 의 코멘트를 수정했습니다.

  • 캐릭터와 무브먼트 컴포넌트에 부적절히 태깅된 리디렉트를 고쳤습니다.

  • 프로젝타일에서 Rotation Follows Velocity (속도에 따라 회전)이 설정되었는데 속도가 없는 경우의 방향 설정을 수정했습니다.

  • 스켈레탈 메시 Add Radial Force 와 Add Radial Impulse 가 바디 질량에 따라 힘 평균을 내도록 고쳤습니다.

  • 초기화 도중 피직스 머티리얼 데이터 접근시의 크래시를 고쳤습니다.

  • 스태틱 메시 프로퍼티가 아직 설정되지 않은 인스턴스드 스태틱 메시 컴포넌트에 대해 피직스 데이터를 생성할 때의 크래시를 고쳤습니다.

  • 디스트럭터블 메시 에디터의 크래시를 고쳤습니다.

  • 스케일 적용 컴포넌트에 대한 컨벡스 콜리전 엘리먼트가 잘못된 크기로 그려지던 문제를 고쳤습니다 (스케일이 두 번 적용되었었습니다).

  • Based Movement 가 루트 모션을 벗어난 이후 싱크가 어긋날 수 있었던 문제를 고쳤습니다 (Simulated Proxy).

  • 인스턴스드 스태틱 메시 컴포넌트에 대한 피직스 초기화에서 메시가 빠져있거나 유효하지 않은 경우의 크래시를 고쳤습니다.

  • 에디터에서 디스트럭터블 메시 인스턴스에 오버라이드 머티리얼 적용시의 크래시를 고쳤습니다.

  • 피직스 추가 유예시의 크래시를 고쳤습니다.

  • 그래픽 메시보다 저해상도 시뮬레이션 메시를 사용하는 클로스 애셋 사용시의 크래시를 고쳤습니다.

  • SF_Max Enum 이 셰이더 포맷도 슬립 패밀리도 될 수 있었던 모호성을 고쳤습니다.

  • 래그돌 초기화시의 잘못된 바디 인스턴스를 사용하여 서버와 클라이언트의 씬 환경설정이 다를 때 문제가 생기던 것을 고쳤습니다.

  • 캐릭터가 낙하로 설정된 뒤 다시 착지하면 Nav Walking 동작이 복원되지 않던 것을 고쳤습니다.

  • 방사형 힘이 피직스 서브스테핑과 정상 작동하지 않던 것을 고쳤습니다.

  • 디스트럭터블 메시의 머티리얼 설정이 청크 머티리얼과 피지컬 머티리얼을 업데이트하지 않던 것을 고쳤습니다.

  • 스플라인 메시 컨벡스 콜리전 엘리먼트의 바운딩 박스를 수정했습니다.

  • 이때문에 스플라인 메시 관련 몇 가지 이상한 PhysX 동작이 생겼을 것입니다.

  • 파티클이 스태틱 오브젝트에 임펄스 적용 시도시의 경고를 고쳤습니다.

  • 이동중이지 않은 오브젝트의 콜리전 노멀을 뒤집습니다. 항상 콜리전 노멀이 임팩트 지점에서 오브젝트를 멀리 밀어내도록 하기 위해 필요합니다.

  • Hit Result 의 "Phys Mat" 핀의 코멘트를 개선, "Return Physical Material" 을 반드시 설정해야 함을 알렸습니다.

  • 컨트롤러의 폰 빙의가 오소리티에서만 일어나도록 명확히 했습니다.

    • 블루프린트 메서드는 Blueprint Authority Only 로 마킹되었습니다. 네트워크 클라이언트에서 사용해 보면 로그창에 경고 메시지와 함께 아무런 작업도 하지 않습니다.

  • 폰이 End Play 시 그냥 Destroy 가 아닌 스스로 Unregister 하도록 했습니다.

    • 폰이 스트림 아웃되어도 폰 리스트에 남아있던 것이 수정됩니다.

  • On Component End Overlap 이벤트 발동 전 Overlapping Components 배열에서 컴포넌트를 제거합니다.

    • 다른 컴포넌트에서 Overlapping Components 배열을 검사해 보고 오버랩이 아직 살아있구나 생각하지 않도록 합니다.

  • Hit Result 의 일정 부분이 좀 더 논리적인 레이아웃이 되도록 순서를 변경했습니다.

  • 오브젝트가 이동중이지 않은데 무언가가 이 컴포넌트를 때린 경우 컴포넌트 오버랩 이벤트의 노멀을 반전시킵니다.

    • 노멀이 항상 오브젝트를 임팩트 지점에서 밀어내도록 하는 데 필요합니다.

  • Spectator Pawn 은 이제 기본적으로 리플리케이트되나, PlayerController 에 스폰된 것들은 클라이언트 전용이므로 여전히 리플리케이트되지 않습니다.

    • 현재 동기화 위치에 추가로 관람자 회전 네트워크 동기화를 추가했습니다.

    • ServerSetSpectatorWaiting / ClientSetSpectatorWaiting RPC 를 추가, 관람자의 참가/리스폰이 더욱 쉬워졌습니다.

  • Vector 및 Rotator 동등성 검사가 무관용 정책을 제대로 처리합니다.

  • 무브먼트 컴포넌트에서 스태틱 모빌리티가 포함된 컴포넌트 이동 시도시 경고가 뜹니다.

  • 이제 박스 모양으로 된 콜리전에 임팩트 노멀을 계산합니다. 이전에는 모양의 임팩트시 접점 노멀과 동일했었습니다.

    • 캐릭터가 다른 이슈보다도 단순 박스 지오메트리를 올라갈 수 없었던 문제를 고쳤습니다.

플랫폼

  • 실험단계 "Desktop (Win + Mac + Linux)" 타깃 플랫폼을 추가, 세 플랫폼 모두에서 실행 가능한 콘텐츠 쿠킹이 가능합니다.

    • 현재 Mac/Linux 에서는 D3D 셰이더를 컴파일할 수 없기에, 그 둘 중 하나용으로 쿠킹한다면 Windows에서는 -opengl 로 실행해야 합니다.

    • 셋 모두 단일 디렉터리 구조에 패키징해 넣으면 여전히 약간 문제가 있으므로, 에디터의 파일 | 패키지 메뉴에서는 제거되었습니다.

    • 명령줄에서 쿠킹 대상 플랫폼을 "desktop" 으로 하여 쿠커 실행이 가능합니다.

  • 컨버터블 랩톱이 지원됩니다 (EConvertibleLaptopMode 참고).

  • 디바이스에서 플레이 도중 게임을 빌드해야할지 지정하는 기능을 추가했습니다.

    • 에디터 개인설정의 '플레이' 섹션에 새로 생긴 세팅을 통해 사용자가 디바이스에서 플레이 선택시 모든 게임을 빌드할지, 빌드하지 않을지, 기본 동작(코드 기반 게임 빌드, 콘텐츠 전용 게임은 빌드하지 않음)을 수행할지 지정할 수 있습니다.

  • 반복처리식 디플로이가 PS4 에 구현되었습니다. 에디터에서 PS4 첫 실행 이후에는 '훨씬' 빨라질 것입니다.

  • HTTP 청크 인스톨러에 여러가지 개선사항이 있습니다 (코드 프로젝트 전용)

    • UAT 명령줄 옵션에 -chunkinstalldirectory 와 -chunkinstallversion 을 추가했습니다.

    • Chunk Dependency Graph 를 추가, 청크간의 애셋 복제 제어가 수월해졌습니다.

    • HTTP Chunk Installer 가 기존 빌드를 제대로 재사용하여 다운로드 크기를 줄입니다.

    • Build.cs 에서 활성화된 경우 Windows는 HTTP Chunk Installer 를 기본으로 사용합니다.

    • 에디터 패키징 메뉴에 HTTP Chunk Install 옵션을 추가했습니다.

    • HTTP Chunk Installer 동기화 모드와 오프라인 모드를 추가했습니다.

    • 에디터 프로젝트 런처 / 언리얼 프론트엔드에 HTTP Chunk Installer Options 를 추가했습니다.

    • HTTP Chunk Installer 패치가 첫 지원됩니다.

  • 디바이스에서 플레이 실행 도중 pak 파일이 파일|패키지 에 유지되던 문제를 고쳤습니다. 새로 쿠킹된 데이터보다 이전 pak 데이터를 선호하기에 디바이스에서 플레이 도중 이상 현상이 유발되었었습니다.

  • JunkManifest 처리가 Mac과 Linux에서 백슬래시 처리가 가능하도록 수정했습니다.

  • 타깃 플랫폼 DLL 의 다수 중복 로드를 고쳤습니다.

  • 비동기 발견 디바이스(PS4, XBoxOne)의 감지에 실패할 수 있던 희귀한 문제를 고쳤습니다.

  • Windows 이외의 플랫폼에서 툴팁 위치가 1 픽셀 어긋나던 것을 고쳤습니다.

  • 최소 OS 버전을 Windows XP 로 선택하면 이제 그 에디터 인스턴스 도중 효과가 발생합니다.

  • 가상 조이스틱이 더이상 키보드 포커스를 받지 않습니다. 게임 뷰포트에 포커스가 봉인되고 조이스틱 밖을 눌렀을 때의 손가락 터치 상태가 리셋되는 문제가 방지됩니다.

Android

  • Android 어플리케이션 표시 이름(app_name) 세팅이 프로젝트 세팅의 Android에 추가되었습니다.

  • 기본 Android 프로파일 선택기에 Adreno 2xx GPU 와 PowerVR 540 감지를 추가했습니다.

  • (Android같은) 텍스처 스트리밍이 없는 플랫폼용 r.MobileReduceLoadedMips 를 추가했습니다. 파라미터는 디바이스 감지에 따라 실행시간에 메모리 사용량을 낮추기 위해 로딩 생략을 하지 않을 밉레벨 수입니다.

  • Android ES 2 의 ASTC 텍스처 포맷 지원을 추가했습니다.

  • AndroidManifest.xml <manifest>, <application>, <activity> 노드에 부가 태그 추가를 허용합니다.

  • AndroidManifest.xml 생성에 대한 보다 세밀한 제어가 가능합니다.

    • Extra Activity Settings 는 [project]/Build/Android/ManifestActivityAdditions.txt 에서도 읽습니다.

    • Extra Application Settings 는 [project]/Build/Android/ManifestApplicationAdditions.txt 에서도 읽습니다.

    • Extra Requirements 는 [project]/Build/Android/ManifestRequirementsAdditions.txt 에서도 읽으며, 권한에만 제한되지 않습니다.

    • Entire Requirements 섹션은 [project]/Build/Android/ManifestRequirementsOverride.txt 내용으로 덮어쓸 수 있습니다 (<uses-sdk android:minSdkVersion="9"/><uses-feature android:glEsVersion="0x00020000" android:required="true"/> 도 대체되니 포함시켜 줘야 합니다!).

  • 패키지와 프로젝트 이름을 다르게 할 수 있으며, 유효한 패키지 이름 생성에 필요한 경우 대시는 밑줄로 변환됩니다.

  • Android 익스텐션 팩 포함 ES31 지원을 별도의 타깃 플랫폼에서 어느 텍스처 포맷 타깃과도 작업할 수 있는 프로젝트 세팅으로 변경했습니다. ES31 지원시 컴파일되고 있던 빌드 플래그에 의해 구동되며, 체크된 경우 AEP 셰이더는 물론 ES2 셰이더도 컴파일합니다.

  • 반복처리식 디플로이가 이제 Android에 지원됩니다. 이제 실행시 변경된 콘텐츠만 디바이스에 푸시되며, APK 파일에 변화가 없는 경우 재설치하지 않습니다.

  • 노멀 맵이 다른 플랫폼과 같은 방식으로 동작하여, 텍스처에서는 두 컴포넌트만 사용하고 세 번째 컴포넌트는 셰이더에서 파생시키는 것으로 퀄리티를 높이고 부작용을 최소화시켰습니다.

  • Android 메뉴 및 볼륨 키가 지원됩니다.

  • MediaPlayer14 클래스에 대해 명시적으로 ProGuard 킵의 또다른 변종을 추가했습니다.

  • GooglePlay 로그인 타임아웃을 추가하고, 델리게이트로 onActiveResult 에서 GPG 로 전송합니다.

  • 허용되는 최대 가변 벡터 검사를 사용한 Adreno 2xx GPU 우회법을 추가했습니다.

  • (GExternalFilePath 에서 사용가능한) Android ExternalFilesDir 의 로컬 파일에 대한 접근이 가능합니다.

  • ES 3.x 지원 Tegra 디바이스에 렌더링 스레드가 허용됩니다.

  • 어플리케이션 라이프타임 이벤트 콜백이 이제 게임 스레드에서의 발생이 보장됩니다.

  • 유효한 (8x8 보다 큰) Android 창 크기를 캐시에 저장합니다.

  • AndroidPlatform 자동화 스크립트에서 cmd.exe 나 sh 를 사용하기 보다는 바로 adb 를 호출하도록 했습니다. 실행시 이 명령의 빈 출력을 반환하는 문제 해결하기 위해서입니다.

  • 스윙 닌자의 경우 Galaxy S4 Mini_4591 에서 스윙시 발판을 통과해 나가는 문제 해결을 위해 세팅을 변경했습니다.

  • 슬레이트가 흰색 빈 부분을 알아내는 데 FText (ICU) 를 사용하도록 변경하고, UMG 의 TextBlock 에 일부 유니코드 글자가 렌더링되지 않던 것을 고쳤습니다.

  • HDR 모자이크 패스의 톤매핑 도중 정밀도 문제 교정을 위해 포인트 샘플링으로 변경했습니다.

  • 타깃 환경설정에 대한 UE4 프로젝트가 빌드되었는지에 대한 이른 실패 검사로 Android .apk 대신 .so 를 검사합니다.

  • 패키징 도중 생성된 Android 설치 뱃치 파일을 청소했습니다.

  • Android 셰이더 오버라이드를 청소하고, 오버라이드 테스트가 유효하도록 더이상 실패한 셰이더 컴파일을 캐시에 저장하지 않습니다.

  • IAP 사용을 위한 환경설정에 따라 조건적으로 Android manifest 에 IAP 청구 허가를 추가합니다.

  • 바이너리 릴리즈 Android 라이브러리를 교정했습니다 (.a 파일에서 디버그 심볼만 벗겨냅니다).

  • 셰이더의 #extension 디렉티브 배치 관련 문제를 교정했습니다.

  • ES2 용 GL_OES_standard_derivatives 익스텐션을 감지하고, Android용 셰이더를 패치하여 빠진 dFdx, dFdy, fwidth 함수를 우회했습니다.

  • Android에서의 스레드 유사성 마스크 설정을 비활성화시켰습니다. big.LITTLE ARM 프로세서의 느린 코어에 대한 스레드 할당 관련 문제가 있었습니다.

  • Android에서 뷰포트 프레임 동기화를 비활성화시켜 타일 기반 GPU 렌더링 문제를 예방했습니다.

  • manifest 항목 없는 OBB 외부의 .pak 파일에 있는 파일이 이제 유효한 타임스탬프를 반환합니다.

  • 일부 Android 버전에서 포스 피드백 사용시 크래시가 날 수 있었던 것을 고쳤습니다.

  • MessageBox 클래스에 대한 ProGuard 세팅에 수정이 있었습니다.

  • Android에서 3D UMG 위젯이 위아래가 거꾸로 렌더링되던 것을 고쳤습니다.

  • FindNamedNetDriver 의 Android 디플로이 크래시를 고쳤습니다.

  • 셰이더에 빈 줄이나 여분의 줄 끝 공백이 있을 때 #version 300 es 로의 변환을 수정했습니다.

  • JNI 호출 변종 문제로 인해 Android에서 콘솔을 열 때의 크래시를 고쳤습니다.

  • OSX 에서의 자바 템플릿 경로 관련 문제를 고쳤습니다 (정슬래시만 사용합니다).

  • 무비 재생 시작 전 잡것이 표시되던 것을 고쳤습니다.

  • Android OpenGL ES 2 에서 ASTC 텍스처용 노멀맵이 수정되었습니다.

  • C++ 에서 Java 호출시 스레딩 크래시가 날 수 있던 것을 고쳤습니다.

  • Android 지원 파일이 아직 (관련되지 않았어서) 생성되지 않았을 때 일부 프로젝트가 회색으로 탈색되지 않도록 고쳤습니다.

  • 일부 폐기 처리된 호출을 수정했습니다.

  • 생성된 AndroidManifest.xml 내 reverseLandscape 및 sensorLandscape 오리엔테이션의 오타를 고쳤습니다.

  • Android 미디어 플레이어에 대한 픽스입니다.

  • Android 창 해상도 캐시가 수정되었습니다 (네이티브 창 핸들 변경을 제대로 처리합니다).

  • GetTimeStamp / SetTimeStamp 가 로컬 파일에 대해 적합한 AssetPath 를 검사합니다.

  • 크래시가 나면 로그를 제대로 비웁(flush)니다.

  • adb 디바이스 파싱을 개선, 탭 또는 공백 구분자를 받도록 했습니다.

  • PhysX 3.3.3 업데이트의 PX_COMPILE_TIME_ASSERT 재도입 관련 문제를 고쳤습니다.

  • ARMv8a 감지를 제대로 처리하고, ARMv7a 의 알려지지 않은 경우에 대한 기본 대비책을 추가했습니다.

  • onActivityResult에 앱 내부 구매에 대한 대비책이 추가되었습니다.

iOS

  • 델타 사본 복사 위치를 iOS 프로젝트 세팅의 환경설정 가능 프로퍼티로 추가시켰습니다.

  • 턴 기반 경기의 첫 단계가 iOS 용으로 구현되었습니다. 이 기능은 아직 실험단계 기능이라, 다음 릴리즈에 좀 더 제대로 지원될 것입니다.

  • iOS 용 입력 플러그인 추가를 위한 pull 요청 #651 을 통합시켰습니다.

  • 이제 게임 초기화 도중 실행 옵션을 나중에 사용할 수 있도록 App Delegate 에 저장합니다.

  • 사용자가 크래시 걱정 없이 어떤 모듈 코드든 활용할 수 있도록 라이프타임 이벤트가 이제 게임 스레드에서 호출됩니다.

  • iOS Facebook SDK 버전을 4.01 로 업그레이드했습니다.

  • 인스트루먼트 오류로 인한 실행 기능 실패시 출력 로그에 메시지를 추가합니다.

  • 디버그 실행파일 포함 iOS 에서의 시작 도중의 크래시를 고쳤습니다.

  • iPhonePackager 에서 모바일 프로비전을 프로비전 디렉터리에 복사하는데 대상 파일이 읽기 전용인 경우의 크래시를 고쳤습니다.

  • Mac에서 네트워크를 통해 iOs 디바이스에 핑을 할 때 관련된 크래시를 고쳤습니다.

  • 프로젝트 세팅 오타를 고쳤습니다: "OSVersion" 은 이제 "OS Version" 입니다.

  • 리모트 서버 이름을 공백으로 덮어썼을 때의 리모트 컴파일 실패를 고쳤습니다.

  • 일부 iOS 디바이스로의 파일 디플로이 도중 접속이 끊어질 수 있었던 문제를 고쳤습니다.

  • Windows에서 디플로이 서버를 활용하여 iOS 디바이스에 파일을 디플로이할 때의 크래시를 고쳤습니다.

  • iOS 7 및 iOS 8 용으로 UE4 를 컴파일할 때의 폐기 경고를 수정했습니다. 이를 통해 사용자가 최소 iOS 버전을 지정하면 엔진은 앱 스토어에 업로드시 해당 버전에 일치하게끔 제대로 빌드해 줍니다.

  • 와이파이 없이 시작한 뒤 게임 세션 일정 시점에서 와이파이를 켰을 때의 iAd 표시를 수정했습니다.

  • Mobile Content Scale 인수가 1, 1.5, 2 이외의 것으로 설정되었을 때의 검정 화면을 수정했습니다.

  • iPhonePackager 가 iTunes 업데이트 후 독립형 모드에서 디바이스를 감지하지 못하게 되던 문제를 고쳤습니다.

  • 프로젝트 이름에 밑줄이 있을 때 실행파일 이름이 plist 와 일치되지 않는 것을 고쳤습니다. 이전에는 plist 가 밑줄을 제거하여 IPA 가 무효화되었었습니다. 이제 양쪽 모두 밑줄이 유지됩니다.

  • Mac/Build.sh 가 이제 명령줄에 "iphoneos" 또는 "IOS" 를 넣어 엔진을 컴파일할 수 있습니다 (사용자와 Xcode 모두 사용 가능합니다).

  • iTunes 11 dll 보다 iTunes 12 Mobile Device dll 을 선호합니다. 이를 통해 두 버전의 dll 모두 존재할 경우 잘못된 버전을 선택하여 발생하던 크래시가 해결됩니다.

Linux

  • 이제 (드라이버에 적합한 익스텐션이 제공되는 경우) 가용 GPU 메모리 크기를 사용하여 텍스처 스트리밍에 대해 보다 미세한 제어가 가능합니다.

  • IDE 가 없어도 Linux에서 코드 프로젝트를 만들 수 있습니다.

  • Linux에서 컴파일할 때, 플랫폼 툴과의 원활한 통합을 위해서 컴파일러 오류는 gcc 같은 포맷으로 출력됩니다. 크로스 컴파일을 위해 MSVC 포맷도 유지됩니다.

  • 제목줄을 더블클릭하면 창이 최소/최대화 됩니다.

  • Linux 오디오 시스템은 이제 다수의 OpenAL 디바이스와 컨텍스트를 지원합니다.

  • LinuxNativeDialogs 는 ($XDG_CURRENT_DESKTOP 를 사용해서) 데스크톱 환경 감지를 시도하며, 적합한 위젯 툴키트(GTK 또는 Qt)를 사용하여 파일 열기/저장/등을 합니다.

  • LND (파일 열기/저장 등을 위한 대화창)은 이제 Ubuntu 14.04 이상에서 작동하도록 미리 빌드된 형태로 제공됩니다. 더이상 (그 OS 에서는) 로컬에서 써드 파티 라이브러리를 빌드할 필요가 없습니다.

  • Makefile 생성기가 이제 엔진 디렉터리 외부의 프로젝트에 대한 타깃을 생성합니다.

  • 사소: NVIDIA 드라이버로 야기되는 퍼포먼스 경고 다수를 수정했습니다.

  • 사소: 스팀 공유 오브젝트는 이제 동적으로 로드됩니다.

  • 사소: 공유 오브젝트 로드시 글로벌 심볼 해상도(RTLD_GLOBAL)로 전환합니다 (심볼 충돌이 있을 수 있으니 조심하세요).

  • SDL2 가 icculus (Ryan Gordon) 브랜치에서 업데이트되었습니다. UE4 에 필요한 변경사항 대부분이 올라갔습니다.

  • 이제 SpeedTree 를 Linux에서 사용할 수 있습니다.

  • 독립형 프로그램과 툴(예: 언리얼 프론트엔드 등)은 이제 OpenGL 3.2 가 아닌, 보다 폭넓게 지원되는 2.1 을 사용합니다.

  • UBT 는 이제 KDevelop 프로젝트를 직접 생성합니다. 인클루드와 디파인에는 여전히 수동 구성이 약간 필요합니다.

  • V-HACD (컨벡스 분해 라이브러리)가 Linux에 사용할 수 있게 되었습니다.

  • 다른 프로그램에서 애셋과 텍스트를 끌어 언리얼 에디터에 놓을 수 있게 되었습니다.

  • 백그라운드 셰이더 컴파일이 이제 CPU 리소스를 덜 사용합니다.

  • Linux 에디터에서 "실행" 명령이 작동하지 않던 것을 고쳤습니다.

  • 프로젝트를 공백이 포함된 디렉터리에 패키징해 넣을 때 "이상한" 파일명을 고쳤습니다.

  • Windows 스타일 (예: 애셋에 포함된) 경로를 Linux에서 로드 시도했을 때의 Linux 파일 시스템 레이어 크래시를 고쳤습니다.

  • 빈 파일명 로드 시도시 대소문자 구분 파일 매퍼의 크래시를 고쳤습니다.

  • 동일 IP 로 Linux 디바이스에서 추가하려 할 때의 언리얼 프론트엔드 크래시를 고쳤습니다.

  • 뷰포트에 오브젝트 끌어놓기를 수정했습니다.

  • 파일 열기/저장 대화창이 첫 번째를 제외한 모든 와일드카드를 무시하던 것을 고쳤습니다.

  • 팝업 창 소멸 이후 포커스가 제대로 옮겨가지 않던 것을 고쳤습니다.

  • 게임 창이 항상 크기조절 가능하던 것을 고쳤습니다 (이제 기본적으로 조절 불가능합니다).

  • 프로젝트( 또는 엔진)가 사용자 홈 디렉터리 외부에 위치해 있을 때 시작용 콘텐츠를 임포트할 수 없던 것을 고쳤습니다.

  • 플랫폼 추상 레이어를 사용해서 환경 변수를 Set/Get 할 수 없던 것을 고쳤습니다.

  • Linux에서 게임패드/컨트롤러의 입력 이벤트가 무시되던 것을 고쳤습니다.

  • Linux 창에 레이아웃 테두리가 없던 것을 고쳤습니다.

  • 메시지 박스가 긴 스트링을 제대로 표시하지 못하던 것을 고쳤습니다.

  • 알림창이 대화창을 막는 데다 가끔 포커스도 앗아가던 것을 고쳤습니다.

  • Linux 하에서 mono 가 UAT 명령줄 스위치를 자신의 것으로 혼동해서 발생하던 패키징 실패를 고쳤습니다.

  • 스플래시 화면 표시중 빨강-파랑 전환을 수정했습니다.

  • 독립형 게임의 기본 크기가 세팅과 상관없이 데스크톱 크기 창이던 4.7 의 퇴보를 고쳤습니다.

  • 애널리틱스용 머신 ID 보고를 고쳤습니다 (시스템의 /etc/machine-id 에 의존하며, 없는 OS 에서는 작동하지 않습니다).

  • 탭 드래그를 수정했습니다.

  • 독립형 프로그램에서 폰트 아틀라스 텍스처가 유효한 GL 컨텍스트 세트 없이 업데이트되는 것으로 인해 발생하는 텍스트 렌더링 문제를 고쳤습니다.

  • ~/Library 의 UAT 배치 로그 파일을 수정했습니다 (이제 ~/Documents/Unreal Engine 를 사용합니다).

  • 디버그 정보가 켜진 경우, UBT 가 Development 및 그 이상 빌드에 대해 특정 컴파일러 최적화를 비활성화시키던 것을 고쳤습니다.

  • LinuxNativeDialogs (LND) 를 다른 위치로 옮겼습니다. Engine/Binaries/Linux 의 구형 libLND*.so 파일을 지워야 할 수 있습니다.

  • UI 에 약간의 퍼포먼스 최적화가 있었습니다 (X 서버와의 통신시 에디터와 툴이 조금 덜 "수다스러울" 것입니다).

  • 사소: 바인딩할 IP 를 선택하면 INADDR_ANY (0.0.0.0) 로 바인딩되어 호스트명 해석을 할 수 없던 것을 고쳤습니다.

  • 사소: github 빌드의 바이너리 종속성을 보다 탄탄히 구성했습니다.

  • Linux 윈도잉 레이어의 포커스 문제에 대한 여러가지 픽스가 있습니다.

  • 에디터의 소스 컨트롤 (git, svn, p4) 통합이 Linux에 활성화되었습니다.

  • 에디터와 다른 툴은 이제 Content 디렉터리의 변화를 추적합니다 (inotify 기반 "directory watcher"(디렉터리 감시기)가 수정, 다시 활성화되었습니다).

  • 언리얼 엔진 (및 샘플 프로젝트들)은 Linux의 clang 3.6.0 으로 컴파일 가능합니다.

  • -Wreorder 경고로 인해 더이상 빌드가 실패하지 않습니다 (이 경고는 억제되지 않으며, -Werror 에서만 제외됩니다).

Mac

  • Mono 3.12 모노와의 호환성을 추가했습니다.

  • 명령줄 옵션에 'DisableMacDrawEvents' 를 추가, 애플의 OpenGL 프로파일러에서 크래시가 날 수 있던 OpenGL 이벤트 마커를 비활성화시킵니다.

  • Engine/Extras/Android 에 Mac TADP 인스톨러를 추가했습니다.

  • OpenEXR 이 지원됩니다.

  • 패키징된 게임에서의 CEF 프레임워크 사용을 지원합니다.

  • Mac에 번들로 들어있는 Mono 를 3.10 으로 업데이트했습니다.

  • Mac 창이 코어 애니메이션 레이어 뷰를 사용하도록 변경했습니다.

  • UFE 에서 Mac 서버 쿠킹/패키징이 가능합니다.

  • Mac에서 TexturePlatformAndroid 모듈을 활성화시키고, QualcommTextureConverer 라이브러리의 Mac 버전을 추가했습니다.

  • 사용자가 로그 창을 닫으면 cook on the fly 서버를 실행하는 에디터를 종료합니다.

  • Mac OS X 에서의 GPU 프로파일링을 수정, Shipping 빌드가 아니면 기본으로 켭니다.

  • 이를 통해 'stat unit' 과 'profile gpu' 로 렌더링에 드는 CPU 시간에 GPU 시간도 표시할 수 있습니다.

  • Mac 구현에 퍼포먼스 영향이 있어, 필요치 않거나 'DisableMacGPUTimestamp' 명령줄 옵션을 제공해 주지 않으면 비활성화됩니다.

  • 게임내 버벅임 감소를 위해 OpenGL 의 독립 셰이더 오브젝트 지원을 구현했습니다.

  • GL_ARB_separate_shader_objects 익스텐션이 항상 존재하는 Mac OS X 에서 기본적으로 활성화됩니다.

  • 독립 셰이더 오브젝트는 'OpenGL.UseSeparateShaderObjects' 콘솔 변수를 통해 껐다켰다 할 수 있습니다.

  • CoreAudio 를 사용해서 Mac용 VoiceModule 을 구현했습니다.

  • CoreAudio 입력에 대한 샘플 레이트 변환 경로를 수정했습니다.

  • OS X 에 대한 디버그 심볼 처리를 새로 추가하여 dSYM 번들 생성 및 실행파일의 심볼 제거가 가능합니다.

  • OS X .dSYM 은 이제 iOS 에서처럼 UBT 빌드 환경설정 옵션 'bGeneratedSYMFile' 을 활성화시키면 일반 파일로 방출됩니다.

  • 디버그 심볼 정보 질의용 초기 플랫폼 무관 API 를 추가, 다른 비호환 플랫폼에서 질의 가능한 범용 데이터베이스 포맷이 포함되어 있습니다.

  • Mach-O 바이너리에서 애플 디버그 심볼 데이터를 익스포트하는 DSymExporter 에다가 .dSYM 번들 내 페이로드를 포함해서 범용 포맷에 추가했습니다.

  • 새로운 범용 디버그 심볼 또는 CoreSymbolication 을 사용해서 디버그 심볼을 해석하는 데 쓸 수 있는 새로운 보조 프로그램 UnrealAtoS 를 추가했습니다.

  • CoreSymbolication 프라이빗 프레임워크의 직접 종속성을 제거했습니다. UnrealAtoS 프로그램에 동적으로 로드되는 것이지, 게임이나 에디터에는 필요치 않습니다.

  • OS X 에서 초기 SymbolDebugger & MinidumpDiagnostics 가 지원됩니다.

  • OS X 가 UI 를 사용하지 않는 UE4 앱(예를 들어 커맨드렛을 실행하는 에디터 등)을 App Nap (앱 수면) 모드에 넣지 않도록 했습니다.

  • 일반 Windows는 더이상 떠다니는 창 레벨을 사용하지 않는데, 일부 (디테일 패널같은 것을 메인 창에서 제거한 경우) 창은 더이상 부모 창 위에 표시되지 않는다는 뜻입니다.

  • Mac과 iOS 미디어 플레이어에 탐색이 추가되었습니다.

  • Mac OS X 에서의 컨벡스 메시 분해용 라이브러리를 HACD 에서 vHACD 로 전환, 가급적 OpenCL 을 사용합니다.

  • OS X 에서의 크래시 리포트를 캡처하는 데 자체 시그널 핸들러보다 안정적이고 확장성도 좋은 PLCrashReporter 리비전 #5ae3b0a 를 사용합니다.

  • 크래시가 난 어플리케이션 안에서 크래시 리포트를 클립보드로 자동 복사하는 기능을 껐습니다. 어플리케이션이 독에 걸려 제거할 수 없는 상황을 방지하기 위해서입니다.

  • 여러가지 심볼화 버그를 잡아 PLCrashReporter 크래시 리포트가 CrashReportClient 용 심볼을 제대로 표시합니다.

  • 미니덤프는 이제 PLCrashReporter 의 바이너리 포맷으로 저장됩니다.

  • Mac 빌드에 이제 XBoxOne 과 XBox360 스타일 변종 컨트롤러가 지원됩니다.

  • UE4 바이너리에 Mac 용 ASTC 인코더를 추가했습니다.

  • 에디터가 백그라운드에 있을 때 Mac 에서의 창 순서변경 처리를 추가했습니다.

  • CoreAnimation 과 OpenGL 인터랙션 방식을 변경, OS X 에서 보이는 깨짐 현상 문제를 피하도록 했습니다.

  • CoreAnimation 레이어가 NSOpenGLContext lock/unlock 동작을 사용해서 한 번에 하나의 스레드에만 컨텍스트에 대한 접근이 가능하도록 하여 뷰포트의 컨텍스트를 공유하도록 했습니다. 이를 통해 오직 하나의 스레드만 이 컨텍스트를 현재의 것으로 갖고, 언제든 그것을 사용해서 OpenGL 호출이 가능해 집니다.

  • 중간 렌더 버퍼를 사용하여 UE4 렌더 스레드에서의 백 버퍼 데이터를 CoreAnimation 스레드로 전송, 미완성 뷰포트 백 버퍼에서 읽으려는 시도를 하지 않습니다.

  • OS X OpenGL 컨텍스트 크기변경시 새로운 백 버퍼 리소스를 검정으로 소거 & 뷰포트 백 버퍼는 그 콘텐츠가 유효하다는 보장이 있을 때만 창에 보이고, 아니면 검정으로 소거시킵니다.

  • 실제로 렌더링되었던 렌더 버퍼에서만 읽기 시도합니다.

  • CoreAnimation 레이어의 OpenGL 컨텍스트를 비우도록 하며, 아니면 OpenGL 은 프론트 / 백 버퍼 전환시키지 않습니다.

  • Mac 번들 서브폴더의 dylib 처리 방식을 변경, Mavericks dlopen() 버그를 우회했습니다.

  • 최대 가능한 물리적 메모리 & 현재 OS X 에서 사용되는 가상 메모리 값을 제대로 구해옵니다.

  • OpenGL 에서 셰이더 렌더링이 제대로 되도록 hlslcc 에서 SV_Position 을 gl_FragCoord 로 제대로 변환합니다.

  • OS X 의 즉시 종료 기능을 껐습니다. 사용자가 UE4 를 완전히 종료하지 않고 Mac 리붓/셧다운 하려는 경우 현재 진행중인 작업이 제대로 완료되지 않아 데이터가 깨질 수 있기 때문입니다.

  • 또한 셧다운시 게임스레드 ID 를 제대로 리셋시켰는지 확인합니다. 그렇지 않으면 게임 스레드에서의 소멸에 의존하는 C++ 소멸자가 어서트 혹은 크래시가 날 수 있습니다.

  • FixDylibDependencies 스크립트에서 호출된 pushd / popd 툴의 출력을 껐습니다.

  • OS X 의 슬레이트 폰트 캐시에서 크래시나 메모리 깨짐이 발생할 수 있었던 사용 후 해제 (use-after-free) 버그를 잡았습니다.

  • 고정밀도 마우스 모드 종료시 Mac 마우스 커서가 올바른 위치로 이동되지 않던 것을 고쳤습니다.

  • OS X 에서 전체화면 모드 안팎으로의 전환시 가끔 잘못된 마우스 좌표가 보고되던 것을 고쳤습니다.

  • Mavericks 의 네이티브 저장/열기 대화창에서 폴더를 펼칠 때의 크래시를 고쳤습니다.

  • 자동 크기조정된 창을 끌 때 움직임이 덜컥거리던 문제를 고쳤습니다.

  • 일부 패키징된 게임에서 오디오가 빠지던 문제를 고쳤습니다.

  • 에디터로 돌아온 이후 탭 이동시 렌더링이 되지 않던 문제를 고쳤습니다.

  • Windows에서의 Mac 셰이더 쿠킹을 수정했습니다.

  • 주 모니터와 세로 크기가 맞지 않는 부 모니터에서 에디터 뷰포트에 마우스를 끌 때의 문제를 고쳤습니다.

  • OS X nvTextureTools 라이브러리를 리빌드하여 느린 텍스처 압축 시간을 해결했습니다.

  • Mac 에디터에서 창을 끌 때 툴바 아이콘이 강조되던 문제를 고쳤습니다.

  • 다수의 스레드상에 Windows 공유 포인터를 부적절히 사용할 때 Mac 에디터에 임의로 유발되는 크래시를 고쳤습니다.

  • 인텔 GPU 가 장착된 Mac에서의 스플라인 변형된 지오메트리 렌더링을 고쳤습니다.

  • 새 탭이 추가되었을 때의 Mac 메뉴 바 업데이트를 수정했습니다.

  • Slate<->Cocoa 좌표 변환을 일관되게 만들어서 잘못된 좌표계를 사용하지 않도록 하여, 창을 다른 디스플레이에 옮길 때의 에디터 드롭다운 메뉴 문제를 고쳤습니다.

  • OS X 에서의 GPU 벤더 ID 해석을 개선, 일부 신형 Mac 시동시의 중단 크래시를 피했습니다.

  • Mac에서 앱이 백그라운드일 때 툴팁과 컨텍스트 메뉴가 보이도록 했습니다.

  • Intel HD 3000 이 OS X 에서는 OpenGL ES2 로 보고하도록 만들어 더욱 단순한 포워드 렌더러를 사용하도록 했습니다.

  • VoiceModuleMac 의 CoreAudio 에 대한 샘플 레이트 변환 경로를 수정했습니다.

  • UE4EditorServices.app 서비스 설치 코드가 빌드 이후 실행되도록 옮겼습니다.

  • OS X 에서 어플리케이션 포커스를 잃고 얻을 때 저장하는 창 번호가 유효한 NSWindows 에 해당하는 지 확인합니다. 그렇지 않으면 앞으로 그 창 번호를 사용할 때 AppKit 안에서 크래시가 날 수 있습니다.

  • OS X 에서 창 제목줄의 녹색 버튼이 전체화면 토글보다는 최대화/복원 버튼으로 사용되도록 하여, 에디터와의 일관성을 유지하면서 슬레이트와 혼동되지 않도록 했습니다.

  • OS X 에서 CoreAudio Radio 컴포넌트를 한 번만 등록하며, 다시 접근할 필요가 있을 경우 등록을 재사용하면 됩니다.

  • 애플의 Client Storage 익스텐션 사용 후 OpenGL 언팩 얼라인먼트를 리셋시킵니다. 잇따르는 작업에서 잘못된 값을 사용하여 발생하는 크래시 해결을 위해서입니다.

  • Mac OS X 고정밀도 마우스 처리 작업을 다시 하여 Windows 동작을 더 잘 시뮬레이션해 냅니다.

  • 랙 현상을 줄이기 위해 고정밀도 마우스 모드에 있을 때는 기본적으로 이벤트 합침(coalescing) 기능을 끕니다. 이는 r.Mac.HighPrecisionDisablesMouseCoalescing 콘솔 변수로 제어 가능합니다.

  • 추가적으로 기본은 아니지만 r.Mac.HighPrecisionDisablesMouseAcceleration 콘솔 변수를 사용해서 고정밀도 모드에서 OS X 의 마우스 가속 커브를 끌 수 있습니다.

  • ?FMacOpenGL::PlatformGetAvailableResolutions 의 모든 해상도에 현재 주 화면의 백킹 스케일 인수를 곱하여 슬레이트에 둘러싼 창보다 큰 해상도를 보고하지 못하도록 했습니다.

  • Mac에서 시스템 제목줄이 있다면 제외시키고 창 크기 & 위치 계산을 단순화시켜, 전체화면을 떠날 때 창이 올바른 위치로 돌아가도록 했습니다.

  • 시스템 모달 창이 표시중일 때 마우스 클릭이 에디터 창을 무시하던 문제를 고쳤습니다.

  • 이제 Steam 라이브러리는 그것을 사용하는 패키징된 게임에 포함됩니다.

  • Mac OS X 에서 'which mono' 를 사용해서 고정된 경로가 아닌 다른 로컬 모노 설치를 사용합니다.

PlayStation 4

  • 디버그 빌드가 이제 Gnm 과 Gnmx 의 디버그 버전에 링크됩니다.

  • 느슨한 스텐실 클리어가 이제 GPU 퍼포먼스 향상 및 버벅임 감소를 위해 컴퓨트 셰이더 대신 Gfx 셰이더를 사용합니다. 컨텍스트 롤 방지를 위해 스텐실 컨트롤 캐시도 합니다.

  • 공식 Morpheus SDK 2.0 가 초기 지원됩니다.

  • PS4 세팅 편집용 PS4 Platform Editor Module 을 추가했습니다.

  • PS4 패키징 세팅을 PackagingDataPS4.txt 에서 에디터로 옮겼습니다.

  • 패키징시 ISO 이미지를 만드는 기능을 추가했습니다.

  • 시스템 소프트웨어 버전과 어플리케이션 SDK 버전 불일치에 대한 실행시간 감지를 추가했습니다.

  • PS4 에 Matching2 검색 특성을 지원합니다.

  • SDK 2.5 를 지원합니다.

  • PS4 에 언리얼 미디어 프레임워크를 지원합니다. 파일 포맷은 소니의 비디오 디코더에 제한됩니다. 현재 .mp4 와 AAC 오디오만 지원합니다. 자세한 정보는 소니 비디오 플레이어 문서를 참고하세요.

  • PS4 에 가상 키보드가 지원됩니다.

  • PS4 에 IME 키보드 지원을 켰습니다. 키보드는 이제 테스트 키트와 쉬핑 빌드에서 사용 가능합니다.

  • 렌더 타깃 소거시 이제 ExcludeRect 를 계산에 넣어 중복 클리어를 해결합니다 - GPU 시간이 약 0.5ms 절약됩니다.

  • 전체 LCUE 코드를 엔진에 올렸습니다. 이제 LCUE 디파인과 콘스턴트를 사용해서 프로젝트를 쉽게 변경할 수 있습니다.

  • PS4DevKitTool 를 사용한 디바이스 발견 및 모니터링을 향상시켰습니다.

  • 셰이더 하나에 가능한 최대 셰이더 리소스(텍스처와 샘플러) 수를 32 로 늘렸습니다.

  • 멤버 초기화 순서 오류가 이제 오류가 아닌 경고입니다.

  • Morpheus .ini 세팅은 이제 에디터에서 편집->프로젝트 세팅->Plugins->Morpheus 로 볼 수 있는 표준 세팅입니다.

  • 이제 GenerateProjectFiles.bat 실행시 Visual Studio 용 PS4 디버그 비주얼라이저가 자동 설치됩니다.

  • PS4 가 명령 전송을 프레임 끝에 한 번씩 하기보다는, 전체 프레임에 걸쳐 GPU 에 주기적으로 명령을 전송합니다. 이 방식 토글을 위한 r.PS4ContinuousSubmits 콘솔 변수를 추가했습니다.

  • PS4 지원 감지가 SDK 감지에만 의존합니다. 소스 코드가 없는 아티스트는 이제 에디터에서 PS4 가 타깃으로 잘 보일 것입니다.

  • 쉬핑 패키지는 이제 에디터의 프로젝트 세팅 | 프로젝트 | 패키징 에서 "For Distribution" (배포용) 옵션을 켰을 때만 제출용으로 빌드됩니다.

  • 셰이더 sdb 파일 생성시 이름 충돌을 피하기 위해서 이제 소스 해시가 사용됩니다.

  • 모든 크기의 볼륨 텍스처를 제대로 업데이트하기 위해 컴퓨트 셰이더를 추가했습니다.

  • 신형 Morpheus HMD Server 가 지원됩니다. Morpheus PC 프리뷰가 다시 작동합니다.

  • 렌더 스레드가 단일 CPU 코어에 잠기게 만드는 버그를 잡았습니다. 가비지 컬렉션을 버벅이게 만드는 여러가지 문제가 해결됩니다.

  • 텍스처 스트리밍 예산 산정의 버그를 잡았습니다. 이제 텍스처 풀 크기가 제대로 산정됩니다.

  • 디렉터리 생성시 전체 디렉터리 체인을 제대로 생성하지 못하던 버그를 잡았습니다. 이로 인해 CookOnTheFly 시 가끔 이전 데이터가 로드되었습니다.

  • Morpheus ApplyDistortion 의 크래시를 고쳤습니다.

  • 렌더 타깃 관리의 병렬 렌더링 크래시를 고쳤습니다.

  • Morpheus 로 렌더링할 때 크래시가 발생할 수 있던 것을 고쳤습니다.

  • 3d 오디오 사용시 시동 크래시를 고쳤습니다.

  • 카메라가 오브젝트의 에지를 처음 지나쳐 패닝할 때 까매지는 부작용을 고쳤습니다.

  • 에디터나 UFE 셧다운시 devkit 접속이 자동 해제되던 것을 고쳤습니다.

  • 새로운 Burley 디퓨즈 모델이 PS4 에서 '검정색 점' 부작용이 생기던 것을 고쳤습니다.

  • Morpheus 렌더링의 '검정 면' / 클리핑 부작용을 고쳤습니다.

  • 특정 볼륨 텍스처 포맷이 제대로 업데이트되지 않는 버그를 잡았습니다.

  • Morpheus 의 Canvas 렌더링을 수정했습니다. 콘솔과 디버그 텍스트가 이제 제대로 수렴할 것입니다.

  • CMASK 와 HTILE 이 PS4 에서 완전 병렬 렌더링과 작동하도록 수정했습니다.

  • 기본 디바이스가 없을 때의 PS4DevKitUtil 크래시를 고쳤습니다.

  • /saved 디렉터리 아래 .pak 파일로 유발되는 오류를 고쳤습니다.

  • PS4 에서 잘못된 유니폼 버퍼로 인해 깜빡이는 그래픽 오류를 고쳤습니다.

  • 오클루전 쿼리의 잘못된 버텍스 버퍼로 인해 PS4 에서 깜빡이던 것을 고쳤습니다.

  • PS4 의 초기 힙 크기 출력이 메가바이트 단위로 제대로 출력되도록 고쳤습니다.

  • Morpheus 디스토션 렌더링이 가끔 잘못된 블렌딩 상태를 갖던 것을 고쳤습니다.

  • Morpheus 디스토션 셰이더가 한 번만 실행되도록 수정했습니다.

  • Morpheus 가 vsync 하에서 찢어지던 부작용을 고쳤습니다.

  • NULL 키보드 글자가 전송되어 디버그 콘솔 히스토리 및 자동완성 관련 문제가 유발되던 것을 고쳤습니다.

  • LCUE 를 우회하는 드로 콜 인스턴스 수가 항상 1 이 되도록 수정했습니다.

  • PS4 OnlineId 레졸루션의 메모리 덮어쓰기에서 크래시가 날 수 있던 것을 고쳤습니다.

  • submitdone 으로의 불필요한 호출에 관계된 잠재적 크래시를 고쳤습니다.

  • 테스트 키트에서의 PS4 빌드 크래시를 고쳤습니다.

  • 리플렉션 캡처가 잠재적으로 메모리를 소진시킬 수 있었던 것을 고쳤습니다.

  • 화면 오프셋 정렬이 Gnm 디버그 어서트를 유발하던 것을 고쳤습니다.

  • srgb 텍스처가 업데이트 후 너무 어두워지던 것을 고쳤습니다.

  • DualShock4s 에서 터치 수가 변하면 터치패드가 잘못된 OnTouchMoved 이벤트를 보고하던 것을 고쳤습니다.

  • 사용자가 SDK 2.0 만 있을 때의 Windualshock 모듈 오류를 고쳤습니다.

  • 다수의 슬라이스 클리어시 잘못된 셰이더 타입이 사용되던 것을 고쳤습니다.

  • 에디터에서 Morpheus 프로젝트 세팅 전체를 활성화시켰습니다.

  • PS4 파일 시스템에 대한 경로 정규화 코드를 최적화시켰습니다. 이제 콘솔 자동완성 목록이 보다 빠르게 채워지며, 비-패키지 로딩 시간이 약간 줄었습니다.

  • PS4 가 필요할 때만 스트림 소스를 설정하도록 최적화시켰습니다.

  • PS4 는 더이상 엔진 레벨 PS4Engine.ini 에서 FXAA 를 기본으로 사용하지 않습니다.

  • 뷰포트를 렌더 타깃에 제한시키는 기능을 제거했습니다. 여기에 의존하는 일부 공유 코드가 발생하지 않기 때문입니다 (씬 캡처 관련 문제가 해결됩니다).

  • Shadow Quality 콘솔 변수가 이제 제대로 기본 설정됩니다.

Xbox One

역주: 알려진 국내 엑박원 개발사가 없는 관계로 번역 제공하지 않습니다.

  • Added catching of unhandled exceptions on Xbox One.

    • Added minidump support that will be invoked by default on unhandled exceptions.

    • Added translation for symbols to the stack produced on unhandled exceptions.

    • Added flushing of log files for unhandled exceptions.

  • Added compiling of shaders to GPU bytecode, with no intermediate format stored, to save memory and slightly improve shader loading speed.

  • Added ICU libraries and support for Xbox One.

  • Added just in time generation of package and deployment resources based on project settings.

    • Removed the need to manually merge engine and project AppxManifest templates.

    • Added common packaging and deployment settings under the Xbox One Platform Settings in the Editor.

    • Changed the package name and application name/entrypoint to be named based on the Product Id and Project Name from the project settings. This removed the need for projects created for Xbox One to avoid spaces and symbols in their uproject file names.

  • Added localization support for text resources in packaging and deployment.

    • Added generation of localized string resources such as display name and description fields.

    • Added support for localized image resources such as logos and splash screens.

  • Added support for packaging and deploying to multiple cultures on Xbox One.

  • Added support for titles to reclaim the 4.5% Kinect GPU allocation when Kinect is not in use.

  • Added support for using directly generated AUMIDs to launch projects on Xbox One. Removed the reliance on project file or folder name to launch Xbox One projects.

  • Changed the memory bus priority to favor the GPU, to improve the performance of GPU bound projects.

  • Changed Xbox One XDK detection to use the XDK_EDITION number rather than XDK_VER, as it is a more human readable YYMMQQ format.

  • Enabled CPU core thread affinity system.

  • Added better core mapping to improve performance.

  • Enabled multi-threaded garbage collection on Xbox One.

  • Enabled the use of the 7th CPU core by default.

    • Adjusted XboxOneMisc::NumberOfCores() to return the correct number of cores, taking this change into account.

  • Optimized 3D texture clearing for translucent lighting.

  • Optimized occlusion query system to issue queries in batches.

  • Optimized to the constant ring buffer by using 4MB pages.

  • Reduced duplication of generated files in Xbox One packaging, which also improved packaging performance.

  • The Xbox Live online subsystem's leaderboard interface is now able to read leaderboard rankings.

  • Note that to write scores to an Xbox Live leaderboard with the online subsystem, you currently have to use the Events interface.

  • Updated the default XDK to the April 2015 version.

  • Fixed a crash that could occur when suspending or resuming a title.

  • Fixed a memory leak in the Render Hardware Interface (RHI).

  • Fixed a parsing issue that could cause crashes when building the XboxOnePDBFileUtil with certain Visual Studio setups.

  • Fixed a texture popping issue that occurred when streaming out mip levels of textures that are still in use by the GPU.

  • Fixed an issue that could cause the XboxOnePackageNameUtil to produce errors when the working directory was not set as expected.

  • Fixed an issue that could cause Xbox One development kits to display corrupted aliases in tools.

  • Fixed flickering and a crash in the occlusion query system.

  • Fixed memory accounting in texture streaming pool. This problem caused titles to be unable to stream textures after a long time.

  • Fixed memory corruption that could occur on shutdown of the Xbox One target platform module.

  • Removed a hardcoded limit on the number of pages for the constant ring buffer. This fixes a crash in large games.

  • Removed an unnecessary and slow memory barrier function.

VR

  • GearVR 퍼포먼스 세팅을 이제 Engine.ini 에서 설정 가능합니다. [GearVR.Settings] 아래 CpuLevel / GpuLevel 값 설정이 가능하며, 기본값은 2 / 2 입니다. 유효한 값은 Oculus Mobile SDK 문서를 참고하세요.

  • GearVR 프로젝트는 엔진 config.ini 를 편집하여 30 프레임으로 고정시킬 수 있습니다:

    • [GearVR.Settings]

    • MinimumVsyncs=2

  • GearVR 프로젝트는 더이상 GearVR 용으로 패키징하는 데 코드 빌드를 요하지 않습니다. 'package for GearVR' (GearVR 용 패키징)을 선택하면 실행시간에 플러그인이 자동 활성화됩니다. GearVR 빌드 제작에 필요한 것은 최소 SDK 를 19 로 설정하고, GearVR 용으로 패키징하고, Engine\Build\Android\Java\assets 디렉터리에 osig 파일을 넣으면 됩니다.

  • Leap Motion 플러그인이 이제 콘텐츠 전용 프로젝트에서 사용 가능합니다.

  • Oculus mobile SDK 를 GearVR 용 0.5 로 업데이트했습니다.

  • 이제 GearVR 에서 'OVRGLOBALMENU' 실행 명령을 호출하면 글로벌 메뉴가 제대로 뜹니다.

  • SteamVR 용 시작 실행을 수정했습니다.

HTML5

  • 실험단계: HTML5 게임에서 요청시 맵을 다운로드할 수 있도록 했습니다. 시작 패키지 크기와 부팅 시간을 줄이기 위해서입니다 [ 프로젝트 세팅 -> HTML5 에서 켤 수 있습니다 ].

  • 실험단계: 더욱 정확한 진행상황 막대와 나은 스타일의 대체 HTML5 게임 템플릿을 추가했습니다 [ 프로젝트 세팅 -> HTML5 에서 켤 수 있습니다 ].

  • 실험단계: 웹소켓을 사용한 HTML5 플랫폼 멀티플레이어가 지원됩니다 [켜는 방법은 같은 디렉터리의 Readme.md 파일을 참고하세요 ].

  • HTML5 는 패키징시 기본으로 Pak 파일을 사용합니다. Pak 파일은 HTML5 용으로 압축됩니다.

  • 에디터 UI 에서 HTML5 디바이스와 브라우저를 추가 / 제거할 수 있습니다.

  • 이제 에디터 안에서 HTML5 실행을 위한 기본 웹 서버 포트를 환경설정 가능합니다.

  • HTML5 의 어서트가 이제 그 어서트를 유발한 코드 내 위치를 표시합니다.

  • HTML5 SDK 세팅을 이제 에디터 안에서 환경설정 가능합니다.

  • 브라우저 전체화면 전환이 수정되었습니다.

  • 마우스 잠금이 요청된 경우 포인터 숨김에 대한 제어가 개선되었습니다.

  • 로컬 스토리지에 저장된 게임 접근시의 크래시를 고쳤습니다.

  • HTML5 에서 커스텀 폰트가 제대로 나타나지 않던 것을 고쳤습니다.

  • JS 가 완전히 파싱하기 전 HTML5 가 유용한 오류 메시지를 내놓지 못하던 것을 고쳤습니다.

  • HTML5 UMG 위젯에 잘못된 글자 입력과 HTML5 에 잘못된 키보드 매핑을 고쳤습니다.

  • 라이트맵의 파랑/빨강 채널이 HTML5 에 바뀌어 있던 것을 고쳤습니다.

  • 디벨롭먼트 빌드를 축소시키고 디벨롭먼트 및 쉬핑 빌드 양쪽에 대한 심볼 파일을 생성합니다. 이제 쉬핑 빌드에 읽을 수 있는 콜스택이 생성됩니다.

  • HttpModules 의 HTML5 구현에 여러가지 픽스가 적용되었습니다.

Windows

  • 이제 32 비트와 64 비트 Windows 양쪽 다 바이너리 릴리즈의 타깃 플랫폼으로 완벽 지원됩니다 (기존에 Win32 지원은 쉬핑 환경설정에, Win64 지원은 디벨롭먼트 환경설정에 제한되어 있었습니다).

  • win32 패키징시 타깃 운영 체제를 Windows XP 로 선택했을 때 바이너리를 찾을 수 없던 문제를 고쳤습니다.

  • Rocket 빌드에 Windows XP 를 비활성화시켰습니다. 바이너리 릴리즈의 일부로써는 WinXP 에 대한 소스 또는 바이너리를 생성해 제공하지 않습니다.

  • Windows XP 패키징시 CrashReporter 가 종속성으로 잘못 추가되던 문제를 고쳤습니다.

  • 일부 아이콘이 빠져있을 때의 패키징 크래시를 고쳤습니다.

  • VS2013 컴파일러 사용시 Windows XP 컴파일러 오류를 고쳤습니다.

  • Windows 8.1 에서 portmidi 크래시에 대한 픽스를 통합시켰습니다.

렌더링

  • 몇몇 오브젝트에 (랜드스케이프 또는 FarShadow 마킹된 오브젝트) 여분의 섀도 캐스케이드로 그림자를 드리우도록 하는 기능을 추가했습니다.

  • 셰이더 복잡도 뷰 모드에 (GPU 프로파일링용) 데칼을 추가했습니다.

  • 실행시간에 풀 밀도 조절을 위한 'grass.densityScale' 콘솔 변수를 추가했습니다.

  • 계층형 인스턴스드 스태틱 메시의 하위트리에 대한 오클루전 쿼리를 추가했습니다.

  • 단순 병렬 처리를 쉽게 할 수 있도록 해주는 병렬 for 를 추가했습니다.

  • 블룸의 모양을 변경할 수 있는 r.Bloom.Cross 콘솔 변수를 추가했습니다 (실험단계). 도움말을 참고하세요.

  • 실험 미세조정을 위한 r.DiffuseColor.Min 과 r.DiffuseColor.Max 를 추가, 곧 r.BaseColor. and r.Metallic. 으로 바뀔 것입니다.

  • 셰이더 디버그 정보 덤프시 너무 긴 경로 우회를 위한 r.DumpShaderDebugShortNames 를 추가했습니다.

  • 실행시간 iOS 회전이 지원됩니다.

  • iOS 프로젝트 세팅 페이지에서 가로 세로 오리엔테이션을 둘 다 선택하면 디바이스가 회전됨에 따라 동적으로 회전됩니다.

  • 빌드 세팅 아래 DistanceFieldReplacementMesh 지원을 추가했습니다.

  • HDR 시각화를 위해 중앙 픽셀 아래 값 표시를 추가했습니다 (블룸/HDR 미세조정에 좋습니다).

  • 에디터 내 텍스처 포맷 관련 옵션이 추가되었습니다.

    • 텍스처는 2 제곱수 크기의 정사각 또는 직사각형이 되도록 자동으로 패딩을 넣습니다.

    • 텍스처는 배경에 칠해진 입체색을 제거하여 마스크드 알파 채널을 만들 수 있습니다 (예로 청록색이나 자홍색 배경을 크로마키를 통해 스프라이트 시트로 빼낼 수 있습니다).

      image alt text

  • 여러 씬에서 오클루전 쿼리보다 느린 경향을 보이는 HZB 를 기본으로 껐습니다.

  • 고해상도 스크린샷 렌더링시 에디터 기즈모를 끕니다.

  • PS4 에 디스턴스 필드 AO 와 레이 트레이스드 섀도가 지원됩니다.

  • r.AOHistoryDistanceThreshold 를 기본값 20 으로 추가, 미세조정을 통해 너무 많이 깜빡이지는 않게 하면서 캐릭터 뒤의 유령 현상 해결을 위해 미세조정 가능합니다.

  • 버텍스 특성을 16 개 미만으로 보고하는 Android 디바이스 지원을 활성화시켰습니다.

  • 피처 레벨 ES3.1/메탈에 대한 모바일 프리뷰가 실험단계 기능으로 지원됩니다.

  • SpeedTree 바람의 돌풍 파라미터가 노출되었습니다.

  • 스태틱 메시 블루프린트 노드에 SetForcedLodModel 을 노출시켰습니다 (StaticMesh->Rendering->LOD property)

  • GPU 프로파일러: vsync 를 켜고 GPU 프로파일을 캡처한 경우 경고를 표시합니다.

  • 에픽 엔진퀄리티 세팅에서 하이 퀄리티 블룸이 가능합니다.

  • PS4 용 GPU 프로파일러 인터페이스를 구현했습니다.

  • 이제 적당한 포맷과 다른 RHI 에 이미 작동하는 GPU 프로파일러 함수성을 구합니다 (r.profilegpu.root).

  • 스트링 비교 파싱 셰이더를 줄여 에디터 시동 시간을 향상시켰습니다.

  • 테셀레이션 퍼포먼스가 향상되었습니다. 최대 테셀레이션 인수를 15 로 올렸습니다.

  • 텍스처가 아닌 머티리얼을 가지고 타일을 렌더링할 수 있도록 해주는 GitHub 함수성을 통합시켰습니다.

  • Virtual 머티리얼 함수가 월드 레이트레이싱된 면에 대해 월드 유닛 단위로 편성합니다.

  • 머티리얼에 옵션을 통해 정확한 속도로 실행시 속도 G-버퍼로의 출력을 제거할 수 있습니다.

  • 릿 머티리얼이 아닌 것(예로 서브서피스 프로파일)에 대해 메탈릭 채널이 지원됩니다.

  • 스태틱 메시 애셋에 대한 MinLOD 세팅과 컴포넌트에 덮어쓰기가 추가됩니다.

  • 퍼포먼스 향상을 위해 GBuffer 의 러프니스를 더 나은 곳으로 옮겼습니다.

  • CPU 의 스켈레탈 메시 업데이트를 최적화시켰습니다.

  • 스켈레탈 메시 사용시 모바일 OpenGL 용으로 업로드되는 유니폼 수를 줄였습니다.

  • DYMANIC_CAST_XXX_RESOURCE 매크로를 제거했습니다.

  • 명확성 개선을 위해 RHI 리소스 매크로를 제거했습니다.

  • 병렬 렌더링을 DX12 와 아무 PC RHI 에서도 가능하게 만들기 위해 그에 관련된 ifdef 를 다수 제거했습니다.

  • SetRenderTarget 은 이제 원하는 DepthAndStencil 접근을 지정해야 합니다.

  • SpeedTree 임포터 개선

    • 노멀 맵이 없을 때에도 양면 라이팅 픽스가 포함되었습니다.

    • 칠해진 폴리지에 대한 LOD 옵션을 추가했습니다.

    • 리임포트시 (머티리얼 구성이 크게 바뀌지 않은 한) 변경된 머티리얼이 유지됩니다.

    • 리임포트시 텍스처도 리임포트되도록 텍스처를 건드립니다.

    • (MS_VertexAnimationTools_MorphTargets 관련) 셰이더에서 로컬에서 월드로 받는 트랜스폼이 일어나는 방식을 변경, 메시 파티클과도 작동하도록 했습니다. (버텍스 셰이더에서 로컬>월드 한 다음 픽셀 셰이더에서 월드>탄젠트 합니다).

  • 인스턴스트 스태틱 메시 UpdateTransform 메서드에 렌더 스레드 업데이트 방지를 위한 인수를 추가했습니다.

  • help 명령에 빠진 콘솔 명령과 실행 명령을 추가했습니다.

  • SGC540 GPU 를 사용하는 일부 Android에서의 셰이더 컴파일러 실패에 대한 우회책을 추가했습니다.

  • D3D11 SM5 가 유일한 타깃인 경우에만 BC6H 와 BC7 텍스처 포맷을 허용합니다.

  • Ctrl+B / Ctrl+E 로 데칼 액터에 대해 연관된 데칼 머티리얼 검색 / 편집이 가능합니다.

  • '라이팅만 빌드' 는 BSP 빌드를 먼저 트리거하고, 철지난 BSP 로 인해 라이트매스에 0 사이즈 매핑 요청이 전송된 경우 RenderTestMap 의 크래시를 고쳤습니다.

  • 모바일 프리뷰 렌더링 사용시의 에디터 그리드 렌더링을 청소했습니다.

  • 콘솔용 셰이더에 에디터 전용 기능을 비활성화시켰습니다. 셰이더 퍼포먼스가 약간 향상되었습니다.

  • 인스턴스가 없는 인스턴스드 스태틱 메시 컴포넌트에 대한 가짜 바운드를 고쳤습니다.

  • 스켈레탈 메시 임포트시 깨진 UV 가 생길 수 있었던 버그를 잡았습니다.

  • 스테레오 렌더링에서의 머티리얼 누수를 잡았습니다.

  • OpenGL 의 메모리 덮어쓰기 문제가 랜덤 크래시를 내던 것을 고쳤습니다.

  • 커다란 섀도 맵이 사용중일 때 발생할 수 있는 포워드 렌더러 (모바일) 관련 섀도 맵 렌더링 버그 다수를 잡았습니다.

  • 사용되지 않을 섀도 맵 계산을 피하기 위한 약간의 최적화를 추가했습니다.

  • 콘솔에서 RHI 스레드를 사용한 렌더링시 가끔씩 크게 버벅이던 것을 고쳤습니다.

  • FCanvasTile 아이템 생성자 중 하나의 초기화 문제를 고쳤습니다.

  • Metal 에서 본이 75 개 이상인 스켈레탈 메시를 사용할 때의 문제를 고쳤습니다.

  • BMP 스크린샷이 미지원 포맷으로 출력되던 것을 고쳤습니다.

  • 셰이더 샘플러 파라미터가 단순 셰이더와 함께 버려질 수 있었던 버그를 잡았습니다. ES2 셰이더에만 영향을 끼칩니다.

  • 렌더 데이터 없이 스태틱 메시를 등록하여 유발되는 크래시를 고쳤습니다.

  • 자동 라이트맵 UV 의 크래시를 고쳤습니다.

  • 인스턴스드 스태틱 메시가 너무 큰 라이트맵 또는 섀도맵을 사용하려 해서 발생하는 크래시를 고쳤습니다. 인스턴스드 스태틱 메시에 대한 라이트맵 크기가 자동으로 맞게끔 축소됩니다.

  • 스테레오 렌더링의 DBuffer 데칼을 고쳤습니다.

  • 머티리얼에 노출되는 데칼 마스크 값을 고쳤습니다.

  • DepthOfField 머티리얼 표현식이 다시 올바른 값을 반환하도록 고쳤습니다.

  • 계층형 스태틱 메시 컴포넌트의 블루프린트 CDO 를 편집하면 트리가 빌드되지 않던 것을 고쳤습니다.

  • 양면 폴리지의 에너지 보존 법칙을 수정했습니다.

  • 실험단계 기능 ForEachLight (픽셀당 반투명 라이팅)을 수정했습니다.

  • 첫 데칼이 렌더링되지 않던 것을 고쳤습니다.

  • 커다란 세로 메시가 잘못 컬링되던 HZB 오클루전 버그를 잡았습니다.

  • 직교 카메라의 잘못된 컬링을 고쳤습니다.

  • 블루프린트에서 MIC 텍스처에 대한 비-UTexture 사용시의 문제를 고쳤습니다.

  • 모바일 렌더러가 뎁스 테스트가 꺼진 반투명 머티리얼을 무시하던 것을 고쳤습니다.

  • 클로스 관련 모션 블러 문제를 고쳤습니다.

  • 풀에 저장된 리소스가 릴리즈 된 바로 그 프레임에 다시 메인 풀로 병합되던 것을 고쳤습니다. DynamicMeshBuilder 관련 무작위적인 렌더링 문제가 수정됩니다.

  • PostprocessMaterial StaticSwitch 함수성을 수정, 일부 희귀한 경우 나타나던 경고를 피했습니다.

  • r.DumpingMovie 콘솔 변수가 더이상 코드를 트리거시키지 않던 것을 고쳤습니다.

  • r.Shadow.MaxResolution 이 실행시간에 업데이트되지 않는 것을 고쳤습니다.

  • 블룸 관련 희귀한 시각적 부작용을 고쳤습니다.

  • 모바일 렌더러에 몇 가지 스태틱 메시 리스트 렌더링이 빠져있던 것을 고쳤습니다.

  • 렌더 타깃에 씬 캡처 2D 를 추가하는 것이 레벨의 모션 블러 세팅을 덮어쓸 때의 크래시를 고쳤습니다.

  • bAllowAsynchronousShaderCompiling=false 인 경우 셰이더 매니저 셧다운시의 크래시를 고쳤습니다.

  • 일부 에디터 아이콘이 두 배 크기로 그려지던 상황을 고쳤습니다.

  • AllowAsyncRenderThreadUpdates 관련 사소한 문제를 몇 가지 고쳤습니다.

  • SpeedTree 셰이더가 정확한 속도를 출력해도 올바른 바람 속도를 구하지 못하는 것을 고쳤습니다.

  • 일부 플랫폼에서 분할화면 포스트 이펙트가 새는 문제를 고쳤습니다.

  • SubsurfaceScatteringProfile 퀄리티 문제를 수정, 최근의 전해상도 혼합이 변색을 유발했었습니다.

  • 디스플레이스먼트 매핑의 혼합 UV1 을 수정했습니다.

  • 축 탈피 행렬 투영 행렬로 Temporal AA 를 수정했습니다.

  • 패키징된 빌드에 Text Render 컴포넌트가 나타나지 않던 것을 고쳤습니다.

  • LPV 포함 SubsurfaceProfile 셰이더 모델을 사용하는 것을 수정했습니다.

  • ViewProjectionMatrix 가 특정 렌더링 패스에 대해 설정되지 않아 UMG 렌더링 관련 문제를 유발하던 것을 고쳤습니다.

  • 스크린 샷 퍼포먼스를 향상시켰습니다.

  • 머티리얼에 프로퍼티 매트릭스 사용시 경쟁 조건 회피를 위해 더이상 편집 가능하지 않습니다.

  • 폭/높이가 1024 초과인 큐브맵 임포트시 처리 시간을 단축시켰습니다.

  • r.GBuffer 프로젝트 세팅을 제거했습니다.

  • 스카이라이트는 전에 캡처된 적이 없는 경우 활성화시에만 캡처됩니다.

  • 스카이라이트 색이나 강도 변경시 렌더링 스테이트를 재생성하지 않는 빠른 (완전 정적인 드로 리스트 재생성) 패스를 추가했습니다.

  • 게임 콘솔에서도 에디터에서처럼 자동완성 항목이 소팅됩니다.

  • 빌드되지 않은 오브젝트가 많은 스테이셔너리 라이트는 이제 개별 프레임마다 예비로 CSM 을 사용합니다.

    • 등록 도중 빌드되지 않은 상호작용 다수가 블루프린트 컨스트럭션 스크립트에 교정되지만 스테이셔너리 라이트는 계속해서 빌드가 되었다고 생각하게 되는 버그가 수정됩니다.

  • UBillboardComponents 에 바운드 렌더링이 제대로 됩니다.

  • 커다란 뷰 벡터로 인해 잘못된 정규화 결과물이 생성될 수 있었던 일부 모바일 GPU 에서 발생하는 셰이더 버그를 우회했습니다.

FX

  • 선택된 나이아가라 액터에 대해 연관된 애셋을 검색 / 편집하는 단축키 Ctrl+B / Ctrl+E 가 지원됩니다.

  • 나이아가라의 함수 호출 첫 패스입니다.

  • 본 소켓 모듈을 사용하는 파티클 시스템이 이제 애님 노티파이에서 스폰될 때 제대로 작동합니다.

  • 특정 커브 셋업으로 캐스케이드에서 크래시가 날 수 있었던 버그를 잡았습니다.

  • 메시 이미터에서 Initial Mesh Rotation 이 가끔 두 번 적용되던 문제를 고쳤습니다.

  • 캐스케이드 탭을 한꺼번에 여러 개 열 때의 퍼포먼스 문제를 수정했습니다.

  • 블루프린트와 SpawnEmitterAtLocation 를 통해 코드에서 직접 스폰된 파티클 시스템이 이제 정상적으로 콜리전 작동합니다.

라이팅

  • 라이트에 색온도 프로퍼티를 추가했습니다.

  • 미완성/실험단계 반투명 라이팅 모드를 새로 추가했습니다: TLM_SurfacePerPixelLighting (픽셀당 표면 라이팅)은 Surface 보다 퀄리티가 높지만 비용도 비쌉니다 (몇 가지 기본적인 컬링으로 포인트 라이트에 대해 루핑하며, 역제곱만이고, 비싸며, 아직 그림자가 지원되지 않습니다). r.ForwardLighting 을 1 로 설정해야 합니다.

  • 에픽 세팅에서 블룸이 더이상 퀄리티를 잃지 않습니다.

  • PS4 용 DFAO 최적화가 있었습니다.

    • PS4 에서의 전체 기본 씬 비용이 3.77ms -> 2.83ms 가 되었습니다.

  • DFAO 히스토리 필터링이 개선되었습니다.

    • 카메라 Z 가 아닌, 월드 포지션 차이에 따라 히스토리를 거부합니다. 이로 인해 카메라 이동하의 노이즈가 다수 잡힙니다.

    • 커다란 렌더 타깃 내 뷰포트 바이리니어 필터링에서의 부작용 방지를 위해 히스토리의 최종 텍셀은 절대 재사용하지 않습니다.

    • 재투영된 깊이가 깊이의 부호 내 다른 것을 저장하던 오류를 고쳤습니다.

    • 히스토리가 버려진 (불안정한) 픽셀에 안정된 결과의 2D 공간 필터가 적용됩니다.

  • 블루프린트 SetVisibility 호출에서 스카이라이트를 활성화시키면 이제 거기서 처리된 텍스처를 캡처하여 생성하도록 합니다.

    • 씬은 스택에 활성화된 스카이라이트를 추적, 가장 최근에 추가된 것이 선택됩니다.

  • 하이트필드 다이내믹 글로벌 일루미네이션

    • 랜드스케이프가 존재할 때, 콘솔에서 'r.DistanceFieldGI 1' 로 활성화시킵니다.

    • 랜드스케이프에 대한 GBuffer 아틀라스가 현재 뷰에 따라 간접광에 영향을 끼칠 수 있는 컴포넌트에서 생성됩니다.

    • 직사광에서의 그림자 계산은 섀도맵과 레이 트레이싱 디스턴스 필드를 재사용해서 이루어집니다.

    • 아틀라스에 대한 라이팅 계산은 GBuffer 프로퍼티를 사용합니다.

    • GI 라이트 첫 반사광 전달은 빛을 받는 부분에 대해 하이트필드의 근처 라이팅된 텍셀 전체를 대상으로 반복처리하여 가상 포인트 라이트로 취급하는 방식으로 계산합니다. 두 개의 수집 구역이 사용되며, 커다란 것은 하이트필드를 통해 건너뛰면서 더욱 커다란 바운스 거리를 냅니다. 국지적 그림자 생성에는 DFAO 가 사용됩니다.

    • 뷰 바깥의 구역에는 아직 유효한 그림자가 없습니다.

  • 시네마틱 섀도잉 컨트롤 추가 - 섀도잉 비용은 최소화하면서 추가 그림자를 드리우는 스포트라이트 구성시 유용합니다.

    • 라이트의 ?bCastShadowsFromCinematicObjectsOnly 입니다.

    • 컴포넌트의 bCastCinematicShadow 입니다.

    • 스태틱 섀도잉 또는 레이 트레이스 디스턴스 필드 섀도에는 영향을 끼치지 않습니다.

  • 레이 트레이스 디스턴스 필드 섀도는 쌍방 업샘플 포함 반해상도 또는 전해상도가 가능합니다. 반해상도는 TemporalAA 에서의 미해결 깜빡임 부작용이 조금 있습니다.

    • 디스턴스 필드가 양면으로 생성된 메시는 레이 트레이스 섀도 캐스팅 도중 확장되어, 트리가 CSM 과 훨씬 잘 일치되도록 합니다.

  • 레이 트레이스 디스턴스 필드 섀도는 이제 캐스케이드 페이드를 구현합니다.

  • 스태틱 라이트에 대한 리플렉션 캡처 속에 라이트 모양을 렌더링합니다.

    • 스태틱 라이트에 보다 높은 퀄리티의 스페큘러가 가능하며, VR 과 같은 고사양의 경우 특히나 유용합니다.

  • RTDF 섀도가 뒷면 그림자를 강제하지 않아, 서브서피스 스캐터링이 있는 머티리얼이 향상됩니다.

    • 잘못된 셀프 섀도 부작용 감소를 위해 거리 기반 광선 시작 오프셋을 추가했습니다.

  • 스카이라이트 최소 오클루전 설정이 스카이 스페큘러 오클루전에도 작동합니다.

  • 서브서피스 스캐터링이 레이 트레이스 디스턴스 필드 섀도에 지원됩니다.

  • 디스턴스 필드 섀도잉 포함 서펠(Surfel) 글로벌 일루미네이션

    • 기본으로 꺼져있으며, 로드 시간에 (ConsoleVariables.ini 를 통해) r.DistanceFieldGI 활성화된 무버블 스카이라이트와 아울러 렌더러 프로젝트 세팅의 'Generate Mesh Distance Fields' 도 필요합니다.

    • 서펠(방향을 맞춘 원반)은 메시 표면에 배치되며, 실제 UV 와 월드 포지션으로 머티리얼을 평가하여 디퓨트 컬러를 캡처합니다.

    • 서펠은 메시 디스턴스 필드를 통한 레이 트레이싱에 의해 라이팅 및 섀도잉됩니다 (현재까지 디렉셔널 라이트만)

    • 방사 캐시 레코드는 라이팅된 서펠로부터 생성된 근처 가상 포인트 라이트로 라이팅됩니다. 서펠 표현의 카메라 기반 LOD 와 오브젝트 기반 서펠 컬링만 사용하며, 아직 계층구조는 없습니다.

    • VPL 의 섀도잉은 디스턴스 필드 콘 트레이싱에 의해 나옵니다. 뎁스 비저빌리티 함수는 9 방향의 콘 트레이스 각각으로부터 구성되며, 입사 VPL 라이팅에 대한 섀도잉에 사용됩니다.

    • 컴포넌트 재등록 및 트랜스폼 업데이트는 서펠을 다시 생성하도록 만드는데, 느릴 수 있습니다. 앞으로는 머티리얼만 재평가가 필요할 것입니다.

    • 스카이라이트 최대 오클루전 거리를 10m 로 올렸으며, GI 에 유효한 최소량입니다.

  • 디퓨즈 셰이딩 모델을 램버트(Lambert)에서 에너지 보존 벌리(Burley)로 전환했습니다.

  • 비동기 디스턴스 필드 빌드는 이제 디스턴스 필드 데이터 쿠킹 전 강제 완료되며, 쿠킹된 빌드에 빠져있는 디스턴스 필드 라이팅을 수정합니다.

  • 셀프 섀도만 활성화된 컴포넌트는 이제 환경에 의한 그림자를 제대로 드리우며, 이따금씩 환경 위에 그림자를 잘못 드리우는 일도 없어졌습니다.

  • 프로젝트 세팅 r.GenerateMeshDistanceFields 가 꺼진 경우 디스턴스 필드 씬 업데이트는 더이상 추적되지 않습니다.

  • 버텍스 페인팅된 LOD 포함 스태틱 메시 관련 라이팅 임포트시의 크래시를 고쳤습니다.

  • 렌더링 프리뷰 피처 레벨 전환이 일어난 이후 레벨 라이팅이 손실될 수 있었던 상황을 고쳤습니다.

  • VisualizeHDR 옵션이 켜진 상태에서의 시각 순응을 수정했습니다.

  • 무관한 라이트가 컴포넌트별로 저장되었을 때 LOD 별로 클리어시켜, 스테이셔너리 라이트로부터 완전히 섀도잉된 LOD 포함 스태틱 메시로 라이팅이 완전히 빌드되지 않게 만드는 문제를 고쳤습니다.

  • 라이트매스에서 시작 에이전트에 사용된 코어 수에 묶여있던 다중 CPU 코어 수 제한을 수정했습니다.

  • 다이내믹 라이팅 패스에 대한 머티리얼 AO 를 수정했습니다.

  • bLightAsIfStatic 이 켜진 프리미티브가 아직 빌드하지 않은 라이트 영향 반경에 들어간 경우 라이팅이 빌드되지 않던 것을 고쳤습니다.

  • 테스트 맵에 보이던, 작은 오브젝트가 DFAO 에 일관되게 영향을 끼치지 않던 것을 고쳤습니다.

  • 거대한 지형에서 일부 그림자가 사라지던 것을 고쳤습니다.

머티리얼

  • 최대 4 개의 float 3 값을 블렌딩하는 "multi-lerp" 함수를 추가했습니다.

  • 프로젝트에 사용되는 셰이더 & RHI 스테이트를 기록할 수 있는 하이 레벨 셰이더 캐시를 추가하고, 게임내 버벅임 감소를 위해 로드 도중 재구성합니다.

    • 현재 셰이더 캐시는 OpenGL 용으로만 사용 가능하나, 어느 RHI 에도 추가시킬 수 있습니다.

    • 셰이더 캐싱은 프로젝트/엔진 INI 파일에서 r.UseShaderCaching 콘솔 변수를 설정하여 껐다켰다 할 수 있습니다.

    • r.UseShaderDrawLog 콘솔 변수는 캐시가 사용된 RHI 스테이트도 저장할 것인지를 토글시켜, 셰이더가 로드 도중 '워밍업' 될 수 있도록 합니다 (r.UseShaderPredraw 로 토글).

    • 셰이더 & 스테이트는 '스트리밍 키' 태그를 붙여 스트리밍 게임에서 RHI 오버로딩 감소를 위해 앞으로의 실행시 같은 키가 활성화될 때만 셰이더 & 스테이트가 재구성되도록 했습니다.

  • 모델 버텍스 컬러에 두 번째 노멀 세트 저장을 위해 추가된 MaxScript 보완을 위해 새로운 머티리얼 함수를 추가했습니다.

  • 모델 버텍스 컬러에 두 번째 노멀 세트 저장을 위해 추가된 MaxScript 보완을 위해 새로운 머티리얼 함수를 추가했습니다.

  • 텍스처를 통해 스태틱 메시 모프 타깃 애니메이션이 가능한 스크립트를 추가했습니다.

  • Clip Space 머티리얼 함수에 Transform 을 추가했습니다.

  • Pixel Depth Offset 머티리얼 입력

    • 픽셀별 뎁스 버퍼에 쓰기를 허용, ZCULL 유지를 위해 D3D11 의 보수적인 깊이 쓰기를 사용합니다.

    • 디스턴스 필드 라이팅이 있는 빌보드 LOD 에 좋은데, 섀도잉에 사용된 메시의 디스턴스 필드 표현은 여전히 정확하나, 주요 광선에 사용된 빌보드 깊이는 그렇지 않기 때문입니다.

  • 화면 및 버퍼 해상도에 대한 여러가지 출력이 있는 노드를 제출했습니다.

  • 플립북 머티리얼 함수를 통해 이제 사용자는 밉 세팅에 접근할 수 있습니다.

  • 새로운 추상 Custom Output 머티리얼 표현식 노드가 새로 생겼으며, 모듈에서 서브클래싱 가능합니다. 이를 통해 커스텀 렌더링 패스 또는 기타 이펙트에 대한 픽셀 셰이더에서 호출 가능한 사용자 머티리얼에 따라 커스텀 함수를 생성할 수 있습니다. 예제는 UMaterialExpressionLandscapeGrassOutput 을 확인하세요.

  • View.ViewToTranslatedWorld 는 이제 섀도 패스에 올바르며, 빌보드가 라이트를 향하도록 합니다.

    • 머티리얼 에디터에서 빌보드에 사용되는 ViewToWorld 트랜스폼에 영향을 끼칩니다.

  • 머티리얼 인스턴스 가비지 컬렉션 도중에 잠재된 크래시를 고쳤습니다.

  • 머티리얼 인스턴스 에디터에서 부모 머티리얼 리셋으로 인해 발행하는 크래시 버그를 잡았습니다.

  • TLM_SurfacePerPixelLighting 를 사용하는 반투명 머티리얼에 대한 디렉셔널 라이트를 수정했습니다.

  • 모든 컴포넌트를 주기적으로 재등록되게 만들던 머티리얼의 퍼포먼스 문제를 고쳤습니다.

  • 특정 earlyZpass 모드에서 셰이더 복잡도 뷰모드를 수정했습니다.

  • ES2 머티리얼 인스턴스가 메탈릭 머티리얼을 메탈릭이 아닌 것으로 잘못 렌더링할 수 있는 상황을 고쳤습니다.

  • TLM_SurfacePerPixelLighting 를 사용하는 반투명 머티리얼에 대한 스포트 라이트를 수정했습니다.

  • Subsurface_Profile 에서 극한 입력 값 사용시 잘못된 색이 나오던 것을 고쳤습니다.

  • 하나 이상의 서브섹션 및 테셀레이션이 적용된 랜드스케이프 렌더링시의 비주얼 깨짐 또는 크래시를 고쳤습니다.

  • SubsurfaceProfiles 포함 MaterialInstanceDynamic (MID) 사용시의 잘못된 작동방식을 고쳤습니다.

  • 하이 퀄리티 월드 평행 노멀을 월드 평행 텍스처 노드의 표준 접근법으로 만들고, 이전 접근법은 제거했습니다.

  • 월드 평행 복합 머티리얼 함수는 이제 모든 텍스처 샘플에 "Shared: Wrap" 옵션을 사용합니다.

  • 언릿 머티리얼은 이제 굴절 사용시에도 노멀 입력을 사용할 수 있습니다.

포스트 프로세싱

  • 커다란 블룸에 또다른 블룸 스테이지(가우시안)를 추가했습니다.

  • Rec.709 출력 디스플레이 디바이스를 추가했습니다.

  • 활성화는 r.tonemapper709 입니다.

  • 큰 스케일의 SSAO 를 개선, 보다 효율적인 알고리즘으로 변경되었습니다.

  • 그레이디언트가 부드러운 타일 기반 모션 블러가 새로 도입되었습니다. 작업중.

  • r.motionblurnew 1 로 활성화시킵니다. 여전히 작업중.

  • 색수차가 올바른 방향 및 파장 기반 색 분리량으로 변경되었습니다.

  • Screen Percentage 포스트 프로세스 세팅이 scalability 콘솔 변수와도 작동하도록 했습니다.

  • PrecomputeParams 아래 Atmospheric Fog 컴포넌트 프로퍼티를 변경해도 미리계산된 데이터가 재생성되지 않아 렌더링 문제가 생기거나 효과가 없던 것을 고쳤습니다.

  • PostProcessMaterial SwitchParameter 작동방식을 변경했습니다.

최적화

  • SpeedTree 셰이더에 'BestPlus' 환경설정을 새로 추가했습니다. 이제 'Best' 가 더 빠릅니다.

  • r.OcclusionQueryLocation 콘솔 변수를 추가, 선택적으로 오클루전 쿼리를 베이스 패스 전으로 옮깁니다. 몇몇 상황에서 CPU 버벅임을 줄일 수 있습니다.

  • 하이 폴리 메시 임포트 속도를 크게 향상시켰습니다.

  • 'Best' SpeedTree 환경설정에서 LeafRipple 을 제거했습니다. 'BestPlus' 에서는 여전히 사용 가능합니다.

  • 디스턴스 필드 데이터가 더이상 서버 쿠킹된 콘텐츠에 포함되지 않습니다.

  • 섀도 렌더링의 퍼포먼스 퇴보를 고쳤습니다. 섀도 캐스터가 많은 렌더링이 CPU 에서 훨씬 빨라질 것입니다. 4.7.4 에도 이 픽스가 포함되어 있습니다.

  • 더이상 HZB 가 사용되지 않으면 빌드되지 않습니다.

  • 주어진 뷰에 ClearCoat 머티리얼이 없는 경우, ClearCoat 머티리얼 처리를 셰이더에서 제거했습니다.

UI

  • SListPanel 에 새로운 ListItemAlignment 옵션을 추가, STileView 아이템 사이 패딩을 늘리는 대신, 아이템을 가로로 늘리는 것이 가능합니다.

  • 플레이어가 친구 패널 밖에서 초대를 받을 때의 알림 표시를 추가했습니다. 친구 드롭다온 아이콘에 풍선도 나타납니다.

  • SlateApplication 에 기존 모든 창을 닫는 옵션을 추가했습니다.

  • SNewClassDialog 가 컬러 버튼을 사용하도록 하여 에디터의 다른 생성 버튼과 스타일을 일치시켰습니다.

  • 슬롯 추가( 및 슬롯 수 가져오기)를 위한 함수를 추가했습니다.

  • 검색창에 커스터마이징 향상을 위한 변경을 가했습니다.

  • 슬레이트 리소스의 불필요한 가비지 컬렉션을 수정했습니다.

  • 위젯 소멸시 발생할 수 있었던 크래시를 고쳤습니다.

  • 플레이어가 다른 플레이어에게서 알림을 받으면 참가 확인창이 사라지던 문제를 고쳤습니다.

  • 플레이 세팅의 Common Screen Resolution (공통 화면 해상도) 툴팁에 종횡비를 표시하도록 수정했습니다.

  • 캔버스를 사용한 줄바꿈 텍스트 그리기 퍼포먼스를 크게 향상시켰습니다.

슬레이트

  • 텍스처 데이터로의 포인터를 받는 FSlateTextureData 로의 생성자를 추가했습니다.

  • 슬레이트 마우스 이벤트의 데모 모드 시각화를 추가했습니다 - 이벤트 위치 주변에 자홍색 고리를 그립니다.

  • 여러줄 편집가능 텍스트에 힌트 텍스트가 지원됩니다.

  • SContentReference 위젯에서 애셋 이름을 더블클릭하면 해당 애셋을 여는 기능을 추가했습니다.

  • 아날로그 커서가 약간의 기능 추가 및 버그 픽스로 업그레이드되었습니다.

  • 여러줄 편집가능 텍스트에 PgUp/Dn 기능이 지원됩니다.

  • FUICommandList::MapAction 의 오류 처리 메시지를 개선, 충돌이 난 명령 이름이 포함되도록 했습니다.

  • 라인 필터링이 더이상 텍스처 리소스에 의존하지 않습니다.

  • 사소: 슬레이트는 커서가 언리얼 엔진 창 밖에 있으면 작업을 덜합니다.

  • 탭 매니저: ESC 키를 치면 현재 드래그 앤 드롭 작업을 중단합니다. 주: 끌어온 위젯을 원래 위치로 복원시키지는 않습니다.

  • IToolTip 인터페이스의 커스텀 구현에서 툴팁 위젯의 내용물을 여유있게 생성하고 소멸시킬 수 있도록 툴팁이 언제 닫히는지 나옵니다.

  • 텍스트 편집 박스에 탭을 입력할 수 있도록 했습니다.

  • SEditorViewport 의 서브클래스에 IsVisible 기본 구현이 제공되지 않은 경우 기본값을 바인딩하도록 변경했습니다.

  • 도킹된 창을 드래깅할 때의 에디터 크래시를 고쳤습니다.

  • 특정 다중 모니터 레이아웃에서 문제가 생길 수 있었던 내비게이션 버그를 잡았습니다.

  • 뷰포트에 입력 처리 전 크기/위치 정보를 질의한 경우 잘못된 정보를 보고하던 버그를 잡았습니다.

  • SMultiLineEditableText 에서 스케일이 변하면 몇 프레임 있다가 크기가 조절되던 문제를 고쳤습니다.

  • 슬레이트 툴팁의 잠재 크래시를 고쳤습니다.

  • 슬레이트에 감마 보정이 정확하지 않던 것을 고쳤습니다. 이제 보다 정확한 srgb 표준을 사용하는 톤매퍼와 같은 감마 보정 스키마를 사용합니다.

  • 편집가능 텍스트 박스가 클리어되고 있을 때 잘못된 커밋 이유가 방송되던 것을 고쳤습니다.

  • (독립형에서) 사용자가 클릭하지 않으면 컨트롤러 입력이 뷰포트를 경유하지 않던 문제를 고쳤습니다.

  • 리스트 뷰에 가시 영역보다 큰 아이템이 딱 하나 들어있을 때 스크롤 가능하지 않던 것을 고쳤습니다.

  • SScrollBox 에서 우클릭 스크롤이 두 번 적용되던 것을 고쳤습니다.

  • SListView 에서 아이템이 틱 되기 전 스크롤 요청을 한 경우 너무 멀리 스크롤되던 것을 고쳤습니다.

  • SListView 를 생성하고 바로 뷰에 X 아이템으로 스크롤하라 요청한 경우, 실제로는 뷰에 X+1 아이템이 스크롤되었었습니다.

  • 이 변화로 그 요청을 다음 틱, SListView 가 스크롤을 제대로 처리할 수 있는 시점까지 미룹니다.

  • SComboButton 의 음영 변수와 함수가 SetIsOpen 을 통한 프로그래밍적 메뉴 열기를 깨뜨리던 것을 고쳤습니다.

  • 메뉴 앵커를 표시할 때 위젯 경로가 유효한지 더이상 확인하지 않습니다. 유효한 경로를 찾지 못했으면, 팝업이 발생하지 않습니다. 이러한 상황은 딜레이가 있는 애니메이션으로 지연 처리할 때 너무 자주 발생할 수 있습니다.

  • 슬레이트: DragDetection 검사가 더욱 확실해 졌으며, 잘린 경로에 작업을 하기 보다는 유효하지 않은 경로를 반환합니다.

  • 툴팁이 더이상 언리얼 엔진 이외의 창을 "뚫고 들어가지" 않습니다.

  • 창이 포커스를 잃으면 더이상 게임 뷰포트의 자손 위젯에 있는 포커스를 소거시키지 않습니다. 즉 Visual Studio 같은 다른 앱에 포커스를 줘도 컨트롤러로 계속 게임과의 상호작용이 가능하다는 뜻입니다.

언리얼 모션 그래픽 (UMG UI 에디터)

  • 언리얼 모션 그래픽으로 분할 화면 UI

    • 이제 UMG 에서 분할 화면 UI 를 지원합니다. 각 플레이어마다 다른 메뉴의 4 채널 분할 화면 예제입니다.

    image alt text

  • 위젯을 뷰포트에 직접이 아닌 특정 플레이어 화면에 직접 추가시킬 수 있습니다. 그러면 각 플레이어의 UI 위치와 크기가 자동으로 조절됩니다. 뷰포트에 직접 추가된 것 아래 플레이어 전용 화면 UI 가 나타납니다.

    image alt text

  • UMG 에서 애니메이션이 시작될 때의 블루프린트 이벤트를 추가하고, 새로운 재생 옵션으로 역방향 재생과, 정방향 직후 역방향 재생하는 핑퐁 재생 옵션도 추가했습니다.

  • 스케일 적용된 폰트 사용시의 캔버스 퀄리티가 개선됩니다.

    • 이제 포인트 샘플링이 아닌 바이리니어 샘플링을 사용합니다.

  • 위젯 에디터에 애니메이션 재생 기능이 지원됩니다.

  • UMG 애니메이션에 애니메이션 Enum 프로퍼티가 지원됩니다. 비저빌리티같은 것의 애니메이션이 가능합니다.

  • 웹에서 이미지 다운로드가 가능한 비동기 노드가 새로 추가되었습니다. 현재 지원되는 유형은 Jpeg/Png/Bmp 입니다. 이제 웹에서 이미지를 다운로드하여 이미지 위젯이나 테두리 등에 배치하면 됩니다.

  • 가상 IsInteractive 함수로 가상 커서와 사용하여 상호작용 가능한 커스텀 유저 위젯을 만들 수 있는 방법을 추가했습니다. 또한 애니메이션의 현재 시간을 반환하는 PauseAnimation 함수를 추가, 나중에 재생 재개할 때 사용할 수 있습니다.

  • 그림과 테두리에 브러시를 설정할 수 있는 방법을 추가했습니다.

  • 터치 제스처에 대한 디자인 표면에 핸들러를 추가, Mac에서 의도하는 것처럼 움직이도록 했습니다.

  • 모든 UMG 패널 위젯에 HasChild 를 추가했습니다.

  • 디자이너에 + 줌 레벨을 추가했습니다.

  • UMG 와 슬레이트에 분할 화면이 지원됩니다. 게임 뷰포트 클라이언트 레벨에 새로 생긴 프레임워크로 플레이어의 서브 사각 안에 유지된 캔버스 슬롯에 콘텐츠를 배치할 수 있습니다. 새로운 프레임워크에는 툴팁이 뜨면 게임에 새 창이 생성되지 않도록 하는 툴팁 제공자도 제공됩니다.

  • AddToViewport 는 계속 하던 대로 작동할 것입니다.

  • 위젯을 특정 사용자 화면에 넣고자 한다면 AddToPlayerScreen 를 사용해야 합니다. 이는 위젯 생성시 제공한 OwningPlayer 를 사용해서 배치할 화면을 결정합니다.

  • TWeakObjectPtr 에도 바인딩 기능을 추가했습니다.

  • 드래그 앤 드롭에 창 없는 렌더링을 추가, 게임에서 상속해야하는 새로운 드래그 앤 드롭 작업이 생겼습니다. FGameDragDropOperation 은 단일 창 게임의 드래그 앤 드롭 구현에 사용할 수 있습니다. UMG 사용자는 별다른 특별한 작업 없이 전체화면 게임에서처럼 드래그 앤 드롭이 작동합니다.

  • 블루프린트에서 위젯 애니메이션 시작 및 끝 시간 접근이 가능합니다.

  • 위젯에 (유저 인덱스로) 유저 포커스를 설정할 수 있습니다.

  • 버튼에 Pressed/Released 이벤트가 지원됩니다.

  • 애니메이션 트리의 아이템에 이름이 표시되는 방식을 변경, 애니메이팅중인 위젯과 동기 상태를 유지하고, 컨테이너 슬롯의 경우 부모 컨테이너의 이름과 포함된 위젯 이름이 표시됩니다.

  • UserWidget 에 PlaySound 를 폐기시켰습니다. 블루프린트에 어디서나 사용가능한 PlaySound2D 가 추가되어, 더이상 특정 위젯에 연관시킬 필요가 없습니다.

  • 블루프린트에 FKey 구조체에 대한 함수를 많이 추가했습니다. 이제 키 종류가 무엇인지 검사할 수 있으며, DisplayText 도 구할 수 있습니다.

  • UMG 디자이너에서 위젯에 마우스 커서를 올리면 계층구조 탭에 해당 항목이 강조됩니다.

  • UMG 의 위젯에 NULL 폰트가 설정된 경우 퍼포먼스를 향상시켰습니다.

  • UDPICustomScalingRule 을 도입, 사용할 DPIO 스케일을 완전 프로그래밍적으로 정의할 필요가 있을 때 좋습니다. 감지 가능한 경우 다양한 물리 화면 및 일반 화면 크기, 심지어 플랫폼별 로직까지도 기반으로 하는 것이 가능합니다.

  • 애니메이션 선택이 보다 일관성있게 만들었습니다.

  • 프리뷰 위젯의 상태를 선택된 애니메이션이 변할 때마다 업데이트합니다.

  • 위젯 에디터를 열 때 첫 애니메이션을 기본으로 선택하지 않습니다. 그러면 위젯이 기본 상태로 표시될 것입니다.

  • 선택된 애니메이션이 없으면 애니메이션 타임라인을 지웁니다.

  • 메뉴 앵커 - 메뉴바에 새로운 함수가 여럿 등장했으며, 메뉴 앵커의 열림 상태가 변하면 알리는 델리게이트도 포함되어 있습니다.

  • UMG 위젯의 위젯 이름이 친근한 이름으로 표시됩니다.

  • 계층구조의 기존 및 새로운 위젯에 친근한 이름으로 표시됩니다.

  • 내 블루프린트에 변수로 노출된 새 위젯에 친근한 오브젝트 이름으로 표시됩니다.

  • GetAllWidgetsWithInterface 함수를 추가했습니다.

  • ProjectWorldLocationToWidgetPosition - 월드 스페이스에서 위젯 스페이스로 더욱 쉬운 프로젝션이 가능합니다.

  • 디자이너에서의 커스텀 및 원하는 크기를 재작업했습니다. 이제 화면의 컨텍스트에서도 어떤 커스텀 또는 원하는 크기로 미리볼 수 있습니다. 화면 크기 선택 및 위젯 프리뷰가 그 화면을 어떻게 채울지 선택하는 별도의 드롭다운이 생겼습니다.

  • 이제 디자이너에서 스케일 파악을 원활히 하기 위해 모형 화면에 시각화시킬 루트 위젯의 배경 이미지를 설정할 수 있습니다.

  • 드래그/드롭이 개선되었습니다.

    • 이제 피벗, 오프셋 선택이 가능합니다. 드래그 피벗 기본값은 가운데, 가운데 입니다.

    • 더이상 드래그 도중 드래그 데이터가 GC 되지 않습니다.

    • 드래그/드롭 시작시 튀는 현상 감소를 위해 오브젝트를 선택된 피벗/오프셋으로 옮기기 위한 작은 보간이 생겼습니다.

    • DefaultDragVisual 프로퍼티가 이제 읽기 전용으로 제대로 마킹됩니다. 이전에는 읽기/쓰기로 설정되어 정확하지 않았습니다.

  • UUserWidgets 에 이제 슬레이트 위젯이 소멸되면 호출되는 Destruct 이벤트가 생겼습니다.

  • 뷰포트에 위젯을 추가할 때, 이제 고급 파라미터로 Z 순서 선택이 가능합니다. 추가로 Z 순서가 위젯 컴포넌트에 옵션으로 추가되었습니다. 위젯 컴포넌트는 이제 화면상에 위젯 위치를 잡을 때 해상도 퀄리티/스케일을 제대로 고려합니다.

  • 위젯상의 내비게이션 커스터마이제이션이 이제 컨트롤러나 키보드로 위젯의 내비게이션 옵션의 기본적인 제어가 가능합니다.

  • 위젯에 툴팁이 지원, 커스텀 콘텐츠로 가득찬 툴팁을 만들고자 하는 경우, 이제 가능합니다!

  • 이제 계층구조에 위젯 재배치가 가능합니다.

  • 마우스가 스크롤 박스 경계에 도달했을 때의 마우스 휠 작동방식을 설정할 수 있습니다. 슬레이트에서도 가능합니다.

  • 각 위젯 틱 시작시 GInitRunaway 를 추가하여 사용자에게 도주로 감지시 보다 많은 방법을 제공합니다.

  • WidgetComponent DK2 크래시 픽스입니다. 각 뷰에 대해 DynamicMeshBuilder 를 초기화시킵니다.

  • 위젯에 슬레이트 이벤트를 전송 시도하기 전 도달 가능한지 알아보는 검사를 추가했습니다.

  • 애니메이션에서 방금 추가한 첫 키프레임을 되돌리기로 제거한 경우 애니메이션을 사용할 수 없게 되는 문제를 고쳤습니다.

  • 단일 키프레임 애니메이션의 키에 더블클릭했을 때 에디터가 멈추던 문제를 고쳤습니다.

  • 애니메이션 에디터가 선택된 활성 애니메이션이 없는데도 키프레임을 추가할 수 있는 상태로 들어가던 문제를 고쳤습니다.

  • 자동 키 모드의 위젯 애니메이션 관련해서, 프리뷰에서 위젯 변경시 현재 선택된 애니메이션에 키가 추가되지 않던 문제를 고쳤습니다.

  • 위젯 애니메이션 관련해서, 키를 선택한 다음 트리에서 트랙을 선택하거나, 그 반대로 한 뒤, Delete 를 사용하면 마지막 선택된 것만이 아닌 트랙과 키 둘 다 지워지던 문제를 고쳤습니다.

  • 위젯 애니메이션에서, 애니메이션 트랙을 삭제한 다음 되돌리기를 하면 애니메이션 트랙은 돌아오지만, 연관된 위젯 애니메이션이 더이상 되지 않던 것을 고쳤습니다.

  • 위젯 애니메이션 관련 활성 애니메이션에서 키 이동 또는 삭제시 프리뷰 위젯이 업데이트되지 않던 문제를 고쳤습니다.

  • 애니메이션을 삭제하면 위젯 에디터를 다시 열기 전까지 사용자가 그 애니메이션 이름을 사용할 수 없던 문제를 고쳤습니다.

  • 쿠킹된 콘텐츠로 된 게임 종료시 발생하던 크래시를 고쳤습니다.

  • 컨텍스트 메뉴로 3D 위젯에 우클릭시의 크래시를 고쳤습니다.

  • 마우스 위치가 월드의 위젯 컴포넌트에 제대로 이동되지 않던 문제를 고쳤습니다.

  • 3D UMG 위젯에 반투명 머티리얼이 제대로 렌더링되지 않던 것을 고쳤습니다.

  • Render Transforms 의 IsIdentity 계산 관련해서, 잘못된 비교가 이루어지던 버그를 잡았습니다. 모든 UMG 위젯이 렌더 트랜스폼을 자체 스택에 추가하도록 만들어, 모든 슬레이트 레이아웃에 불필요하게 CPU 측면 레이아웃 계산을 하도록 만들었었습니다. 이제 애니메이션 작업시 렌더 트랜스폼에 스케일 0 을 사용할 수 있다는 뜻이기도 합니다.

  • 디자이너에서 늘임 앵커로 된 캔버스 아이템 좌상단/상단 변경시의 크기조절 문제를 고쳤습니다.

  • 위젯에 대한 Construct 가 호출되는 순서의 흠을 고쳤습니다. SObjectWidget 가 생성되기도 전 너무 일찍 호출되고 있었어서, Construct 이벤트에서 하는 경우 래퍼가 아닌 내부 위젯의 비저빌리티를 설정하는 등 이상한 문제가 여럿 생길 수 있었습니다.

  • 위쪽(Above) 메뉴 앵커 스폰 지점이 메뉴 앵커 바로 위에 오도록 오프셋을 알맞게 수정했습니다. 거기에 스폰 위치로 Above Centered 를 추가했습니다.

  • 체크박스의 체크 체크 상태에 바인딩할 때의 어서트를 고쳤습니다.

  • 디자이너의 자잘한 사용성 문제 다수를 고쳤습니다. 위젯 복사 / 붙여넣기는 이제 루트 아이템에서 슬롯 정보를 재생성하여 새로운 컨테이너에 넣도록 합니다. 다른 말로, 캔버스 패널에 복사 / 붙여넣기한 것들이 같은 크기로 표시되지 않았었는데, 이제 된다는 뜻입니다. 위젯 크기조절, 이동, 앵커변경시의 여러가지 이상한 버그도 잡았습니다.

  • 슬레이트 위젯 호스트 개선, 언제든 콘텐츠 설정이 가능하도록 했습니다. 또한 디자인 시간이 아니면 개미떼 행렬도 더이상 나타나지 않습니다.

  • 디자이너에서, 함수 바인딩의 GoTo 함수가 새로운 스타일의 바인딩 시스템에서의 작동을 막던 버그를 잡았습니다.

  • 데디케이티드 서버에서 UMG 위젯 로드시의 문제 우회법을 도입했습니다. 쿠킹되지 않은 빌드에서 위젯 쿠킹이 가능하려면, 쿠킹된 빌드에서는 로드되지 않는다 하더라도 UMG 모듈은 항상 로드되어 있어야 합니다.

  • 큰 패스를 만들고 프로퍼티가 EditDefaultsOnly 로 잘못 설정되어 있던 모든 곳을 고쳐, EditAnywhere 로 설정했습니다.

  • 네임드 슬롯 포함 위젯을 복사해 붙여넣으면 네임드 슬롯에 포함되어 있던 항목이 제대로 재생성됩니다.

  • NamedSlots, ScaleBox, SizeBox 모두 이제 기본적으로 SelfHitTestInvisible 입니다.

  • 더이상 위젯의 추상 클래스 생성을 허용하지 않습니다. 클래스에 추상 플래그가 있으면 그냥 null 을 반환합니다.

  • 더이상 접힌 비저빌리티 위젯을 캔버스 패널의 원하는 크기쪽으로 치지 않습니다.

  • FButtonStyle 에 더이상 비활성화된 슬레이트 브러시를 노출시키지 않습니다. 큰 혼동이 있었습니다. 비활성화된 버튼에 별도의 모양과 느낌을 지원하고자 했으나, 이 프로퍼티는 사실 코어 슬레이트 위젯 중 어느 것에도 사용되고 있지 않아 왜 예상대로 작동치 않는지 사용자에게 혼동을 주고 있었습니다. 버튼 등의 비활성화 스타일을 리팩터링할 때까지 뷰에서 숨깁니다.

  • 더이상 GIsRoutingPostLoad 가 true 인 동안 페인트 및 틱 요청을 라우팅하지 않습니다. 에디터 빌드에서 쿠킹되지 않은 데이터를 스트림 인 시켜야 할 때 발생할 수 있었습니다. 이러한 일이 발생하고 슬레이트가 블루프린트 코드를 틱하면 이 플래그 검사로 인해 크래시가 생길 수 있어서, 이러한 일이 발생하면 그냥 틱과 페인트 요청을 무시할 것입니다.

  • 값을 제대로 반환하지 않는 블루프린트 함수 처리를 위해 이제 스택상의 Getter 바인딩 임시 값을 초기화시킵니다. 기존에 사용자의 블루프린트 함수가 반환 노드에서 제대로 종료되지 않은 경우 가비지가 바인딩에 반환될 수 있었습니다.

  • 컴포넌트에서 오는 스크린 스페이스 위젯의 퍼포먼스 픽스로 인해, 더이상 매 프레임 재생성 시도하지 않고, 뷰포트에서 제거합니다.

  • 계층구조 뷰에서 위젯에 F2 키 이름변경이 제대로 처리됩니다.

  • 프로그레스 바의 프로퍼티가 더욱 명확하도록 정리했습니다.

  • SetKeyboardFocus 가 이제 non-const 로 정상 마킹되어 블루프린트에 실행가능 노드로 나타날 것입니다.

  • 위젯에 대한 카테고리는 이제 위젯을 메모리에 로드하지 않고 파싱 가능한 것으로 태그 데이터에 기록됩니다. 그래서 이제 언로드된 상태에서도 팔레트에 제대로 카테고리 분류 가능합니다.

  • 디자인 표면이 이제 마우스 휠버튼과 마찬가지로 터치 입력에도 컨트롤 없이 오버줌 가능합니다.

  • 위젯을 공간이 부족한 컨테이너에 붙여넣으려 할 때 발생하는 크래시를 고쳐, 이제 알림이 뜹니다.

  • 모든 위젯 인스턴스를 찾을 때 제공된 클래스가 아닌 위젯을 제대로 무시합니다.

  • SWrapBox 가 이제 레이아웃 계산시 접힌 비저빌리티 위젯을 제대로 무시합니다.

  • 슬레이트 어플리케이션은 이제 모션 감지 이벤트를 버블링합니다. 이를 통해 게임 뷰포트를 제외한 UMG(나 슬레이트) 위젯에 포커스를 맞춘 경우 갑자기 모든 모션 입력이 게임에 수신되는 것이 중단되는, 자주 보고된 바 있는 버그가 방지됩니다.

  • UMG 3D 컴포넌트가 레벨에 배치되고 거기서 스폰되는 위젯이 특정 변화로 리컴파일되었을 때 발생하는 에디터 크래시 및 메모리 깨짐 문제를 고쳤습니다. 외부 블루프린트 컴파일러의 레지스터 방식을 재구성, 모든 컴파일이 끝난 뒤에 컴포넌트 재등록을 하도록 했습니다.

  • 이제 IsPressed 버튼을 뷰포트에 추가하기 전에 눌러도 안전합니다.

  • 더이상 콤보박스 항목이 표시/숨김에 중복되지 않습니다. 이제 로드시 데이터를 한 번만 로드하며, 이제 그 필드도 디자인 시간에만 유용하므로 프라이빗입니다.

  • String Combobox 관련 많은 문제를 고쳤습니다. 업데이트/새로고침 문제, 리스트 클리어시의 크래시 버그 등입니다.

  • 이제 패널에서 슬롯을 제거한 후 슬롯의 슬레이트 리소스를 해제합니다. 이 픽스로 여러 사용자가 겪던, 드래그/드롭이나 다른 방법으로 패널에 다수의 아이템을 추가 및 제거한 후 종료시 크래시가 발생하는 이상한 버그가 잡혔습니다.

  • UserWidgets 는 이제 아우터 체인을 찾아 어느 월드에 들어있는지 아는 아우터를 찾습니다. 정적으로 정의된 중첩 UUserWidget 에서 플레이어 컨트롤러 쿼리 등에 대해 위젯이 어느 월드에 있는지 알고자 할 때 필요한 부분입니다.

  • 텍스트가 변하거나 체크박스 체크 상태가 변하면, UObject 의 데이터 사본에 변화를 미러링해서, 슬레이트 오브젝트가 사라진 뒤 재생성된 경우 사용자가 직접 데이터를 유지하지 않았더라도 슬레이트 오브젝트 상태를 기억해 낼 수 있도록 했습니다.

  • 위젯 선택이 바뀌려 할 때 선택된 오브젝트를 클리어합니다. 이로써 위젯 이주 세트의 변화 전, 색 선택 툴의 스포이드 기능에서 오는 최종 변화가 확실히 마무리될 수 있도록 합니다.

  • 애니메이션이 없는, 그리고 보이는 타임라인/애니메이션이 없는 UMG 위젯 컴파일시 발생하는 크래시를 고쳤습니다. 오브젝트가 가비지 컬렉팅되도록 합니다. 이제 GC 방지를 위해 오브젝트 레퍼런스를 보고합니다.

  • 트로버는 이제 25 조각으로 제한됩니다.

  • 위젯 컴포넌트는 이제 숨겨지면 부모에서 위젯을 제거합니다.

  • 피벗 포인트가 컴포넌트 상의 위젯 히트 테스트를 제대로 하지 못하던 것을 고쳤습니다.

  • 뷰포트나 플레이어 화면에 추가된 UserWidgets 는 이제 전체 레벨 전환이 일어나면 자동 제거 또는 킬 대기 상태로 마킹합니다. 이로써 오래된 월드가 참조되어 많은 가비지 컬렉션 크래시 및 골칫꺼리를 안기던 문제가 다수 해결됩니다.

  • 디자이너에 "Wrap With" 를 사용하면 이제 다중 선택된 위젯이 동기간인 경우 제대로 묶어주며, 그 외의 경우 선택된 동기를 가능한 그룹별로 모두 묶어줍니다.

  • 스케일 적용 폰트 사용시 캔버스 퀄리티가 향상되었습니다.

  • 이제 포인트 샘플링이 아닌 바이리니어 샘플링을 사용합니다.

Programming Release Notes

AI

  • New: Added versions of UEnvQueryTest::GetItem[Actor/Location/Rotation] parametric with FEnvQueryInstance::ItemIterator to avoid conversion-related issues when accessing query's items with item iterator

  • New: Modified Blackboard-key-change notifications to allow observers specify if they need to continue observing given blackboard key.

  • New: SightTargetInterface got a new parameter allowing implementing code to indicate "how visible" (if at all) an actor is.

  • New: Team affiliation handling to has been added to Sight and Hearing AI senses.

  • A bunch of Pawn.BaseEyeHeight uses were replaced with appropriate Pawn and Actor function calls to improve AI code consistency.

  • Comments on FEnvQueryResult have been improved to be more enlightening

  • EQS named params structs are now deprecated and should be replaced with AI Data Providers.

  • Fixed Blackboard's "synced keys" issues related to BlackboardComponent's registering/unregistering bug.

  • Fixed disappearing AI messages sent while processing message queue.

  • Fixed Envigornment Querying System's manager to not store invalid query templates, meaning the ones without any options defined

  • Fixed PawnActions not being aborted on PawnActionComponent's unregistering

  • Improved compatibility of Blackboard "enum" and "native enum" keys, a good step towards unifying both

  • Made Environment Querying System generated Points host and handle navigation-related data in a nicer way

  • Replaced operator * from EQS item iterators with new function: GetIndex()

  • New: Two new functions has been introduced to Navigation System, GetRandomReachablePointInRadius ?and GetRandomPointInNavigableRadius, to replace a mis-named GetRandomPointInRadius

    • As a side note, GetRandomPointInNavigableRadius produces items distributed uniformly.

  • A bug making PrimitiveComponents always navigation-relevant, even those with "Can Ever Affect Navigation" set to false, has been fixed

    • A serialization issue of NavigationDataClass in Navigation System's properties has been solved so that game-specific classes can now be used for these properties.

Behavior Tree

  • New: Added instancing for blackboard key types to support custom memory allocations.

  • New: Parametrized focus priority used by BTService_DefaultFocus, but kept it unexposed. The goal here is to allow easy expanding the logic by deriving the class.

  • Added a safety check to not crash if BTTaskNode, that's no longer part of active BT, gets a notification via UBTTaskNode::ReceivedMessage call

  • Removed failsafe Tick call from TimeLimit decorator, since it's no longer needed.

Debugging Tools

  • New: Added a function to VisualLog allowing users to add arbitrary FVisualLogShapeElement instances to given log entry which results in even more flexibility in logging spatial data.

  • New: Made AIController automatically redirect all visual logs of its components to controller's log

  • New: Added a generic support for navigation relevant actors being able to supply NavMesh generation process with subsections of their collision geometry

  • LandscapeHeightfieldCollisionComponent is a working example here

  • Done by expanding INavigationRelevantInterface

  • New: Added a way to query navigation data if a specified world location is inside a given navigation node (like a NavMesh polygon).

  • New: Added support for based navigation paths.

  • New: Made navigation path types derivable so that game-specific navigation data can create game-specific path types and have them still treated properly on the engine level

  • Optimized use of NavMesh boundary data in crowd simulation, fixed multiple samples created in the same location.

  • Added sanity checks for collision components' existence in APawn::UpdateNavigationRelevance overrides, since it's not guaranteed and it could lead to crashes

  • Cleand up NavigationSystem's closing process a bit to reduce redundant calls to NavigaitonDatas and their sub-parts.

  • Fixed NavMesh-drawing related bug that would crash the engine if user requested drawing of navigation-collectible geometry while there was navigation octree instance.

  • Fixed variable shadowing instances in Recast code

  • Getter and setter for UPathFollowingComponent::bStopMovementOnFinish has been added to avoid untraceable changes to the property

  • Made navigation paths' update requests store a weak pointer to paths rather than a shared reference which could lead to "path leakage"

  • Made NavigationData generators thread-safe shared pointers as a step towards full multi-threaded navigation generation

  • Modified FRecastTileGenerator::DoWork to gracefully handle being called with parent generator being already destroyed

  • UNavigationSystem::NavDataClasses array has been removed due to no longer being used

  • Fixed a bug in NavigationSystem that would result in deleted NavigationData instances not being removed from NavigationSystem which could lead to a crash.

  • Fixed a bug in NavLinkProxy that made it not notify navigation system about changes to hosted links' direction.

  • Fixed a bug stopping NavRelevantComponents from updating with changes to owning actor.

  • Fixed HierarchicalInstancedStaticMeshComponent not being able to affect NavMesh generation regardless of its settings

  • Fixed NavModifierVolume not reacting to runtime changes to its AreaClass

  • GetRandomPointInRadius used to return true even if query actually failed. Fixed it to return appropriate value.

  • Moved navigation-related undo/redo handling from LandscapeProxy to Actor. Now all actors should handle navigation-related undo/redo consistently.

Animation

  • Performance: USkinnedMeshComponent::AnimUpdateRateTick() optimized to reduce potential dynamic allocations. 0.40ms -> 0.26ms in test scene with many characters.

  • New: Added a new stat that represents all game thread time taken by the animation system (STAT_AnimGameThreadTime, "AnimGameThreadTime")

  • New: Added a stat to track time spent triggering notifies (STAT_AnimTriggerAnimNotifies, "Trigger Notifies")

  • New: Added SkeletalMeshComponent version of GetDistanceToCollision(), taking into account PhysicsAsset rigid bodies. Fixed ?FBodyInstance::GetDistanceToBody not handling PhysicsAsset rigidbodies properly.

  • New: Added stats for UAnimInstance construction and init time

  • New: Added status for animation importing to identify where it's taking a long time.

  • New: Added UninitializeAnimation, so that we can clear all data that it was being held

    • It will trigger all end notification

    • It stops montages

  • New: Changed DoesSocketExist to support bone names as well. This now is consistent with any other socket APIs.

  • New: Exposed GetCurveValue to outsider, so you can query.

    • This still depends on tick order. If you tick before animation, you'll get last frame data, not up-to-date data.

  • Renamed UpdateKinematicBonesToPhysics to UpdateKinematicBonesToAnim to correctly describe what it does.

  • New: PreClothTick is now dynamically registered based on the need of the SkeletalMeshComponent

  • New: We now flip bone transform buffers in RefreshBoneTransforms if we are not part of actor ticking. Should resolve issues when RefreshBoneTransforms is called manually from other systems (e.g Matinee)

  • Added logic to RefreshBoneTransforms so that if we already have an evaluation task in flight we don't crash.

  • Changed InitAnim so that it will block on any currently active parallel evaluation tasks, solving some crashes.

  • Changed logic for state machines first update tick so that we do not get partial notify triggers for transitions we are skipping

  • Changed SlotEvaluatePose so that it loops over its own MontageEvaluationData instead of MontageInstances which can be modified by other threads

  • Fixed crash in USkeletalMeshComponent::ValidateAnimation if mesh has no skeleton

  • Fixed 'Draw Uncompressed' animation showing compressed animation.

    • Fixed 'Draw non retargeted' animation crashing Personna.

    • Fixed various 'Draw ' animation not working with SaveCachePose nodes.

    • Renamed UAnimInstance::ContextCounter to ::GraphTraversalCounter so it's more explicit, since we have many 'Context' things everywhere.

    • Made GraphTraversalCounter non static, so it works w/ multithreading evaluation.

  • Fixed GetSocketTransform returning the wrong transform from a StaticMeshComponent when a nonexistent socket is specified.

  • Fixed nullptr crash in USkeletalMeshComponent::ValidateAnimation

  • Minimize accumulation of errors after many composed transforms when updating SceneComponent::ComponentToWorld

  • Montage replication fixes.

    • MontageStop function now has optional parameter OverrideBlendOutTime (by default it will use the BlendOutTime on the AnimMontage).

    • BlendTime on the AnimMontage instance is now replicated so abilities that override the blend time of montages will behave correctly.

  • Moved rotation normalization during root motion calculations to fix incorrect rotation result on partial blending

  • Queue Montage events during ticking, so they're triggered after AnimNotifies.

  • Removed Blueprintable tag from AnimPreviewInstance and AnimSingleNodeInstance.

  • USkeletalMeshComponent::RecalcRequiredBones's check for Sockets could add the same bone indices multiple times, triggering an assert in FillSpaceBases() later. Made sure all bones added to ForceAnimatedSocketBones and NeededBonesForFillSpaceBases are unique.

Audio

  • New: Export AudioVolume class to allow subclassing.

  • Cleanup audio module linking

    • Don't add Audio modules if building a server on Win32, Win64, or Mac

    • Don't add D3D11RHI module if building a server on Win32 or Win64

    • Make ALAudio a Dynamically Loaded Module instead of a Private Module Dependency on Linux

  • Removed the unused sound preview dialog and sound preview thread

Blueprints

  • New: Added a fast calling mechanism for no-argument thunks into the event graph

    • No-argument thunks into the event graph (for notification events and animation EvaluateGraphExposedInputs type calls) now call directly into the event graph, skipping one function frame and the associated invocation time

  • New: The Spawn Actor From Class nodes can now be extended by C++ projects.

  • New: Moved blueprint replicated property handling to UBlueprintGeneratedClass instead of an inaccessible static (mod/plugin support)

  • New: Support for localized metadata retrieval through the use of UField::GetMetaDataText

  • New: This change brings SMultiLineEditableText functionality closer to parity with the SEditableText.

  • Implemented SelectAllTextWhenFocused

  • Implemented RevertTextOnEscape

  • Implemented ClearKeyboardFocusOnCommit

  • Added helpful errors to catch DefaultToSelf parameters on Blueprint functions that are not compatible with the Blueprint's type.

  • Added support for Actor components stored in array properties. Blueprint users can now drag references to the array into Blueprint graphs (from the component tree).

  • Added support for Actor's with native scene components. Auto selecting a RootComponent when it is left unset.

  • Fixed a bug where data-only Blueprints would load with components that have since been removed from their native parent classes.

  • Only a simple pointer to an UObjects can be a parameter of BlueprintCallable function. No WeakObjPtr or AssetSubclassOf is accepted. Strict check in Unreal Header Tool.

  • Optimized return value processing for void functions in UObject::ProcessInternal (skipping a fptr call)

  • Removed "FriendlyName" metadata tag and updated comments and usage of "DisplayName" metadata tag.

  • Any Blueprint items that would fallback on using one or the other have had that functionality removed.

  • Removed requirement that native properties (exposed to Blueprints), had to specify EditAnywhere/EditInstanceOnly to have the property accessible from other Blueprints.

  • Split out SGraphPinInteger from SGraphPinNum to push schema checking into the NodeFactory where it belongs and fixed SGraphPinNum::Construct skipping the direct parent

  • New: Making a base async node based on the LatentOnlineCall node. From now on to create any async action just create a UObject that extends from UBllueprintAsyncActionBase and a new node entry will be added that spawns that class and activates it.

  • Fixed UScriptFactory not returning created script blueprint object

Core

  • Initial support for TMap properties!

    • Currently includes reflection, garbage collection, delta serialization and text import/export.

    • This is an early release of this feature. Editor support is minimal and there is no Blueprint availability yet, but support will continue to improve in future releases.

      image alt text

  • You can now have more than one Unreal class (UCLASS) in a single C++ header file! No additional work required, just define additional UCLASS and it should work!

    image alt text

    • You can declare special Unreal types (such as dynamic delegates) in a header file, even without a UCLASS in that file!

      image alt text

    • You no longer are required to name your source file the same as your class name! That means that in a file Header.h, you can define this:

      image alt text

    • You can now use any name you want for properties! Previously, certain names like "Color" were reserved by Unreal's internal UObject system and impossible to use.

      image alt text

  • New: AActor::GetComponents() can now support TArrays with different allocator types.

    • It's now recommended to use TArrays with a TInlineAllocator to potentially avoid memory allocation costs.

    • TInlineComponentArray is defined to make this easier, for example: TInlineComponentArray PrimComponents(Actor);

  • New: Add Begin/EndPlay virtual functions to UActorComponent

  • BeginPlay called if bWantsBeginPlay is true, EndPlay called if BeginPlay called.

  • New: Add conditional and no stats versions of FPlatformProcess::Sleep

  • New: Added "Stat Math" to Core stats.

  • Added stat counters for Rotator->Quat and Quat->Rotator conversion.

  • New: Added an overload for GetTypeHash that allows the TMap template type to use a key type that is a C++11 enum class.

  • New: Added EMIT_CUSTOM_WARNING_AT_LINE macro to emit warnings at given line rather than on macro's location.

  • New: Added ensureOnce and ensurceOnceMsgf macros which works like the standard ensure macros but will only fires on the first false result.

  • New: Added FCString::Strrstr, which finds the last occurrence of a substring in a zero-terminated string.

  • New: Added FString::Reset() which allows emptying a string without reallocating memory

  • New: Added heterogeneous comparison support to TArray::Contains, so that you can now find elements by any type which is comparable to the array element type, even if it's not convertible, e.g. searching a TArray> for a UObject.

  • New: Added IsValid and Reset functions added to FDelegateHandle to make it easier to use.

  • New: Added method for converting binary data into encoded hex string and vice-versa

  • New: Added new C++ utility function to draw oriented wire boxes with a matrix transform (DrawWireBox)

  • New: Added ON_SCOPE_EXIT - a generalized scope guard macro which allows arbitrary code to be run automatically when a scope is left.

  • New: Added RandBool() function (in UnrealMathUtility.h)

  • New: Added support for FEvent pooling to GenericPlatform

  • New: Added support for shared shapes between sync and async scene of static actors. Reduces memory usage and makes streaming faster.

  • New: Added support for specifying default values for FColor types in reflected methods to UnrealHeaderTool

  • New: Added support for suspending async loading.

  • Async loading can be suspended and resumed by calling SuspendAsyncLoading and ResumeAsyncLoading respectively

  • Async loading is automatically suspended when the rendering thread is suspended.

  • New: Added TArray::AddDefaulted to allow default constructed new elements to be added to the end of an array.

  • New: Added TUniquePtr::IsValid function to make it match other UE smart pointers, and made its operators work as expected with nullptr.

  • New: Added variadic template support to TGraphTask::ConstructAndDispatchWhenReady and TGraphTask::ConstructAndHold.

  • New: Any build targets may now choose whether to use the shared build environment (which can share engine intermediates between projects) or a custom build environment (which can have custom compiler settings), by overriding the TargetRules.ShouldUseSharedBuildEnvironment() function. Previous setting was to use a shared build environment for the editor, and custom environment for monolithic games.

  • New: Changed FMath::DegreesToRadians and FMath::RadiansToDegrees to use auto-deduced return types, which prevents accidental integer coercion and allows them to be called with any type which supports arithmetic operators, like FVector.

  • New: Changed the Exchange function to use Memswap in all cases, as this was an assumption used by a lot of code.

  • New: Core - Added dynamic stats for packages loading, disabled by default

  • New: Core - Log should have the time markers from the beginning

  • New: Default arguments to the Git dependencies download tool may now be specified through the UE4_GITDEPS_ARGS environment variable.

  • New: Exposed FFilePath and FDirectoryPath as Blueprint types

  • New: Exposed FPS (frames per second) chart global variables as Engine's module's API.

  • New: Git binary dependencies are now cached after being downloaded, allowing faster switching between branches and use of the git clean command.

  • New: Greatly improved support for compiling UE4 using Clang/LLVM on Windows platform (ongoing work in progress!)

  • New: Greatly improved the quality of IntelliSense results with UE4 in Visual C++ and Xcode

  • New: Hot-reload will now always call ShutdownModule, even when abondoning DLLs

  • New: Implemented user feedback on automatic generation of Remote Procedure Calls (RPC) and C++ functions usable in Blueprints.

  • Fixed missing directory crash in Unreal Build Tool when creating project timestamp file

  • New: Improve error message when using TSharedPtr with UObjects.

  • New: Make asserts trigger debug break in current stack frame.

  • New: Modules can now specify additional support files that need to be staged, allowing plugins that depend on third party DLLs to have them automatically included in packaged builds.

  • Add entries to the RuntimeDependencies array from your module's .build.cs file to have them included in staged builds. See /Engine/Source/ThirdParty/Ogg/UEOgg.build.cs for an example.

  • The list of files required for a target is stored in an XML receipt file under /Build/Receipts.

  • New: Now UnrealHeaderTool will accept GENERATED_BODY macro in every place you had to insert a type specific GENERATED*BODY macros (e.g. GENERATED_UINTERFACE_BODY)! It will figure out the context without your help.

  • New: Now you can specify your own function names for Implementation and Validate methods using keywords! E.g. UFUNCTION(Server="MyServerImplementationMethodName", WithValidation="MyServerValidateMethodName").

  • Note that when you decide to specify your own function name, you also have to declare it manually in the class header.

  • New: Optimized UObject::IsA - it is now faster than testing cast flags and runs in constant time in all cases!

  • New: Script Plugin was updated to support Lua 5.3.0

  • New: Simplified UObject creation. Only NewObject should be used to create UObjects.

  • New: Stats - Added generalized method for dynamic stats

  • Check the example here FModuleManager::LoadModuleWithFailureReason or UObjectBase::CreateStatID

  • New: TAssetPtr now correctly handles derived to base conversions. Conversion to bool is now explicit.

  • New: Threading - Thread singleton implementation is now cleaner, faster, thread-safe by default and no longer leaks memory

  • New: TLazyObjectPtr has been overhauled

  • Implicit upcasting has been added. A TLazyObjectPtr can now be passed to a function expecting a TLazyObjectPtr without problem.

  • This even works if the object referenced by the lazy pointer isn't currently loaded!

  • "Ptr == LazyPtr" (with the lazy ptr on the right) will now compile

  • The constructor from TWeakObjectPtr has been removed (it didn't even compile)

  • New: Treat type truncation warnings as errors.

  • New: UnrealHeaderTool: Added time logging for various phases and clarified code/comments surrounding the phases

  • New: Updated commonly-subclassed actor's and component's classes, and auto-generated constructors to take a default FObjectInitializer constructor argument. Now subclasses of almost every engine class doesn't have to provide FObjectInitializer paramter for parent class!

  • New: Updated UnrealHeaderTool to allow it to skip inline function definitions inside UCLASSes and USTRUCTs.

  • Added functionality to uobject and fconfigfile to support writing only one property when updating a project setting.

  • Used in the Config Hierarchy Editor.

  • Added FWeakObjectPtr::GetEvenIfUnreachable to match TWeakObjectPtr::GetEvenIfUnreachable.

  • Added the filename to the error log message you get when importing an object whose outermost parent is not a package.

  • Async - Fixed a deadlock when deleting a thread from the same thread

  • Cast and dynamic_cast with a const class type (eg Cast or dynamic_cast) now use the optimized class cast flags if possible.

  • Changed a few GetComponent() calls in critical paths to use the direct access instead of the array copy. This is only possible where it's knowns that the components will not change ownership or be destroyed.

  • Changed FColor, FVector, FTimespan etc. from 'class' to 'struct', as they were defined as C++ classes but also as USTRUCTs, which caused UnrealHeaderTool to generate bad forward declarations.

  • Changed UnrealHeaderTool to delete old .generated.cpp files when generating code for a module which has gotten smaller.

  • Changed UStruct::SuperStruct to be a private field to prevent accidental modification, as these would invalidate the new and improved UObject::IsA code.

  • Added proper shutdown for the screen saver inhibitor

  • Changed movie player to not force kill a running thread

  • Cleared all error messages after ensure, fixes crashes with messages from previous ensure causing an issue with understanding the crash

  • Fixed buffer overflow in method used to create a directory tree

  • Deprecated CanConvertPointerFromTo as it did not honor const qualifiers nor follow the naming conventions of other template metafunctions.

  • Deprecated TArray::Init(int32 Number), as its name did not suggest that the array elements would be uninitialized.

  • FComponentReference now correctly allows referencing of USceneComponent

  • Fix typo in FMatrix::InverseFast warning message

  • Fixed "Unable to bind delegate" errors during multicast delegate lookup and removal.

  • Fixed a compilation error if the CopyFromWeakArray template was used

  • Fixed a crash in platform file when using the log wrapper

  • Fixed a crash in UnrealHeaderTool when trying to parse malformed UINTERFACE definitions.

  • Fixed a crash that was occuring if you tried to hot reload a class that was used as a default subobject for object of other class in the same module.

  • Fixed a crash when reimporting Script Plugin component assets

  • Fixed an error in Unreal Build Tool that could occur if RTTI was enabled for a C++ module

  • Fixed an UnrealHeaderTool code generation bug when there is an enum at the top of a header.

  • Fixed assertions leaving the code pointer inside a Windows DebugBreak() function, requiring you to step out first

  • We now use the __debugbreak() intrinsic on Windows instead of calling DebugBreak()

  • Fixed binding extra params to a lambda/functor style delegate binding

  • This isn't strictly necessary (can use lambda capture instead) but it makes the interface consistent with the other types of delegate binding

  • Fixed build failure when you were trying to create a custom code class in the Editor derived from UArrowComponent.

  • Fixed crash during hot reload of the module that contained a class, which constructor was calling StaticClass function of other class from the same module.

  • Fixed dozens of missing 'override' specifiers on C++ virtual functions throughout the engine

  • Fixed enum duplication warnings.

  • Fixed error message when user tried to create unsupported constant properties.

  • Fixed hot reload not actually reloading game modules in games that had multiple gameplay modules

  • Fixed hot reload not updating derived classes if the base class layout changed resulting in the derived class layout changes without changing the overall class size.

  • Fixed hot reload not updating values on default subobjects' properties.

  • Fixed incorrect CastChecked behavior when doing interface casts in shipping builds.

  • Fixed IncrediBuild never distributing Link actions to remote machines for UE4

  • Fixed inheriting show and hide categories in property editor.

  • Fixed issues with finding directories using FFileManagerGeneric::FindFiles().

  • Fixed mistaken name conflict during "Add Code To Project..." wizard in the Editor if you had two or more modules with same suffix.

  • Fixed occasional crash during hot reload, that was caused by re-runing construction scripts for class default objects, which is forbidden.

  • Fixed ranged-based iteration over FString so that it no longer returns the null terminator.

  • Fixed recompilation of a lot of Engine modules during normal build after prior hot reload compilation, even if there were no changes in the Engine code.

  • Fixed sandbox file wrapper not using the correct paths in game projects not directly under UE4 root folder.

  • Fixed splitting of UnrealHeaderTool's generated C++ files.

  • Fixed temporary being saved into map packages at runtime because they were not marked transient

  • Fixed TFunction so that another compatible TFunction can be bound to it.

  • Fixed the constness of the std::nothrow_t parameters in our operator new/delete overloads.

  • Fixed the scalar version of FTransform::Inverse so that it works the same as the vectorized version.

  • Fixed the visualizers for FWeakObjectPtr and added support for Visual Studio's expanded view for TOptional members.

  • Fixed two problems with the Editor's "Add Code To Project..." functionality:

  • missing dependency, linker or include errors after creating subclasses of some type,

  • missing "Selected Class Source" link to source class of Slate Widget and Slate Widget Style classes.

  • Fixed UBT makefile regeneration issues.

  • Fixed UnrealBuildTool failing to harvest environment variables when SET command produced empty lines

  • Fixed UnrealHeaderTool generating bad code when a UClass pointer is used as a return type or as a parameter to a replicated function.

  • Improved much of TMap's implementation, by removing redundancy, adding extra compile time error checks and improving encapsulation.

  • Improved the error message given by UnrealHeaderTool when trying to use a TArray property with a custom allocator.

  • Logging fatal messages with FMsg::Logf crashes engine.

  • Make FScopedSlowTask work properly across threads.

  • Metadata for enumeration types are now gathered for localization properly.

  • Nested components will now be correctly updated in the Actor's OwnedComponents arrays after their Outer component is renamed or modified via undo/redo.

  • Optimization: Converted all engine uses of GetComponents() to use TInlineComponentArray or direct array access.

  • Optimized the logic for determining whether or not to save a tagged property during serialization.

  • Removed generation of deprecated .generated.inl headers from UnrealHeaderTool.

  • Removed MaxReadBytes from UProperty::SerializeItem, UStruct::SerializeBin and FPropertyTag::SerializeTaggedProperty, as it was unused.

  • Removed PLATFORM_COMPILER_HAS_RANGED_FOR_LOOP, as all UE4 supported compilers have it.

  • Removed PLATFORM_COMPILER_HAS_RVALUE_REFERENCES, as all UE4 supported compilers have it.

  • Removed the EXTERNAL_OBJECT_NAMES macro and related code, as the feature is now obsolete.

  • Renamed UnrealSwarm's CommonUtils library to SwarmCommonUtils to avoid naming conflicts.

  • Restored the missing LogUnion log category, which caused link errors when TUnion was used.

  • Stats - Fixed a stats warning, asynchronous thread has an unique name now

  • Stats - Fixed an issue with encoding/decoding group category

  • Stats - Fixed issue with decoding group category from stats metadata

  • Updated config file hierarchy with enums that can be used to determine priority.

  • New: Standardised naming convention for class used to managed memory operations, the same names for template and pointer based functions

  • New: A dummy World is now created when the Game Instance is created when running standalone (not PIE).

    • This World is not fully set up and many operations will not be useful, however, it does allow certain behaviors to work when being called from objects initialized before entering the initial map (e.g. UMG Widgets, Game Instance)

  • New: Add FJsonObjectWrapper struct to JsonUtilities, this allows inserting unconverted Json nodes into your structures that pass through JsonObjectConverter

  • New: Added a new method for setting the content of the XML node

  • New: Added AActor::bActorHasBegunPlay to track that an Actor has had BeginPlay called for it and has not subsequently had EndPlay called. Use HasActorBegunPlay to query.

  • New: Added ability to set the thread priority of a monitored process

  • New: Added append operator to the chunked array class

  • New: Added check for negative size of deserialized string.

  • New: Added more detailed message when uncompression fails, which includes the exact cause of failure.

    • Added the ability to skip unccompression errors during serialization via FailOnUncompressErrors under [Core.Settings] section in engine ini.

  • New: Added safety path to ignore and recreate ActionHistory.bin if that happens instead of a crash. We were reported that UnrealBuildTool's ActionHistory.bin file for some users was corrupted and it looked like it had been caused by interruption during saving process. This situation shouldn't occur anymore.

  • New: Added better Unreal Objects hash stats

  • New: Added stats for module manager

  • New: Function for creating synchronization events in no longer publicly available (see FPlatformProcess::CreateSyncEvent)

  • New: Exporting Decal Component class from the DLL to give access from outside the module.

  • New: FInterval is now templatized and can be used as a UPROPERTY. A Details panel customization for Interval properties was also added.

  • New: Implemented faster unhashing of UObject FNames in case of conflicts (with subobjects which have hardcoded names).

  • New: Added memory stats to 'obj hash' and 'obj hashouter'

  • New: Modules can now disable optimization in all configurations except shipping, by setting OptimizeCode to CodeOptimization.InShippingBuildsOnly in their module rules.

  • New: Moved actor components into Components folder

  • New: Package files now include a CompatibleWithEngineVersion field, declaring the engine version that the package is compatible with separately to the engine version that it was saved by. Hotfix releases will set this field to the last major release version.

  • New: Properties of class type in User Defined Struct can have a default value defined.

  • New: QMake project generator will add info about include paths to aid indexing.

  • New: Renamed ITlsAutoCleanup to FTlsAutoCleanup (it's not a [non-virtual] interface)

  • New: Script generator plugin is now using the engine's modular features system instead of plugin category for registering itself with UnrealHeaderTool.

  • New: Specifying -Timestamp on the commandline to AutomationTool will add timestamps to output logs.

  • New: StaticArray now has a Num() function. Useful when you just want to provide the length in the template arg, and just want to indirectly refer to it later.

  • New: The default engine resource file on Windows, PCLaunch.rc, has been split into two. PCLaunch.rc now opens correctly using the Visual Studio resource editor, while PCLaunch.rc2 contains any manual and preprocessor sensitive resource definitions.

  • New: Automatically compile C++ modules on editor startup. The loading/saving section of the editor preferences now includes an option to always compile game modules on editor startup.

  • New: The multicast analytics providers was only accessible to C++ projects that manually added a dependency upon the module. I moved this to a be a plugin instead to remove the C++ project requirements

  • New: UnrealBuildTool now supports creating precompiled distributions for any targets, similar to the releases which can be downloaded from the launcher. Teams which do not expect to modify the engine source often may wish to take advantage of this workflow for faster iteration times.

    • To create precompiled modules, override the GetModulesToPrecompile() in your target.cs file and add a list of modules to build, then build the target using UnrealBuildTool passing the -precompile argument.

    • To use precompiled modules, modify the UnrealBuildTool command line to include the "-useprecompiled" argument (or pass -useprecompiled on the command line to GenerateProjectFiles.bat)

  • FastArraySerializer now calls PreReplicatedRemove callbacks before PostReplicatedAdd callbacks, to better support "renaming" things in the array.

  • Fixed a rare crash when generating uobject token streams

  • Fixed custom warning emitter, which was outputting additional parenthesis. This was preventing red highlight in Visual Studio output window.

  • Fixed default subobject instancing when creating an instance from a non class default object Blueprint archetype.

  • Fixed hot reload issues with plugins.

  • Fixed hot reload not always detecting default subobject changes in the constructor of hot reload class.

  • Fixed infinite loop when a parent component fails to register.

  • Fixed project generation where multiple projects have the same prefix, e.g. TP_Vehicle and TP_VehicleAdv.

  • Fixed UAT crash when trying to load .NET assemblies with missing prerequisites.

  • Fixed UnrealBuildTool's environment variable harvesting method to cope with non-ASCII values, which caused problems when building projects in non-English versions of Windows.

  • FPlatformMisc::LaunchURL now supports arbitrary URI schemas using the default operating system handler.

  • Made UnrealBuildTool not to show verbose logs during its startup.

  • Optimized UnrealHeaderTool, reducing the duration of an invocation on FortniteGame by approximately 20%

  • Optimized various uses of TArray::Pop to prevent incremental reallocation for short-lived or frequently used TArray instances

  • Profiler

    • Fixed profiler not working with live preview for standalone instances

    • Optimized bandwidth required to send the stats data, data is using better encoding and is compressed

    • Data encoding has been moved to the task graph to minimize the performance impact

  • The parameterized constructor for FTimerHandles has been removed.

  • UnrealHeaderTool: Added limited support for parsing character literals to avoid incorrectly erroring on things like '\"'

Editor and Tools

  • New: Improved the performance of FText::AsNumber

    • Blueprints now try and use the default formatting options where possible, as they were previously always using custom formatters which was very expensive

    • We now have a cache of the most recently used formatting options to help the cases where you are frequently re-using a custom set of formatting options

    • FNumberFormattingOptions now provides a convenient way to create a default number formatters:

      • Format a number without grouping separators - FNumberFormattingOptions::DefaultNoGrouping()

      • Format a number with grouping separators - FNumberFormattingOptions::DefaultWithGrouping()

  • New: Improved the performance of FText::Format

  • New: LogFile wrapper improvements

    • Reduced verbosity to make it more usable for file open/close debugging

    • Added open file handle tracking to be able to dump all open file handles via 'filelogdump' console command

  • New: ScriptGeneratorPlugin will now be disabled by default. Projects can opt-in by enabling it in their uproject file.

  • New: The Git source control plugin now has the option to intiialize a new local repository for the current project

  • New: The Git source control plugin now supports merging

  • New: We now offer to show the Output Log when adding a new C++ class fails in the editor.

  • New: When compiling C++ from the editor, any errors are now output to the Message log as hyperlinks. Clicking on them will take you to the appropriate line of the source code in your IDE.

  • Deprecated GEditor->SetActorLabelUnique and GEditor->SplitActorLabel. Please replace calls with the static methods FActorLabelUtilities::SetActorLabelUnique and FActorLabelUtilities::SplitActorLabel

  • Disabled some timing log spam in normal map identification code (seen for every imported texture)

  • Fixed not being able to toggle between Public and Private class when using Add Code to Project

  • Removed unnecessary file existence check

  • Harmonize Compilation Result return codes between Editor platforms

  • Fixed a typo in UE4Games.uprojectdirs

  • FBase64::Decode: fix signed/unsigned comparison bug

  • Removed a dead declaration for FActorDetails::AddMaterialCategory which had no definition

  • Removed FKey mappings for unimplemented gestures (SwipeLeftRight, SwipeUpDown, TwoFingerSwipeLeftRight, TwoFingerSwipeUpDown)

  • Removed some unused background textures from the engine content directory

  • ScriptPlugin will no longer attempt to import txt files resulting in creating invalid blueprints.

  • New: Added support for multithreaded bulk data loading.

    • Any bulk data bigger than a specified threshold will be loaded on a separate thread

    • Size threshold can be set via MinBulkDataSizeForAsyncLoading value under [Core.System] section in engine ini

  • New: Added VerifyAsyncLoadAssumptions console command to check if flags on UObjects get properly reset after streaming has finished.

  • New: Added a ConfigRestartRequired meta-data property to allow you to tag config properties as requring an application restart before they take effect

  • New: Added a utility function to the UnrealEd module in CommandletHelpers.h for generating the commandline arguments necessary to execute a commandlet.

  • New: Added an assert if someone attempts to queue an async IO request without a valid destination buffer to prevent random crashes later in async loading code.

  • New: Added functionality to change the current URL of a web browser window

  • New: Added some additional methods to IAssetEditorInstance to support reasoning about their owning tab manager and last activation time

  • New: Changed UEditorEngine::SnapToSocket to use USceneComponent::SnapTo so that it works generically with any component which handles sockets.

  • New: FArchive objects have now access to Engine Version (FEngineVersion) which they can use for upgrade path logic in serialization code.

  • New: Fully DLL exposed UCurveFloat so you can derive from it

  • New: FWorldGetAssetTags delegate available for games to query world asset registry tags

  • New: GraphEditor: Refactored connection drawing policy API to be more flexible

  • It now passes a parameter structure around instead of loose values (FConnectionParams)

  • Remove duplicated implementations of DrawConnection in subclasses that draw non-curved splines, overriding ComputeSplineTangent instead

  • New: Improved intellisense data for engine source in launcher projects

  • New: JSON API improvements for numbers

  • Added int32/int64 overrides for the WriteValue functions that didn't take a key so that they matched the variations of the functions which did take a key.

  • Added an int64 override for TryGetNumber to match the int32/uint32 versions.

  • New: K2Node_CallFunction will now automatically fix up relevant execution pins when a Blueprint function changes from impure to pure.

  • Several AActor functions changed to be pure functions (GetDistanceTo, et al).

  • New: Made a few UObject-related helper classes thread safe

    • FUnresolvedStructTracker

    • FUniqueObjectGuid

    • FStringAssetReference

    • FUObjectAnnotationDense

  • New: Made it possible to force auto-expansion on an IDetailPropertyRow in a property editor details customization

  • New: Made UGameViewportClient::NotifyPlayerRemoved() virtual

  • New: Mesh painting mode can now be overridden to work on other kinds of UMeshComponent subclasses besides UStaticMeshComponent

  • Create an IMeshPaintGeometryAdapter implementation for your component

  • Create a IMeshPaintGeometryAdapterFactory implementation and register it with the mesh paint module using RegisterGeometryAdapterFactory

  • Note: Currently only texture painting is supported via the adapter, vertex painting may be added at a later time

  • New: Pak files are loaded in deterministic order based on directory

  • New: Pak files can be unmounted now

  • New: Plugins can now define their own input sub-categories rather than having to choose Keyboard, Mouse, or Gamepad

  • EKeys::AddMenuCategoryDisplayInfo is used to define the name and icon for the category.

  • When creating the FKeyDetails for a new key added via EKeys::AddKey you can now specify the menu category to arrange within.

  • New: Temporary UObjects created for hot reload to get their virtual table pointers will now be marked as RF_TagGarbageTemp to be able to skip any hot reload incompatible logic inside their constructor.

  • New: The settings system now creates a category if one did not exist when you attempt to add a new section to a category that did not previously exist, instead of ignoring your request.

  • New: UDeveloperSettings is now available to create settings objects that can be auto-discovered by the editor without building a plugin or some other system to register the settings with the settings viewer.

  • New: UnrealVS v1.34 (+v1.35 for VS2015)

  • New: Duplicated actors maintain relative references

    • When duplicating multiple actors which reference one another, the relative references will be preserved in the duplicated actors, instead of referencing the original source actors.

  • Improved identification of 'Game' projects by checking for uproject files matching the VS projects.

  • Game projects are now always show at the top of the project list.

  • Fixed a command line editor issue.

  • Improved detection of Unreal Engine solution files by looking for a comment in the sln file added by Unreal Build Tool.

  • Quick switching of the IDE's build config and startup project at the same time via the build list in the Batch Builder window.

  • New: Various fixes to the in-game / in-editor screenshot facility:

  • All captured screenshots are now saved as png files.

  • The editor now no longer relies on the delegate registered by the AutomationWorkerModule to save the image as a .png.

  • AutomationWorkerModule now registers a HandlePreTestingEvent and HandlePostTestingEvent with the AutomationTestFramework in order to provide custom screenshot capture behavior while running tests.

  • Made SEditorViewport toolbar handling more flexible

  • Introduced a new method PopulateViewportOverlays that allows arbitrary toolbar creation (bottom, sides, etc...)

  • MakeViewportToolbar (for the top toolbar only) is now optional to implement in subclasses and may be deprecated in the future

  • Added sanitization to the asset name in addition to the package name in FAssetTools::CreateUniqueAssetName

  • Allowed editor mode toolkits a chance at processing command bindings

  • Changed FDragTool to take in a reference to FEditorModeTools* instead of referencing the global one

  • Changed global Undo/Redo routing to automatically invalidate all editor viewport clients

  • Added UEditorEngine::InvalidateAllViewportsAndHitProxies

  • Removed manual Invalidate calls in the Blueprint and Font editors during Undo/Redo handling

  • Removed a redundant InvalidateDisplay after an Invalidate call in the Font editor

  • Changed implementation of TTypeToString and TTypeFromString to use global namespaced functions instead of explicit template instantiations.

  • Clean up pass on UEditorEngine

  • Split all UEditorEngine methods from Editor.cpp into EditorEngine.cpp (though more are still scattered around in other files like EditorServer.cpp)

  • Removed GetClassFromPairMap, ClassMapPair, and associated keyboard shortcuts to place nav pylons, since they don't exist anymore

  • Removed dead variable StreamingBoundsTexture and associated method SetStreamingBoundsTexture

  • Split out the implementations of SplitActorLabel and SetActorLabelUnique into statics on FActorLabelUtilities,

  • Removed various GWorld references

  • Removed empty method HandleCreateMeshFromBSPCommand and associated exec command

  • Ensured that FScalableFloat::FinalCurve is updated when the curve table it's referencing is re-imported

  • Fixed bug which allowed the "-immersive" command-line option even when no project file was specified

  • Fixed slate application focus not being applied correctly when activating windows

  • Fixed UAssetObjectProperty not being able to import asset references in the form "Texture2D'/Game/Thing'"

  • This broke data table importing when using a TAssetPtr property.

  • This wasn't an issue when using User Defined Structs as they use a UObjectPropertyBase when referring to other objects.

  • Fixed Unicode log messages going missing during packaging.

  • Fixed UnrealHeaderTool not respecting class flags on unparsed classes used as property types in other classes resulting in not propagating those flags to properties.

  • Fixing hot reload crash when FStringAssetReference changes during hot reload.

  • Garbage Collector will now respect references from FGCObjects even in cooked builds which have a permanent object pool set to non 0 value.

  • Removed unnecessary loop from FStringOutputDeviceCountLines::Serialize code

  • Promoted FAssetEditorModeManager into UnrealEd and made it the default for FEditorViewportClient::ModeTools when the derived class doesn't specify anything, which prevents some types of selection highlighting issues where editors would use the global selection state incorrectly

  • Removed the Recompile Level Editor feature (was not supported and not working properly)

  • Stopped Visual Studio showing a "Save" message when closing after adding new classes via the editor

  • The rich curve evaluation function was optimised to use a binary search to locate the interpolation nodes. In the particular test case used it resulted in a 10x speed up.

  • UnrealHeaderTool will no longer try to automatically declare a constructor with FObjectInitializer if the base class does not declare one too.

Content Browser

  • New: Added support for saving unique per-filter state in a frontend filter by implementing SaveSettings and LoadSettings

  • New: Added the ability to register new advanced asset categories without editing engine or editor source

    • This is done using new methods on IAssetTools (RegisterAdvancedAssetCategory, FindAdvancedAssetCategory, and GetAllAdvancedAssetCategories); an example can be found in the Paper2D module

  • Added F prefix to FAssetFilterType and FAssetFilterCollectionType, and removed a redundant declaration.

  • New: Opening a C++ class via the Content Browser now opens the source file as well as the header file

Landscape

  • Removed "#pragma clang diagnostic ignored "-Wreorder"" in landscape editor data caches

    • It's always better to fix the code so it doesn't generate diagnostics in the first place

  • Fixed crash in ULandscapeInfo::UpdateAddCollision

  • Fixed incorrect spelling of the ULandscapeHeightfieldCollisionComponent::CookCollisionData function name in C++ code

Project Browser

  • New: Added some verbose logging to help diagonse issues when creating new project templates

Static Mesh Editor

  • Deleted some dead lightmap mesh import/export code in StaticMeshEditor and UnrealEd

Foliage

  • New: Moved Foliage into its own module

  • Removed the InstanceInverseTransform element from the FInstancingUserData struct used by InstancedStaticMeshComponent. This data was incorrectly calculated, wasted memory and was not used by the engine.

Gameplay Framework

  • New Component 'Editable When Inherited' flag

    • A new feature has been added to Components that allows you to specify whether a component may be edited by subclasses or on instances in the world.

    image alt text

    • Be warned that checking this box will overwrite any existing customizations made to the component in any subclasses or actor instances.

    • When the component is locked you will get a warning with a link to open the blueprint or parent class as appropriate.

    • While this boolean can also be set in C++ to prevent a component from being edited, it is generally more appropriate to use a UPROPERTY that is not marked as visible.

  • New: Made DefaultPawn more extensible by allowing subclasses to use any type of PawnMovementComponent

  • New: Added AActor::bActorHasBegunPlay to track that an Actor has had BeginPlay called for it and has not subsequently had EndPlay called. Use HasActorBegunPlay to query.

  • New: Added FTimerData::Clear to make it easier to reset a timer.

  • New: Removed "virtual" keyword from several engine-level BlueprintImplementableEvents to conform to the new "BlueprintImplementableEvents should not be virtual" standard.

  • New: SpawnActor will now log a warning and fail if the input location or rotation contains NaNs.

  • New: The OnTeleported event is now defined in UMovementComponent (rather than UCharacterMovementComponent), meaning any type of movement component can now handle that event.

  • Added missing call to Super function in APawn::TeleportSucceeded().

  • Centralized several duplicate implementations of projection matrix calculations for user cameras into FMinimalViewInfo::CalculateProjectionMatrixGivenView

    • Note: Editor cameras that are not previewing a camera actor still go down a separate code path for now

  • Corrected comment for MakeEditWidget metadata to replace FRotator with FTransform reference and add that it works on TArrays of supported types too

  • Fixed DrawDebugBox using DepthPriority incorrectly.

  • Fixed FTimerManager::FindTimer so that it can find the currently-executing timer.

  • Fixed PlayerController's GetHitResultAtScreenPosition() not returning the index of the face that was hit

  • Fixed USceneComponent::GetRelativeTransform to be const.

  • Prevented the canvas being passed into ViewportClient->Draw from having an invalid/uninitialized ViewRect member

  • Removed UPROPERTY tags from several PlayerCameraManager members that didn't need it.

  • New: Added Auto Destroy Delay property to GameplayCueNotify_Actor so if Auto Destroy On Remove is true it will set the lifespan of the gameplay cue instead of destroying it immediately.

  • New: Added GameplayStatics::GrassOverlappingSphereCount(), which returns the the number of instances of a specific grass mesh within a sphere (in C++ or Blueprints)

  • New: Added GetActorTickableWhenPaused function to Actor

  • New: Added some simple versioning to the engine-provided savegame serialization (via UGameplayStatics::SaveGameToSlot and LoadGameToSlot). This will enable us to handle future updates more robustly.

  • New: Fixed comment on GetActorsInSelectionRectangle function

  • New: PlayerController ClientStopCameraShake and ClientStopForceFeedback are now reliable.

  • Added nullptr check to SpawnDecalAttached

  • Changed UMovementComponent::OnTeleported() to be called for all Pawns that teleport, rather than just for Characters.

  • Fix category for OnDestroyed and OnEndPlay Actor delegates

  • Added clearer display name for EAttachLocation::SnapToTarget ("Snap to Target, Keep World Scale" in the editor).

  • Added new attachment location option called EAttachLocation::SnapToTargetIncludingScale ("Snap to Target, Including Scale" in the editor).

Documentation

  • Added warning to documentation for AActor::GetComponents() about the possibility of the array changing while iterating its contents.

Localization

  • New: The text from UI_COMMAND macros will be nested under the namespace specified by LOCTEXT_NAMESPACE, nested under the "UICommands" namespace. IE: "UICommands.MyNamespace"

  • New: Vastly improved in-code documentation, type and function names, and intelligibility of much of the text localization system.

  • Tidied up some old localization code by removing the following: PPF_LocalizedOnly, CPF_Localized, CLASS_Localized, UProperty::IsLocalized.

Networking

  • Network Replay Compatibility

    • Added ability for older network replays to be backwards compatible with newer engine versions.

    • You can now load old replays with new engine versions.

      • This works by building a network checksum for each actor that is based on the network properties, and detecting if they change.

      • It's built so that actors that are different don't load, and should simply be missing from the scene.

    • This is an experimental feature that should hopefully continue to improve over time.

  • New: Added an interface for network replay streaming, INetworkReplayStreamer, in the new NetworkReplayStreaming module.

    • This interface encapsulates the behavior of saving and retrieving replays from a storage provider.

    • INetworkReplayStreamer::EnumerateStreams can be used to get a list of replays that are available for viewing.

    • The logic for storing replays to your project's Saved/Demos directory in previous versions has been moved into the default concrete implementation of this interface, FNullNetworkReplayStreaming.

      • Each replay is now stored in it own directory, which contains the various data files that make up the replay.

  • New: Added new API functions to make using network replay features easier.

    • UGameInstance::StartRecordingReplay to start recording a replay.

    • UGameInstance::StopRecordingReplay to stop recording a replay.

    • UGameInstance::PlayReplay to start playing a replay.

  • New: IsLocalPlayerController should now be accurate at all times, removing any undefined behavior if called early or late in a PlayerController lifetime

  • New: Removed some obsolete protocol version variables from the UNetConnection class.

  • New: ServerReplicateActors no longer does hard casts to PlayerController or Pawn to resolve owner issues. There is now a GetNetOwner function to return the actor that "owns" the connection. Typically APlayerController, but AOnlineBeacon overrides this as well. Allows replication of any UPROPERTY values on AActors as if regular game replication was taking place.

  • New: The server now closes channels for torn-off Actors (actors whose bTearOff flag is true) the next time they would be considered for replication.

  • Added some missing error codes in FSocketSubsystemBSDCommon::TranslateGAIErrorCode, which handles errors returned from getaddrinfo()

  • Beacons actors are now cleaned up properly in NotifyActorDestroyed. Previously any server initiated cleanup attempt would not destroy the actor on clients because the net driver wasn't properly notified.

  • DebugCameraController always returns true in IsLocalPlayerController

  • Move code in UDemoNetDriver::TickFlush to UDemoNetDriver::TickDispatch. This makes DemoNetDriver behave like IpNetDriver and fixes some issues in network replays with actors stuttering, among other issues.

  • Packets from Steam socket connections that have been previously closed are now discarded before processing.

  • Removed the obsolete USTRUCT version of FNetworkGUID, as it is no longer used.

  • When using the NullNetworkReplayStreaming module, enumerated replays will now correctly report the friendly name that was assigned when the replay was recorded. By default this is the name of the map on which the replay was recorded.

  • New: Added GetMaxAvailableTeamSize to reservation beacon API for returning the max available space on any one team for an incoming group.

  • New: Made it possible to inherit from UControlChannel

  • New: Marked the UVoiceChannel class for export

  • New: We now replicate the component in FHitResult

  • Fast TArray now tracks unmapped properties on the client side, freeing up the server, and simplifying things there.

  • UpdatePing and RecalculateAvgPing are now virtual

Online

  • New: Added a new function to the online sessions API to find a session by id. Not implemented by most platforms yet.

  • New: Added a new macro ONLINE_JSON_SERIALIZE_OBJECT_SERIALIZABLE which allows serialization of nested JSON objects.

  • New: The OnSessionInviteAccepted delegate in the OnlineSessionInterface has been removed, and has been fully replaced with the OnSessionUserInviteAccepted delegate.

  • Added support for the FOnlineSessionSettings class to properly serialize boolean values.

  • Fixed a bug that would cause precision loss when reading or writing 32-bit integers with very large values in FOnlineJsonSerializerReader and FOnlineJsonSerializerWriter.

    • Note that since the FOnlineJsonSerializable class is based on this code, it has also been fixed.

  • Crash fix for BuildPatchTool following FRunnableThread::InitializeTls requirement

Other

  • New: Added navigation filter support in EQS pathfinding tests.

  • New: Added new EQS generator for creating rings of points.

  • New: Now UnrealBuildTool warns if you are trying to build the project with SQLiteSupport module using Rocket build, which is not supported.

  • New: Removed deprecated file Media.h

  • New: Simplify creating subobjects in Engine module.

  • Removed private precompiled header inclusion in public header of SQLiteSupport module, which caused building breaks.

  • New: Added GetTextSafeRegionBounds() function to the stereo rendering interface, to make it easier to place debug text in the readable area of VR headsets

  • New: Added new console command ?'ShowDebugForReticleTargetToggle ' Toggles 'ShowDebug' from showing debug info between reticle target actor (of subclass ) and camera view target.

Paper2D

  • New: Added/improved comments for various Paper2D types

  • Added getters for CollisionThickness and SpriteCollisionDomain to UPaperSprite

  • Added necessary includes so that Paper2D and Paper2DEditor modules can be compiled without including the corresponding *Classes.h files, improving single file iteration time

  • Changed FSpriteAssetInitParams.Offset and Dimension to be FIntPoint instead of FVector2D, along with various other sprite texture region code

  • Implemented USceneComponent::GetAllSocketNames() in terms of USceneComponent::QuerySupportedSockets() and removed unnecessary virtual and existing overrides

  • Made most variables in UPaperTileLayer private

  • Prevented the sprite scene proxy from directly accessing the body setup (used for collision geometry visualization) via the owning component, instead caching it at creation and updating it as necessary

  • Refactored the code from UPaperSprite that takes a FSpriteGeometryCollection and converts it into collision geometry in a UBodySetup into a new helper class FSpriteGeometryCollisionBuilderBase for reuse with tile maps, etc...

  • Renamed PaperJsonImporter module and associated classes to PaperSpriteSheetImporter

  • New: Added SetPlaybackPositionInFrames and GetPlaybackPositionInFrames to UPaperFlipbookComponent

  • New: Exposed UPaperSpriteComponent::GetSpriteColor, allowing you to query the current color of a sprite instance

  • New: Implemented a stable vertex buffer as an opt-in fast path for FPaperRenderSceneProxy subclasses

  • Made members of UPaperTileSet private and added accessors

  • Removed BlueprintReadWrite from FPaperTileInfo members, opting instead for friendlier make/break functions (since the index contains packed flags)

  • Removed editor-only gating on registering the Paper2D custom version and performed as much back-compat loading code as is possible in cooked builds

    • Note: UPaperSprite assets still cannot rebuild collision or render data in a cooked build and will warn on load if they are stale in a cooked build due to incremental cooking

    • Removed support for the old binary collision layers in Tile Maps

Physics

  • PhysX 3.3.3 source code is available for everyone. Check out https://wiki.unrealengine.com/PhysX_Source_Guide for more info

  • Turned on sync scene lock warning. This is needed to ensure accessing PhysX from multiple threads is safe. Introduced a new lock semantic to make this more explicit.

  • New: "p.ShowInitialOverlaps" now also draws the triangles of a trianglemesh or heightfield which the query overlaps.

  • New: Added an optional memory validation for the physx allocator

  • New: Added stat counter for USceneComponent::EndScopedMovementUpdate, under "Stat Game"

  • New: Added support for querying the number of instances in an area for an HISMC

  • New: Added tunable control of FloatingPawnMovement's turning responsiveness.

    • Simplified compact statement that was computing the turning vector in order to make it easier to read.

  • New: Added virtual hook in CharacterMovementComponent to determine if a client's state is too different from the server's (ServerCheckClientError).

    • This is used by ServerMoveHandleClientError() to determine whether to send a client error correction.

    • Added FNetworkPredictionData_Server_Character::bForceClientUpdate to allow users to force a client correction.

  • New: Deprecated OverlapSingle and introduced OverlapBlockingTest, OverlapAnyTest

  • New: Introduce contact modify flag for body instance. This is needed for destruction impact resistance.

  • New: Performance: FQuat, FRotator, FRotationMatrix optimizations across multiple platforms.

    • Optimized FQuat<->FRotator conversions.

    • Optimized FRotator::Vector, FQuat::RotateVector, AActor::GetActorVector

  • New: Refactor overlap/sweep/raycast so that they explicitly use channel object type or profile

  • New: Various Actor and SceneComponent methods that use FRotator now have overloads taking rotation as an FQuat (Quaternion).

    • Current calling code should still function normally (old APIs are maintained).

    • FQuat versions are faster if you start with a Quat, since FRotator versions typically will convert to Quat first. For example use GetActorQuat() rather than GetActorRotation() (which itself does a Quat->Rotator conversion).

  • Added FQuatRotationMatrix, for the common case where FQuatRotationTranslationMatrix is overkill.

  • Added missing Super::TickComponent() to RotatingMovementComponent.

  • Added more DiagnosticCheckNaN_All() checks in common FTransform methods.

  • Added stat tracking to all PhysX lock/unlock calls, not just the scoped locks.

  • Always clear output FHitResult in RaycastSingle and SweepSingle regardless of whether there is a hit.

  • Apply ScaleInputAcceleration() to acceleration in UCharacterMovementComponent::MoveAutonomous().

  • BlueprintImplementableEvent ACharacter::K2_UpdateCustomMovement() is no longer virtual.

    • It was never intended to be overridden in C++. That is the purpose of UCharacterMovementComponent::PhysCustom().

  • Change FBodyInstance.UseAsyncScene to take in the owning PhysScene. This is important in cases where garbage collection may have marked the OwnerComponent as unreachable.

  • Character NavMesh movement avoids ProjectLocationFromNavMesh() line trace when location has not changed since last valid check and bAlwaysCheckFloor is not true.

  • Characters using NavWalking movement mode now stagger their line check updates to avoid running on the same frame if possible.

    • Time updates account for rollover to make delta times accurate. Adds protection so a frame rate / delta time spike doesn't realign them all to the same frame.

  • Don't crash on invalid normal in ConvertQueryImpactHit() (changed to ensure).

    • Added better handling of initial overlaps for raycasts.

    • Don't allow invalid normal to be returned out of ConvertQueryImpactHit() in any case.

  • Fix destructible not turning on hit events if an impact depth override is used

  • Fix for "penetration" causing character movement to hitch. Rather than stopping all movement that update, deflect off the depenetration vector and continue movement.

    • Add "p.PenetrationOverlapCheckInflation" to replace previously hardcoded value, for easier tuning of inflation used in overlap check when resolving overlap.

    • Fix jumping when pressing up against corners causing a very quick landing, caused by using invalid penetrating sweep result.

  • Fix for destruction crashes when userData becomes stale. This has been seen in a few places: addForce, recreation of state, etc...

  • Fix PhysicsVolumes not being unregistered from the global list when they are streamed out.

  • Fixed CharacterMovement using an invalid floor as the Character's base component when initially entering Walking mode.

    • Added UCharacterMovementComponent::SetBaseFromFloor() helper to validate that the floor is indeed walkable before calling SetBase() with the hit component.

  • Fixed ComponentSweepMulti() using incorrect transform when shape is not at the local origin.

  • Fixed crash when extracting instance transforms from an instanced static mesh component when the tree wasn't fully built

  • Fixed PhysX crash caused by calling PxScene::addActors after simulation started.

  • Fixed recursive UCharacterMovementComponent::StartNewPhysics() calls allowing UpdatedComponent to change in nested scopes.

  • Improved PhysX locking for scene queries to prevent potentially accessing scene data when processing results after the scene has been unlocked.

  • MovementComponent refactored to add overloads using FQuat in addition to FRotator.

  • Optimization: Remove check for DestructibleActor in CharacterMovementComponent floor check, it is handled by component mobility check.

  • Optimization: Removed the "lock-per-shape" and redundant lock/unlocks in ComponentSweepMulti.

  • Performance: Avoid some GestureRecognizer logic when nothing has changed.

  • Performance: Avoid unnecessary work in APawn::FaceRotation() when none of bUseControllerRotation[Pitch|Yaw|Roll] are enabled.

  • Performance: Change all uses of "GetActorRotation().Vector()" to "GetActorForwardVector()" which is ~10x faster.

  • Performance: Change use of FTransform::TransformFVector4() to FTransform::TransformPosition() where possible. This is faster when starting with a 3 component FVector.

  • Performance: Convert more uses of individual Sin/Cos calls to use new faster SinCos(). Cleaned up some hardcoded degree to radian conversion to use the function template instead.

  • Performance: Convert uses of FRotationMatrix(GetActorRotation()).TransformVector(...) to GetActorQuat().RotateVector(...) which is equivalent but faster.

    • The latter method is nearly 5x as fast as the first.

  • Performance: Converted some uses of GetActorRotation() to GetActorQuat() where possible. Use FQuatRotationMatrix rather than FRotationMatrix where possible.

    • FQuatRotationMatrix(GetActorQuat()) is ~4x faster than FRotationMatrix(GetActorRotation())

  • Performance: fix perf regression in UPrimitiveComponent::MoveComponent() caused by continual FText creation.

  • Performance: inline UActorComponent::GetOwner()

  • Performance: Optimize FTransform::TransformVector() and FTransform::TransformVectorNoScale() to remove unnecessary work. Vectorized versions are 25% faster than before.

  • Performance: Optimized CharacterMovementComponent::ApplyRepulsionForce().

  • Performance: Optimized collision queries to reduce dynamic allocations in ignored component list.

  • Performance: Optimized FTransform::TransformPosition() and FTransform::TransformPositionNoScale().

  • Vectorized versions are now 25% faster than previous implementation.

  • Performance: Optimized MovementComponents to reduce Quat<->Rotator conversions. Reduced Actor calls for rotation/location and use Component instead (saves branch).

  • Performance: UPrimitiveComponent::AreAllCollideableDescendantsRelative() optimized to reduce potential dynamic allocations.

  • Performance: use PhysX single-query functionality (with eANY_HIT flag) where possible. 25% speedup for RayCastTest(), GeomSweepTest(), GeomOverlapBlockingTest().

    • Renamed FPxQueryFilterCallback::bSingleQuery to bIgnoreTouches for clarity.

  • Remove null entries from NonDefaultPhysicsVolumeList in UWorld::RemovePhysicsVolume() in case any are accumulated.

  • Renamed UProjectileMovementComponent::HandleHitWall() to new virtual HandleBlockingHit() which has a new enum return value. Refactored Deflection/Sliding determination to new HandleDeflection() virtual.

    • UProjectileMovementComponent::HandleBlockingHit() returns an enum indicating how simulation should continue: Deflect, AdvanceNextSubstep, Abort.

    • UProjectileMovementComponent::StopSimulating() is now virtual.

  • Save movement mode in CharacterMovement saved move when recording it after movement. Fixes some character network correction issues if derived classes depend on the saved movement mode.

  • The FBoxSphereBounds transform functions were optimised resulting in a 32x speed up. FBox transforms were also sped up by a factor of 2.

  • TryToLeaveNavWalking() is now called when DefaultLandMovementMode was NavWalking and we are trying to enter normal Walking mode.

  • Turn auto weld on for shape components

  • Use new OverlapBlockingTest() in MovementComponent code.

  • UWorld::DestroyActor() and AActor::Destroy() prevent recursion by checking IsPendingKillPending() instead of IsPendingKill().

    • Prevents possible infinite recursion during destruction with cycles that try to destroy something marked for destruction earlier in the stack.

    • Prevents calling destruction events multiple times for the same objects when there are cycles.

    • Return value of both methods has been changed to the value of IsPendingKillPending().

  • New: Added a helper function (ScaleByMomentOfInertia) for scaling torque by moment of inertia. This effectively does the world to local space conversion for you and scales by the inertia tensor.

  • New: Added a 'ToString' helper function to the FHitResult struct to aid debugging collisions

  • Allow querying for counts using an FBox

  • Allow collection of instance transforms in provided FBox

  • New: Added serialization support to TQuadTree

  • New: Remove triangles with very small area when cooking collision trimesh data (area is controlled by physics settings "TriangleMeshTriangleMinAreaThreshold").

  • Added 'bInitialOverlap' to BreakHitResult. Improved comments/documentation for initial overlap case.

  • Delete Pawn methods IsWalking(), IsFalling(), IsCrouched(). Properly mark LaunchPawn() as deprecated in C++.

    • The deleted methods have been private and BP-deprecated since 4.0 release, and did nothing. This allows subclasses to implement functions with these names and expose them to blueprints if they wish.

    • LaunchPawn() BP function was already tagged with deprecation metadata.

  • Exposed AActor::IsOverlappingActor(), UPrimitiveComponent::IsOverlappingActor(), UPrimitiveComponent::IsOverlappingComponent() to blueprints and improved comments

Platforms

  • Fixed default directory iterator assignment in FFileIterator.

  • Process management has been reworked, deprecating redundant methods of FProcHandle in favor of FPlatformProcess API.

Android

  • New: Added GExternalFilePath to allow access to Android getExternalFilesDir path

  • Allow volume buttons to be handled by game or system with FPlatformMisc::SetVolumeButtonsHandledBySystem and FPlatformMisc::GetVolumeButtonsHandledBySystem

  • Added two Blueprint nodes SetVolumeButtonsHandledBySystem and ?GetVolumeButtonsHandledBySystem in Utilities/Platform

iOS

  • Fixed orientation determination when targeting iOS 7 or earlier

Mac

  • New: A Manifest_DebugFiles.txt is now generated on Mac similar to other platforms. This contains file paths to debug and test apps built in addition to the primary (typically shipping) app.

  • New: Added ?FApplePlatformFile::CopyFile() that differs from the generic implementation in that it also copies the file permission bits

  • New: Added support for HasSizingFrame in window definition

  • New: Don't report mouse move to Slate on Mac if the cursor is not over a Slate window.

  • New: iOS SDK info is no longer printed when generating Xcode project. Generating data for project indexing uses different description as "Binding IntellliSense data" was misleading

  • New: Mac event handling code was heavily refactored for improved stability

  • New: Removed mouse capture code from Mac version as we no longer need it

  • New: Simplified dylibs setting in Mac toolchain, so we use rpaths for almost everything.

  • New: Swapped the way we treat main and key windows in Slate on Mac to be consistent with native window buttons behavior

  • Add write permission to files copied with FApplePlatformFile::CopyFile() as this is what engine expects in some places

  • Defer closing and releasing of FCocoaWindow objects till the next PumpMessages, so that it's done when MacApplication and Slate no longer know about them.

  • Disabled server configs in Xcode projects created with binary version of the engine, as it doesn't include libs needed to build servers

  • Disabled the message box in xcodeunlock script as it's not working correctly in Xcode 6.3

  • Fixed file corruption caused by calling FFileManagerGeneric::Copy with dest and src paths that are the same

  • Fixed FMacPlatformProcess::ExecProcess() to correctly parse double-quoted arguments like CreateProc() does. Fixed linking and running with bDebugBuildsActuallyUseDebugCRT = true

  • Fixed use of custom icons and Info.plist files for Mac apps built remotely from PC

  • MacApplication now enumerates and ticks IInputDeviceModule implementatations

  • Use relative paths in the response file used for linking on Mac to fix the posix_spawn_failed error in non-unity builds

  • New: Added sorting of display modes to ?FOpenGLDynamicRHI::RHIGetAvailableResolutions()

  • Call TConsoleVariableData::GetValueOnAnyThread in UConsole::Serialize to fix crash reporting on OS X when the crashed thread is not the game thread.

  • Exempt -Wreorder from -Werror on Mac so that it doesn't break builds.

  • Fixed a crash at exit in FOutputDeviceConsoleMac

  • Optimized Mac ?FTextInputMethodChangeNotifier so it doesn't call expensive GetWindow() until it's really needed

  • Remove an unnecessary workaround from the Mac OpenGL implementation of MapBuffer that reduced performance and was masking a bug in the ResourcePool code.

Playstation 4

  • New: Added console variable 'r.PS4StallsOnMarkers' which will cause thread traces to line up with markers on RazorGPU thread trace timeline. Adds GPU overhead.

  • New: Added extra assembly info for PS4 shaders when using r.DumpShaderDebugInfo

  • New: Added new RHI command 'RHISubmitCommandsHint'. Hints to the driver to submit the currently accumulated GPU commands, regardless of how many commands there are.

  • New: GNM debug libs are now linked when bEnableGnmLCUEDebug is set. Also we define LCUE validation in debug builds, and for bEnableGnmLCUEDebug.

  • Added a define for ALLOW_UAV_CONDITION for multi-platform support.

  • Added thread safety checks for pooled render target usage.

  • Fixed a crash on PS4 when setting null texture references.

  • Fixed a crash when resolving a non-rendertarget texture. Emits a warning now instead.

  • Fixed a null pixel shader gnm validation error.

  • Fixed SDK 2.5 to support the increased max shader resource count (32).

  • Fixed sdk include_common path.

  • Fixed various GNM debug assertions.

  • Removed printout for benign warning in Morpheus head tracking.

Xbox One

  • New: Added support for RQT_Undefined in Xbox query code. Like on Windows, this waits for the GPU to catch up.

  • New: Enabled the linking of PIX libraries and addition of PIX labels by default in all configurations except Shipping.

  • New: Many bug fixes and improvements to session handling in OnlineSubsystemLive, including:

  • Canceling a matchmaking session is now more reliable.

  • Added support for JSON objects and arrays in session settings.

  • New: OnlineSubsystemLive now uses the new Xbox Live 2015 multiplayer APIs.

  • New: Removed Windows only functions from the Xbox One Render Hardware Interface (RHI).

  • Fixed a D3D11 reference count leak in the DECLARE_ISBOUNDSHADER macro.

VR

  • New: The SteamVR plugin is now in the Runtime plugins folder rather than Experimental.

Windows

  • New: Allowing for checking major AND minor version of Windows

Programming

  • New: Added API for getting handle of top-level window on Windows

  • New: Added API for intercepting Windows messages

  • New: Added FPaths method named EngineSourceDir for getting the path to the Engine's source code directory.

  • New: Added new debug helper to draw planes with differently sized extents

  • New: Added support for TSharedPtr

  • New: Allow locating of SCSNodes by both template and component instance name.

  • New: Async: Added support for scheduling tasks on the queued thread pool

  • New: Async: Added support for TAsync

  • New: Deprecated 'operator new' for UObjects. It's not safe to construct new objects using C++ operator new.

  • New: Deprecating UProperties does not cause deprecation warnings in generated code.

  • New: EditorUtilities::CopyActorProperties can now be used for target actors that are a subclass of the source actor.

  • New: Exposed generic Get/SetAxisProperties accessors to UPlayerInput.

    • Deprecated UPlayer::SetMouseSensitivityToDefault and InvertMouse

    • Moved SetMouseSensitivityToDefault and InvertMouse exec functions to UCheatManager instead of UPlayerInput

  • New: Fixed shadow variable warnings when a class has a member named Result

  • New: FMemberReference moved out of K2Node.h and in to Engine module in MemberReference.h

  • New: Implemented Future/Promise/Async concepts

  • New: Inheritable component records can now be looked up via template name as well as component name.

  • New: Optimized processing of UWorld::ComponentsThatNeedEndOfFrameUpdate by eliminating TSet hash comparison overhead

  • New: Renamed FQueuedWork to IQueuedWork

  • New: SessionServices: Made public headers compilable individually

  • New: Slate's FInputGesture and Engine's FInputChord unified as FInputChord defined in Slate

  • New: TInlineComponentArray can now have an Actor supplied to the constructor to void the need to call GetComponents on the subsequent line.

  • New: UActorComponent now caches Owner as an optimization on GetOwner() calls.

  • New: UBT: Enabled PrivateIncludePaths in arbitrary project sub-directories

  • AActor::GetActorClass deprecated, use GetClass instead.

  • AActor::UnitializeComponents is now called after AActor::EndPlay during AActor::RouteEndPlay to maintain consistent pairing of Initialize/UnitializeComponents Begin/EndPlay

  • Backwards compatibility code for 4.7 component changes now gated by Object Version check

  • Fix typo where unweld was iterating over asyncActor shapes but calling function on syncActor

  • Fixed hundreds of warnings generated by PVS-Studio static C++ analyzer

  • FStringAssetReference::TryLoad now correctly follows redirectors

  • FTimerManager::FindTimer will no longer incorrectly return an invalid timer when invalid handle is passed in.

  • Made some of the compiler command lines significantly shorter which should prevent strange compiler errors, especially when compiling UELinkerFixups cpp files.

  • Skipped saved property warning will now only be emitted when loading from disk in cooked content.

  • Specifying an instigator for a Pawn via FActorSpawnParameters will now properly be applied.

  • UBT: Fixed public library path settings being ignored in build rules

  • virtual BlueprintImplementableEvents do not work correctly in all cases. BlueprintNativeEvent should be used for cases where both C++ and Blueprints are expected to override the functionality.

    • In a future release this will be made a Unreal Header Tool error.

  • New: Default AGameMode::ChoosePlayerStart implementation now uses GetDefaultPawnClassForController instead of DefaultPawnClass directly.

  • Fixed occasional shutdown crash in source code navigation database (due to static destruction order)

  • Fixed TComPtr internal pointers being released in wrong order

  • Slight optimization to FName less than operator

Rendering

  • New: Added a Thickness option to DrawFlatArrow, DrawDirectionalArrow, and DrawCoordinateSystem

  • New: Moved some shaders used by RHIs directly into the new UtilityShaders module

  • New: Reworked shader stream out support, now works properly with FShaderResource sharing

    • GetStreamOutElements is a callback function on the shadertype, just like ModifyCompilationEnvironment

    • If GetStreamOutElements is specified, the FShaderResource includes that shader type in its ID as it can't be shared with any other shader type.

  • New: Stationary lights with CastDynamicShadows disabled no longer do dynamic shadow setup, minor optimization

  • New: The D3D RHI now uses a DXGI1.1 factory rather than 1.0. It still uses 1.0 interfaces.

  • New: XGE Distributed Shader Compilation from Luke Thatcher of Lionhead Studios

  • Enabled with either r.XGEShaderCompile=1 in ConsoleVariables.ini, or -xgeshadercompile command line argument

  • Added an ensure to guard against setting a non-rendertarget texture as a render target.

  • Fix cooking crash with atmosphere rendering.

  • Fixed an issue that prevented the BlendMode from being changed on FCanvasNGonItem

  • Removed dead class FFontMaterialRenderProxy

UI

  • New: Converted UTextRenderComponent to use FText so it can respond to live-culture updates

  • New: Input bindings for Motion, Gesture, Android, Steam, and XBox One keys now appear in their own sub categories under Input.

  • Added a fallback font when calling AHUD::GetTextSize to mirror the behavior of AHUD::DrawText

  • Added support for passing in a command list when creating a details view that can be queried by customizations, allowing key-bound commands

  • Updated uses of SSingleObjectDetailsPanel and SActorDetails

  • Correct initialization of bMenuHiding and bMenuHidden in SGameMenuPageWidget::Construct(). Fixes issues with clicking on player name input widget in PlatformerGame.

Slate

  • The FString passthrough functionality of SLATE_TEXT_ATTRIBUTE is deprecated as of 4.8, which means that you're now going to get a deprecation warning when passing text to Slate as FString rather than FText.

  • SLATE_TEXT_ATTRIBUTE was originally added as a stop-gap solution to allow all the code that was already passing text to Slate as an FString to continue to build without having to make any code changes.

  • SLATE_TEXT_ATTRIBUTE provided a way for the transition between FString and FText to happen slowly, however that transition period has ended, and soon the FString support will be removed (likely by 4.10).

  • New: Added a way for STableViewBase (and its derived types) to notify you when they are scrolled

  • New: Added an option to create Slate window without a close button and used it for Source Control Login window, replacing a custom title bar it was using that didn't look well on Mac

  • New: Added another column sizing mode to STableRow which allows Excel like sizing

    • EColumnSizeMode::Manual

  • New: Added custom slate stats. See SlateStats.h for details on the new system, which allows for full hierarchical profiling with limited overhead.

  • New: Added FTabManager::GetOwnerTab() to return the tab that owns the specified tab manager

  • New: Added SContentPicker::OpenAssetPickerMenu to programmatically trigger the asset picker

  • New: Added the ability to specify a minimum desired width for SViewportToolBarComboMenu

  • New: Added tracking of the last activation time to SDockTab instances

  • New: Added warnings for when FSlateFontInfo is created with a null font, or a font that can't provide a valid composite font

    • This also stops offline (bitmap) cached fonts from reporting that they're able to provide a composite font (they can't).

    • This makes it clearer when Slate will be forced to use the fallback font path, which may not always be as fast as the standard font path.

  • New: Exposed a variant of SWidget::FindChildUnderMouse that takes the position to check directly instead of a pointer event

  • New: Slate is now able to "sleep" when there is no user input and no widgets need to update. While sleeping, the entire Tick/Paint pass is skipped. This can be useful for those running the editor on battery power.

    • This is currently only relevant to Slate widgets used in the editor (in-game Slate should still be ticked every frame as before)

    • Any widget can prevent Slate from sleeping by registering an "Active Timer." Whenever an active timer needs to execute, Slate will tick/paint that frame (even in the absence of user input)

    • The active timer portion of the system is active at all times, but sleeping can currently be disabled prevented by typing "Slate.AllowSlateToSleep 0" in the console

  • New: WebBrowser: Converted OnTitleChanged delegate to an event

  • Changed SFxWidget's HAlign and VAlign attributes to arguments to match how they were actually used.

  • Fixed an issue where STableRow::GetContent would always return SNullWidget when the content was set via SetWidget

  • Fixed memory leaks caused by Slate holding onto UTexture references for too long.

  • Fixing STableRow to properly return the handled result on the new OnAcceptDrop handlers.

  • Hittest grid no longer discards the entire event path when a single widget in that path is broken. Instead, it returns a truncated path from root.

  • If the widget asking for mouse capture is completely gone (including the entire path to that widget) do not crash; ensure instead.

  • mproved SWizard styling compatibility (now obeys text style on Next/Back buttons, and uses the success style on Next)

  • InsertsSlots funcs default to AddSlot if no index is specified

  • List view should not attempt to scroll if that would lead outside scroll range. This check is performed only if overscroll is not allowed.

UMG

  • New: Adding a reference implementation of a web browser wrapper around the SWebBrowser Slate widget to the WebBrowserAsPlugin module.

  • New: Adding an experimental wrapper for SRichTextBlock. A lot of work remains for supporting links and images but this will serve as a nice starting point.

  • New: Adding ExpandableArea as an experimental widget, demonstraits how you can use the named slot interface on a non-user widget to provide multiple slots, but not N slots like a normal panel.

  • New: It's now easier to provide settings to the Editor. If you derive from UDeveloperSettings, but otherwise have all the typical config related metadata for the class your settings will automatically be registered with the editor. This avoids needing to make a plugin or editor module just to register your settings class for your game.

  • Exporting 3 blueprint function libraries UMG exposes to be linkable from C++ DLL

  • Now using IsBindableEvent="True" for widgets that expose bindable single cast delegates. Using the old trick of scanning for ones ending with "Event", will eventually stop working.

Upgrade Notes

Programming

  • Shadow variable warnings enabled. Almost all shadowed variables have been eliminated from the UE4 source and shadow variable warning has been enabled.

    • Currently enabled when building for Mac, Linux, iOS, HTML5, and Windows using clang. Android and PS4 should be enabled in 4.9. Windows with visual studio should come with Visual Studio 2015 support.

    • While enabled by default, each module can disable the warnings by adding bEnableShadowVariableWarnings = false; to the .Build.cs file for the module.

    • If you need to disable the warning for just a specific section of code or the includes from a third-party library you cannot modify you can wrap the code with PRAGMA_DISABLE_SHADOW_VARIABLE_WARNINGS and PRAGMA_ENABLE_SHADOW_VARIABLE_WARNINGS

  • Since we had to replace bRebuildAtRuntime boolean property with a new enum, you should update navigation rebuild settings in your project configuration.

Animation

  • If you have any Anim Blueprint derived from either of those classes, it won't work.

Automation

  • Running automation tests through command line for larger projects may take longer before the tests are triggered.

Blueprints

  • Users may be required to select the top most comment node in a nested to set once in order to fix older blueprints that have persistent comment selection issues

Core

  • Standardised naming convention for class used to managed memory operations, the same names for template and pointer based functions

    • MemSet replaced with Memset

    • MemZero replaced with Memzero

    • MemCopy replaced with Memcpy

  • Hot reload uses special empty auto-generated constructors to obtain virtual table pointers from UObjects and to avoid re-constructing subobjects when creating temporary objects after loading the recompiled DLL but before the classes have been regenerated. This implies the requirement that all member variable types are default constructible.

    • The signature of the new constructor is UMyClass::UMyClass(FVTableHelper& Helper) and it can be manually defined in the header file to initialize all member variables that are not default-constructible

    • Auto-generation of the new constructors can be disabled by defining WITH_HOT_RELOAD_CTORS macro to 0 and setting [Core.System] UseVTableConstructors to False in BaseEngine.ini.

    • Note that disabling this feature may result in crashes when performing hot reload.

  • We're planning to enable async loading thread by default in future releases so it's a good time to start looking through gameplay C++ code to make sure that all UObject-derived class constructors, as well as all overrides of UObject::Serialize and UObject::PostInitProperties functions are thread-safe.

    • The most common pitfall is accessing global managers (singletons) from those functions without guaranteeing thread safety of the operations performed on them.

    image alt text

    • Another common issue is accessing static or global variables from constructors and/or changing their value.

    image alt text

    • One should also be careful about accessing any objects not owned by the object currently being constructed/serialized as these operations can be performed simultaneously from multiple threads.

    image alt text

    • It's also dangerous to hold references to objects not owned by the currently constructed/serialized object on the stack (inside of a function) without referencing it through a UProperty or surrounding the scope of the function where they are used with FGCScopeGuard object.

    image alt text

Editor and Tools

  • Any project defaults for EditorUserSettings will no longer apply. Please rename any (Default)EditorUserSettings.ini configs to (Default)EditorPerProjectUserSettings.ini

    • On loading 4.8 for the first time, we will migrate the first loaded project's editor layout and keybindings to the default location. These settings will then be common to all projects.

Content Browser

  • The named FExtender sections in the Content Browser Filters menu have been replaced by the added ability to register new advanced asset categories.

Cooker

  • Games supporting DLC will now receive a warning when engine content is accessed during cooking if they disable Include Engine Content. This setting is enabled/disabled in the Release / DLC / Patching Settings from within Unreal Frontend.

Gameplay Framework

  • Loading savegame files from previous versions may cause crashes in some instances. If you encounter this, the easiest solution is to delete your savegames (located in MyProject/Saved/SaveGames). If you wish to try and recover this data, look for the "Note for 4.8 and beyond" comment in LoadGameFromSlot for instructions on how to temporarily modify your code to enable loading of old data, so you can then resave in the new version.

Localization

  • Various localization configuration script settings have been renamed or no longer attempt to silently interpret ambiguous values.

Networking

  • Double check for any overloaded uses of these functions and make sure the signatures match.

Online

  • The GameInstance class now automatically subscribes to the OnSessionUserInviteAccepted delegate, and GameInstance::OnSessionUserInviteAccepted can be overriden for custom handling of accepted invites.

Paper2D

  • Paper2D importing / sprite creation settings have been moved to a new location in Project Settings .. Paper2D - Import.

    • Old default settings are not carried across, any custom settings for materials or pixels/uu will need to be reapplied but this change will not affect any existing assets

    • The default pixels per unreal unit setting for Paper2D assets has been changed to 1.0, so if you create new sprites and they are at an unexpected scale to existing ones in your project, this should be the first thing to check (the previous default was 2.56 in the engine or 1.28 in 2D templates). It can be configured in the project settings as well.

Physics

  • The new 6 degrees of freedom encompasses the old LockedAxis behavior. The properties have been renamed accordingly.

Platforms

Android

  • If using a custom AndroidDeviceProfileSelectorModule, the new Android profiles in this version should be added to handle proper compatibility fallbacks

Playstation 4

  • The .ini heading and setting names for Morpheus have changed, so existing settings will not work. Please use the new settings in PS4 ProjectSettings to set them up.

Xbox One

  • Any custom modification of AppxManifest templates will need to be migrated to configuration settings.

  • Existing AppxManifest templates will be ignored in favor of manifests generated from configuration settings.

    • Any custom modification of AppxManifest templates will need to be migrated to configuration settings.

    • Several common settings can be modified in the Project Settings within the Editor.

    • Settings that are not yet available in the Editor must be applied by editing INI files.

    • Look in Engine\Config\XboxOne\XboxOneEngine.ini and Samples\Games\ShooterGame\Config\XboxOne\XboxOneEngine.ini for examples of how to configure these settings.

VR

  • Older projects may still need to manually enable the GearVR plugin.

Programming

  • See FWindowsApplication::AddMessageHandler()

Rendering

  • if your project was previously configured in this way then you may wish to uncheck an orientation in order to avoid unwanted orientation changes.

  • Previous behavior would mean that a single orientation was used even if multiple orientations were checked.

    • if your project was previously configured in this way then you may wish to uncheck an orientation in order to avoid unwanted orientation changes.

Lighting

  • Lighting done in the bass pass does not properly use the new shading model yet. All dynamic lighting does: deferred direct lights, ambient cubemap, and dynamic skylight.

Postprocessing

  • Best to use SSAO defaults settings as older settings might not look as good. New method isn't as good with small SSAO radius but we intend to improve that again

Optimizations

  • Check to see if your SpeedTrees need to change to use the new 'BestPlus' configuration.

Slate

  • Any existing custom editor widgets that rely on Tick() to be called should be updated to use active timers instead that register only when the tick is required.

  • Note that if any realtime viewport is visible, Slate cannot go to sleep. To take advantage of the system, make sure that viewports are not realtime.

    • Any existing custom editor widgets that rely on Tick() to be called should be updated to use active timers instead that register only when the tick is required.

UMG

  • If you have been using UMG for a static image load screen between full level transitions those will no longer work. Using UMG for loading screens when using level streaming will continue to work.

C++ API Changes

  • New: Various fixes to the in-game / in-editor screenshot facility:

    • The OnPNGScreenshotCaptured delegate was removed as all screenshots are now saved as pngs.

  • New: Removed deprecated file Media.h

    • Instead of Media.h, include the individual header files in the Media module that you actually use

  • New: Allowing message handlers to decide for themselves whether they want to handle a message; documentation updates.

    • If one of your classes implements IMessageHandler, you must remove GetHandledMessageType() and instead verify the type of message in HandleMessage(). See TMessageHandler<> for details.

  • New: Refactored IMessageHandler.h so that it doesn't have header dependencies

    • Default message handler implementations have been moved into MessageHandlers.h

  • New: Allowing for checking major AND minor version of Windows

    • You must rename your usages of VerifyWindowsMajorVersion() to VerifyWindowsVersion() and pass a second parameter for the minor version number (pass '0' to check for Windows Vista, as before).

  • New: Removed AutoPlay feature in MediaPlayer assets.

    • The AutoPlay feature turned out to be quite dangerous, because it causes media playback to start as soon as a MediaPlayer is loaded, thus consuming resources even if it is not used anywhere. Media should be played and stopped on demand using Blueprints (MediaPlayer.Play) or C++ instead.

  • New: Slate is now able to "sleep" when there is no user input and no widgets need to update. While sleeping, the entire Tick/Paint pass is skipped. This can be useful for those running the editor on battery power.

    • FCurveSequence now requires that a Slate widget be provided to it and all Active Timer registrations are handled automatically on behalf of that widget. While the curve sequence is playing, Slate will not sleep.

  • New: Various Actor and SceneComponent methods that use FRotator now have overloads taking rotation as an FQuat (Quaternion).

    • In rare cases where virtual methods using FRotator could be overridden, there are now non-virtual overloads that forward to a single virtual implementation.

      • This ensures derived versions override the version that will be used by engine code.

      • Make sure to call the correct Super function in overrides if currently using it, since the overridden function may have been renamed.

  • MovementComponent refactored to add overloads using FQuat in addition to FRotator.

    • Some virtual methods have been changed and overrides will need to be updated.

      • Make sure to call the correct Super function in overrides if currently using it.

  • Making a large pass and fixing all the places properties were incorrectly set to EditDefaultsOnly, they should have been set to EditAnywhere.

    • Removing some old functions from UWidget for gathering children widgets that didn't perform all the correct logic. You should use the WidgetTree's functions for traversing the tree.

  • Made most variables in UPaperTileLayer private

    • C++ code that directly accessed member variables of UPaperTileLayer will need to be updated to use the accessor methods

  • Made members of UPaperTileSet private and added accessors

    • Any existing code that directly accessed the members of UPaperTileSet will need to be updated to use the accessors instead

  • Removed BlueprintReadWrite from FPaperTileInfo members, opting instead for friendlier make/break functions (since the index contains packed flags)

    • Blueprints that directly acessed PackedTileIndex or TileSet from a FPaperTileInfo struct will need to be updated to use a break or make node instead

  • Deprecated GEditor->SetActorLabelUnique and GEditor->SplitActorLabel. Please replace calls with the static methods FActorLabelUtilities::SetActorLabelUnique and FActorLabelUtilities::SplitActorLabel

  • GameplayCueActor and GameplayCueView have been deprecated and removed in favor of GameplayCueNotify_Actor

  • New: Added support for extension-less streaming media URI schemes

    • IMediaModule::GetSupportedFormats() has been renamed to IMediaModule::GetSupportedFileTypes(); FMediaFormats has been renamed to FMediaFileTypes; IMediaPlayerFactory::GetSupportedFormats() has been renamed to IMediaPlayerFactory::GetSupportedFileTypes(); IMediaPlayerFactory::SupportsFile() has been replaced with IMediaPlayerFactory::SupportsUrl(), which must now be implemented by media plug-ins

  • Updated revision display to display strings rather than revision indices

    • Added new pure virtuals ISourceControlProvider::UsesChangelists(), ISourceControlState::FindHistoryRevision(const FString&) and ISourceControlRevision::GetRevision().

  • Game Mode features were exposed to Blueprints

    • The following functions, if overriden in any AGameMode subclass will now require overriding the _Implementation version:

      • ReadyToStartMatch, ReadyToEndMatch, ShouldReset, MustSpectate, GetDefaultPawnClassForController, InitStartSpot, SpawnDefaultPawnFor, CanSpectate, FindPlayerStart, ChoosePlayerStart, PlayerCanRestart

  • New: GraphEditor: Refactored connection drawing policy API to be more flexible

    • Any editor plugins that contain a FConnectionDrawingPolicy subclass will need to update calls to DrawSplineWithArrow, DrawConnection, and DetermineWiringStyle to match the new signature that takes a FConnectionParams structure

  • Tidied up some old localization code by removing the following: PPF_LocalizedOnly, CPF_Localized, CLASS_Localized, UProperty::IsLocalized.

    • Any code which uses PPF_LocalizedOnly, CPF_Localized, CLASS_Localized or UProperty::IsLocalized will no longer compile and should be removed. The Localized specifier should be removed from any UPROPERTYs.

  • Removed MaxReadBytes from UProperty::SerializeItem, UStruct::SerializeBin and FPropertyTag::SerializeTaggedProperty, as it was unused.

    • The signatures of UProperty::SerializeItem, UStruct::SerializeBin or FPropertyTag::SerializeTaggedProperty have changed.

  • Deprecated CanConvertPointerFromTo as it did not honor const qualifiers nor follow the naming conventions of other template metafunctions.

    • Any use of CanConvertPointerFromTo will throw deprecation warnings.

  • Changed FColor, FVector, FTimespan etc. from 'class' to 'struct', as they were defined as C++ classes but also as USTRUCTs, which caused UnrealHeaderTool to generate bad forward declarations.

    • Forward declarations of FColor, FVector, FTimespan etc. as classes will generate Visual C++ warnings like "type name first seen using 'struct' now seen using 'class'".

  • New: Changed the Exchange function to use Memswap in all cases, as this was an assumption used by a lot of code.

    • This may break types which are not trivially-swappable, but have well-defined move constructors. These should be rare, if any exist at all.

  • Fixed ranged-based iteration over FString so that it no longer returns the null terminator.

    • Code which relies on there being a zero TCHAR character during doing a ranged-based for loop may fail.

  • Removed PLATFORM_COMPILER_HAS_RANGED_FOR_LOOP, as all UE4 supported compilers have it.

    • Any code which tests for PLATFORM_COMPILER_HAS_RANGED_FOR_LOOP may get skipped.

  • New: Added heterogeneous comparison support to TArray::Contains, so that you can now find elements by any type which is comparable to the array element type, even if it's not convertible, e.g. searching a TArray> for a UObject.

    • Existing calls to TArray::Contains may fail if your comparison type is implicitly convertible to the array element type, but does not have an operator== which compares those two types.

  • Deprecated TArray::Init(int32 Number), as its name did not suggest that the array elements would be uninitialized.

    • Calling TArray::Init(int32 Number) will now cause deprecation warnings.

  • Removed PLATFORM_COMPILER_HAS_RVALUE_REFERENCES, as all UE4 supported compilers have it.

    • Any code which tests for PLATFORM_COMPILER_HAS_RVALUE_REFERENCES may get skipped.

  • Improved much of TMap's implementation, by removing redundancy, adding extra compile time error checks and improving encapsulation.

    • One of the template parameters of TMap has been removed. TMapBase is no longer instantiable on its own.

  • Changed UStruct::SuperStruct to be a private field to prevent accidental modification, as these would invalidate the new and improved UObject::IsA code.

    • Any derived classes which accesses SuperStruct will no longer compile.

  • Cooked builds will use a dedicated thread for package streaming instead of using time-slicing approach. This way streaming code can utilize full frame time for constructing and pre-loading asset objects resulting in up to 3 times faster streaming times.

    • Linkers are no longer UObjects. Renamed ULinker, ULinkerLoad and ULinkerSave to FLinker, FLinkerLoad, FLinke]rSave respectively.

  • New: Exposed generic Get/SetAxisProperties accessors to UPlayerInput.

    • Deprecated UPlayer::SetMouseSensitivityToDefault and InvertMouse

  • New: Fixed shadow variable warnings when a class has a member named Result

    • Custom thunk blueprint function implementations that return a result need to use RESULT_PARAM instead of Result.

  • New: Deprecated 'operator new' for UObjects. It's not safe to construct new objects using C++ operator new.

    • UObjects can't be created using C++ operator new

  • virtual BlueprintImplementableEvents do not work correctly in all cases. BlueprintNativeEvent should be used for cases where both C++ and Blueprints are expected to override the functionality.

    • A number of previously virtual BlueprintImplementableEvent functions have had virtual removed in favor of existing virtual functions intended for overriding C++ behavior:

      • UActorComponent::ReceiveBeginPlay -> BeginPlay

      • UActorComponent::EndBeginPlayer -> EndPlay

      • APlayerCameraManager::BlueprintUpdateCamera -> UpdateViewTargetInternal

      • UGameInstance::ReceiveInit -> Init

      • UGameInstance::ReceiveShutdown -> Shutdown

      • AActor::ReceiveBeginPlay -> BeginPlay

      • AActor::ReceiveAnyDamage/ReceiveRadialDamage/ReceivePointDamage -> TakeDamage

      • AActor::ReceiveTick -> Tick

  • AActor::GetActorClass deprecated, use GetClass instead.

  • New: Slate's FInputGesture and Engine's FInputChord unified as FInputChord defined in Slate

    • Slate's FInputGesture and Engine's FInputChord unified as FInputChord defined in Slate

      • FInputGesture deprecated, use FInputChord instead.

      • Where previously including "InputGesture.h", include "InputChord.h" instead

      • Where previously including "InputComponent.h" to access FInputChord, include "InputChord.h" instead.

  • New: Renamed FQueuedWork to IQueuedWork

    • Existing usages of FQueuedWork must be renamed to IQueuedWork

  • New: Renamed ITlsAutoCleanup to FTlsAutoCleanup (it's not a [non-virtual] interface)

    • Existing usages of ITlsAutoCleanup must be renamed to FTlsAutoCleanup

  • You can now have more than one Unreal class (UCLASS) in a single C++ header file! No additional work required, just define additional UCLASS and it should work!

    • Please keep in mind that this feature also changes reflected types path, so they are no longer subobjects of UCLASS declared in the same file. Now all reflected types are children of the package they are contained in. In other words when old path was /Script/PkgName.UClassName:UStructName, now it will be /Script/PkgName.UStructName. We have left the code that should compensate this change, but please be warned as we might have missed something.

    • Fixed cooked projects showing default materials when shaders have compile correctly.

    • Caused by race condition in saving cooked packages before they have finished compiling.

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼