mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-08-22 18:45:06 -05:00
更新。colon_fence 拡張追加
This commit is contained in:
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user