일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 언리얼엔진
- CNN
- UE5
- NLP
- multimodal
- 모션매칭
- Few-shot generation
- WBP
- userwidget
- deep learning
- Font Generation
- 딥러닝
- ddpm
- BERT
- ue5.4
- inductive bias
- WinAPI
- Stat110
- dl
- 생성모델
- GAN
- motion matching
- RNN
- 디퓨전모델
- animation retargeting
- Diffusion
- 폰트생성
- Unreal Engine
- cv
- Generative Model
- Today
- Total
목록Game Development/Unreal Engine (27)
Deeper Learning
NPC와의 대화 기능을 추가하려고 개발을 하던 중, 딥러닝 언어모델을 활용해 NPC와 더욱 자연스럽게 대화할 수 있는 기능을 넣어보면 재미있겠다는 생각이 들었다.그래서 간단하게 Claude, ChatGPT API와 집 데스크탑에 세팅해 둔 LLaMA를 연동해서 테스트를 해보았다. 이번 포스팅은 주제는 언리얼 엔진에서 간단한 대화 기능 구현과 LLM API 연결이다. LLM 기반 NPC 대화 시스템 설계LLM을 모든 NPC의 대화 모델로 사용하기에는 Hallucination, Context Limitations, Bias 등 언어 모델의 고질적인 문제로 인해 대화가 길어지거나 플레이어가 예외적인 질문을 던질 경우 몰입감이 크게 저하될 수 있다. 그럼에도 불구하고 일단 LLM을 사용한다고 가정해보자. 게..
언리얼 엔진에서 애니메이션 작업을 하다 보면 Skeletal Mesh를 수정하고 싶을 때가 많다. Fab에서 다운받은 캐릭터가 제대로 Rigging이 되어있지 않거나 Root bone이 없는 등 바로 애니메이션을 재생할 수 없는 상태인 경우가 종종 있다. 이번 포스팅은 언리얼 엔진 에디터에서 제공하는 Skeletal mesh를 수정할 수 있는 플러그인을 사용법을 다뤄보려 한다. Mixamo 또는 Fab에서 다운받은 많은 캐릭터 모델의 Skeleton은 Root bone이 없이 hips 또는 pelvis가 가장 상위의 Root Bone으로 설정되어 있다. 루트 모션 애니메이션을 사용할 때 만약 hips, pelvis가 root bone으로 되어있으면 캐릭터가 상체를 회전시키거나 다리를 드는 과정에서 pel..
프로젝트를 진행하면서 사용하는 애셋들과 기능을 테스트하기 위해 구조를 고려하지 않고 작성한 코드, 클래스들이 많아져 간단한 테스트 Level도 로드하는데 시간이 꽤 걸리는 것을 확인하였다. Size Map으로 Level의 사이즈와 구성 요소들을 확인하고 Hard Reference를 Soft Reference로 변경하여 참조하는 객체를 미리 메모리에 로드하지 않고 동적으로 로드하도록 하였고 이에 대해 포스팅해보려 한다. Size MapSize Map은 애셋들의 메모리 사용량을 시각적으로 확인할 수 있는 언리얼 에디터에서 제공하는 기능이다. 로드 시간, 메모리 사용량을 관리할 때 문제가 되는 애셋을 바로 확인할 수 있어 매우 유용하다. Level을 시작할 때 로드시간 문제를 해결하기 위해 Content D..
개발 중인 개인 프로젝트에서 정해진 구간을 순찰하다가 플레이어를 발견하면 추적하고 공격하는 AI를 개발하면서 학습한 AI Percetion에 대한 포스팅이다. 대부분 잠입 액션게임, 오픈월드 게임에서 적은 시야에 플레이어가 들어왔을 때에만 반응한다. 적이 정보를 얻는 매개가 시야, 소리, 대미지라면 훨씬 더 현실적인 AI를 만들 수 있다. 언리얼 엔진에서는 이를 쉽게 구현할 수 있도록 AIPerceptionComponent를 제공한다. AI Controller의 헤더에 멤버로 AIPerceptionComponent 를 추가하자 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)class UAIPerceptionComponent* AIPerception; 앞서 언급한 시..
진행하고 있는 프로젝트에서 캐릭터가 공격하는 방향으로 이동하거나, 적을 타겟팅 하기 위한 방법을 알아보다가 찾게 된 Motion Warping(모션 워핑)에 대해 소개하려 한다. 모션 워핑은 캐릭터의 루트 모션을 타겟을 향해 조정하는 기능으로 Animation Montage에서 AnimNotify State를 설정하여 쉽게 세팅할 수 있다. 우선 Motion Warping(Beta) 플러그인을 설치한다. 에디터를 재시작하여 플러그인을 적용한 후 모션 워핑을 적용할 액터에 Motion Warping 컴포넌트를 추가할 수 있다. 코드에서 명칭은 UMotionWarpingComponent, 헤더는 #include "MotionWarpingComponent.h" 를 포함하면 된다. // HeaderUPROPE..
저번 포스팅에 이어 Chooser를 사용하여 Pose Search Databases를 상황에 맞게 교체하고 직접 Pose Search Schema에 Channel을 추가하여 더 자연스러운 모션매칭을 완성해보려 한다. [UE5] Motion Matching - 2 (Pose Search, 모션 매칭)저번 포스팅에 이어서 모션매칭을 이어 진행해보자. [UE5] Motion Matching - 1 (모션매칭, UE 5.4)언리얼 엔진에서 500개가 넘는 무료 애니메이션이 포함된 캐릭터를 포함하는 Unreal Engine Game Animation Sampledlaiml.tistory.com Chooser Content Drawer에서 우클릭한 뒤 Chooser Table을 만들자.애니메이션 블루프린트에 캐릭터..
저번 포스팅에 이어서 모션매칭을 이어 진행해보자. [UE5] Motion Matching - 1 (모션매칭, UE 5.4)언리얼 엔진에서 500개가 넘는 무료 애니메이션이 포함된 캐릭터를 포함하는 Unreal Engine Game Animation Sample Project을 공개하였다. Motion Matching 을 사용한 애니메이션 시스템을 선보인다고 적혀있는dlaiml.tistory.com Motion MatchingGame Animation Sample Project의 애니메이션을 모두 직접 추가한 캐릭터에 Retargeting 하였고 Input이 작동하지 않던 문제도 해결하였다.이제 애니메이션을 적용하려면 Animation Blueprint 에서 State Machine을 세팅하고 여러 애니..
언리얼 엔진에서 500개가 넘는 무료 애니메이션이 포함된 캐릭터를 포함하는 Unreal Engine Game Animation Sample Project을 공개하였다. Motion Matching 을 사용한 애니메이션 시스템을 선보인다고 적혀있는데, 이 샘플 프로젝트로 Motion Matching(모션 매칭)이 무엇이고 어떻게 사용하는지에 대해 이번 포스팅에서 다뤄보려 한다. 마침 진행하고 있는 TPS 프로젝트가 있어 Animation Retargeting + Motion Matching에 대해 같이 소개하겠다. UE Game Animation Sample Project 에픽게임즈 런처의 마켓플레이스에서 무료탭의 에픽게임즈 콘텐츠를 클릭하면 에픽게임즈에서 제공하는 여러 콘텐츠를 확인할 수 있다. 최신..
[UE5] Session 기반 멀티플레이 Plugin 제작 - OnlineSubsystemSteam 환경에서 ServerTravel 디버깅이전 포스팅에서 OnlineSubsystem의 Session Interface를 사용하여 멀리 떨어진 플레이어도 같이 게임을 즐길 수 있도록 간단하게 멀티플레이 기능을 만들어 보았다. [UE5] 클라이언트-서버 모델언리얼dlaiml.tistory.com 이번 포스팅도 이전 포스팅에 이어서 Steam Online Subsystem의 Session Interface를 활용한 멀티플레이 플러그인 개발기이다.쉽게 적용해 보고 테스트할 수 있도록 UserWidget과 테스트 레벨을 추가하였다. 이번 포스팅에서는 플러그인을 만들면서 Steam Online Subsystem, ..
저번 포스팅에 이어 OnlineSubsystem의 SessionInterface를 활용한 멀티플레이 플러그인 제작과 관련된 포스팅이다. [UE5] Session 기반 멀티플레이 Plugin 제작 - OnlineSubsystemSteam 환경에서 ServerTravel 디버깅이전 포스팅에서 OnlineSubsystem의 Session Interface를 사용하여 멀리 떨어진 플레이어도 같이 게임을 즐길 수 있도록 간단하게 멀티플레이 기능을 만들어 보았다. [UE5] 클라이언트-서버 모델언리얼dlaiml.tistory.com 언리얼 엔진 문서를 찾아보니 플러그인 제작에는 Subsystem을 사용하는 것을 추천하고 있었다. 이전 Client-Server 모델과 OnlineSubsystem을 학습하면서 작성..
이전 포스팅에서 OnlineSubsystem의 Session Interface를 사용하여 멀리 떨어진 플레이어도 같이 게임을 즐길 수 있도록 간단하게 멀티플레이 기능을 만들어 보았다. [UE5] 클라이언트-서버 모델언리얼 엔진에서 싱글 플레이 게임에 대해서만 학습하다 보니 멀티플레이 게임, 네트워크에 대해 알고 싶어져 멀티플레이에 대해 학습을 시작하였다. 이번 포스팅에서는 언리얼 엔진의 멀티플dlaiml.tistory.com [UE5] Online Subsystem (Session Interface를 사용한 Steam 멀티플레이 구현)[UE5] 클라이언트-서버 모델언리얼 엔진에서 싱글 플레이 게임에 대해서만 학습하다 보니 멀티플레이 게임, 네트워크에 대해 알고 싶어져 멀티플레이에 대해 학습을 시작하였다..
[UE5] Animation Retargeting, IK Rig (Sketchfab, Mixamo) - 1프로젝트에 사용할 캐릭터 애셋, 애니메이션을 찾다가 무료 애셋이 많은 사이트인 Sketchfab, Mixamo을 알게 되었다. Sketchfab에서 캐릭터를 가져오고, Mixamo에서 애니메이션을 가져와 원하는 애니메이dlaiml.tistory.com 저번 포스팅에서 아래에서 초록색으로 쓰인 항목들을 소개하였다. Mixamo 애니메이션 가져오기 UE 5.4 Retarget AnimationsSketchfab 모델 가져오기IK RigIK Retargeter IK Rig 이전 포스팅에서 가져온 Mixamo의 애니메이션 에디터의 기본 캐릭터인 Manny의 Skeletal에 UE 5.4의 Anim Retar..
프로젝트에 사용할 캐릭터 애셋, 애니메이션을 찾다가 무료 애셋이 많은 사이트인 Sketchfab, Mixamo을 알게 되었다. Sketchfab에서 캐릭터를 가져오고, Mixamo에서 애니메이션을 가져와 원하는 애니메이션을 원하는 캐릭터에 사용하는 방법을 이번 포스팅에서 소개하려 한다. 언리얼 엔진 5.4 버전에서 애니메이션 리타게팅이 매우 편해졌다. 기본 삼인칭 캐릭터인 Manny, Quinn의 경우 Mixamo에서 import 한 애니메이션을 클릭 한 번으로 리타게팅 할 수 있다. Mixamo 애니메이션 가져오기 Mixamo에는 다양한 애니메이션이 있고 여러 포맷으로 다운로드 또한 가능하다. 원하는 애니메이션을 선택하고 fbx 파일로 다운받자. 언리얼 엔진 에디터의 Content Drawer에서 i..
[UE5] 클라이언트-서버 모델언리얼 엔진에서 싱글 플레이 게임에 대해서만 학습하다 보니 멀티플레이 게임, 네트워크에 대해 알고 싶어져 멀티플레이에 대해 학습을 시작하였다. 이번 포스팅에서는 언리얼 엔진의 멀티플dlaiml.tistory.com 지난 포스팅에서 LAN으로 간단하게 멀티 플레이 환경을 구현해 보았다. 하지만 실제로 다른 지역의 사람들과 게임을 같이하려면 신경 쓸 것들이 매우 많아진다. (세션관리, 매치메이킹, 보안, 여러 플랫폼 지원 등) Steam, XBox Live, Epic Online Services, PlayStation Network 등 온라인 서비스를 지원하는 다양한 플랫폼이 있는데, 각자 지원하는 기능이 다르고 명칭도 다르다. 온라인 서브시스템은 기능들에 공통적으로 접근할 ..
객체지향에서 종속성 관리는 매우 중요하다. 다른 클래스의 method를 사용하기 위해 여러 종속성을 주입하다 보면 결국 클래스의 본 목적과 달리 다른 클래스가 없이는 사용할 수 없는 클래스가 되어버린다. SOLID 원칙 중 추상화에 의존해야 한다는 Dependency Inversion Principal을 언리얼 엔진의 UInterface를 사용하여 만족시키려 한다. 앞으로 다른 프로젝트에서도 활용가능하도록 하고 싶은 UI 클래스에서 리슨 서버를 호스팅 하는 Host 버튼, 리슨 서버에 입장하는 Join 버튼을 만들게 되었다. Host 버튼을 누르면 UWorld의 ServerTravel을 실행하고 Join을 누르면 입력한 IP 주소로 ClientTravel을 사용하여 서버에 참가한다. 특정 Level에 ..
언리얼 엔진 C++ 코드를 학습하면서 공개된 소스코드와 엔진 코드를 보면서 언리얼 엔진만의 코딩 컨벤션이 꽤 강하게 자리 잡고 있다는 느낌이 들었다. 인공지능 개발 직군으로 서비스를 개발할 때는 한 달이 다르게 급변하는 신생 라이브러리를 주로 사용하였고 모두의 코딩 스타일은 파이썬의 원칙하에 제각각이었다. (구글, 메타, OpenAI의 논문 구현 코드 스타일이 연구자에 따라 매우 달랐음) 반면 역사가 오래된 언리얼 엔진은 비교적 코딩 표준, 디자인의 Best Practice가 있다는 느낌을 받았다. 간단한 코딩 표준 가이드는 공식 문서에 소개되어 있었고 프로젝트마다 코딩 스타일이 바뀌는 것은 좋지 않다고 생각해서 이참에 공식 문서를 따라 기본적인 코딩 스타일, 표준을 맞추기로 하였다. 현재 개발하고 있..
언리얼 엔진에서 싱글 플레이 게임에 대해서만 학습하다 보니 멀티플레이 게임, 네트워크에 대해 알고 싶어져 멀티플레이에 대해 학습을 시작하였다. 이번 포스팅에서는 언리얼 엔진의 멀티플레이어 원리를 간단하게 다루려한다. 언리얼 엔진의 멀티플레이어는 클라이언트-서버 모델을 기반으로 한다우선 클라이언트, 서버에 대해 이야기하기 전에 Input과 State에 대해 알아보자. Input & State최근 직접 WinAPI로 간단한 게임 제작을 하면서, State / Tick / Input의 개념을 언리얼 엔진을 학습할 때 보다 더 깊게 이해하게 되었다. 게임은 Tick 단위로 사용자에게 보이며 State는 그 사이 Input에 의해 업데이트된다는 것이다.Tick과 Tick 사이에는 사용자에게 노출되지 않는 엔진만의..
탱크 슈팅게임에서 전체적인 전투 현황을 생생하게 볼 수 있도록 경기장의 전광판처럼 실시간으로 씬을 보여주는 기능을 만들어보려 한다.이번 포스팅의 주제는 Scene Capture 2D라는 Actor 클래스를 사용해서 기능을 구현하기다. Level에 Scene Capture 2D 액터를 배치하면 카메라 모양의 액터가 배치된다. 인스턴스는 CaptureComponent2D 컴포넌트를 가지고 있다. Scene Capture 2D 액터가 보고 있는 화면을 Render Target Texture에 실시간으로 기록하고 이를 Material의 Texture로 설정한다.마지막으로 배치한 액터(큐브)의 Material을 앞서 만든 M_RealtimeCapture로 지정하여 큐브에 실시간으로 화면이 출력되도록로 실시간 카..
언리얼 엔진을 처음 공부할 때, 추가하고 싶은 기능을 구현하려면 어떤 클래스를 상속받아야 하는지 선택하는 것이 쉽지 않았다. 총 4622개의 Object를 제공하는데 각 Object에 어떤 기능이 있고 상속관계가 어떻게 되는지에 대해 아예 알지 못하였기 때문이다. 이번에 강의를 들으면서 만든 예제를 통해 간단한 게임을 만들 때 선택한 Object에 대해 설명하려 한다. 만들려는 게임에서 필요한 요소를 크게 그룹 지으면 다음과 같다. - 플레이어 탱크 / 적 타워- 포탄 투사체- 게임의 승리, 패배 조건 설정 BasePawn, Tank, Tower - PawnPlayerController가 Possess 할 수 있는 Actor인 Pawn이라는 클래스를 탱크, 타워를 구현할 클래스로 선택하였다.이전 게..
어렸을 때 즐겨하던 게임인 샌드박스 장르의 게임인 게리모드에는 물체를 잡고 돌릴 수 있는 physics gun이라는 장비가 있었다. physics gun의 기능 중에서 물체를 클릭하여 잡고 옮기는 기능 언리얼 엔진에서 구현해보자. 목표는 아래와 같은 사물을 마우스를 클릭하여 잡으면 플레이어 시점 앞으로 물체가 고정되고 놓았을 때 고정이 해제되면서 다시 물체에 물리법칙을 적용하는 것이다. Physics Handle ComponentUE Remark: Utility object for moving physics around Physics Handle Component는 물리가 적용되는 object를 이동시키기 위한 유틸리티 object이다.구현하고자 하는 기능에 꼭 필요한 Component로 Chara..
Actor Lifecycle언리얼 엔진에서 기능을 추가할 때, 어느 클래스에 해당 기능을 추가할 것인가, 해당 클래스의 어느 함수를 Override하고 그 함수의 호출 시점은 어떻게 되는가는 항상 고민하는 부분이다. 레벨에 배치할 수 있는 오브젝트인 Actor 클래스의 사전 정의된 함수의 호출, 목적에 대한 이해가 필요하면 이를 결정하는 것이 더 수월해질 것이라고 생각하여 이번 포스팅은 Actor의 Lifecycle에 대한 포스팅이다. 언리얼 엔진 공식문서의 Actor의 Lifecycle을 도식화한 사진이다.시작점이 Play in Editor, LoadMap(AddToWorld), SpawnActor, SpawnActorDeferred로 4개가 있다.Empty Level을 만들고 Actor를 상속한 ..
최근 진행하던 프로젝트에서 원활한 협업을 위해 버전관리의 필요성을 느껴 SVN을 사용하려다 Unreal Engine에서 제공하는 Blueprint diff 시각화기능이 있어 대신 Git을 사용하여 버전관리를 시작하였다. Prerequisite- 언리얼 엔진- Git - Github account- Github Desktop (CLI로 Git 사용이 익숙지 않다면 추천) Git revision control on UE5언리얼 엔진에서 Revision Control 기능을 사용하여 Git을 Init할 경우 gitignore에 기본적으로 Saved, DerivedDataCache, Intermediate 등 빌드를 위한 파일이나 Save 파일이 추가되어 Git 관리에서 제외된다. 이를 제외하고도 마켓플레이스..
NPC의 행동을 담당하는 AI는 언리얼엔진에서 Behavior Tree를 사용하여 구현할 수 있다.코드 예시는 아래 공식가이드에 자세하기 잘 나와있으므로 Behavior Tree의 각 요소에 대해 알아보겠다. Behavior Tree In Unreal Engine Quick Start Guide | Unreal Engine 5.4 Documentation | Epic Developer CommunityThis guide shows how to use Behaviour Trees to set up an AI character that will patrol or chase a player.dev.epicgames.com 예시로 든 Behavior Tree를 실행하기 위해 추가로 세팅이 필요한 클래스들이 ..
최근 팀원과 프로젝트를 진행하던 중, 기능과 UI가 추가되면서 점점 주요 기능을 담당하는 클래스가 다른 클래스의 참조를 요구하는 경우가 늘어나고 다른 클래스의 로직 또한 전부 주요 클래스에 구현해 버리는 문제가 생겼다. 이를 해결하기 위한 디자인 패턴을 찾던 중 Delegate에 대해 알아보게 되어 이에 대해 포스팅 하려한다. Delegate?Delegate 패턴은 기능을 위임하는 Delegate를 지정하는 디자인 패턴으로 두 클래스 간 의존성을 줄이고, 기능 추가에 따른 코드 변경이 적어지며, 언리얼엔진에서는 이벤트 기반의 구조 설계까지 가능하게 하는 디자인 패턴이다. 언리얼 엔진에서의 Delegate 사용법을 예시, 코드와 함께 알아보겠다. 예시) 캐릭터의 적에게 타격받아 체력이 0이 되면 캐릭터가 ..
공격 판정을 위한 Collision 설정을 위해 Capsule 모양의 Component를 Rotation Matrix를 사용하여 Rotate 시킬 일이 있어 이번에는 Rotation Matrix에 대해 더 자세히 알아보려 한다 우선 언리얼엔진에서 좌표는 앞이 X, 오른쪽이 Y, 위가 Z로 설정되어 있다. (음의 방향은 각각 뒤, 왼쪽, 아래) 구현할 예시는 아래와 같은 캡슐 모양을 Pawn이 향하는 방향으로 눕혀 공격 판정을 위한 Collision을 만드는 것이다. 이를 구현하기 위한 코드 중 Rotation을 담당하는 부분은 아래와 같다.FVector TraceVec = GetActorForwardVector() * AttackRange;FQuat CapsuleRot = FRotationMatrix:..
*언리얼 엔진 학습 1주 차 포스팅으로 틀린 내용이 있을 수 있습니다 언리얼 엔진의 Character 클래스는 Material, Skeleton등을 멤버로 가지고 있는 Skeletal Mesh Component를 사용하여 애니메이션, 외형 등을 표현할 수 있다. 특정 Skeleton에서 사용하던 포즈, 애니메이션을 다른 캐릭터에 적용하면 아래와 같이 문제가 발생한다.캐릭터마다 골격이 달라서 그대로 사용이 불가능하다는 문제가 있다. 특정 캐릭터에서 사용하던 애니메이션을 다른 캐릭터에서도 사용가능 하도록 하는것을 Animation Retargeting이라고 한다. Animation Retargeting is the process of repurposing existing animations for use..
언리얼 엔진 4에서 사용하던 Axis, Action Mapping은 UE5에서 deprecated로대신 Enhanced Input을 사용하는 것을 권장하고 있다. Enhanced Input의 주요 컨셉은 아래와 같다. Input Action: 프로젝트 코드와 Enhanced Input system을 연결해 주는 역할을 하며 캐릭터가 취할 수 있는 점프, 이동, 문 열기 등 Action을 말한다 Input Mapping Contexts: 유저의 입력과 Actions을 매핑하는 역할을 하며 동적으로 추가, 제거가 가능하며 priority 또한 설정이 가능하다. 동일한 키를 입력하였을 때, 문을 열거나, 인벤토리의 아이템을 선택하는 기능을 구현하기 위해서 이전에는 현재의 상태를 정의하는 Boolean 변수를 ..