언리얼 엔진 5 얼리 액세스 출시

언리얼 엔진 5 소식

https://www.unrealengine.com/ko/blog/unreal-engine-5-is-now-available-in-early-access

지난 5월 26일에 언리얼 엔진 5가 얼리 액세스로 출시되었다는 소식이 있었습니다.
얼리 액세스 전에 나왔던 영상에서도 많은 기대를 모았는데 어떤 기능들이 공개된 대로 동작할지 기대가됩니다.

지난 5월 13일에 공유된 영상

얼리 액세스 릴리스와 함께 공유된 영상

⭐️ 영상에서 리스트 버튼을 눌러보시면 언리얼 엔진 5의 기능 리스트를 볼 수 있습니다.

언리얼 엔진 5 신기능 소개

나나이트(Nanite)

  • 가상화된 마이크로폴리곤 지오메트리 시스템 (Virtualized MicroPolygon Geometry System)
  • 노멀 맵에 디테일을 베이크하거나 LOD를 직접 제작하는 것처럼 오래 걸리고 반복적인 작업을 생략함

루멘(Lumen)

  • 완전한 다이나믹 글로벌 일루미네이션 솔루션 (Fully dynamic global illumination solution)
  • 이를 통해 직사광, 지오메트리의 변화에 간접광이 실시간으로 반응하는 사실적인 다이나믹 씬을 제작할 수 있음
  • 라이트 맵 UV를 제작하거나 라이트 맵 굽기를 기다리거나 리플렉션 캡쳐를 배치하지 않아도 됨

월드 파티션 시스템(World Partition System)

  • 자동으로 월드를 그리드로 나누고, 필요에 따라 필수적인 셀을 스트리밍하는 기능

액터당 한개의 파일 시스템 - 협업을 원활히 할 수 있게 액터를 파일 단위로 하는 기능

데이터 레이어

  • 레이어로 특정 조건, 상태에 따라 월드에 다른 베리에이션을 동일한 공간에 존재하는 레이어로 제작할 수 있음

애니메이션

  • 컨트롤 릭(Control Rig) - Rig을 제작하고 다수 캐릭터에 공유, 포즈 취할 수 있도록 함
  • 포즈 브라우저(Pose browser) - 포즈를 애셋화하거나 적용함
  • 풀 바디 IK 솔버(Full body IK Solver) - 쉽게 동작 구현 도움
  • 모션 워핑(Motion Warping) - 캐릭터 루트 모션을 다수의 타깃에 정렬되도록 동적으로 조정 가능

메타사운드(MetaSounds)

  • 사운드 소스의 오디오 DSP 그래프 생성에 대한 완전한 제어를 제공

향상된 에디터 UI 및 워크플로우

  • 콘텐츠 브라우저 고정 기능, 에디터 탭을 축소할 수 있는 기능
  • 디테일 패널에서 자주 사용하는 프로퍼티를 빠르게 액세스할 수 있는 새로운 즐겨찾기 시스템
  • 월드에 액터를 손쉽게 배치하게 해주는 메인 툴바의 새로운 생성 버튼, 새로운 프로젝트 생성을 위해 보다 쉽고 간소화된 워크플로도 제공

언리얼 엔진 5 보러가기

언리얼 엔진 5는 에픽게임즈 런처를 통해 실행해볼 수 있습니다.

튜토리얼도 있으니 한번 보고 해봐야겠어요. 😸

https://www.unrealengine.com/ko/onlinelearning-courses/ue5-early-access-quickstart

소개는 여기까지 하겠습니다. 자세한 내용은 원문을 참고해주세요!

우리에게 1ms의 의미란 (FPS vs Frame time)

Intro

이 글은 최적화 관점에서 FPS(Frame Per Second) 대신 Frame time(1ms)을 어떤 의미로 어떻게 볼 수 있는지에 대해 간단히 이야기해봅니다.

FPS? Frame time?

FPS는 다들 많이 들어보았을 것 같습니다. 말 그대로 Frame Per Second, 프레임 당 초(시간)을 의미하며 Frame rate(프레임률)이라고도 말합니다.

위키 참고: https://ko.wikipedia.org/wiki/프레임_레이트

1초 동안 보여주는 화면(프레임)의 수

예를 들면, FPS 60 == 1초당 60 프레임을 그린다고 볼 수 있겠습니다.

**Frame time(프레임 시간)**은 FPS에 비해서 생소할 수 있지만 간단히 말하면 화면(프레임)이 그려지는데 걸리는 시간입니다. (한 프레임을 그리는데 사용할 수 있는 버퍼 시간으로도 볼 수 있습니다.)

FPS와 동일하게 예를 들면, frame time 16ms == 화면 1개 그리는데 16ms 소요된다고 볼 수 있습니다.
FPS와 Frame time을 엮어서 보면 아래와 같겠죠

FPSFrame timeFrame time(ms)
201/2050ms
301/3033.33ms
601/6016.67ms
1001/10010ms
1441/1446.9ms

이렇게 보니 FPS와 Frame time이 연관이 있는 것은 알았습니다. 최적화 관점에서 이 두 값을 어떤 의미로 볼 수 있을까요?

최적화 후 1ms 차이

게임을 개발하면서 FPS가 안정적일 수 있도록, 더 높은 FPS로 플레이할 수 있도록 최적화를 하는데요. 이 때 최적화 결과 Frame time이 1ms 줄었을 때 FPS 변화는 어떻게될까요?

FPS와 Frame time 관계를 보았을 때 60 FPS 기준으로 Frame time은 16.67ms 였는데요.

Frame time이 16.67ms → 15.57ms가 될 경우, 60 FPS → 63.8 FPS. 약 3.8 FPS 상승합니다.

더 높은 FPS에서는 어떨까요? 10ms → 9ms가 되면 100 FPS → 111.11 FPS. 약 11.11 FPS 상승합니다.

최적화 후에는 FPS를 보는 것 보다 Frame time을 보는게 더 명확하다

60 FPS 고정인 상태 또는 게임에서의 부하(stress), 여러가지 하드웨어 환경에 따라 측정 결과가 다를 수 있긴합니다.

다만 최적화 후 개선된 항목(function 또는 Operation)이 얼마나 게임 환경(성능)에 영향을 주었는지를 Frame time 변화를 통해서 조금 더 명확하게 볼 수 있습니다.

물론 FPS 보다는 바로 이해가 가지 않을 수는 있지만 다른 요소에 영향을 받지 않는 수치로 볼 수 있는 것이죠.

Fin

일반인(?)의 시선으로 Frame time을 최적화 관점에서 정리를 해보았습니다.

항상 최적화 이후에 1ms, 0.5ms 개선했다는 내용이 큰 개선인가? 하는 의문이 있었고 그런 참에 계산해보고 정리해보면서 개선의 크기와 영향도를 알게되어서 즐거운 공부였네요.

틀린 내용이 있다면 편하게 댓글 남겨주세요.
고맙습니다. :)

참고 영상

https://www.youtube.com/watch?v=GpYyjb5mz48

OpenGL ES 버전 2.0과 3.0 차이

OpenGL ES(Embeded System)

Cocos2d-x 버전 차이에 대해서 공부하던 중에 그 기반이 되는 OpenGL ES의 버전에도
큰 차이가 있지 않을까하여 공부해봤습니다.

우선 OpenGL ES란, (Wikipedia-ko)

OpenGL ES (임베디드 단말을 위한 OpenGL)는 크로노스 그룹이 정의한 3차원 컴퓨터 그래픽스 API인 OpenGL의 서브셋으로, 휴대전화, PDA 등과 같은 임베디드 단말을 위한 API이다.

한글로 작성된 위키는 짧군요. 영어로 작성된 위키를 더 보겠습니다. (Wikipedia-en)

OpenGL for Embedded Systems (OpenGL ES or GLES) is a subset of the OpenGL computer graphics rendering application programming interface (API) for rendering 2D and 3D computer graphics such as those used by video games, typically hardware-accelerated using a graphics processing unit (GPU). It is designed for embedded systems like smartphones, computer tablets, video game consoles and PDAs. OpenGL ES is the “most widely deployed 3D graphics API in history”. The API is cross-language and multi-platform. The libraries GLUT and GLU are not available for OpenGL ES. OpenGL ES is managed by the non-profit technology consortium Khronos Group. Vulkan, a next-generation API from Khronos, is made for simpler high performance drivers for mobile and desktop devices.

설명에 큰 차이는 없지만, API에 대한 설명에는 크로스 랭귀지, 멀티 플랫폼이 포함되어 있네요.
OpenGL에서 사용할 수 있는 GLUT, GLU는 OpenGL ES에서는 사용할 수 없다는 것 정도를 추가로 알 수 있었습니다.

각 버전별 설명도 잘 나와있는 영문 위키를 보면,

OpenGL ES 2.0 - (EN)

OpenGL ES 2.0 was publicly released in March 2007.[6] It is based roughly on OpenGL 2.0, but it eliminates most of the fixed-function rendering pipeline in favor of a programmable one in a move similar to transition from OpenGL 3.0 to 3.1.[7] Control flow in shaders is generally limited to forward branching and to loops where the maximum number of iterations can easily be determined at compile time.[8] Almost all rendering features of the transform and lighting stage, such as the specification of materials and light parameters formerly specified by the fixed-function API, are replaced by shaders written by the graphics programmer. As a result, OpenGL ES 2.0 is not backward compatible with OpenGL ES 1.1. Some incompatibilities between the desktop version of OpenGL and OpenGL ES 2.0 persisted until OpenGL 4.1, which added the GL_ARB_ES2_compatibility extension.[9]

OpenGL ES 3.0 - (EN)

The OpenGL ES 3.0 specification[10] was publicly released in August 2012.[11] OpenGL ES 3.0 is backwards compatible with OpenGL ES 2.0, enabling applications to incrementally add new visual features to applications. OpenGL 4.3 provides full compatibility with OpenGL ES 3.0. Version 3.0 is also base of WebGL 2.0.[12]

New functionality in the OpenGL ES 3.0 specification includes:

(참고, http://www.informit.com/articles/article.aspx?p=2181697&seqNum=2)

음, 내용이 많아 번역한 내용으로 각각 살펴보고 정리해보겠습니다.

OpenGL ES 2.0

OpenGL ES 2.0는 2007년 3월에 출시되었습니다. OpenGL 2.0을 기반으로 하지만 OpenGL 3.0에서 3.1로 업데이트 될 때와 비슷하게 고정 렌더링 파이프라인을 제거하였습니다. 셰이더의 제어 흐름은 컴파일할 때에 쉽게 결정할 수 있는 순방향 분기, 루프로 제한됩니다.

이전에 고정 함수 API에 의해 지정된 재질 및 조명 매개 변수와 같은 변형 및 조명 스테이지의 거의 모든 렌더링 기능은 그래픽 프로그래머가 작성한 쉐이더로 대체되었습니다. 따라서 OpenGL ES 2.0은 OpenGL ES 1.1과 호환되지 않습니다. OpenGL과 OpenGL ES 2.0 데스크톱 버전 간의 일부 비 호환성은 GL_ARB_ES2_compatibility 확장을 추가한 OpenGL 4.1까지 지속됩니다.

OpenGL ES 3.0

OpenGL ES 3.0 사양은 2012년 8월에 공개되었습니다.
OpenGL ES 3.0은 OpenGL ES 2.0과 하위 호환되므로 응용 프로그램이 응용 프로그램에 점진적으로 새로운 시각적 기능을 추가할 수 있습니다.

OpenGL 4.3은 OpenGL ES 3.0과 완벽한 호환성을 제공합니다.
OpenGL ES 3.0은 WebGL 2.0의 기반이기도합니다.

새로운 기능은 아래와 같습니다.

  • 오클루전 쿼리, 변환 피드백, 인스턴스 렌더링 및 4개 이상의 렌더링 대상에 대한 지원을 비롯하여 고급 시각 효과를 가속화할 수 있도록 렌더링 파이프 라인에 대한 여러 가지 향상된 기능을 제공합니다.
  • 고품질 ETC2/EAC 텍스처 압축을 표준 기능으로 지원하여 각 플랫폼에 다른 텍스처 세트가 필요하지 않습니다.
  • 부동 소수점 텍스처, 3D 텍스처, 깊이 텍스처, 정점 텍스처, NPOT 텍스처, R/RG 텍스처, 불변 텍스처, 2D 배열 텍스처, 스위즐, LOD 및 밉(Mip) 레벨 클램프, 매끄러운 큐브 맵 및 샘플러 객체에 대한 보장된 지원을 포함하여 크게 향상된 텍스처링 기능을 포함합니다.
  • 명시적으로 크기가 필요한 텍스처 및 렌더링 버퍼 형식의 광범위한 세트로, 구현 변동성을 줄이고 모바일 앱을 훨씬 쉽게 개발할 수 있습니다.

구글 번역기의 도움을 받아 해석해보았습니다.
내용 상으로는 전반적으로 기능 추가, 성능 향상이 있어보입니다.
(버전이 올라가면 늘 있는 성능 향상인 것 같지만요)
2.0과 하위 호환이 된다는 것이 큰 것으로 보이며 더 깊게 봐야겠지만 렌더링 대상 지원 추가, 렌더링 파이프 라인 기능 향상 등이 눈에 띄네요.
텍스쳐링 기능도 지원 범위가 넓어진 것도 큰 것 같습니다.

성능 테스트 자료가 있으면 좋겠는데.. 없네요.
주로 OpenGL ES와 Vulkan 성능 분석이 많아서 OpenGL ES 2.0과 3.0은 성능 자료는 찾기 힘드네요.
성능 분석에 큰 의미가 없어서 그런 것일 수도 있겠습니다.
(기기에 따라 성능 차이가 많이 나서)

OpenGL ES 버전 차이가 어떤가에 대해 개괄적인 내용을 살펴보았습니다.
렌더링 방식, 텍스처 처리방식, 버퍼 크기등에 대한 차이가 있었네요.

그래픽 엔지니어는 아니어서 자세한 내용은 더 정리하기 힘들지만
다른 좋은 레퍼런스가 있다면 추가해서 들고 오겠습니다.