애니메이션 작업을 하기 앞서 한가지 고민이 있었습니다.

캐릭터가 정상적으로 움직이게 하는 것을 먼저 할 것인가?

아니면 애니메이션을 먼저 만들것인가 입니다.

 

캐릭터를 움직이게 만드는 것은 코드를 다 까먹어서 하기 힘들지만 해놓으면 테스트가 용이했습니다.

반대로 애니메이션을 만드는 것은 땅 짚고 헤엄치는 식으로 가능하지만 마지막에 테스트를 위해 해야 하는 코드 과정이 더 길고 복잡합니다.

 

하지만 결국 후자를 선택했습니다.

그 이유는 2가지입니다.

첫번째로, 기본 모션을 만들고 작업해도 결국 추가 작업이 필요할 것 같다는 점.

두번째로, 제가 생각보다 의지가 약해 어려운 작업을 먼저 하다보면 안하게 된다는 것입니다.

 

그래서 오늘은 Animation Sequence를 Montage로 엮어보았습니다.

작업을 전부 완료한 것은 아니고, 간단한 것들부터 진행해 보았는데 생각보다 까다로웠습니다.

 

일단 제 기억상 몽타주를 여러개 쓰고 이걸 스위치로 가르는 것보다 Montage 하나를 공유하는 것이 더 낫다고 기억합니다.

그런데 동일한 카테고리의 Animation을 하나의 Montage로 엮다 보니 Section도 맞지 않고, 끝나는 시간도 맞지가 않았습니다.

 

현재는 이전에 작성한 글을 통해 몽타주를 상속 처리해서 좀 쪼개는 방법을 구상하고 있습니다.

https://redchiken.tistory.com/276

 

UE4 Montage와 Animation의 차이

Animation은 오직 하나의 애니메이션만 담을 수 있다면, Montage는 여러 Animation을 하나의 애셋으로 합칠 수도 있고, Montage 앞에 선행 Animation을 붙일 수 있다. 또한 그 안에서 Notify를 이용해 사운드, 파

redchiken.tistory.com

예를 들어, 걷는 Montage가 있다면 그 구조는 동일하더라도 세부적인 부분에서 실제 애니메이션이 갈라져서 다른 Child Montage를 호출할 수 있도록 하는 것입니다.

 

솔직히 이게 좋은 방안인지 잘 모르겠습니다.

아직 몽타주만 작업하는 단계이기도 하니까요.

그래도 지금 작성하면서 생각해보니 이 악물고 몽타주 줄이는 것보다 구조를 개선해서 다른 사람들이 알아보기 쉽게 명확히 하는 것이 미래의 나와의 협업 측면에서 더 나은 방안일 것 같습니다.

 

이제 이렇게 되면 남은 궁금증은 하나입니다.

Section을 쓰지 않는 동일한 카테고리의 단일 애니메이션을 어떻게 구현하느냐 입니다.

예전의 저 같으면 FSM에서 Switch로 다 때려박았을 겁니다.

하지만 몽타주에서 같은 카테고리를 공유한다고 하니 하나의 몽타주에 Slot을 나눠서 넣어서 구현하는 것이 떠오릅니다.

근데 사망 애니메이션 길이기 다르다 보니 이게 실제로 어떻게 처리될지 감이 안잡히더라구요.

 

일단 Unreal Forum에 질문글을 올려두긴 했습니다.

https://forums.unrealengine.com/t/questions-about-performance-of-montage/499673

 

Questions about Performance of Montage

I have some Question about Animation and Montage In below tutorial, Montage can contain Animations of Different mode. Editing an Animation Montage | Unreal Engine Documentation For Example, One Montage can contain walk slot and crouch walk slot. And I make

forums.unrealengine.com

미리 답을 알면 좋겠지만 그렇지 않는다면 코드 작업을 하면서 다시 한번 대격변이 일어나겠죠.

 

입사 전 실력으로도 좀 빠듯한 작업인데 이 파트는 그때보다 실력이 떨어져서 여러모로 힘에 부칩니다.

'개발일지 > 코어 플레이 개발' 카테고리의 다른 글

22년 07월 16일 개발일지  (0) 2022.07.16
22년 07월 15일 개발일지  (0) 2022.07.15
22년 07월 10일 개발일지  (0) 2022.07.10
22년 02월 19일 개발일지  (0) 2022.02.19
공부 다시 시작  (0) 2022.02.19

계기는 별거 없습니다.

제가 하고 싶은 일은 게임 컨텐츠 개발인데 현재는 코어 컨텐츠와는 조금 거리가 있는 작업을 하고 있기 때문입니다.

지금 하는 일이 불만족스럽거나 배움이 없는 것은 아닙니다.

하지만 하고 싶은 일을 하려면 경력에 걸맞는 실력을 갖추어야 하는데, 일 하면서 배우기는 힘드니 따로 하고자 합니다.

 

1차 목표는 Animation입니다.

현재 무료로 제공된 애니메이션들을 캐릭터가 모두 자연스럽게 표현 가능하도록 작업을 할 예정입니다.

이 과정에서 IK(Inverse Kinematic)나 Root Motion 등의 고급 기법(비교적)을 최대한 공부해서 적용을 하고자 합니다.

 

2차 목표는 상호작용입니다.

사다리 타기, 기어 가기, 기어 오르기 등 특정 오브젝트가 있어야 가능한 모션.

혹은 스펠, 공격 등의 행위들을 자연스럽게 구현하고자 합니다.

 

3차 목표는 기믹입니다.

제가 목표로 하는 게임 중에 데이터를 통해 하나의 오브젝트 군이 다양한 동작을 하도록 하는 것이 있습니다.

예를 들어, 오브젝트 A, B, C, D가 레벨에 있다고 가정을 합니다.

이 때 어떤 상황에서는 A, B, C가 하나의 기믹으로, 어느 경우에는 C, D, B가 하나의 기믹으로 동작하도록 하고 싶습니다.

이 기능의 궁극적인 목표는 최소한의 리소스로 최대한의 컨텐츠를 데이터테이블 수정을 통해 제공하는 것.

그리고 이런 맵 상의 기믹을 데이터테이블로 모듈화 하는 것입니다.

 

4차 목표는 AI입니다.

간단한 몬스터를 만들고 AI를 부여하여 소규모 전투를 구연하고자 합니다.

사실상 4차까지 오면 수 년은 걸릴텐데, 실력이 된다면 조금 복잡한 몬스터 AI를 보여하고 싶습니다.

 

5차 목표는 레벨 생성입니다.

매우 큰 레벨을 생성하고, 그 안에 랜덤 오브젝트 배치를 하면서 성능을 뽑아내고 싶습니다.

 

마지막 6차 목표는 데디케이트서버 입니다.

실제 AWS에서 세션을 올려 데디케이트 서버에 멀티플레이를 간략하게 제공하는 것.

그리고 서버에는 로그 파일이 남도록 하는 것이 목표입니다.

 

본 게시판에는 위 목표를 이루면서 발생하는 개발일지를 작성해볼 생각입니다.

예전과 달리 직장에 다니고 있어 자주 못할 수 있고, 중간에 엎어지기도 쉽습니다.

하지만 목표를 명확히 해서 어떻게든 실력을 향상시키고자 합니다.

'개발일지 > 코어 플레이 개발' 카테고리의 다른 글

22년 07월 16일 개발일지  (0) 2022.07.16
22년 07월 15일 개발일지  (0) 2022.07.15
22년 07월 10일 개발일지  (0) 2022.07.10
22년 02월 19일 개발일지  (0) 2022.02.19
22년 02월 19일 개발일지  (0) 2022.02.19

2년차에 들어서면서 경력에 비해 조금 더 다양한 경험을 할 기회를 가졌고 이를 기반으로 학생 때 놓쳤던 부분을 서술해봅니다.

 

1) 게임 개발은 플레이 개발만 있는 것이 아닙니다.

게임 개발에 입문 하는 사람들은 대부분 게임 플레이 하던 것을 만들고 싶어 입문을 합니다.

그리고 실제로 플레이 관련된 부분의 경험을 쌓아올립니다.

하지만 실제로 입사를 하게 되면 그런 개발을 바로 하게 되기란 쉽지가 않습니다.

게다가 게임에서 실제 플레이 못지 않게 중요한 부분이 게임 외 컨텐츠(랭킹, 결제 등)들이고,

이런 부분의 경험은 평소에 해오던 게임 개발보다는 Mobile/Web Application에 더 가깝습니다.

그리고 이런 게임 외 컨텐츠는 데디케이트서버와의 통신이 아닌 별도의 서버와 HTTP로 통신을 하는 추세입니다.

즉, 게임 개발이라고 보통 알고 있는 부분은 전체 개발 분야의 한가지이고,

전체적인 부분에서는 다른 소프트웨어 개발과 크게 다를 바가 없다는 것입니다.

 

2) 성능 최적화가 습관화 되어 있으면 좋습니다.

클린 코드, 알고리즘, 자료구조.

학생 때 공부를 좀 하다 보면 한번씩 접한 거고 한번 씩 빠져볼법한 주제입니다.

하지만 구조적인 부분을 고민하다가 놓치는 부분이 있습니다.

언어나 엔진의 구조에서 발생하는 성능 차이. 혹은 네트워크 환경 상 발생하는 문제입니다.

사실 경험상 후자가 전자보다 더 뼈아프게 다가옵니다.

전자는 여러 프로젝트에서 경험을 했지만, 후자는 학교에서 신경쓰면서 개발하기가 쉽지가 않거든요.

그럼에도 이런 부분에 숙련이 된다면 좀 더 나은 평가를 받고, 개발의 질이 한 단계 상승한다고 생각합니다.

최종적으로, 언어 자체의 깊은 이해도와 함께 프로파일링 경험을 가지시는 것을 추천드리는 바 입니다.

 

3) 네트워크와 DB를 무시하지 마세요.

게임 개발, 특히 게임 플레이 개발을 하는 사람들은 보통 엔진 경험 다음으로 그래픽스로 빠지는 경향이 있습니다.

물론 그래픽스도 중요합니다. 하지만 현실적으로 그래픽스 지식보다 당장 직면하게 되는 것은 네트워크와 DB입니다.

여기서는 설명이 필요하겠는데요.

웹 프로그래밍이나 앱 프로그래밍은 보통 DB와 앱이 직접 통신을 합니다.

그래서 별도의 DB라는 개념이 거의 없습니다.

하지만 게임 개발은 바이너리 파일로 DB처럼 쓰이는 테이블들이 꽤 있습니다.

심지어 개발자가 직접 개발을 하지 않고 테이블만 갱신을 하면 패치 없이 컨텐츠가 바뀌기 때문에 권장되죠.

그렇기에 클라이언트 개발을 하면서 항상 DB에서 고민하던 사항들을 같이 고민을 해야 합니다.

네트워크도 마찬가지입니다.

데디케이트 서버의 코드는 일반 게임 코드와 분리가 되어 있지 않습니다.

함수 단위에서 RPC를 구분지어서 작성을 하면 각각의 클라이언트에서 서버와 RPC 통신을 하는 것입니다.

때문에 네트워크 지식이 필히 요구됩니다.

 

적고 보니 당연한 얘기들만 있네요.

하지만 전 놓쳤던 부분들이었습니다.

지금 따라 가려고 하고 있고, 늘 그렇듯 하려고 하면 할 수 있게 되는 부분입니다.

그래도 미리 해놓는다면 더 높은 위치에서 시작할 수 있지 않을까 하여 공유드립니다.

'일기장' 카테고리의 다른 글

2021년 목표  (0) 2021.01.01
입사 후 근황 및 계획  (0) 2020.10.06
미끌  (0) 2020.08.14
분야 별로 요구하는 포트폴리오 포맷이 다른가봅니다.  (0) 2020.08.11
갑자기 면접 제의가 쏟아지네요  (0) 2020.08.06

근래에 동료로부터 들은 내용이라 사실 확인을 하다가 확인한 사항입니다.

처음에는 별 생각 없었는데 좀 더 생각해보니 제가 C++를 공부했을 때
Lambda의 사용 방식이나 Capture의 기능 동작은 설명이 되어 있는데 
내부적으로 어떻게 동작하는지, 혹인 이런 주의 사항은 보지 못했던 것 같더군요.

 

요는 Lambda의 Capture를 사용하면 어떻게 값을 받아오느냐 입니다.

이를 제대로 이해하기 위해서는 Lambda가 Functor와 비교해 어떻게 구성되었느냐를 알아야 합니다.

 

결론부터 얘기하면 Capture가 없는 Lambda나

Call-by-Value로 Capture를 쓰는 Lambda는 일반 Functor와 거의 동일하게 구성됩니다.

 

하지만 Call-by-Reference로 Capture를 쓰면 구조 차이가 발생합니다.

첫번째로, Reference 된 Parameter가 Pointer로 참조가 됩니다.

여기서 이 글의 가장 중요한 전달사항이 나옵니다.

Lambda의 Capture는 Call-by-Reference더라도 Pointer이기 때문에 Pointer Dangling이 발생할 수 있습니다.

이는 Lambda가 비동기적으로 생성되는 경우,

즉 네트워크나 쓰레드와 사용하는 경우에 Invalid Argument를 발생할 수 있습니다.

 

두번째로, Functor는 Constructor가 외부에 별도로 존재를 하는 반면, 

Lambda의 Constructor는 그 내부에 존재를 하고있습니다.
즉, Constructor에서 발생하는 복사 작업이 요구되지 않아 일반 Functor보다 조금 더 가볍습니다. 아주 조금요.

 

이에 대해 자세한 설명은 원문을 본 블로그를 첨부하겠습니다.

어셈블리까지 분석을 해서 비교를 해주고 있기에 직접 포스트를 읽으시면 더 명확히 이해가 갈겁니다.

 

원본 포스트 출처 - https://web.mst.edu/~nmjxv3/articles/lambdas.html

 

C++ Lambdas Under The Hood

C++ Lambdas Under The Hood Introduction C++11 introduced lambdas, which provide a syntactically lightweight way to define functions on-the-fly. They can also capture (or close over) variables from the surrounding scope, either by value or by reference. In

web.mst.edu

간단하게 Twitch 로그인을 구현하기 위해 이것저것 찾아보았습니다.

처음에는 API를 다운받는 줄 알았는데 알고 보니까 Http Request를 보내면 되는 것 같더군요.

정확히는 Rest겠지만 문제 없을 것 같습니다.

이에 대해 SDK나 API를 검색해보다가 Unreal에서 지원을 하는 것을 확인했습니다.

 

우선 만들어볼 기능은 다음과 같습니다.

  • 버튼 클릭 시 Twitch 로그인 창 출력
  • 로그인 시 받아온 정보를 로그로 출력

이게 되면 그 뒤에는 스펙을 좀 더 명확히 하려 합니다.

 

욕심으로는 PC와 모바일로 분리를 하고 싶습니다.

하지만 생각해보니 모바일에서 되던 것을 굳이 PC에서 막아야 할 이유가 없었습니다.

확장이 되면 확장이 되었지 굳이 분리하지는 않는거죠.

그런데 이게 허가가 되면 모바일에서도 PC 컨텐츠를 제공해도 차이가 없는 것 같습니다.

 

결국 거창한 구조를 갈구했지만 현실보다 더 뒤떨어진 구상이었던 것 같습니다.

물론 더 큰 규모의 PC 게임에서는 의미가 있는 시도이긴 합니다.

공부라는 의미에서는 효율을 떠나서 해보는게 중요하기도 하죠.

 

문제는 어떻게 할지 결정을 못했다는 것입니다.

이래저래 고민이 됩니다만 우선은 Twitch에서의 로그인 창을 출력한 뒤 고민해보려 합니다.

약간 방향성도 미정인 것 같고...

플랫폼도 미정인 것 같고...

 

일단 확실히 해야 할건 꾸준히 할 것. 그리고 무리하지 않을 것. 이 두가지입니다.

회사를 다니면서 아직 적응 중인데 뭔가 다른 것을 하고 싶어서 개인 프로젝트를 진행하려 합니다.

 

목적

  • 언리얼 엔진의 프로젝트 구조를 이해하고 이를 직접 제작 할 수 있는 경험과 지식 터득
  • 데디케이트 서버 프로그래밍 경험
  • 외부 API를 직접 적용해보는 경험
  • 랜드스케이프 맵을 제작해보는 경험
  • 액션 어드벤쳐 게임 시스템을 제작해보는 경험
  • SNG 시스템을 제작해보는 경험

 

목표

  • 데디케이트 서버로 개발
  • 트위치 API로 로그인
  • 게임 서비스를 크게 두가지로 나뉘어서 제공. (액션 어드벤처 / SNG 및 전함 게임)

 

적고 보니까 규모가 크네요.

최종 목표는 게임 컨텐츠 개발을 밀도있게 하는 것이지만, 

결국 이것들이 되려면 로비나 접속 시스템을 우선적으로 해야 될 것 같습니다.

 

순서에 맞춰서 다시 적어보자면

Sorted 목표

트위치 API로 로그인 (~3월)

  • 최초 접속 시 메인 씬에 로그인 버튼 있음
    • 버튼 클릭 시 Twitch 계정 로그인 UI 출력되고 로그인 가능
  • 최초 접속이 아닐 시에는 바로 메인 씬으로 넘어감.
  • 접속한 플랫폼의 종류에 메인 씬에서 출력되는 버튼이 달라짐.

데디케이트 서버 개발 (~9월)

  • 메인 씬에서 UI 및 제공 기능 구상
  • 씬에서 버튼 클릭 시 씬 이동
  • 데디케이트 서버를 만들고 서버에서 세션 미리 생성함.
  • 매칭 방식을 구상하고 이를 구현 함.
  • 매칭이 되면 게임 씬을 넘어가면서 

게임 서비스 개발 (~ 21년 12월)

  • 추후 기능 지정.

대략 이렇게 될 것 같습니다.

굉장히 널럴하게 일정을 잡았지만 주말에만 잠깐씩 하는걸 생각하면 어떻게 될지 모르겠습니다.

가능하면 데디케이트 서버 개발까지 빠르고 간단하게 끝내고, 게임 개발에 시간과 노력을 최대한 투자해보겠습니다.

'폐기된 게시판 > 개인 프로젝트' 카테고리의 다른 글

21.02.28 개발일지  (0) 2021.02.28

작년? 제작년? 생일 선물로 받았고, 몇번 하다가 개인사정으로 못하고 있던 게임인 VA-11 HALL-A Cyberpunk.

오늘 10여시간을 달려서 엔딩을 보았습니다.

 

사실 게임 플레이 자체는 간단했습니다. 지루하다고 느껴질 정도로 말이죠.

적절한 술을 만들어서 판매하고 스토리를 보는 게임인데, 이것 말고는 아무것도 없습니다.

 

하지만 조금은 부족하더라도 인물들과의 대화가 인상이 깊어 게임에 깊이가 느껴졌습니다.

실제로 저런 대화가, 저런 상황이 발생하지 않을 것을 알고 있으면서, 

자주 봐왔고, 그 분위기가 익숙해서 그립기까지 합니다.

 

코로나로 인해 재택만 한지 한달이 넘어가는 지금,

사람과의 만남과 대화가 없어지면서 이런 것에서 공감이 더 크게 된 것 같습니다.

 

엔딩을 보는 것도 2회만 플레이 하면 되고, 빠르게 플레이하면 8시간 정도면 가능할 정도라 만족스러웠습니다.

일찍 썼으면 좋았겠지만 까먹고 있다가 지금에서야 작성하는 올해 목표

 

  1. 내년 1월 1일까지 25kg 감량
    1. 하루 2500Kcal 미만 섭취
    2. 주중 운동 5개, 주말 2개씩 꾸준히 운동하기
    3. 과자, 아이스크림 하루에 300kcal 미만 섭취, 일주일에 4번 미만 섭취
    4. 아침은 시리얼 2인분과 삶은 계란 1개 섭취
  2. 개인 프로젝트 1개 시작해서 결과물 뽑아내기
  3. 회사 내에서 다른 개발자들과 비슷한 수준까지 실력 끌어올리기
  4. 게임 클리어
    1. 발할라
    2. 두근두근 문예부
    3. 세븐나이츠(스위치)
    4. cypher
    5. 도넛 카운티
    6. 다키스트 던전
    7. 니어 오토마타
    8. 사이버펑크 2077 - 히든 엔딩
    9. 썸썸편의점
    10. 로보토미 코퍼레이션
    11. 사이퍼즈
    12. 죽어버린 별의 넋두리
  5. More Effective C++ 완독
  6. 적금 제외 1500만원 저축

 

사놓고 언제 해야하나 고민고민 하다가 어제서부터 플레이하여 오늘에서야 모든 엔딩을 다 보았습니다.

처음 출시되고 방송에서 볼 때는 이런저런 얘기와 생각이 많았지만,
거품이라 할만한 것들이 다 빠지고 한참 후에 하니까 좀 더 게임을 직시할 수 있었습니다.

 

일단 비주얼 노벨류 답게 엔딩이 여러개더라도 분기가 그리 많지가 않은 점이 매우 좋았습니다.

분기가 일찍이서부터 있으면 플레이타임이 늘어났겠지만, 

거의 마지막에서만 선택지에 따라 갈라져서 속성으로 즐길 수 있었습니다.

 

그리고 비주얼(일러스트)이 잘 뽑힌 것도 게임 만족도를 높히는 데에 크게 기여를 했습니다.

비주얼 노벨은 스토리, 일러가 전부라 생각합니다.

스토리는 개인적으로 크게 거슬리거나 하는 부분이 없었고,

일러스트가 수준급이라 이정도면 장르 중 수작으로 봐도 되지 않을까 싶습니다.

 

하지만 반대로 말하면 상호작용이 적고 난이도가 낮아서 게임 텐션이 상당히 루즈합니다.

저 또한 플레이 중 졸기도 했습니다.

그래서 지루한 것을 싫어하는 사람들은 잘 안 맞을 것 같습니다.

게임을 하면 이것저것 다 맛보되, 여러번 하지 않고 한두번만에 중요한것만 다 맛보면서 즐기는 편입니다.

사이버펑크도 그렇게 즐겼고, 차량 구매를 제외한 모든 퀘스트를 해결하면서 1회차를 끝냈습니다.

 

일단 게임 후기를 적어보자면... 디비전1을 출시 직후에 했다면 이런 느낌이었을까? 싶었습니다.

디비전1... 오픈월드에 스토리 라인 따라 즐기기 좋은데 잔버그 때문에 사람 신경을 긁는 게임이었는데

사이버펑크가 딱 그렇습니다.

좀 더 이것저것 섞어보자면 사이버펑크 세계관에서 디비전을 하는데 약간 다잉라이트 스멜도 나고...

아무튼 완성도가 떨어진다는 점에는 이견이 없습니다.

 

또 다른 아쉬운 점은 기획의 부실함입니다.

예를 들어,

경찰이 2블록만 이탈해서 시야에서 사라지면 쫓아오지 않습니다.

4성까지 되고 경찰을 다 죽이면 더이상 젠이 되지도 않습니다.

도로를 점거하면 차량이 이동을 계속하지 않습니다.

음식에 대한 접근성이 좋지 않고 버프가 미비하여 존재 의의가 없습니다.

이 외에 뭔가의 흔적기관들이 계속 보이는게 참 아쉬운 마음을 키웁니다.

 

그럼에도 사운드랑 스토리 몰입은 준수했습니다.

그리고 레이트레이싱으로 게임을 하면서 해볼맛이 난 게임이기도 하구요.

이정도 의의가 전부라 생각합니다.

 

지금 당장 급하게 할 필요는 없습니다.

솔직히 1년은 있어야 할만해지지 않을까 싶습니다.

그러니 그래픽카드도, 모니터도, 이 게임도 잠시 잊어주십시오.

찜목록에 넣었다가 한 30% 이상 할인 할 때 사서 맛보는것도 나쁘지 않을 것 같습니다.

 

아 그리고 엔딩을 수집하고 싶으시다면 플레이 하기 전에 몇가지 필수사항은 익히시기 바랍니다.

엔딩에 영향을 받는 선택지가 몇 있기 때문에 여러번 플레이 하고 싶지 않으시다면 미리 준비해야 할겁니다.

+ Recent posts