.vroid(VRoid Studioドキュメントファイル)を解体してみる その1.PNGファイルとレイヤー情報の抽出
この佐世がhair_presetsの合成で飽き足りるわけがないわけです。ワハハ。実は.vroidを書き出す(VRoid Studioで読めるフォーマットで構成)するうえで最難関のbinファイルなんかも実はそれなりに解析してるんですが、それはまた次の機会にでも。
SQLiteデータベースの中身を取り出したい
textures.sqlite3をロードして、以下のSELECT文を実行してください。
SELECT
canvas_id,
layer_order.order_index,
layer_info.name,
layer_info.composition_mode,
ROUND(layer_info.opacity * 100, 1) AS opacity,
layer_info.is_visible,
raster_layer_content.data AS layer_data -- データ本体
FROM layer_order
LEFT JOIN layer_info
ON layer_info.id = layer_id
LEFT JOIN raster_layer_content
ON raster_layer_content.id = layer_id
WHERE is_reference = 0
AND is_visible = 1
ORDER BY
canvas_id,
order_index
こんな感じでデータが出てきます。
layer_data(上の画像ではプレースホルダー文字列BLOBと表示されています)の実体はPNGファイルなのですが、上下反転した状態になっていますのでご注意。なぜ反転しているのかと言うと、私にはよくわかりませんが、作った人の考えだと思います。ImageMagickかなんかで一括変換してやるとよさそうですね。
・キャンバスIDについて
SELECT文の結果をみるとcanvas_idで固定文字列っぽいものが入っているののがわかります。よくみるとIDの振り方が3通りあることがわかります。
・UUID形式のキャンバスIDについて
現状へアプリセットに割り当てられている様です。rendered_texturesの下のPNGファイルはこのUUIDに紐づいています
・specific:{UUID}.textures形式のキャンバスIDについて
肌(胴体)とか衣装みたいな1つの.vroidファイル内に複数持てるデータに格納されています。rendered_texturesの下のPNGファイルもこのUUIDに紐づいています。
・固定文字列のキャンバスIDについて
顔を構成する8つのパーツは下記の通りの固定のIDが振られています。
Face_Skin-Color
Face_Mouth-Color
Face_Eyeline-Color
Face_EyeWhite-Color
Face_EyeLash-Color
Face_EyeIris-Color
Face_EyeHighlight-Color
Face_EyeBrow-Color
この顔パーツには別途UUIDも割り振られていて、clothing_editor/clothing_defs.bin.json の中にそのUUIDの定義があります。rendered_texturesの下のPNGファイルはこのUUIDに紐づいています。
composition_modeについて
よく調べていないのですが、各合成モードのドロップダウンリストの項目に対応しているような気がします(0番が通常モード)。
この記事が気に入ったらサポートをしてみませんか?