更新。colon_fence 拡張追加

This commit is contained in:
ousttrue
2023-04-12 13:49:45 +09:00
parent 306fad4d49
commit 4e614faca4
2 changed files with 58 additions and 26 deletions

View File

@@ -1,21 +1,37 @@
# `v0.76` ITextureDeserializer(テクスチャーローダー)
このインタフェースを使うとテクスチャーロードをカスタマイズできます。
このインタフェースを使うと, glTF のテクスチャーロードして Unity の Texture2D を作成する工程をカスタマイズできます。
## UnityTextureDeserializer
UniVRM の実装は`UnityTextureDeserializer` です。
UniVRM が使用するデフォルトの実装は `UnityTextureDeserializer` です。
<https://github.com/vrm-c/UniVRM/blob/master/Assets/VRMShaders/GLTF/IO/Runtime/Texture/Importer/UnityTextureDeserializer.cs>
[ImageConversion.LoadImage](https://docs.unity3d.com/ja/2020.3/ScriptReference/ImageConversion.LoadImage.html) を使用して `png``jpeg` をロードできます。
通常の `glTF` はテクスチャー形式として `png``jpeg` を格納できます。
[ImageConversion.LoadImage](https://docs.unity3d.com/ja/2020.3/ScriptReference/ImageConversion.LoadImage.html) を使用して `png``jpeg` から Texture2D に変換します。
`ImageConversion.LoadImage` はメインスレッドをブロックします。
大きなテクスチャーや大量のテクスチャーをロードすると画面が固まることがあります。
:::{admonition} ITextureDeserializer でパフォーマンスを改善
Texture2D の生成には複数のステップがあります。
`png``jpeg` から `raw pixel` を取得する部分をスレッドに乗せて非同期処理にすることで
- `png``jpeg` から `raw pixel` を取り出す
- 取り出した `raw pixel` を使って `Texture2D` を作成する
前者をスレッドに乗せて非同期処理にすることで
パフォーマンスを向上させる余地があります。
:::
:::{warning}
`ImageConversion.LoadImage``raw pixel` 取り出しと `Texture2D` 作成を一度に実行し、
その間メインスレッドをブロックします。
大きなテクスチャーや大量のテクスチャーをロードすると画面が固まりやすくなります。
:::
:::{admonition} ITextureDeserializer で対応する画像形式を拡張する
通常の `glTF` はテクスチャー画像として `png``jpeg` を格納できます。
もし、`EXT_texture_webp` `KHR_texture_basisu` などで別の形式の画像を利用する場合は
`ITextureDeserializer` で対応可能です。
:::
## 差し替え方法
@@ -25,7 +41,7 @@ UniVRM の実装は、`UnityTextureDeserializer` です。
public ImporterContext(
GltfData data,
IReadOnlyDictionary<SubAssetKey, UnityEngine.Object> externalObjectMap = null,
ITextureDeserializer textureDeserializer = null, // 👈 これ
ITextureDeserializer textureDeserializer = null, // 👈
IMaterialDescriptorGenerator materialGenerator = null)
```
@@ -35,7 +51,7 @@ UniVRM の実装は、`UnityTextureDeserializer` です。
public VRMImporterContext(
VRMData data,
IReadOnlyDictionary<SubAssetKey, Object> externalObjectMap = null,
ITextureDeserializer textureDeserializer = null, // 👈 これ
ITextureDeserializer textureDeserializer = null, // 👈
IMaterialDescriptorGenerator materialGenerator = null,
bool loadAnimation = false)
```
@@ -46,7 +62,7 @@ UniVRM の実装は、`UnityTextureDeserializer` です。
public Vrm10Importer(
Vrm10Data vrm,
IReadOnlyDictionary<SubAssetKey, UnityEngine.Object> externalObjectMap = null,
ITextureDeserializer textureDeserializer = null, // 👈 これ
ITextureDeserializer textureDeserializer = null, // 👈
IMaterialDescriptorGenerator materialGenerator = null,
bool useControlRig = false
)