Re: 次期Shadeに望むもの ( No.47 ) |
- 日時: 2003/07/21 12:45
- 名前: 宮田
- で、長くなるのと少しでも「次期Shadeに望むもの」という本題に戻すために‥‥(^^;
つらつらと書いてきましたが、複雑なアニメではボールジョイントは とても使い易いと思います。
ただ、現状では動きを非線形に補完させるのが面倒(数値入力のみ)なのと、 補完してもどこをどの程度補完したか確認するのがかなり面倒なので、 アニメーションを考えた場合はこのUIを使い易いものにする必要があると思います。
回転ジョイントのようなモーションカーブで確認・調整できれば最も良いと 思いますが、それが不可能な場合はせめて非線形区間のラインの色を変える とか(加速:青、減速:赤、加減速している場合、赤青半分ずつとかですね)、 太さを変えるとかの方法を考えて欲しいです。
現状のUIのまま、全て線形補完でアニメーションを行おうとすると一つの動作に 最低限、加速→定速→減速の3つの動作を入れなくてはなりませんから‥‥。
>>3軸ジョイントでも、本当にオイラー角のように形状を操作できたら、、つまり、 >>回転ジョイントをフラットジョイントのように並べて、他のジョイントには影響を与えず、 >>形状だけに影響を与えるように出来る「オイラージョイント? 」とか、 >>逆に、「3軸回転ジョイント」という”一つ”のジョイントで、「常に3軸が直行して回転する >>ジョイント」が実現できたら、かなり自由な制御が可能になりそうです。
理想としては、つるさんが書かれているこのようなジョイントができれば、アニメーションで 面倒なことを考える必要がなくなると思います。 ただ、このような操作法を見たことがありませんので、原理的に難しいものかと思っていました。
|
Re: 次期Shadeに望むもの ( No.48 ) |
- 日時: 2003/07/22 01:04
- 名前: 平山
- 参照: http://www2u.biglobe.ne.jp/~k_hiray/ps_db/search/
- >オイラー角は、物体の姿勢を、X、Y、Z軸それぞれの回転によって表すことです。(だったと思います。。)
オイラー角について、勘違いしていたようです。 固定されたX、Y、Z軸についての回転角なんですね。 回転ジョイントを内包する方式では、上層のジョイント軸が回転すると、当然下層のジョイントはねじれますね。 これは、現行のフラットジョイントを使っても同じようです。
移動−特別による回転の指定と同じ動かし方と考えていいのでしょうか。 これの場合、X→Y→Zの順番で回転させてるようですね。
>逆に、「3軸回転ジョイント」という”一つ”のジョイントで、「常に3軸が直行して回転するジョイント」>が実現できたら、かなり自由な制御が可能になりそうです。 これも、意外と簡単にできるのでは・・・ ジョイントやめろといっときながら、Shade7での、実装を期待してたりして・・・ 
|
Re: 次期Shadeに望むもの ( No.49 ) |
- 日時: 2003/07/23 02:54
- 名前: 宮田
- >>45逆に、「3軸回転ジョイント」という”一つ”のジョイントで、「常に3軸が直行して回転する
>>ジョイント」が実現できたら、かなり自由な制御が可能になりそうです。
私はTRUEWAYさんのT-BallJointを使わせて頂いているんですが、これが3軸直交回転ではないかと思います。 (違ってたらすみません。一応、こういったプラグインがあることは明記しておきます。 プラグイン作者さん間で、プラグインがかぶるかもしれませんので‥‥)
大まかな動きも数値入力もできるので結構重宝しているのですが、どうしてこういったUIを入れなかったのか 不思議です。IKのみしか考えていなかったのかもしれませんが制限がつけられない以上、静止画においても IKだけでは使いにくいと思うのですが‥‥
>>46非常に不自然(ありえない動き)になることがあります。これは、前までの動きに >>無理がかかっている場合なんです。
時間がある方はテストしてみると判ると思いますが、オイラー角でZ軸:90度→Y軸:90度→X軸:90度→Y軸:-90度で 元に戻るはずですが、最後のプロセスはジンバルロックを起こして動かせません。 Z軸:90度→Y軸:90度→X軸:90度→リセットとするしかないです。すると最後はY軸のみの回転ではなく全ての軸が 回転します。これをアニメーションさせると非常に不自然に動きます。つまり、回転ジョイントではこういった 動きはさせられず制限がでてきます。 ボールジョイントではこれが起きないのでZ軸:90度→Y軸:90度→X軸:90度→リセットとしてもY軸のみ動きますから、 アニメーションでの動きの幅が広くなります。
|
Re: 次期Shadeに望むもの ( No.50 ) |
- 日時: 2003/07/24 02:19
- 名前: 平山
- 参照: http://www2u.biglobe.ne.jp/~k_hiray/ps_db/search/
- >私はTRUEWAYさんのT-BallJointを使わせて頂いているんですが、これが3軸直交回転ではないかと思います。
検索サイトに登録してもらってるのに、知りませんでした(^^;; しかし、TRUEWAYさんところには、Shade本体で足りないところを、うまく補ってくれるような ツールがたくさんありますね。
>オイラー角でZ軸:90度→Y軸:90度→X軸:90度→Y軸:-90度で >元に戻るはずですが、最後のプロセスはジンバルロックを起こして動かせません。
Shadeの座標系では、 Z軸:90度→Y軸:90度→X軸:-90度→Y軸:-90度 とやらないと元に戻らないようですね。
話がまたそれてしまいそうな予感がしつつ、ここでちょっと確認ですが、 オイラー角が、固定された(グローバルな)X軸、Y軸、X軸に平行な回転軸についての 回転角とすると、現状のShadeの3層回転ジョイントは、上層の回転軸が回転すると、 下層の回転軸はグローバルなX軸、Y軸、X軸と平行ではなくなってしまうので、 ちょっと違うものになってしまうということでしたね。
で、素朴な疑問なんですが、ジンバルロックってどんな現象なんでしょう? いままで、ほかの軸の回転で、2つの回転軸が同一方向になってしまうと、 どっちの軸で回転しても同じように動いてしまう状態 という風に考えていたんですが、単純に考えると、常に回転軸が直交している オイラー角制御では、発生しないような気もするんですが、 実際には発生してしまう。 もっと違う原因で発生してしまうものなんでしょうか?
>ボールジョイントではこれが起きないのでZ軸:90度→Y軸:90度→X軸:90度→リセットとしてもY軸のみ動きますから、 >アニメーションでの動きの幅が広くなります。
これもちょっと確認したいんですが、
1)ボールジョイントだと、2つの回転状態から、最短距離で移動できる。 2)3軸回転ジョイントだと、それぞれの回転を最短で移動したとしても、 総合した回転の軌跡は、最短とはならず、大回りする。 3)また、その回転状態を作る各回転角度は、一通りではないため、 どういう回転角の組み合わせをしているかによって、通る軌跡が変わってしまう。 4)純粋なオイラー角による制御を行えば、2)3)も最短距離を通ることができる
というようなことがいえるんでしょうか。
|
Re: 次期Shadeに望むもの ( No.51 ) |
- 日時: 2003/07/24 18:55
- 名前: 宮田
- >で、素朴な疑問なんですが、ジンバルロックってどんな現象なんでしょう?
>いままで、ほかの軸の回転で、2つの回転軸が同一方向になってしまうと、 >どっちの軸で回転しても同じように動いてしまう状態
これで合ってるような気もするんですけど‥‥。 オイラー角って、2つの角度が決まると残りのひとつは決定されてしまい、 残りの1軸のねじれが表現できないため、ある条件下で強制的に軸のリセット をしなければならなくなるとか言うんではないでしたっけ(←自信ありませんけど 
>>50
1)は計算方法が判りませんので「直線」とは言い切れませんけど、「同一の経路を辿る」という事だと思います。 2)、3)は「同一の結果を得る異なった行列式」が存在するため、式の立て方(回転方法)によっては全ての 軸が動いてしまいますので、3が2の原因のように思います。 4)は上でも書いたジンバルロックの問題が出てくると思います。最短距離を動くには「ある点からある点までの 変換が一律」でなければならないと思いますけど、オイラー角の場合、ある時点までの変換が一律でないため、 さらに次の点への変換が一律に決まらないのではないでしょうか。
こういった勉強をしなくなって久しいので大きな誤解をしているかもしれません。 詳しい方がいらっしゃったら私も教えていただきたいです(^^;;
|
Re: 次期Shadeに望むもの ( No.52 ) |
- 日時: 2003/07/24 20:35
- 名前: つる
- 参照: http://homepage3.nifty.com/STEP/
- えーと、私も、自信なくなってしまったので、
ネットでいろいろ探したのですが、 オイラー角やジンバルロックについて明確な定義をしている文献にはあたりませんでした・・・
ただ、ジンバルロックというのは、航空機などのジャイロで生じる問題で、 円盤が3つ繋がっていて、それぞれが回転するような機器で、 回転しているうちに、回転軸が重なってしまうことだそうです。 (宇宙系のテーマパークにある、人が載って、ぐるぐる回って、無重力!とかいう機械ですね。。) これは、つまり、Shadeの回転ジョイントを内包させる機構で起こ問題です。
気になったのは、オイラー角は、X軸、Y軸、Z軸による回転というのは確からしいのですが、 回転ジョイントの入れ子構造も、それぞれのローカル座標においては、ローカル軸と同じ軸で回転してるわけですから、、 ローカル軸においては、オイラー角で回転してるんですね・・・ こういうのをオイラー角というのかどうかは不明です。。
この、軸が重なる現象以外にも、ネットでジンバルロックと呼ばれている現象はあるみたいですが・・・ グローバルな、常に直行した3軸でオイラー角による制御でも、プログラミングの仕方によっては、ジンバルロックのような、意図せず起こる不具合があって、そういうのも、ジンバルロックと呼んでる人も、(ネットでは)いるみたいです。
>>オイラー角でZ軸:90度→Y軸:90度→X軸:90度→Y軸:-90度で >>元に戻るはずですが、最後のプロセスはジンバルロックを起こして動かせません。 >Shadeの座標系では、 >Z軸:90度→Y軸:90度→X軸:-90度→Y軸:-90度 >とやらないと元に戻らないようですね。
オイラー角というのが、グローバルな軸による回転という意味なら、平山さんのいう通りに回転させないと無理です。 これは、Shadeに限らず、どんな座標系でも同じです。 回転ジョイントでの話しでしたら、例の通り、回転ジョイントの入れ子構造の順番によって、どこでジンバルロックを起こすかはまちまちです。といいますか、回転ジョイントを1個だけ内包する回転ジョイントを90度回転させると、必ず、回転軸は絶対に重なってしまうので、その状態での回転の自由度は減ってしまいます。このことをジンバルロックというみたいです。
平山さんの、1)〜4)ですが、 1)〜3)はだいたいそういう理解でいいと思います。 (だいたいと言ったのは、細かい用語について的確な定義があいまいなので、正確に述べるには数学的な式が必要になると思うためです。)
4)は、どうなんでしょう。。。できそうな気もするんですが・・・
以下、グローバルな3軸によるオイラー角の回転で、任意軸による回転を行う方法です。 まず、回転軸をグローバルなZ軸と重なるように、グローバルなX、Y軸で回転させます。 Z軸で回転させます。 先ほどとは逆に、Y軸、X軸の順番に、逆回転させます。 これだけです。 すべて、オイラー角による回転ですが、ボールジョイントと全く同じ回転が出来ます。
|
Re: 次期Shadeに望むもの ( No.53 ) |
- 日時: 2003/07/25 17:35
- 名前: 宮田
- テスト用のジンバル(羅針盤)形状です。確かこんな感じの物ですよね。
http://www.ff.iij4u.or.jp/~hrmiyata/tes/gimbal.zip (ShadeR5 data、Zip圧縮、26KB)
最内の枠(Y回転)を選択し、側面図でZ回転でのIKを行うと中にある矢印の小さい方が、あちこちを向くのが判ると 思います(同方向を向いた時のねじれが無数にあります)。 で、(Z軸回転の再外郭の輪と)3軸が同一平面上になった場合、急激にねじれが変化する場合があります(小さい 矢印が急激に反対方向を向きます。モーションをいれてあるのでプレビューしてみると最内の枠が急激に半回転 します)。確か、これがジンバルロックですよね(^^;
>>52グローバルな、常に直行した3軸でオイラー角による制御でも、プログラミングの仕方によっては、ジンバルロック >>のような、意図せず起こる不具合があって、そういうのも、ジンバルロックと呼んでる人も、(ネットでは)いる >>みたいです。
行列式は交換法則が成り立たないため、計算手順によっては計算中に上記の状況を作ってしまうということでは ないでしょうか。 これは同一の方向を示す回転手順が無数にあるということに原因しているような気がします。
|
Re: 次期Shadeに望むもの ( No.54 ) |
- 日時: 2003/07/25 18:29
- 名前: つる
- 参照: http://homepage3.nifty.com/STEP/
- そうですね
自分の書き込み >回転軸が重なってしまうことだそうです。 平面上に乗るだけで、自由度が減ってしまいますよね・・
|
Re: 次期Shadeに望むもの ( No.55 ) |
- 日時: 2003/07/25 19:42
- 名前: 平山
- 参照: http://www2u.biglobe.ne.jp/~k_hiray/ps_db/search/
- 私もちょっと実験してみました。
http://www2u.biglobe.ne.jp/~k_hiray/tmp/kaiten/kaiten.html
で、わかったことは・・・
回転ってややこしい 
>1)ボールジョイントだと、2つの回転状態から、最短距離で移動できる。 >2)3軸回転ジョイントだと、それぞれの回転を最短で移動したとしても、 > 総合した回転の軌跡は、最短とはならず、大回りする。 >3)また、その回転状態を作る各回転角度は、一通りではないため、 > どういう回転角の組み合わせをしているかによって、通る軌跡が変わってしまう。 >4)純粋なオイラー角による制御を行えば、2)3)も最短距離を通ることができる
についていえば、2)、3)は何となくわかったものの、 1)についてはShadeの場合、必ずしもそうなっていないようですね。
単なるベクトルだったら、2つのベクトルを補間すると、最短ルートを通りそうなんですが、 ベクトルを軸とする回転が加わると、オイラー角と同じように大回りしてるってかんじですね。 それがクウォーターニオンの性質なんでしょうか、 それともShadeのボールジョイントは違う方法で制御してるんでしょうか。
|
Re: 次期Shadeに望むもの ( No.56 ) |
- 日時: 2003/07/26 00:09
- 名前: 宮田
- >>54自分の書き込み
>>>回転軸が重なってしまうことだそうです。 >>平面上に乗るだけで、自由度が減ってしまいますよね・・
多分そういったことだと思います。 3軸が同一平面上にない場合自由度は3ありますが、3つ重なってしまうと1になってしまうので、移動中 この状況が起きると3軸のどれかが強制的に変更させられることになるのではないでしょうか。
>>55で、わかったことは・・・ >>回転ってややこしい
同感です(笑) 私はプログラムには無知なのでよく理解できませんが、プログラマの方はよくこんな面倒なことを考えられると 思います
>>単なるベクトルだったら、2つのベクトルを補間すると、最短ルートを通りそうなんですが、 >>ベクトルを軸とする回転が加わると、オイラー角と同じように大回りしてるってかんじですね。
これはベクトル自体に三角関数(クォータリオンの場合虚数)が入っているので、a→a'の変換過程で1次式ではなく 高次の式になるか、サインカーブの合成のような経路をとるのではないかと思っていました‥‥ 全然違ってるかもしれませんので、眉唾で読んでください(^^;
|