あれフォーマット雑多

2023年12月17日。2024/1/1 修正
Little バイナリフォーマット。文字列型: u32 UTF-8本体バイト数、UTF-8本体。
1430バイト: magic
f32: 1.0
u8: 0x01
str: モデル名(ja)
str: モデル名(en)
f32: 30[fps]
u8x14: 0x00
u32: N個 0x00000264
u32: 0
N個
u32: 0, 1, 2, 3, ...
str: クリップ名、ボーン名、表情名
A82h: 0x98- まだ続く
291Eh: No. 0x263 名称
2938h:
u32: 0x0128(=296)
以降 str 無しでデータが並んでいて 38or60バイト周期ぐらい
u8: hex で 00 01 00 00 10 03 02 00 00 00 3C 00 00 00 02 00
60バイト
u8x4: 00 01 00 00
u32: 0
u32: フレーム番号
u32: 0
f32x3: 位置 0, 0, 0
f32x4: 回転 0, 0, 0, 1
u8: hex で 14 14 6B 6B x4組 多分 RXYZ ((20,20)-(107,107)) 一番上が 0x7F(=127)
D2h: 0x3C 60バイトが 3つ。8バイトが1つ??

6B 6B
00 01 00 00
40
03 02 00 00 00
24 00 00 00: 36??
03 00 00 00: 3フレーム分
08 00 00 00
00 00 00 00
01 00 00 00
u32: 0
00 00 00 00
00 00 01加算合成 00 01静止 00 00 00
f32: 0.1
ff, RGB
f32: 10
00 00 00 00
ff ff ff ff
ff ff ff ff
u32: 6
00 00 00 00
01 01 01 01 01 00 00 00
f32: 0.6
ff
RGB
f32: 6.0
00 00 00 00
FF FF FF FF
FF FF FF FF
u32: フレームNo. 9
00 00 00 00
01 01 01 01 01フラグ 00 00 00
f32: エッジ(太さ) 0.9
u8: ff
u8x3: エッジカラーRGB 12, 34, 56
f32: 大きさ 9.0
00 00 00 00
ff ff ff ff
ff ff ff ff
ff, 00

2024-01-29: 3: IEEE Float で格納されている。

ボーンA -> ボーンB(動的物理) -> ボーンC -> ボーンD のとき、
CとDを物理後にする。レイヤー番号は 0 のままでよい。

2024-05-06:
例: X軸赤が親ボーンへ向く。Y軸はまちまちで下へ下げるとひじを曲げる。
Z軸は上記を満たす方に決まる。
例: 頭。そのまま。
例: 膝。X軸下げるとひざを曲げる。Y軸は先にのびる。左右同じ。

2024-06-01: bezier カーブで近似する
円弧を近似
┌0, 70, 57, 127
┘70, 0, 127, 57
t=1/2のとき,1/√2, 1/√2を通るとすると

2024-06-02: bezier カーブで近似する
sinカーブの1/4をざっくり近似
┌42,66, 80,127
┘47,0, 86,61
u=1-tとする。あるvのとき、x=1/3, y=1/2を通るとする。w=1-vとする。k, b で式を立てる。
解けそうだけどめんどそう。
一旦置いといて、3次曲線の一部で近似しようとすると(0, 0)の傾きは π/2 = 1.570... からどれだけずれるか?
x = 1 のときに傾きを 0 にしたいので q = √3, x = 1 のとき y = 1 にしたいので p = 1/2
x=0での傾きは 1.5
5%弱
a=0, b=1/3, c=2/3, d=1 のとき、t になる。84, 127

2024-06-01: bezier近似続き
tで2回微分した後にdy^2/dx^2が加速度になるのが正しい場合にt=0で加速度が正から負になるようなbを求めると (1/π, 1/2)
127に対しては 40,64 (適当に探した値にも近い)。87, 63

2024-06-03, 2025-02-17: bezier近似続き
最後のcについては2/3より小さく補正していくと
だいたい0.6346ぐらいが誤差が小さい。81, 127
┌40, 64, 81, 127 と ┘46, 0, 87, 63
t=0.5のときにsin(x)が11/16になるxから逆算してみても0.635ぐらいだったがどっちにせよ127に対して81になる。
1,2 はそのまま。
3,4 が三角関数の1/4で ┌40, 64, 81, 127 と ┘46, 0, 87, 63
5,6 が円の1/4で ┌0, 70, 57, 127 と ┘70, 0, 127, 57
あたりか。

2024-09-16: ローカル軸の順番確認。
多分 gX -> gY(lX), gZ -> gY(lZ), gZ -> gX(lZ)
global Z -> global X -> global Y

2024-12-01: Little Endian Shift_JIS null止めパディング。
層構造は無く大量に一列に並ぶ。
magic: 30バイト
name: 20バイト
ボディはキー情報6種類。
- ボーンキー個数:
name: 15バイト
u32: フレーム番号
x,y,z, qx,qy,qz,qw: float
u8: 64個
64個は変な感じだが、
16個の後ろに 0x01 0x00 0x00 0x00 を追加した20バイトに対して
+0, +1, +2, +3バイトオフセットしたものを16バイトずつ書き出した感じ。
-
モーフキー個数:
name: 15バイト
u32: フレーム番号
weight: 0.0~1.0 -
カメラキー個数:
u32: フレーム番号
distance:
tx,ty,tz, rx, ry, rz: rad
u8: 24個
u32: 視野角 deg
u8: 0: perspective, 1: ortho -
ライトキー個数:
u32: フレーム番号
r,g,b, x,y,z: 0.0~1.0と位置 -
セルフシャドウ個数:
u32: フレーム番号
u8:
distance: -
モデル表示個数:
u32: フレーム番号
u8: モデル表示 0: off, 1: on
u32: IK個数
20バイト: name
u8: 0: IK off, 1: IK on

1,2,5: よく使う
3: 当てられる
4: 当てる
5-8: 当てない
9-12: 当てる