Open12

あれフォーマット雑多

ウサギウサギ

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

ウサギウサギ

ボーン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を通るとすると

\frac{0+3 \cdot k+3 \cdot 1+1}{8} = \frac{1}{\sqrt{2}}
\frac{1+3 \cdot 1+3 \cdot k+0}{8} = \frac{1}{\sqrt{2}}
k = \frac{4}{3}(\sqrt{2}-1) \fallingdotseq 0.55228 \dotso
ウサギウサギ

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 で式を立てる。

0 \cdot w^3+3b \cdot w^2 \cdot v +3 \cdot (1 - k) \cdot w \cdot v^2 + 1 \cdot v^3 = \frac{1}{3}
0 \cdot w^3+3b \cdot \frac{\pi}{2} \cdot w^2 \cdot v +3 \cdot w \cdot v^2 + 1 \cdot v^3 = \frac{1}{2}

解けそうだけどめんどそう。
一旦置いといて、3次曲線の一部で近似しようとすると(0, 0)の傾きは π/2 = 1.570... からどれだけずれるか?

y = -p(x + q) \cdot x \cdot (x - q)

x = 1 のときに傾きを 0 にしたいので q = √3, x = 1 のとき y = 1 にしたいので p = 1/2

y = -1/2 \cdot (x+√3) \cdot x \cdot (x-√3) = -\frac{1}{2}(x^3 - 3x)
y' = \frac{3}{2}(-x^2+1)

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種類。

  1. ボーンキー個数:
    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バイトずつ書き出した感じ。

  1. モーフキー個数:
    name: 15バイト
    u32: フレーム番号
    weight: 0.0~1.0

  2. カメラキー個数:
    u32: フレーム番号
    distance:
    tx,ty,tz, rx, ry, rz: rad
    u8: 24個
    u32: 視野角 deg
    u8: 0: perspective, 1: ortho

  3. ライトキー個数:
    u32: フレーム番号
    r,g,b, x,y,z: 0.0~1.0と位置

  4. セルフシャドウ個数:
    u32: フレーム番号
    u8:
    distance:

  5. モデル表示個数:
    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: 当てる