이번 출시에는 에픽은 물론 GitHub 의 엄청난 개발자 커뮤니티가 제출한 수백종의 업데이트가 포함되어 있습니다! 언리얼 엔진 4.14 에 기여해 주신 분들께 감사드립니다:
Adam Moss (adamnv), Alan Edwardesa (alanedwardes), Andreas Axelsson (judgeaxl), Andreas Schultes (andreasschultes), Andrew Armbruster (aarmbruster), Artem V. Navrotskiy (bozaro), Audiokinetic Inc. (audiokinetic), BaxterJF, CA-ADuran, Cameron Angus (kamrann), Cengiz Terzibas (yaakuro), Christian Hutsch (UnrealEverything), CodeSpartan, Cuo Xia (shrimpy56), Damir Halilovic (DamirHalilovic), dcyoung, Deniz Piri (DenizPiri), Dennis Wissel (dsine-de), Dominic Guana (jobs-git), Dorgon Chang (dorgonman), dsine-de, Filip Brcic (brcha), Hakki Ozturk (ozturkhakki), Hannah Gamiel (hgamiel), Hao Wang (haowang1013), Jarl Gullberg (Nihlus), Jason (Abatron), Jeff Rous (JeffRous), Jeremy Yeung (jeremyyeung), Jørgen P. Tjernø (jorgenpt), Josh Kay (joshkay), jpl-mac, KashiKyrios, Kory Postma (korypostma), Kyle Langley (Vawx), Laurie (Laurie-Hedge), Lei Lei (adcentury), Leszek Godlewski (inequation), Marat Radchenko (slonopotamus), Matthew Davey (reapazor), Matthias Huerbe (MatzeOGH), Matthijs Lavrijsen (Mattiwatti), mbGIT, Michael Geary (geary), Michail Nikolaev (michail-nikolaev), Moritz Wundke (moritz-wundke), Narendra Umate (ardneran), Nelson Rodrigues (NelsonBilber), null7238, Paul Evans (paulevans), PjotrSvetachov, projectgheist, Rama (EverNewJoy), rcywongaa, rekko, Ryan C. Gordon (rcgordon), sangpan, Sébastien Rombauts (SRombauts), Shihai (geediiiiky), stfx, straymist, Theodoros Ntakouris (Zarkopafilis), tmiv, ungalyant, Webster Sheets (Web-eWorks), x414e54, yehaike, YossiMHWF, Yukariin, Zachary Burke (error454), Zhiguang Wang (zhiguangwang)
새 소식
언리얼 엔진 4.14 에는 VR 에 최적화된 포워드 셰이딩 렌더러가 도입되어, 멀티 샘플링 안티앨리어싱 과 같은 기능을 사용할 수 있게 되었으며, 새로운 컨택트 섀도 기능으로는 복잡한 오브젝트에 아름다운 디테일의 그림자를 렌더링할 수도 있습니다. 더이상 써드파티 라이브러리가 필요치 않은 스태틱 메시 자동 LOD 생성 기능도 추가되었습니다.
애니메이션 툴이 개선되어 생산성을 높이는 데 도움이 될 것이며, (UE4 의 비선형 시네마틱 제작 툴인) 시퀀서에도 새로운 기능이 다수 추가되었습니다. 뿐만 아니라 비히클, 클로딩, 애니메이션 블루프린트도 개선되었습니다.
모바일 개발자의 경우, Vulkan (벌칸)이 지원 준비되어 안드로이드 호환 디바이스에서 바로 사용할 수 있습니다! 그리고 새로운 모바일 렌더링 기능 도 다수 추가되었는데, 씬 컬러/뎁스 읽기, UI 에 3D 오브젝트 그리기 등입니다.
윈도우 플랫폼에서, C++ 프로그래머는 이제 Visual Studio "15" 를 사용하여 개발할 수 있습니다. Visual Studio 2015 역시 지원됩니다.
주요 기능
신기능: MSAA 포함 포워드 셰이딩 렌더러
새로운 포워드 셰이딩 렌더러에서는 하이 퀄리티 UE4 라이팅 기능과 멀티샘플 안티앨리어싱(MSAA) 기능을 함께 사용할 수 있습니다! 포워드 렌더러의 MSAA 및 머티리얼 단위 최적화 옵션은 VR 에 잘 맞는 기능입니다.
포워드 렌더러는 프러스텀 스페이스 그리드(frustum-space grid)에 리플렉션 캡처와 라이트를 컬링하는 방식으로 작동합니다. 그런 다음 포워드 패스에서 각 픽셀에 영향을 끼치는 라이트와 리플렉션 캡처를 대상으로 반복처리하여 알아낸 다음, 그를 대상으로 머티리얼 셰이딩 작업을 합니다. 스테이셔너리 라이트의 다이내믹 섀도는 미리 계산한 다음 스크린 스페이스 섀도 매스크의 채널들에 패킹해 넣어, 다중 섀도잉 기능을 효율적으로 사용할 수 있도록 합니다. 프로젝트 세팅 렌더링 부분에서 포워드 셰이딩 옵션을 켠 뒤 에디터를 재시작하면 포워드 렌더러를 사용할 수 있습니다.
지원되는 포워드 렌더링 기능은 다음과 같습니다:
- 프리컴퓨티드 인바이언먼트 섀도와 잘 어울리는 무버블 오브젝트에서의 다이내믹 섀도 포함, 스테이셔너리 라이트 완벽 지원
- 시차 보정 포함 다중 리플렉션 캡처 블렌딩
- 리플렉션 캡처에 합성되는 씬 일부에 대한 플레이너 리플렉션
- D-Buffer 데칼
- 미리계산 라이팅 및 스카이라이트
- 그림자 없는 무버블 라이트
- 캡슐 섀도
- 인스턴스드 스테레오 호환
포워드 셰이딩에 아직 지원되지 않는 기능은 다음과 같습니다:
- 스크린 스페이스 기법 (SSR, SSAO, 컨택트 섀도)
- 그림자를 드리우는 무버블 라이트
- 동적으로 그림자를 받는 반투명
- 스테이셔너리 라이트에서 인바이언먼트 섀도를 받는 반투명
- 라이트 함수 및 IES 프로파일
- 알파 투 커버리지
- D-Buffer 데칼, 모션 블러, 다이내믹 섀도 및 캡슐 섀도에 MSAA 지원
포워드 렌더러는 멀티 샘플 안티앨리어싱(MSAA) 및 템포럴 안티앨리어싱(TAA) 모두 지원합니다. 대부분의 경우는 지오메트리와 스페큘러에서 발생하는 계단현상을 다 잡아주는 TAA 가 좋습니다. VR 의 경우, 헤드 트래킹 장치로 인해 서브 픽셀이 계속해서 이동하여 원치 않는 블러 현상이 생길 수 있으므로, MSAA 를 사용하는 편이 나을 수 있습니다.
MSAA 를 사용하기로 한 프로젝트는 콘텐츠 제작 단계에서부터 스페큘러 계단현상을 줄이도록 해야합니다. "Normal to Roughness" 기능이 디테일 노멀 맵에서 스페큘러 계단현상을 줄이는 데 도움이 될 수 있습니다. 그런 다음 스태틱 메시용 자동 LOD 생성 기능을 통해 원거리 메시를 평탄화시켜 작은 트라이앵글에서 발생하는 계단현상을 줄일 수 있습니다.
테스트 결과 TAA 대신 MSAA 를 사용한 경우 GPU 프레임 시간이 약 25% 빨라졌습니다. 실제 비용은 콘텐츠에 따라 달라질 것입니다.
MSAA 를 사용하려면, 렌더링 프로젝트 세팅의 Anti-Aliasing Method 기본값을 MSAA 로 설정하면 됩니다.
r.MSAACount 콘솔 변수는 픽셀마다 계산되는 MSAA 샘플 수를 조절합니다. r.MSAACount 1 은 특별히 템포럴 AA 를 사용하도록 하는 옵션으로, 안티앨리어싱 모드 전환을 편하게 할 수 있습니다.
퍼포먼스
포워드 렌더러는 콘텐츠에 따라 디퍼드 렌더러보다 속도가 빠를 수 있습니다. 대부분의 퍼포먼스 향상은 머티리얼 단위로 끌 수 있는 기능들에 의해 이루어집니다. 기본적으로 머티리얼에서 하이 퀄리티 리플렉션 옵션을 설정하지 않는 이상 가장 가까운 리플렉션 캡처만 시차 보정 없이 적용되며, 하이트 포그는 버텍스별로 계산되고, 플레이너 리플렉션은 그 옵션을 켠 머티리얼에만 적용됩니다.
에픽의 VR 게임 신작 Robo Recall (로보 리콜)에서 이와 같은 옵션들을 활용했더니, NVIDIA 970 GTX 에서 디퍼드 렌더러보다 포워드 렌더러가 약 22% 빨랐습니다.
신기능: 컨택트 섀도
컨택트 섀도를 통해 오브젝트에 높은 디테일의 다이내믹 섀도를 낼 수 있습니다.
아래 담쟁이덩굴은 평평한 카드 몇 장일 뿐이지만, 머티리얼의 Pixel Depth Offset 출력으로 인해 매우 그럴싸한 셀프 섀도를 낼 수 있습니다.
컨택트 섀도 기능은 뎁스 버퍼에 대해 스크린 스페이스에서 짧은 레이 캐스트를 추가하여 주어진 라이트에서 어느 한 픽셀이 가려지는지 여부를 알아냅니다. 지오메트리의 접점에 매우 선명한 그림자를 출력하는 데 도움이 됩니다. 다른 알고리즘으로는 그림자가 생략되거나 접점이 흐리게 나오는 등의 단점이 있는데, 그 원인은 여러가지입니다. 전형적인 원인은 뎁스 바이어스 또는 해상도 부족 때문입니다. 새로운 컨택트 섀도 기능은 싼 비용으로 그 단점을 아주 잘 극복해낼 수 있습니다.
컨택트 섀도는 라이트의 Contact Shadow Length 프로퍼티를 설정하여 사용할 수 있습니다. 이 옵션은 스크린 스페이스에서 레이 캐스트 길이를 조절하는 것으로, 1 은 화면 전체를 가로지르는 것입니다. 값이 크면 퀄리티와 퍼포먼스가 저하될 수 있으니, 모양이 잘 나오는 수준에서 최소한의 값을 유지하도록 하시기 바랍니다.
컨택트 섀도가 사용되는 또 한가지 예는 임의의 라이트에서 발생한 패럴랙스(시차) 오클루전 매핑으로부터 셀프 섀도를 구하는 것입니다. 여기에는 머티리얼에서 픽셀 뎁스 오프셋 출력이 필요합니다. 다음 애니메이션에서 컨택트 섀도 길이를 0.1 로 설정한 상태의 패럴랙스 오클루전 매핑된 표면을 확인할 수 있습니다.
신기능: 자동 LOD 생성
이제 언리얼 엔진은 스태틱 메시의 폴리곤 수를 자동으로 줄여 LOD 를 생성해냅니다!
위 애니메이션은 다섯 개의 LOD 가 자동 생성되는 모습입니다. 각 레벨마다 트라이앵글 수가 절반으로 줄어듭니다.
자동 LOD 생성 기능은 2차(quadric) 메시 단순화라는 기법을 사용합니다. 이 기법은 두 버텍스를 합쳤을 때 생성되는 하나의 에지가 시각적으로 얼마나 차이가 나는지를 계산합니다. 그런 다음 시각적인 영향이 가장 적은 에지를 선택하여 접습니다. 그와 동시에 새로 병합된 버텍스의 최적 위치를 선택한 뒤 에지와 함께 접힌 트라이앵글이 있으면 지웁니다. 목표 트라이앵글 수가 될 때까지 이런 식의로 에지를 접는 작업을 계속합니다.
이 메시 단순화 기법은 생성된 라이트맵 UV, 노멀, 탄젠트, 버텍스 컬러를 포함한 UV 가 유지됩니다. UV 가 유지되기 때문에 같은 머티리얼을 사용할 수 있을 뿐만 아니라, 모든 LOD 가 같은 라이트맵을 공유할 수 있습니다.
생성되는 LOD 제어를 위한 일반적인 세팅은 스태틱 메시 뷰어의 LOD 세팅 아래 있습니다.
"LOD 그룹"에는 프리셋 목록이 제공됩니다. 이 부분은 프로젝트마다 BaseEngine.ini 의 [StaticMeshLODSettings] 아래에서 변경할 수 있습니다. 프로젝트마다 이 카테고리를 잘 구성해 두고, 모든 LOD 를 일일히 제어하기 보다는 가급적 LOD 그룹을 사용할 것을 권장합니다.
한 가지 중요한 세팅은 "Auto Compute LOD Distances" (LOD 거리 자동 계산)입니다. 에지가 접힐 때마다 시각적인 차이를 얼마나 더하는지 알고리즘은 알고 있기 때문에, 이 정보를 토대로 거리상의 오차를 얼마나 허용할 것인지 결정할 수 있습니다. 즉 각각의 LOD 에 사용할 화면 크기도 자동으로 계산한다는 뜻입니다.
각 LOD 에서 자동 생성에 관련된 자세한 부분을 고치고 싶은 경우, Reduction Settings (감소 세팅)에서 옵션을 찾을 수 있습니다. 참고로 이 기능은 현재 스태틱 메시에서만 작동하며, 메시 프록시 LOD 생성은 아직 지원되지 않고 있습니다.
신기능: 프리컴퓨티드 라이팅 시나리오
이제 같은 지오메트리에 다수의 라이팅 구성을 사용할 수 있는 프리컴퓨티드 라이팅이 지원됩니다! 이 기능은 VR 이나 건축 시각화처럼 최대한의 퀄리티를 최대한의 퍼포먼스로 내야 하는 경우에 특히 중요합니다.
위 예제는 DayScenario 라는 Lighting Scenario(라이팅 시나리오) 레벨에 디렉셔널 라이트, 스카이 라이트, 스카이 박스를 배치한 것입니다. NightScenario 에는 가로등을 배치했습니다.
라이팅 시나리오를 사용하려면:
- 레벨 창에서 서브레벨에 우클릭한 다음 라이팅 시나리오로 변경합니다. 라이팅 시나리오 레벨이 보이게 되면, 그 라이트맵이 월드에 적용됩니다.
- 라이팅 시나리오 레벨에서 레벨 스트리밍 메소드를 블루프린트로 변경합니다.
- 레벨에 메시와 라이트를 배치하고 라이팅을 빌드합니다.
- 퍼시스턴트 레벨의 레벨 블루프린트에 있는 BeginPlay 에서, 활성화시키고자 하는 라이팅 시나리오 레벨에 Load Stream Level 을 실행합니다.
한계:
- 게임에서 한 번에 하나의 라이팅 시나리오 레벨만 표시할 수 있습니다.
- 라이팅 시나리오 레벨이 존재하면, 모든 서브레벨의 라이트맵 데이터를 그 안에 넣어, 낮일 때는 DayScenario 라이트맵만 로드되도록 합니다. 그 결과, 라이트맵은 더이상 서브레벨에 스트리밍되지 않습니다.
- 라이팅 시나리오 레벨이 보이게 되면 강제로 리플렉션 캡처 업데이트가 이루어져, 로드 시간이 길어질 수 있습니다.
신기능: 픽셀별 반투명 라이팅 개선
디퍼드 렌더러에서도 이제 반투명 표면에 새로운 포워드 셰이딩 함수 기능을 사용하여 다수의 라이트에서 스페큘러 하이라이트를 구한다던가 시차 보정된 리플렉션 캡처에서 이미지 기반 리플렉션을 구한다던가 할 수 있습니다!
신기능: 전해상도(FULL RESOLUTION) 스킨 셰이딩
UE4 는 이제 서브서피스 프로파일 셰이딩 모델에 전해상도 스킨 셰이딩이 지원됩니다. 땀구멍이나 주름과 같은 표면 디테일에 높은 정확도의 라이팅을 제공해 줍니다.
체크무늬 렌더링된 스킨 (왼쪽), 전해상도 스킨 (오른쪽) (주: 3D 헤드 모델링 Lee Perry-Smith 제공)
표면 디테일 - 체크무늬 (왼쪽), 전해상도 (오른쪽)
예전에는, 스킨 라이팅은 체크무늬로 표현되었는데, 픽셀 절반에는 디퓨즈 라이팅이, 나머지 절반에는 스페큘러 라이팅이 들어있었습니다. 최종 서브서피스 프로파일 풀스크린 패스 도중 라이팅을 다시 합칩니다. 이러한 접근법으로도 서브서피스 라이팅에 괜찮은 결과가 나오기는 하지만 (그 속성상 빈도가 낮아), 표면 디테일의 정확도가 낮을 수밖에 없었습니다.
하지만 새로운 접근법에는 모든 픽셀에 디퓨즈와 스페큘러 라이팅 정보가, RGBA 인코딩에 패킹되어 들어있습니다. 이를 통해 최종 서브서피스 프로파일 풀스크린 패스 도중 전해상도 라이팅을 재구성할 수 있으므로, 표면 디테일 결과도 살아나고 템포럴 안티앨리어싱과의 안정성도 높아집니다.
호환성 전해상도 스킨 셰이딩에는 온전한 알파 채널을 하나 포함하여 최소 64 비트 씬 컬러 포맷이 필요합니다. 기본 FloatRGBA 씬 컬러 포맷은 정상 작동합니다만, FloatRGB 같은 32 비트 표현은 지원되지 않습니다. 씬 컬러 포맷이 전해상도 스킨과 호환되지 않으면, 체크무늬 기반 라이팅으로 돌아갑니다. 이러한 작동방식은 r.SSS.Checkerboard 콘솔 변수로 제어할 수 있습니다. 여기에 가능한 값은 다음과 같습니다:
0: 체크무늬 꺼짐 (전해상도)
1: 체크무늬 켜짐 (예전 방식)
2: 자동 (기본) -
씬 컬러 픽셀 포맷에서 지원하는 경우 전해상도 라이팅이 사용됩니다. 한계 전해상도 스킨 셰이딩은 추정 방식이라는 점 언급해 둘 가치가 있겠습니다. 거의 대부분의 경우 정상 작동할 것이지만, 특정 머티리얼은 인코딩 방식으로 인해 문제가 될 수 있습니다. 구체적으로:
- 메탈릭 머티리얼
- 이미시브 머티리얼
위 기능이 작동은 하지만, 패킹된 RGBA 디퓨즈/스페큘러 인코딩 방식의 차이로 인해 체크무늬와 비교하면 결과물 차이가 느껴질 수 있습니다. 이러한 문제는 머티리얼을 제작할 때 스킨 셰이딩이 불필요한 곳에 오파시티를 0 으로 설정하는 것으로 우회할 수 있습니다. 오파시티가 0 인 픽셀은 셰이딩에 기본 라이팅포함으로 처리됩니다.
주: 불투명 픽셀이 아닌 것도 이런 식으로 마스크를 적용하면 퍼포먼스 측면에서 좋을 수도 있는데, 그 픽셀은 서브서피스 포스트프로세스가 건너뛰기 때문입니다.
퍼포먼스 고려사항
타이틀에서 64 비트 씬 컬러 포맷을 사용하는 경우, 전형적으로 전해상도 서브서피스 라이팅이 체크무늬보다 텍스처 페치 수가 적어 더욱 빠릅니다. 하지만 타이틀에 32 비트 씬 컬러를 사용하는 경우, (하드웨어에 따라 다르긴 하지만) 감소된 텍스처 대역폭에서 얻는 퍼포먼스 이득 비중이 더 클 것입니다.
신기능: 리플렉션 캡처 퀄리티 개선
리플렉션 캡처를 사용할 때, 엔진은 리플렉션 캡처의 간접 스페큘러와 라이트맵의 간접 디퓨즈를 혼합합니다. 누수 현상 감소를 위해서인데, 리플렉션 큐브맵은 공간의 한 점에서만 캡처되는 반면 라이트맵은 받는 표면 전체에서 계산되고 로컬 섀도를 포함하기 때문입니다.
(왼쪽은 라이트맵 혼합이 있고, 오른쪽은 없습니다.)
혼합은 거친 표면에는 잘 되지만, 부드러운 표면의 경우 리플렉션 캡처에서 온 리플렉션이 스크린 스페이스 리플렉션이나 플레이너 리플렉션 등 다른 리플렉션과 더이상 일치하지 않습니다.
라이트맵 혼합은 매우 부드러운 표면에서는 더이상 이루어지지 않습니다. 러프니스가 .3 이면 라이트맵이 최대로 혼합되고, 값이 낮아질 수록 라이트맵 혼합이 서서히 줄어들다가 .1 이하에서는 사라집니다. 이런 식으로 리플렉션 캡처와 스크린 스페이스 리플렉션이 훨씬 잘 어울리게 되며, 바뀌는 부분이 잘 눈에 띄지도 않게 됩니다.
아래는 거울 표면 리플렉션의 전후 비교입니다. SSR 과 리플렉션 캡처의 벽 리플렉션 차이를 살펴보세요. 움직여 보면 부작용이 확실히 눈에 띄는데, SSR 한계로 인해 카메라와 같이 움직이기 때문입니다.
이는 기존 콘텐츠에 영향을 끼치는데, 부드러운 표면에 리플렉션이 새는 경우, 그 부분이 훨씬 더 잘 드러날 것입니다. 이러한 문제 해결을 위해서는, 리플렉션 프로브를 추가로 배치하여 새는 부분을 줄여야 합니다. 레벨에는 커다란 구체형 캡처가 최소 하나 있어야 합니다. 예전 라이트맵 혼합 작동방식으로 돌아갈 수도 있는데, 다음과 같은 렌더링 프로젝트 세팅입니다:
신기능: Visual Studio "15" 지원
언리얼 엔진 4.14 는 이제 Visual Studio "15" 버전을 기본 지원합니다. Visual Studio 2015 역시 계속해서 지원됩니다. Visual Studio "15" 는 현재 Microsoft 의 Visual Studio 웹사이트에서 프리뷰 버전을 접하실 수 있습니다.
Visual Studio 버전이 여럿 설치된 경우, '에디터 개인설정'의 'Source Code' (소스 코드) 섹션에서 사용할 버전을 선택할 수 있습니다.
신기능: 액터에서 스태틱 메시 생성
이제 레벨 뷰포트에서 액터에 우클릭하여 그 현재 상태를 새로운 스태틱 메시 애셋으로 저장할 수 있습니다. 스켈레탈 메시에도 작동되는데, 포즈를 잡은 캐릭터에서 메시를 캡처할 수 있습니다.
신기능: NVIDIA Ansel 지원
UE4 4.14 에는 NVIDIA Ansel Photography 가 지원됩니다! Ansel 은 NVIDIA 에서 개발한 새로운 도구로, 플레이어가 게임내 스크린샷을 찍을 수 있습니다. Ansel 모드에서 게임은 일시정지되며 플레이어는 카메라를 제어하여 샷을 구상하고 다양한 스크린 이펙트를 적용할 수 있습니다. HDR 이나 360 스테레오와 같은 다양한 스크린샷 캡처도 가능합니다. 자세한 내용은 NVIDIA 웹사이트를 참고하세요.
Ansel 은 UE4 플러그인 형태로 지원됩니다. 프로젝트에서 플러그인을 활성화시키면, 독립형 게임 세션에서 Ansel 에 접근할 수 있습니다.
(웹 브라우저에서 Ansel 360 캡처를 확인하는 모습입니다.)
Player Camera Manager 클래스에 게임에서 Ansel 캡처 작동방식 커스터마이징에 쓰이는 함수가 노출되어 있어, 카메라 이동 거리 제한, UI 요소 비활성화, 특정 라이팅 또는 포스트 프로세싱 이펙트 켜고 끄기 등을 게임에서 제어할 수 있습니다. 구현을 제공해 주신 Adam Moss 와 NVIDIA 에 감사드립니다. 이 기능 사용 시작을 위해서는, Ansel 플러그인 폴더 내 'Ansel_integration_guide.html' 문서를 참고해 주세요. UE4 공식 문서도 곧 준비하겠습니다.
신기능: 케이블 컴포넌트 개선
Cable Component (케이블 컴포넌트) 플러그인이 콜리전, 오브젝트 또는 이펙트를 붙일 수 있는 소켓 지원과 같은 기능으로 새롭게 업데이트되었습니다.
현재 케이블 컴포넌트에 지원되는 기능은 다음과 같습니다:
- 단순 콜리전, 마찰 세팅 포함
- Stiffness (강성) 세팅, 접힘에 대한 저항
- 케이블 양쪽 끝에 소켓 지원
- 한쪽 끝을 '자유' 설정 가능
신기능: UI 폰트 윤곽선
UMG 및 슬레이트용 폰트에 이제 Outline(윤곽선)을 적용할 수 있는 옵션이 생겼습니다.
폰트를 지정하는 위젯은 윤곽선 세팅, 색, 윤곽선에 사용할 머티리얼을 변경할 수 있습니다.
윤곽선에 지정된 머티리얼은 윤곽선에만 적용된다는 점만 제외하고, 윤곽선에 있는 폰트 머티리얼은 다른 폰트 머티리얼을 사용하는 것과 같은 방식으로 사용할 수 있습니다. 폰트 머티리얼은 윤곽선에서 사용하여 여러가지 다양한 효과를 낼 수 있습니다.
신기능: 맵 및 세트 프로퍼티 편집가능
이제 디테일 패널 안에서 Map(맵) 및 Set(세트) 프로퍼티를 편집할 수 있게 되었습니다!
세트는 배열과 비슷한데, 한 세트에 동일한 요소를 둘 이상 가질 수 없고, 순서가 보장되지 않는다는 차이가 있습니다. 하지만 어떤 요소가 포함되어 있는지 찾아보는 작업이 매우 빠릅니다.
맵은 키와 값의 짝으로 이루어져 있으며, 둘 다 디테일 패널에서 편집할 수 있습니다. 세트와 마찬가지로 모든 키 값은 고유해야 하며, 요소의 순서가 유지된다는 보장은 없습니다. 하지만 어떤 요소의 키를 알고 있으면 그 값을 매우 빠르게 찾을 수 있습니다.
신기능: 머티리얼의 벡터 노이즈
Noise (노이즈) 머티리얼 그래프 노드에는 단일 값 (스칼라) 결과를 내는 절차적 셰이딩에 유용한 함수가 여럿 포함되어 있습니다. |
| |
|
|
|
|
| Cellnoise | Vector Noise | Gradient | Curl | Voronoi |
새로운 Vector Noise (벡터 노이즈) 노드가 3D 또는 4D 벡터 결과 포함 다수 추가되었습니다. 이 함수들은 실행시간 비용이 비싸므로, 일단 모양을 개발한 후에는 4.13 에 도입된 Draw Material to Render Target 블루프린트 기능을 사용하여 그 계산 전체 또는 일부를 텍스처에 구워 넣을 것을 추천합니다. 이 머티리얼 그래프 노드들을 사용하면, 최종 텍스처의 절차적인 모습을 엔진에서 개발할 수 있으므로, 외부 프로그램에서 절차적으로 생성되는 텍스처를 만들어 엔진의 애셋에 적용하는 것이 가능합니다. 새로운 함수는 다음과 같습니다:
1. Cellnoise 셀노이즈: (노드 입력에 적용된 수학적 floor 연산에서) 3D 그리드 내 각 셀에 무작위 색을 반환합니다. 그 결과는 주어진 위치에서 항상 일관되므로, 머티리얼에 안정적인 방식으로 무작위성을 추가할 수 있도록 해줍니다. 이 벡터 노이즈 함수는 계산 비용이 매우 싸므로, 퍼포먼스를 위해 텍스처에 구울 필요가 없습니다.
2. Perlin 3D Noise 펄린 3D 노이즈: 3D 벡터 출력으로 계산한 Perlin Simplex Noise 의 한 가지 버전입니다. 각 출력 컴포넌트의 범위는 -1 에서 1 입니다. 노이즈 출력 세 채널을 한꺼번에 계산하는 것이 세 개의 스칼라 노이즈 함수 결과를 합치는 것보다 쌉니다.
3. Perlin Gradient 펄린 그레디언트: 스칼라 Perlin Simplex Noise 의 분석적 3D 그레디언트를 계산합니다. 출력은 4 채널로, 처음 3 (RGB) 채널은 그레디언트이고, 네 번째 (A) 채널은 스칼라 노이즈입니다. 표면의 범프 및 플로우 맵에 좋습니다.
4. Perlin Curl 펄린 컬: 벡터 Perlin Simplex Noise (소위 Curl Noise) 의 분석적 3D 컬 버전을 계산합니다. 출력은 3D 부호화 컬 벡터입니다. 플루이드 또는 파티클 플로우에 좋습니다.
5. Voronoi 보로노이: 같은 보로노이 노이즈를 스칼라 노이즈 머티리얼 노드로 계산합니다. 스칼라 보로노이 노이즈는 3D 공간에 시드 포인트를 분산시키고 가장 가까운 것까지의 거리를 반환합니다. 벡터 노이즈 버전은 가장 가까운 시드 포인트 위치를 RGB 로, 그와의 거리를 A 로 반환합니다. 특히 셀노이즈와 같이 쓰면, 보로노이 셀 단위로 약간의 난수성을 낼 수 있습니다. 아래는 단순한 돌침대 머티리얼로, Vector Noise / Voronoi 의 거리 컴포넌트를 사용하여 표면에 굴곡을 주고, 갈라진 틈에 이끼를 혼합해 넣은 것입니다. 시드 포인트와 Vector Noise / Cellnoise 를 같이 쓰면 돌마다 색과 굴곡 높이를 바꿀 수 있습니다.
펄린 컬과 펄린 그레디언트는 일반 펄린 노이즈처럼 옥타브에 같이 추가시킬 수 있습니다. 보다 복잡한 표현식의 경우, 표현식 결과의 그레디언트를 계산할 필요가 있습니다. 그 작업을 수월하게 하기 위해 표현식을 머티리얼 함수에 넣고, GradFrom3DDeriv 나 CurlFrom3DDeriv 중 하나, Prepare3DDeriv, Compute3DDeriv 등에 헬퍼로 사용하면 됩니다. 이들은 사면체 패턴으로 배치된 기본 표현식의 계산을 네 번 사용하여 이와 같은 파생형 기반 연산을 추정해냅니다. 예를 들어 다음은 그레디언트를 사용하여 범프 높이 함수에서 범프 노멀을 계산하는 망입니다.
PhysX 3.4 업그레이드
언리얼 엔진은 이제 NVIDIA PhysX 최신 버전 3.4 를 사용합니다. 리짓 바디와 씬 쿼리의 퍼포먼스와 메모리 사용량이 (특히나 멀티코어에서) 향상됩니다.
이 버전의 PhysX 는 키네마틱 오브젝트에 Continuous Collision Detection (연속 콜리전 감지, CCD)를 지원하여, 매우 빠르게 움직이는 리짓 바디 사이에도 정확한 충돌 처리가 가능합니다! 아래 로보 리콜 테스트 레벨의 애니메이션에서, 플레이어는 무기를 휘둘러 날아오는 총알을 때리고 있습니다!
UE4 에서 바로 적용되는 신기능은 다음과 같습니다:
- 키네마틱 오브젝트에 연속 콜리전 감지 (CCD) 지원 (위 애니메이션 참고)
- 키네마틱 오브젝트 업데이트 속도 향상
- 컨벡스 헐 쿠킹 속도 향상
앞으로 PhysX 최신 버전에서 사용할 수 있는 피직스 신기능을 더욱 많이 노출시키도록 하겠습니다.
애니메이션 에디터 구조 변경
애니메이션 관련 툴의 구조가 변경되었습니다! 하나의 에디터 안에서 여러 모드로 작업하던 것이 이제 다수의 개별 애셋 에디터로 나뉘었습니다.
여러가지 개선된 부분도 있습니다. 각 에디터에 공통인 함수 기능은 이제 일반적으로 뷰포트와 개선된 스켈레톤 트리에서 찾을 수 있습니다.
- 스켈레탈 메시 에디터의 레이아웃과 애셋 디테일 패널이 변경되었습니다. 특히 머티리얼 및 LOD 부분은 크게 바뀌었습니다.
- 스켈레톤 에디터의 레이아웃 트윅 작업, 스켈레톤 트리 자체의 폴리싱 작업이 있었습니다.
- 애니메이션 에디터의 레이아웃 트윅 작업, 애셋 브라우저에서 열을 추가하고 제거하는 기능 추가 작업이 있었습니다.
- 애니메이션 블루프린트 에디터의 레이아웃을 표준 블루프린트 에디터 레이아웃과 비슷해 지도록 하는 트윅 작업이 있었습니다. 애님 프리뷰 에디터는 이제 옵션을 통해 프리뷰 프로퍼티에 가한 변경사항을 클래스 디폴트에 적용시킬 수 있습니다.
애셋 바로가기 바
개선된 애셋 바로가기 바를 사용하여 스켈레톤을 공유하는 연관된 애니메이션 애셋 사이를 점프할 수 있습니다.
녹화 기능 트랜스포트 콘트롤로 이동
툴바의 버튼으로 실행하던 녹화 기능을, 시퀀서와 비슷하기 트랜스포트 콘트롤의 녹화 버튼으로 이동시켰습니다.
프리뷰 씬 셋업
씬의 오브젝트와 그 애니메이션을 "씬 셋업" 메뉴를 통해 각각의 에디터에서 변경할 수 있습니다. 이를 통해 적용되는 애니메이션을 미리보고, 다양한 프리뷰 메시를 (스켈레톤 또는 개별 애니메이션에 대해 지정하여) 설정하며, 부가 메시를 붙일 수 있습니다. 부가 메시는 이제 주요 메시의 슬레이브로 구동되는 스켈레탈 메시 세트를 정의하는 별도의 에디터 전용 애셋으로 지정됩니다.
애니메이션 커브 창
이제 애니메이션 에디터의 애니메이션 커브 전용 창에서 커브를 쉽게 편집할 수 있습니다. 커브는 편집하면서 실시간 미리보기 가능합니다.
기존에는 애니메이션 애셋 자체의 커브만 설정 가능했었는데, 이제 스켈레톤에 대해서도 설정할 수 있습니다.
자손 액터 템플릿
블루프린트에 추가된 자손 액터 컴포넌트는 자신의 프로퍼티를 자손 액터 템플릿을 통해 커스터마이징 가능합니다.
Child Actor (자손 액터) 컴포넌트를 추가한 이후에는, 소유중인 액터 블루프린트 에디터의 디테일 패널에 펼칠 수 있는 템플릿이 보일 것입니다. 여기서 자손 액터의 모든 프로퍼티를, 퍼블릭 변수까지 포함해서 모두 접근할 수 있습니다. 예를 들어 Blueprint_A 가 있는 경우
- 퍼블릭 변수로 색을 구동시키는 PointLight 컴포넌트가 들어있고, 그 블루프린트를 *Blueprint_B* 내 자손 액터 컴포넌트로 만든다면, 그 색 변수를 *Blueprint_B 의 디테일 패널에서 조절할 수 있게 되는 것입니다!
자손 액터 컴포넌트의 기본 프로퍼티에 묶여있고 게임플레이 스크립트를 통한 업데이트만 가능했던 기존 방식에 비하면 엄청난 발전입니다.
기본 애니메이션 블루프린트
스켈레탈 메시에 애니메이션 블루프린트를 할당하면, 컴포넌트에 할당된 애니메이션 블루프린트 이후 항상 실행되도록 할 수 있습니다. 이를 통해 메시를 애니메이션 툴에서 보든, 시퀀서 시네마틱이나 레벨에 그냥 배치했을 때든, 항상 적용되는 애님 다이내믹스 또는 기타 콘트롤러를 구성할 수 있습니다.
이를 통해 특정 다이내믹스, 콘트롤러, IK, 기타 애님 블루프린트 기능같은 것을 하나의 메시에 연관시켜, 해당 메시에 사용하도록 의도된 애니메이션 블루프린트마다 중복해서 만들어줄 필요가 없어졌습니다.
'포스트 프로세스' 애니메이션 블루프린트 역시 별도의 네이티브 및 블루프린트 업데이트 스텝이 있어, 애니메이션 그래프에서 사용할 파라미터를 읽거나 계산하도록 할 수 있습니다.
신기능: VR 에서 랜드스케이프 편집
이제 VR 에서 모션 컨트롤러를 사용하여 터레인 생성 및 조각 작업이나 랜드스케이프 머티리얼 페인트 작업을 할 수 있습니다!
퀵 메뉴의 "모드" 패널에서 랜드스케이프 편집 툴을 불러올 수 있습니다. 그런 다음 UI 에서 브러시를 선택하고 칠하기 시작합니다! 모션 컨트롤러의 "Modifier" (다른 작업) 버튼을 누른 상태에서는 칠을 벗겨낼 수 있습니다.
비히클 지원 개선
타이어 포스가 적용되는 위치를 변경했습니다. 예전에는 비히클의 질량 중심에 적용되었었습니다. 이제 타이어의 질량 중심에 포스를 적용하여, 차량의 하중에 따른 흔들림을 처리하기가 쉬워졌습니다.
Simple Wheeled Vehicle Movement Component (바퀴 단순화 비히클 이동 컴포넌트)를 추가, 복잡한 엔진 구동계 시뮬레이션 없이도 휠 서스펜션이나 타이어 마찰 효과를 냅니다. 이 컴포넌트를 통해 개별 타이어에 토크 적용을 쉽게 할 수 있습니다. Wheeled Vehicle Movement Component 를 상속하는 모든 컴포넌트는 이제 임의의 컴포넌트에서 사용할 수 있으며, 더이상 Wheeled Vehicle 액터에 의존할 필요가 없습니다.
기존 콘텐츠는 예전의 작동방식 유지를 위해 Deprecated Spring Offset Mode (폐기된 스프링 오프셋 모드)가 자동으로 true 설정됩니다. Suspension Force Offset (서스펜션 포스 오프셋) 옵션을 통해 추가적인 조정이 가능합니다.
안드로이드의 벌칸 지원 개선
언리얼 엔진 4.14 에서는 벌칸 지원 게임을 쉽게 발매할 수 있습니다!
- UE4 는 벌칸 드라이버 포함 안드로이드 7 (Nougat) 디바이스와 아울러 최근 OTA 업데이트를 실행한 삼성 갤럭시 S7 을 지원합니다.
- 안드로이드 디바이스에서의 UE4 벌칸 렌더러 관련 여러가지 렌더링 이슈가 해결되었습니다.
- 벌칸이 지원되지 않는 안드로이드 디바이스에서 실행되면 렌더러가 자동으로 OpenGL ES 모드로 돌아갑니다.
- 특정 디바이스와 드라이버 버전에서의 벌칸 지원 여부를 디바이스 프로파일에서 설정할 수 있으며, 여기에는 ES 3.1 이나 ES 2 로 돌아가는 옵션도 포함됩니다. 이를 통해 UE4 게임은 벌칸 구현이 불완전하거나 이슈가 있는 디바이스에서는 벌칸 지원을 비활성화시키고 OpenGL ES 를 사용하도록 할 수 있습니다.
신기능: 모바일에서 커스텀 뎁스 지원
모바일 렌더링 패쓰에서 커스텀 뎁스가 지원됩니다. 커스텀 포스트 프로세스 머티리얼은 이제 씬 뎁스, 커스텀 뎁스는 물론 씬 컬러에서도 샘플링 가능합니다.
포스트 프로세싱을 요하므로, 모바일 HDR 기능을 반드시 켜야합니다. 이 기능은 현재 모바일 MSAA 기능이 켜진 상태에서는 작동하지 않습니다.
모바일에서 씬 캡처 개선
씬 캡처를 렌더링할 때, 역(Inverse) 오파시티와 뎁스 값을 출력하는 씬 캡처 소스 세팅이 모바일에 지원됩니다.
- "SceneColor (HDR) in RGB, Inv Opacity in A" (RGB 에 씬 컬러(HDR), A 에 역 오파시티) 옵션은 반투명이 있는 오브젝트를 텍스처에 렌더링한 뒤, 그것을 씬이나 위젯 블루프린트 위에 알파 블렌딩하는 데 사용할 수 있습니다.
- 비슷하게, 결과 텍스처를 사용할 때도 뎁스 값을 마스크로 사용할 수 있습니다.
- 오파시티 데이터 생성에는 비용이 약간 드는데, 오파시티가 필요치 않은 경우 "SceneColor (HDR) in RGB, 0 in A" (RGB 에는 씬 컬러(HDR), A 에는 0) 옵션으로 퍼포먼스를 향상시킬 수 있습니다.
- 씬 캡처는 이제 안드로이드 6 이전 갤럭시 S6 등 부동소수점 타겟을 지원하지 않는 디바이스에서도 정상 작동합니다.
클로쓰 스키닝 개선
엔진 내에서 클로딩에 쓰이는 별도의 메시 대 메시 스키닝 데이터를 계산하는 기능을 추가, 이제 .apx 나 .apb 파일로 익스포트된 렌더 데이터를 사용하는 대신 UE4 가 이미 갖고 있는 렌더 데이터를 사용합니다. APEX 익스포트된 애셋에서 시뮬레이션 메시를 구한 다음, 그 메시에 렌더 데이터 스킨을 다시 입힙니다. 즉 최종 데이터가 원래 임포트한 데이터만큼 괜찮아 보인다는 뜻입니다.
여기에는 몇 가지 장점이 있습니다. 기존에는 노멀이 (아래와 같이) 잘못되어 보일 수 있었고, UV 채널 하나로 제한되어 있었습니다. 새로운 스키닝 시스템은 이 두 가지 문제를 동시에 해결합니다.
머티리얼 어트리뷰트 노드
머티리얼 프로퍼티의 대대적인 확장성 개선 작업의 일환으로, 이제 머티리얼 어트리뷰트 작업시 읽기가 편해지고 오류에 강해졌습니다.
- GetMaterialAttributes - BreakMaterialAttributes 간단 버전입니다.
- SetMaterialAttributes - MakeMaterialAttributes 간단 버전입니다.
- BlendMaterialAttributes - 머티리얼 어트리뷰트 구조체의 블렌딩을 쉽게 해주는 새로운 노드입니다.
Get 과 Set 노드의 주요 개선점은, 모든 어트리뷰트가 기본으로 노출되는 Break 및 Make 노드와 달리 핀이 선택적으로 추가된다는 점입니다. 이를 통해 모든 어트리뷰트 핀을 직접 연결해야 했던 기존의 작업방식에서 벗어날 수 있습니다. 노드를 선택하면 디테일 패널에 현재 핀 목록이 표시되어, 펼치거나 제거할 수 있습니다. 예를 들어 아래 머티리얼 함수는 어트리뷰트 세트를 받아 베이스 컬러와 러프니스를 블렌딩하여 빛나는 빨간색 표면을 만들어내고 있습니다.
그래프의 지저분한 부분이 줄어들 뿐만 아니라, 이 노드들은 프로젝트에 추가할 수 있는 커스텀 머티리얼 어트리뷰트를 통해 다수의 백엔드 변경사항을 상위 호환되도록 하는 장점을 활용할 수 있습니다. 프로젝트간의 머티리얼 공유도 보다 쉬워지는데, 없는 어트리뷰트를 자동 감지하여 사용자에게 오류 처리 기회를 주기 때문입니다. 노드에 명시되지 않은 어트리뷰트는, 머티리얼 그래프 생성 이후 추가된 것을 포함해서, 메인 머티리얼 어트리뷰트 핀과 함께 그대로 전달됩니다. Make 및 Break 노드로 새 핀을 추가했다면, 모든 그래프에서 수동으로 업데이트해 줘야 했을 것입니다.
새로운 Blend 노드는 마스크를 사용하여 다수의 어트리뷰트 세트가 블렌딩 가능하도록 하기 위한 것인데, 이는 디테일한 머티리얼 레이어 작업을 할 때 흔히 하는 작업입니다. 아래 예제는 (함수로 정의된) Red 및 Green 머티리얼을 고르게 블렌딩한 다음 그 결과물에 클리어 코팅을 적용하는 것입니다:
기본적으로 Blend 노드는 모든 머티리얼 어트리뷰트에 대해 알파 입력을 사용하여 선형 보간(lerp) 합니다. 이 노드에는 버텍스/픽셀 단위 블렌딩을 선택할 수 있는 체크박스가 있어, 버텍스 전용 또는 픽셀 전용 마스크 데이터를 사용할 때 쉽게 제어할 수 있습니다. 위의 새로운 Get 및 Set 노드와 비슷하게, Blend 노드는 추가 또는 제거되는 새 어트리뷰트를 자동 처리하므로, 어트리뷰트 등록시의 커스텀 블렌딩 작동방식을 프로그래머가 지정할 수 있습니다.
머티리얼에 스키닝 전 로컬 위치
머티리얼은 스켈레탈 메시의 레퍼런스 포즈 위치에 접근하여, 버텍스별 출력에서 사용할 수 있습니다. 애니메이션 캐릭터에 현지화된 이펙트가 가능합니다. 이 노드는 스태틱 메시가 표준 로컬 위치를 반환하기도 하는 대상에도 공유 가능합니다. 아래 그래프는 로컬 스페이스에 그리드 패턴을 만들어 애니메이션 도중 스켈레탈 메시에 상대적인 위치가 유지되는 예제입니다:
시퀀서 샷 임포트/익스포트 개선
프레임으로 무비 녹화 기능이 샷 별로 처리됩니다. 마스터 시퀀스는 이제 각 샷의 시작과 끝에 부가 프레임을 붙여 렌더링할 수 있습니다. 이 부가 프레임은 편집 결정 목록(EDL) 형태로 컷 인/아웃 되는데, 그 EDL 을 외부 비디오 편집 프로그램에서 샷 사이의 컷을 조절하는 데 사용할 수 있습니다.
카메라 릭 크레인 개선
카메라 릭 크레인의 작동방식이 물리적인 크레인의 움직임을 모방하도록 수정했습니다.
- 카메라 크레인 마운드의 롤 및 요는 0 입니다.
- 크레인에 대한 마운트 핏치/요를 고정시키는 토글 옵션을 추가했습니다. 기본적으로 고정되어 있지는 않으므로, 카메라가 땅과 수평을 유지합니다.
신기능: 시퀀서 오디오 녹화
이제 마이크를 통해 시퀀스에 음성을 녹화할 수 있습니다.
포즈 드라이버 개선
Pose Driver (포즈 드라이버) 노드를 통해, '예제 포즈' 세트에 따라 애니메이션의 다른 부분을 본으로 구동시킬 수 있습니다. 이번 출시에서는 본 트랜스폼은 물론 모프 타겟을 구동시킬 수도 있습니다. 예를 들어 팔의 회전값에 따라 어깨 패드 본을 구동시키는 것입니다. 구동하는 본의 회전 대신 이동을 사용하는 옵션도 추가했습니다. 디버그 드로잉도 개선되어 각 '타겟' 포즈와 현재 본이 거기에 얼마나 가까이 있는지도 표시됩니다.
신기능: 가상 본
스켈레톤에 '가상 본'을 추가하는 기능을 추가했습니다. 가상 본은 스키닝이 불가능하지만, 스켈레톤의 두 본 사이에 제약되어 스켈레톤의 각 본에 대한 데이터를 자동 생성합니다. 예를 들어 손의 자손이지만 손바닥 조인트에 제약된 조인트를 추가할 수 있습니다. 그러면 이것을, 소켓과는 달리, 애니메이션 블루프린트에서 (IK 또는 룩앳) 타겟으로 사용하거나, 나중에 애니메이션 블루프린트에서 변경할 수도 있습니다.
이는 캐릭터 반복처리 시간이 빨라집니다. 기존에는, IK 나 조준의 타겟 조인트 계층구조를 변경하려면, 엔진 외부의 디지털 콘텐츠 제작 프로그램에서 한 다음 모든 애니메이션을 다시 임포트하여 새로운 조인트가 포함되도록 애니메이션 에디터를 수정해야 했으나, 이제 가상 본을 통해 외부 작업을 건너뛰고 모든 작업을 엔진 내에서 처리할 수 있습니다. 하지만 애니메이션 데이터에 해당 조인트를 포함시켜 재압축은 해야합니다. 가상 본의 보다 실전적인 활용 방법은, "파라곤에 사용된 애니메이션 기법"을 참고하시기 바랍니다. 파라곤에서는 경사로 워프와 오리엔테이션에 사용되었으며, 콘트롤러에 대한 레퍼런스 프레임 변경이나 리타게팅이 쉬워집니다.
모프 타겟 디버그 뷰 모드
새로운 모프 타겟 뷰 모드는 각각의 모프 타겟에 영향받는 버텍스를 쉽게 확인할 수 있습니다.
자손 애니메이션 몽타주
부모 몽타주를 기반으로 자손 몽타주를 만들면, 전체적인 타이밍을 유지한 채 애니메이션 클립을 대체할 수 있습니다. 게임플레이에 영향을 끼치지 않으면서 동작에 베리에이션을 추가하고자 할 때 좋습니다.
신기능: MIDI 디바이스 플러그인
이번 출시에는 음악 관련 하드웨어 작업에 쓰이는 "MIDI Device" 플러그인이 포함되어 있습니다.
간단한 MIDI 인터페이스로, 컴퓨터에 연결된 디바이스에서 MIDI 이벤트를 받을 수 있도록 해주는 것입니다. 현재 입력만 지원됩니다. 블루프린트에 사용하는 방법은 다음과 같습니다:
- Plugins UI 에서 "MIDI Device" 플러그인을 활성화시킨 뒤 언리얼 에디터를 재시작합니다.
- 블루프린트 우클릭 메뉴에서 "MIDI Device Manager" 를 검색합니다.
- "Find MIDI Devices" 를 호출하여 원하는 디바이스를 선택합니다.
- "Found MIDI Device" 구조체를 분석하여 어떤 것이 가능한지 확인합니다.
- 원하는 디바이스에 대해 "Create MIDI Device Controller" 를 호출합니다. 그것을 변수에 저장합니다. (오브젝트에 대한 레퍼런스를 변수에 저장하지 않으면 가비지 콜렉팅되어 이벤트를 받지 못하게 됩니다!)
- MIDI Device Controller 에서 자신의 이벤트를 "On MIDI Event" 에 묶어줍니다. 받을 새 MIDI 이벤트가 하나라도 있으면 매 게임 틱마다 호출됩니다.
- 이벤트에 전달된 데이터를 처리하여 프로젝트에서 활용합니다!
신기능: 랜드스케이프 회전 툴
이제 랜드스케이프 미러링 툴로 미러링 면에 평행인 반사 지오메트리를 뒤집어, 대각선 방향으로도 반대되는 멀티플레이어 맵을 만들 수 있습니다.
메시 머티리얼 슬롯 임포트 개선
스태틱/스켈레탈 메시에서 모든 머티리얼이 어떻게 사용되는지에 대해 보다 자세한 정보와 제어가 가능하도록, 그리고 메시를 리임포트할 때 머티리얼 순서가 일관되지 않던 문제를 개선시키기 위해 머티리얼 작업방식이 변경되었습니다.
목록의 각 요소는 다음과 같은 정보가 들어있는 머티리얼 슬롯입니다.
- 슬롯 이름
- 머티리얼 리임포트시 일치시키는 데 사용되는 슬롯 이름입니다. 메시를 리임포트할 때 FBX 파일에서 이 이름을 검색하여 기존 머티리얼의 어디에 일치시킬지 결정합니다. 기존에는 인덱스 순서에 의존했기 때문에 망가지기 쉬웠습니다.
- 이 변경사항 이전에 임포트된 메시는 머티리얼 슬롯이 없음으로 되어 있을 것입니다. 이 변경사항 이후 임포트되는 메시는 머티리얼 슬롯이 기본으로 임포트되는 머티리얼 이름으로 설정됩니다.
- 머티리얼 애셋 레퍼런스
- (툴팁에서) 임포트된 머티리얼 원본 이름입니다.
이제 블루프린트와 C++ 에서 하드코딩된 인덱스 대신 머티리얼 슬롯 이름을 사용하여 머티리얼 슬롯을 구해오는 것이 가능합니다. Set Material By Name 을 호출하면 스켈레탈 메시 또는 스태틱 메시 컴포넌트에 다이내믹 머티리얼을 설정합니다. 인덱스가 아닌 이름 룩업을 사용하면 메시의 머티리얼 순서가 변경되어도 게임플레이 코드가 정상 작동할 것입니다.
플랫폼 SDK 업그레이드
새 버전이 출시될 때마다 엔진이 플랫폼 파트너의 최신 SDK 버전을 지원하도록 업데이트하고 있습니다.
- Xbox One: August 2016 QFE 2\
- Playstation 4: PSR SDK 4.008.061
- HTML5: \Emscripten 1.36.13
- macOS: 10.12 Sierra, Xcode 8.1
- iOS/tvOS: iOS10/tvOS10, Xcode 8.1
신기능: 모바일 다운로드/패치용 블루프린트 라이브러리
새로운 Mobile Patch Utilities Blueprint library (모바일 패치 유틸리티 블루프린트 라이브러리)에는 모바일 게임을 앱 스토어 초기 다운로드의 일부로 배포하는 방식이 아닌, 클라우드 웹사이트에서 게임 콘텐츠와 패치를 다운로드하고 설치할 수 있도록 해줍니다.
업데이트된 게임 콘텐츠가 있는지 확인, 다운로드 시작, 진행상황 기록, 오류 처리, 다운로드에 성공한 콘텐츠 팩 설치와 같은 작업을 하는 함수 기능이 있습니다. 저장 공간은 충분한지, 와이파이 연결은 가능한지 확인하는 함수 기능도 있으므로, 블루프린트에서 그러한 경우에 대한 경고 발생이 가능합니다. 안드로이드와 iOS 모두 지원합니다.
신기능: Amazon Kindle Fire 용 GameCircle 플러그인
새로운 Online Subsystem GameCircle 플러그인이 포함되었습니다!
GameCircle 업적, 순위표, 친구목록과 함께 Amazon 앱 내 구매도 지원합니다. 플러그인을 활성화시키면 Plugins 카테고리 아래 새로운 Amazon GameCircle 프로젝트 세팅 패널에 접근할 수 있습니다. AndroidManifest.xml 를 편집하여 Fire TV 를 활성화시키는 것도 여기서 가능합니다.
신기능: 라이브 GPU 프로파일러
UE 4.14 에는 실시간 GPU 프로파일러가 포함되어 있어, 주요 렌더링 카테고리에 대한 프레임별 통계가 제공됩니다. 사용하려면 stat gpu 콘솔 명령을 입력하면 됩니다. 에디터의 뷰포트 옵션 - '통계' 서브메뉴를 통해 불러올 수도 있습니다.
통계는 누적되며 계층구조가 없으므로, 이벤트 트리를 깊게 파내려가지 않고도 주요 카테고리를 확인할 수 있습니다. 예를 들어 섀도 프로젝션은 (모든 뷰에 있는) 모든 라이트의 섀도 프로젝션 전체를 합한 것입니다.
화면상에 표시되는 GPU 통계는 타이틀 실행 도중의 GPU 부하를 간단히 시각적으로 분석해 보여주는 것입니다. 어떤 변화가 끼치는 영향을 즉시 확인하기에도 좋습니다. 예를 들어 (리컴파일 셰이더 변경 상태로) 즉석에서 셰이더 변경 및 리컴파일할 때, 에디터에서 머티리얼을 변경할 때, 콘솔 변수를 변경할 때 등입니다.
GPU 통계는 타이틀 실행 도중 파일에 기록하여 나중에 분석할 때 쓸 수도 있습니다. 기존 통계와 마찬가지로 'stat startfile', 'stat stopfile' 콘솔 명령을 사용하여 통계를 ue4stats 파일에 기록한 뒤, 나중에 언리얼 프론트엔드 툴에서 열어 시각화시켜 볼 수 있습니다.
Profiling the GPU with UnrealFrontend. Total, postprocessing and basepass times are shown
통계는 코드에 플로트 카운터로 선언되어 있습니다:
DECLARE_FLOAT_COUNTER_STAT(TEXT("Postprocessing"), Stat_GPU_Postprocessing, STATGROUP_GPU);
렌더링 스레드의 코드 블록은 SCOPED_GPU_STAT 매크로에 그 통계 이름을 레퍼런싱하여 인스트루먼트 가능합니다. 이는 SCOPED_DRAW_EVENT 와 비슷한 방식으로 작동합니다. 예:
SCOPED_GPU_STAT(RHICmdList, Stat_GPU_Postprocessing);
명시적으로 인스트루먼트되지 않은 GPU 작업은 catch-all [unaccounted] (전부 쓸어담는 [미분류]) 통계로 들어갑니다. 이 부분이 너무 커지면, 실종된 작업을 밝히는 데 SCOPED_GPU_STAT 이벤트가 추가로 필요하다는 것을 말합니다. 드로 이벤트와는 달리 GPU 통계는 누적입니다. 동일한 통계에 대한 항목을 몇 개씩 추가할 수 있으며, 이는 프레임 전반에 걸쳐 합산됩니다.
CPU 에 종속된 어떤 경우는, GPU 시간이 CPU 병목 (버블) 현상에 영향받을 수 있습니다. CPU 가 따라답을 때까지 GPU 가 기다리는 것인데, 드로 스레드 시간이 높은 경우 예상치 못한 결과가 보인다면 그러한 부분을 고려해 보시기 바랍니다. PlayStation 4 에서는 명령 목록 제출과 타이밍 사이의 시간을 제외하여 그러한 버블 현상을 보정하고 있습니다. 앞으로 다른 최신 렌더링 API 에도 그러한 기능을 확장하도록 하겠습니다.
액터 텍스처 아틀라스 병합 개선 (실험단계)
액터를 병합하여 머티리얼을 합칠 때 텍스처 스페이스를 활용하는 방식을 변경했습니다. 각 머티리얼의 가중치가 동일한 아틀라스 텍스처를 만드는 대신, 가중치를 입힌(binned) 아틀라스 텍스처 를 생성하는 옵션을 도입한 것입니다.
(왼쪽: 가중치가 동일한 머티리얼. 오른쪽: 가중치를 입힌 (Binned) 방식) 먼저 머티리얼이 샘플링하는 최대 크기 텍스처에 따라 개별 머티리얼의 중요성을 계산합니다. 그 후 이 값을 사용하여 머티리얼이 차지할 공간을 계산하고, 각 텍스처를 반복 처리해 가며 아틀라스 텍스처에 추가합니다. 이렇게 하면 아틀라스 텍스처가 입력 머티리얼을 보다 잘 표현하게 되는데, 원본 텍스처 데이터 크기가 아틀라스 텍스처에서 차지하는 공간을 계산하는 데 고려되기 때문입니다.
신기능: 리눅스에서 안드로이드 지원
커뮤니티의 pull 요청 덕에 리눅스용 안드로이드 지원이 가능해졌습니다. CodeWorks for Android from NVIDIA for Linux 만 있으면 필요한 NDK 와 SDK 가 구성됩니다. 추가적으로 OpenJDK 1.8 도 설치하고, JAVA_HOME 을 설치 디렉토리로 설정해 줘야 합니다. 참고로 현재 리눅스에서는 안드로이드 벌칸이 지원되지 않습니다.
미디어 플레이어 에디터
이제 컴퓨터의 파일을 미디어 플레이어 뷰포트에 끌어 놓아 FileMediaSource (파일 미디어 소스) 애셋을 만들지 않고도 비디오 파일을 미리볼 수 있습니다.
- 디코더 퍼포먼스 통계를 위한 탭이 추가되었습니다. 출력은 재생에 사용되는 플레이어 플러그인에 따라 달라집니다.
신기능: 모바일용 VR 멀티뷰 지원
이제 모바일 디바이스에서 (지원되는 경우) 모바일 멀티뷰 패쓰를 사용할 수 있습니다! 모바일 멀티뷰는 데스크탑의 인스턴스드 스테레오와 비슷하며, CPU 의 스테레오 렌더링에 대한 최적화된 패쓰를 제공해 줍니다.
이 기능을 사용하려면, 프로젝트 세팅의 VR 섹션 아래에서 활성화시켜 줍니다. 이 기능의 정상 작동을 위해서는 안드로이드 빌드 세팅을 OpenGL ES2 로 설정하고, 모바일 HDR 과 인스턴스드 스테레오는 꺼야 합니다. 현재 이 기능은 최신 Mali 기반 디바이스와 호환됩니다. 이 기능을 켠 채로 패키징을 해도 호환 CPU 가 없는 경우, 실행시간에 꺼집니다.
이 기능은 아직 실험단계 기능이며, 계속해서 피처 및 디바이스 호환성 확인을 하도록 하겠습니다.
프로젝트 세팅 메뉴에서 위와 같이 Enable Mobile Multiview 옵션을 켠 뒤 에디터를 재시작하면 효과가 적용됩니다.
SteamVR 및 PSVR 용 레이어 지원
이제 SteamVR 과 PSVR 에 레이어가 지원됩니다! Oculus Rift 플러그인에서 Stereo Layer 컴포넌트를 사용하는 것과 똑같은 방식으로 작동합니다.
신기능: VR 무비 로드
이제 엔진은 Oculus, GearVR, SteamVR, PSVR 에서 무비 로드를 지원합니다. 이는 렌더링 스레드에서 실행되며, 콘텐츠 로드시의 프레임 속도 급변을 방지할 수 있습니다. 스플래시 화면을 사용하려면, "Set Splash Screen" 노드에 텍스처를 설정하거나, "Enable Auto Loading Splash Screen" 노드로 맵을 로드할 때 자동 표시되도록 하면 됩니다.
신기능: PSVR 다중 프레임 속도 타겟 지원
PSVR 에서 네이티브 90Hz to 90Hz 리프로젝션, 120Hz to 120Hz 리프로젝션을 지원합니다! 지연시간 최소화 및 리프로젝션 부작용 방지를 위해 높은 프레임 속도로 실행되도록 할 수 있다는 뜻입니다. 엔진이 선택된 프레임 속도로 제한시켜 주기는 하지만, 여전히 프레임 속도를 일관되게 유지하도록 노력하기는 해야 합니다!
신기능: 윈도우 멀티터치 지원
이제 윈도우 7, 8, 10 에서 터치 스크린을 사용할 때 터치 이벤트가 생성됩니다. 신형 윈도 태블릿에서 터치 가능 게임이나 체험을 만들 수 있으며, 모바일 게임을 타겟 디바이스에 설치하지 않고도 터치 콘트롤을 테스트할 수 있습니다.
신기능: 빠른 비동기 로딩 시스템 (실험단계)
쿠킹된 빌드는 이제 구형 스트리밍 코드보다 훨씬 효율적인 완전 새로운 Event Driven Loader (이벤트 주도형 로더)를 사용할 수 있습니다. 이벤트 주도형 로더를 사용하는 게임은 로드 시간이 약 50% 감소될 것이며, 상황에 따라서는 더욱 빨라질 수도 있습니다. 이벤트 주도형 로더에는 애셋을 로드를 위한 통합 코드 방식이 포함되어 있습니다. 모든 패키지는 구형 블로킹 방식이 아닌 신형 비동기 방식으로 로드된다는 뜻입니다. 이벤트 주도형 로더는 현재 실험단계 기능이어서 기본적으로 꺼져있으나, 프로젝트 세팅에서 쉽게 켤 수 있습니다.
게임 모드 및 게임 스테이트 클래스 단순화
새로운 Game Mode Base 와 Game State Base 클래스를 기존 Game Mode 와 Game State 의 부모 클래스로 추가했습니다. 모든 게임에 필요한 핵심 기능은 이제 Base 클래스에 들어있는 반면, 레거시 기능이나 슈팅게임 전용 기능은 Game Mode / Game State 클래스에 들어있습니다. 새로 시작된 프로젝트는 Base 클래스를 상속하는 반면, 기존 프로젝트는 기본적으로 해당 레거시 클래스를 상속하도록 되어 있습니다. 추가적으로 블루프린트에 몇 가지 함수가 새로 추가되었습니다.
이와 같은 변경은 오래된 게임플레이 클래스를 이해하기 쉽고 모든 프로젝트 유형에 상속하기 적합하도록 업데이트하기 위해 지속적으로 노력하고 있는 부분 중 한 가지입니다. Shooter Game 이외의 모든 샘플은 Base 클래스를 사용하도록 업데이트된 반면, Shooter Game 은 레거시 클래스에서 보다 슈팅 게임에 특화된 기능 몇 가지를 사용하는 법을 보여주고 있습니다. Game Mode/Game State 는 계속해서 지원될 것이며, 자신의 게임에 적합한 버전을 상속해야 할 것입니다.
네트워크 리플리케이션 속도 향상
서버와 연결된 클라이언트 사이의 프로퍼티 리플리케이션 방법에 내부적인 리팩터링 작업이 있었습니다.
접속된 여러 곳에 프로퍼티 리플리케이션 효율을 높이도록 코드를 변경했습니다. 이 변경 이전에는, 조건이 없는 (DOREPLIFETIME_CONDITION 보다는 DOREPLIFETIME 로 등록된) 프로퍼티 작업만 공유했었습니다. 이제 모든 프로퍼티 유형에 대해 작업을 공유합니다. 즉, 프로퍼티 변경( 및 전송 필요) 시점을 검사하는 작업이 훨씬 적게 일어난다는 뜻입니다.
내부적으로는 40% 에 달하는 속도 향상이 있었습니다. 아직 작업할 부분은 남아있지만, 작업 과정의 기쁜 소식을 같이 공유하고 싶었습니다!
세부 출시 노트 전문은 언리얼 엔진 문서를 참고해 주시기 바랍니다.