근래 오버워치리그를 해서 그걸 보느라 컨디션 난조여서 자주 개발을 못했습니다.

개발환경 설정을 위해 요즘 AWS의 EC2를 만져보고 있습니다.

 

근데 이쪽은 해보는데도 잘 모르겠네요.

뭔가 하나씩 놓치는 것 같은데 메뉴나 기능이 워낙 많아서 어디서 복구하거나 다시 설정 가능한지 파악이 안됩니다.

일단 기존에 돌리던 인스턴스도 없고 하니 기존에 있는 잡다한 설정을 모두 지우고, 다시 설정을 하면서 세팅하고자 합니다.

 

목표는 EC2에 Perforce 서버를 올리는 것입니다.

자세히 설명하자면 전체 프로젝트를 AWS CodeCommit에 레포지토리를 올려두고, Contents 폴더만 따로 Perforce로 관리하고자 합니다.

 

작업 과정을 가능하면 정리를 좀 해놓고, 나중에 다른 곳에서도 사용 할 수 있다면 같이 사용하고자 합니다.

원래 처음 목표는 Push를 하면 확장자에 따라 Git과 Perforce 사용이 서버에서 따로 체크 되도록 하고 싶었는데 이건 커맨드도 수정하고 해야 할 것이 많은 것 같아서 포기했습니다.

거진 한달만에 작성하게 되었습니다.

사실 14일인가에 작업 하고 15일에 작업일지 올리려고 했으나 그 날 카카오 서버 터져서 못 적고, 그 다음주에도 잠깐 작업 했는데 피곤해서 그냥 자버리고 이래저래 시간이 길게 지났습니다.

작업 자체는 왼쪽 발, 오른쪽 발 내민 상태의 애니메이션을 형성하고 이동에 따른 몽타주 연결만 하면 되었습니다만.

결과적으로 얘기하면 다시 만들고자 합니다.

 

다른건 아니고 최근에 회사에서 다른 팀 시니어 개발자 분을 만날 기회가 있었습니다.

개발 관련해서 이것저것 여쭈어보았고, 개인 프로젝트 쪽에 관심을 가져주셔서 관련해서 답답하거나 아리까리한 부분을 싹 다 여쭤보게 되었는데요.

그 중에 "UE5가 최신 엔진 버전인데 근 3년 안에 한국 개발사가 이걸로 게임 만들거나, 내가 그 팀에 갈 것 같지가 않아서 UE4로 개발했다. UE5로 하는게 맞는가?"라고 물어봤을 때 "당연히 UE5로 해야 한다."라고 답을 들었습니다.

이유는 최신 기술이기도 하고, 더 좋은 기능이 제가 개발하는 것보다 더 좋은 퀄리티로 구현되어 있어서 그것을 보고 공부하는 것이 더 미래지향적이기도 하고, 익숙함 때문에 UE4로 개발하는 거라면 업무와 공부를 분리해서 모르는 것을 찾아 가는 것이 도움이 된다는 것이 이유였습니다.

 

그래서 그날 귀가하고 고민을 하다가 UE5로 다시 개발하기로 마음먹었습니다.

이전에 개발한걸로 봤을 때 Pose를 기반으로 한 AimOffset과 이를 통한 디테일한 애니메이션 구현은 좀 힘들 것 같습니다.

하지만 막상 예시 프로젝트를 보고도 그걸 그대로 만든 것도 아니라서 더 좋을지 아닐지 모르겠네요.

 

일단 몇가지 추가 목표를 잡았습니다.

1. 3월까지 기본적인 코어 모션들을 개발하는 것이 목표입니다.

여기서 코어 모션은 이동, 회전, 점프, 앉기, 상호작용, 감정표현 등입니다.

 

2. AWS에서 제대로 된 프로젝트 구조를 형성하고자 합니다.

AWS에서 CodeCommit이란 것도 지원을 하긴 하는데 이걸 사용 할지 말지는 나중에 결정하고,

우선 SVN을 EC2에 올려서 애셋과 코드를 따로 관리하는 것을 목표로 하고자 합니다.

그리고 UE5 엔진 코드도 따로 레포지토리로 관리하고자 합니다.

 

현재 프로젝트를 만들고, 애니메이션 애셋을 정리해서 생성한 프로젝트로 마이그레이션까지 해놓은 상태입니다.

예전에는 이 기능을 잘 몰라서 Ctrl C+V를 사용하면서 고역이었는데 관련해서도 여쭈어보니 "샘플 프로젝트에서 정리한 뒤 마이그레이션 해야 한다." 말고는 답이 없더라구요.

IKRig를 하나하나 파주는게 고역이었지만 하루 정도 투자해서 문제 없이 Animation이 재생되는 것을 확인했습니다.

작업 중 Material Function이 비정상동작 하긴 했는데 이건 샘플 프로젝트에서의 설정 문제인 것 같아서 별도로 따로 만져줬습니다.

 

개인적으로 작업 하면서 이걸 다시 할까? 혹은 엎을까? 라는 생각이 많이 들었습니다.

그럼에도 꾸역꾸역 2주에 한번씩이라도 했던 것은 끝을 본 적이 없어서였는데 어느 이유에서든 다시 하게 되었고,

지금도 자신에게 한심함을 느끼고 있습니다.

 

하지만 어느정도 조언을 구한 후에 진행하는 것이라 결과를 내고 그걸 위안으로 삼아보고자 합니다.

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

22년 11월 12일 개발일지  (2) 2022.11.12
22년 11월 03일 개발일지  (0) 2022.11.03
22년 10월 02일 (비)개발일지  (0) 2022.10.02
22년 09월 27일 개발일지 2  (0) 2022.09.27
22년 09월 27일 개발일지  (0) 2022.09.27

개발 관련해서 작업 확인을 했는데 실제 작업은 없었으니 (비)개발일지

AdvancedLocomotionSystemV 프로젝트에서 Move Animation 동작 방식을 확인해보았습니다.

애니메이션은 방향에 맞춰서 AimOffset으로 재생을 하는데, 문제는 이게 경우에 따라 매우 많더군요.

왼발이 앞으로 갈 때. 오른발이 앞으로 갈 때에 대한 애니메이션이 다 다른데,

이걸 구현하려 하면 제자리 회전도 어느정도 구현을 해야 할 것 같습니다.

 

그래서 왼발 오른발에 맞춰서 AimOffset과 같이 개발을 하고, 이후 발에 따른 제자리 회전 보강 작업을 병행하고자 합니다.

근래 일도 많고 개인적으로 안 좋은 일이 있어서 작업을 잘 안하게 되는 것 같습니다.

그래도 이동 기능까지는 연말까지 개발을 하였으면 하네요.

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

22년 11월 03일 개발일지  (0) 2022.11.03
22년 10월 29일 비개발일지  (0) 2022.10.30
22년 09월 27일 개발일지 2  (0) 2022.09.27
22년 09월 27일 개발일지  (0) 2022.09.27
22년 9월 26일 개발일지  (0) 2022.09.26

재차 글을 쓴 이유는... 앞서 쓴 글에서 문제가 있던 부분과 더불어 부질없는 고민도 있었기 때문입니다.

우선 수정된 애니메이션부터 공유해보겠습니다.

메인 FSM
MainStateMachine::Idle State

일단 Layered Blend per Bone이 현재 상황에서는 의미가 없는 기능이었습니다.

Montage가 통째로 회전하더라도 머리의 방향은 AimOffset이 맞춰줄거기 때문에 굳이 Layered를 할 필요가 없었습니다.

그리고 Cache 포즈도 현재 Default 포즈를 따로 필요하지 않는 것 같아 일단은 제거해 두었습니다.

 

이전에 발생한 이슈는 2가지였는데요.

1. 왼쪽으로 고개 회전 시 무한이 회전하는 문제

이건 AimOffset 값 자체가 방향 정보도 포함하고 있어 Tick에서는 무조건 Delta만큼 차감하면 됐었는데, 이걸 다시 Type에 따라 반대로 연산하다 보니 왼쪽은 계속 가산되어서 그 방향으로 회전하게 되었습니다.

 

2. 고개가 90도로 맞게 회전하지 않는 문제

이건 Montage와 관련이 있었는데요.

초반 작업에서 Montage를 1배속으로 플레이 했을 때 90도가 아니라 225도를 회전하는 문제가 있었습니다.

AddControllerYawInput() 안에서 계수가 적용된 것으로 판단하여 MontagePlayRate를 조절하여 2.5배속 재생 되도록 UI에서 조절해 놓았는데, 이 때문에 몸이 90도 회전 하는 동안 -90도가 회전해야 할 머리가 -36도만 회전하였습니다.

그래서 UI에서 직접 입력하던 MontagePlayRate를 TurinInPlaceNotify.h에서 상수로 값을 잡아두고, Montage_Play()에서 MontagePlayRate를 입력하고, 동시에 Tick에서 연산되는 AimOffset에서도 MontagePlayRate를 곱하여 동일한 값만큼 몸과 고개가 움직이도록 조정했습니다.

 

이로서 제자리 회전에 대한 기능은 모두 완료가 되었습니다.

다음에는 방향키에 맞게 걷는 기능과, 회전 중 걷기 시 그 방향으로 걸어가는 기능을 구현할 예정입니다.

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

22년 10월 29일 비개발일지  (0) 2022.10.30
22년 10월 02일 (비)개발일지  (0) 2022.10.02
22년 09월 27일 개발일지  (0) 2022.09.27
22년 9월 26일 개발일지  (0) 2022.09.26
22년 09월 20일 개발일지  (0) 2022.09.20

캐릭터가 목을 90도 이상 돌렸을 때 시점과 고개 방향이 고정된 채로 나머지 몸체만 그 방향으로 회전하는 기능을 구현하였습니다.

 

 

작업하면서 몇가지 난항이 있었는데 이를 공유하고자 합니다.

 

1. 몸은 회전하는데 고개가 원래 방향으로 리셋되는 현상

고개를 우측으로 90도 돌리면 몸체만 돌아가야 하는데 고개도 정면으로 돌아간 상태에서 캐릭터가 통째로 회전하는 현상입니다.

그냥 애니메이션만 나오면 크게 체감이 안될 수 있지만, 고개와 시점을 고정하면 시점이 휙휙 돌아가 매우 어지러웠습니다.

이를 수정하기 위해 Blend 쪽을 만져보다가, 우연히 Aim Offset이 비정상 동작할 때 무언가 다르게 움직이는 점을 확인하고 Offset이 문제가 아닌가 하는 의문이 들었습니다.

그래서 TurnInPlace Montage가 시작하는 시점에 Offset을 수정하는게 아니라, 매 틱마다 조금씩 Offset을 줄여서 +90에서 +0 언저리가 되도록 수정을 해보았더니 원하는대로 구현이 되었습니다.

결국은 Montage를 먼저 적용하고 그 뒤에 Offset을 적용하다 보니 고개에 대한 방향은 Offset이 강제로 값을 바꿔주는 형태라 이 값을 Tick에서 조절해주면 자연스럽게 구현이 되는 것 같습니다.

 

2. Layered Blend per Bone 기능 사용 미숙

해당 기능이 있는 것은 알았지만 어떻게 사용하는지를 바로 깨닫지 못했습니다.

재밌게도 이걸 검색 했더네 두번째 링크가 제 블로그더군요.

네가 여기서 왜 나와?

https://redchiken.tistory.com/19

 

UE4 2개 이상의 Layered blend per bone

서류 몇개 더 떨어지고 정말 간만에 개발을 하다가 막혔던 부분 중 공유하면 좋을 것 같아서 적어봅니다. Animation에는 Layered blend per bone이라는 노드가 있습니다. 기존의 포즈에 지정한 포즈를 특

redchiken.tistory.com

그런데 이 블로그에서도 정확히 사용 방법을 알 수가 없었습니다.

결국 다시 블로그 등을 검색하여 옵션을 넣었으나, 같은 불상사를 방지하기 위해 하기 설명에 옵션 사진도 같이 첨부하였습니다.

 

마지막으로 현재 제가 작업해놓은 Animation 부분을 공유합니다.

전체 Animation

외부에 Cached Pose를 두개를 둔 이유는 원래 참고하고 만들던 것과 더불어 새로운 Cached Pose가 필요하기 때문입니다. 성능적인 부분은 찾아봐야겠지만, 만약 크게 문제가 안된다면 가능한 이런 식으로 외부에 Cached Pose를 만들어두고 나중에 이를 가져다 쓰는 형식으로 구현하는 방향으로 구상 중입니다.

 

MainStateMachine 내부의 Idle 상태

실제 Idle 상태에서의 BP부분입니다.

뒤에 Offset으로 각도 조정을 해줄거기 때문에 Bone은 root를 그냥 넣어주었습니다.

 

Idle 상태에서의 FSM

Idle FSM 내부입니다.

임시로 상태를 만들어 서있거나, 앉아있는 등의 경우에서 Idle일 때의 Animation을 반환합니다.

구조는 나중에 필요에 따라 바뀔 여지는 있을 것 같습니다.

 

우선 문서를 작성하면서 확인해보니 왼쪽으로 회전에서 발생하는 문제, 혹은 고개가 완벽하게 각도가 안 맞는 부분이 있어 이 부분을 나중에 조정을 하고, 이후 걷는 애니메이션을 구현해볼 생각입니다.

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

22년 10월 02일 (비)개발일지  (0) 2022.10.02
22년 09월 27일 개발일지 2  (0) 2022.09.27
22년 9월 26일 개발일지  (0) 2022.09.26
22년 09월 20일 개발일지  (0) 2022.09.20
22년 09월 17일 개발일지  (0) 2022.09.18

캐릭터가 90도 이상 회전하고 몸이 회전할 때 카메라 방향도 같이 움직이도록 수정했습니다.

다만 고개만 움직일 때 카메라가 안 움직이는게 어색하여 SpringArm을 머리에 붙여서 고개를 흔들면 같이 화면이 전환되도록 하고, Montage를 목 아래에서만 재생되도록 하여 고개를 고정하고 몸만 움직이게 해보고자 합니다.

 

생각보다 고된 작업인 것 같습니다.

그래도 작업 과정을 숙련하면 확실한 강점이 될 수는 있겠다 싶습니다.

특히 만들고 싶은 게임 중 캐릭터 위주의 게임도 있어서 이 기술은 포기하지 않고 꼭 잡고 가고 싶습니다.

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

22년 09월 27일 개발일지 2  (0) 2022.09.27
22년 09월 27일 개발일지  (0) 2022.09.27
22년 09월 20일 개발일지  (0) 2022.09.20
22년 09월 17일 개발일지  (0) 2022.09.18
22년 09월 16일 개발일지  (0) 2022.09.16

오늘은 캐릭터 회전 Montage를 작업했습니다.

결과적으로 완성은 못했지만, AimOffset을 돌리다가 Offset이 90도 이상 돌렸을 때 몸이 돌아가는 Montage가 호출되는 로직은 구현을 완료했습니다.

대략적으로 코드를 보기 좋게 수정도 했고, 다만 Tick에서 캐릭터가 실제로 회전하지는 않아서 이 부분을 수정중에 있습니다.

캐릭터가 회전한 후에는 다시 구조를 좀 더 좋게 수정을 하고, 하나의 커밋으로 뭉쳐서 Push할 예정입니다.

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

22년 09월 27일 개발일지  (0) 2022.09.27
22년 9월 26일 개발일지  (0) 2022.09.26
22년 09월 17일 개발일지  (0) 2022.09.18
22년 09월 16일 개발일지  (0) 2022.09.16
22년 09월 13일 개발일지  (0) 2022.09.13

캐릭터 회전 기능을 다음과 같이 구현해보았습니다.

  1. Character에서 좌우로 회전할 때 90도를 초과하면 TurnInPlaceState를 지정함.
  2. AnimInstance에서 TurnInPlaceState값이 지정되면 해당 몽타주를 실행
  3. Montage에 걸린 AnimNotify의 Begin에서 Character에 회전중이라는 트리거를 켜줌
  4. 트리거가 켜지면 좌우 회전에서 값을 적용하지 않고 무시함
  5. AnimNotify::Tick에서 회전값을 계산하여 캐릭터를 회전시킴
  6. AnimNotify::End에서 트리거를 꺼줌.

대략 이런 식으로 구현했고, 완벽히 동작하지 않고 버그가 있어 커밋은 보류하고 있습니다.

작업에 필요한 함수 중간중간에 로그를 찍어두어서 이를 참고해서 디버깅을 해 기능을 완성해보고자 합니다.

 

관련 작업에 필요한 새로운 Interface도 선언했습니다.

처음에는 기존의 CPPCharacterLocomotion에 모든 것을 넣을까 하다가, 특정 기능에는 특정 타입을 따로 사용하는 편이 좋다고 판단하여 Interface를 여러개가 상속되더라도 따로 분리를 하고자 합니다.

 

사설 Git 서버도 구축했고 Perforce를 찾아보니 gitignore처럼 P4Ignore 파일로 경로 무시가 가능한걸 보니 같이 쓰는건 문제가 없을 것 같습니다.

남은건 Perforce 레포지토리가 어떤 바이너리 파일을 생성하는지 여부를 확인하고 그런게 있다면 Perforce 안에 git을, 없다면 git 안에 Perforce를 사용하는 쪽으로 구상을 해보면 될 것 같습니다.

 

여기에 더불어 작업 좀 더 해보고 정 안되면 Visual Assistant을 사용해볼까 고민중입니다.

없으니까 많이 불편하더군요...

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

22년 9월 26일 개발일지  (0) 2022.09.26
22년 09월 20일 개발일지  (0) 2022.09.20
22년 09월 16일 개발일지  (0) 2022.09.16
22년 09월 13일 개발일지  (0) 2022.09.13
22년 09월 09일 개발일지  (0) 2022.09.09

개발하던 언리얼 프로젝트를 Github 사용 시 1년에 8만원씩 써야 해서 git만 사용하다가 너무 불편하여 대안을 찾던 중 "차라리 AWS에 사설 Github 서버 올리면 그게 더 싸지 않을까?" 싶어서 찾아보다가 CodeCommit이라고 아얘 서비스가 나와서 환경을 설정해보았습니다.

일단 졸업하고 AWS를 처음 쓰는거라 환경 설정 하는데 시간이 꽤 걸린 것 같습니다.

윈도우 환경인 점이 한 몫 하기도 했구요.

그리고 AWS 사설 주소로 Push를 보내는게 지금 사용하는 GUI(Git Kraken)에서는 지원되지 않더라구요.

그래서 강제로 CUI 환경으로 복귀하게 되었습니다.

 

그래도 아직 자주 쓰지는 않았지만 장점도 몇 있었습니다.

일단 가격이 매우 쌌습니다. 여러 애셋을 같이 올려보았는데 한 8GB 올렸음에도 가격 정책에서 별로 잡히지가 않습니다.

그리고 개인 프로젝트라 커밋 수가 적은 것을 감안하면 가격 부담은 한달에 5달러는 커녕 1달러도 안넘을 것 같습니다.

 

한가지 아쉬운 점은 개인적으로 게임 프로젝트에서 리소스와 코드가 혼재되어 있어서 VCS 선정할 때 Git이 후순위로 밀리는 것에 대해 대안을 찾고자 Git과 Perforce를 혼용하는 방안을 고민 했는데 안타깝게도 이 방안을 구현하기는 힘들 것 같습니다.

다만 프로젝트가 어느정도 마무리가 되면 Perforce에 더 공부해서 카피 프로젝트를 EC2에 옮겨보고, 성공한다면 Github까지 복사를 한 뒤 다시 Github로 복귀해보고자 합니다.

 

여튼 개인 게임 프로젝트를 하면서 VCS에 고민이 있으신 분들은 하루 정도 투자하셔서 CodeCommit을 사용해보는 것을 추천드려 봅니다.

시야 돌릴 때 자동 회전 되는 기능 구현에 앞서 AdvancedLocomotionSystemV 프로젝트에서의 구현 방식을 살펴봤습니다.

제가 분석한 바로는 대략 다음과 같습니다.

  • AnimInstance의 Tick에서 매번 제자리 회전 Montage를 재생하고자 합니다.
    Character에서 특정 각도에 도달하여 회전 상태가 바뀌기 전까지 제자리 회전 Montage를 재생할 수 없습니다.
  • Character에서 상태가 바뀌어 Montage를 재생하게 되면 0.0초에서 AnimNotify가 발생됩니다.
  • AnimNotify::Begin에서 AnimInstance에 회전 Montage이 실행되고 있다는 조건을 전달합니다.
    이 조건은 Character에서 주는 상태와 다른 분기문에서 Montage 반복 재생을 막습니다.
  • AnimNotify::Tick에서는 DeltaTime과 MontagePlaytime을 이용해 캐릭터의 각도를 조절해줍니다.
  • AnimNotify::End에서 AnimInstance에 회전 Montage를 제거해주면서 다시 조건이 만족됩니다.

사실 이 이상으로 파악을 하지는 못했습니다.

Montage가 실행되는 부분이 Montage 앞에서 AnimNotify가 호출되는 부분이 서로 엉켜 있는 것 같은데 어떻게 구동되는지 중단점도 안 찍히더군요.

결국 제가 내린 결론은 이 예시를 보면서 확인한 대략적인 구현 방식을 기준으로 직접 헤딩을 해야 한다는 점이었습니다.

  1. 특정 상태가 되면 Montage를 직접 재생한다.
  2. Montage 전체를 하나의 AnimNotify로 감싼다.
  3. AnimNotify::Begin에서 Montage 호출을 막아주고 AnimNotify::End에서 이를 풀어준다
  4. AnimNotify::Tick에서 캐릭터를 회전시킨다.
  5. Tick 사용을 겁내지 말자.

위 사항을 중심으로 하나씩 만들어보고자 합니다.

 

그리고 이거랑 별개로 VA를 구독하거나 AWS에 사설 Git 서버를 넣어서 VCS를 넣는 방안을 크게 고민 중입니다.

커밋 단위에서만 관리하는게 생각보다 불편하더라구요...

 

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

22년 09월 20일 개발일지  (0) 2022.09.20
22년 09월 17일 개발일지  (0) 2022.09.18
22년 09월 13일 개발일지  (0) 2022.09.13
22년 09월 09일 개발일지  (0) 2022.09.09
22년 09월 02일 개발일지  (0) 2022.09.02

+ Recent posts