Skip to content

Sprint3[Gwak]

Heedong Lee edited this page Mar 1, 2015 · 1 revision

2015-02-27 작업 일지

Animation Blending을 자연스럽게 구현하기

  • [내일 해야 할것]

  • Animation Blending 마무리 수정.

  • (이후)게임 내 UI 작업. (스킬창, 인벤토리 등)

  • [오늘 완료 못한 것]

  • 일반적 형태의 Blending 동작안함.

  • [작업 결산]

  • 동작이 변할 때 이전 동작의 Track(애니메이션 트랙)의 Weight(가중치)를 보존해서 블렌딩 하는 방식(CONTINUE WEIGHT) 구현.

  • [특이사항]

  • 동작이 변할 때 이전 동작의 Track(애니메이션 트랙)의 Position(동작 진행도)를 보존해서 블렌딩 하는 방식(FREEZE POSITION) 방식은 공격/스킬이 다 구현되면 추가할 예정.

  • 동작이 진행중인데 현재 동작과 같은 동작으로 변환하려는 시도는 무시한다.

  • [생각]

  • 작업 능률을 더 올리자. 더 빨리! 더 많이!


2015-02-26 작업 일지

1. 중요한 3부위에만 바운딩스피어를 씌워 좌표와 반지름을 계산해서 사용할 수 있게 반환하기

2. Animation Blending을 자연스럽게 구현하기

  • [내일 해야 할것]

  • Animation Blending 프레임워크에 직접 구현.

  • (이후)게임 내 UI 작업. (스킬창, 인벤토리 등)

  • [오늘 완료 못한 것]

  • 작업 프레임워크 위에서 직접 동작하지는 못했다.

  • [작업 결산]

  • 캐릭터의 중요3부위(FxTop, FxCenter, FxBottom)에 바운딩스피어를 계산하고, 그리고, 반환했다.

  • (요약)Animation Blending Weight 조절

  • (상세)①대기->②이동->③대기 와 같은 동작을 매우 빠르게 진행했을 경우, 단순히 새 Track(애니메이션 트랙)의 Weight(가중치)를 0, 밀려나는 Track의 Weight를 1로 두고 보간한 결과를 보면 ②~③ 사이에 이동 동작이 아직 초반을 진행하고 있음에도 불구하고 다시 이동 동작이 새 Track이 되어버려서 Weight가 최대부터 감소하는 모습이 된다. 그래서 캐릭터의 동작이 블렌딩을 했음에도 불구하고 탁탁 끊기는 모습을 관찰 할 수 있다. 이러한 부분을 Weight를 밀려나는 Track에 그대로 전달해 주고, 새 Track의 Weight를 (1-밀려난Weight)로 정해주어 해결했다.

  • 위의 내용은 캐릭터의 급하지 않은 동작을 처리하는덴 자연스럽고 합리적이나, 일반공격/스킬/회피/감정표현 같은 동작에서는 합리적이지 못하다. 특히, 플레이어가 조작한 일반공격/스킬과 같은동작은 발동되면 어떠한 순간에도 원형 그대로 표현되어 언제나 항상 같은 모습일것이라는 신뢰와, 조작이 성공되었다는 연출을 또렷이 보여줘야 한다. 그래서 일반공격/스킬이 발동되면 구별하여 블렌딩을 하지 않도록 했다.

  • 위의 내용들에 또 다른 이슈가 있다. 회피와 같은 동작마저 블렌딩을 하지 않으면 플레이어는 블렌딩을 경험할 기회가 적어서 캐릭터의 자연스러운 동작연계를 느끼지 못할 것이다. 그래서 회피같은 동작은 새 Track으로 넘어올때 밀려난 Track의 Animation Position(애니메이션의 진행도)를 고정해서 더이상 애니메이션이 진행되지 않도록 한 상태에서 이 상황과 Weight를 보간한다. 그러면 정말 '하던것을 즉시 중지하고 회피한다'는 느낌을 줄 수 있을 것이다.

  • [특이사항]

  • [생각]

  • 캐릭터의 움직임을 제어하는 것은 정말 재미있는 일이다.


2015-02-25 작업 일지

캐릭터 Biped마다 바운딩 스피어를 씌우고 그것을 컨테이너로 반환 가능하게 만든다

  • [내일 해야 할것]

  • (예상)Animation Blending

  • (예상)게임 내 UI 작업. (스킬창, 인벤토리 등)

  • [오늘 완료 못한 것]

  • (GitHub)내 코드를 커밋하자 Conflict(충돌)이 나서 Merge(합치기)를 하다 도저히 안되겠어서 결국 내 코드를 다른곳에 복사한 뒤, 로컬의 프로젝트를 완전히 삭제하고 새로 클론받은다음 내 코드를 추가해 나갔다. 처음으로 겪어본 코드 충돌인데 생각보다 더 골치아팠다.

  • 컨테이너로 반환된 바운딩스피어의 중점을 매프레임 갱신하게 하는 것.

  • [작업 결산]

  • (3DMax)인간형이 아닌 몬스터 모델링을 살펴보고 Bone의 구조를 인지했다. 너무 Bone 구조가 단순한 몬스터(ex.눈사람)는 아예 없는 Bone이 많았고, 사람과 말을 합쳐놓은 형태의 켄타우로스같은 경우, Bone의 배치가 인간형과 달랐다. 이러한 모델링은 좀 다른 세부적인 처리가 필요할 것이다. 아니면 피하든지.

  • 1차 충돌검사에 쓰일 수 있는 FxCenter라는 Bone을 기준으로 캐릭터를 완전히 감싸는 바운딩스피어를 구하고 렌더링했다.

  • 캐릭터의 모든 Bone을 순회해서 바운딩스피어로 충돌 범위를 구하고 렌더링했다.

  • [특이사항]

  • [생각]

  • 협업을 하면서 남의 코드 보는 방법이 점점 익숙해져가는 느낌이다.

  • 밥도 한끼만 먹고 잠만자고 코딩만 하니 멘탈이 상하는 느낌이다. 해결책을 찾아보자!

  • 위키가 점점 길어진다. 중요한 요약만 쓸 수 있게 하자.


2015-02-24 작업 일지

캐릭터에게 바운딩 스피어를 씌우고 그것을 이용한 충돌체크

  • [내일 해야 할것]

  • 충돌체크용 바운딩 스피어 계산부분을 프레임워크의 데이터 흐름에 맞춰 계산해내야 한다.

  • (지속)프레임워크의 데이터 흐름을 이해하고 적응해야 한다.

  • [오늘 완료 못한 것]

  • (3DMax)캐릭터 애니메이션을 트랙별로 구분해서 합치기.

  • 조작가능한 객체간 바운딩 스피어 주인 구분.

  • 조작가능한 객체간 바운딩 스피어 충돌 판별.

  • 프레임워크속 바운딩 스피어 렌더링.

  • 생성된 바운딩 스피어를 프레임워크속에서 소화해내기.

  • [작업 결산]

  • (3DMax)캐릭터 모델링 및 단일 애니메이션 추출은 확실히 가능하다.

  • Mesh의 VertexBuffer를 잠그고(Lock) Vertex를 읽어와서 D3DXComputeBoundingSphere()로 바운딩 스피어(Sphere)를 계산 했다. (GetNumBytesPerVertex()로 Stride를 구할 수 있다)

  • 캐릭터의 애니메이션에 따라서 눈에 보이는 바운딩 스피어 Mesh를 Scailing해서 바운딩 스피어의 크기변화를 확인할 수 있게 했다.(첫 프레임의 Mesh를 기준으로 바운딩 스피어의 반지름이 변할 때 마다 (변한 반지름/첫 프레임 반지름)의 값으로 Scailing 했다)

  • [특이사항]

  • 캐릭터 Body Mesh의 바운딩 스피어가 기대보다 크다. 목이나 머리의 Biped까지 Body Mesh의 범위인 것 같다.

  • [생각]

  • 좀 더 큰 것을 생각하는 버릇을 가져보자.


2015-02-17 ~ 2015-02-23 2015 설 연휴


2015-02-16 작업 일지

리소스 추출및 몸통/머리 조립 작업

  • [내일 해야 할것]

  • 흩어져 있는 애니메이션 정보를 필요한 것만 정리해서 파일 하나에 합쳐야 한다.

  • [오늘 완료 못한 것]

    • 프레임워크에 바로 추가할 수 있는 코드로는 아직이다.
  • [작업 결산]

  • 서로 다른 스키닝메쉬끼리 각각 제위치에서 자연스럽게 한 덩어리처럼 동작하게 만들었다.

  • 원하는 Biped를 소유하고 있는 Frame 검색 성공.

  • 검색된 Frame의 Transform 정보를 가져와서 다른 Biped의 위치로 배치 성공.

  • [특이사항]

  • 종족마다, 신체 부위마다 추출할 때 정해줘야 하는 YawPitchRoll 각도가 다른것 같다. 3dMax에서 맞춰서 추출 한다.

  • Animation 되기 전의 로컬YawPitchRoll 각도와 Animation이 될때의 각도가 차이가 난다. Animation 기준으로 맞춰서 추출해야한다.

  • 휴먼 여캐는 각 부분이 거의 완벽하게 배치된 것 같은데, 엘린 여캐는 목부분에 틈이 살짝 보이고 머리가 실제 게임과는 높이가 다르다. 왜 그럴까...?

  • [생각]

  • 따로 배치한 얼굴과 머리는 (특히 얼굴과 몸이 연결된 목) SkinningAnimation이 적용 되지 않을 것 같다.

  • 무기는 SkinningAimation에 독립적인게 정상일 것 같다.


2015-02-14 작업 일지

리소스 추출및 몸통/머리 조립 작업

  • [내일 해야 할것]

  • 서로 다른 스키닝메쉬끼리 뭉쳐서 자연스럽게 한 덩어리로 동작하게 만들기.

  • 원하는 Biped를 소유하고 있는 Frame 검색

  • 검색된 Biped의 Transform 정보를 가져오기.

  • [오늘 완료 못한 것]

    • 'X'File의 프레임별 바이패드 검색
  • [작업 결산]

  • (3DMax) Face의 Root를 발견했다.

  • (3DMax) Body에서 Face와 연결할것으로 추정되는 Biped를 발견했다.

  • (3DMax) Biped끼리 연결하는 방법을 알았다.

  • (3DMax) Biped정보가 유사하면 다른 모델링끼리 애니메이션이 공유될수도 있다는 것을 알았다.

  • [생각]

  • 원하는 Biped를 찾아서 해당 프레임의 정보를 받아서 그 곳을 기준으로 뭔가 부착 할 수 있다면 얼굴, 머리카락, 무기, 파티클 모두가 같은 원리로 구현될 수 있을것 같다.


2015-02-13 작업 일지

리소스 추출및 몸통/머리 조립 작업

  • [내일 해야 할것]

  • 서로 다른 스키닝메쉬끼리 뭉쳐서 자연스럽게 한 덩어리로 동작하게 만들기.

  • [오늘 완료 못한 것]

    • 알맞은 NPC캐릭터(머리가 붙어있는, 엘리온 쿠벨)의 위치가 다른 무기 삭제.
  • [작업 결산]

  • 설 연휴를 대비해 고향으로 내려왔다. (서울->경남)

  • 초기화한 운영체제에 개발툴들을 작업이 가능하게끔 세팅완료했다.

  • 3DMax에서 리소스를 조작해보다가 얼굴과 머리의 위치 정보 힌트를 얻었다.

  • 이 위키를 작성하는 법을 익히다.

  • [생각]

  • 메쉬를 합치는게 아니라, 몸과 머리가 각각의 위치에서 같은 애니메이션이 동작하면 되는것 같다.

  • 정 안되면 이미 몸+머리가 조합되어 있는 NPC위주로 노려볼수도 있을 것 같다.

  • (하지만 무기가 애매하고, 비중있는 NPC여야 애니메이션이 많다.)


Clone this wiki locally