-
[Unreal] 언리얼 블루프린트 vs C++, 왜 프로그래머는 C++을 써야 하는가?쾌락없는 책임 (공부)/Unreal 2023. 3. 10. 22:53반응형
개요
언리얼을 처음 맛보면 대부분 블루프린트로 시작하게 됩니다. 저 또한 첫 접근은 블루프린트였습니다. 그런데 조금 더 심화된 과정에서는 C++을 위주로 코딩을 하게 됩니다. 이유를 들어보면 C++ 이 속도가 더 좋아서 라는 대답이 주를 이루게 되는데요. 이번에 왜 블루프린트가 C++보다 느린지에 대해서 여러 자료들을 알아봤습니다.
일단 Blueprint는 더 많은 명령을 거치게 된다
위 이유가 속도와 관련된 주된 이유였습니다. 블루프린트 함수들은 C++과 달리 객체로 유지가 됩니다. 어떤 C++ 함수들을 호출할지에 대한 정보를 가지고 있어야 한다고 합니다. 때문에 더 많은 명령을 거치고 cpu, 램 등을 많이 사용하게 된다고 합니다. 이러한 이유로 인해서 컴파일을 한다 해도 C++의 컴파일러처럼 인라인화를 해주는 이점을 가져오지 못하기에 더더 느려지게 되는 것입니다.
추가적으로 포럼에서 엔진 기여자의 말을 보면 블루프린트는 항상 메모리를 통해 접근해야 하고 C++로 만들어진 경우 CPU 캐시 힛이 될 여지가 있는 것처럼 이야기를 했는데 이와 관련한 것들은 더 알아봐야 할 것 같습니다.
They can’t be inlined by the compiler, accessing objects in RAM will always be slower than accessing objects in L1, L2 or L3 cache levels or inlined methods.
- BrUnO_XaVIeR [Engine Contributor]그 외 C++의 장점
C++의 장점은 이것들 외에도 여러가지가 있습니다. 일단 블루프린트로 클래스, 함수 등을 만드는 것보다 C++로 만드는 게 더 명확하고 읽기 쉽습니다. 그리고 엔진의 다양한 매크로, 함수 등이 C++로 지원하고 블루프린트에는 지원하지 않는 경우가 있습니다. 마지막으로 버전 관리의 경우 깃허브만 보더라도 C++ 코드는 볼 수 있지만 블루프린트 바이너리는 보는걸 지원해주지 않습니다.
이외 여러가지 이유들이 있어 공식 독스에 정리가 되어 있는데 간단하게 목록을 가져오겠습니다.
- 속도가 블루프린트보다 빠름
- 수학 연산의 경우 코드로 보는 게 더 쉽다
- C++을 통해서 API를 만드는게 더 쉽습니다.
- 접근 지정자, UPROPERTY, UFUNCTION 등을 통한 접근 제어가 세밀하게 가능합니다.
- 버전 변경, 직렬화 등을 위한 다양한 데이터 제어 기능이 있습니다.
- C++로 만든건 다른 C++이나 블루프린트에서 접근 가능합니다.
- 버전관리에서 C++ 코드는 보기 쉽게 텍스트로 되어 있습니다.
블루프린트는 죄악인가?
이전 자료들을 보면 블루프린트는 10배 느리다! 무조건 C++이다! 이런 이야기들을 볼 수 있는데 최근 자료는 많이 달랐습니다. 10배 정도의 차이는 물론 안 나고 심지어는 차이가 없는 경우들이 많이 있다고 합니다. 때문에 무조건적인 블루프린트 지양은 좋지 않다고 합니다.
일단 저같은 경우에도 플레이어 애니메이션, IK 등과 같은 것들은 C++로 작성하지 않습니다. '이걸 C++로 표현하려면 무슨 짓을 해야 하지?'라는 생각이 들기도 하거든요. 엔진 공식 문서에서도 Tick에서 사용하는 것이 아니면 블루프린트에서 큰 문제가 없다고 합니다.
블루프린트는 빠르게 제작 가능하고 흐름을 확실하게 볼 수도 있으며 디자이너도 어느정도의 이해가 있음 조작이 가능하니 너무 지나친 배척은 금하고 적절한 병행 사용이 좋다고 합니다.
참고자료
반응형'쾌락없는 책임 (공부) > Unreal' 카테고리의 다른 글
[Unreal] Unreal Engine IK solver - IK는 어떤 원리로 동작할까? (1) 2023.03.20 [Unreal] Additive Animation - 애디티브 애니메이션 (1) 2023.03.13 [Unreal] 언리얼 인터페이스 이야기 - Unreal C++ Interface (0) 2022.11.28 [Unreal] 언리얼의 GC에 대해서 알아보자. 아주 간략히 (0) 2022.11.07 [Unreal] 언리얼 Anim Montage가 재생되지 않을 때 - Unreal Anim Montage not playing (0) 2022.11.05