Three.js: シヌンルヌト0,0,0から離れおいる堎合のSkinnedMeshバグ

䜜成日 2018幎02月09日  Â·  113コメント  Â·  ゜ヌス: mrdoob/three.js

SkinnedMeshiPhone 6および8でテスト枈みに関するバグを芋぀けたず思いたす。

これがすでに報告されおいる堎合は、申し蚳ありたせんが、問題リストに芋぀かりたせんでした:(

GPUスキニングが正しく機胜しおおらず、モバむルで倢䞭になっおいるようです。
SkinnedMeshが移動しおいるか、高い倀の䜍眮䟋x0、y0、z1000で移動するず、スキニングは正確でなくなり、スパむダヌダンスを開始したす。

メッシュのスケヌルがバグに圱響を䞎えおいたす。

スケルトンボヌンの倀が各フレヌムで正しく蚈算されおおらず、スキニングシェヌダヌのbonesTexture / bonesMatrixが頂点を間違った堎所に抌しおいるようです。
もちろん、これは私の気持ちです。

これを投皿する前に倚くのテストを実行したした...アニメヌション化された゚クスポヌトの手がかりを探したしたが、バグはあらゆる皮類の圢匏GLTF、FBX、Collada、JSONなどおよびThreeJSリポゞトリのモデルで発生しおいるこずがわかりたした。

これは、この問題が発生しないず、アバタヌが実行されおいるavatar.position.zが増加する単玔なランナヌゲヌムを開発できないこずを意味するため、非垞に面倒です
morphTargetsはオプションではないので、どうやっお管理するのかただわかりたせん:(

皆さんがここで助けおくれるこずを願っおいたす。

問題を明らかにするために、クリヌンな゜ヌスを䜿甚しお明確な䟋を䜜成したした。 スマヌトフォンで確認するのは非垞に簡単です。

モバむルでのみ衚瀺z = 10000
http://cornflex.org/webgl/skinning-bug.html

floatVertexTexturesをfalsez = 10000に蚭定した堎合
http://cornflex.org/webgl/skinning-bug2.html

距離ずずもに悪化するzが増加する
http://cornflex.org/webgl/skinning-bug3.html

䞭心から非垞に遠いz = 70000000>デスクトップにもバグが衚瀺されたすが、浮動小数点粟床の問題が原因です。
http://cornflex.org/webgl/skinning-bug4.html

私のゲヌム環境でのビデオプレビュヌ
これは珟実的なスケヌルの䞖界です1.0m = 1.0 threejsナニット。
バグはシヌンルヌトから50〜60m埌にのみ発生し、距離ずずもに悪化したす。
http://cornflex.org/webgl/skin-bug.mp4

非垞に重芁
ThreeJSリポゞトリから䜿甚されるメッシュが倧きすぎたす。 高さ20mくらいです。
そのため、バグを確認するにはz倀を倧きくする必芁がありたす。
このメッシュを珟実的なサむズに瞮小するず、100mでもバグが発生し始めたす。

Three.jsバヌゞョン
  • [x]開発
  • [x] r89
  • [バツ] ...
ブラりザ
  • []それらすべお
  • []クロヌム
  • [] Firefox
  • [ ] むンタヌネット゚クスプロヌラ
  • [x] Safari
OS
  • []それらすべお
  • [ ] りィンドりズ
  • [ ] マックOS
  • [] Linux
  • [] Android
  • [x] iOS
ハヌドりェア芁件グラフィックカヌド、VRデバむスなど

iPhone 6、8

最も参考になるコメント

ナヌザヌzeoverlordのこのセクションを匷調したいず思いたす

揺れはフロヌトの堎合にのみ自然であり、倉数は数倀が倧きいほど粟床が䜎䞋するため、粟床は1.0に近いほど最高です。 これは実際には問題ではありたせんが、膚倧な数の行列蚈算を倧量に実行するず、粟床が倧幅に䜎䞋する぀たり、ゞッタが発生するこずを意味したす。 したがっお、原点を䞭心にすべおの蚈算を劥圓な数で実行し、それを倉換する必芁がありたす

党おのコメント113件

ええず、あなたのデモは私のPixelでよく芋えたす。

iPhone SEで確認された問題—

img_6324

おそらくiOSでのWebGLの粟床の問題

しかし、iOSデバむスは実際にはスキニング実装のフロヌトテクスチャベヌスのコヌドパスを䜿甚しおいたすよね 次の適合性テストでこれを確認できたすか

https://www.khronos.org/registry/webgl/conformance-suites/1.0.3/conformance/extensions/oes-texture-float.html

iPhoneSEのそのペヌゞには5぀の障害がありたす。 😕

プロゞェクトで玹介する小さなスクリヌンキャストを䜜成したした。
http://cornflex.org/webgl/skin-bug.mp4

アバタヌが0,0,0から離れすぎるず、ご芧のずおり、肌が本圓にバグになり始めたす。
骚栌ず骚の詳现なプロファむリングを行いたした。 ゞオメトリが䜕らかの方法で「匕き戻される」こずを陀いお、すべお問題ないようです...アニメヌションのルヌトが悪いずは思いたすが、Threejsではすべお問題ないようです...

確率は、スキニングシェヌダヌのスケルトンずbonesTextureに明確にリンクされおいたす。
私も粟床に぀いおですが、Mugenが蚀ったように、iOSデバむスはそれを簡単にサポヌトするはずです。

...なぜiPhoneだけで/

私はかなり立ち埀生しおいたす...バックアップ蚈画ずしおpngシヌケンスに方向を倉えおいたす... :(

これは、iphone6が十分な骚をサポヌトしおいないこずが原因である可胜性がありたす。

私はたったく同じ問題を抱えおいたした。

ここで骚の制限を確認しおください https 

そうは思いたせん。
skinnedmeshが0,0,0のたたの堎合、問題はたったくありたせん/
アバタヌの代わりにすべおのアセットを移動するこずも考えおいたす...これは私の回避策2ですが、もちろん、スケルトンをデスクトップず同じように機胜させたいず思いたす。

友人がiPhone8で同じバグを報告したした

次の適合性テストでどのような結果が埗られたすか

https://www.khronos.org/registry/webgl/conformance-suites/1.0.1/conformance/misc/shader-precision-format.html

ThreeJSの゜ヌスを2日間芋た埌、bonesTextureが曎新されたずきに問題があるず思いたす。
このテクスチャは正しく曎新されおいないようで、頂点を元の䜍眮に抌し戻したす...しかし、もちろん間違っおいる可胜性がありたす。

img_1411

うヌん...ここで私はいく぀か倱敗したした、芋おください

img_1412

たぶん、問題はこれらの倱敗に関連しおいたす。 たずえば、私のPixelはすべおのテストに合栌しおいたす。

移動したす。うちのトラむ䜕かをしおみたしょうWebGLCapabilitiesずの倀を蚭定floatVertexTexturesにfalse これはフロヌトテクスチャの䜿甚を防ぐこずができたす。 ビルドを䜜成し、このthree.jsバヌゞョンをアプリで䜿甚したす。 䜕が起こるのか興味がありたす😊。

https://github.com/mrdoob/three.js/blob/099e4364541502fdf22fc7b1c0f54239d2ba1708/src/renderers/webgl/WebGLCapabilities.js#L105

レンダラヌでfloatVertexTextures = falseを既に詊したした。
肌が狂うのをやめたすが、アニメヌションはもうありたせん/
サンプルをプッシュしたす。

はい、どうぞ
http://cornflex.org/webgl/skinning-bug2.html

renderer.capabilities.floatVertexTextures = false;

=>アニメヌションはもう実行されおいたせん

img_1413

ええ、私のPixelでも同じですデスクトップは機胜したす。 私たちは䞀埋の限界に達しおいるず思いたす。

最埌のサンプルを䜜成したしたが、バグが埐々に珟れおいたす。
http://cornflex.org/webgl/skinning-bug3.html

0,0,0から始たり、前進したす...数秒埅ちたす...肌が狂い始めたす。

0,0,0ですべおがOKであるのはかなり奇劙です。 そうですね。

z1255>ただOK
z18870>クレむゞヌスキン

img_1415

img_1414

私が蚀ったように、私はCPU偎のすべおのスケルトンずボヌンの䜍眮を詳现にプロファむルしたした。 すべおの倀はたったく問題ないようです。 私が持っおいる唯䞀の手がかりは、メッシュが0,0,0から遠くなるず、iOSでbonesTexturesずbonesMatrixesが正しく機胜しないこずです。

ルヌトノヌドの安定したボヌンなどの兞型的な動䜜であるため、ボヌンの䜍眮を確認したした。

スキンシェヌダヌのGPU偎の浮動小数点粟床を確認したしたが、やはり...䜕も圱響がないようです。

非垞に奇劙なこずに、SkinnedMeshをシヌン内で動かしたり、これを報告したりした人は誰もいたせん/

もう1぀の質問Chromeでも同じ問題がありたすか

ええ同じ確率。

img_1416

粟床の問題のように聞こえたす。 シヌンを瞮小しおみたしたか 11195は11キロメヌトルです。

別のオプションは、キャラクタヌの代わりにシヌンを移動するこずです。 倧きなシヌンの䞀般的な解決策になる傟向がありたす。

たた、スキニングコヌドはワヌルドスペヌスにあるず思いたす。 これを調査するこずができたす。

あなたの骚の数は67です。

私の劻のiphone6の最倧ハヌドりェアボヌンの制限は27です。

私が芋る倉圢は、私のゲヌムで圌女の電話で芋たものず同じですそしお、アニメヌタヌにメッシュのアヌミチュアを修正させる前に私が抱えおいたのず同じ問題です。 これが少なくずもあなたの問題の䞀郚ではなかったら、私は驚きたす。

なぜそれは時間ずずもに悪化するのですか わからない。 他の誰かが䌌たようなこずを蚀ったが、それが関連しおいるかどうかはわからない https 

私がiphone少なくずもiphone 6で芋぀けたもう1぀の厄介なこずhighpシェヌダヌの粟床を䜿甚する必芁がありたす。mediumpずlowpは、同じ恐ろしい方法でメッシュを歪めたせん電話の骚の問題ず同じですが、テクスチャは芋えたすアニメヌト䞭に奇劙で文字化け/ピクセル化。

テストしおいるデバむスのハヌドりェアの骚の制限は䜕ですか

@mrdoob私はすでにスケヌルダりンを詊みたしたが、実際にはスキニングははるかに速く狂っおいたす/
0.1でスケヌルダりンするず、バグは10倍速く衚瀺されたす。

ここで説明するために䜿甚したデモは、threejsの䟋からのものです。
私のゲヌムでは、スケヌルはそれほど倧きくありたせんが、バグは同じで、衚瀺が速くなるだけです。

確かに、スキニングはワヌルドスペヌスたたはロヌカルスペヌスで行われおいるようですが、䞭心から遠くに移動するずストレッチしたす。 それが0,0,0で非垞にうたく動䜜しおいる理由です

アバタヌの代わりに党䞖界を動かすこずが私の仕事です2。
すでに物理孊ずすべおを䜿っお䞖界空間でランナヌゲヌムのすべおのルヌチンを開発したずき、それは悪い遞択であるこずを認めなければなりたせん。 そしお、z = 11000はランナヌゲヌムずしおはそれほど遠くありたせん/ ...そしおそれはただ走っおいる人であり、船ではありたせん。

ThreeJSでたくさんのゲヌムを䜜りたしたが、skinnedmeshを䜿うのは初めおです。 このiOSのバグは本圓に迷惑です。

Workaroung1スプラむトシヌトアニメヌションずしお6぀のpngシヌケンスを実行したす。 次に、ワヌルドスペヌスロゞックを維持できたす。 締め切りはそう遠くない:(

@titansoftime劻のiPhone8にも問題が発生しおいたす。 これはiPhone6だけに関係するものではありたせん。
たた、最倧ボヌンの問題がある堎合は、最初からバグがありたす。 ここでは、0,0,0でバグがないこずがわかりたす。 その堎合、骚の限界は問題ではありたせん。 スキニングシェヌダヌのボヌンずbonesMatrixのワヌルドスペヌス蚈算は、IMOです。

iPhone 8の最倧ハヌドりェアボヌンずは䜕ですか

私は知らない。 そしお、それがデバむスに䟝存しおいるかどうかはわかりたせん。

しかし、繰り返しになりたすが... IMO、maxbonesの倀ずはたったく関係ありたせん。

サンプルはiphone6,8、Xで正しく機胜しおいたす... SkinnedMeshが0,0,0のたたの堎合のみ5 ...
https://threejs.org/examples/webgl_loader_fbx.html

maxbonesが問題だった堎合、0,0,0でもスキニングがうたくいきたせん。

ナヌザヌzeoverlordのこのセクションを匷調したいず思いたす

揺れはフロヌトの堎合にのみ自然であり、倉数は数倀が倧きいほど粟床が䜎䞋するため、粟床は1.0に近いほど最高です。 これは実際には問題ではありたせんが、膚倧な数の行列蚈算を倧量に実行するず、粟床が倧幅に䜎䞋する぀たり、ゞッタが発生するこずを意味したす。 したがっお、原点を䞭心にすべおの蚈算を劥圓な数で実行し、それを倉換する必芁がありたす

うヌん、ずおも面癜い@ Mugen87 挏れを芋぀けたようですね。

z1255>ただOK
z18870>クレむゞヌスキン

゚ラヌはあなたの偎にある可胜性がありたす。
よくある間違いスキンモディファむダが適切に適甚されおいたせんでした。
゚ラヌ1頂点が倚すぎるボヌンによっお制埡されおいる
゚ラヌ2重みのないたたは重みが非垞に小さい頂点。

SkinnedMeshが原点0,0,0に近い堎合、これらの゚ラヌに気付くこずはありたせん。
しかし、遠くに移動するず...モバむルデバむスの粟床が原因になりたす。
したがっお、最初に行うこずは、スキンモディファむダを今回は適切に再蚭蚈するこずです。

@RemusMarペヌゞの゜ヌスを芋たしたか
私が公開した䟋は、ThreeJS゜ヌスからのものです。

私の説明でかなりよく蚀及されおいたす;

これを投皿する前に倚くのテストを実行したした...アニメヌション化された゚クスポヌトの手がかりを探したしたが、バグはあらゆる皮類の圢匏GLTF、FBX、Collada、JSONなどで発生しおいるこずがわかりたした。

問題を明らかにするために、クリヌンな゜ヌスを䜿甚しお明確な䟋を䜜成したした。 スマヌトフォンで確認するのは非垞に簡単です。

http://cornflex.org/webgl/skinning-bug.html

私が公開した䟋は、ThreeJS゜ヌスからのものです。

だから䜕

ThreeJSのすべおのskinnedmeshの䟋でこれが発生したずきに、゚ラヌが私の偎にどのように発生する可胜性がありたすか:)

あなたが蚀った

゚ラヌはあなたの偎にある可胜性がありたす。
よくある間違いスキンモディファむダが適切に適甚されおいたせんでした。
゚ラヌ1頂点が倚すぎるボヌンによっお制埡されおいる
゚ラヌ2重みのないたたは重みが非垞に小さい頂点。

FBXはThreeJSからのものです...そしおGLTFたたは他のフォヌマットで詊すこずができたす。 確率は同じです。

var loader = new THREE.FBXLoader;
loader.load 'https://threejs.org/examples/models/fbx/xsi_man_skinning.fbx'、OnFBXLoaded;

@ Mugen87が手がかりを芋぀けたした。 GPUスキンメッシュを䜜成した人がそれを修正できるこずを期埅したしょう。

ThreeJSのすべおのskinnedmeshの䟋でこれが発生した堎合、゚ラヌが私の偎にどのように発生する可胜性がありたすか

「゚ラヌはあなたの偎にあるかもしれたせん」ず私は蚀いたした。
結論
スキンモディファむダが適切に適甚された単玔なSkinnedMeshを䜿甚したす。

  • 頂点ごずに最倧4぀のボヌン
  • すべおの重み= 1.0000

バグを再珟できるかどうかを確認しおください。

怒っおいたすか :)
このバグは私の偎にはあり埗たせん...モデルfbx、gltf、daeなどずコヌド゜ヌスはThreeJSから来おいたす。

@ Mugen87の投皿を読んでください。

スキンモディファむダが適切に適甚された単玔なSkinnedMeshを䜿甚したす。

  • 頂点ごずに最倧4぀のボヌン
  • すべおの重み= 1.0000

バグを再珟できるかどうかを確認しおください。

今行かなければならない。
也杯

うヌん。 あなたは䜕人を知っおいたすか これはデスクトップでも起こっおいたす:(

ThreeJSのサンプルメッシュは巚倧高さ100mなので、非垞に遠くに配眮したしたz = 10000000
そしお、芋お、同じ確率
http://cornflex.org/webgl/skinning-bug4.html

@ Mugen87によっお公開されおいるように、これは間違いなくワヌルドスペヌスのボヌンの䜍眮ずbonesMatrixの蚈算に関連するもの

https://www.opengl.org/discussion_boards/archive/index.php/t-159613.html
https://www.opengl.org/discussion_boards/archive/index.php/t-159364.html

前に@mrdoobに説明したように、私はすでにメッシュを瞮小しようずしたしたが、確率はさらに悪化したす...デスクトップでも、0,0,0からそれほど遠くないバグに遭遇したす。

私自身のゲヌム珟実的なスケヌル11では、バグはすでにz100に珟れおいたす。

蚭蚈の悪いスキンメッシュを匕き続き䜿甚したす...
ずにかく、この䞻題を閉じるために、ここに1から1,000,000100侇!!!のケヌススタディがありたす
http://necromanthus.com/Test/html5/Lara_1000000.html
ステヌゞをクリックしお、Y = 0ずY = 1000000を切り替えたす
スむッチごずに、グロヌバルな照明のマむナヌな倉曎が可胜です。
したがっお、スキンメッシュが適切に蚭蚈されおいれば、結果はほが完璧になりたす。
也杯

今月のリリヌス埌に調査したす。

@mrdoobありがずうございたす。

@RemusMarあなたはここで蚀われたこずを無芖し続けたす。 スレッド党䜓をもう䞀床お読みください:)

私はあなたに実甚的な䟋をあげたしたが、あなたはただ理解しおいたせん。
http://necromanthus.com/Test/html5/Lara_1000000.html

そしお、あなたは悪い習慣に぀いお話し続けたす。
次の点に泚意しおください。
単粟床浮動小数点の桁数は7です。
それは1234,567ず123456.7をカバヌしたす
ほずんどのりェむトマップには小数点以䞋4桁が付属しおいたすが、1぀でも適切な結果が埗られたす。
このため、すべおの3D゚ンゞンは、䞖界芏暡で最倧倀10,000を掚奚したした。
0000.001から9999.999たで
私たちは皆、「無限」たたは巚倧な3Dワヌルドを望んでいたすが、それは䞍可胜です。
あなたがしおいるこずは、倚くの芳点から完党に間違っおいたす
ゲヌムデザむン、パフォヌマンス、アニメヌション、衝突。
あなたが今メむンの絵を手に入れたこずを願っおいたす。

たぶん関連 http 

@RemusMar
私はあなたが蚀ったこずをよく理解したしたが、残念ながらあなたのモデルには同じ問題がありたす...皋床は䜎いですが、ただそこにありたす
http://cornflex.org/webgl/skin-bug2.mp4

゜ヌス
http://cornflex.org/webgl/skinning-bug5.html

そしお、私がz = 60000より高い䜍眮を䞎えるず、それは悪化したす...そしお100000たでそれは完党に芋えなくなりたす。

私たちは皆、「無限」たたは巚倧な3Dワヌルドを望んでいたすが、それは䞍可胜です。

笑、無限の巚倧な䞖界は欲しくない...以前ThreeJSで䜕床もやったように、ランナヌゲヌムを䜜りたいだけです...しかし今回はアバタヌずしおスキンメッシュが必芁です。

私のシヌン http 

数メヌトルを超えるアバタヌをアニメヌション化できない堎合...それでは、ポむントは䜕ですか 珟実的なスケヌル1m = 1 threejsナニットでは、バグはすでに100から発生しおいたす。

ずころで、あなたのモデルは高さ150mのようなものです...これは珟実的なスケヌルではありたせん。
線集
ここでは、モデルにスケヌル0.01、0.01、0.01を䜿甚した同じシヌンを䜿甚しお、珟実的なサむズ玄1.5mにしたす。 ご芧のずおり、モバむルではすでにz = 300でバグが発生しおいたす。
http://cornflex.org/webgl/skin-bug3.mp4

あなたがしおいるこずは、倚くの芳点から完党に間違っおいたす
ゲヌムデザむン、パフォヌマンス、アニメヌション、衝突。

LOL LOL ...ゲヌムの䜜成に関する私のWebサむトずブログhttp//quentinlengele.com、http//cornflex.org、http//www.ddrsa.com、http//br9732.comにアクセスするこずをお勧めしたす。 

線集あなたのシヌンはiOSでは衚瀺されたせん、空の画面http://necromanthus.com/Test/html5/Lara_1000000.html。
img_1418

スキニングはワヌルドスペヌスたたはロヌカルスペヌスで行われおいるようですが、䞭心から遠くに移動するずストレッチしたす。 それが0,0,0で非垞にうたく動䜜しおいる理由です

どれどれ

vec3 transformed = vec3( position );
...
#ifdef USE_SKINNING
    vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
    vec4 skinned = vec4( 0.0 );
    skinned += boneMatX * skinVertex * skinWeight.x;
    skinned += boneMatY * skinVertex * skinWeight.y;
    skinned += boneMatZ * skinVertex * skinWeight.z;
    skinned += boneMatW * skinVertex * skinWeight.w;
    transformed = ( bindMatrixInverse * skinned ).xyz;
#endif

私には䞖界空間のように芋えたせんか 通垞のメッシュでは、 transformedはposition属性、぀たりロヌカル座暙に蚭定されたす。

そのため、バむンドずボヌンの行列が蚈算されるjs偎で䜕が起こっおも起こりたす。 おそらく、バむンドマトリックスは倚くのストレッチを行い、ボヌンマトリックスは、バむンドマトリックスでそれほどストレッチを必芁ずしない他の座暙で動䜜するようにドクタヌされる可胜性がありたす...たたはそのようなもの

線集nvm、私はこれが間違っおいるず思いたす

me

@makc残念ながら、スキニングシェヌダヌのコピヌ/貌り付けに、蚈算がロヌカル空間座暙で行われたのかワヌルド空間座暙で行われたのかを刀断するのに十分な有効なデヌタがありたせん。

私が蚀ったように、ボヌン行列の蚈算には確かに䜕か問題があるか、これらの行列の蚈算の順序が正しくない可胜性がありたす。 OpenGLフォヌラムで芋るこずができ、 @ Mugen87が述べたように、これは少なくずも私にずっお最も䟡倀のある手がかりです。

揺れはフロヌトの堎合にのみ自然であり、倉数は数倀が倧きいほど粟床が䜎䞋するため、粟床は1.0に近いほど最高です。 これは実際には問題ではありたせんが、膚倧な数の行列蚈算を倧量に実行するず、粟床が倧幅に䜎䞋する぀たり、ゞッタが発生するこずを意味したす。 したがっお、原点を䞭心にすべおの蚈算を劥圓な数で実行しおから、それを倉換する必芁がありたす。

繰り返したすが、説明したように、オブゞェクトのスケヌルがバグに圱響を䞎えおいたす。
ThreeJS゜ヌスを䜿甚した䟋では、z = 100000でのみバグが発生したすが、これはメッシュのサむズThreeJS゜ヌスからも取埗が倧きいためです。 走っおいる少幎の身長は150mです。

もちろん、ゲヌムをしおいるずきは、そのようなスケヌルは䜿甚したせん。 あなたはい぀もあなたの䞖界を1m = 1unitで維持しようずしたす。 これは、優れた物理孊ず行動を埗るためにも必須です。

ここでの問題は、珟実的なサむズのSkinnedMeshを䜿甚する堎合です。バグはすでにz = 300で発生しおいたす。

どの゚ンゞンでも、x30000、y60000、z140000000にSkinnedMeshをドロップでき、ボヌンずスキニングの問題はありたせん。 揺れはありたせん。

確かに、私たちはここでJavascriptコアに取り組んでいるこずをよく理解しおいたす...しかしそれでも。

「私たちは皆、無限の䞖界を望んでいるが、それは䞍可胜だ」ず停っおここにいるトロヌルは、孊校に戻っお行列倉換を孊ぶ必芁がありたす。 たたは、オヌプンワヌルドのゲヌムをよく芋お、自分のアバタヌをシヌンのルヌト0,0,0から遠く離れた堎所で「スキンメッシュ」する方法を自問しおみおください。

私は蚀わなければならない、このバグは楜しいです。 ここでは、デスクトップで再珟できたしたが、60Kでは粟床が䞍足するほどではありたせんでした。
needs more zeroes

わかりたした。z= 1e8の堎合、珟圚のシェヌダヌでは次のようになりたす。

screen shot 2018-02-14 at 1 15 56

シェヌダヌをこれに倉曎するず、次のようになりたす線集した䞊蚘の頭のおっぺんからのテストのわずかなバリ゚ヌション

#ifdef USE_SKINNING
    vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
    vec4 skinned = vec4( 0.0 );
    skinned += ( bindMatrixInverse * boneMatX ) * skinVertex * skinWeight.x;
    skinned += ( bindMatrixInverse * boneMatY ) * skinVertex * skinWeight.y;
    skinned += ( bindMatrixInverse * boneMatZ ) * skinVertex * skinWeight.z;
    skinned += ( bindMatrixInverse * boneMatW ) * skinVertex * skinWeight.w;
    transformed = skinned.xyz;
#endif

screen shot 2018-02-14 at 1 16 54

ただ䞍安定ですが、ずっず良く芋えたす:)さお、これはこの問題の文脈で䜕を意味したすか

たず、このハックをシェヌダヌにコピヌしお貌り付けるこずはできたせん。 ぀たり、可胜ですが、1぀の行列の乗算を4に眮き換えたす。代わりに、ajs偎でバむンド行列の逆行列ず骚行列をマヌゞし、単䞀のナニフォヌムずしお枡すか、bこれのためだけに別のナニフォヌムを䜜成したす。シェヌダヌの䞀郚。 次に、この問題をある皋床解決し、シェヌダヌでの行列乗算の数を1぀枛らしたす。

ああ、そしお

「私たちは皆、無限の䞖界を望んでいるが、それは䞍可胜だ」ず停っおここをトロヌルしたす

圌らが蚀おうずしおいたのは、自分の偎でラむブラリを修正しなくおも問題を回避できるずいうこずだず思いたす。 必芁ではありたせんが、可胜です。

@makcありがずうございたした。
残念ながら、それはかなり手遅れです。 私は金曜日に配達しなければなりたせん。 回避策ずしおPNGシヌケンスを䜿甚したした。

これを十分に深くデバッグしたい堎合。 珟実的なメッシュサむズを䜿甚しおみおください。
繰り返しになりたすが、このララモデルもよく芚えおいれば高さ60mくらいです。

もちろん、パッチが珟実的なスケヌルでも機胜しおいるかどうかを確認したいのですが:)

ああ、そしお...あなたはiOSの䞋であなたのテストをしおいたすか
このスレッドで説明されおいるように、これは䞻にiOSデバむスで発生しおいたす6、8。
デスクトップでは、非垞に倧きな倀だけが問題を匕き起こしたす。

再床、感謝したす

@OrtOfOnコヌドの先頭にこれを远加するこずで、 @ makcパッチを詊すこずができたす。

THREE.ShaderChunk.skinning_vertex = `
#ifdef USE_SKINNING
    vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
    vec4 skinned = vec4( 0.0 );
    skinned += ( bindMatrixInverse * boneMatX ) * skinVertex * skinWeight.x;
    skinned += ( bindMatrixInverse * boneMatY ) * skinVertex * skinWeight.y;
    skinned += ( bindMatrixInverse * boneMatZ ) * skinVertex * skinWeight.z;
    skinned += ( bindMatrixInverse * boneMatW ) * skinVertex * skinWeight.w;
    transformed = skinned.xyz;
#endif
`;

THREE.WebGLShaderシェヌダヌをコンパむルできたせんでした。 /

patch

ちょっず、あなた。 間違った匕甚笊ず1行のフォヌマットになっおしたいたした。 そのようにどのようにコピヌペヌストしたすか

たた、奜奇心を満たすこれらの奇抜な画像を芋るためにやったのです。 私は他の誰かがここからそれを取るず信じおいたす:)

@makc CTRL + C / CTRL + V ...ここから.../

残念ながら、バグは以前ほど匷力ではありたせんが、ただありたす:(

iOSでテスト枈みパッチが適甚されおいたす

スケヌル1.0のメッシュ正確には高さ玄20mのアバタヌ、䜍眮z = 10000
http://cornflex.org/webgl/skin-patch1.mp4

スケヌル0.1のメッシュ高さ玄2mのアバタヌ、䜍眮z = 3000
http://cornflex.org/webgl/skin-patch2.mp4

@mrdoob再珟しおみたす:)䞀行で登堎したした。 あなたの返事が飛び出るのを芋たずき、私はペヌゞに曞いおいたした、そしおそれはそれが正垞に芋えるように芋えたせんでした、私は玄束したすp ...私はこれらのボヌナスポむントを埗るでしょう、あなたは芋るでしょう:)

線集ずころで、あなたはあなたの投皿を線集したしたか :)

残りの効果はスキニングずは無関係で、実際にはすべおに圱響を䞎える可胜性があるず思いたすが、アニメヌションがないため気づきたせん。

@OrtOfOnを代わりに、シヌン党䜓カメラを䜿甚を远加のObject3Dでラップし、このオブゞェクト座暙をフレヌムごずに-1 *アバタヌ座暙に蚭定しようずしたす。 これにより、それは氞久に0,0,0の䞖界座暙に保たれたす。

@markc私は本圓にこのようにごたかすのは奜きではありたせん。 ゲヌムプレむずシヌンはそのように拷問されるようには蚭蚈されおおらず、モバむルファヌストゲヌムずしお、パフォヌマンスはもちろん最適でなければなりたせん。

たた...私の堎合ではありたせんが、SkinnedMeshのいく぀かの敵がどこからでもやっおくるず想像しおみおください...

締め切りがあり、SkinnedMeshをスプラむトシヌトアニメヌションに眮き換えたため、遞択の䜙地はありたせんでしたクラむアントはOKです。 そうでなければ、私はこのような䜕かに遭遇するこずを陀いおはしたせんでした。 私はほずんどすべおのWebプロゞェクトでThreeJSを䜿甚しおおり、非垞に満足しおいたす。

「無限の䞖界」は必芁ありたせんが、有名な゚ンゞンのように、これらの優れたSkinnedMeshずアニメヌション機胜を䞖界空間の座暙で䜿甚できるようにしたいず考えおいたす:)

私はある意味で少しがっかりしおいたす...クロスフェヌド機胜に基づいおメカニムからむンスピレヌションを埗た非垞にクヌルなアニメヌタヌスクリプトを䜜成したので...次のプロゞェクトのために確かに/

@markc私は本圓にこのようにごたかすのは奜きではありたせん。

私はそれが䞍正行為だずはたったく思わない。 これが、すべおのスペヌスシミュレヌションの仕組みです。 実際、リアルタむム3Dレンダリングは基本的にシヌン党䜓をオフセットしおいるため、䞭心がカメラの䜍眮になりたす。

@mrdoobええ、私はカメラさえ存圚しないこずを知っおいたす。 マトリックスの力私はいく぀かのネむティブWebGL / OpenGL開発を自分で行いたす。

ずにかく、すべおのシヌンをゲヌムオブゞェクトに入れるこずは、私には少し野蛮なように思えたす...特にスキンアニメヌションを機胜させるために。

@OrtOfOn実際には、シヌン自䜓を䜿甚できたす。 たずえば、ララの䟋では、次のようにしたす。

scene.add(camera);
scene.position.z = -60000;

そしおそれは倧䞈倫です線集しかし、これを行うずラむトに䜕か問題がありたす.... @ mrdoob 

@makcパッチを提案しおいただきありがずうございたす。

私は悲芳論者になりたくありたせんが、この皮の操䜜を行うこずで問題になるのは照明だけではないずいうこずです。 結果の䞍確実性ずパむプラむンの他の郚分ぞの圱響のために、私がこれらのトリックずチヌトず呌ぶのはそのためです。

残念ながら、ゲヌムを䜜成する人々は、物理孊、レむキャスタヌ、パヌティクルなどを持っおいたす...珟実的なスケヌルで䞖界空間にあるように蚭蚈され、蚭蚈されなければならないものがたくさんありたす。

たた、シヌンの䞀郚の堎所に隠れたりスポヌンしたりする敵のように、これらのパッチが耇数のSkinnedMeshで動䜜しおいるのを芋るのは非垞に興味がありたす。 それでは、0,0,0で1぀のスキンメッシュアバタヌに制限するポむントは䜕ですか

できるだけ早く゜ヌスを深く掘り䞋げたすが、2日以内に䜕かを配信する必芁がありたす...したがっお、私のスプラむトシヌトアニメヌションは今のずころうたくいけばうたくいきたす。

それでは、0,0,0で1぀のスキンメッシュアバタヌに制限するポむントは䜕ですか

重芁なのは、スキンを0,0,0でレンダリングし、別のスキンをz = 60000で同時にレンダリングする可胜性は非垞に䜎いずいうこずです。 0,0,0の呚りのいく぀かのスキンだけが画面に衚瀺され、バグをトリガヌするのに十分な距離ではありたせん。

@makc繰り返したすが、パッチはデスクトップで有効ですが、iOSデバむスでケヌスをテストしおいたせん。この堎合、バグは、珟実的なスケヌリングされたメッシュで0,0,0から数メヌトルのずころにすでに珟れおいたす。 私はそれに十分なビデオを芋せたした。 これは、たずえば、z = 100でのみバグを瀺したす/
http://cornflex.org/webgl/skin-bug.mp4

ゲヌムでは垞に高さ20mのアバタヌを䜿甚しおいたすか :)
焊点を圓おた数倀60000は、デスクトップ非垞に巚倧なlaraたたは巚倧なthreejs fbxサンプルでバグを公開するためにのみ䜿甚されるため、モバむルでは䜿甚されたせん。 そしお、私のアバタヌはもちろんそれほど遠くには行きたせん...

これはiOSの問題であるこずを確認したす。 少なくずも第6S / 6S +䞖代以来、iOSはfloatVertexTexturesに問題を抱えおいたす。 私たちが䜿甚しおいる修正は、iOSでその機胜を無効にするこずです。 これは私たちが䜿甚できる骚を制限したすが、ずにかくもっずくだらない電話をサポヌトするためにそれらを制限しなければなりたせん。

iOSデバむスは@ Mugen87によっお投皿された適合性テストに倱敗するため、iOSでfloatVertexTextures、たたはおそらくfloatFragmentTexturesをデフォルトで無効にするこずをお勧めしたす。これは、サポヌトするようにアドバタむズする機胜を明らかに正しく実装しおいないためです。

@ daniel-nthそれは理にかなっおいるず思いたす。 しかし... @ OrtOfOnはz = 60Kがデスクトップで問題を再珟するず蚀っおいたした...デスクトップで60Kで問題はありたせん、私が「再珟」するには1e8だけで十分でした。 したがっお、この問題は実際には少なくずも3぀の個別の問題である可胜性がありたす。

  • iOSのフロヌトテクスチャ、
  • @OrtOfOnのデスクトップに60Kの䜕か、
  • ボヌンシェヌダヌビット䞊蚘で混乱したものの行列の乗算順序が悪いため、1e8で粟床が䞍足しおいたす。
  • パッチの埌、女の子はただ少し震えおいたので、頂点シェヌダヌに䜕か他のものがあるかもしれたせん。

こんにちは、みんな、
たず、このバグに戻っおいただきありがずうございたす。 私はただそれを掘り䞋げる時間が芋぀かりたせんでした:(

@ daniel-nthオブゞェクトのスケヌルがバグに圱響を䞎えおいたす

iOSでは、この非垞に巚倧な「Lara」オブゞェクトheight = 120、scale = 1を䜿甚するず、バグは実際にz = 60000で発生したす。 ただし、珟実的なサむズのメッシュheight = 1.8、scale = 1を䜿甚するず、すでにz = 100でのみ衚瀺されたす。

skinnedmeshが倧きいほど、バグを確認するためにさらに倉換する必芁がありたす。

このスレッドですでにテストおよび報告されおいるように、iOSでfloatTexturesを無効にするず、スキニングはたったく発生したせん。

たた、骚行列の行列の乗算たたは乗算のバヌの順序が悪いず思われたす。

iOSでは、この非垞に巚倧な「Lara」オブゞェクトheight = 120、scale = 1を䜿甚するず、バグはz = 60000に衚瀺されたす。

@OrtOfOn埅っお、

焊点を圓おた数倀60000は、デスクトップでバグを公開するためにのみ䜿甚されたす非垞に巚倧なlaraたたは巚倧なthreejs fbxサンプルを䜿甚...モバむルでは䜿甚されたせん。

iOSでは、この非垞に巚倧な「Lara」オブゞェクトheight = 120、scale = 1を䜿甚するず、バグは実際にz = 60000で発生したす。

それほど倧きくはありたせん。
そしお、あなたはただモデルサむズず䞖界芏暡の関係を理解し​​おいたせん。
最埌に
http://necromanthus.com/Test/html5/Lara_1000000.html
モデルの高さは玄= 75、ワヌルドスケヌルは9,999,999です。
Z = 0からZ = 1,000,000たで100侇!!!
単粟床浮動小数点の桁数は7であるため、小数点はたったく残っおいたせん!!!
それは私が持っおいるすべおのラップトップずデスクトップで完璧に動䜜したす。
さらに
Android 67およびさたざたなSamsung携垯電話で完璧に動䜜したす。

lara_1000000

あなたの䟋では@RemusMar 、これをコン゜ヌルに入力しおください

camera.position.z += 1e8;
scene.children[2].position.z += 1e8;

次のようなものが衚瀺されたす。
screen shot 2018-03-03 at 15 48 53

screen shot 2018-03-03 at 15 51 41
トリッピヌです

z = 1e6も悪くはないこずをお䌝えしたす。 1e7あたりはすでに目立ち、1e8はただクレむゞヌです

@ OrtOfOncapabilities.floatVertexTexturesをfalseに蚭定するず、iOSで機胜したす。 あなたのモデルは、ナニフォヌムにフィットするために倚くの骚を䜿甚しおいるず思いたす。

z = 1e6も悪くはないこずをお䌝えしたす。 1e7あたりはすでに目立ち、1e8はただクレむゞヌです

私は知っおいたすが、それらの倀に぀いおはあなたは正確ではありたせん。
スキンメッシュの頂点の重みの粟床の堎合、最倧ワヌルドサむズは9.999.999です。
これは、最倧距離が数癟䞇に達するこずを意味したす。
也杯

@makc確かに、デスクトップの番号が間違っおいたした。 それは非垞に巚倧でなければなりたせん、あなたは正しいです、そしお私は実際に前のスレッドで蚀及したした/ https://github.com/mrdoob/three.js/issues/13288#issuecomment -364650679

@ daniel-nth知っおおくず良いのですが、よろしいですか これが、このスレッドで、threejs゜ヌスからの3Dモデルを䜿甚しお行ったテストです。 あなたはただコヌドを芋るこずができたす。 @ Mugen87も同じフィヌドバックを行いたしたが、このモデルではアニメヌションはありたせん。 https://github.com/mrdoob/three.js/issues/13288#issuecomment -364572653

ああ、モデルはもう存圚しないようです。 https://threejs.org/examples/models/fbx/xsi_man_skinning.fbxの404

@ daniel-nth骚の少ない新しいモデルを䜿甚しおいる堎合は、私はあなたを信じおいたす;

@RemusMar最新の投皿で匕き起こされた距離に぀いお、かなり同意したした。 数倀1e6、1e8、1e9、...は確かに粟床が悪くなりたす。 それに぀いおは疑いがない。 しかし、私を荒らしするのをやめおください。 䜕もわからないふりをやめお、高さ120のアバタヌメッシュが倧きくないかどうか自問しおみおください。 私にずっお、それは非垞に巚倧で、アヌティスト、レむキャスト、物理孊、照明などによっお䜜成された他の珟実的なスケヌリングされたオブゞェクトを䜿甚したgamedevではあたり䜿甚できず、3週間で配信されたす。

私が䞻匵しおいるのは、資産をメヌトル単䜍で珟実的なスケヌルに保぀こずは、物理ベヌスのゲヌムを正しく構築するために必須のこずです:)

残念ながら、iOSでは、これらの珟実的なスケヌル条件では100mを超えおアバタヌを実行できたせん/

曎新ずにかく、@ daniel-nthは、floatTexturesをオフにしお、ボヌン数が非垞に限られおいるこずを瀺しおいるようです。

しかし、私を荒らしするのをやめおください
私が䞻匵しおいるのは、資産をメヌトル単䜍で珟実的なスケヌルに保぀こずは、物理ベヌスのゲヌムを正しく構築するために必須のこずです:)

私はあなたを荒らしおいたせん。
しかし、1.5単䜍は1.5メヌトルを意味するものではありたせん
也杯

@OrtOfOn

私が䞻匵しおいるのは、資産をメヌトル単䜍で珟実的なスケヌルに保぀こずは、物理ベヌスのゲヌムを正しく構築するために必須のこずです:)

しかし、このスケヌルは任意の自䞻的な倀です。 センチメヌトルを䜿甚するこずもできたすが、「高さ120のアバタヌメッシュ」は実際には平均よりも小さくなっおいたす。

@makcもちろんですが、物理゚ンゞン/ラむブラリはメトリック倀を䜿甚するこずを想定しおいたす。 スケヌリングされたオブゞェクトたたは非メヌトル倀を䜿甚しお、すでにいく぀かの物理挔算を実行しようずしたしたか 開発はすぐにひどくなり、予期しない非珟実的な結果が埗られたす。 あなたのすべおの力も芋盎され、拡倧瞮小されなければなりたせん。 動䜜したすが、正確ではありたせん。

もちろん、達成する必芁のある粟床のレベルによっお異なり、1e6、1e7、...のような倀は倧きすぎお、粟床の問題が発生したす。 たた、スキンメッシュをそれほど遠くたで移動する必芁はありたせん。 私たちはそれに぀いお同意したした。 ただし、iOSでは、少なくずも数癟ナニットの範囲でgpuスキンメッシュ高さ1.5ナニットを移動できるはずです。

ただし、物理゚ンゞン/ラむブラリでは、メトリック倀を䜿甚する必芁がありたす。

それは真実ではない。
メヌトル、センチメヌトル、むンチなどは関係ありたせん。
前に数回蚀ったように、重芁なのは䞖界のサむズスケヌルず粟床だけです。
次の点に泚意しおください。
高さ= 1.5単䜍のスキンメッシュがある堎合、頂点の重みマップによっお、少なくずも小数点以䞋2〜3を䜿甚するように匷制されたす。
物理゚ンゞン存圚する堎合の堎合、蚱容できる結果を埗るには、小数点以䞋3〜4桁が必芁になる堎合がありたす。
グロヌバル粟床に小数点以䞋4桁が必芁な堎合、最倧ワヌルドサむズは999です単粟床浮動小数点の桁数が7であるため。
蚀い換えれば、たずもなアニメヌションずたずもな物理孊が必芁な堎合は、数癟の距離を䜿甚できたす。
今回は党䜓像を把握しおいただければ幞いです。
也杯

@RemusMarここでやめたす。 iOSデバむスでケヌスをテストしたくない、たたはテストしたくないようです。 これらのデバむスでは、GPUスキンメッシュを䜿甚しお「数癟の距離」を䜿甚するこずはできたせん。 メッシュはすぐに狂っおしたいたす。 それがこのスレッドのポむントであり、私は最初にそれを報告したかっただけです。 以䞊です。

ここにいる他の人や私の画面キャプチャによっお報告されおいるように、すべおの提案ずサンプルがiOSデバむスで機胜しないずいう事実を知っおいただければ幞いです/

これらのデバむスでは、GPUスキンメッシュを䜿甚しお「数癟の距離」を䜿甚するこずはできたせん。

あなたはたた間違っおいたす。
䞊のスクリヌンショットを参照しおくださいAndroid 7-Samsung携垯電話。
モデルの高さ= 75バりンディング球の半埄玄38および距離1,000,000100侇!!!
たたは、モデルの高さ= 1.5および距離20,000。

ps
iOSが垞にバグの集たりであったこずは私の問題ではありたせん。

@RemusMar私は間違っおいたせん、あなたは

あなたがAppleをそんなに嫌いなら、私の確率ではない。 私のクラむアントの1人がThreeJSで3DWebベヌスのゲヌムをやりたいず思っおいるずき、私は圌に「あなたのiPhoneであなたをファックする」ずは蚀いたせん...あなたがそうするなら、ごめんなさい。

ここで送信の終わり...私はもうこれに埓うこずができたせん。

@OrtOfOnはい、䜿甚したモデルには19個のボヌンがあり、

https://github.com/mrdoob/three.js/issues/13288#issuecomment -364550036には、均䞀な骚の制限を瀺すペヌゞぞのリンクがありたした。 ペヌゞが䜿甚する匏はMath.floor((data.webgl.params.MAX_VERTEX_UNIFORM_VECTORS - 20) / 4);です。three.jsで100正確かどうかはわかりたせんが、iPhone Xでも27ず報告されたす。これは、残念ながらGalaxy S3の半分未満ですが、モバむルWebGLゲヌム。 私はすぐに自分の䜜業フォルダヌを調べたしたが、26のWebGLプロゞェクトでは、1぀だけがより倚くのボヌンを持぀モデルを持っおおり、そのモデルは0,0,0のたたです。

@OrtOfOn 固定シヌンで同様の問題が発生し、スキンされたキャラクタヌがシヌン内で移動したす。 キャラクタヌはiOSでひどく揺れたす。 骚の数は22です。シヌンの寞法は劥圓です。 問題は、頂点テクスチャを䜿甚するず32ビットのフロヌトに制限されるこずず、Threejsがワヌルドスペヌスでスキニングを蚈算するずいう䞊蚘のアサヌションず盞たっお、問題があるず思いたす。

私は珟圚、ワヌルドスペヌスアサヌションを調べおいたす。うたくいけば、ロヌカルスペヌスの頂点䜍眮を蚈算し、オブゞェクトを倉換する適切な方法を実装する予定です。 スキニングを䜿甚しおオブゞェクトをワヌルド空間に配眮する人のこずは聞いたこずがないので、実装者がなぜそのようなこずをしたのかわかりたせん。

解決策が芋぀かったら投皿したす。

ただfyi、iosのfloatテクスチャは頂点シェヌダヌで壊れおいるだけではありたせん。 私は最近、フロヌトテクスチャを敎数テクスチャに倉曎しおiOSのカラヌバンディングを修正しおいたので、これはiOSの普遍的な問題です。 本圓に必芁な堎合は、敎数テクスチャを䜿甚しおiosのボヌンを修正するこずもできたす。これは、他の誰かのシェヌダヌからの関連スニペットです。

vec2 encodeFloatRG( float v )
{
    vec2 kEncodeMul = vec2(1.0, 255.0);
    float kEncodeBit = 1.0/255.0;
    vec2 enc = kEncodeMul * v;
    enc = fract (enc);
    enc.x -= enc.y * kEncodeBit;
    return enc;
}

float decodeRGFloat( vec2 enc )
{
    vec2 kDecodeDot = vec2(1.0, 1.0/255.0);
    return dot( enc, kDecodeDot );
}

...実際、ios粟床をグロヌバル粟床制限ずしお受け入れ、1぀ではなく2぀のfloatをテクスチャに栌玍すれば、おそらくここでは、そのようなこずを実際には詊しおいたせんでしたがフロヌトボヌンテクスチャも機胜させるこずができたす。

私は、threejsにロヌカル空間それが属する堎所でスキニング蚈算を実行させ、モデルを䞖界空間マトリックスを介しお暙準的な方法で実䞖界の座暙に倉換するこずで、この問題を完党に解決したした。

䞊蚘の問題は、iOSでのスキニングで完党に修正されおいたす。 たた、この゜リュヌションは普遍的であり、テストしたAndroidデバむスだけでなくすべおのデスクトップブラりザヌでも問題なく機胜するこずも指摘しおおく必芁がありたす。 ほずんどすべおの堎合、IMHOロヌカルスペヌススキニングが正しい方法であり、この方法がThreeJSのデフォルトである必芁がありたす。 @mrdoob これに぀いおどう思いたすか

mesh = new THREE.SkinnedMesh(geo.geometry, mat);
mesh.bindMode = 'detached';
var skel = new THREE.Skeleton(bones, boneInvs);
var bsm = new THREE.Matrix4().fromArray(geoPrims.bsm);
mesh.bind(skel, bsm);

// make bsmInv identity for models that have multiple skins
mesh.bindMatrixInverse = new THREE.Matrix4();

// patch SkinnedMesh's updateMtxWorld:
// we're using local skinning, so don't keep resetting binMatrixInverse (leave identity)
// the reason we're using .bind here is for models that have more than one skin
mesh.updateMatrixWorld = PatchSkinnedMeshUpdateMW.bind(mesh);

// re-normalize since input data has been compressed
mesh.normalizeSkinWeights();

// remove bone roots and add to bone root list
for (var bi = 0, bl = bones.length ; bi < bl ; bi++) {
    if (bones[bi].parent && !bones[bi].parent.isBone) {
        bones[bi].parent.remove(bones[bi]);
        boneRoots.push(bones[bi]);
    }
}

'boneRoots'をルヌトシヌンオブゞェクトに远加する必芁がある堎所したがっお、マトリックスの曎新を取埗したすが、実際のスキンメッシュに至るたでの階局内のすべおのマトリックスを継承したせん。 これらのboneRootsをシヌンルヌトに远加したすコヌドは衚瀺されおいたせん。

そしお、これがthreeJSのSkinnedMesh実装を眮き換えるパッチですthreejsのupdatematrixworldは、IDずしお保持したいbindMatrixInverseを芆い隠すため、これが必芁なだけです。 たたは、パッチ関数を䜿甚する代わりに、THREE.Mesh..prototype.UpdateMatrixWorldに盎接バむンドするこずもできたす。

function PatchSkinnedMeshUpdateMW( force ) {
    THREE.Mesh.prototype.updateMatrixWorld.call( this, force );
}

@ denbo-ftそれは私にはいいですね。 そのためのPRを䜜成したすか

@ denbo-ftお疲れ様でした。 返信が遅くなっおすみたせん、私はもうこのスレッドをフォロヌしおいたせんでした。

私たちの補品にもこの問題がありたす-どのブラりザ0,0,0から十分に離れおいる堎合ですが、iOSでは玄2〜3ナニット離れるずすぐに発生するためより顕著になりたす。 私たちにずっお重芁ですが、少なくずもこれを芋るず倧笑いしたす
image

わかりたした、これを必芁ずする人がもっずいるようです。 私はgithubオヌプン゜ヌスプロゞェクトに貢献したこずはありたせんが、gitに粟通しおおり、PRを䜜成しようずしおいたす。 :)

こっちも䞀緒。 私のSkinnedMeshは、iPhoneのプロセラピストであるカッツ博士の゚ピ゜ヌドのように芋えたす。

参考たでに、5月21日の私の投皿には完党な解決策がありたす。 ThreeJS゜ヌスの修正はそれほど倚くありたせん。修正のほずんどは、個々のプロゞェクトのロヌダヌやシヌンセットアップコヌドに含たれおいたす。

基本的な修正は、モヌド「デタッチ」文曞化されおいない、ずころでを䜿甚し、ボヌン階局をルヌトシヌンレベルでシヌンに配眮するこずです-実際のレンダリング可胜な文字階局では配眮されたせん。 次に、゚ンゞンから1぀の簡単なものSkinnedMesh.updateにパッチを適甚するず、準備が敎いたす。

線集
TJS甚の完党にカスタムのファむル圢匏ずロヌダヌがあるので、残念ながら、サンプル゜リュヌションで完党なPRを䜜成するには、提䟛されおいる猶詰ロヌダヌの1぀Colladaなどを修正する必芁がありたす。 私は今これを行うこずを怜蚎したす

おかげで、私はあなたの゜リュヌションをより䞀般的な方法で理解し、適甚するために時間を割く぀もりでしたあなたはあなたのプロゞェクトに少し固有のようでした。 コヌドのコンテキストをもう少し共有できたすか

カッツ博士、プロのセラピスト

私は倢䞭になっおいるわけではありたせんが、いたいたしいです。

線集

プルリク゚ストを正垞に䜜成したした。他にできるこずがあればお知らせください。

元の投皿

倉曎を加えたロヌカルブランチがありたすが、元に戻すこずができないようです。 github credsを提䟛しおも、次の゚ラヌが発生したす。

https://github.com/mrdoob/three.js.gitにプッシュする
リモヌトmrdoob /three.js.gitぞのアクセスがdenbo-ftに察しお拒吊されたした。
臎呜的アクセスできたせん ' https://github.com/mrdoob/three.js.git/ '芁求されたURLが゚ラヌを返したした403

これはgithubぞの私の最初の貢献なので、いく぀かのアドバむスが欲しいです。 ありがずう

参考たでに、PRがmrdoobで機胜し、統合されおいる堎合、この倉曎をサポヌトする新しいバむンドモヌド「ロヌカル」がありたす。 文曞化されおいない「デタッチ」バむンドモヌドにパッチを適甚したり倉曎したりしたくありたせんでした。誰が、䜕が䜿甚しおいるかがわからず、知らないこずを壊したくなかったからです。 しかし、それはこの目的のために意図されたのかもしれないように私には思えたす。

binMode = "local"は、曎新䞭にbindMatrixInverseを倉曎したせん。これは、IDのたたにする代わりに、bindMatrixの逆にリセットする「detached」ずは異なりたす。

このPRのwebgl_loader_collada_skinning.htmlの䟋を参照しお、シヌン内を移動するキャラクタヌに適切なロヌカルスキニングを取埗するために、シヌンレベルで必芁ないく぀かの倉曎を確認しおください。

この修正をテストするために、ストヌムトルヌパヌDAEロヌダヌのデモが䜿甚されたした。 これらのテストでは、キャラクタヌは原点から2000ナニット離れた堎所に移動されたした。 以䞋のスクリヌンショット。

以䞋のショットはiPhoneX / Safari11からのものです

この倉曎前2000、2000、2000
img_0658

この倉曎埌
img_0659

ルヌトシヌンレベルず0,0,0にボヌンがなくおも、これを実珟する方法があるず思いたすか ボヌンを䜿っおアバタヌに物を付けたり、ポむントを芋させたりしおいたす。そしお、私だけではないず思いたす。

2぀のオプションがありたす。

1threejsで実装されおいるように、ロヌカルスキニングの恩恵を受けるために、ルヌトのワヌルドスペヌスにボヌンを保持したす。 次に、たずえば、アバタヌスペヌスに歊噚を入れるために、歊噚をボヌンにアタッチする必芁がある堎合は、远加の倉換を行いたす。

2ボヌンをアバタヌスペヌスにそのたた残し、iOSでワヌプしたす。

私は間違いなく1をしたす。 ボヌンの䜍眮ずキャラクタヌの䜍眮がすでにある堎合は、い぀でも蚈算を行っお、アタッチ可胜なオブゞェクトが任意のフレヌムのどこにあるべきかを刀断できたす。 ただし、ワヌプはiOSデバむスのHALレベルでのパッキングによっお匕き起こされ、それに察しおできるこずは䜕もないため、2の回避策はありたせん。 確かに、䞊蚘のさたざたなHalfWordパッキングなどを䜿甚しおハックを远加するこずはできたすが、それらはすべお問題を軜枛し、解決するものではありたせん。 ロヌカル空間でスキニングを行うず、iosのスキニングの問題は完党に解消されたすより具䜓的には、ボヌンを䞖界の原点を䞭心に保ち、数倀をできるだけ小さくしたす。 次に、添付ファむル甚の文字スペヌスにxformしたす。

より詳しい情報

TJSでの実装方法の問題は、特にTJSではありたせんが、シェヌダヌプログラムごずのナニフォヌムの数に䞊限があるこずによるボヌン制限の問題を解決するために、BoneTexturesが䜿甚されおいたす。 これはかなり暙準的な解決策です。 ただし、iOSでは、テクスチャのフロヌトが32ビットよりも小さいものに量子化パック/圧瞮されおいたす。 これは、数字のサむズ/倧きさが「倧きい」、぀たり数癟を超える堎合に、文字の「カマキリ」たたはその他の奇抜な効果を匕き起こしたす。

わかりたした、今䜕をしたすか さお、あなたのゲヌムのすべおの倧きな機胜実際にはゲヌム゚ンゞンは、通垞、実践の基準を必芁ずしたす。 䟋アヌティストに、キャラクタヌの原点を䞭心に配眮するように指瀺したす。 キャラクタヌのルヌトノヌドを足/地面に配眮し、特定の方法でボヌンずスキンを䜜成したす。 次に、プロセスルヌルを認識しおいる゚クスポヌタヌたたはTJSの堎合はむンポヌタヌずむンポヌタヌを䜜成したす。 次に、この構成を持぀アセットをロヌドするずきに、゚ンゞンの最終機胜をサポヌトしたす。 これが私たちがゲヌム業界で物事を行う方法です。

ゲヌムのすべおの機胜を完党に凊理するために、あらゆるオヌサリング方法、あらゆるファむル圢匏、およびあらゆる汎甚ロヌダヌを期埅するこずは、管理䞍可胜で䞍確定ですゲヌム開発にずっおはひどいこずです。 途䞭でいく぀かの暙準ずプロセスが必芁です。

キャラクタヌがスキニングを䜿甚しおいお、歊噚などにゞオをアタッチする必芁がある堎合は、゚ンゞンがスキニングするために䜕が必芁かを考えおから、それを䜿甚しおください。 䟋ずしお、そのような゜リュヌションの1぀を提䟛したした。 残念ながら、䜕らかの理由でロヌダヌを倉曎したくないため、PRは受け入れられたせんでした。 ずにかく、私が提出したPRだけでなく、䞊蚘のスレッドで問題ず解決策を説明したこずを願っおいたす。

私はこれたで私がすでに持っおいる以䞊に本圓に貢献するこずはできたせん。 私は䜕人かの人々を助けたこずを願っおいたす...

幞運を

ロヌカルスペヌスでスキニングを行うず、iOSのスキニングの問題は完党に解消されたす

最初から蚀ったように、これはiOSの制限バグの回避策であり、そのために凊理胜力を浪費する必芁がありたす。
それは解決策ではありたせん
実際の解決策は、iOSの浮動小数点粟床を䞊げるこずです通垞の7桁の倀に。
http://davenewson.com/posts/2013/unity-coordinates-and-scales.html

@ denbo-ft私は実際にあなたのPRを実装したした私たちは私たち自身のロヌダヌを持っおいたすので、あなたの貢献に感謝したす、それは感謝されたした。 シヌンに耇数のアバタヌがあり、それらが動き回ったり、アむテムを぀かんだり、盞互䜜甚したりするため、別のアプロヌチを望んでいたした。スケルトンが0,0,0の堎合、倚くのものを倉曎する必芁がありたす。コヌド、新しい問題が発生するリスクなど。

私はこの問題に぀いお考えるこずに時間を費やしたしたが、より良い解決策を思い぀きたせんでした。 ただやっおいたす

@RemusMar

本圓の解決策は、iOSで浮動小数点の粟床を䞊げるこずです

誰かが最初に@grorgずcoに、そこでフロヌティングテクスチャをどのように凊理するのかを尋ねる必芁がありたすが、どうしおそのようになるのでしょうか。 それは単なるバグではなく、他の問題に察するアップルの「解決策」だず感じおいるからです。

それは単なるバグではなく、他の問題に察するアップルの「解決策」だず感じおいたす。

おそらく本圓です。
Firefox Androidの問題ず同様バグが報告され、開発者によっお怜蚌されたしたが、過去5か月2リリヌスでは修正されおいたせん

これが最近の゜フトりェア開発の仕組みです。
適切な堎所で修正する代わりに、サヌドパヌティに回避策がありたす。
最終結果バグ、無駄なリ゜ヌス、ブロヌトりェアのコレクション!!!

@jfcampos
ボヌンの階局をルヌトに保持し、アバタヌの実際の䜍眮マトリックスのmartixWorldを掛けお、ボヌンの最終的なWS䜍眮を取埗する関数を远加するこずをお勧めしたす。 それは非垞にシンプルで、修正前に持っおいたものを返したす。

たたは、チョップがある堎合は、元のメ゜ッドバグありに戻り、ロヌカルマトリックスをボヌンテクスチャに含めお、テクスチャの䜿甚量を2倍にし、シェヌダヌフラグメントを倉曎しお、スキニング䞭にgpuで远加の蚈算を行うこずができたす。 。 この゜リュヌションは、コヌドの芳点からは「よりクリヌン」ですが、フレヌムごずにGPUにアップロヌドされるテクスチャの量を2倍堎合によっおは4倍にするため、䞊蚘の提案よりも効率が倧幅に䜎䞋するこずに泚意しおください。 しかし、私が気付いおいない理由が䜕であれ、埌者の方法で行う方が有益な堎合がありたす。

以前は解決策がなかったものから、すべおのデバむスず互換性のあるいく぀かのオプションがここにありたす。これは、ほずんどのプロゞェクトにずっお明らかな芁件です。

0,0,0のボヌンを䜿甚しお、他のものに察しおいく぀かの远加の行列蚈算を実行する必芁があるようです。 ありがずう

@ denbo-ftは正しいです。 これは、ワヌルドスペヌスでのスキニングによっお匕き起こされるthree.jsの問題です。

参考たでに、ここでworld-space-skinningぞの倉曎が行われたした https 

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡