본문 바로가기

잡담

pmm 파일

MMD 쓸때 이런 기능이 있었으면 참 좋겠다~ 싶을때가 종종 있는데


대표적인게 프로젝트에 걸려있는 리소스를 확인해주는 기능입니다.

모델이라던가 악세사리 스테이지 등등 집어넣다 보면 이걸 어디서 불러온 건지 가물가물할 때가 많아요.


이런 부분을 도와주는 툴들이 없는건 아닙니다.

구버전 PMD 에디터에 포함된 PmmSpliter 플러그인 이라던가, PmmArchiver / PmmConverter 같은것도 있고

pmm 파일에서 모션을 뽑아주는 PmmDump도 있네요.


pmm 파일은 포맷이 공개된게 아니라서 사용자들이 분석해다가 알아서 쓰는 형편인데,

MMD가 9.0 으로 버전업 하면서 외부 IK기능이 붙었을 당시 pmm 파일 포맷도 버전업이 있었거든요.

그래서 기존에 쓰던 툴들이 다 무용지물이 되고

지금 쓸 수 있는 툴은 버전업을 따라간 PmmDump 하나뿐으로 알고 있습니다.

그나마 이 툴은 '어느 파일이 어디에 숨어있는지' 파악하는 용도로는 쓰지 못한다는 거죠.


방법이 없을까 여기저기 뒤져보다가 pmm 버전2 파일 포맷 분석이 담긴 글을 봤는데

이 정도 자료가 있으면 간단한 툴은 만들 수도 있겠다 싶더란 말이죠



일단 생각난 김에 관련 자료를 여기 적어둡니다.



1) 헤더


Field

 자료형

 크기 (byte)

 비고

 FormatID

 C String

 30

 Polygon Movie maker 0002\0

 ViewWidth

 Int32

 4

 출력영상 가로 해상도

 ViewHeight

 Int32

 4

 출력영상 세로 해상도

 FrameWidth

 Int32

 4

 프레임 작업창 폭

 ViewAngle

 Int32

 4

 시야각

 ?

 byte[7]

 7

 ?



2) 모델 갯수


Field

 자료형

 크기 (byte)

 비고

 ModelCount

 byte

 1

 최대 255개?



2-1) 모델 헤더


 Field

 자료형

 크기 (byte)

  비고

 ModelNo

 byte

 1

 모델 번호 (0부터)

 ModelNameJP

 VString

 가변

 모델명 (일어)

 ModelNameEN

 VString

 가변

 모델명 (영문)

 ModelPath

 C String

 256

 모델 파일 경로

 ?

 byte

 1

 ?

 BoneCount

 Int32

 4

 본 갯수

 BoneNames

 VString[BoneCount]

 가변 * BoneCount

 본 이름이 본 갯수 만큼 반복

 SkinCount

 Int32

 4

 모프 갯수

 SkinNames

 VString[SkinCount]

 가변 * SkinCount

 모프 이름이 모프 갯수만큼 반복

 IKCount

 Int32

 4

 IK 갯수

 IKIndex

 Int32[IKCount]

 4 * IKCount

 IK 본 번호가 IK 갯수만큼 반복

 OPCount

 Int32

 4

 외부 부모 타겟이 가능한 본 수

 OPIndex

 Int32[OPCount]

 4 * OPCount

 외부 부모 대상의 본 번호가 OPCount만큼 반복

 ?

 byte

 1

 모델의 묘화 순서?

 Display

 bool

 1

 편집중 표시

 SelectedBone

 Int32

 4

 편집중인 본

 SkinPanel

 Int32[4]

 16

 표정 패널(눈썹 눈 입술 기타)

 FrameCount

 byte

 1

 표시범위 수

 FrameOpen

 bool[FrameCount]

 1 * FrameCount

 표시 범위의 전개 사항

 ?

 Int32

 4

 무언가의 프레임 번호?

 LastFrame

 Int32

 4

 마지막 프레임 번호



2-2) 본 초기 프레임

2-3) 본 키 프레임

2-4) 모프 초기 프레임

2-5) 모프 키 프레임

2-6) 표시/IK/외부부모 초기 프레임

2-7) 표시/IK/외부부모 키 프레임

2-8) 본 상태

2-9) 모프 상태

2-10) IK/외부부모 상태

2-11) 종단 // 00 00 00 80 3F 01 ?? : ?? 부분은 01부터. 이 문자열을 기준으로 모델 데이터의 경계를 잡는다


3) 카메라

3-1) 카메라 초기 프레임

3-2) 카메라 키 프레임

3-3) 카메라 상태





나머지는 나중에