#author("2023-05-07T17:52:34+09:00","default:in_you","in_you") #author("2023-05-07T17:53:15+09:00","default:in_you","in_you") オブジェクトをMax→(FBX)→クリスタした際に、ローカル座標系のズレが発生してあらぬ場所にパーツが配置される問題。 &ref(InYou_SENSE_23-05-07 14-40-53.png); &ref(InYou_SENSE_23-05-07 14-53-01.png); *原因は、、、 [#z895f7f1] Max側の''Adjust Pivot''機能をクリスタ側が読まずに元の座標系のまま解釈してしまうせいだと思ったのだけど、~ もう一段ややこしかった。 +サンプルの自転車の場合、以下のように階層化されている。 &ref(InYou_SENSE_23-05-07 15-49-23.png);~ 各オブジェクトは外部アプリ(Blender)でモデリング→一体化された状態でOBJインポートしたものを、Max内で手動でパーツ分けしリンク階層を付けた。~ この時、元のオブジェクトは最初から座標原点上に制作されていなかったので、全パーツに''Adjust Pivot''を設定して座標位置を合わせている。((ただしリアキャリアは自分でモデリングしたので、Adjust Pivot使ってない))~ &br; +ここでクリスタ側の四面図を改めて眺めてみると、 --ルート階層にある自転車フレームは正しく座標中心に置かれ、 --その子階層にあるスプロケット、前後タイヤ、サドルが1セットになって位置ズレを起こし、 --さらにスプロケットの子である左右ペダルと、サドルの子であるキャリアが、もう一段階ズレている~ ……のが分かる。 &br; +つまり、&color(red){''Adjust Pivot''で設定された座標系の移動は、そのオブジェクトに対しては正常に機能する};が、~ &color(red){階層化された子オブジェクトには反映されずに、親の''Adjust Pivot''を無視した座標計算が行われてしまっている。};~ &br; +要するに、まずルートのフレームのピボットズレを修正することによって、子供(スプロケット・前後タイヤ・サドル)の位置が合わされ、~ さらにその子供たち(スプロケット・サドル)のピボットを修正すれば、孫(ペダル・キャリア)の位置も正しく合う、ということが分かる。 *解決策 [#c5204592] ……これが意外とメンドイ。~ とりあえず思い付いた方法を書いておくが、もっと上手いやり方あるかもしれない。 上記サンプルのフレームを例にして記述する。 +まずオブジェクトを同位置コピーし、コピーしたオブジェクトの''Adjust Pivot''は解除(''Reset Pivot'')して元のピボット位置に戻しておく。~ &ref(InYou_SENSE_23-05-07 16-51-16.png);~ &br; +コピーしたオブジェクトを、元のオブジェクトにAlignしてピボット位置を合わせる。~ &ref(InYou_SENSE_23-05-07 16-52-34.png);~ これでコピーしたオブジェクトの座標軸は欲しい位置に来るが、一方で内部のジオメトリはその分ズレてブッ飛ぶ。~ &br; +先ほど座標軸を合わせたコピーオブジェクトに、元のオブジェクトをAttachして組み込む。~ &ref(InYou_SENSE_23-05-07 16-54-10.png);~ 正しい座標軸の中に、元の位置を保持したジオメトリが内包された状態になる。~ &ref(InYou_SENSE_23-05-07 16-54-53.png);~ &br; +ズレてブッ飛んだ複製ジオメトリはもう不要なので、削除する。~ &br; +元オブジェクトの子になっていたスプロケット・前後タイヤ・サドルは親が無くなった結果それぞれルート階層に戻っているので、新しく作ったコピーオブジェクトの子階層に組み込み直す。~ &ref(InYou_SENSE_23-05-07 16-56-44.png);~ &br; +以上の手順を、孫階層を持つスプロケットとサドルに対しても繰り返す。~ &br; +修正を完了したオブジェクトをFBXエクスポートしてクリスタで読み込んだ結果。~ &ref(InYou_SENSE_23-05-07 16-56-44.png);~ &ref(InYou_SENSE_23-05-07 17-47-28.png);~ 今度は各パーツが正しい位置に配置できている。