見出し画像

.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

こんな感じでデータが出てきます。

スクリーンショット 2020-08-02 23.56.11

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番が通常モード)。

この記事が気に入ったらサポートをしてみませんか?