난 수정작업을 지극히 싫어하는 편이다. 대부분의 경우 들인 시간에 비해 티가 잘 안난다. 어차피 마감 근처가 되면 확인없이 때려박을 리소스. 없는 실력으로 백 번 수정해봤자 뭐 더 나은게 나오겠는가? 차라리 다시 할 일이다. 근본이 잘못된 건 어차피 뭘 해도 안된다. 그런 의미에서 아이시의 머리는 근본이 잘못되어 있었다. 실수였다. 작업할 땐 왜 생각이 안났을까. 포니테일말고 옆으로 묶어야지…모델링은 그렇다쳐도 리깅할 때까지 생각이 안나다니. 이제라도 교정을 해보자.
일단 커브 모델링을 끝내고
모델링을 굳힌 후 매핑을 하고..
본을 심자. 다이나믹 본을 사용할 것이므로 크게 중요한 것은 아니나, 본은 항상 Z축이 바깥을 향해주도록 하는 편이다. 커스텀 본이 공통된 규칙을 가지고 있다면 이를 수동으로 움직일 때 항상 x축을 중심으로 움직이면 모든 본이 펼쳐지는 효과를 얻을 수 있으므로.
생각보다 셰이더 개발이 길어서 글을 새로 팠다. 겉보기엔 단순한 셰이더지만 생각보다 많은 노력이 들어갔다. 그런데 여기까지 개발 후 드는 생각이… 이럴거면 그냥 애디티브 셰이더로 만들면 되지 않나?
라고 생각했지만, 울퉁불퉁한 지형에서는 데칼처럼 붙으니까… 효과가 있긴 있다. 이런 지형이 몇 개 안된다는 것이 문제이긴 하지만… 어쨌거나 이제 배경셰이더에 모두 이걸 붙이자.
color = MelaArea(IN.positionWS.xz, IN.uv.xy, color);
함수화를 해두었기 때문에 마지막 줄에 이처럼 붙여두면 된다. 이번에 새로 알게 된 사실이 여러가지 있는데, 이처럼 여러 배경 셰이더에 같은 기능을 붙일 경우, 글로벌 변수를 사용하면 편하다는 사실이다. Shader.SetGlobalxxx로 변경할 수 있다. 두번째로 이런 글로벌 변수는 함수내에 선언할 수 있다. 함수패키지를 포함시키기만 해두기만 하면 된다.
미러전에서 2개의 영역이 켜질 수 있음을 대비해야 한다.
하지만 초록색이 영 예쁘지가 않아서…그냥 2개가 활성화되어 있을 경우는 특별히 구분하지 않기로 하자.
멜라는 마법사이기 때문에 스킬도 마법의 비중이 높을 예정이다. 그리고 마법은 곧 이펙트이기 때문에 이펙트 작업의 양이 많을 것으로 생각된다. 수수한 옷차림 속에 숨긴 실력자라는 설정이므로 마법은 화려해야 한다.뜻대로 될지는 해봐야 알겠다. 기획부터 해보자
네모난 장풍(Shot) : → A or B, 마법사니까 장풍은 쏴야겠고
공중에서 장풍(ShotAir) : (공중에서) → A or B, 이걸 고우키처럼 공중에서도 쏜다.
죽음의 키스(Kiss) : → K, 상대에게 독이 든 키스를 한다. 라운드가 끝날 때까지 지속데미지
지뢰매설(Mine) : ↑ K, 시간차로 폭발하는 지뢰를 설치하고 상대의 뒤로 가서 발로 공격한다. 역가드
돌격가르기(Slash): ← A or B, 흔한 3연타 돌격기
빛 기둥(Beam) : ↓→B, 초필. 양쪽으로 퍼지는 파워게이저
멜라의 영역(MelaArea) : ↓→K, 초필2. 데미지가 1.5배 되는 필드를 펼친다.
공중대시(RushAir) : (공중에서) →→, 말그대로 공중대시
장풍은 기존의 스킬을 답습한다. 별로 어렵지 않다.
공중장풍은 손볼 게 조금 있긴 했지만 크게 어렵지 않게 구현할 수 있었다. 그런데 공중스킬이 있는 애들은 캔슬 때문에 여러가지 이지선다가 된다. 예상치도 못했던 강점이 생겼다.
공중대시는 크게 메리트가 있다기보단 멜라라는 캐릭터의 상징적인 기술에 가깝다. 어쨌거나 끝판왕이고 처음보는 자에게 위압감을 전달해 주기 위한 기술. 예외처리등이 어려울 줄 알았는데, 의외로 싱겁게 끝났다.
9.2
며칠간 감기때문에 골골거렸다. 다시 시작해 보자.
키스의 설정은 독을 주입하는 것이다. 이를 위해 피부 색이 변해야 한다. 이를 위해 해주어야 할 일이 꽤 있는데,
피부 셰이더의 녹색표현
그리고 셰이더 드라이버가 이를 인지하도록 설정
HP게이지 셰이더의 녹색표현
독 애니메이션 이벤트
실질적인 데미지 처리
하나하나 구현해보자.
먼저 피부가 녹색으로 변할 수 있도록 셰이더를 개조.
독 데미지. 녹색이 너무 강해서 조금 줄였다. 몇가지 예외상황을 처리하고… HP바가 녹색으로 변하는 처리는 취소하고… 의외로 쉽게 완료.
지뢰 깔기…는 실제로 해보니 역가드가 많이 헛갈린다. 공격 성공확률이 높으니 실패 리스크를 늘리자.
9.4
Slash공격은 콤보형이라 막히면 반격맞는다.
대신 성공하면 확정 2타
9.5
빛기둥을 구현하는 도중 문제가 생겼다. 그럴 확률은 적겠지만, 만약 빛기둥을 뚫고 무언가의 공격이 들어온다면 멜라의 스테이트가 데미지로 변하게 된다.
이렇게 되면 공격정보가 스테이트에 묶여있는 현재 구조에선 공격정보가 초기화되며 파워가 0으로 변하게 된다. 타격은 발사체가 일으키지만 정보는 본체에서 얻어오는 기형적인 구조. 이를 해결하기 위해선 발사체 코드 전체를 리팩토링하는 수밖에 없다. 지금까지는 히트 구조체와 이펙트용 구조체를 반반 섞어서 혼종으로 사용하고 있었는데, 이를 발사체 구조체로 일원화하고, 생성 시 모든 정보를 넘겨주는 쪽으로 변경했다. 생각해보면 당연한 일인데 왜 이렇게 하지 않았을까.(…라지만 여전히 스테이트는 구조체레벨이 아니라 개별변수기반으로 관리되고 있다. 다음엔 이렇게 하지 말아야지…)
어쨌거나 너무 늦지 않게 끝나서 다행이다. 힘든 작업이었지만 편히 잠들 수 있겠다!
9.6
이제 마지막 스킬만을 남겨두고 있다. 멜라의 영역은 돔형의 영역을 설정한다. 일단 보기 좋으려고 돔형을 택하긴 했는데, 제작하다 보니 고민이 많다. 일단 캐릭터가 영역내에 속해있는지 알기가 힘들다. 둘째, 셰이더를 만들기가 까다롭다. 뭐 셰이더야 시간을 들이면 완성은 된다지만, 첫번째 이유 때문에 만들어놓은 결과물이 그렇게 좋은 결과물일 것이라 단정짓기가 힘들다. 초안대로 배경셰이더를 개조해보기로 할까
초안은 배경 셰이더를 반전시켜 사용하는 것이었는데, 포토샵에서 대충 합성해봐도 이건 쓸만한 게 못될 것 같다.어두운 배경의 경우 너무 밝게 표현된다.
흑백은 어떨까…분위기가 괜찮기는 한데, 티가 잘 안난다. 고민이 좀 더 필요하다.
고민 끝에 다시 돔형으로… 그런데 예상치 못한 문제가… ZTest를 안하니 뒷배경이 뚫린다. 그렇다고 ZTest를 하자니 캐릭터가 짤린다.
이를 제어할 수는 있다… 있긴 한데, 영 내키지가 않는 작업. 이를 위해선 셰이더 드로우 순서를 정렬해주어야 하는데, 오파쿠 스러운 놈을 AlphaTest보다 나중에 그리는 것이 영 마음에 들지 않는다.
그래서 적용해 본 배경 선긋기. 이건 퀄리티가 영…
9.7
돔형의 영역은 또한 Transparent머티리얼과도 충돌을 일으킨다. 그렇다면 이걸 또 Transparent로 처리해야 하는데, 이렇게 되면 일이 너무 커진다. 차라리 큐제어를 제외하고 배경을 흑백처리 해보는 게 어떨까.
…? 뭐지 난 이런 처리를 한 적이 없는데…꽤 멋진 연출이 됐다. 아웃라인의 ZTest를 Always로 해놓았기 때문에 발생하는 버그이다. 언젠가 사용할 일이 있을지도.
이렇게 초안이 완성되었다. 구형의 마스크는 Distance보단 Dot으로 구하는 것이 성능상 잇점이 있다. 어차피 셰이더에서 정확한 거리를 잴 일이 많지 않으므로 정규화된 숫자로 계산을 하는 편이 빠르다.
구현을 하다보니 HP바와 또 충돌한다. 그러다보니 표현이 자유로운 건 바닥 뿐이다. 이 방법이 최선이려나.
데미지 애니메이션 작업기간이다. 데미지 애니메이션은 점차 증가해서 지금은 공격보다 더 많은 분량을 차지한다.
캐릭터가 추가될 때마다 이에 대응되는 잡기 애니메이션의 갯수 또한 늘어나기 때문에, 이후로는 정말로 큰 부담이 된다. 배틀퀸의 캐릭터를 더 이상 늘릴 계획이 없는 이유이기도 하다.
오로라의 발목잡기 스킬의 충돌영역이 제대로 지정되지 않은 상태였다. 히트가 일어나야 다음 스킬로 연계할 수 있는데, 이 판정이 취약한 문제가 있었다… 지금까지 왜 몰랐었지…!
멜라의 대기자세가 발을 모으고 있는 형태라 오로라는 더 많은 거리를 전진해야 히트할 수 있다. 판정은 실제 자세에 기반해서 일어난다. 즉, 달래나 리그레이처럼 대기자세가 한 쪽 발을 앞으로 내밀고 있는 경우라면 더 쉽게 잡을 수 있다. 멜라는 이때문에 판정면에서 조금 유리한데, 이 때문에 잘 잡히지 않는 현상이 있었다.
8.26
아휴..안끝나는 세컨더리 애니메이션. 저렇게 뚫린 부분은 다이나믹본이 제대로 처리하지 못하기 때문에, 수동으로 잡아주어야 한다.
본래 세컨더리 애니메이션은 본 애니메이션이 끝난다음 작업하는 것이 원칙이다. 실제 작업할 때와 게임에 넣었을 때의 느낌이 다르기 때문에, 확정되기 전까진 모든 작업이 재작업이 될 수 있기 때문이다. 하지만 잡히기 모션같은 경우는 모든 애니메이션이 확정된 상태이기 때문에 작업을 해도 상관이 없다. 그런데 이 모션이 워낙 많다보니 작업이 지루하다. 매우 지루하다… 이런 걸 기계한테 맡길 수 있으면 좋으련만.
8.28
승리포즈. “에이씨, 더럽게…”
잡기1번.
잡기 2번.밟자.
8.30
캐릭터 선택, 인트로…이렇게 해서 기본모션은 완료.하지만 멜라는 마법사이기 때문에 이펙트 작업이 많을 것으로 예상된다.
드디어 끝판왕까지 왔다. Idle은 닐리와 좀 비슷한 감이 있는데, 예쁜 것 같으므로 그냥 진행하기로 하자.
8.17
아내는 끝판왕치곤 멜라가 수수한 모습이라고 했다. 사실 멜라의 수수함은 의도한 것이다. 그녀는 신에게 도전하기 위해 힘이 필요했고, 이를 얻기 위해 모두를 속이는 전략을 취한다. 그리고 아들은 얘는 왜 면봉을 들고 있냐고 했다. 그러게 말이다.
8.19
멜라는 컨셉을 확실히 하지 않은 채 작업에 진입했다. 이럴 경우 대부분의 작업은 삽질이 되기에 먼저 생각을 정리하는 편이 좋다. 일단은 마법사이니 지팡이로 마법을 사용하는 건 알겠는데, 일반 공격은 어떻게 처리할까? 불이나 전기를 쓰기엔 일반공격에 이펙트가 붙어서 너무 OP같아 보인다. 끝판왕이니 어느 정도 강인함은 표현되어야 하나, 닐리가 그랬듯, 일반 공격은 물리력이면 좋겠다.
그래서 지팡이의 구슬이 여러형태로 변하는 방식으로 디자인하도록 하자. 일반 공격은 언월도나 창처럼 사용하고 방어시엔 사용자를 감싸는 포스필드를 생성한다. 그렇다면 구슬의 셰이더가 별도로 처리되어야 한다. 본도 새로이 필요하다. 일이 꽤 복잡하지만, 하나하나 처리하다보면 결국 끝난다. 커피를 마신 후 차근차근 진행해 보자.
중요한 건 게임이니 자세한 비주얼은 게임에 적용한 후에 살펴보기로 하고, 블렌더에서는 컨트롤러를 통한 작동여부만 판단하면 된다. 간단하게 머티리얼을 만들고, 드라이버를 연결하고, 컨트롤러를 만들어 붙인다.
지금 와서 생각해보건데, 셰이더 드라이버를 공용으로 쓸 게 아니라 캐릭터마다 다르게 주는 편이 좋지 않았을까 싶기도 하다.
이제 애니메이션과 조합하면 이렇게 된다.
광선검도 미리 만들어놓자.
유니티에서 셰이더를 만들고,
마법쓸 때 보석이 빛나야 하니 보석 셰이더도 필요하다. 하지만 기본적으로 보석상태에서 빛나야 하는 것이고, 이미시브가 그렇게 무겁지는 않으니 맷캡에 추가 셰이더코드를 붙이자.
해서 비로소 완성된 작업. 워낙 순식간인데다 방어할 때 빼곤 사용하지 않지만, 이렇게 각잡고 만들어 두지 않으면 작업기간 내내 거슬린다. 결과적으로 이러한 기분은 작업을 하기 싫게 만들기 때문에, 충분히 시간을 들여 원하는 퀄리티를 얻는 편이 장기적으로 좋다.
FlipKick은 3지선다의 애니메이션이므로 체인으로 연결되는 3개의 애니메이션이 필요하다. 플립킥 자체는 점프공격이므로 서서 막아야 하고, 나머지는 모두 상단,하단이라 그냥 앉아서 막으면 안전하다.
사실 이 기술은 프리오리를 만들 때부터 고민해왔던 기술이다. 이 기술이 어울릴만하려면 양손에 비교적 가벼운 무기를 들고 있어야 하는데, 원래 그레텔에게 주려고 했으나 다리가 짧아서(!) 그렇게 효율적이지 않았다. 프리오리와 도레미는 무기때문에 탈락, 벨과 비네트는 어쩐지 컨셉과 어울리지 않는 것 같고… 여름이를 제작할 때쯤엔 그냥 존재 자체를 잊고 있었다. 지금이라도 생각나서 다행이랄까.
A로 연결되는 꿀밤때리기.
이제 절반 완료.
제노사이드 캇타!
8.12
스킬을 처음 구현하면 엉망진창이다. 절대로 한 번에 제대로 나오는 적이 없다. 캐릭터는 제 멋대로 움직이고, 이펙트는 엉뚱한 곳에서 터지며, 콘솔창은 툭하면 에러를 뱉는다. 이를 원하는 모양새가 되도록 다듬고 다듬으면 마침내 제대로 된 결과물이 나오는데, 이게 참 재미있다.
공중잡기. 나뭇잎 마을의 연화. 원래 기획은 이게 아니었지만, 빵을 사러 가는 길에 문득 생각났다. 순전히 우연으로부터 괜찮은 결과를 얻는 걸 세렌디피티 효과라고 한다. 난 이 말을 참 좋아하는 편이다.
이제 초필 제작. 앨리스는 이제 촉수에게 잡혀야 한다. 이거 오로라에게 적용하면 키가 맞으려나…
8.14
초필에서 사용할 차원의 원은 단순히 셰이더의 파라메터를 0에서 1로 바꾸는 것만으로는 충분하지 않다. 생성과 소멸이 모두 필요하고, 심지어 애니메이션까지 제어된다. 기존의 스크립트를 개조하는 것이 좋겠다.
아휴.. 무슨 발사체가 FSM이 이래 복잡해.
그리고 새로운 애니메이션들을 익스포트해주고, 이펙트를 등록해주고, 애니메이션 이벤트를 심고, 스크립트에 초필을 등록하고…
페어 애니메이션도 어려운데, 이건 무려 3개의 리그가 합을 맞춰 재생해야 한다. 난이도가 꽤 높았던 작업. 하지만 결국 완성!
내지르기(FistCannon) : → A or B, 주먹을 내질러 공격. 내지르는 동안 슈퍼아머, 앉으면 피할 수 있지만 맞으면 A or B로 잡기형 추가타. 원래 잡기1이었던 녀석으로 모션은 어느정도 되어 있으니 다듬기만 하면 된다.
차원의 원(DimensionHole) : ←(모아서) A or B, 지면으로 차원의 원을 보낸다. 원이 지상의 적에게 맞으면 촉수가 튀어나와 상대방의 움직임을 1.5초정도 묶는다. 잡기 기술이므로 가드불가.
플립킥(FlipKick) : ↑ K, 점프 후 한바퀴돌아 발뒤꿈치로 적을 친다. 공중 판정이므로 서서막아야 한다. A,B,K로 연계할 수 있다.
A : 주먹을 뻗어 직접 공격
B : 주먹을 뻗은 지 1초 후 딜레이 공격
K : 하단 발로 휩쓸기
어류겐(UpperKick) : ↓(모아서) K, 대공기
공중잡기(AirGrab) : 공중에서 → A or B, 말그대로 공중잡기
정권찌르기(GrabFist) : ↓→ B, 바로 앞에 커다란 차원의 원을 만들어 촉수를 소환, 잡히면 불주먹으로 공격.
사실 기획이 생각보다 오래걸려서 세컨더리를 먼저 작업하던 중이었다. 일단 하던 것까진 작업하고… 하나하나 작업해 보자.
8.3
내지르기는 약손과 강손의 흐름이 다르다. 처음 기획과는 다소 차이가 있어서 생각을 다시 하느라 시간이 꽤 걸렸다. 약손은 슈퍼아머가 없고 딜레이가 짧다.
강손은 슈퍼아머가 있고 딜레이가 길다. 그리고 가드불가 공격이다. 여러가지 요소가 섞여있는 공격이다 보니 코드도 꽤 손을 봐야 했다. 배틀퀸은 사람의 동체시력이 일반적으로 반응할 수 있는 시간을 0.8초로 잡고 개발하고 있는데, 리그레이의 이 공격이 딱 0.83초 째에 공격이 나간다. 실제로 해봐야 알겠지만, 지금은 좀 짧은 것 같기도 하다.
그리고 어떤 공격이든 히트하면 잡을 수 있다.
8.5
차원의 원 기술은 촉수가 튀어나와야 한다. 총 5군데를 묶어야 하므로 5개를 준비한다. 팔2개 다리2개 목1개.
수정에 수정을 거듭한 시행착오. 본이 적더라도 세그먼트가 많으면 부드럽게 나올 줄 알았는데 그건 구부러져 있을 경우의 이야기고, 아예 팽팽한 촉수를 표현하려면 오히려 세그먼트가 없어야 한다. 즉 딱 본을 쓴만큼 부드럽다. 최근에 하이폴리곤 캐릭터를 제작하다 보면, 확실히 로우폴리곤 리소스를 제작하는 것과는 차이가 있다는 것을 느낀다. 영상용이라면 이 위에 서브디비전등의 스무싱과정을 거치기 때문에 또 제작방식이 다를 것이다.
이제 덫에 걸리는 애니메이션을 만들고 이와 싱크를 맞춘 애니메이션을 제작해야 한다. 이 부분이 좀 까다로운데, 먼저 Empty를 만들어 해당 부위를 따라가게 한 후에, 애니메이션을 베이킹 해준다. 그리고 이것들을 다시 촉수파일로 가져가서 IK가 이를 쫓게 할 것이다.
IK는 위치만을 맞춰주기 때문에 회전애니메이션은 별개의 문제가 된다. 이제 이 애니메이션을 베이킹해서 촉수 모델 파일로 가져온다.
그리고 촉수의 애니메이션.
와.. 그냥 애니메이션 자체가 빡시다.
8.7
촉수는 별개의 .Blend파일로 제작되었고, 이에 따라 프레임 레이트가 기본값인 24fps로 설정되어 있었다. 뜻밖에도 이 프레임레이트는 익스포트 결과에 영향을 끼친다. 캐릭터가 30fps이고, 촉수가 24fps이므로 이것은 실제보다 느리게 재생된다. 따라서 이런 문제가 발생할 땐 30fps로 동일하게 맞춰주어야 한다.
중간 결과물. 아휴.. 아직 갈 길이 멀다.
일단 차원의 원셰이더를 제작. 이전에 도서관 레벨을 제작할 때 만들어둔 셰이더를 개량한다.
하지만 정작 게임을 해보니 지나치게 성능이 좋다. 방어가 소용없는 잡기라서 첫타를 막는다고 해도 콤보는 무조건 맞을 수밖에 없다. 때문에 딜레이를 주는 방식으로 변경하기로 하자.
8.9
촉수 기술에 관한 모든 게 어렵다. 촉수 리깅은 시간이 된다면 좀 더 심도깊게 파고들어야 할 주제같다. 흐물흐물 움직이기만 하면 상황이 좀 나을텐데, 캐릭터를 묶어야 한다는 부분에서 난이도가 매우 어려워진다. 이러면 IK를 사용해야 하고, Ik는 회전 애니메이션 처리가 영 깔끔하지 못하므로 FK와 IK를 나눠서 세팅을 해야 할까? 코드면에서 봐도 ‘장풍형 잡기’는 처음있는 유형이라 모두 예외처리를 하고 있다. 여러모로 까탈스러운 녀석이다.
잡기 딜레이와 원의 셰이더 처리도 끝내고
촉수의 셰이더를 개발하는데 Light가 제대로 들어오지 않는 현상이 있었다. 알고 보니 메뉴바에 Unlit, Shadow Draw Mode가 새로 추가된 것 같다. 원래 있었나…? 이게…
어쨌거나 셰이더도 완성. 차원과 그라데이션으로 연결이 되어야 하는 탓에 생각보다 꽤 복잡한 구조를 띈다.
이번엔 스테이지에 맞게 촉수의 명암색도 변해야 한다. 또한 촉수가 아래에 있다보니 메쉬가 컬링되는 현상이 있어 이도 보정해줘야 한다. 아휴… 뭐 이리 할 게 많아.
Skinned Mesh는 Update When Offscreen만 체크하면 컬링되지 않는다. 일반적인 스태틱 메쉬와 비교하면 쉬운 편.
이런 기술을 Argentine Backbreaker라고 한다.고 한다. 난 그냥 클라크 커맨드 잡기로 기억하고 있다. 아휴. 무릎나가겠다.
7.29
잡기 1완성. 생각보다 작업이 잘 풀리지 않아서 빡센 작업이었다. 확실히 한 번에 잘하는 것보다 기존의 작업을 수정하는 게 3배는 더 오래걸린다. 잘못된 데이터는 계속 그 자리에 남아 마치 조금만 더 하면 작업이 완성될 수 있을 것 같은 착각을 주지만 실제로는 기존의 오류를 수정하고 거기에 제대로 된 값을 넣는 이중작업이 된다.
잡기2의 구상은 원래 이거였다. 이 다음 쿄의 기술처럼 폭발이 일어날 예정이었는데, 특수효과가 들어가는 것이 너무 강하게 느껴졌기 때문에 이를 커맨드 잡기로 빼기로 했다.