본문 바로가기
Project

학교 팀 프로젝트_자율 주제(AI를 활용한 게임)

by Srff5123 2024. 5. 27.
728x90

제작 기간(6개월)  -  (게임 개발파트 담당)

1. 프로젝트 목적 

인공지능이나 게임 개발 분야에 관심이 있어 AI와 Game을 합친 프로젝트를 진행하게 되었습니다.

 

(1) AI파트

주제 선정은 현재 Chat GPT나 DALLE2 등 생성모델이 인기가 있어 생성모델을 활용하는 방향으로 진행하였습니다.

게임에서 커스터마이징을 통해 원하는 얼굴을 얻기 위해서는 시간이 오래 걸리고 복잡한 과정을 거쳐 세심하게 만들기에 시간이 오래걸리고 또한 자신의 마음에 들지 않은 경우가 많습니다. 이러한 내용을 바탕으로 저희는 생성 모델을 통하여 커스터마이징 시간을 최소화 시키는 기능을 구현하여, 게임에 적용하기로 하였습니다.

 

또한 몇몇 게임사들은 사용자들의 소통을 편리하게 하기 위해 실시간 자동 번역을 도입하는 것을 추진하는 것으로보여

이번 프로젝트를 직접 도전하며 경험하는 것은 미래 경쟁력 강화에 도움이 될거라 생각하여 추가적으로 진행하였습니다.

 

(2)Game파트

위의 AI의 주제 선정에 맞추어 플레이어가 자신이 원하는 생성형 모델을 이용하여 게임을 하는것이기에 그것을 잘 체감할 수 있도록 생각을 하였고 고민을 한 끝에 생활 시뮬레이션으로 플레이어가 섬이라는 공간에서 생활을 하며 자신의 섬을 꾸며 나가고 사냥을 하거나 힐링을 하는 요소를 넣은 게임을 만들기로 하였고, 여러 고퀄리티의 무료 애셋들이 있고, 블루프린트라는 기능이 있는 Unreal Engine을 채택하여 활용하여 만들기로 하였습니다.

 

이러한 주제를 선정하게 된 이유는 게임 개발자를 이제 막 진로로 정하고 공부를 하고있는 학생으로 아직 기초적인 프로그래밍 공부를 하고 있는 단계이지만 이러한 게임을 만들며 다양한 컨텐츠들을 실력이 되는 만큼 계속 추가하며 여러가지를 시도하고 공부하기에 적합한 장르라고 파악을 하였고, 이러한 도전을 하며 직접 게임을 만드는 경험을 쌓으며 공부를 하고싶어 결정하게 되었습니다. 

 

2. 시스템 구성도

 

 

1. 초록

사용자 기반의 3D 캐릭터 생성 게임 제작을 위해 AI를 활용하여 2D 얼굴 이미지를 3D 모델링으로 변환하는 방법을 개발하였고, 이를 위해 PyTorch를 기반으로 한 AI 모델을 개발했다. 또한 Flask를 사용하여 서버를 구축하였으며, Unreal Engine 5를 게임 엔진으로 활용하였다.

 

사용자가 업로드한 2D 얼굴 이미지를 AI 모델을 통해 분석하고, 이미지의 특징과 구조를 파악하여 3D 모델로 변환하는 과정을 거친다. Flask를 활용한 서버는 사용자와의 상호작용을 담당하며, 사용자가 업로드한 이미지를 AI 모델에 전달하고 변환된 3D 모델을 반환한다. 또한 서버는 사용자의 요청에 따라 게임 엔진과의 연동을 담당하여 생성된 3D 캐릭터를 Unreal Engine 5에서 렌더링 하여 게임 환경에 통합한다.

 

2. 서론

3D 캐릭터 생성 게임은 사용자 들이게 개인 맞춤형 캐릭터 경험을 제공하는 인기 있는 게임 장르 중 하나로, 최근 인공지능 기술의 발전으로 인하며 사용자가 업로드한 2D 얼굴 이미지를 기반으로 3D 캐릭터를 생성하는 기능이 등장하였고, 이러한 기술은 게임 산업에 혁신적인 접근을 제공하며, 사용자의 참여도와 게임의 몰입감을 향상시킨다.

 

사용자 기반의 3D 캐릭터 생성 게임을 위해 AI를 활용하여 2D 얼굴 이미지를 3D모델로 변환하는 방법을 개발하는 것을 목표로 한다. 이를 위해 PyTorch를 기반으로 한 AI 모델을 개발하고 Js로 웹사이트를 개발하고, Flask를 사용하여 서버를 구축하였으며, Unreal Engine 5를 게임 엔진으로 선택하였다. 이러한 기술과 시스템의 융합은 사용자에게 개인화된 3D 캐릭터 경험을 제공하고, 커스터마이징 기능을 대체하여 게임 제작자들은 능률을 올릴 수 있다.

 

이러한 작품은 게임 제작 산업 뿐 아니라 가상 현실(VR), 캐릭터 커스터마이제이션, 영화 밑 애니메이션 등 다양한 분야에 적용될 수 있고, AI와 게임엔진의 융합은 게임 제작 프로세르를 효율적으로 개선하고, 새로운 컨텐츠 제작과 시각적 효과 개발에도 도움을 줄 수 있다.

 

3. 진행된 작품 내용

 

(1) Game파트

게임 개발 단계에서는 게임의 컨셉과 시나리오를 구성하고 그에 맞는 게임을 만들기 위해 UnrealEngine을 활용해 맵을 만들어 디자인 하였고, 사용자 기반으로 가져온 3D 캐릭터를 적용하였다.

 

 

 

게임의 컨셉은 섬이라는 공간에서의 힐링이 목표로 섬이라는 맵 지형을 만들어준다.

LandScape 기능을 활용을 하여 지형을 잡아주고 Market Place나 Quixel Bridge에서 맵에 맞는 여러 애셋들을 다운 받아와

블루프린트로 PCG기능을 이용하여 맵에 배치를 해주었다.

맵에 배치를 해주었다. 그 후 애셋들에 Collision을 설정하여 충돌 효과를 주고, 각각의 애셋들의 조화를 위하여 Merterial의 색감을 조절하여준다. 그 후 Body Ocean을 이용하여 바다를 만들고 Gestner Wave를 이용하여 파도와 물결을 만들어주었다.

 

 

게임 UI를 위하여 블루프린트 기능을 사용하여 만들어 화면 을 제작하였다.

AI만들어진 얼굴모델을 UrealEngine에서 적용하기 위하여 Blender를 통하여 Mixamo에서 몸통 스켈레톤 만을 가져와 생성된 얼굴과 결합을 해주고 Texture를 입혀준다.

캐릭터의 동작을 위해 Mixamo에서 애니메이션을 받아와 기본적인 동작과 입력값을 구현해주었다.

 

플레이어가 스폰된 무기를 주울수 있는 시스템을 위하여 PickUp System을 구현하였다.

위의 애셋에 Collision을 주어 충돌되는 위치에서 해당되는 키를 입력하게 되면 무기가 주워지게 되고,

캐릭터의 바디에 장착이 된다. 그 후 해당되는 번호를 이용하여 무기를 꺼내고 넣고 할 수 있고, 주운 무기에 따라 동작을 설정해주어 검일경우에는 공격모션이 곡갱이를 들고있을 경우에는 내려 찍는모션이 나오도록 설정하였다.

다음 몬스터가 맵에 몬스터가 스폰이 되고, AI Move To를 이용하여 랜덤적으로 이동을하고 플레이어를 발견시 따라가 공격을 하도록 하였다.

다음 캐릭터와 몬스터의 HP와 Damage를 관리하기 위하여 Stat Component를 만들어 제작하여 공격받았을 경우와 공격 하였을 경우 데미지의 송수신을 만들어주었다. 다만 제대로 동작을 시키지는 못하였다.

 

 

(2) AI 파트

먼저 사용자가 제공한 2D 얼굴 이미지를 3D 얼굴 모델링으로 변환하는 작업을 하는데 이부분 같은경우에는 PyTorch 기반의 MeInGame AI 모델을 통하여 얼굴 이미지를 분석하여 3D 모델로 변환하였다.

MeINGame 모델의 동작 과정

다음과 같이 입력 이미지에서 face texture data를 추출하고 이미지 depth를 측정하여 3D model을 생성한다. 마지막으로 두 정보를 통합하여 게임에 적용할 파일을 완성한다.

model architecture는 다음과 같이 3DMM을 통하여 이미지의 depth를 측정하고 3D mesh를 생성한다. shape transfer를 통해서 기존 mesh를 게임에 적용가능한 mesh로 변경하는 작업을 수행한다. 추출된 face texture data는 Encoder-Decoder 구조로 학습되며 이후에 Discrmiator를 통해서 3D game mesh와 합칠 실제와 같은 face texture를 생성한다.

GPU를 사용하여 모델을 훈련시킨다. 다음과 같이 colab A100 환경에서 CUDA를 사용하여 32 batch로 학습을 진행하였다.

 

AI모델의 정확도와 성능을 향상시키기 위해 최적화 작업을 수행한다. 서버 구축 단계에서는 Flask를 사용하여 사용자와의 상호작용을 처리하는 서버를 구현한다. 사용자는 2D 얼굴 이미지를 업로드 하고, 서버는 해당 이미지를 AI모델에 전달하여 3D 모델로 변환을 한다. 변환된 3D모델은 서버를 통하여 사용자에게 반환되어 게임 환경에 통합한다.

 

다음과 같이 Flask를 사용하여 서버를 실행시키고 localhost로 접속하게 되면

개발한 웹사이트에 접속할 수 있다. 웹사이트에서는 게임 소개와 file upload를 통해서 2D 이미지를 3D obj로 변경을 해준다.

업로드할 이미지를 제출하고 마치게 되면 이미지는 서버로 이동을 하고.

서버에 올려둔 생성 모델이 변환을 진행하고 이후 다운로드 페이지 에서 파일을 받는다.

 

웹사이트는 JS를 통해 개발하였고, HTML과 CSS를 사용하여 페이지의 구조와 개수 그리고 디자인을 만들었다.

각각의 웹페이지는 총 11장으로 구성되며, 홈페이지에 6장 파일 업로드  및 다운로드에 5장을 사용하여 구성했다.

 

4. 결과 및 후기

처음 게임을 만들어보며 익숙하지 않은 엔진을 다루고 그 안에 있는 수많은 기능을 익히는 과정에서 수많은 작동오류들이 있었다. 제작을 하면 할 수록 게임을 만든다는 것이 기획, 모델링, 디자인, 서버, 클라이언트 여러가지를 요구를 하였고, 더욱더 막막함을 주었다. 하지만 게임 만드는 것이 정말로 재미있었기에 포기하지않고 천천히 나아 가며 내가 집중할 수 있는 부분들에 있어 공부를 하였고, 같이 하는 팀원이 있어 더욱더 책임감을 가지고 같이 프로젝트를 진행을 하였다. 

 

비록  AI기반의 2D 이미지를 3D 변환하여 얼굴 모델링을 만드는 것이 얼굴만 나오기 때문에 이러한 점을 간과하게 되어 몸통의 스켈레톤을 따로 구하게 되었고 결합을 하여 동작을 구현하는 과정에서 많은 어려움을 겪었다. 다행히 결합에는 성공은 하여 동작은 만들었지만 결합을 하는 과정에서 경험과 실력에 대한 부족함으로 인해 많은 기간을 소모하게 되었고, 게임이라고 부르기 힘들정도로 많은 것을 이루지 못하였지만 동시에 이러한 도전으로 인하여 게임 개발에 대해 신경써야할 부분들에 대해서 많은 것을 알게 되었고, Unreal Engine에 대해 많은 기능과 함수에 대해 또한 어떤식으로 노드를 연결하면 좋을지에 대해 많은 경험을 시켜주었고, 또한 큰 성장을 도와주었다.

728x90