User:Kisaragi marine/resonitepackage: Difference between revisions

From Resonite Wiki
Created page with "ResonitePackage というパッケージ方式がある。この形式はUnityでデファクトスタンダードとなっているunitypackageのように、brsonとは異なる後方互換性が担保されたフォーマットになっている。 しかし、それを外部から読みたいこともあるだろう。そこで、構造を調査したメモを書き留めておく。 パッケージはZIPファイルで圧縮され..."
 
m reformat
Tag: 2017 source edit
 
Line 1: Line 1:
== 概要 ==
[[ResonitePackage]] というパッケージ方式がある。この形式はUnityでデファクトスタンダードとなっているunitypackageのように、[[User:Kisaragi marine/brson|brson]]とは異なる後方互換性が担保されたフォーマットになっている。
[[ResonitePackage]] というパッケージ方式がある。この形式はUnityでデファクトスタンダードとなっているunitypackageのように、[[User:Kisaragi marine/brson|brson]]とは異なる後方互換性が担保されたフォーマットになっている。
しかし、それを外部から読みたいこともあるだろう。そこで、構造を調査したメモを書き留めておく。
しかし、それを外部から読みたいこともあるだろう。そこで、構造を調査したメモを書き留めておく。


パッケージはZIPファイルで圧縮されている。ルートディレクトリに`R-Main.record`というファイルがあるのでそれを読む。`R-Main.record`は[[User:Kisaragi marine/record|Cloud Record]]だが、ここで関心があるのは`assetUri``assetManifest`という2つのフィールドだ。
== 形式 ==
`assetUri``packdb`という`resdb``resrec`**ではない**URIスキーマになっているはずだ。これはパッケージの内部に存在するルートオブジェクトのハッシュを表示している。例えば、`packdb:///my_main_object`ならパッケージの中に`my_root_object`というハッシュで一位に定まるアセットが存在するはずだ (注: 実際のハッシュは16進数である。以下同様)。
パッケージはZIPファイルで圧縮されている。ルートディレクトリに<code>R-Main.record</code>というファイルがあるのでそれを読む。<code>R-Main.record</code>は[[User:Kisaragi marine/record|Cloud Record]]だが、ここで関心があるのは<code>assetUri</code><code>assetManifest</code>という2つのフィールドだ。
`assetManifest`は当該パッケージが含むアセットを列挙する。具体的には以下の2つのプロパティを持つオブジェクトの配列だ:
<code>assetUri</code><code>packdb</code>という<code>resdb</code><code>resrec</code>**ではない**URIスキーマになっているはずだ。これはパッケージの内部に存在するルートオブジェクトのハッシュを表示している。例えば、<code>packdb:///my_main_object</code>ならパッケージの中に<code>my_root_object</code>というハッシュで一位に定まるアセットが存在するはずだ (注: 実際のハッシュは16進数である。以下同様)。
* `hash`: アセットのハッシュ。
<code>assetManifest</code>は当該パッケージが含むアセットを列挙する。具体的には以下の2つのプロパティを持つオブジェクトの配列だ:
* `bytes`: アセットのバイト数。
* <code>hash</code>: アセットのハッシュ。
* <code>bytes</code>: アセットのバイト数。


`assetUri``packdb`スキームをメモしたら、パッケージに戻って`/Assets/`を見る。そうするとアセットがずらっと並んでいるだろう。今用事があるのは`/Assets/my_root_object`なのでそれを見る。ルートオブジェクトは[[User:Kisaragi marine/brson|Data Tree Dictionary]]が書き出したものなので、いい感じに解凍する。
<code>assetUri</code><code>packdb</code>スキームをメモしたら、パッケージに戻って<code>/Assets/</code>を見る。そうするとアセットがずらっと並んでいるだろう。今用事があるのは<code>/Assets/my_root_object</code>なのでそれを見る。ルートオブジェクトは[[User:Kisaragi marine/brson|Data Tree Dictionary]]が書き出したものなので、いい感じに解凍する。


URIが`@packdb:///my_referenced_asset`のようにvalidではないURIになっていたら、先頭の`@`をちぎる。その後、`/Assets/my_referenced_asset`を見る。
URIが<code>@packdb:///my_referenced_asset</code>のようにvalidではないURIになっていたら、先頭の<code>@</code>をちぎる。その後、<code>/Assets/my_referenced_asset</code>を見る。
アセットは大概[[Component:StaticTexture2D|`StaticTexture2D`]]から参照されているPNGか、[[Type:MeshX|MeshX]]と呼ばれるメッシュ情報だろう。他にも[[Type:AudioClip|AudioClip]]などがあるかもしれない。
アセットは大概[[Component:StaticTexture2D|<code>StaticTexture2D</code>]]から参照されているPNGか、[[Type:MeshX|MeshX]]と呼ばれるメッシュ情報だろう。他にも[[Type:AudioClip|AudioClip]]などがあるかもしれない。


注釈: [[Type:MeshX|MeshX]]の頂点情報はLZ4またはLZMAで圧縮されている。
注釈: [[Type:MeshX|MeshX]]の頂点情報はLZ4またはLZMAで圧縮されている。

Latest revision as of 15:26, 9 November 2024

概要

ResonitePackage というパッケージ方式がある。この形式はUnityでデファクトスタンダードとなっているunitypackageのように、brsonとは異なる後方互換性が担保されたフォーマットになっている。 しかし、それを外部から読みたいこともあるだろう。そこで、構造を調査したメモを書き留めておく。

形式

パッケージはZIPファイルで圧縮されている。ルートディレクトリにR-Main.recordというファイルがあるのでそれを読む。R-Main.recordCloud Recordだが、ここで関心があるのはassetUriassetManifestという2つのフィールドだ。 assetUripackdbというresdbresrec**ではない**URIスキーマになっているはずだ。これはパッケージの内部に存在するルートオブジェクトのハッシュを表示している。例えば、packdb:///my_main_objectならパッケージの中にmy_root_objectというハッシュで一位に定まるアセットが存在するはずだ (注: 実際のハッシュは16進数である。以下同様)。 assetManifestは当該パッケージが含むアセットを列挙する。具体的には以下の2つのプロパティを持つオブジェクトの配列だ:

  • hash: アセットのハッシュ。
  • bytes: アセットのバイト数。

assetUripackdbスキームをメモしたら、パッケージに戻って/Assets/を見る。そうするとアセットがずらっと並んでいるだろう。今用事があるのは/Assets/my_root_objectなのでそれを見る。ルートオブジェクトはData Tree Dictionaryが書き出したものなので、いい感じに解凍する。

URIが@packdb:///my_referenced_assetのようにvalidではないURIになっていたら、先頭の@をちぎる。その後、/Assets/my_referenced_assetを見る。 アセットは大概StaticTexture2Dから参照されているPNGか、MeshXと呼ばれるメッシュ情報だろう。他にもAudioClipなどがあるかもしれない。

注釈: MeshXの頂点情報はLZ4またはLZMAで圧縮されている。