그레텔의 애니메이션 #4

11.30

그레텔은 이제 초필만이 남았지만, 초필의 구성이 제법 복잡하다. 캐릭터를 하나 만들 때마다 거의 시스템을 개편하는 느낌인데, 솔직히 말해서 오로라 이후에 코드 건들 일이 없을 줄 알았다. 하지만 게임제작이 그리 녹록치가 않구나…

그레텔은 공중에서 초필이 발동되어야 한다. 이건 문제가 아닌데, 이로 인해 몇가지 예외사항이 생긴다. 어쨌거나 초필자체는 정해진 콤보 연출 방식이므로 잡기로 구현할텐데, 공중에서 맞았을 때는 어떻게 할까? 달래나 벨도 콤보방식이지만 지상에서 발동되기 때문에 상대가 공중에 있을 경우 강제로 끌어내린다. 이는 크게 어색하지 않다. 하지만 상대와 그레텔이 둘 다 공중에 있을 경우, 바로 아래로 내려오면 모양이 이상하다. 때문에 지상까지 끌고 내려가는 모션이 필요해진다. 또한 마무리 공격을 공중에서 할 때 바닥을 향해 발차기를 하고 싶으므로 이에 따른 추락모션도 필요하다.

그리고 무엇보다도…이 모든 게 예측이 안되므로 모션은 더미로 만들고 구현부터 해야 한다. 시작해보자.

12.2

벌써 12월이다. 최근 들어 유니티가 자주 멈춰서 울며 겨자먹기로 유니티 6로 업데이트했다. 회사측 말로는 가장 완벽한 유니티라는데… 어디 한 번 보자.

난장판이고, 멈춤 현상은 켜자마자 일어났다.

TMPro의 HDR처리가 좀 바뀐듯? 해서 셰이더 코드를 보니 HDR처리가 안되고 있었다. UI라서 안쓸 거라고 생각했나?

여전히 자주 멈춘다. 원인이 뭘까…

12.3

멈춤의 원인은 다름아닌 다이나믹 본이었다. 이 플러그인이 어떤 문제를 일으키는 지는 몰라도 패키지 매니저에서 새로 임포트를 하니 문제가 사라진 것처럼 보인다. 속단할 수는 없지만 지금으로선 멈추지 않고 잘 돌아간다. 외국의 포럼에서 깃 플러그인때문에 멈춘다는 이야기를 본 적이 있는데, 정식으로 받지 않은 플러그인에 대해서 멈춤현상이 있는 것 같다. 확실한 것은 작업을 더 해보아야겠지만… 지금은 너무 졸립다. 일단은 잠

12.4

멈춤의 원인이 다이나믹본은 맞는 것 같은데, 패키지 매니저에서 새로 임포트를 하니 해결된 것 같은 현상은 섣부른 판단이었다. 게임은 여전히 멈춘다. 하지만 왜 갑자기 이런 현상이 일어난 걸까… 그레텔의 작업을 하며 심해진 현상인데, 그레텔의 본 설정에 문제가 있는 것일까? 챗GPT는 시스템 과부하에 대해 이야기하지만, 그건 아니라고 장담할 수 있다. 그레텔은 닐리의 절반도 안되는 본을 사용 중이다. 디버깅을 해본 결과로는 게임이 멈추어도 코드는 돌아간다.

혹시 PauseBone이 문제가 된 것은 아닐까 생각해본다. 지금은 본을 리셋하기 위해 컴포넌트를 온오프 하는 다소 무리한 방법을 사용하고 있다. 일단 Pause부분의 코드를 주석처리해서 동향을 살피는 편이 좋겠다. 며칠 째 진전이 없다. 야근해서 기운이 없기도 하지만, 프로그램은 이런 큰 문제가 한 번 터지면 언제 끝날 지 기약이 없다는 것이 더 큰 문제다… 부디 예상이 맞았으면 좋겠다. 제발 멈추지 마!

12.5

계엄령으로 시끄러운 하루였다. 세상에! 내가 살면서 계엄을 맞아보는구나! 거지같은 추장때문에 내가 고생이 많다.

게임 중 멈추는 문제는 드디어 해결한 것처럼 보인다. 제법 오랜시간동안 테스트를 했는데도 멎지 않는다. 아마도 다이나믹본의 컴포넌트 enable을 지나치게 자주 on/off한 것이 문제인 것처럼 보인다. 하지만 이건 이미 alpha버전에도 적용되어 있었는데, 어째서 지금와서 문제가 됐던 걸까 .

그래서 이제 드디어 본게임 구현! 사실 멈춤 이슈외에도 이 구현자체가 꽤 어려웠던 편이다. 구현하고 나니 타이밍이 형편없다. 이제 본격적으로 수정해보자.

12.6

일단 애니메이션 완료. 의외로 맞는 쪽의 애니가 더 어려웠다.

12.7

유니티6로 바꾼 후 좋은 점 하나는 로딩이 빨라졌다는 점이다. 이것이 캐시가 리셋되며 불필요한 데이터를 정리한 덕인지, 아니면 실제로 로딩시간이 개선되었는지는 알 수 없지만 어쨌거나 좋다.

12.8

쉽지 않은 작업이다. 코드를 오랫만에 짜서 그런 것 같지는 않고 이제는 무언가 기능을 추가할 때 앞선 기능과 많이 충돌한다. 나름대로는 최대한 정리를 하며 짠 것인데도! 그래도 결국 끝은 온다. 며칠동안 계속 리팩토링을 한 결과 이제 예외처리만 좀 남은 상태다. 멈추는 문제 또한 완전히 사라진 것 같다. 결국 다이나믹 본의 잘못된 사용이 문제였다. 이 문제 때문에 스트레스를 많이 받아서 그만둘까 생각했었는데, 해결돼서 참 다행이다.

이제 남은 이슈 중 가장 큰 문제. 초필의 동시타에 문제가 발생한다. 이럴 경우는 정말정말 드물지만 처리를 해두어야 한다.

요래되어야 정상이다. 머리 아프겠다.

이제 남은 것들은

  • 지그재그로 사용할 일자 검기
  • 워프할 때 사용할 컷아웃(셰이더)처리
  • 워프할 때 가시 방향처리
  • 제자리 점프킥 애니메이션 수정

12.9

일자 검기는 처리했고, 잔상 셰이더를 만들자.

잔상 셰이더는 솔리드에 부착해야 한다. 이걸 하려고 보니 스크린UV가 필요한데, 스크린UV는 Hclip좌표가 필요하다. 그러니 이걸 구한 후에 화면기준으로 왜곡을 일으키고 또다시 HClip변환을 해주어야 한다. 아휴. 이게 무슨 낭비야.

낭비는 제쳐두고, 그냥 잘 안되는 중… 어떻게 짜야하지?

아….ScreenUV는 버텍스 셰이더에서 계산하면 계산값이 정확하지 않다. 픽셀셰이더에서 계산해야 한다. 하지만 버텍스 offset은 버텍스 셰이더에서 써야 하는데..?!

오늘의 깨달음. 유니티에선 정확한 화면비를 계산하려면 _ScreenParams를 사용하면 된다.

half r = _ScreenParams.x / _ScreenParams.y;

오늘은 타임오버. 내일 다시 고민해보자.

12.10

지금까지 내가 ScreenUV를 다루는 방식은 이것을 계산해서 다시 UV에 적용하는 것이었다. 이는 주로 포스트프로세싱이나 디졸브같은 효과에 사용했었기 때문인데, 이번에는 경우가 좀 다르다. UV가 아니라 메쉬에 적용해야 하는 것이다.

그렇다면 생각을 좀 달리 해야 한다. 회전벡터에 강도를 곱하는 형태여야 하지 않을까.

일단 회전벡터를 구하자. Z는 필요없으므로 2차원 계산으로 충분하다.

angle = half2(cos(angle), sin(angle));

이제 여기에 사인파동을 곱해줄 것이다. 수직이라면 단순히 ScreenUV를 적용하면 좋겠으나 회전이 필요하다. 회전행렬 계산법은 다음과 같다.

float s = sin(Rotation);
float c = cos(Rotation);
float2x2 rMatrix = float2x2(c, -s, s, c);
UV.xy = mul(UV.xy, rMatrix);

하지만 이 중, v만 필요하다. 행렬곱을 풀어쓰면 u*c-s*v, u*s+v*c가 되므로 뒤의 수식만 취하면 최적화가 될 것이다.

float v = uv.x * s + uv.y * c;

이제 이를 주기적인 사인파동으로 만들어주고

v = sin(v * 3.14 * 50);

다시 이를 회전벡터와 곱한다.

positionOffset.xy += angle * v * _SmearScale;

그러면

만세!

이걸 이제 코드에 적용하면

이렇게 된다. 야호!

이제 힘든 건 끝났고, 내일은 이걸 여기저기 붙여보자.

12.11

초필도 끝났다. 하지만 애니메이션 작업은 남아있다. 세컨더리 해야 한다. 아이고..

12.12

세컨더리 작업 중. 이렇게 몸을 관통하는 본들을 일일이 잡아주어야 한다. 허드렛일에 속하지만 또 대충 하면 완성도가 많이 떨어져 보인다. 머리를 비우고 차근차근 진행해 보자.

12.13

여전히 세컨더리 작업. 새삼 느끼는 것인데, 데미지 모션이 정말 많구나.

12.15

세컨더리 작업 완료 + 벽점프 구현. 아휴. 손 마이 간다.

원래 오늘 이펙트 들어가려고 했는데 세컨더리가 생각보다 오래 걸렸다. 그레텔의 코트자락은 세컨더리가 그나마 쉬운 편인데도, 캐릭터가 추가될때마다 처리해야 하는 잡기 모션의 양이 점점 커지기 때문에 오래걸린다. (게다가 그레텔은 잡기가 2개나 추가되었다!)

개발 볼륨이 달라졌으므로 마음가짐도 달리 먹어야 한다. 모든 상황이 이전과 같지 않은데, 생각이 이전에 머물러 있으면 그 차이가 스트레스로 다가오기 쉽상이다.

하지만 어쨌거나 그레텔의 애니메이션은 진짜로! 끝난 것처럼 보인다. 이펙트로 넘어가자.

그레텔의 애니메이션 #3

11.23

그레텔의 스킬은 과거 닐리의 스킬을 구상할 때 정해둔 것이 하나 있었는데, 바로 순간이동이다. 닐리의 스킬을 구상할 때 마법사니까 워프를 주려고 마음을 먹었다가, 그건 암살자에게 주는 것이 맞지 않을까? 싶어서 아껴뒀던 것이다. 게다가 닐리는 대기군인형 모으기 캐릭터라 빠른 조작을 해야 하는 워프는 어울리지 않는 감이 있다.

그럼 일단 순간이동은 확정. 두번째로 구상해두었던 것은 공중에서 내리꽂는 공격이다. ↓+조작을 통해 아래로 빠르게 내리꽂는 공격이 어울리지 않을까?

세번째는 기본 조작과 관련된 것인데, 아직 벽점프 캐릭터가 개발되지 않았다. 날렵한 캐릭터에겐 대체로 들어가긴 하지만, 이것에 대해선 조금 고민이 있다. 벽점프의 단점은 공중으로 너무 높이 올라간다는 것이고, 춘리의 공중밟기 같은 기술을 넣을 것도 아니라 수직 공격이 용이한 캐릭터로 만들 생각도 없다. 차라리 길티기어처럼 공중 대시형태가 더 쓸모있지 않을까? 좀 더 고민을 해보자.

그래서 리스트를 정리해보자. 괄호는 개발 코드이다. 그대로 기술명이 될 수도 있겠지만, 그보단 파일 이름이나 코드를 짤 때 기준으로 사용할 이름들이다.

  • 순간 이동(Warp) →A or B
    • A는 적의 앞, B는 적의 뒤
  • 공중으로 순간 이동(WarpAir) ↑ A or B
    • A는 적의 앞, B는 적의 뒤
  • 내리꽂는 공격(FallingThrust) 공중에서 ↓A or B
  • 공중대시잡기(SkySnatch) 공중에서 →A or B
  • 굴러서 띄우기(RisingKick) → K
  • 2단 차기(SpinnigKick) ↑ K
    • 굴러 띄우기 연계나, 마무리 콤보용으로 사용할 2히트 공격
  • 그림자 환영(ShadowMirage) 공중에서 ↓→ B 초필.

정리하며 느낀 건데, 벽점프가 있는 편이 좋겠다. 공중 기술이 많아서 공중 조작(대시든, 2단점프든)이 상대쪽으로 향할 경우 너무 유리하게 작용할 가능성이 높다. 게다가 평타 후나 약손상태에서 추가조작을 허용할 것인가?에 대한 조건도 다소 애매해진다. 시스템을 짤 땐 단순하게, 그리고 여러 요소와 충돌하지 않는 편이 좋다.

이제 제작해 보자.

순간 이동해서 치기. 실제로 구현하고 나면 KOF 야시로의 ‘이얏!’같은 느낌이지 않을까.

공중잡기. 이대로 낙하.

11.25

그리고 쿵! 엔진 미리보기도 안하고 만들었는데 한 방에 잘됐으면 좋겠다.

11.26

오늘의 깨달음. 회전키를 반대쪽에 붙일 때 오일러 모드가 다르면 Mirror가 되지 않는다. 하지만 상단 툴바의 나비버튼 모양의 Mirror는 오일러 모드와 상관없이 잘 작동한다.

굴러서 올려차기. 장풍도 피해지면 좋겠는데… 충돌박스가 자동생성이라 잘 되려나 모르겠다.

2단 돌려차기.

11.27

구현의 시간이다. 일단 순간이동A

순간이동B

11.28

공중순간이동. 이펙트가 들어가면 좀 순간이동처럼 보이려나.

하강공격구현. 공중기는 전혀 구현이 안된 상태라 구현과 함께 진행하느라 진행이 더디다.

11.29

모든 것이 예외 투성이었던 공중잡기. 힘들었다.

11.30

공중잡기에서 이어지는 코드 수정 중 이전스테이트를 처리하는 부분에서 버그를 발견했다. 그런데 이게 왜 지금까진 제대로 돌아갔지..?!

유니티가 간헐적으로 멈춤 현상이 있긴 한데, 오늘따라 자주 멈춘다… 왜지

그레텔이 스킬이 좀 많다. 초필을 제외한 나머지 스킬을 제작 완료. 초필 구상이 빡센데.. 이 작업도 오래걸릴 것 같다.

그레텔의 애니메이션 #2

11.15

데미지 모션 시즌. 아무리 냉혹한 암살자라도 때리면 맞아야지?

방어모션은 보간 애니메이션이 있을 뿐, 숨쉬기 애니메이션은 없다. 처음엔 숨쉬기를 넣었었는데, 방어는 완전히 동작이 굳어야 잘 어울린다.

11.17

토요일에는 밀린 웹툰을 보며 놀았다. 요새 게을러져서 노는 시간이 많아졌다. 아이에게 해야할 일을 다 하고 놀라고 나무라는데, 난 그럴만한 자격이 있는가?

일어서기. GIF애니로 만드니 프레임이 짤려서 잘 보이지는 않지만, 90년대 홍콩 액션 영화에서 많이 보이던 튕겨오르며 일어서기이다. 시간이 제법 오래 걸렸는데, 사실 일어나기 모션은 그리 중요한 모션은 아니니 그냥 대충 만들어도 게임하는데 지장은 없다. 하지만 보다 날렵한 느낌을 주고 싶었고, 시간을 좀 더 투자했고, 보다 만족스러운 결과를 얻었다.

스턴을 제작하려는데.. 아차… 얼굴의 그늘표현이 lerp인가보다. 내가 이거 파라메터로 빼놨던가…

없넹…

유니티에서 빼기로 하자. 그나저나 이마의 저… 다이아몬드가 성분이 Body라서 같이 어두워지지 않는 문제가 있다. 이걸 고치려면… 셰이더 계산식을 뜯어고쳐야 하는데 일이 너무 커진다. 그냥 넘어가기로 하자.(시간을 투자해서 … 어쩌고 한지 1시간도 되지 않은 시점이었다.)

스턴도 완료. 이제 게임에 넣어보자

가시 테스트. 통과.

…뭐지? 왜 유니티 셰이더는 멀쩡히 잘 나오지…?

11.18

각 캐릭터에게 잡히기 포즈, 패배포즈… 원래 잡기 들어가려 했는데, 이것만으로도 타임오버.

내일은 이마의 다이아몬드를 얼굴로 옮겨보자.

11.19

// color = lerp(color, _FaceDarkColor, faceDarkMask);  
color *= saturate(_FaceDarkColor + faceDarkMask);

유니티의 얼굴 셰이더에선 어두워진 얼굴을 처리하기 위해 컬러마스크를 곱해주고 있었는데, 블렌더에서 사용했던 방식을 주석처리한 흔적이 있다. 과거에도 뭔가 문제가 있었나..? 아…기억이 안난다.

뭐, 어쨌거나 유니티에선 제대로 나오니 그냥 이대로 하기로 하자.

패배 포즈도 제작

잡기를 만드는 중 타임오버.

11.20

B잡기 마무리. 그레텔의 이 등찌르기는 원래 뒤에서 목을 긋는 컨셉이었다. (뱀파이어 세이버의 바레타가 그랬듯) 그런데 이 표현이 너무 잔인하게 느껴져서 노선을 변경했다. 파괴력이야 장검이 더 좋을텐데, 이상하게 단검의 모션들은 어딘가 좀 더 잔인하게 느껴진다.

K잡기 마무리. 오늘은 여기까지. 게임에 적용하는 것은 내일 해보자.

11.21

오늘의 삽질. 모든 데이터를 넣었는데도 Grappling이 왜 작동이 안되는가?! 를 한참 헤맨 결과 애니메이션 이벤트를 빼먹었었다. 개발한 지 오래되니 별 게 다 기억이 안나네!

등찌르기의 경우 처음으로 타격자가 이동한다. 지금까지는 피격자가 던져지거나 제자리에 있거나.. 어쨌거나 가해자가 이동하는 경우는 없었다. 원래는 프리오리의 백드롭이 이렇게 이동을 할 예정이었는데 처리가 귀찮아서 제자리로 돌아갔더랬다. 그런데 그레텔은 피할 수가 없다. 원래 있던 자리엔 상대가 누워있어야 하기 때문에. 그래서 잡기 후 위치보정을 해줬더니 충돌문제가 발생한다. 이를 어떻게 처리하지…?

11.22

하루종일 지속되던 고민은 코드한줄로 싱겁게 끝났다. 생각의 꼬리 끝엔 결국 원점이 있었다.

음. 이제 기본 애니메이션은 다 한 것 같으니까, 스킬로 넘어가자. 그레텔의 스킬은 잔상때문에 기존의 셰이더를 좀 손봐야 한다.

그레텔의 애니메이션 #1

11.9

공부를 핑계로 잘 쉬었다. 이제 다시 시작해 보자.

그레텔은 앞서 제작한 2개의 캐릭터보단 전투적인 캐릭터이다.때문에 전투 동작은 떠오르는 것이 많다. (지금 생각해봐도 프리오리가 정말 어려웠다!) 레퍼런스가 풍부하다는 것은 좋은 것이지만, 그만큼 식상하기도 쉽다. 천천히 차근차근 진행해보자.

블렌더 4.0에서 포즈 어셋을 만들 때 가끔 에러가 난다. 이 에러는 0프레임에 로테이션 모드 키를 줬을 때 생긴다.

바로 이런 경우다. 로테이션 모드키를 조금 1프레임 뒤로 옮겨주면 해결된다.

Idle포즈는 많이 쓰이기 때문에 등록해 놓고 사용하면 편하다.

11.10

그레텔의 기본 이동 애니메이션. 셰이더와 다이나믹본을 붙이는 데도 시간이 꽤 걸린다. 생각보다 이미지가 안나와서 고민이 많은 캐릭터가 될 것 같다. 쉬운 게 없네!

11.11

공격을 만들자.

11.12

앉아서 강펀치

근접킥. 니킥 2번인데 너무 빨라서 안보인다. 실제 게임에서는 히트스탑이 들어갈 것이므로 잘 보일 것이다.

11.13

앉아서 킥. 원래 도레미에게 주려던 것이지만 아무래도 망치 때문에 각이 안나올 것 같아서 그레텔에게 할당. 그런데 이 모션이 정말 손이 많이 갔다. 난이도가 상당했던 작업

점프공격도 만들고…

생활리듬이 한 번 흐트러지니 제자리로 돌리기가 꽤 힘들다. 다시 마음을 잡아야 할 때

11.14

기본공격의 완료. 아.. 짧다. 예상했던대로 공격이 다 짧아..!

이제 다음은 데미지 모션들을 제작해야 한다.

벨의 이펙트

10.30

작업 프로세스는 러프->디테일->SDF생성인데, SDF가 없으면 결과물이 예측이 안된다. 때문에 러프를 SDF로 만들어 테스트를 하는데, 텍스처가 싱글채널상태라면 생성할 수 없다. 이것이 좀 불편하지만, 그 외엔 빠르고 정확하니까 용서하기로 하자.

요로케 생성해서

..그른데 영..

아주 마음에 드는 건 아니지만, 적당히 마음에 드니 여기까지 하도록 하자. 오늘은 타임오버

10.31

어제 작업물이 역시 마음에 안들어서 처음엔 볼 형태로 바꿨다가 결국 그냥 이미지로 수정. 이게 더 마음에 든다.

맞을 때의 이펙트를 만들던 도중 타임 오버. 결과물은 별 게 없었지만, 방향성을 잡아서 의미가 있던 시간이었다.

11.1

찌르기 검기는 원래 이펙트로 처리할 예정이었으나 블렌더 제어가 더 쉬울 것 같아서 그냥 메쉬를 새로 만들었다. 프리오리에 비하면, 벨은 새로운 요소가 꽤 많다. 초반4캐릭터 제작할 때도 두번째 캐릭터인 닐리가 그리 고생을 시키더니, 중반4캐릭터 제작할 때도 두번째 캐릭터인 벨이 고생을 시키는구나.

전기만 빼면 나머지는 그냥 먼지 붙이는 거라 어렵지 않다. 전에 제작했던 툴까지 있어서 더 쉽다. 역시 툴은 중요해.

벨 완료. 이제 그레텔로 넘어가자!

벨의 애니메이션 #3

10.26

벨의 애니메이션은 초필하나를 남겨두고 있긴 한데, 이게 할 일이 정말 많다. 먼저 전에 데미지 코드 리팩토링을 하며 콤보데미지 시 밀어내기 코드가 제대로 작동하지 않고 있었다. 콤보때는 기본적으로 밀어내지 않는 것이 맞지만, 연출을 위해 Push이벤트로 호출한 공격에 대해서는 예외를 허용하고 있는데, 이게 빠진 것이다. 달래의 마지막 킥 전에 밀어내는 코드가 빠진 채로 적용되고 있었다.

그래서 이를 적용한 현재까지의 진행상황. 찌르기 전에 밀어내기가 필요하다. 아이고, 손 많이 간다.

10.27

세컨더리를 자동화했다고 해도 크게 뚫리는 건 막을 수가 없다. 그리고 벨은 움직여줄 것이 참 많다. 머리카락, 숄, 치마…그래도 다행인 것은 이런 요소들이 몸에 착 달라붙어 있는 형태가 아니라는 것이다.

숄의 본을 보정.

10.28

벨의 모든 애니메이션 완료. 아직 좀 더 다듬을 것이 남았으나 오늘은 타임 오버. 폴리싱을 그렇게 빡세게 하는 것이 아님에도 모션이 워낙 많아 오래 걸린다. 특히나 잡기는 캐릭터마다 모든 경우의 수를 예상해서 만들고 있기 때문에 각 캐릭터마다 추가해야 하는 모션의 수가 배수로 늘어난다는 단점이 있다. 이렇게 무식하게 처리하는 방법 외에 달리 수가 없다. 공격자와 피격자간의 키가 다르고, 본도 같지가 않다. 처음부터 이를 고려하고 디자인을 했다면 편했겠지만, 그럼 디자인에 제약이 엄청 많아진다. 캐릭터 게임인데 몰개성하면 안되므로 고생을 해보자

10.29

다른 캐릭터에게 제대로 잡히는 지도 테스트.

2P컬러도 지정.

벨의 애니메이션 #2

10.17

술 마신 다음 날.

기본 애니메이션이 많이 끝났다. 차근차근 진행해 보자.

다음은 잡기관련 애니메이션을 해보자.

10.18

모욕1

10.19

모욕1 마무리

모욕2도 완료. 프리오리에 비하면 벨은 캐릭터가 확실하다보니 애니메이션이 좀 수월했다. 다음은 캐릭터 선택, 인트로, 승리/패배, 스킬… 아휴, 아직 많다.

10.21

패배 모션. “뭐…? 아..ㅆ… 왜!!” 하지만 아쉽게도 패배 애니메이션엔 대사가 없다.승자의 대사와 겹치기 때문에

게임에 적용. (사실 앨리스는 갑옷때문에 벨의 손이 더 아플텐데..!)

캐릭터 선택화면도 만들고.. 시간이 다 됐으니 내일 좀 더 다듬어 보자.

10.22

이제 스킬을 만들 차례. 벨의 레이피어는 전격계 레어템으로 설정했다. 처음부터 벨은 아도겐, 어류겐을 갖고 있는 표준형 캐릭터로 만드려 했기 때문에 장풍이 필요한데, 불은 닐리가 쓰고 얼음 주려니 캐릭터가 내정되어 있어서 전기로 결정했다. 금발은 원래 전기를 쓰지 않는가!

  • 전기장풍(→ A or B) – LightningArrow
  • 어류겐 (↑ A or B) – RisingAttack
  • 뒤로 뺐다가 치기 (←A or B) – BackThrust
  • 달려가 잡기 – 미정

뭘 했길래 이런 신나는 자세가 나왔을까?!

벨의 영상은 올리는 족족 노딱이 붙는데, 정작 검토요청하면 통과된다. 기계놈들이 PC에 물들어 있어서 매우 성가시다!

10.23

스킬을 만들고, 다듬자.

어류겐. 막히면 처맞는다. 앨리스와 다른 점은 2타이고, 맞아도 넉백되지 않는다.

회피 후 치기. 원래 앨리스에게 주려던 스킬인데 앨리스가 무게감이 있는 캐릭터라 폴짝 뛰는 모션이 너무 가벼워 보였기에 슈퍼아머로 바꿨었더랬다. 벨은 잘 어울리는 것 같다.

벨의 장풍은 전격계. 이를 위해 셰이더에 Flow속도를 제어할 수 있도록 수정을 했다. 그리고 이와 관련된 여러가지 코드들을 고치고… 나중에 또 번개 이펙트를 달고… 코드작업은 진행이 더뎌도 확실히 하는 것이 중요하다.

10.25

벨의 마지막스킬은 좀 복잡했다. 기본 컨셉은 KOF-쿄의 돌진기. 돌진해서 맞으면 추가타를 넣을 수 있는 기술인데, 돌진을 위해선 적에게 충돌하거나 위치가 바뀌는 타이밍을 얻어와 적용해주어야 했다. 이 과정에서 이틀간(출근을 하니 작업시간이 적어졌기 때문에!) 삽질을 했다.

커맨드 →K 후, K를 누르면 칼을 내밀고, 한 번 더 누르면 감전이다. 이 과정에서 감전타이밍을 정할 수 있다.

히트 시엔 이렇게 빨리 발동시키고

방어시엔 훼이크를 줄 수 있다.

이제 초필 하나 남았다.

벨의 애니메이션 #1

10.11

대기 자세가 특히 어려운 벨. 여전히 그렇게 마음에 들지 않는다.

10,12

대기자세를 좀 더 발랄한 느낌을 주는 형태로 변경

벨의 대기자세를 등록하려는데 문제가 발생했다. 오류메세지는 많은 정보를 주는 것 같지만 실제로는 큰 도움이 안된다. 원인을 추적해보니 상체의 회전방식 변경 키가 오류를 일으키고 있었다. Euler회전은 사용자가 축별 제어를 하기는 편하지만 짐벌락이 발생하고, Quaternion은 짐벌락은 없지만 축별 제어가 불가능하다. 둘 다 장단점이 있다. 때문에 혼용을 하기 위해 회전방식 변경에도 키를 넣어두는데, 이것이 오류를 일으키는 것이다. 블렌더의 버그인데, 일단 포즈어셋을 만들면 그 안에서는 또 회전키가 잘만 생성된다. 때문에 일단은 키가 없는 상태로 포즈어셋을 만들고 해당 포즈의 편집모드에서 회전키 변경 관련키를 넣어주어야 한다. 조금 번거롭다. 버전업되며 수정되었을까?

자가 충돌 문제는 면이 뒤틀리거나 꼬였을 때 발생한다. 대체로 3각이 아닌 면에서 발생하므로 이를 해결해 주면 된다. 문제는 몇 번 인덱스인지 알려주지 않는다는 사실이다. 메쉬를 차례차례 쪼개보며 소거법으로 알아내는 수밖에 없다.

문제는 어깨끈 메쉬에 있었다. 팽팽한 끈과 피부사이에 있는 평평한 면의 폴리곤을 사각이하로 정리해주지 않아 발생했다.

이제 메쉬엔 아무런 문제가 없다. 셰이더를 지정해보자.

여차저차 게임에는 띄웠다. 자세한 건 내일 다듬어 보자.

10.14

다이나믹본의 Inert는 물리 계산 기준 좌표계의 월드:로컬 비율인 것 같다. 1로 갈수록 로컬비율이 커진다. 이 값은 지금까진 뭔지 몰라 신경쓰지 않고 있었는데, 캐릭터의 움직임이 빠를 경우 지나치게 본이 깨지는 현상을 막아준다.

다이나믹 본도 설정 완료. 이동애니메이션도 완료.

이제 공격을 만들자.근접 2타.

기본 애니메이션 제작. 항상 영상을 올리고 보면 수정할 부분이 군데군데 보인다. 빌드만 프리징하면 버그가 나오는 것과 같은 이치

10.15

원래 앨리스에게 주려던 근접 발차기. 이유는 “류가 사용한다. = 1번캐릭터가 사용한다.” 라는 단순한 이유였는데, 당시로는 2타 예측이 안돼서 관두었었다. 애니메이션을 만들 땐 타격 지점을 어느 정도 예상해서 만들어야 하기 때문에 당시로선 난이도가 좀 있는 작업이었기 때문.

하단 발차기를 처음엔 이렇게 체조선수 컨셉으로 제작했으나, 정작 적용을 해보니 벨에게는 그닥 어울리지 않았다. 도레미가 어울릴 것 같은데, 망치를 든 채로 가능할까?

그래서 이렇게 수정. 하단 발차기는 만들 때마다 항상 어려운데 결과물은 대체로 마음에 들게 나온다.

방어모션.

벨의 키는 표준인데, 오로라가 참 작구나.

선 상태와 앉은 상태의 공격일 경우, 웬만하면 130cm이상을 타격하지 않도록 해야 한다. 도무지 각이 나오지 않는 경우라도 최대 140cm를 넘으면 안된다. 이것은 여러 삽질을 통해 얻은 교훈인데, 그 이상이 될 경우 대공에 너무 강해지고, 두번째로 키가 작은 오로라가 공격을 피할 수 있다. (실제로 초기의 앨리스의 발차기는 타점이 꽤 높은 편이어서 오로라에게 맞지 않았다.)