Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expression の TextureTransformBind と KHR_texture_transform の相互作用に関して #279

Closed
ousttrue opened this issue Jun 23, 2021 · 10 comments
Labels
Expression formerly BlendShape
Milestone

Comments

@ousttrue
Copy link
Contributor

ousttrue commented Jun 23, 2021

ExpressionのTextureTransformBindについて、元から KHR_texture_transform に値を持つテクスチャに対して、この値を上書きするか初期値を覚えて拡縮を行うかについて議論を行います。


Original:

#271 のうち、 TextureTransformBind に関わる問題はこちらでお願いします。

@0b5vr
Copy link
Contributor

0b5vr commented Jun 29, 2021

実際、現状の仕様文ではmaterialColorBindとtextureTransformBindが同じ扱いになっていそう。これはたぶん考えうるいずれの仕様とも合致しないと思います。

@ousttrue
Copy link
Contributor Author

ousttrue commented Jul 1, 2021

vrm0 では、materialColorBind と textureTransformBind は UnityEngine.Material.SetVector4("prop_name", Vector4 value); というインタフェースで処理できるので同じ扱いなのでした。むしろ、 materialVec4PropBind という感じ。

1.0 ではこれを、property の vec4 という型ではなく、ColorTextureTransform という意味で分けて管理しようとしてました。

@0b5vr
Copy link
Contributor

0b5vr commented Jul 7, 2021

複数のtexture transformを持つテクスチャが割りあたっている状況下で、テクスチャらが相互にスライドすることなく最も自然にtransformがされるのが理想だと思っています。
計算式をまだ求められていませんが、一旦思想だけ共有して該当箇所をTODOに置き換えたいです。

@0b5vr
Copy link
Contributor

0b5vr commented Jul 21, 2021

  • Offset・Scale は初期値が 0 とは限らないので、初期値との差分を積算する
  • Offsetについて、 TargetOffset * InitialScale * Weight をExpressionごとに加算する
  • Scaleについて、 (TargetScale - 1.0) * InitialScale * Weight をExpressionごとに加算する

と、複数のtexture transformを含むマテリアルにおいてもいい感じに制御できそうです。

@ousttrue 100%の自信がないので、Unityの実装でも確認いただけますと助かります。

@ousttrue
Copy link
Contributor Author

ousttrue commented Sep 2, 2021

UV animation タイプでの動作を確認します。

@0b5vr
Copy link
Contributor

0b5vr commented Sep 2, 2021

texture-transform.zip

こちら、サンプルのVRMデータです。
baseColorTextureemissiveTexture が含まれる1マテリアルで構成される板です。

image

マテリアルの baseColorTexture に以下のtexture transformがアサインされています:

            "KHR_texture_transform": {
              "offset": [ 0.25, 0.5 ],
              "scale": [ 0.5, 0.5 ]
            }

マテリアルの emissiveTexture にはtexture transformはありません。

expressionsはそれぞれこんな感じの設定になっています。

      "expressions": {
        "preset": {
          "aa": {
            "textureTransformBinds": [ {
              "material": 0,
              "scale": [ 1, 1 ],
              "offset": [ 1, 0 ]
            } ]
          },
          "ih": {
            "textureTransformBinds": [ {
              "material": 0,
              "scale": [ 2, 2 ],
              "offset": [ 0, 0 ]
            } ]
          },
          "ou": {
            "textureTransformBinds": [ {
              "material": 0,
              "scale": [ 2, 2 ],
              "offset": [ 1, 0 ]
            } ]
          }
        }
      }

@0b5vr
Copy link
Contributor

0b5vr commented Sep 2, 2021

なお、three-vrmではすでに上で述べた計算式に基づいた実装にしてみています。
three-vrm-inspector上でも試せるようになっておりますので、お試しください。

https://0b5vr.com/three-vrm-inspector

@ousttrue
Copy link
Contributor Author

https://0b5vr.com/three-vrm-inspector の動作を確認しました、。

初期値
0.5, 0.5, 0.25, 0.5
に対して
AA
1, 1, 1, 0
を適用
0.5, 0.5, 0.75, 0.5

という動きになってます。

適用結果が
1, 1, 1, 0
となるのが従来の動作でこれを踏襲したいと考えています。
同じ動きをさせたい場合は、AA に 0.5, 0.5, 0.75, 0.5 を指定するという方式です。

@ousttrue
Copy link
Contributor Author

例えば、UVOffset による LookAt を設定するときに、
あとから正面向きの UV を調整して変更場合に Up, Down, Left, Right が影響を受けてしまいます。
仕様を知っていれば便利な場合もあると思いますが、
便利さよりもシンプルさを取りたいです。

@0b5vr
Copy link
Contributor

0b5vr commented Sep 30, 2021

口頭で議論を行いました。
VRM0.0からのマイグレーションの容易さ・実装のシンプルさを優先し、宛先となるトランスフォームを絶対的に解釈し、そこに対してLerpさせていくという、これまで同様の実装とします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Expression formerly BlendShape
Projects
Status: Done
2 participants