Skip to content

Commit

Permalink
Merge pull request #38 from vrm-c/merge/20240523
Browse files Browse the repository at this point in the history
Merge/20240523
  • Loading branch information
ousttrue authored May 23, 2024
2 parents 58b6765 + 562cc20 commit c6156f0
Show file tree
Hide file tree
Showing 11 changed files with 332 additions and 73 deletions.
20 changes: 20 additions & 0 deletions docs/api/editor-import/vrm0x.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# VRM-0.x の EidtorImport 動作

[vrmAssetPostprocessor](https://github.com/vrm-c/UniVRM/blob/master/Assets/VRM/Editor/Format/vrmAssetPostprocessor.cs) を起点に、
vrm の prefab を生成します。

:::info
`alicia.vrm` から `alicia.prefab` を生成します。
:::

## step1

[TextureExtractor](https://github.com/vrm-c/UniVRM/blob/master/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/TextureExtractor.cs) で texture の画像ファイルを書き出します。

## step2

prefab を構築します。

:::info 調査中
[\[URP\] UrpでVrm0のEditorImportがエラーになる · Issue #2286 · vrm-c/UniVRM · GitHub](https://github.com/vrm-c/UniVRM/issues/2286)
:::
1 change: 1 addition & 0 deletions docs/api/editor-import/vrm10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# GLTF / VRM-1.0 の EidtorImport 動作
98 changes: 98 additions & 0 deletions docs/api/runtime-import/import_basisu.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# v0.122 KHR_texture_basisu 拡張対応

:::warning これは実験的機能です
:::

[KHR_texture_basisu 拡張](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_basisu/README.md) に対応する機能です。

KHR_texture_basisu 拡張を使用した glTF / VRM ファイルを用意することで、実行時ロードと描画の効率化が図れます。

## 対応するモデルと環境

モデルファイルに含まれる KTX basisu テクスチャは、予め上下反転しておく必要があります。

| | Editor Import | Runtime Import |
| --- | --- | --- |
| 通常のテクスチャ | - | TBD |
| 上下反転したテクスチャ | - ||

:::warning
Unity は内部的にすべてのテクスチャを上下反転しています。
したがって Runtime に圧縮テクスチャをインポートしようとした場合、上下反転した状態で圧縮しておくのが効率的です。
ただし上下反転した状態では glTF として正しい状態にはならないため、Unity 以外のツールでの利用には注意が必要です。

- https://docs.unity3d.com/Packages/com.unity.cloud.ktx@3.4/manual/creating-textures.html
- https://github.com/atteneder/KtxUnity/issues/18
:::

## 導入方法

### 1. KTX for Unity パッケージを導入
[KTX for Unity](https://docs.unity3d.com/Packages/com.unity.cloud.ktx@3.4/manual/index.html) パッケージが必要です。
[パッケージ公式の導入方法](https://docs.unity3d.com/Packages/com.unity.cloud.ktx@3.4/manual/get-started.html) に従ってインストールしてください。

:::note
UniVRM は KTX for Unity パッケージの存在を検知して、自動的に対応コードを有効化します。
具体的には [`USE_COM_UNITY_CLOUD_KTX` シンボルが有効化されます](https://github.com/vrm-c/UniVRM/blob/master/Assets/VRMShaders/GLTF/IO/Runtime/VRMShaders.GLTF.IO.Runtime.asmdef#L18)
:::

### 2. インポート時にオプションを有効化
glTF ファイルをパースして得られる `GltfData` クラスに存在する `ExtensionSupportFlags` プロパティを設定します。
具体的には以下の 2 点です。

- `GltfData.ExtensionSupportFlags.ConsiderKhrTextureBasisu`
- `true` に設定
- モデルに定義されている `KHR_texture_basisu` 拡張を考慮してインポートすることを明示するフラグです。
- `GltfData.ExtensionSupportFlags.IsAllTexturesYFlipped`
- `true` に設定
- モデルに含まれるテクスチャが Unity 専用に上下反転されていることを明示するフラグです。

これらを設定した `GltfData` を、通常の手順でインポートします。
以下がサンプルコードです。

```csharp
public class LoadYFlippedBasisuModel : MonoBehaviour
{
async void Start()
{
await LoadGltfModelAsync();
await LoadVrm10ModelAsync();
}

async Task LoadGltfModelAsync()
{
var path = @"C:\foo\bar\baz.gltf";
using var data = new AutoGltfFileParser(path).Parse();

// NOTE: KHR_texture_basisu 拡張のロードを有効化します。これは Runtime でのみ有効です。
data.ExtensionSupportFlags.ConsiderKhrTextureBasisu = true;

// NOTE: 上下反転されたテクスチャを含むモデルの場合、このフラグを有効化します。
// 現在はこのフラグを有効化しないと読み込めません。
data.ExtensionSupportFlags.IsAllTexturesYFlipped = true;

using var loader = new ImporterContext(data);
var model = await loader.LoadAsync(new RuntimeOnlyAwaitCaller());
model.ShowMeshes();
}

async Task LoadVrm10ModelAsync()
{
var path = @"C:\foo\bar\baz.vrm";
using var data = new AutoGltfFileParser(path).Parse();

data.ExtensionSupportFlags.ConsiderKhrTextureBasisu = true;
data.ExtensionSupportFlags.IsAllTexturesYFlipped = true;

var vrm10Data = Vrm10Data.Parse(data);
using var loader = new Vrm10Importer(vrm10Data);
var model = await loader.LoadAsync(new RuntimeOnlyAwaitCaller());
model.ShowMeshes();
}
}
```

## 参考

- テクスチャのイメージバイナリを読み込むコード
- https://github.com/vrm-c/UniVRM/blob/v0.121.0/Assets/VRMShaders/GLTF/IO/Runtime/Texture/Importer/KtxTextureDeserializer.cs
6 changes: 5 additions & 1 deletion docs/release/112/v0.122.0.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# v0.122.0 🚧WIP🚧
# v0.122.0 ktx2 y-flip

https://github.com/vrm-c/UniVRM/milestone/85

:::tip (experimental) basisu 向けに import 時にtexture をY-Flip する機能
[v0.122 KHR_texture_basisu 拡張対応](/api/runtime-import/import_basisu/)
:::
Empty file added docs/release/112/v0.123.0.md
Empty file.
139 changes: 88 additions & 51 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit c6156f0

Please sign in to comment.